Пример #1
0
 /**
  * Compile an insert statement into SQL.
  *
  * @param  \Nova\Database\Query\Builder  $query
  * @param  array  $values
  * @return string
  */
 public function compileInsert(Builder $query, array $values)
 {
     // Essentially we will force every insert to be treated as a batch insert which
     // simply makes creating the SQL easier for us since we can utilize the same
     // basic routine regardless of an amount of records given to us to insert.
     $table = $this->wrapTable($query->from);
     if (!is_array(reset($values))) {
         $values = array($values);
     }
     // If there is only one record being inserted, we will just use the usual query
     // grammar insert builder because no special syntax is needed for the single
     // row inserts in SQLite. However, if there are multiples, we'll continue.
     if (count($values) == 1) {
         return parent::compileInsert($query, reset($values));
     }
     $names = $this->columnize(array_keys(reset($values)));
     $columns = array();
     // SQLite requires us to build the multi-row insert as a listing of select with
     // unions joining them together. So we'll build out this list of columns and
     // then join them all together with select unions to complete the queries.
     foreach (array_keys(reset($values)) as $column) {
         $columns[] = '? as ' . $this->wrap($column);
     }
     $columns = array_fill(0, count($values), implode(', ', $columns));
     return "insert into {$table} ({$names}) select " . implode(' union select ', $columns);
 }
Пример #2
0
 /**
  * Compile the "from" portion of the query.
  *
  * @param  \Nova\Database\Query\Builder  $query
  * @param  string  $table
  * @return string
  */
 protected function compileFrom(Builder $query, $table)
 {
     $from = parent::compileFrom($query, $table);
     if (is_string($query->lock)) {
         return $from . ' ' . $query->lock;
     }
     if (!is_null($query->lock)) {
         return $from . ' with(rowlock,' . ($query->lock ? 'updlock,' : '') . 'holdlock)';
     }
     return $from;
 }
Пример #3
0
 /**
  * Compile an update statement into SQL.
  *
  * @param  \Nova\Database\Query\Builder  $query
  * @param  array  $values
  * @return string
  */
 public function compileUpdate(Builder $query, $values)
 {
     $sql = parent::compileUpdate($query, $values);
     if (isset($query->orders)) {
         $sql .= ' ' . $this->compileOrders($query, $query->orders);
     }
     if (isset($query->limit)) {
         $sql .= ' ' . $this->compileLimit($query, $query->limit);
     }
     return rtrim($sql);
 }
Пример #4
0
 /**
  * Compile an insert statement into SQL.
  *
  * @param  \Nova\Database\Query\Builder  $query
  * @param  array  $values
  * @return string
  */
 public function compileInsert(Builder $query, array $values)
 {
     $table = $this->wrapTable($query->from);
     if (!is_array(reset($values))) {
         $values = array($values);
     }
     if (count($values) == 1) {
         return parent::compileInsert($query, reset($values));
     }
     $names = $this->columnize(array_keys(reset($values)));
     $columns = array();
     foreach (array_keys(reset($values)) as $column) {
         $columns[] = '? as ' . $this->wrap($column);
     }
     $columns = array_fill(0, count($values), implode(', ', $columns));
     return "insert into {$table} ({$names}) select " . implode(' union select ', $columns);
 }
Пример #5
0
 /**
  * Run a truncate statement on the table.
  *
  * @return void
  */
 public function truncate()
 {
     foreach ($this->grammar->compileTruncate($this) as $sql => $bindings) {
         $this->connection->statement($sql, $bindings);
     }
 }