Example #1
0
 /**
  * Render a Union object
  * @param  Query\Union $query
  * @return string
  */
 public static function render(Query\Union $query)
 {
     return Compiler::withDb($query->getDb(), function () use($query) {
         return Compiler::expression(array(Arr::join(' UNION ', Arr::map(function (Query\Select $select) {
             return Compiler::braced(Select::render($select));
         }, $query->getSelects())), Compiler::word('ORDER BY', Direction::combine($query->getOrder())), Compiler::word('LIMIT', $query->getLimit())));
     });
 }
Example #2
0
 /**
  * Render a Insert object
  * @param  Query\Insert $query
  * @return string
  */
 public static function render(Query\Insert $query)
 {
     return Compiler::withDb($query->getDb(), function () use($query) {
         $table = $query->getTable();
         $select = $query->getSelect();
         return Compiler::expression(array('INSERT', $query->getType(), Compiler::word('INTO', $table !== null ? Aliased::render($table) : null), Columns::render($query->getColumns()), Compiler::word('VALUES', Values::combine($query->getValues())), Compiler::word('SET', Set::combine($query->getSet())), $select !== null ? Select::render($select) : null));
     });
 }
Example #3
0
 /**
  * Render SQL for Aliased
  *
  * @param  SQL\Aliased $aliased
  * @return string
  */
 public static function render(SQL\Aliased $aliased)
 {
     $content = $aliased->getContent();
     if ($content instanceof Query\Select) {
         $content = "(" . Select::render($content) . ")";
     } else {
         $content = Compiler::name($content);
     }
     return Compiler::expression(array($content, Compiler::word('AS', Compiler::name($aliased->getAlias()))));
 }
Example #4
0
    /**
     * @covers ::render
     * @covers ::parameters
     */
    public function testCompile()
    {
        $select2 = new Query\Select(self::getDb());
        $select2->from('one')->type('DISTINCT')->join('table1', new SQL('USING (col1, col2)'))->where('table1.name', 'small');
        $select = new Query\Select(self::getDb());
        $select->from('bigtable')->from('smalltable', 'alias')->from($select2, 'select_alias')->column('col1')->column(new SQL('IF(name = ?, "big", "small")', array(10)), 'type')->column('col3', 'alias_col')->where('bigtable.test', 'value')->whereNot('alias.test', 'some bad val')->whereRaw('test_statement = IF ("test", ?, ?)', array('val1', 'val2'))->join('table2', array('col1' => 'col2'))->whereRaw('type > ? AND type < ? AND base IN ?', array(10, 20, array('1', '2', '3')))->having('test', 'value2')->havingRaw('type > ? AND base IN ?', array(20, array('5', '6', '7')))->limit(10)->offset(8)->order('type', 'ASC')->order('base')->group('base', 'ASC')->group('type');
        $expectedSql = <<<SQL
SELECT `col1`, IF(name = ?, "big", "small") AS `type`, `col3` AS `alias_col` FROM `bigtable`, `smalltable` AS `alias`, (SELECT DISTINCT * FROM `one` JOIN `table1` USING (col1, col2) WHERE (`table1`.`name` = ?)) AS `select_alias` JOIN `table2` ON `col1` = `col2` WHERE (`bigtable`.`test` = ?) AND (`alias`.`test` != ?) AND (test_statement = IF ("test", ?, ?)) AND (type > ? AND type < ? AND base IN (?, ?, ?)) GROUP BY `base` ASC, `type` HAVING (`test` = ?) AND (type > ? AND base IN (?, ?, ?)) ORDER BY `type` ASC, `base` LIMIT 10 OFFSET 8
SQL;
        $this->assertEquals($expectedSql, Compiler\Select::render($select));
        $expectedParameters = array(10, 'small', 'value', 'some bad val', 'val1', 'val2', '10', '20', '1', '2', '3', 'value2', '20', '5', '6', '7');
        $this->assertEquals($expectedParameters, Compiler\Select::parameters($select));
    }
Example #5
0
 /**
  * Render the value of Set object
  * @param  SQL\Set $item
  * @return string
  */
 public static function renderValue(SQL\Set $item)
 {
     $value = $item->getValue();
     $content = $item->getContent();
     if ($value instanceof SQL\SQL) {
         return $value->getContent();
     } elseif ($value instanceof Query\Select) {
         return Compiler::braced(Select::render($value));
     } elseif ($item instanceof SQL\SetMultiple and is_string($content)) {
         return self::renderMultiple($value, $content, $item->getKey());
     } else {
         return '?';
     }
 }
Example #6
0
 /**
  * @return array
  */
 public function getParameters()
 {
     return Compiler\Select::parameters($this);
 }