Example #1
0
 /**
  * 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 '';
 }
Example #2
0
 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));
 }