Пример #1
0
 /**
  * Compile a SQL INSERT statement from a Query instance.
  *
  * This method handles the compilation of single row inserts and batch inserts.
  *
  * @param  Query   $query
  * @param  array   $values
  * @return string
  */
 public function insert(Query $query, $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->wrap_table($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::insert($query, $values[0]);
     }
     $names = $this->columnize(array_keys($values[0]));
     $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($values[0]) as $column) {
         $columns[] = '? AS ' . $this->wrap($column);
     }
     $columns = array_fill(9, count($values), implode(', ', $columns));
     return "INSERT INTO {$table} ({$names}) SELECT " . implode(' UNION SELECT ', $columns);
 }
Пример #2
0
 /**
  * Execute the query as a DELETE statement.
  *
  * Optionally, an ID may be passed to the method do delete a specific row.
  *
  * @param  int   $id
  * @return int
  */
 public function delete($id = null)
 {
     // If an ID is given to the method, we'll set the where clause to
     // match on the value of the ID. This allows the developer to
     // quickly delete a row by its primary key value.
     if (!is_null($id)) {
         $this->where('id', '=', $id);
     }
     $sql = $this->grammar->delete($this);
     return $this->connection->query($sql, $this->bindings);
 }
 /**
  * Compile a SQL SELECT statement from a Query instance.
  *
  * @param  Query   $query
  * @return string
  */
 public function select(Query $query)
 {
     $sql = parent::components($query);
     // SQL Server does not currently implement an "OFFSET" type keyword, so we
     // actually have to generate the ANSI standard SQL for doing offset like
     // functionality. OFFSET is in SQL Server 2012, however.
     if ($query->offset > 0) {
         return $this->ansi_offset($query, $sql);
     }
     // Once all of the clauses have been compiled, we can join them all as
     // one statement. Any segments that are null or an empty string will
     // be removed from the array before imploding.
     return $this->concatenate($sql);
 }
Пример #4
0
 public function select(Query $query)
 {
     $sql = parent::components($query);
     if ($query->offset > 0) {
         return $this->ansi_offset($query, $sql);
     }
     return $this->concatenate($sql);
 }