/** * 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; }
/** * 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); }