Fixes for newQuery().

This commit is contained in:
Andrey Pyzhikov 2022-08-19 03:47:39 +08:00
parent 96b7f13f7a
commit 99f0dd5671
No known key found for this signature in database
GPG Key ID: BA61560FB9B7B817
3 changed files with 25 additions and 3 deletions

View File

@ -577,7 +577,7 @@ class BaseBuilder
{
$table = $this->buildSubquery($from, true, $alias);
$this->trackAliases($table);
$this->db->addTableAlias($alias);
$this->QBFrom[] = $table;
return $this;

View File

@ -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;
}
/**

View File

@ -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());
}
}