83 public function __construct($tableName, array $columns=array(), array $indexes=array(), array $fkConstraints=array(), $idGeneratorType = 0, array $options=array())
85 if (strlen($tableName) == 0) {
90 $this->_idGeneratorType = $idGeneratorType;
92 foreach ($columns AS $column) {
96 foreach ($indexes AS $idx) {
100 foreach ($fkConstraints AS $constraint) {
104 $this->_options = $options;
112 $this->_schemaConfig = $schemaConfig;
121 return $this->_schemaConfig->getMaxIdentifierLength();
136 $primaryKey = $this->_createIndex($columns, $indexName ?:
"primary",
true,
true);
138 foreach ($columns AS $columnName) {
140 $column->setNotnull(
true);
151 public function addIndex(array $columnNames, $indexName =
null)
153 if($indexName ==
null) {
159 return $this->_createIndex($columnNames, $indexName,
false,
false);
170 if ($indexName ==
null) {
176 return $this->_createIndex($columnNames, $indexName,
true,
false);
189 if ($index->spansColumns($columnsNames)) {
204 private function _createIndex(array $columnNames, $indexName, $isUnique, $isPrimary)
206 if (preg_match(
'(([^a-zA-Z0-9_]+))', $indexName)) {
210 foreach ($columnNames AS $columnName => $indexColOptions) {
211 if (is_numeric($columnName) && is_string($indexColOptions)) {
212 $columnName = $indexColOptions;
219 $this->
_addIndex(
new Index($indexName, $columnNames, $isUnique, $isPrimary));
229 public function addColumn($columnName, $typeName, array $options=array())
231 $column =
new Column($columnName, Type::getType($typeName), $options);
246 $column = $this->
getColumn($oldColumnName);
249 $column->_setName($newColumnName);
263 $column->setOptions($options);
275 $columnName = strtolower($columnName);
277 unset($this->_columns[$columnName]);
293 public function addForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
327 if ($foreignTable instanceof
Table) {
328 $foreignTableName = $foreignTable->getName();
330 foreach ($foreignColumnNames AS $columnName) {
331 if ( ! $foreignTable->hasColumn($columnName)) {
336 $foreignTableName = $foreignTable;
339 foreach ($localColumnNames AS $columnName) {
346 $localColumnNames, $foreignTableName, $foreignColumnNames, $name, $options
360 $this->_options[$name] = $value;
369 $columnName = $column->
getName();
370 $columnName = strtolower($columnName);
372 if (isset($this->_columns[$columnName])) {
376 $this->_columns[$columnName] = $column;
388 foreach ($this->_indexes AS $existingIndex) {
394 $indexName = $indexCandidate->
getName();
395 $indexName = strtolower($indexName);
397 if (isset($this->_indexes[$indexName]) || ($this->_primaryKeyName !=
false && $indexCandidate->
isPrimary())) {
402 foreach ($this->_indexes AS $idxKey => $existingIndex) {
403 if ($indexCandidate->
overrules($existingIndex)) {
404 unset($this->_indexes[$idxKey]);
409 $this->_primaryKeyName = $indexName;
412 $this->_indexes[$indexName] = $indexCandidate;
423 if(strlen($constraint->
getName())) {
424 $name = $constraint->
getName();
427 array_merge((array)$this->
getName(), $constraint->
getLocalColumns()),
"fk", $this->_getMaxIdentifierLength()
430 $name = strtolower($name);
432 $this->_fkConstraints[$name] = $constraint;
447 $constraintName = strtolower($constraintName);
448 return isset($this->_fkConstraints[$constraintName]);
457 $constraintName = strtolower($constraintName);
462 return $this->_fkConstraints[$constraintName];
475 if ($this->
hasIndex($this->_primaryKeyName)) {
480 $fkCols = array_merge($fkCols, $fk->getColumns());
482 $colNames = array_unique(array_merge($pkCols, $fkCols, array_keys($columns)));
484 uksort($columns,
function($a, $b) use($colNames) {
485 return (array_search($a, $colNames) >= array_search($b, $colNames));
499 $columnName = strtolower($columnName);
500 return isset($this->_columns[$columnName]);
511 $columnName = strtolower($columnName);
516 return $this->_columns[$columnName];
524 return $this->
getIndex($this->_primaryKeyName);
533 $indexName = strtolower($indexName);
534 return (isset($this->_indexes[$indexName]));
543 $indexName = strtolower($indexName);
547 return $this->_indexes[$indexName];
570 return isset($this->_options[$name]);
575 return $this->_options[$name];
608 foreach ($this->_columns AS $k => $column) {
609 $this->_columns[$k] = clone $column;
611 foreach ($this->_indexes AS $k => $index) {
612 $this->_indexes[$k] = clone $index;
614 foreach ($this->_fkConstraints AS $k => $fk) {
615 $this->_fkConstraints[$k] = clone $fk;
616 $this->_fkConstraints[$k]->setLocalTable($this);
static invalidTableName($tableName)
_generateIdentifierName($columnNames, $postfix='', $maxSize=30)
setLocalTable(Table $table)
isFullfilledBy(Index $other)
static indexAlreadyExists($indexName, $table)
static indexNameInvalid($indexName)
static columnAlreadyExists($tableName, $columnName)
static columnDoesNotExist($columnName, $table)
static indexDoesNotExist($indexName, $table)
static foreignKeyDoesNotExist($fkName, $table)
__construct($tableName, array $columns=array(), array $indexes=array(), array $fkConstraints=array(), $idGeneratorType=0, array $options=array())
addColumn($columnName, $typeName, array $options=array())
getForeignKey($constraintName)
addForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
changeColumn($columnName, array $options)
_addForeignKeyConstraint(ForeignKeyConstraint $constraint)
setPrimaryKey(array $columns, $indexName=false)
columnsAreIndexed(array $columnsNames)
addIndex(array $columnNames, $indexName=null)
_addIndex(Index $indexCandidate)
addUnnamedForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
hasForeignKey($constraintName)
setSchemaConfig(SchemaConfig $schemaConfig)
addNamedForeignKeyConstraint($name, $foreignTable, array $localColumnNames, array $foreignColumnNames, array $options=array())
renameColumn($oldColumnName, $newColumnName)
addUniqueIndex(array $columnNames, $indexName=null)
_getMaxIdentifierLength()
_addColumn(Column $column)
acceptIndex(Table $table, Index $index)
acceptColumn(Table $table, Column $column)
acceptTable(Table $table)
acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint)