mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-09 11:44:10 +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->conditions = self::_parseConditions($tag);
|
||||||
$group->pipe = strtoupper($attribs['pipe'] ?? '') ?: 'AND';
|
$group->pipe = strtoupper($attribs['pipe'] ?? '') ?: 'AND';
|
||||||
$group->ifvar = $attribs['if'] ?? null;
|
$group->ifvar = $attribs['if'] ?? null;
|
||||||
|
$group->not_null = ($attribs['notnull'] ?? false) ? true : false;
|
||||||
$result[] = $group;
|
$result[] = $group;
|
||||||
}
|
}
|
||||||
elseif ($name === 'query')
|
elseif ($name === 'query')
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,5 @@ class ConditionGroup
|
||||||
public $conditions = array();
|
public $conditions = array();
|
||||||
public $pipe = 'AND';
|
public $pipe = 'AND';
|
||||||
public $ifvar;
|
public $ifvar;
|
||||||
|
public $not_null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -580,6 +580,10 @@ class Query extends VariableBase
|
||||||
{
|
{
|
||||||
$result .= ($result === '' ? '' : (' ' . $condition->pipe . ' ')) . '(' . $condition_string . ')';
|
$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
|
// Simple condition
|
||||||
|
|
|
||||||
|
|
@ -8,5 +8,9 @@
|
||||||
</columns>
|
</columns>
|
||||||
<conditions>
|
<conditions>
|
||||||
<condition operation="equal" column="document_srl" var="document_srl" />
|
<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>
|
</conditions>
|
||||||
</query>
|
</query>
|
||||||
|
|
|
||||||
|
|
@ -512,32 +512,59 @@ class DBQueryParserTest extends \Codeception\Test\Unit
|
||||||
'user_name' => null,
|
'user_name' => null,
|
||||||
'nick_name' => 'TEST',
|
'nick_name' => 'TEST',
|
||||||
'document_srl' => 1234,
|
'document_srl' => 1234,
|
||||||
|
'module_srl' => 5678,
|
||||||
));
|
));
|
||||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ? AND (`module_srl` = ?)', $sql);
|
||||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
$this->assertEquals(['TEST', 1234, 5678], $query->getQueryParams());
|
||||||
|
|
||||||
$sql = $query->getQueryString('rx_', array(
|
$sql = $query->getQueryString('rx_', array(
|
||||||
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||||
'nick_name' => 'TEST',
|
'nick_name' => 'TEST',
|
||||||
'document_srl' => 1234,
|
'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('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ? AND (`module_srl` = ? OR `member_srl` = ?)', $sql);
|
||||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
$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(
|
$query->getQueryString('rx_', array(
|
||||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||||
'document_srl' => 1234,
|
'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(
|
$query->getQueryString('rx_', array(
|
||||||
'nick_name' => null,
|
'nick_name' => null,
|
||||||
'document_srl' => 1234,
|
'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');
|
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml');
|
||||||
|
|
||||||
$sql = $query->getQueryString('rx_', array(
|
$sql = $query->getQueryString('rx_', array(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue