From 42227c6947859e653fee5fe8f792ee54f3e01d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20H=C3=A1k?= Date: Mon, 4 Apr 2016 14:52:32 +0200 Subject: [PATCH 1/2] SqlBuilder::addAlias: Fixed tests --- tests/Database/Table/SqlBuilder.addAlias().phpt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/Database/Table/SqlBuilder.addAlias().phpt b/tests/Database/Table/SqlBuilder.addAlias().phpt index 41f26b052..d4cd7ca9c 100644 --- a/tests/Database/Table/SqlBuilder.addAlias().phpt +++ b/tests/Database/Table/SqlBuilder.addAlias().phpt @@ -29,11 +29,8 @@ $driver = $connection->getSupplementalDriver(); test(function() use ($context, $driver) { // test duplicated table names throw exception - if ($driver->isSupported(ISupplementalDriver::SUPPORT_SCHEMA)) { - $sqlBuilder = new SqlBuilderMock('public.author', $context); - } else { - $sqlBuilder = new SqlBuilderMock('author', $context); - } + $authorTable = ($driver->isSupported(ISupplementalDriver::SUPPORT_SCHEMA) ? 'public.' : '' ) . 'author'; + $sqlBuilder = new SqlBuilderMock($authorTable, $context); $sqlBuilder->addAlias(':book(translator)', 'book1'); $sqlBuilder->addAlias(':book:book_tag', 'book2'); Assert::exception(function() use ($sqlBuilder) { @@ -42,7 +39,7 @@ test(function() use ($context, $driver) { // test duplicated table names throw e Assert::exception(function() use ($sqlBuilder) { // reserved by base table name $sqlBuilder->addAlias(':book', 'author'); - }, Nette\InvalidArgumentException::class, "Table alias 'author' from chain ':book' is already in use by chain 'author'. Please add/change alias for one of them."); + }, Nette\InvalidArgumentException::class, "Table alias 'author' from chain ':book' is already in use by chain '$authorTable'. Please add/change alias for one of them."); Assert::exception(function() use ($sqlBuilder) { $sqlBuilder->addAlias(':book', 'book1'); From b389723722de57395444487e5aaa61f9efe7b6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20H=C3=A1k?= Date: Mon, 4 Apr 2016 14:54:29 +0200 Subject: [PATCH 2/2] SqlBuilder: Improved checking of unique table name --- src/Database/Table/SqlBuilder.php | 2 +- tests/Database/Table/SqlBuilder.addAlias().phpt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Database/Table/SqlBuilder.php b/src/Database/Table/SqlBuilder.php index 54aec347e..4af4042ad 100644 --- a/src/Database/Table/SqlBuilder.php +++ b/src/Database/Table/SqlBuilder.php @@ -551,7 +551,7 @@ public function parseJoinsCb(& $joins, $match) $tableAlias = preg_replace('#^(.*\.)?(.*)$#', '$2', $table); } - $tableChain .= $keyMatch['del'] . $tableAlias; + $tableChain .= $keyMatch[0]; if (!$isLast || !$this->currentAlias) { $this->checkUniqueTableName($tableAlias, $tableChain); } diff --git a/tests/Database/Table/SqlBuilder.addAlias().phpt b/tests/Database/Table/SqlBuilder.addAlias().phpt index d4cd7ca9c..6afa8958d 100644 --- a/tests/Database/Table/SqlBuilder.addAlias().phpt +++ b/tests/Database/Table/SqlBuilder.addAlias().phpt @@ -51,6 +51,12 @@ test(function() use ($context, $driver) { // test duplicated table names throw e $joins = []; $sqlBuilder->parseJoins($joins, $query); }, Nette\InvalidArgumentException::class, "Table alias 'tag' from chain '.book1:book_tag.tag' is already in use by chain ':book'. Please add/change alias for one of them."); + + Assert::exception(function() use ($sqlBuilder) { + $query = 'WHERE :book(translator).id IS NULL AND :book.id IS NULL'; + $joins = []; + $sqlBuilder->parseJoins($joins, $query); + }, Nette\InvalidArgumentException::class, "Table alias 'book' from chain ':book' is already in use by chain ':book(translator)'. Please add/change alias for one of them."); });