This page shows the usage of the metaObjectStructure in various situations.
The following complex example shows the additional functionality of updating indexes, as well as chaining methods
$dict = NewDataDictionary($db); $t = new metaObjectStructure($dict,'test'); $t->addAttribute('ENGINE INNODB','mysql'); $t->addColumnObject('COL1','I'); $t->addColumnObject('COL1','I') ->addAttribute('NOTNULL'); $c = $t->addColumnObject('COL2','C(64)'); $c->addAttribute('NOTNULL'); $i = $t->addIndexObject('CIDX'); $ii = $i->addIndexItemObject('COL1'); $t->addColumnObject('COL1','C(32)') ->addAttribute('NOTNULL') ->addAttribute(array('DEFAULT'=>'abc')); $t->addColumnObject('COL2','I') ->addAttribute('NOTNULL') ->addAttribute('PRIMARY') ->addAttribute('AUTO'); $t->addColumnObject('COL3','N(12.2)'); $t->addColumnObject('COL4','C(64)') ->addAttribute(array('CHARACTER SET'=>'"ascii"')) ->addAttribute(array('COLLATE'=>'"latin1_swedish_ci"'),'mysql'); $t->addColumnObject('COL5',"ENUM('cats','dogs','fish')"); $t->addColumnObject('COL6','T') ->addAttribute('DEFTIMESTAMP'); $t->addColumnObject('COL7','D') ->addAttribute('DEFDATE'); $t->addIndexObject('COL4-INDEX') ->addIndexItem('COL4') ->addAttribute('ASC'); $t->addIndexObject('COL4-INDEX') ->addIndexItem('COL5'); $sql = $dict->createTableSql($tabledef); print_r($sql);
Returns:
Array ( [0] => CREATE TABLE test ( COL1 C(32) NOT NULL DEFAULT 'abc', COL2 I NOT NULL AUTO-INCREMENT, COL3 N(12.2), COL4 C(64) CHARACTER SET "ascii" COLLATE "latin1_swedish_ci", COL5 ENUM('cats','dogs','fish'), COL6 T DEFAULT NOW(), COL7 D DEFAULT CURDATE(), PRIMARY KEY (COL2) ) ENGINE INNODB [1] => ALTER TABLE test ADD INDEX CIDX (COL1) [2] => ALTER TABLE test ADD INDEX `COL4-INDEX` (`COL4 ASC`, COL5) )
The code above identifies a bug in addIndexSql where the column is incorrectly quoted if an attribute is added
The object can be passed to the following ADOdb methods
Note that multiple indexes can be created in the same command when used this way
$t = new metaObjectStructure($dict,'employees'); $t->addIndexObject('bd-idx') ->addIndexItemObject('birth_date')->addAttribute('ASC'); $sqlarray = $dict->createIndexSql($t);
$t = new metaObjectStructure($dict,'employees'); $t->addIndeObject('bd-idx'); $sqlarray = $dict->dropIndexSql($t);
$t = new metaObjectStructure($dict,'employees'); $t->addColumnObject('COL','C(32)'); $sqlarray = $dict->addColumnSql($t);
$t = new metaObjectStructure($dict,'employees'); $t->addColumnObject('COL','C(32)'); $sqlarray = $dict->alterColumnSql($t);
$t = new metaObjectStructure($dict,'employees'); $t->addColumnObject('COL','C(32)'); $sqlarray = $dict->dropColumnSql($t);
$t = new metaObjectStructure($dict,'employees'); $sqlarray = $dict->dropTableSql($t);
$t = new metaObjectStructure($dict,'employees'); $t->setNewName('new-column'); $sqlarray = $dict->renameTableSql($t);