Example #1
0
 /** @return Am_DbSync_Table */
 static function createFromXml(SimpleXmlElement $table)
 {
     $t = new self((string) $table['name']);
     $t->oldNames = array_filter(array_map('trim', explode(",", $table["rename"])));
     foreach ($table->field as $field) {
         $t->addField(Am_DbSync_Field::createFromXml($field));
     }
     foreach ($table->index as $index) {
         $t->addIndex(Am_DbSync_Index::createFromXml($index));
     }
     foreach ($table->alter as $alter) {
         foreach ($alter->drop as $drop) {
             if ((string) $drop['field']) {
                 $t->addDropField((string) $drop['field']);
             }
             if ((string) $drop['index']) {
                 $t->addDropIndex((string) $drop['index']);
             }
         }
     }
     // check oldnames
     $fieldNames = array_keys($t->getFields());
     foreach ($t->getFields() as $field) {
         if ($field->getOldNames() && ($intersect = array_intersect($fieldNames, $field->getOldNames()))) {
             throw new Exception("XML file error - attempt to rename a field defined in schema /scheme/table[{$t->name}]/field=[{$intersect[0]}] to [{$field->getName()}]");
         }
     }
     $indexNames = array_keys($t->getIndexes());
     foreach ($t->getIndexes() as $index) {
         if ($index->getOldNames() && ($intersect = array_intersect($indexNames, $index->getOldNames()))) {
             throw new Exception("XML file error - attempt to rename an index defined in schema /scheme/table[{$t->name}]/index=[{$intersect[0]}] to [{$index->getName()}]");
         }
     }
     // create by data
     if ($table->data && $table->data->query) {
         foreach ($table->data->query as $query) {
             $t->data[] = (string) $query;
         }
     }
     // create by table_data
     if ($table->table_data && $table->table_data->row) {
         foreach ($table->table_data->row as $row) {
             $record = array();
             foreach ($row->field as $field) {
                 $record[(string) $field['name']] = (string) $field;
             }
             $t->data[] = $record;
         }
     }
     return $t;
 }