Skip to content

Commit

Permalink
Merge branch 'CameronHall-bugfix/issue-13552' into 4.0.x
Browse files Browse the repository at this point in the history
* CameronHall-bugfix/issue-13552:
  Fixed tests
  Fixed #13552: Overwriting columns with the same alias
  • Loading branch information
niden committed Dec 22, 2018
2 parents d0d1fca + ffe5ab9 commit 76ad20b
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 34 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,3 @@ docker-compose.yml
build/gccarch
tests/_cache
.zephir/
.temp/
1 change: 1 addition & 0 deletions CHANGELOG-4.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
- Scope SQL Column Aliases (on nesting level), in `Phalcon\Mvc\Model\Query`, to prevent overwrite _root_ query's `_sqlColumnAliases` by sub-queries. [#13006](https://github.com/phalcon/cphalcon/issues/13006), [#12548](https://github.com/phalcon/cphalcon/issues/12548) and [#1731](https://github.com/phalcon/cphalcon/issues/1731)
- CLI parameters now work like MVC parameters [#12375](https://github.com/phalcon/cphalcon/pull/12375)
- Changed `Phalcon\Db\Dialect\Postgresql::addPrimaryKey` to make primary key contraints names unique by prefixing them with the table name. [#12629](https://github.com/phalcon/cphalcon/pull/12629)
- Fixed `Phalcon\Mvc\Model\Query::_prepareSelect` overwriting columns with the same alias [#13552](https://github.com/phalcon/cphalcon/issues/13552)
- Changed `Phalcon\Http\RequestInterface` to align with `Phalcon\Http\Request` [#13061](https://github.com/phalcon/cphalcon/pull/13061)
- Renamed `Phalcon\Acl\Resource` to `Phalcon\Acl\Subject` [#13639](https://github.com/phalcon/cphalcon/issues/13639)
- Renamed `Phalcon\Acl\ResourceInterface` to `Phalcon\Acl\SubjectInterface` [#13639](https://github.com/phalcon/cphalcon/issues/13639)
Expand Down
3 changes: 3 additions & 0 deletions phalcon/mvc/model/query.zep
Original file line number Diff line number Diff line change
Expand Up @@ -2034,6 +2034,9 @@ class Query implements QueryInterface, InjectionAwareInterface
* "balias" is the best alias chosen for the column
*/
if fetch alias, sqlColumn["balias"] {
if isset column["column"]["domain"] {
let alias = column["column"]["domain"] . "_" . alias;
}
let sqlColumns[alias] = sqlColumn;
} else {
if sqlColumn["type"] == "scalar" {
Expand Down
5 changes: 2 additions & 3 deletions phalcon/paginator/adapter/querybuilder.zep
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ class QueryBuilder extends Adapter
var originalBuilder, builder, totalBuilder, totalPages,
limit, numberPage, number, query, previous, items, totalQuery,
result, row, rowcount, next, sql, columns, db, hasHaving, hasGroup,
model, modelClass, dbService;
model, modelClass, dbService, groups, groupColumn;

let originalBuilder = this->_builder;
let columns = this->_columns;
Expand Down Expand Up @@ -164,7 +164,7 @@ class QueryBuilder extends Adapter

let hasHaving = !empty totalBuilder->getHaving();

var groups = totalBuilder->getGroupBy();
let groups = totalBuilder->getGroupBy();

let hasGroup = !empty groups;

Expand All @@ -185,7 +185,6 @@ class QueryBuilder extends Adapter
* Change 'COUNT()' parameters, when the query contains 'GROUP BY'
*/
if hasGroup {
var groupColumn;
if typeof groups == "array" {
let groupColumn = implode(", ", groups);
} else {
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/Mvc/Model/Query/BuilderOrderCest.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public function shouldGenerateCorrectSql(IntegrationTester $I)
$orderBy = $item[0];
$expected = $item[1];
$builder = new Builder();
$query = "SELECT `r`.`year` AS `year`, `r`.`name` AS `robot_name` FROM `robots` AS `r` ";
$query = "SELECT `r`.`year` AS `r_year`, `r`.`name` AS `robot_name` FROM `robots` AS `r` ";

$phql = $builder
->setDi($this->container)
Expand Down
38 changes: 19 additions & 19 deletions tests/integration/Mvc/Model/QueryOldCest.php
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ private function getExamples(): array
],
],
'columns' => [
'id' => [
'r_id' => [
'type' => 'scalar',
'balias' => 'id',
'sqlAlias' => 'id',
Expand All @@ -328,7 +328,7 @@ private function getExamples(): array
'balias' => 'id',
],
],
'name' => [
'r_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -466,7 +466,7 @@ private function getExamples(): array
'personas',
],
'columns' => [
'cedula' => [
People::class . '_cedula' => [
'type' => 'scalar',
'balias' => 'cedula',
'sqlAlias' => 'cedula',
Expand All @@ -490,7 +490,7 @@ private function getExamples(): array
'personas',
],
'columns' => [
'cedula' => [
strtolower(People::class) . '_cedula' => [
'type' => 'scalar',
'balias' => 'cedula',
'sqlAlias' => 'cedula',
Expand Down Expand Up @@ -3450,7 +3450,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -3503,7 +3503,7 @@ private function getExamples(): array
],
],
'columns' => [
'id' => [
'r_id' => [
'type' => 'scalar',
'balias' => 'id',
'sqlAlias' => 'id',
Expand All @@ -3514,7 +3514,7 @@ private function getExamples(): array
'balias' => 'id',
],
],
'name' => [
'r_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -3818,7 +3818,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -3879,7 +3879,7 @@ private function getExamples(): array
'le_products',
],
'columns' => [
'type' => [
SomeProducts::class . '_type' => [
'type' => 'scalar',
'balias' => 'type',
'sqlAlias' => 'type',
Expand Down Expand Up @@ -4075,7 +4075,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4150,7 +4150,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4233,7 +4233,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4322,7 +4322,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4478,7 +4478,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4559,7 +4559,7 @@ private function getExamples(): array
'robots',
],
'columns' => [
'name' => [
Robots::class . '_name' => [
'type' => 'scalar',
'balias' => 'name',
'sqlAlias' => 'name',
Expand Down Expand Up @@ -4810,7 +4810,7 @@ private function getExamples(): array
],
],
'columns' => [
'code' => [
'r_code' => [
'type' => 'scalar',
'balias' => 'code',
'sqlAlias' => 'code',
Expand All @@ -4821,7 +4821,7 @@ private function getExamples(): array
'balias' => 'code',
],
],
'theName' => [
'r_theName' => [
'type' => 'scalar',
'balias' => 'theName',
'sqlAlias' => 'theName',
Expand Down Expand Up @@ -4959,7 +4959,7 @@ private function getExamples(): array
'personas',
],
'columns' => [
'borgerId' => [
Personers::class . '_borgerId' => [
'type' => 'scalar',
'balias' => 'borgerId',
'sqlAlias' => 'borgerId',
Expand All @@ -4983,7 +4983,7 @@ private function getExamples(): array
'personas',
],
'columns' => [
'borgerId' => [
strtolower(Personers::class) . '_borgerId' => [
'type' => 'scalar',
'balias' => 'borgerId',
'sqlAlias' => 'borgerId',
Expand Down
17 changes: 7 additions & 10 deletions tests/integration/Paginator/Adapter/QueryBuilderCest.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,24 +177,21 @@ public function testIssue13552(IntegrationTester $I)
$modelsManager = $this->getService('modelsManager');

$builder = $modelsManager->createBuilder()
->columns("COUNT(*) as robos_count")
->columns("Robots.*")
->from(['Robots' => Robots::class])
->join(RobotsParts::class, "RobotsParts.robots_id = Robots.id", "RobotsParts", "LEFT")
->join(RobotsParts::class, "RobotsParts_2.robots_id = Robots.id", "RobotsParts_2", "LEFT")
->groupBy('Robots.id, RobotsParts.id, RobotsParts.parts_id, RobotsParts_2.id, RobotsParts_2.parts_id')
->having('MAX(Robots.year) > 1970');

// var_dump($builder->getQuery()->getSql());
->groupBy('Robots.id, RobotsParts.id, RobotsParts.parts_id')
->having('Robots.id > 2');

$paginate = (new QueryBuilder(
[
"builder" => $builder,
"limit" => 1,
"page" => 2
"limit" => 10,
"page" => 1
]
))->paginate();

$I->assertEquals(4, $paginate->last);
$I->assertEquals(4, $paginate->total_items);
$I->assertEquals(1, $paginate->last);
$I->assertEquals(1, $paginate->total_items);
}
}

0 comments on commit 76ad20b

Please sign in to comment.