Exemple #1
0
 private function dumpTargets(Dialect $dialect, $prepend = null, $append = null)
 {
     if (count($this->targets) == 1) {
         return $prepend . $dialect->quoteTable(reset($this->targets));
     } else {
         $tables = [];
         foreach ($this->targets as $target) {
             if ($target instanceof DialectString) {
                 $table = $dialect->quoteTable($target->toDialectString($dialect));
             } else {
                 $table = $dialect->quoteTable($target);
             }
             $tables[] = $prepend . $table;
         }
         return implode($append . ' ', $tables);
     }
 }
Exemple #2
0
 public function toDialectString(Dialect $dialect)
 {
     $query = 'INSERT INTO ' . $dialect->quoteTable($this->table) . ' ';
     if ($this->select === null) {
         $query = $this->toDialectStringValues($query, $dialect);
     } else {
         $query = $this->toDialectStringSelect($query, $dialect);
     }
     $query .= parent::toDialectString($dialect);
     return $query;
 }
Exemple #3
0
 public function toDialectString(Dialect $dialect)
 {
     if ($this->where) {
         $deleteStr = 'DELETE FROM ' . $dialect->quoteTable($this->table) . parent::toDialectString($dialect);
         $this->checkReturning($dialect);
         if (empty($this->returning)) {
             return $deleteStr;
         } else {
             $query = $deleteStr . ' RETURNING ' . $this->toDialectStringReturning($dialect);
             return $query;
         }
     } else {
         throw new WrongArgumentException("leave '{$this->table}' table alone in peace, bastard");
     }
 }
Exemple #4
0
 public function toDialectString(Dialect $dialect)
 {
     $query = 'UPDATE ' . $dialect->quoteTable($this->table) . ' SET ';
     $sets = [];
     foreach ($this->fields as $var => $val) {
         if ($val instanceof DialectString) {
             $sets[] = $dialect->quoteField($var) . ' = (' . $val->toDialectString($dialect) . ')';
         } elseif ($val === null) {
             $sets[] = $dialect->quoteField($var) . ' = ' . $dialect->literalToString(Dialect::LITERAL_NULL);
         } elseif (true === $val) {
             $sets[] = $dialect->quoteField($var) . ' = ' . $dialect->literalToString(Dialect::LITERAL_TRUE);
         } elseif (false === $val) {
             $sets[] = $dialect->quoteField($var) . ' = ' . $dialect->literalToString(Dialect::LITERAL_FALSE);
         } else {
             $sets[] = $dialect->quoteField($var) . ' = ' . $dialect->quoteValue($val);
         }
     }
     return $query . implode(', ', $sets) . $this->joiner->toDialectString($dialect) . parent::toDialectString($dialect);
 }
 public function toDialectString(Dialect $dialect)
 {
     $name = $this->table->getName();
     $middle = "CREATE TABLE {$dialect->quoteTable($name)} (\n    ";
     $prepend = [];
     $columns = [];
     $primary = [];
     $order = $this->table->getOrder();
     foreach ($order as $column) {
         if ($column->isAutoincrement()) {
             if ($pre = $dialect->preAutoincrement($column)) {
                 $prepend[] = $pre;
             }
             $columns[] = implode(' ', [$column->toDialectString($dialect), $dialect->postAutoincrement($column)]);
         } else {
             $columns[] = $column->toDialectString($dialect);
         }
         $name = $column->getName();
         if ($column->isPrimaryKey()) {
             $primary[] = $dialect->quoteField($name);
         }
     }
     $out = ($prepend ? implode("\n", $prepend) . "\n" : null) . $middle . implode(",\n    ", $columns);
     if ($primary) {
         $out .= ",\n    PRIMARY KEY(" . implode(', ', $primary) . ')';
     }
     if ($uniques = $this->table->getUniques()) {
         $names = [];
         foreach ($uniques as $row) {
             foreach ($row as $name) {
                 $names[] = $dialect->quoteField($name);
             }
             $out .= ",\n    UNIQUE(" . implode(', ', $names) . ')';
         }
     }
     return $out . "\n);\n";
 }
Exemple #6
0
 public static function findDifferences(Dialect $dialect, DBTable $source, DBTable $target)
 {
     $out = [];
     $head = 'ALTER TABLE ' . $dialect->quoteTable($target->getName());
     $sourceColumns = $source->getColumns();
     $targetColumns = $target->getColumns();
     foreach ($sourceColumns as $name => $column) {
         if (isset($targetColumns[$name])) {
             if ($column->getType()->getId() != $targetColumns[$name]->getType()->getId()) {
                 $targetColumn = $targetColumns[$name];
                 $out[] = $head . ' ALTER COLUMN ' . $dialect->quoteField($name) . ' TYPE ' . $targetColumn->getType()->toString() . ($targetColumn->getType()->hasSize() ? '(' . $targetColumn->getType()->getSize() . ($targetColumn->getType()->hasPrecision() ? ', ' . $targetColumn->getType()->getPrecision() : null) . ')' : null) . (in_array($targetColumn->getType()->getId(), array(DataType::JSON, DataType::JSONB)) ? ' USING NULL' : '') . ';';
             }
             if ($column->getType()->isNull() != $targetColumns[$name]->getType()->isNull()) {
                 $out[] = $head . ' ALTER COLUMN ' . $dialect->quoteField($name) . ' ' . ($targetColumns[$name]->getType()->isNull() ? 'DROP' : 'SET') . ' NOT NULL;';
             }
         } else {
             $out[] = $head . ' DROP COLUMN ' . $dialect->quoteField($name) . ';';
         }
     }
     foreach ($targetColumns as $name => $column) {
         if (!isset($sourceColumns[$name])) {
             $out[] = $head . ' ADD COLUMN ' . $column->toDialectString($dialect) . ';';
             if ($column->hasReference()) {
                 $out[] = 'CREATE INDEX ' . $dialect->quoteField($name . '_idx') . ' ON ' . $dialect->quoteTable($target->getName()) . '(' . $dialect->quoteField($name) . ');';
             }
         }
     }
     return $out;
 }
 public function toDialectString(Dialect $dialect)
 {
     return 'DROP TABLE ' . $dialect->quoteTable($this->name) . $dialect->dropTableMode($this->cascade) . ';';
 }