remove db prefix

This commit is contained in:
Dennis Eichhorn 2020-03-12 18:11:04 +01:00
parent b2f17234fa
commit 3439fd57ff
17 changed files with 99 additions and 109 deletions

View File

@ -40,16 +40,6 @@ abstract class ConnectionAbstract implements ConnectionInterface
*/ */
protected $con = null; protected $con = null;
/**
* Database prefix.
*
* The database prefix name for unique table names
*
* @var string
* @since 1.0.0
*/
public string $prefix = '';
/** /**
* Database data. * Database data.
* *
@ -126,18 +116,6 @@ abstract class ConnectionAbstract implements ConnectionInterface
return (int) $this->dbdata['port'] ?? 0; return (int) $this->dbdata['port'] ?? 0;
} }
/**
* Get table prefix.
*
* @return string
*
* @since 1.0.0
*/
public function getPrefix() : string
{
return $this->prefix;
}
/** /**
* Object destructor. * Object destructor.
* *

View File

@ -47,20 +47,10 @@ abstract class ConnectionAbstract implements ConnectionInterface
*/ */
public \PDO $con; public \PDO $con;
/**
* Database prefix.
*
* The database prefix name for unique table names
*
* @var string
* @since 1.0.0
*/
public string $prefix = '';
/** /**
* Database data. * Database data.
* *
* @var array{db:string, database:string, prefix:string}|array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} * @var array{db:string, database:string}|array{db:string, host:string, port:int, login:string, password:string, database:string}
* @since 1.0.0 * @since 1.0.0
*/ */
protected array $dbdata; protected array $dbdata;
@ -149,18 +139,6 @@ abstract class ConnectionAbstract implements ConnectionInterface
return (int) ($this->dbdata['port'] ?? 0); return (int) ($this->dbdata['port'] ?? 0);
} }
/**
* Get table prefix.
*
* @return string
*
* @since 1.0.0
*/
public function getPrefix() : string
{
return $this->prefix;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -180,7 +158,7 @@ abstract class ConnectionAbstract implements ConnectionInterface
/** /**
* Connect to database * Connect to database
* *
* @param null|array{db:string, database:string, prefix:string}|array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param null|array{db:string, database:string}|array{db:string, host:string, port:int, login:string, password:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @return void * @return void
* *

View File

@ -41,7 +41,7 @@ final class ConnectionFactory
* *
* Overwrites current connection if existing * Overwrites current connection if existing
* *
* @param array{db:string, database:string, prefix:string}|array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param array{db:string, database:string}|array{db:string, host:string, port:int, login:string, password:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @return ConnectionAbstract * @return ConnectionAbstract
* *

View File

@ -38,7 +38,7 @@ final class MysqlConnection extends ConnectionAbstract
* *
* Creates the database object and overwrites all default values. * Creates the database object and overwrites all default values.
* *
* @param array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param array{db:string, host:string, port:int, login:string, password:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @since 1.0.0 * @since 1.0.0
*/ */

View File

@ -38,7 +38,7 @@ final class PostgresConnection extends ConnectionAbstract
* *
* Creates the database object and overwrites all default values. * Creates the database object and overwrites all default values.
* *
* @param array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param array{db:string, host:string, port:int, login:string, password:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @since 1.0.0 * @since 1.0.0
*/ */

View File

@ -38,7 +38,7 @@ final class SQLiteConnection extends ConnectionAbstract
* *
* Creates the database object and overwrites all default values. * Creates the database object and overwrites all default values.
* *
* @param array{db:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param array{db:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @since 1.0.0 * @since 1.0.0
*/ */
@ -60,7 +60,7 @@ final class SQLiteConnection extends ConnectionAbstract
/** /**
* Connect to database * Connect to database
* *
* @param null|array{db:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param null|array{db:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @return void * @return void
* *

View File

@ -38,7 +38,7 @@ final class SqlServerConnection extends ConnectionAbstract
* *
* Creates the database object and overwrites all default values. * Creates the database object and overwrites all default values.
* *
* @param array{db:string, host:string, port:int, login:string, password:string, database:string, prefix:string} $dbdata the basic database information for establishing a connection * @param array{db:string, host:string, port:int, login:string, password:string, database:string} $dbdata the basic database information for establishing a connection
* *
* @since 1.0.0 * @since 1.0.0
*/ */

View File

@ -16,6 +16,7 @@ namespace phpOMS\DataStorage\Database\Query;
use phpOMS\DataStorage\Database\BuilderAbstract; use phpOMS\DataStorage\Database\BuilderAbstract;
use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract;
use phpOMS\Algorithm\Graph\DependencyResolver;
/** /**
* Database query builder. * Database query builder.
@ -28,12 +29,6 @@ use phpOMS\DataStorage\Database\Connection\ConnectionAbstract;
* @todo Orange-Management/phpOMS#33 * @todo Orange-Management/phpOMS#33
* Implement missing grammar & builder functions * Implement missing grammar & builder functions
* Missing elements are e.g. sum, merge etc. * Missing elements are e.g. sum, merge etc.
*
* @todo Orange-Management/phpOMS#194
* Automatically set prefix during construction
* When constructing the QueryBuilder or SchemaBuilder the connection is passed.
* The connection holds information about the table prefix, yet I force developers to pass a prefix after the builder initialization.
* This should be done automatically!
*/ */
class Builder extends BuilderAbstract class Builder extends BuilderAbstract
{ {
@ -374,9 +369,54 @@ class Builder extends BuilderAbstract
*/ */
public function toSql() : string public function toSql() : string
{ {
if (!empty($this->joins)) {
$this->resolveJoinDependencies();
}
return $this->grammar->compileQuery($this); return $this->grammar->compileQuery($this);
} }
/**
* Resolves join dependencies
*
* @return void
*
* @since 1.0.0
*/
private function resolveJoinDependencies() : void
{
// create dependencies
$dependencies = [];
foreach ($this->joins as $table => $join) {
$dependencies[$table] = [];
foreach ($this->ons[$table] as $on) {
if (\stripos($on['column'], '.')) {
$dependencies[$table][] = \explode('.', $on['column'])[0];
}
if (\stripos($on['value'], '.')) {
$dependencies[$table][] = \explode('.', $on['value'])[0];
}
}
}
$resolved = DependencyResolver::resolve($dependencies);
// cyclomatic dependencies
if ($resolved === null) {
return;
}
$temp = $this->joins;
$this->joins = [];
foreach ($resolved as $table) {
$this->joins[$table] = $temp[$table];
}
}
/** /**
* Set raw query. * Set raw query.
* *
@ -1085,11 +1125,7 @@ class Builder extends BuilderAbstract
throw new \InvalidArgumentException(); throw new \InvalidArgumentException();
} }
if ($alias === null) { $this->joins[$alias ?? $table] = ['type' => $type, 'table' => $table, 'alias' => $alias];
$this->joins[] = ['type' => $type, 'table' => $table];
} else {
$this->joins[$alias] = ['type' => $type, 'table' => $table];
}
return $this; return $this;
} }
@ -1278,12 +1314,13 @@ class Builder extends BuilderAbstract
* @param null|string|array $operator Comparison operator * @param null|string|array $operator Comparison operator
* @param null|string|array $values Values to compare with * @param null|string|array $values Values to compare with
* @param string|array $boolean Concatonator * @param string|array $boolean Concatonator
* @param null|string $table Table this belongs to
* *
* @return Builder * @return Builder
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public function on($columns, $operator = null, $values = null, $boolean = 'and') : self public function on($columns, $operator = null, $values = null, $boolean = 'and', string $table = null) : self
{ {
if ($operator !== null && !\is_array($operator) && !\in_array(\strtolower($operator), self::OPERATORS)) { if ($operator !== null && !\is_array($operator) && !\in_array(\strtolower($operator), self::OPERATORS)) {
throw new \InvalidArgumentException('Unknown operator.'); throw new \InvalidArgumentException('Unknown operator.');
@ -1298,15 +1335,14 @@ class Builder extends BuilderAbstract
$joinCount = \count($this->joins) - 1; $joinCount = \count($this->joins) - 1;
$i = 0; $i = 0;
$table ??= \array_keys($this->joins)[$joinCount];
foreach ($columns as $key => $column) { foreach ($columns as $column) {
if (isset($operator[$i]) && !\in_array(\strtolower($operator[$i]), self::OPERATORS)) { if (isset($operator[$i]) && !\in_array(\strtolower($operator[$i]), self::OPERATORS)) {
throw new \InvalidArgumentException('Unknown operator.'); throw new \InvalidArgumentException('Unknown operator.');
} }
// ons needs to have the same key as the join for the grammar to work $this->ons[$table][] = [
// since alias are possible this is necessary
$this->ons[\array_keys($this->joins)[$joinCount]][] = [
'column' => $column, 'column' => $column,
'operator' => $operator[$i], 'operator' => $operator[$i],
'value' => $values[$i], 'value' => $values[$i],

View File

@ -135,7 +135,7 @@ class Grammar extends GrammarAbstract
*/ */
protected function compileSelects(Builder $query, array $columns) : string protected function compileSelects(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix(), false); $expression = $this->expressionizeTableColumn($columns, false);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';
@ -156,7 +156,7 @@ class Grammar extends GrammarAbstract
*/ */
protected function compileUpdates(Builder $query, array $table) : string protected function compileUpdates(Builder $query, array $table) : string
{ {
$expression = $this->expressionizeTableColumn($table, $query->getPrefix()); $expression = $this->expressionizeTableColumn($table);
if ($expression === '') { if ($expression === '') {
return ''; return '';
@ -192,7 +192,7 @@ class Grammar extends GrammarAbstract
*/ */
protected function compileFrom(Builder $query, array $table) : string protected function compileFrom(Builder $query, array $table) : string
{ {
$expression = $this->expressionizeTableColumn($table, $query->getPrefix()); $expression = $this->expressionizeTableColumn($table);
if ($expression === '') { if ($expression === '') {
return ''; return '';
@ -250,10 +250,7 @@ class Grammar extends GrammarAbstract
} }
if (\is_string($element['column'])) { if (\is_string($element['column'])) {
// No prefix if it is ONLY a field $expression .= $this->compileSystem($element['column']);
$prefix = \stripos($element['column'], '.') === false ? '' : $query->getPrefix();
$expression .= $this->compileSystem($element['column'], $prefix);
} elseif ($element['column'] instanceof \Closure) { } elseif ($element['column'] instanceof \Closure) {
$expression .= $element['column'](); $expression .= $element['column']();
} elseif ($element['column'] instanceof Builder) { } elseif ($element['column'] instanceof Builder) {
@ -263,10 +260,10 @@ class Grammar extends GrammarAbstract
} }
if (isset($element['value'])) { if (isset($element['value'])) {
$expression .= ' ' . \strtoupper($element['operator']) . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix()); $expression .= ' ' . \strtoupper($element['operator']) . ' ' . $this->compileValue($query, $element['value']);
} else { } else {
$operator = $element['operator'] === '=' ? 'IS' : 'IS NOT'; $operator = $element['operator'] === '=' ? 'IS' : 'IS NOT';
$expression .= ' ' . $operator . ' ' . $this->compileValue($query, $element['value'], $query->getPrefix()); $expression .= ' ' . $operator . ' ' . $this->compileValue($query, $element['value']);
} }
return $expression; return $expression;
@ -317,9 +314,8 @@ class Grammar extends GrammarAbstract
/** /**
* Compile value. * Compile value.
* *
* @param Builder $query Query builder * @param Builder $query Query builder
* @param mixed $value Value * @param mixed $value Value
* @param string $prefix Prefix in case value is a table
* *
* @return string returns a string representation of the value * @return string returns a string representation of the value
* *
@ -327,7 +323,7 @@ class Grammar extends GrammarAbstract
* *
* @since 1.0.0 * @since 1.0.0
*/ */
protected function compileValue(Builder $query, $value, string $prefix = '') : string protected function compileValue(Builder $query, $value) : string
{ {
if (\is_string($value)) { if (\is_string($value)) {
return $query->quote($value); return $query->quote($value);
@ -337,7 +333,7 @@ class Grammar extends GrammarAbstract
$values = ''; $values = '';
foreach ($value as $val) { foreach ($value as $val) {
$values .= $this->compileValue($query, $val, $prefix) . ', '; $values .= $this->compileValue($query, $val) . ', ';
} }
return '(' . \rtrim($values, ', ') . ')'; return '(' . \rtrim($values, ', ') . ')';
@ -410,18 +406,18 @@ class Grammar extends GrammarAbstract
{ {
$expression = ''; $expression = '';
foreach ($joins as $key => $join) { foreach ($joins as $table => $join) {
$expression .= $join['type'] . ' '; $expression .= $join['type'] . ' ';
if (\is_string($join['table'])) { if (\is_string($join['table'])) {
$expression .= $this->compileSystem($join['table'], $query->getPrefix()) . (\is_string($key) ? ' as ' . $query->getPrefix() . $key : ''); $expression .= $this->compileSystem($join['table']) . (\is_string($join['alias']) ? ' as ' . $join['alias'] : '');
} elseif ($join['table'] instanceof \Closure) { } elseif ($join['table'] instanceof \Closure) {
$expression .= $join['table']() . (\is_string($key) ? ' as ' . $query->getPrefix() . $key : ''); $expression .= $join['table']() . (\is_string($join['alias']) ? ' as ' . $join['alias'] : '');
} elseif ($join['table'] instanceof Builder) { } elseif ($join['table'] instanceof Builder) {
$expression .= '(' . \rtrim($join['table']->toSql(), ';') . ')' . (\is_string($key) ? ' as ' . $query->getPrefix() . $key : ''); $expression .= '(' . \rtrim($join['table']->toSql(), ';') . ')' . (\is_string($join['alias']) ? ' as ' . $join['alias'] : '');
} }
$expression .= $this->compileOn($query, $query->ons[$key]) . ' '; $expression .= $this->compileOn($query, $query->ons[$join['alias'] ?? $table]) . ' ';
} }
$expression = \rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
@ -481,7 +477,7 @@ class Grammar extends GrammarAbstract
$element['column'] = $query->from[0] . '.' . $element['column']; $element['column'] = $query->from[0] . '.' . $element['column'];
} }
$expression .= $this->compileSystem($element['column'], $query->getPrefix()); $expression .= $this->compileSystem($element['column']);
} elseif ($element['column'] instanceof \Closure) { } elseif ($element['column'] instanceof \Closure) {
$expression .= $element['column'](); $expression .= $element['column']();
} elseif ($element['column'] instanceof Builder) { } elseif ($element['column'] instanceof Builder) {
@ -491,7 +487,10 @@ class Grammar extends GrammarAbstract
} }
if (isset($element['value'])) { if (isset($element['value'])) {
$expression .= ' ' . \strtoupper($element['operator']) . ' ' . $this->compileSystem($element['value'], $query->getPrefix()); $expression .= ' ' . \strtoupper($element['operator']) . ' ' . $this->compileSystem($element['value']);
} else {
$operator = $element['operator'] === '=' ? 'IS' : 'IS NOT';
$expression .= ' ' . $operator . ' ' . $this->compileValue($query, $element['value']);
} }
return $expression; return $expression;
@ -512,7 +511,7 @@ class Grammar extends GrammarAbstract
$expression = ''; $expression = '';
foreach ($groups as $group) { foreach ($groups as $group) {
$expression .= $this->compileSystem($group, $query->getPrefix()) . ', '; $expression .= $this->compileSystem($group) . ', ';
} }
$expression = \rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
@ -536,7 +535,7 @@ class Grammar extends GrammarAbstract
foreach ($orders as $key => $order) { foreach ($orders as $key => $order) {
foreach ($order as $column) { foreach ($order as $column) {
$expression .= $this->compileSystem($column, $query->getPrefix()) . ', '; $expression .= $this->compileSystem($column) . ', ';
} }
$expression = \rtrim($expression, ', '); $expression = \rtrim($expression, ', ');
@ -588,7 +587,7 @@ class Grammar extends GrammarAbstract
*/ */
protected function compileInto(Builder $query, $table) : string protected function compileInto(Builder $query, $table) : string
{ {
return 'INSERT INTO ' . $this->compileSystem($table, $query->getPrefix()); return 'INSERT INTO ' . $this->compileSystem($table);
} }
/** /**
@ -656,7 +655,7 @@ class Grammar extends GrammarAbstract
$vals = ''; $vals = '';
foreach ($values as $column => $value) { foreach ($values as $column => $value) {
$expression = $this->expressionizeTableColumn([$column], $query->getPrefix(), false); $expression = $this->expressionizeTableColumn([$column], false);
$vals .= $expression . ' = ' . $this->compileValue($query, $value) . ', '; $vals .= $expression . ' = ' . $this->compileValue($query, $value) . ', ';
} }

View File

@ -38,7 +38,7 @@ class MicrosoftGrammar extends Grammar
*/ */
protected function compileRandom(Builder $query, array $columns) : string protected function compileRandom(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix()); $expression = $this->expressionizeTableColumn($columns);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -46,7 +46,7 @@ class MysqlGrammar extends Grammar
*/ */
protected function compileRandom(Builder $query, array $columns) : string protected function compileRandom(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix()); $expression = $this->expressionizeTableColumn($columns);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -38,7 +38,7 @@ class OracleGrammar extends Grammar
*/ */
protected function compileRandom(Builder $query, array $columns) : string protected function compileRandom(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix()); $expression = $this->expressionizeTableColumn($columns);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -38,7 +38,7 @@ class PostgresGrammar extends Grammar
*/ */
protected function compileRandom(Builder $query, array $columns) : string protected function compileRandom(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix()); $expression = $this->expressionizeTableColumn($columns);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -46,7 +46,7 @@ class SQLiteGrammar extends Grammar
*/ */
protected function compileRandom(Builder $query, array $columns) : string protected function compileRandom(Builder $query, array $columns) : string
{ {
$expression = $this->expressionizeTableColumn($columns, $query->getPrefix()); $expression = $this->expressionizeTableColumn($columns);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -129,7 +129,6 @@ class Builder extends QueryBuilder
public static function createFromSchema(array $definition, ConnectionAbstract $connection) : self public static function createFromSchema(array $definition, ConnectionAbstract $connection) : self
{ {
$builder = new self($connection); $builder = new self($connection);
$builder->prefix($connection->prefix);
$builder->createTable($definition['name'] ?? ''); $builder->createTable($definition['name'] ?? '');
foreach ($definition['fields'] as $name => $def) { foreach ($definition['fields'] as $name => $def) {

View File

@ -117,7 +117,7 @@ class Grammar extends QueryGrammar
*/ */
protected function compileCreateTable(BuilderAbstract $query, string $table) : string protected function compileCreateTable(BuilderAbstract $query, string $table) : string
{ {
return 'CREATE TABLE ' . $this->expressionizeTableColumn([$table], $query->getPrefix()); return 'CREATE TABLE ' . $this->expressionizeTableColumn([$table]);
} }
/** /**
@ -147,7 +147,7 @@ class Grammar extends QueryGrammar
*/ */
protected function compileDropDatabase(BuilderAbstract $query, string $table) : string protected function compileDropDatabase(BuilderAbstract $query, string $table) : string
{ {
$expression = $this->expressionizeTableColumn([$table], $query->getPrefix()); $expression = $this->expressionizeTableColumn([$table]);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';
@ -168,7 +168,7 @@ class Grammar extends QueryGrammar
*/ */
protected function compileDropTable(BuilderAbstract $query, string $table) : string protected function compileDropTable(BuilderAbstract $query, string $table) : string
{ {
$expression = $this->expressionizeTableColumn([$table], $query->getPrefix()); $expression = $this->expressionizeTableColumn([$table]);
if ($expression === '') { if ($expression === '') {
$expression = '*'; $expression = '*';

View File

@ -75,7 +75,7 @@ class MysqlGrammar extends Grammar
$builder->select('*') $builder->select('*')
->from('information_schema.columns') ->from('information_schema.columns')
->where('table_schema', '=', $query->getConnection()->getDatabase()) ->where('table_schema', '=', $query->getConnection()->getDatabase())
->andWhere('table_name', '=', $query->getPrefix() . $table); ->andWhere('table_name', '=' . $table);
return \rtrim($builder->toSql(), ';'); return \rtrim($builder->toSql(), ';');
} }
@ -96,7 +96,7 @@ class MysqlGrammar extends Grammar
$keys = ''; $keys = '';
foreach ($fields as $name => $field) { foreach ($fields as $name => $field) {
$fieldQuery .= ' ' . $this->expressionizeTableColumn([$name], '') . ' ' . $field['type']; $fieldQuery .= ' ' . $this->expressionizeTableColumn([$name]) . ' ' . $field['type'];
if (isset($field['default']) || ($field['default'] === null && isset($field['null']) && $field['null'])) { if (isset($field['default']) || ($field['default'] === null && isset($field['null']) && $field['null'])) {
$fieldQuery .= ' DEFAULT ' . $this->compileValue($query, $field['default']); $fieldQuery .= ' DEFAULT ' . $this->compileValue($query, $field['default']);
@ -113,19 +113,19 @@ class MysqlGrammar extends Grammar
$fieldQuery .= ','; $fieldQuery .= ',';
if (isset($field['primary']) && $field['primary']) { if (isset($field['primary']) && $field['primary']) {
$keys .= ' PRIMARY KEY (' . $this->expressionizeTableColumn([$name], '') . '),'; $keys .= ' PRIMARY KEY (' . $this->expressionizeTableColumn([$name]) . '),';
} }
if (isset($field['unique']) && $field['unique']) { if (isset($field['unique']) && $field['unique']) {
$keys .= ' UNIQUE KEY (' . $this->expressionizeTableColumn([$name], '') . '),'; $keys .= ' UNIQUE KEY (' . $this->expressionizeTableColumn([$name]) . '),';
} }
if (isset($field['foreignTable'], $field['foreignKey']) if (isset($field['foreignTable'], $field['foreignKey'])
&& !empty($field['foreignTable']) && !empty($field['foreignKey']) && !empty($field['foreignTable']) && !empty($field['foreignKey'])
) { ) {
$keys .= ' FOREIGN KEY (' . $this->expressionizeTableColumn([$name], '') . ') REFERENCES ' $keys .= ' FOREIGN KEY (' . $this->expressionizeTableColumn([$name]) . ') REFERENCES '
. $this->expressionizeTableColumn([$field['foreignTable']], $query->getPrefix()) . $this->expressionizeTableColumn([$field['foreignTable']])
. ' (' . $this->expressionizeTableColumn([$field['foreignKey']], '') . '),'; . ' (' . $this->expressionizeTableColumn([$field['foreignKey']]) . '),';
} }
} }