Fix #1706 support default="null" in XML query parser

This commit is contained in:
Kijin Sung 2021-06-19 20:26:05 +09:00
parent 1400895d27
commit 6a4d3d912c
3 changed files with 17 additions and 2 deletions

View file

@ -346,6 +346,8 @@ class VariableBase
return [false, intval(\Rhymix\Framework\Session::getMemberSrl())];
case 'sequence()':
return [false, getNextSequence()];
case 'null':
return [true, 'NULL'];
}
// If the default value is a calculation based on the current value, return a query string.

View file

@ -4,6 +4,7 @@
</tables>
<columns>
<column name="member_srl" var="member_srl" filter="number" default="0" />
<column name="nick_name" var="nick_name" notnull="notnull" default="null" />
<column name="voted_count" operation="plus" var="voted_count" filter="number" />
<column name="blamed_count" operation="minus" var="blamed_count" filter="number" />
</columns>

View file

@ -394,12 +394,17 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('UPDATE', $query->type);
$this->assertEquals(1, count($query->tables));
$this->assertEquals('documents', $query->tables['documents']->name);
$this->assertEquals(3, count($query->columns));
$this->assertEquals(4, count($query->columns));
$this->assertTrue($query->columns[0] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnWrite);
$this->assertEquals('member_srl', $query->columns[0]->name);
$this->assertEquals('member_srl', $query->columns[0]->var);
$this->assertEquals('number', $query->columns[0]->filter);
$this->assertEquals('0', $query->columns[0]->default);
$this->assertTrue($query->columns[1] instanceof Rhymix\Framework\Parsers\DBQuery\ColumnWrite);
$this->assertEquals('nick_name', $query->columns[1]->name);
$this->assertEquals('nick_name', $query->columns[1]->var);
$this->assertNull($query->columns[1]->filter);
$this->assertEquals('null', $query->columns[1]->default);
$this->assertEquals(1, count($query->conditions));
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('equal', $query->conditions[0]->operation);
@ -407,11 +412,18 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertNull($query->groupby);
$this->assertNull($query->navigation);
$args = array('document_srl' => 123, 'nick_name' => '닉네임', 'member_srl' => 456, 'voted_count' => 5);
$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(['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` = ?, `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);
}