/** * Format table keys (primary, unique and foreign) and indexes. * * @param \Titon\Db\Driver\Schema $schema * @return string */ public function formatTableKeys(Schema $schema) { $keys = []; if ($primary = $schema->getPrimaryKey()) { $keys[] = $this->formatTablePrimary($primary); } foreach ($schema->getUniqueKeys() as $unique) { $keys[] = $this->formatTableUnique($unique); } foreach ($schema->getForeignKeys() as $foreign) { $keys[] = $this->formatTableForeign($foreign); } $keys = array_filter($keys); if ($keys) { return ",\n" . implode(",\n", $keys); } return ''; }
public function testFormatTableKeys() { $schema = new Schema('foobar'); $schema->addUnique('primary'); $expected = ',\\nUNIQUE KEY (`|\\")?primary(`|\\")? \\((`|\\")?primary(`|\\")?\\)'; $this->assertRegExp('/' . $expected . '/', $this->object->formatTableKeys($schema)); $schema->addUnique('unique', ['constraint' => 'uniqueSymbol']); $expected .= ',\\nCONSTRAINT (`|\\")?uniqueSymbol(`|\\")? UNIQUE KEY (`|\\")?unique(`|\\")? \\((`|\\")?unique(`|\\")?\\)'; $this->assertRegExp('/' . $expected . '/', $this->object->formatTableKeys($schema)); $schema->addForeign('fk1', 'users.id'); $expected .= ',\\nFOREIGN KEY \\((`|\\")?fk1(`|\\")?\\) REFERENCES (`|\\")?users(`|\\")?\\((`|\\")?id(`|\\")?\\)'; $this->assertRegExp('/' . $expected . '/', $this->object->formatTableKeys($schema)); $schema->addForeign('fk2', ['references' => 'posts.id', 'onUpdate' => Dialect::SET_NULL, 'onDelete' => Dialect::NO_ACTION]); $expected .= ',\\nFOREIGN KEY \\((`|\\")?fk2(`|\\")?\\) REFERENCES (`|\\")?posts(`|\\")?\\((`|\\")?id(`|\\")?\\) ON UPDATE SET NULL ON DELETE NO ACTION'; $this->assertRegExp('/' . $expected . '/', $this->object->formatTableKeys($schema)); }