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 = 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' : '');
} }

16
framework/db/sqlite/QueryBuilder.php

@ -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";

Loading…
Cancel
Save