/**
  * Loops over all the table names in the array and extracts schema
  * information.
  *
  * This method extracts information about a database's schema from the
  * database itself and returns this schema as an ezcDbSchema object.
  *
  * @param array(string) $tables
  * @return ezcDbSchema
  */
 protected function processSchema(array $tables)
 {
     $schemaDefinition = array();
     array_walk($tables, create_function('&$item,$key', '$item = $item[0];'));
     // strip out the prefix and only return tables with the prefix set.
     $prefix = ezcDbSchema::$options->tableNamePrefix;
     foreach ($tables as $tableName) {
         $tableNameWithoutPrefix = substr($tableName, strlen($prefix));
         // Process table if there was no prefix, or when a prefix was
         // found. In the latter case the prefix would be missing from
         // $tableNameWithoutPrefix due to the substr() above, and hence,
         // $tableName and $tableNameWithoutPrefix would be different.
         if ($prefix === '' || $tableName !== $tableNameWithoutPrefix) {
             $fields = $this->fetchTableFields($tableName);
             $indexes = $this->fetchTableIndexes($tableName);
             $schemaDefinition[$tableNameWithoutPrefix] = ezcDbSchema::createNewTable($fields, $indexes);
         }
     }
     return $schemaDefinition;
 }
Example #2
0
 /**
  * Extracts information about a table from the XML element $table
  * 
  * @param SimpleXMLElement $table
  *
  * @return ezcDbSchemaTable or an inherited class
  */
 private function parseTable(SimpleXMLElement $table)
 {
     $fields = array();
     $indexes = array();
     foreach ($table->declaration->field as $field) {
         $fieldName = (string) $field->name;
         $fields[$fieldName] = $this->parseField($field);
     }
     foreach ($table->declaration->index as $index) {
         $indexName = (string) $index->name;
         $indexes[$indexName] = $this->parseIndex($index);
     }
     return ezcDbSchema::createNewTable($fields, $indexes);
 }