From d3067703a434970b44af1199a92026ee6793ec28 Mon Sep 17 00:00:00 2001 From: mosmartin Date: Fri, 20 May 2011 12:24:50 +0000 Subject: [PATCH] Fixed join condidition bug: if the user specifies the "pipe" attribute of a condition in a join cause, it should be ignored (otherwise the sql string is like INNER JOIN ... ON AND a = b). Fixed order by bug. git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0-DB@8387 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/db/DBCubrid.class.php | 2 +- classes/xml/xmlquery/QueryParser.class.php | 1 + classes/xml/xmlquery/argument/Argument.class.php | 3 ++- .../xml/xmlquery/queryargument/DefaultValue.class.php | 8 +++++--- .../xmlquery/tags/condition/ConditionTag.class.php | 4 ++++ .../tags/condition/JoinConditionsTag.class.php | 11 +++++++++++ .../xml/xmlquery/tags/navigation/IndexTag.class.php | 2 +- classes/xml/xmlquery/tags/table/TableTag.class.php | 2 +- modules/module/queries/getDefaultModules.xml | 6 +++--- modules/module/queries/getSiteModules.xml | 4 ++-- 10 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index 1df9d207e..4193f8270 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -199,7 +199,7 @@ if (cubrid_error_code ()) { $code = cubrid_error_code (); $msg = cubrid_error_msg (); - + $this->setError ($code, $msg); } diff --git a/classes/xml/xmlquery/QueryParser.class.php b/classes/xml/xmlquery/QueryParser.class.php index 852aeced1..c7a50717a 100644 --- a/classes/xml/xmlquery/QueryParser.class.php +++ b/classes/xml/xmlquery/QueryParser.class.php @@ -7,6 +7,7 @@ require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnsTag.class. require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/DeleteColumnsTag.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/tags/table/TablesTag.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionsTag.class.php'); +require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/tags/group/GroupsTag.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/NavigationTag.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/IndexTag.class.php'); diff --git a/classes/xml/xmlquery/argument/Argument.class.php b/classes/xml/xmlquery/argument/Argument.class.php index f24dd4a20..23cb46539 100644 --- a/classes/xml/xmlquery/argument/Argument.class.php +++ b/classes/xml/xmlquery/argument/Argument.class.php @@ -32,7 +32,8 @@ function escapeValue($column_type){ if(!isset($this->value)) return; - if($column_type === '') $column_type = 'varchar'; + if($column_type === '') return; + //if($column_type === '') $column_type = 'varchar'; if(in_array($column_type, array('date', 'varchar', 'char'))) $this->value = '\''.$this->value.'\''; } diff --git a/classes/xml/xmlquery/queryargument/DefaultValue.class.php b/classes/xml/xmlquery/queryargument/DefaultValue.class.php index 060261b65..4cac606fe 100644 --- a/classes/xml/xmlquery/queryargument/DefaultValue.class.php +++ b/classes/xml/xmlquery/queryargument/DefaultValue.class.php @@ -19,8 +19,9 @@ if(!isset($this->value)) return; $str_pos = strpos($this->value, '('); - // TODO Replace this with parseExpression - if($str_pos===false) return '"'.$this->value.'"'; + // // TODO Replace this with parseExpression + if($str_pos===false) return '\''.$this->value.'\''; + //if($str_pos===false) return $this->value; $func_name = substr($this->value, 0, $str_pos); $args = substr($this->value, $str_pos+1, strlen($value)-1); @@ -52,7 +53,8 @@ $val = sprintf('"%s*%d"', $this->column_name, $args); break; default : - $val = '"' . $this->value . '"'; + $val = '\'' . $this->value . '\''; + //$val = $this->value; } return $val; diff --git a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php index a96a9a98d..626a4a0b0 100644 --- a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php +++ b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php @@ -29,6 +29,10 @@ $this->argument = new QueryArgument($condition); } + function setPipe($pipe){ + $this->pipe = $pipe; + } + function getArgument(){ return $this->argument; } diff --git a/classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php b/classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php new file mode 100644 index 000000000..1568ecbb7 --- /dev/null +++ b/classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php @@ -0,0 +1,11 @@ +condition_groups[0]->conditions[0]->setPipe(""); + } + } + +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/navigation/IndexTag.class.php b/classes/xml/xmlquery/tags/navigation/IndexTag.class.php index cbe726b99..febb8628f 100644 --- a/classes/xml/xmlquery/tags/navigation/IndexTag.class.php +++ b/classes/xml/xmlquery/tags/navigation/IndexTag.class.php @@ -12,7 +12,7 @@ function IndexTag($index, $dbParser){ $this->dbParser = $dbParser; $this->argument_name = $index->attrs->var; - //$index->attrs->default = $this->dbParser->parseExpression($index->attrs->default); + $index->attrs->default = $this->dbParser->parseExpression($index->attrs->default); $this->default = $index->attrs->default; require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); $this->argument = new QueryArgument($index); diff --git a/classes/xml/xmlquery/tags/table/TableTag.class.php b/classes/xml/xmlquery/tags/table/TableTag.class.php index 4797df04c..dea2729b7 100644 --- a/classes/xml/xmlquery/tags/table/TableTag.class.php +++ b/classes/xml/xmlquery/tags/table/TableTag.class.php @@ -45,7 +45,7 @@ function getTableString(){ if($this->isJoinTable()){ - $conditionsTag = new ConditionsTag($this->conditions, $this->dbParser); + $conditionsTag = new JoinConditionsTag($this->conditions, $this->dbParser); return sprintf('new JoinTable(\'%s\', \'%s\', "%s", %s)' , $this->dbParser->escape($this->name) , $this->dbParser->escape($this->alias) diff --git a/modules/module/queries/getDefaultModules.xml b/modules/module/queries/getDefaultModules.xml index dd847508e..c6ffd842f 100644 --- a/modules/module/queries/getDefaultModules.xml +++ b/modules/module/queries/getDefaultModules.xml @@ -19,8 +19,8 @@ - - - + + + diff --git a/modules/module/queries/getSiteModules.xml b/modules/module/queries/getSiteModules.xml index 2c80abe39..6d9988eea 100644 --- a/modules/module/queries/getSiteModules.xml +++ b/modules/module/queries/getSiteModules.xml @@ -17,7 +17,7 @@ - - + +