mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-15 22:09:48 +08:00
BC way of merging expression params of orderBy and groupBy
this logic should be moved to the sub methods in 2.1
This commit is contained in:
@@ -101,6 +101,21 @@ class QueryBuilder extends \yii\base\Object
|
|||||||
$sql = implode($this->separator, array_filter($clauses));
|
$sql = implode($this->separator, array_filter($clauses));
|
||||||
$sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
|
$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);
|
$union = $this->buildUnion($query->union, $params);
|
||||||
if ($union !== '') {
|
if ($union !== '') {
|
||||||
$sql = "($sql){$this->separator}$union";
|
$sql = "($sql){$this->separator}$union";
|
||||||
@@ -757,10 +772,6 @@ class QueryBuilder extends \yii\base\Object
|
|||||||
foreach ($columns as $i => $column) {
|
foreach ($columns as $i => $column) {
|
||||||
if ($column instanceof Expression) {
|
if ($column instanceof Expression) {
|
||||||
$columns[$i] = $column->expression;
|
$columns[$i] = $column->expression;
|
||||||
// TODO
|
|
||||||
// foreach ($direction->params as $n => $v) {
|
|
||||||
// $params[$n] = $v;
|
|
||||||
// }
|
|
||||||
} elseif (strpos($column, '(') === false) {
|
} elseif (strpos($column, '(') === false) {
|
||||||
$columns[$i] = $this->db->quoteColumnName($column);
|
$columns[$i] = $this->db->quoteColumnName($column);
|
||||||
}
|
}
|
||||||
@@ -814,10 +825,6 @@ class QueryBuilder extends \yii\base\Object
|
|||||||
foreach ($columns as $name => $direction) {
|
foreach ($columns as $name => $direction) {
|
||||||
if ($direction instanceof Expression) {
|
if ($direction instanceof Expression) {
|
||||||
$orders[] = $direction->expression;
|
$orders[] = $direction->expression;
|
||||||
// TODO
|
|
||||||
// foreach ($direction->params as $n => $v) {
|
|
||||||
// $params[$n] = $v;
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
|
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use yii\db\Connection;
|
|||||||
use yii\db\Exception;
|
use yii\db\Exception;
|
||||||
use yii\base\InvalidParamException;
|
use yii\base\InvalidParamException;
|
||||||
use yii\base\NotSupportedException;
|
use yii\base\NotSupportedException;
|
||||||
|
use yii\db\Expression;
|
||||||
use yii\db\Query;
|
use yii\db\Query;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -379,6 +380,21 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
|||||||
$sql = implode($this->separator, array_filter($clauses));
|
$sql = implode($this->separator, array_filter($clauses));
|
||||||
$sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
|
$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);
|
$union = $this->buildUnion($query->union, $params);
|
||||||
if ($union !== '') {
|
if ($union !== '') {
|
||||||
$sql = "$sql{$this->separator}$union";
|
$sql = "$sql{$this->separator}$union";
|
||||||
|
|||||||
Reference in New Issue
Block a user