From 4907e293de5680cbfe4d0823ff4e79253069f71b Mon Sep 17 00:00:00 2001 From: dewekk <60457472+dewekk@users.noreply.github.com> Date: Tue, 31 May 2022 10:54:56 +0900 Subject: [PATCH 1/5] Use alias in Update Query --- common/framework/parsers/dbquery/query.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/framework/parsers/dbquery/query.php b/common/framework/parsers/dbquery/query.php index 6a73b4446..39e57133b 100644 --- a/common/framework/parsers/dbquery/query.php +++ b/common/framework/parsers/dbquery/query.php @@ -326,7 +326,7 @@ class Query extends VariableBase // Compose the INTO clause. if (count($this->tables)) { - $tables = $this->_arrangeTables($this->tables, false); + $tables = $this->_arrangeTables($this->tables); if ($tables !== '') { $result .= $tables; From 8d7a467efac12353dec9e3263d4eaa1d75e1b6e9 Mon Sep 17 00:00:00 2001 From: dewekk <60457472+dewekk@users.noreply.github.com> Date: Tue, 31 May 2022 11:14:04 +0900 Subject: [PATCH 2/5] Fix unit test --- .../unit/framework/parsers/DBQueryParserTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/unit/framework/parsers/DBQueryParserTest.php b/tests/unit/framework/parsers/DBQueryParserTest.php index 691993c74..4c26a3f1a 100644 --- a/tests/unit/framework/parsers/DBQueryParserTest.php +++ b/tests/unit/framework/parsers/DBQueryParserTest.php @@ -416,14 +416,14 @@ class DBQueryParserTest extends \Codeception\TestCase\Test $sql = $query->getQueryString('rx_', $args); $params = $query->getQueryParams(); - $this->assertEquals('UPDATE `rx_documents` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['456', '닉네임', '5', '123'], $params); $args = array('document_srl' => 123, 'member_srl' => 456, 'voted_count' => 5); $sql = $query->getQueryString('rx_', $args); $params = $query->getQueryParams(); - $this->assertEquals('UPDATE `rx_documents` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['456', '5', '123'], $params); } @@ -455,28 +455,28 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => '', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['', 1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql); $this->assertEquals([1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => '', )); - $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\'', $sql); $this->assertEquals([], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, )); - $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql); $this->assertEquals([], $query->getQueryParams()); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml'); @@ -505,7 +505,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => 'TEST', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['TEST', 1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( @@ -513,7 +513,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => 'TEST', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['TEST', 1234], $query->getQueryParams()); $this->tester->expectThrowable('Exception', function() use($query) { From e0514110afea97382473604a0ecf8f60b2492806 Mon Sep 17 00:00:00 2001 From: dewekk <60457472+dewekk@users.noreply.github.com> Date: Thu, 2 Jun 2022 17:12:52 +0900 Subject: [PATCH 3/5] Revert "Fix unit test" This reverts commit 8d7a467efac12353dec9e3263d4eaa1d75e1b6e9. --- .../unit/framework/parsers/DBQueryParserTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/unit/framework/parsers/DBQueryParserTest.php b/tests/unit/framework/parsers/DBQueryParserTest.php index 4c26a3f1a..691993c74 100644 --- a/tests/unit/framework/parsers/DBQueryParserTest.php +++ b/tests/unit/framework/parsers/DBQueryParserTest.php @@ -416,14 +416,14 @@ class DBQueryParserTest extends \Codeception\TestCase\Test $sql = $query->getQueryString('rx_', $args); $params = $query->getQueryParams(); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['456', '닉네임', '5', '123'], $params); $args = array('document_srl' => 123, 'member_srl' => 456, 'voted_count' => 5); $sql = $query->getQueryString('rx_', $args); $params = $query->getQueryParams(); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['456', '5', '123'], $params); } @@ -455,28 +455,28 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => '', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['', 1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql); $this->assertEquals([1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => '', )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\'', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql); $this->assertEquals([], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'document_srl' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql); $this->assertEquals([], $query->getQueryParams()); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml'); @@ -505,7 +505,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => 'TEST', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['TEST', 1234], $query->getQueryParams()); $sql = $query->getQueryString('rx_', array( @@ -513,7 +513,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test 'nick_name' => 'TEST', 'document_srl' => 1234, )); - $this->assertEquals('UPDATE `rx_documents` AS `documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql); + $this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals(['TEST', 1234], $query->getQueryParams()); $this->tester->expectThrowable('Exception', function() use($query) { From ecda6ddcb82662c78a91687e44574012e7fde400 Mon Sep 17 00:00:00 2001 From: dewekk <60457472+dewekk@users.noreply.github.com> Date: Thu, 2 Jun 2022 17:21:28 +0900 Subject: [PATCH 4/5] =?UTF-8?q?Update=20=EC=BF=BC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=84=9C=20alias=20=EA=B8=B0=EB=B3=B8=20=EA=B0=92=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20=EC=95=88=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/framework/parsers/dbquery/query.php | 10 ++++++++-- common/framework/parsers/dbqueryparser.php | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/common/framework/parsers/dbquery/query.php b/common/framework/parsers/dbquery/query.php index 39e57133b..2f75e8381 100644 --- a/common/framework/parsers/dbquery/query.php +++ b/common/framework/parsers/dbquery/query.php @@ -326,7 +326,7 @@ class Query extends VariableBase // Compose the INTO clause. if (count($this->tables)) { - $tables = $this->_arrangeTables($this->tables); + $tables = $this->_arrangeTables($this->tables, true, false); if ($tables !== '') { $result .= $tables; @@ -419,9 +419,10 @@ class Query extends VariableBase * * @param array $tables * @param bool $use_aliases + * @param bool $use_default_aliases * @return string */ - protected function _arrangeTables(array $tables, bool $use_aliases = true): string + protected function _arrangeTables(array $tables, bool $use_aliases = true, bool $use_default_aliases = true): string { // Initialize the result. $result = array(); @@ -439,6 +440,7 @@ class Query extends VariableBase if ($table instanceof self) { $tabledef = '(' . $table->getQueryString($this->_prefix, $this->_args) . ')'; + $table->alias = $table->alias ?: $table->name; if ($table->alias) { $tabledef .= ' AS `' . $table->alias . '`'; @@ -453,6 +455,10 @@ class Query extends VariableBase else { $tabledef = self::quoteName($this->_prefix . $table->name); + if ($use_default_aliases) + { + $table->alias = $table->alias ?: $table->name; + } if ($use_aliases && $table->alias && $table->alias !== ($this->_prefix . $table->name)) { $tabledef .= ' AS `' . $table->alias . '`'; diff --git a/common/framework/parsers/dbqueryparser.php b/common/framework/parsers/dbqueryparser.php index 5624ec03a..96ed1583c 100644 --- a/common/framework/parsers/dbqueryparser.php +++ b/common/framework/parsers/dbqueryparser.php @@ -65,7 +65,7 @@ class DBQueryParser extends BaseParser { $table = new DBQuery\Table; $table->name = trim($tag['name']); - $table->alias = trim($tag['alias']) ?: $table->name; + $table->alias = trim($tag['alias']) ?: null; $table->ifvar = trim($tag['if']) ?: null; } @@ -78,7 +78,7 @@ class DBQueryParser extends BaseParser $table->join_conditions = self::_parseConditions($tag->conditions); } } - $query->tables[$table->alias] = $table; + $query->tables[$table->alias ?: $table->name] = $table; } // Load index hints. From 293f6eb326797c8060e8876597d066cce1dfe6f9 Mon Sep 17 00:00:00 2001 From: dewekk <60457472+dewekk@users.noreply.github.com> Date: Thu, 2 Jun 2022 17:40:09 +0900 Subject: [PATCH 5/5] Fix unit test --- tests/unit/framework/parsers/DBQueryParserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/framework/parsers/DBQueryParserTest.php b/tests/unit/framework/parsers/DBQueryParserTest.php index 691993c74..bd67ddca7 100644 --- a/tests/unit/framework/parsers/DBQueryParserTest.php +++ b/tests/unit/framework/parsers/DBQueryParserTest.php @@ -11,7 +11,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test $this->assertTrue($query->select_distinct); $this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table); - $this->assertEquals('documents', $query->tables['documents']->alias); + $this->assertEquals('documents', $query->tables['documents']->name); $this->assertEquals(1, count($query->columns)); $this->assertEquals('*', $query->columns[0]->name);