Вход Регистрация
Файл: gapps/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php
Строк: 118
<?php

namespace IlluminateDatabaseQueryGrammars;

use 
IlluminateDatabaseQueryBuilder;

class 
SQLiteGrammar extends Grammar
{
    
/**
     * All of the available clause operators.
     *
     * @var array
     */
    
protected $operators = [
        
'=''<''>''<=''>=''<>''!=',
        
'like''not like''between''ilike',
        
'&''|''<<''>>',
    ];

    
/**
     * Compile an insert statement into SQL.
     *
     * @param  IlluminateDatabaseQueryBuilder  $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 = [$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($queryreset($values));
        }

        
$names $this->columnize(array_keys(reset($values)));

        
$columns = [];

        
// 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(0count($values), implode(', '$columns));

        return 
"insert into $table ($names) select ".implode(' union all select '$columns);
    }

    
/**
     * Compile a truncate table statement into SQL.
     *
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @return array
     */
    
public function compileTruncate(Builder $query)
    {
        
$sql = ['delete from sqlite_sequence where name = ?' => [$query->from]];

        
$sql['delete from '.$this->wrapTable($query->from)] = [];

        return 
$sql;
    }

    
/**
     * Compile a "where date" clause.
     *
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @param  array  $where
     * @return string
     */
    
protected function whereDate(Builder $query$where)
    {
        return 
$this->dateBasedWhere('%Y-%m-%d'$query$where);
    }

    
/**
     * Compile a "where day" clause.
     *
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @param  array  $where
     * @return string
     */
    
protected function whereDay(Builder $query$where)
    {
        return 
$this->dateBasedWhere('%d'$query$where);
    }

    
/**
     * Compile a "where month" clause.
     *
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @param  array  $where
     * @return string
     */
    
protected function whereMonth(Builder $query$where)
    {
        return 
$this->dateBasedWhere('%m'$query$where);
    }

    
/**
     * Compile a "where year" clause.
     *
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @param  array  $where
     * @return string
     */
    
protected function whereYear(Builder $query$where)
    {
        return 
$this->dateBasedWhere('%Y'$query$where);
    }

    
/**
     * Compile a date based where clause.
     *
     * @param  string  $type
     * @param  IlluminateDatabaseQueryBuilder  $query
     * @param  array  $where
     * @return string
     */
    
protected function dateBasedWhere($typeBuilder $query$where)
    {
        
$value str_pad($where['value'], 2'0'STR_PAD_LEFT);

        
$value $this->parameter($value);

        return 
'strftime(''.$type.'', '.$this->wrap($where['column']).') '.$where['operator'].' '.$value;
    }
}
Онлайн: 0
Реклама