From 3f8d72b537d2b0614a938c4bc9c6681faf123716 Mon Sep 17 00:00:00 2001 From: ucorina Date: Mon, 5 Sep 2011 17:00:08 +0000 Subject: [PATCH] Updated Condition query part class to make code more readable and reduce calls to ->hasArgument(). git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9035 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/db/DB.class.php | 3 ++ .../queryparts/condition/Condition.class.php | 35 ++----------------- .../condition/ConditionSubquery.class.php | 11 ++++++ .../condition/ConditionWithArgument.class.php | 34 ++++++++++++++++++ .../ConditionWithoutArgument.class.php | 14 ++++++++ .../tags/condition/ConditionTag.class.php | 30 ++++++++++++---- test-phpUnit/config/config.inc.php | 3 ++ 7 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 classes/db/queryparts/condition/ConditionSubquery.class.php create mode 100644 classes/db/queryparts/condition/ConditionWithArgument.class.php create mode 100644 classes/db/queryparts/condition/ConditionWithoutArgument.class.php diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index 0fb1f4584..015e3f7c0 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -31,6 +31,9 @@ require(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php'); require(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php'); require(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php'); + require(_XE_PATH_.'classes/db/queryparts/condition/ConditionWithArgument.class.php'); + require(_XE_PATH_.'classes/db/queryparts/condition/ConditionWithoutArgument.class.php'); + require(_XE_PATH_.'classes/db/queryparts/condition/ConditionSubquery.class.php'); require(_XE_PATH_.'classes/db/queryparts/expression/StarExpression.class.php'); require(_XE_PATH_.'classes/db/queryparts/order/OrderByColumn.class.php'); require(_XE_PATH_.'classes/db/queryparts/limit/Limit.class.php'); diff --git a/classes/db/queryparts/condition/Condition.class.php b/classes/db/queryparts/condition/Condition.class.php index 94b56c5a2..b3dec7766 100644 --- a/classes/db/queryparts/condition/Condition.class.php +++ b/classes/db/queryparts/condition/Condition.class.php @@ -8,29 +8,14 @@ var $_value; - function Condition($column_name, $argument, $operation, $pipe = ""){ + function Condition($column_name, $argument, $operation, $pipe){ $this->column_name = $column_name; $this->argument = $argument; $this->operation = $operation; $this->pipe = $pipe; - if($this->hasArgument()) - $this->_value = $argument->getValue(); - else if(is_a($this->argument, 'Subquery')) - $this->_value = $argument->toString(); - else { - if(in_array($operation, array('in', 'not in'))) - $this->_value = '('. $argument .')'; - else - $this->_value = $argument; - } - } - - function hasArgument(){ - return is_a($this->argument, 'Argument'); } function getArgument(){ - if($this->hasArgument()) return $this->argument; return null; } @@ -42,19 +27,7 @@ } function toStringWithoutValue(){ - if($this->hasArgument()){ - $value = $this->argument->getUnescapedValue(); - - if(is_array($value)){ - $q = ''; - foreach ($value as $v) $q .= '?,'; - if($q !== '') $q = substr($q, 0, -1); - $q = '(' . $q . ')'; - } - else $q = '?'; - return $this->pipe . ' ' . $this->getConditionPart($q); - } - else return $this->toString(); + return $this->argument; } function toStringWithValue(){ @@ -66,8 +39,6 @@ } function show(){ - if($this->hasArgument() && !$this->argument->isValid()) return false; - if($this->hasArgument() && ($this->_value === '\'\'')) return false; if(is_array($this->_value) && count($this->_value) === 1 && $this->_value[0] === '') return false; switch($this->operation) { case 'equal' : @@ -91,7 +62,7 @@ if(count($this->_value)!=2) return false; } - return true; + return true; } function getConditionPart($value) { diff --git a/classes/db/queryparts/condition/ConditionSubquery.class.php b/classes/db/queryparts/condition/ConditionSubquery.class.php new file mode 100644 index 000000000..c515e814b --- /dev/null +++ b/classes/db/queryparts/condition/ConditionSubquery.class.php @@ -0,0 +1,11 @@ +_value = $this->argument->toString(); + } + } + +?> diff --git a/classes/db/queryparts/condition/ConditionWithArgument.class.php b/classes/db/queryparts/condition/ConditionWithArgument.class.php new file mode 100644 index 000000000..59ed0d6af --- /dev/null +++ b/classes/db/queryparts/condition/ConditionWithArgument.class.php @@ -0,0 +1,34 @@ +_value = $argument->getValue(); + } + + function getArgument(){ + return $this->argument; + } + + function toStringWithoutValue(){ + $value = $this->argument->getUnescapedValue(); + + if(is_array($value)){ + $q = ''; + foreach ($value as $v) $q .= '?,'; + if($q !== '') $q = substr($q, 0, -1); + $q = '(' . $q . ')'; + } + else $q = '?'; + return $this->pipe . ' ' . $this->getConditionPart($q); + } + + function show(){ + if(!$this->argument->isValid()) return false; + if($this->_value === '\'\'') return false; + return parent::show(); + } + } + +?> diff --git a/classes/db/queryparts/condition/ConditionWithoutArgument.class.php b/classes/db/queryparts/condition/ConditionWithoutArgument.class.php new file mode 100644 index 000000000..5c008c357 --- /dev/null +++ b/classes/db/queryparts/condition/ConditionWithoutArgument.class.php @@ -0,0 +1,14 @@ +_value = '('. $argument .')'; + else + $this->_value = $argument; + + } + } + +?> diff --git a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php index 29dfa70e9..66349ec4b 100644 --- a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php +++ b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php @@ -56,12 +56,30 @@ } function getConditionString(){ - return sprintf("new Condition('%s',%s,%s%s)" - , $this->column_name - , $this->default_column ? $this->default_column: '$' . $this->argument_name . '_argument' - , '"'.$this->operation.'"' - , $this->pipe ? ", '" . $this->pipe . "'" : '' - ); + if($this->query){ + return sprintf("new ConditionSubquery('%s',%s,%s%s)" + , $this->column_name + , $this->default_column + , '"'.$this->operation.'"' + , $this->pipe ? ", '" . $this->pipe . "'" : '' + ); + } + else if($this->default_column){ + return sprintf("new ConditionWithoutArgument('%s',%s,%s%s)" + , $this->column_name + , $this->default_column + , '"'.$this->operation.'"' + , $this->pipe ? ", '" . $this->pipe . "'" : '' + ); + } + else{ + return sprintf("new ConditionWithArgument('%s',%s,%s%s)" + , $this->column_name + , '$' . $this->argument_name . '_argument' + , '"'.$this->operation.'"' + , $this->pipe ? ", '" . $this->pipe . "'" : '' + ); + } } } ?> \ No newline at end of file diff --git a/test-phpUnit/config/config.inc.php b/test-phpUnit/config/config.inc.php index 6fc807eed..6b3e900ba 100644 --- a/test-phpUnit/config/config.inc.php +++ b/test-phpUnit/config/config.inc.php @@ -40,6 +40,9 @@ require_once(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php'); + require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionWithArgument.class.php'); + require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionWithoutArgument.class.php'); + require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionSubquery.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/expression/StarExpression.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/order/OrderByColumn.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/limit/Limit.class.php');