示例#1
0
 /**
  * $tableName is used by constraint keys.
  */
 protected function loadFromCache($schema, $itemType, $itemName, $tableName = null)
 {
     if ($tableName) {
         if (isset($this->constraintKeys[$schema][$tableName][$itemName])) {
             return;
         }
     } else {
         $prop = $this->keyToProperty($itemType);
         if (isset($this->{$prop}[$schema][$itemName])) {
             return;
         }
     }
     $key = $this->cacheKey($schema . '.' . $itemType . '.' . $itemName);
     $data = $this->cache()->read($key);
     if (!$data) {
         $this->loadAndCache($schema, $itemType, $itemName, $key, $tableName);
     } else {
         switch ($itemType) {
             case 'tb':
                 $object = new ZfObject\TableObject($data['name']);
                 $this->setTableData($object, $data);
                 break;
             case 'vw':
                 $object = new ZfObject\ViewObject($data['name']);
                 $object->setViewDefinition($data['viewDefinition']);
                 $object->setCheckOption($data['checkPption']);
                 $object->setIsUpdatable($data['isUpdatable']);
                 $this->setTableData($object, $data);
                 break;
             case 'ck':
                 $object = new ZfObject\TriggerObject();
                 $object->setOrdinalPosition($data['ordinalPosition']);
                 $object->setReferencedTableSchema($data['referencedTableSchema']);
                 $object->setForeignKeyUpdateRule($data['updateRule']);
                 $object->setForeignKeyDeleteRule($data['deleteRule']);
                 $object->setReferencedTableName($data['referencedTableName']);
                 $object->setReferencedColumnName($data['referencedColumnName']);
                 break;
             case 'tr':
                 $object = new ZfObject\ConstraintKeyObject();
                 $object->setName($data['name']);
                 $object->setEventManipulation($data['eventManipulation']);
                 $object->setEventObjectCatalog($data['eventObjectCatalog']);
                 $object->setEventObjectSchema($data['eventObjectSchema']);
                 $object->setEventObjectTable($data['eventObjectTable']);
                 $object->setActionOrder($data['actionOrder']);
                 $object->setActionCondition($data['actionCondition']);
                 $object->setActionStatement($data['actionStatement']);
                 $object->setActionOrientation($data['actionOrientation']);
                 $object->setActionTiming($data['actionTiming']);
                 $object->setActionReferenceOldTable($data['actionReferenceOldTable']);
                 $object->setActionReferenceNewTable($data['actionReferenceNewTable']);
                 $object->setActionReferenceOldRow($data['actionReferenceOldRow']);
                 $object->setActionReferenceNewRow($data['actionReferenceNewRow']);
                 $object->setCreated($data['created']);
                 break;
         }
         $this->setItem($object, $schema, $itemType, $itemName, $tableName);
     }
 }
示例#2
0
 /**
  * Get constraint keys
  *
  * @param  string $constraint
  * @param  string $table
  * @param  string $schema
  * @return array
  */
 public function getConstraintKeys($constraint, $table, $schema = null)
 {
     if ($schema === null) {
         $schema = $this->defaultSchema;
     }
     $this->loadConstraintData($table, $schema);
     // organize references first
     $references = array();
     foreach ($this->data['constraint_references'][$schema] as $refKeyInfo) {
         if ($refKeyInfo['constraint_name'] == $constraint) {
             $references[$refKeyInfo['constraint_name']] = $refKeyInfo;
         }
     }
     $keys = array();
     foreach ($this->data['constraint_keys'][$schema] as $constraintKeyInfo) {
         if ($constraintKeyInfo['table_name'] == $table && $constraintKeyInfo['constraint_name'] === $constraint) {
             $keys[] = $key = new Object\ConstraintKeyObject($constraintKeyInfo['column_name']);
             $key->setOrdinalPosition($constraintKeyInfo['ordinal_position']);
             if (isset($references[$constraint])) {
                 //$key->setReferencedTableSchema($constraintKeyInfo['referenced_table_schema']);
                 $key->setForeignKeyUpdateRule($references[$constraint]['update_rule']);
                 $key->setForeignKeyDeleteRule($references[$constraint]['delete_rule']);
                 //$key->setReferencedTableSchema($references[$constraint]['referenced_table_schema']);
                 $key->setReferencedTableName($references[$constraint]['referenced_table_name']);
                 $key->setReferencedColumnName($references[$constraint]['referenced_column_name']);
             }
         }
     }
     return $keys;
 }
示例#3
0
    /**
     * Get constraint keys
     * 
     * @param  string $constraint
     * @param  string $table
     * @param  string $schema
     * @param  string $database
     * @return Object\ConstraintKeyObject 
     */
    public function getConstraintKeys($constraint, $table, $schema = null)
    {
        if ($this->constraintData == null) {
            $this->loadConstraintData();
        }

        $found = false;
        foreach ($this->constraintData as $tableName => $constraints) {
            foreach ($constraints as $constraintData) {
                if ($tableName == $table && $constraintData['name'] == $constraint) {
                    $found = $constraintData;
                    break 2;
                }
            }
        }

        if (!$found) {
            throw new \Exception('invalid constraint, or constraint not found');
        }

        $keys = array();
        foreach ($found['keys'] as $keyData) {
            $keys[] = $key = new Object\ConstraintKeyObject($keyData['column']);
            if ($found['type'] == 'FOREIGN KEY') {
                $key->setReferencedTableName($keyData['referenced_table']);
                $key->setReferencedColumnName($keyData['referenced_column']);
                $key->setForeignKeyUpdateRule($keyData['update_rule']);
                $key->setForeignKeyDeleteRule($keyData['delete_rule']);
            }
        }

        return $keys;
    }