From 2a35558b4e429210fc366ff78938bc5249b1aeee Mon Sep 17 00:00:00 2001 From: mosmartin Date: Thu, 19 May 2011 13:17:46 +0000 Subject: [PATCH] Update new xml query classes with xe 1.5 with improved query argument support and update and delete queries git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0-DB@8379 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- .../xmlquery/tags/column/ColumnTag.class.php | 21 +++++++ .../tags/column/DeleteColumnTag.class.php | 43 +++++++++++++ .../tags/column/DeleteColumnsTag.class.php | 58 ++++++++++++++++++ .../tags/column/InsertColumnTag.class.php | 45 ++++++++++++++ .../tags/column/InsertColumnsTag.class.php | 58 ++++++++++++++++++ .../tags/column/SelectColumnTag.class.php | 31 ++++++++++ .../tags/column/SelectColumnsTag.class.php | 45 ++++++++++++++ .../tags/column/UpdateColumnTag.class.php | 46 ++++++++++++++ .../tags/column/UpdateColumnsTag.class.php | 61 +++++++++++++++++++ 9 files changed, 408 insertions(+) create mode 100644 classes/xml/xmlquery/tags/column/ColumnTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/DeleteColumnsTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/InsertColumnTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/SelectColumnTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php create mode 100644 classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php diff --git a/classes/xml/xmlquery/tags/column/ColumnTag.class.php b/classes/xml/xmlquery/tags/column/ColumnTag.class.php new file mode 100644 index 000000000..7cf066013 --- /dev/null +++ b/classes/xml/xmlquery/tags/column/ColumnTag.class.php @@ -0,0 +1,21 @@ + tag inside an XML Query file + * + * Since the tag supports different attributes depending on + * the type of query (select, update, insert, delete) this is only + * the base class for the classes that will model each type tag. + * + **/ + + class ColumnTag { + var $name; + var $dbParser; + + function ColumnTag($name, $dbParser){ + $this->dbParser = $dbParser; + $this->name = $name; + } + } \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php b/classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php new file mode 100644 index 000000000..0c2b1b6db --- /dev/null +++ b/classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php @@ -0,0 +1,43 @@ + tag inside an XML Query file whose action is 'delete' + * + **/ + + + class DeleteColumnTag extends ColumnTag { + var $argument; + + function DeleteColumnTag($column, $dbParser) { + parent::ColumnTag($column->attrs->name, $dbParser); + $this->name = $this->dbParser->parseColumnName($this->name); + require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); + $this->argument = new QueryArgument($column); + } + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->argument as $argument){ + $output_columns .= $argument->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + function getExpressionString(){ + return sprintf('new DeleteExpression(\'%s\', $args->%s)' + , $this->name + , $this->argument->argument_name); + } + + function getArgument(){ + return $this->argument; + } + + function getValidatorString(){ + return $this->argument->getValidatorString(); + } + + } +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/DeleteColumnsTag.class.php b/classes/xml/xmlquery/tags/column/DeleteColumnsTag.class.php new file mode 100644 index 000000000..b242d7ca0 --- /dev/null +++ b/classes/xml/xmlquery/tags/column/DeleteColumnsTag.class.php @@ -0,0 +1,58 @@ + tag inside an XML Query file whose action is 'delete' + * + **/ + + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php'); + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php'); + + class DeleteColumnsTag{ + var $dbParser; + var $columns; + + function DeleteColumnsTag($xml_columns, $dbParser) { + $this->dbParser = $dbParser; + + $this->columns = array(); + + if(!$xml_columns) + return; + + if(!is_array($xml_columns)) $xml_columns = array($xml_columns); + + foreach($xml_columns as $column){ + $this->columns[] = new DeleteColumnTag($column, $this->dbParser); + } + } + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->columns as $column){ + $output_columns .= $column->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + + function getArguments(){ + $arguments = array(); + foreach($this->columns as $column){ + $arguments[] = $column->getArgument(); + } + return $arguments; + } + + function getValidatorString(){ + $validator = ''; + foreach($this->columns as $column){ + $validator .= $column->getValidatorString(); + } + return $validator; + } + + } + +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/InsertColumnTag.class.php b/classes/xml/xmlquery/tags/column/InsertColumnTag.class.php new file mode 100644 index 000000000..9dfba9247 --- /dev/null +++ b/classes/xml/xmlquery/tags/column/InsertColumnTag.class.php @@ -0,0 +1,45 @@ + tag inside an XML Query file whose action is 'insert' + * + **/ + + + class InsertColumnTag extends ColumnTag { + var $argument; + + function InsertColumnTag($column, $dbParser) { + parent::ColumnTag($column->attrs->name, $dbParser); + $this->name = $this->dbParser->parseColumnName($this->name); + require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); + $this->argument = new QueryArgument($column); + } + + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->argument as $argument){ + $output_columns .= $argument->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + + function getExpressionString(){ + return sprintf('new InsertExpression(\'%s\', $%s_argument->getValue())' + , $this->name + , $this->argument->argument_name); + } + + function getArgument(){ + return $this->argument; + } + + function getValidatorString(){ + return $this->argument->getValidatorString(); + } + + } +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php b/classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php new file mode 100644 index 000000000..086cbba2d --- /dev/null +++ b/classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php @@ -0,0 +1,58 @@ + tag inside an XML Query file whose action is 'insert' + * + **/ + + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php'); + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php'); + + class InsertColumnsTag{ + var $dbParser; + var $columns; + + function InsertColumnsTag($xml_columns, $dbParser) { + $this->dbParser = $dbParser; + + $this->columns = array(); + + if(!$xml_columns) + return; + + if(!is_array($xml_columns)) $xml_columns = array($xml_columns); + + foreach($xml_columns as $column){ + $this->columns[] = new InsertColumnTag($column, $this->dbParser); + } + } + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->columns as $column){ + $output_columns .= $column->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + + function getArguments(){ + $arguments = array(); + foreach($this->columns as $column){ + $arguments[] = $column->getArgument(); + } + return $arguments; + } + + function getValidatorString(){ + $validator = ''; + foreach($this->columns as $column){ + $validator .= $column->getValidatorString(); + } + return $validator; + } + + } + +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/SelectColumnTag.class.php b/classes/xml/xmlquery/tags/column/SelectColumnTag.class.php new file mode 100644 index 000000000..ca7a40eff --- /dev/null +++ b/classes/xml/xmlquery/tags/column/SelectColumnTag.class.php @@ -0,0 +1,31 @@ + tag inside an XML Query file whose action is 'select' + * + **/ + + class SelectColumnTag extends ColumnTag{ + var $alias; + var $click_count; + + function SelectColumnTag($column, $dbParser){ + parent::ColumnTag($column->attrs->name, $dbParser); + if(!$this->name) $this->name = "*"; + if($this->name != "*") + $this->name = $this->dbParser->parseExpression($this->name); + + $this->alias = $column->attrs->alias; + $this->click_count = $column->attrs->click_count; + } + + function getExpressionString(){ + if($this->name == '*') return "new StarExpression()"; + if($this->click_count) + return sprintf('new ClickCountExpression(%s, %s, $args->%s)', $this->name, $this->alias,$this->click_count); + return sprintf('new SelectExpression(\'%s\'%s)', $this->name, $this->alias ? ', \''.$this->dbParser->escape($this->alias) .'\'': ''); + } + } +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php b/classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php new file mode 100644 index 000000000..15102f130 --- /dev/null +++ b/classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php @@ -0,0 +1,45 @@ +dbParser = $dbParser; + + $this->columns = array(); + + if(!$xml_columns) { + $this->columns[] = new SelectColumnTag("*", $this->dbParser); + return; + } + + if(!is_array($xml_columns)) $xml_columns = array($xml_columns); + + foreach($xml_columns as $column){ + $this->columns[] = new SelectColumnTag($column, $this->dbParser); + } + } + + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->columns as $column){ + $output_columns .= $column->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + + function getArguments(){ + return array(); + } + + function getValidatorString(){ + return ''; + } + } +?> diff --git a/classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php b/classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php new file mode 100644 index 000000000..d41905e59 --- /dev/null +++ b/classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php @@ -0,0 +1,46 @@ + tag inside an XML Query file whose action is 'update' + * + **/ + + + + class UpdateColumnTag extends ColumnTag { + var $argument; + + function UpdateColumnTag($column, $dbParser) { + parent::ColumnTag($column->attrs->name, $dbParser); + $this->name = $this->dbParser->parseColumnName($this->name); + require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); + $this->argument = new QueryArgument($column); + } + + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->argument as $argument){ + $output_columns .= $argument->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + function getExpressionString(){ + return sprintf('new UpdateExpression(\'%s\', $%s_argument->getValue())' + , $this->name + , $this->argument->argument_name); + } + + function getArgument(){ + return $this->argument; + } + + function getValidatorString(){ + return $this->argument->getValidatorString(); + } + } + +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php b/classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php new file mode 100644 index 000000000..2f1feba0f --- /dev/null +++ b/classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php @@ -0,0 +1,61 @@ + tag inside an XML Query file whose action is 'update' + * + **/ + + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php'); + require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php'); + + class UpdateColumnsTag{ + var $dbParser; + var $columns; + + function UpdateColumnsTag($xml_columns, $dbParser) { + $this->dbParser = $dbParser; + + $this->columns = array(); + + if(!$xml_columns) { + $this->columns[] = new UpdateColumnTag("*", $this->dbParser); + return; + } + + if(!is_array($xml_columns)) $xml_columns = array($xml_columns); + + foreach($xml_columns as $column){ + $this->columns[] = new UpdateColumnTag($column, $this->dbParser); + } + } + + function toString(){ + $output_columns = 'array(' . PHP_EOL; + foreach($this->columns as $column){ + $output_columns .= $column->getExpressionString() . PHP_EOL . ','; + } + $output_columns = substr($output_columns, 0, -1); + $output_columns .= ')'; + return $output_columns; + } + + function getArguments(){ + $arguments = array(); + foreach($this->columns as $column){ + $arguments[] = $column->getArgument(); + } + return $arguments; + } + + function getValidatorString(){ + $validator = ''; + foreach($this->columns as $column){ + $validator .= $column->getValidatorString(); + } + return $validator; + } + } + +?> \ No newline at end of file