Skip to content

Commit 4b38d79

Browse files
norbedg
authored andcommitted
SqlBuilder: Selection as parameter - all parameters must be added to where
1 parent 1af77e1 commit 4b38d79

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/Database/Table/SqlBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ public function addWhere($condition, $parameters = array())
273273
if ($this->driver->isSupported(ISupplementalDriver::SUPPORT_SUBSELECT)) {
274274
$arg = NULL;
275275
$replace = $match[2][0] . '(' . $clone->getSql() . ')';
276-
$this->parameters['where'] = array_merge($this->parameters['where'], $clone->getSqlBuilder()->parameters['where']);
276+
$this->parameters['where'] = array_merge($this->parameters['where'], $clone->getSqlBuilder()->getParameters());
277277
} else {
278278
$arg = array();
279279
foreach ($clone as $row) {

tests/Database/Table/SqlBuilder.addWhere().phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use Tester\Assert;
99
use Nette\Database\SqlLiteral;
1010
use Nette\Database\Conventions\DiscoveredConventions;
1111
use Nette\Database\Table\SqlBuilder;
12+
use Nette\Database\ISupplementalDriver;
1213

1314
require __DIR__ . '/../connect.inc.php'; // create $connection
1415

@@ -41,6 +42,16 @@ test(function() use ($context) { // test Selection as a parameter
4142
)), $sqlBuilder->buildSelectQuery());
4243
});
4344

45+
test(function() use ($context) { // test Selection with parameters as a parameter
46+
$sqlBuilder = new SqlBuilder('book', $context);
47+
$sqlBuilder->addWhere('id', $context->table('book')->having('COUNT(:book_tag.tag_id) >', 1));
48+
$schemaSupported = $context->getConnection()->getSupplementalDriver()->isSupported(ISupplementalDriver::SUPPORT_SCHEMA);
49+
Assert::equal(reformat(array(
50+
'mysql' => 'SELECT * FROM `book` WHERE (`id` IN (?))',
51+
'SELECT * FROM [book] WHERE ([id] IN (SELECT [id] FROM [book] LEFT JOIN ' . ($schemaSupported ? '[public].[book_tag] AS ' : '') . '[book_tag] ON [book].[id] = [book_tag].[book_id] HAVING COUNT([book_tag].[tag_id]) >))',
52+
)), $sqlBuilder->buildSelectQuery());
53+
Assert::count(1, $sqlBuilder->getParameters());
54+
});
4455

4556
test(function() use ($context) { // test Selection with column as a parameter
4657
$sqlBuilder = new SqlBuilder('book', $context);

0 commit comments

Comments
 (0)