mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 17:21:39 +09:00
Support "if" in <group> inside <groups> #2595
This commit is contained in:
parent
386f93fc6c
commit
51762315de
4 changed files with 19 additions and 2 deletions
|
|
@ -175,9 +175,10 @@ class DBQueryParser extends BaseParser
|
|||
foreach ($xml->groups->children() as $tag)
|
||||
{
|
||||
$name = $tag->getName();
|
||||
$ifvar = trim($tag['if'] ?? '') ?: null;
|
||||
if ($name === 'group')
|
||||
{
|
||||
$query->groupby->columns[] = trim($tag['column'] ?? '');
|
||||
$query->groupby->columns[] = [trim($tag['column'] ?? ''), $ifvar];
|
||||
}
|
||||
elseif ($name === 'having')
|
||||
{
|
||||
|
|
|
|||
|
|
@ -222,6 +222,14 @@ class Query extends VariableBase
|
|||
$columns = array();
|
||||
foreach ($this->groupby->columns as $column_name)
|
||||
{
|
||||
if (is_array($column_name))
|
||||
{
|
||||
list($column_name, $ifvar) = $column_name;
|
||||
if ($ifvar && empty($this->_args[$ifvar]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (self::isValidColumnName($column_name))
|
||||
{
|
||||
$columns[] = self::quoteName($column_name);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
</conditions>
|
||||
<groups if="if_groupby">
|
||||
<group column="member.member_srl" />
|
||||
<group column="member.nick_name" if="if_groupby_nick_name" />
|
||||
<having>
|
||||
<condition operation="notequal" column="member.member_srl" var="exclude_member_srl" notnull="notnull" />
|
||||
</having>
|
||||
|
|
|
|||
|
|
@ -178,7 +178,8 @@ class DBQueryParserTest extends \Codeception\Test\Unit
|
|||
$this->assertEquals('AND', $query->conditions[1]->pipe);
|
||||
|
||||
$this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy);
|
||||
$this->assertEquals('member.member_srl', $query->groupby->columns[0]);
|
||||
$this->assertEquals(['member.member_srl', null], $query->groupby->columns[0]);
|
||||
$this->assertEquals(['member.nick_name', 'if_groupby_nick_name'], $query->groupby->columns[1]);
|
||||
$this->assertEquals(1, count($query->groupby->having));
|
||||
$this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
|
||||
$this->assertEquals('member.member_srl', $query->groupby->having[0]->column);
|
||||
|
|
@ -196,6 +197,12 @@ class DBQueryParserTest extends \Codeception\Test\Unit
|
|||
'AND `documents`.`document_srl` IN (?, ?, ?) GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?', $sql);
|
||||
$this->assertEquals(['12', '34', '56', '4'], $params);
|
||||
|
||||
$args['if_groupby_nick_name'] = true;
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
|
||||
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`member_srl` = `member`.`member_srl` ' .
|
||||
'AND `documents`.`document_srl` IN (?, ?, ?) GROUP BY `member`.`member_srl`, `member`.`nick_name` HAVING `member`.`member_srl` != ?', $sql);
|
||||
|
||||
$args = array(
|
||||
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'exclude_document_srl_list' => '78,90',
|
||||
'if_table' => true, 'if_column' => true, 'if_condition2' => true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue