From 99f0dd567108e728fa4e3a7159a1b32d7092e057 Mon Sep 17 00:00:00 2001 From: Andrey Pyzhikov <5071@mail.ru> Date: Fri, 19 Aug 2022 03:47:39 +0800 Subject: [PATCH] Fixes for newQuery(). --- system/Database/BaseBuilder.php | 2 +- system/Database/BaseConnection.php | 7 ++++++- tests/system/Database/Builder/PrefixTest.php | 19 ++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/system/Database/BaseBuilder.php b/system/Database/BaseBuilder.php index f00443e262..58fe0da786 100644 --- a/system/Database/BaseBuilder.php +++ b/system/Database/BaseBuilder.php @@ -577,7 +577,7 @@ class BaseBuilder { $table = $this->buildSubquery($from, true, $alias); - $this->trackAliases($table); + $this->db->addTableAlias($alias); $this->QBFrom[] = $table; return $this; diff --git a/system/Database/BaseConnection.php b/system/Database/BaseConnection.php index 7998c8cf6d..5aaf843a07 100644 --- a/system/Database/BaseConnection.php +++ b/system/Database/BaseConnection.php @@ -882,7 +882,12 @@ abstract class BaseConnection implements ConnectionInterface */ public function newQuery(): BaseBuilder { - return $this->table(',')->from([], true); + // save table aliases + $tempAliases = $this->aliasedTables; + $builder = $this->table(',')->from([], true); + $this->aliasedTables = $tempAliases; + + return $builder; } /** diff --git a/tests/system/Database/Builder/PrefixTest.php b/tests/system/Database/Builder/PrefixTest.php index 7d99800776..082d316a54 100644 --- a/tests/system/Database/Builder/PrefixTest.php +++ b/tests/system/Database/Builder/PrefixTest.php @@ -11,6 +11,7 @@ namespace CodeIgniter\Database\Builder; +use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Test\CIUnitTestCase; use CodeIgniter\Test\Mock\MockConnection; @@ -50,7 +51,7 @@ final class PrefixTest extends CIUnitTestCase $this->assertSame($expectedBinds, $builder->getBinds()); } - public function testPrefixWithSubquery() + public function testPrefixWithSubquery(): void { $expected = <<<'NOWDOC' SELECT "u"."id", "u"."name", (SELECT 1 FROM "ci_users" "sub" WHERE "sub"."id" = "u"."id") "one" @@ -69,4 +70,20 @@ final class PrefixTest extends CIUnitTestCase $this->assertSame($expected, $builder->getCompiledSelect()); } + + public function testPrefixWithNewQuery(): void + { + $expectedSQL = <<<'NOWDOC' + SELECT "users_1"."id", "name" + FROM (SELECT "u"."id", "u"."name" FROM "ci_users" "u") "users_1" + WHERE "users_1"."id" > 10 + NOWDOC; + + $subquery = (new BaseBuilder('users u', $this->db))->select('u.id, u.name'); + $builder = $this->db->newQuery()->fromSubquery($subquery, 'users_1') + ->select('users_1.id, name') + ->where('users_1.id > ', 10); + + $this->assertSame($expectedSQL, $builder->getCompiledSelect()); + } }