mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-07 02:31:40 +09:00
Allow nested condition groups
XML 쿼리에서 <conditions><group> 안에 <group> 태그를 또 쓸 수 있도록 허용함. 이제 WHERE (a AND (b OR (c AND d))) 이런 조건을 작성할 수 있음.
This commit is contained in:
parent
2cfb7585af
commit
3359431d08
3 changed files with 48 additions and 13 deletions
|
|
@ -105,11 +105,24 @@ class ConditionGroup
|
|||
{
|
||||
$args = array();
|
||||
foreach($this->conditions as $condition)
|
||||
{
|
||||
$arg = $condition->getArgument();
|
||||
if($arg)
|
||||
{
|
||||
if($condition instanceof ConditionGroup)
|
||||
{
|
||||
foreach($condition->getArguments() as $arg)
|
||||
{
|
||||
if($arg)
|
||||
{
|
||||
$args[] = $arg;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$args[] = $arg;
|
||||
$arg = $condition->getArgument();
|
||||
if($arg)
|
||||
{
|
||||
$args[] = $arg;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $args;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class ConditionGroupTag
|
|||
* @var string|array value is ConditionTag object
|
||||
*/
|
||||
var $conditions;
|
||||
|
||||
|
||||
/**
|
||||
* pipe
|
||||
* @var string
|
||||
|
|
@ -29,7 +29,7 @@ class ConditionGroupTag
|
|||
* @param string $pipe
|
||||
* @return void
|
||||
*/
|
||||
function __construct($conditions, $pipe = "")
|
||||
function __construct($conditions, $pipe = 'and')
|
||||
{
|
||||
$this->pipe = $pipe;
|
||||
|
||||
|
|
@ -37,11 +37,22 @@ class ConditionGroupTag
|
|||
{
|
||||
$conditions = array($conditions);
|
||||
}
|
||||
|
||||
|
||||
//var_dump($conditions);
|
||||
foreach($conditions as $condition)
|
||||
{
|
||||
//if($condition->node_name === 'query') $this->conditions[] = new QueryTag($condition, true);
|
||||
$this->conditions[] = new ConditionTag($condition);
|
||||
if($condition->node_name === 'group')
|
||||
{
|
||||
$subconditions = $condition->condition;
|
||||
$subgroups = $condition->group;
|
||||
$subconditions = $subconditions ? (is_array($subconditions) ? $subconditions : [$subconditions]) : [];
|
||||
$subgroups = $subgroups ? (is_array($subgroups) ? $subgroups : [$subgroups]) : [];
|
||||
$this->conditions[] = new ConditionGroupTag(array_merge($subconditions, $subgroups), $condition->attrs->pipe);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->conditions[] = new ConditionTag($condition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -58,8 +69,15 @@ class ConditionGroupTag
|
|||
{
|
||||
$conditions_string = 'array(' . PHP_EOL;
|
||||
foreach($this->conditions as $condition)
|
||||
{
|
||||
$conditions_string .= $condition->getConditionString() . PHP_EOL . ',';
|
||||
{
|
||||
if($condition instanceof ConditionGroupTag)
|
||||
{
|
||||
$conditions_string .= $condition->getConditionGroupString() . PHP_EOL . ',';
|
||||
}
|
||||
else
|
||||
{
|
||||
$conditions_string .= $condition->getConditionString() . PHP_EOL . ',';
|
||||
}
|
||||
}
|
||||
$conditions_string = substr($conditions_string, 0, -2); //remove ','
|
||||
$conditions_string .= ')';
|
||||
|
|
|
|||
|
|
@ -61,8 +61,12 @@ class ConditionsTag
|
|||
$xml_groups = array($xml_groups);
|
||||
}
|
||||
foreach($xml_groups as $group)
|
||||
{
|
||||
$this->condition_groups[] = new ConditionGroupTag($group->condition, $group->attrs->pipe);
|
||||
{
|
||||
$subconditions = $group->condition;
|
||||
$subgroups = $group->group;
|
||||
$subconditions = $subconditions ? (is_array($subconditions) ? $subconditions : [$subconditions]) : [];
|
||||
$subgroups = $subgroups ? (is_array($subgroups) ? $subgroups : [$subgroups]) : [];
|
||||
$this->condition_groups[] = new ConditionGroupTag(array_merge($subconditions, $subgroups), $group->attrs->pipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue