mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 17:21:39 +09:00
Add notnull property to <group> tag in conditions
This commit is contained in:
parent
fda92b368d
commit
6e325526c8
5 changed files with 43 additions and 6 deletions
|
|
@ -286,6 +286,7 @@ class DBQueryParser extends BaseParser
|
|||
$group->conditions = self::_parseConditions($tag);
|
||||
$group->pipe = strtoupper($attribs['pipe'] ?? '') ?: 'AND';
|
||||
$group->ifvar = $attribs['if'] ?? null;
|
||||
$group->not_null = ($attribs['notnull'] ?? false) ? true : false;
|
||||
$result[] = $group;
|
||||
}
|
||||
elseif ($name === 'query')
|
||||
|
|
|
|||
|
|
@ -10,4 +10,5 @@ class ConditionGroup
|
|||
public $conditions = array();
|
||||
public $pipe = 'AND';
|
||||
public $ifvar;
|
||||
public $not_null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -580,6 +580,10 @@ class Query extends VariableBase
|
|||
{
|
||||
$result .= ($result === '' ? '' : (' ' . $condition->pipe . ' ')) . '(' . $condition_string . ')';
|
||||
}
|
||||
elseif ($condition->not_null)
|
||||
{
|
||||
throw new \Rhymix\Framework\Exceptions\QueryError('Condition group marked as NOT NULL must contain at least one valid condition');
|
||||
}
|
||||
}
|
||||
|
||||
// Simple condition
|
||||
|
|
|
|||
|
|
@ -8,5 +8,9 @@
|
|||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="document_srl" var="document_srl" />
|
||||
<group notnull="notnull">
|
||||
<condition operation="equal" column="module_srl" var="module_srl" />
|
||||
<condition operation="equal" column="member_srl" var="member_srl" pipe="or" />
|
||||
</group>
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
|
|||
|
|
@ -512,32 +512,59 @@ class DBQueryParserTest extends \Codeception\Test\Unit
|
|||
'user_name' => null,
|
||||
'nick_name' => 'TEST',
|
||||
'document_srl' => 1234,
|
||||
'module_srl' => 5678,
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ? AND (`module_srl` = ?)', $sql);
|
||||
$this->assertEquals(['TEST', 1234, 5678], $query->getQueryParams());
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'nick_name' => 'TEST',
|
||||
'document_srl' => 1234,
|
||||
'module_srl' => 5678,
|
||||
'member_srl' => 9000,
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ? AND (`module_srl` = ? OR `member_srl` = ?)', $sql);
|
||||
$this->assertEquals(['TEST', 1234, 5678, 9000], $query->getQueryParams());
|
||||
|
||||
$this->tester->expectThrowable('Exception', function() use($query) {
|
||||
$this->tester->expectThrowable('Rhymix\Framework\Exceptions\QueryError', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => 'TEST',
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
});
|
||||
|
||||
$this->tester->expectThrowable('Rhymix\Framework\Exceptions\QueryError', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => 'TEST',
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
});
|
||||
|
||||
$this->tester->expectThrowable('Rhymix\Framework\Exceptions\QueryError', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'document_srl' => 1234,
|
||||
'module_srl' => 5678,
|
||||
));
|
||||
});
|
||||
|
||||
$this->tester->expectThrowable('Exception', function() use($query) {
|
||||
$this->tester->expectThrowable('Rhymix\Framework\Exceptions\QueryError', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => null,
|
||||
'document_srl' => 1234,
|
||||
'member_srl' => 5678,
|
||||
));
|
||||
});
|
||||
|
||||
// No exception
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => 'TEST',
|
||||
'document_srl' => 1234,
|
||||
'module_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'member_srl' => null,
|
||||
));
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml');
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue