Browse Source

BC way of merging expression params of orderBy and groupBy

this logic should be moved to the sub methods in 2.1
tags/2.0.7
Carsten Brandt 9 years ago
parent
commit
8680f0f1d8
  1. 23
      framework/db/QueryBuilder.php
  2. 16
      framework/db/sqlite/QueryBuilder.php

23
framework/db/QueryBuilder.php

@ -101,6 +101,21 @@ class QueryBuilder extends \yii\base\Object
$sql = implode($this->separator, array_filter($clauses));
$sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
if (!empty($query->orderBy)) {
foreach ($query->orderBy as $expression) {
if ($expression instanceof Expression) {
$params = array_merge($params, $expression->params);
}
}
}
if (!empty($query->groupBy)) {
foreach ($query->groupBy as $expression) {
if ($expression instanceof Expression) {
$params = array_merge($params, $expression->params);
}
}
}
$union = $this->buildUnion($query->union, $params);
if ($union !== '') {
$sql = "($sql){$this->separator}$union";
@ -757,10 +772,6 @@ class QueryBuilder extends \yii\base\Object
foreach ($columns as $i => $column) {
if ($column instanceof Expression) {
$columns[$i] = $column->expression;
// TODO
// foreach ($direction->params as $n => $v) {
// $params[$n] = $v;
// }
} elseif (strpos($column, '(') === false) {
$columns[$i] = $this->db->quoteColumnName($column);
}
@ -814,10 +825,6 @@ class QueryBuilder extends \yii\base\Object
foreach ($columns as $name => $direction) {
if ($direction instanceof Expression) {
$orders[] = $direction->expression;
// TODO
// foreach ($direction->params as $n => $v) {
// $params[$n] = $v;
// }
} else {
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
}

16
framework/db/sqlite/QueryBuilder.php

@ -11,6 +11,7 @@ use yii\db\Connection;
use yii\db\Exception;
use yii\base\InvalidParamException;
use yii\base\NotSupportedException;
use yii\db\Expression;
use yii\db\Query;
/**
@ -379,6 +380,21 @@ class QueryBuilder extends \yii\db\QueryBuilder
$sql = implode($this->separator, array_filter($clauses));
$sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
if (!empty($query->orderBy)) {
foreach ($query->orderBy as $expression) {
if ($expression instanceof Expression) {
$params = array_merge($params, $expression->params);
}
}
}
if (!empty($query->groupBy)) {
foreach ($query->groupBy as $expression) {
if ($expression instanceof Expression) {
$params = array_merge($params, $expression->params);
}
}
}
$union = $this->buildUnion($query->union, $params);
if ($union !== '') {
$sql = "$sql{$this->separator}$union";

Loading…
Cancel
Save