Exemple #1
0
 /**
  * Add one key to the table, allowing to specify the desired  order
  * If it's not specified, then the key is added at the end
  * @param xmldb_key $key
  * @param xmldb_object $after
  */
 public function addKey($key, $after = null)
 {
     // Detect duplicates first
     if ($this->getKey($key->getName())) {
         throw new coding_exception('Duplicate key ' . $key->getName() . ' specified in table ' . $this->getName());
     }
     // Make sure there are no indexes with the key column specs because they would collide.
     $newfields = $key->getFields();
     $allindexes = $this->getIndexes();
     foreach ($allindexes as $index) {
         $fields = $index->getFields();
         if ($fields === $newfields) {
             throw new coding_exception('Index ' . $index->getName() . ' collides with key' . $key->getName() . ' specified in table ' . $this->getName());
         }
     }
     // Calculate the previous and next keys
     $prevkey = null;
     $nextkey = null;
     if (!$after) {
         $allkeys = $this->getKeys();
         if (!empty($allkeys)) {
             end($allkeys);
             $prevkey = $allkeys[key($allkeys)];
         }
     } else {
         $prevkey = $this->getKey($after);
     }
     if ($prevkey && $prevkey->getNext()) {
         $nextkey = $this->getKey($prevkey->getNext());
     }
     // Set current key previous and next attributes
     if ($prevkey) {
         $key->setPrevious($prevkey->getName());
         $prevkey->setNext($key->getName());
     }
     if ($nextkey) {
         $key->setNext($nextkey->getName());
         $nextkey->setPrevious($key->getName());
     }
     // Some more attributes
     $key->setLoaded(true);
     $key->setChanged(true);
     // Add the new key
     $this->keys[] = $key;
     // Reorder the keys
     $this->orderKeys($this->keys);
     // Recalculate the hash
     $this->calculateHash(true);
     // We have one new field, so the table has changed
     $this->setChanged(true);
 }
Exemple #2
0
    /**
     * Add one key to the table, allowing to specify the desired  order
     * If it's not specified, then the key is added at the end
     * @param xmldb_key $key
     * @param xmldb_object $after
     */
    public function addKey($key, $after=null) {

        // Detect duplicates first
        if ($this->getKey($key->getName())) {
            throw new coding_exception('Duplicate key '.$key->getName().' specified in table '.$this->getName());
        }

        // Calculate the previous and next keys
        $prevkey = null;
        $nextkey = null;

        if (!$after) {
            $allkeys = $this->getKeys();
            if (!empty($allkeys)) {
                end($allkeys);
                $prevkey = $allkeys[key($allkeys)];
            }
        } else {
            $prevkey = $this->getKey($after);
        }
        if ($prevkey && $prevkey->getNext()) {
            $nextkey = $this->getKey($prevkey->getNext());
        }

        // Set current key previous and next attributes
        if ($prevkey) {
            $key->setPrevious($prevkey->getName());
            $prevkey->setNext($key->getName());
        }
        if ($nextkey) {
            $key->setNext($nextkey->getName());
            $nextkey->setPrevious($key->getName());
        }
        // Some more attributes
        $key->setLoaded(true);
        $key->setChanged(true);
        // Add the new key
        $this->keys[] = $key;
        // Reorder the keys
        $this->orderKeys($this->keys);
        // Recalculate the hash
        $this->calculateHash(true);
        // We have one new field, so the table has changed
        $this->setChanged(true);
    }