diff --git a/classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php b/classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php
index 4c7194160..1ddba44e6 100644
--- a/classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php
+++ b/classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php
@@ -34,10 +34,7 @@
function getArguments(){
$arguments = array();
foreach($this->conditions as $condition){
- if(is_a($condition, 'QueryTag'))
$arguments = array_merge($arguments, $condition->getArguments());
- else
- $arguments[] = $condition->getArgument();
}
return $arguments;
}
diff --git a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php
index cf224c0fb..19232141c 100644
--- a/classes/xml/xmlquery/tags/condition/ConditionTag.class.php
+++ b/classes/xml/xmlquery/tags/condition/ConditionTag.class.php
@@ -44,8 +44,12 @@
$this->pipe = $pipe;
}
- function getArgument(){
- return $this->argument;
+ function getArguments(){
+ $arguments = array();
+ if($this->query)
+ $arguments = array_merge($arguments, $this->query->getArguments());
+ $arguments[] = $this->argument;
+ return $arguments;
}
function getConditionString(){
diff --git a/classes/xml/xmlquery/tags/query/QueryTag.class.php b/classes/xml/xmlquery/tags/query/QueryTag.class.php
index 6631159fa..41c7db291 100644
--- a/classes/xml/xmlquery/tags/query/QueryTag.class.php
+++ b/classes/xml/xmlquery/tags/query/QueryTag.class.php
@@ -171,6 +171,7 @@ class QueryTag {
$arguments = array();
if($this->columns)
$arguments = array_merge($arguments, $this->columns->getArguments());
+ $arguments = array_merge($arguments, $this->tables->getArguments());
$arguments = array_merge($arguments, $this->conditions->getArguments());
$arguments = array_merge($arguments, $this->navigation->getArguments());
return $arguments;
diff --git a/classes/xml/xmlquery/tags/table/TableTag.class.php b/classes/xml/xmlquery/tags/table/TableTag.class.php
index 6c047acdc..8fe35ff6f 100644
--- a/classes/xml/xmlquery/tags/table/TableTag.class.php
+++ b/classes/xml/xmlquery/tags/table/TableTag.class.php
@@ -24,7 +24,7 @@
var $alias;
var $join_type;
var $conditions;
-
+ var $conditionsTag;
/**
* @brief Initialises Table Tag properties
* @param XML
tag $table
@@ -41,6 +41,9 @@
$this->join_type = $table->attrs->type;
$this->conditions = $table->conditions;
+
+ if($this->isJoinTable())
+ $this->conditionsTag = new JoinConditionsTag($this->conditions);
}
function isJoinTable(){
@@ -66,16 +69,20 @@
function getTableString(){
$dbParser = XmlQueryParser::getDBParser();
if($this->isJoinTable()){
- $conditionsTag = new JoinConditionsTag($this->conditions);
return sprintf('new JoinTable(\'%s\', \'%s\', "%s", %s)'
, $dbParser->escape($this->name)
, $dbParser->escape($this->alias)
- , $this->join_type, $conditionsTag->toString());
+ , $this->join_type, $this->conditionsTag->toString());
}
return sprintf('new Table(\'%s\'%s)'
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : '');
}
+
+ function getArguments(){
+ if(!isset($this->conditionsTag)) return array();
+ return $this->conditionsTag->getArguments();
+ }
}
?>
\ No newline at end of file
diff --git a/classes/xml/xmlquery/tags/table/TablesTag.class.php b/classes/xml/xmlquery/tags/table/TablesTag.class.php
index 32a95606e..3c1d6fcdb 100644
--- a/classes/xml/xmlquery/tags/table/TablesTag.class.php
+++ b/classes/xml/xmlquery/tags/table/TablesTag.class.php
@@ -53,5 +53,12 @@
$output_tables .= ')';
return $output_tables;
}
+
+ function getArguments(){
+ $arguments = array();
+ foreach($this->tables as $table)
+ $arguments = array_merge($arguments, $table->getArguments());
+ return $arguments;
+ }
}
?>
\ No newline at end of file
diff --git a/test-phpUnit/db/DBTest.php b/test-phpUnit/db/DBTest.php
index 073cefe05..c4d43a02f 100644
--- a/test-phpUnit/db/DBTest.php
+++ b/test-phpUnit/db/DBTest.php
@@ -2,13 +2,13 @@
class DBTest extends PHPUnit_Framework_TestCase {
function _testQuery($xml_file, $argsString, $expected, $methodName){
- //echo PHP_EOL . ' ----------------------------------- ' .PHP_EOL;
- //echo $xml_file;
- //echo PHP_EOL . ' ----------------------------------- ' .PHP_EOL;
+ echo PHP_EOL . ' ----------------------------------- ' .PHP_EOL;
+ echo $xml_file;
+ echo PHP_EOL . ' ----------------------------------- ' .PHP_EOL;
$tester = new QueryTester();
$outputString = $tester->getNewParserOutputString($xml_file, $argsString);
- //echo $outputString;
+ echo $outputString;
$output = eval($outputString);
if(!is_a($output, 'Query')){
@@ -18,8 +18,8 @@
$querySql = $db->{$methodName}($output);
// Remove whitespaces, tabs and all
- $querySql = Helper::cleanQuery($querySql);
- $expected = Helper::cleanQuery($expected);
+ $querySql = Helper::cleanString($querySql);
+ $expected = Helper::cleanString($expected);
}
$this->assertEquals($expected, $querySql);
}
@@ -37,8 +37,8 @@
$queryArguments = $output->getArguments();
// Remove whitespaces, tabs and all
- $querySql = Helper::cleanQuery($querySql);
- $expected = Helper::cleanQuery($expected);
+ $querySql = Helper::cleanString($querySql);
+ $expected = Helper::cleanString($expected);
}
// Test
@@ -51,9 +51,14 @@
$this->assertEquals($expectedArgs[$i], $queryArguments[$i]->getValue());
}
}
+
+ function _testCachedOutput($expected, $actual){
+ $expected = Helper::cleanString($expected);
+ $actual = Helper::cleanString($actual);
+
+ $this->assertEquals($expected, $actual);
+
+ }
}
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
+
?>
diff --git a/test-phpUnit/db/xml_query/cubrid/CubridSubqueryTest.php b/test-phpUnit/db/xml_query/cubrid/CubridSubqueryTest.php
index 63ce3f923..81fbcf5b1 100644
--- a/test-phpUnit/db/xml_query/cubrid/CubridSubqueryTest.php
+++ b/test-phpUnit/db/xml_query/cubrid/CubridSubqueryTest.php
@@ -19,7 +19,7 @@
function testSelectUncorrelated1(){
$xml_file = $this->xmlPath . "select_uncorrelated1.xml";
$argsString = '$args->user_id = 4;
- ';
+ ';
$expected = 'select "column_a" as "value_a"
, (select max("column_b") as "count"
from "xe_table_b" as "table_b"
@@ -45,7 +45,7 @@
$this->_test($xml_file, $argsString, $expected);
}
- function testFromUncorrelated(){
+ function testFromUncorrelated1(){
$xml_file = $this->xmlPath . "from_uncorrelated1.xml";
$argsString = '$args->user_id = 4;
$args->user_name = 7;
@@ -58,17 +58,40 @@
group by "member_srl"
) as "documentcountbymember"';
$this->_test($xml_file, $argsString, $expected);
- }
+ }
- function testWhereUncorrelated(){
- $xml_file = $this->xmlPath . "where_uncorrelated1.xml";
- $argsString = '';
- $expected = 'select * from
- "xe_member" as "member"
- where "regdate" = (select max("regdate") as "maxregdate"
- from "xe_documents" as "documents")';
+// function testFromUncorrelated2(){
+// $xml_file = $this->xmlPath . "from_uncorrelated1.xml";
+// $argsString = '$args->user_id = 4;
+// $args->user_name = 7;
+// ';
+// $expected = 'select max("documentcountbymember"."count") as "maxcount"
+// from (
+// select "member_srl" as "member_srl"
+// , count(*) as "count"
+// from "xe_documents" as "documents"
+// group by "member_srl"
+// ) as "documentcountbymember"';
+// $this->_test($xml_file, $argsString, $expected);
+// }
+
+ function testFromUncorrelated2(){
+ $xml_file = $this->xmlPath . "from_uncorrelated2.xml";
+ $argsString = '$args->member_srl = 4;
+ $args->module_srl = 7;
+ ';
+ $expected = 'select max("documentcountbymember"."count") as "maxcount"
+ from (
+ select "member_srl" as "member_srl"
+ , count(*) as "count"
+ from "xe_documents" as "documents"
+ where "module_srl" = 7
+ group by "member_srl"
+ ) as "documentcountbymember"
+ where "member_srl" = 4
+ ';
$this->_test($xml_file, $argsString, $expected);
- }
+ }
function testSelectCorrelated1(){
$xml_file = $this->xmlPath . "select_correlated1.xml";
@@ -83,6 +106,22 @@
$this->_test($xml_file, $argsString, $expected);
}
+ function testSelectCorrelated2(){
+ $xml_file = $this->xmlPath . "select_correlated2.xml";
+ $argsString = '$args->user_id = 7;
+ $args->module_srl = 17;
+ ';
+ $expected = 'select *,
+ (select count(*) as "count"
+ from "xe_documents" as "documents"
+ where "documents"."user_id" = "member"."user_id"
+ and "module_srl" = 17
+ ) as "totaldocumentcount"
+ from "xe_member" as "member"
+ where "user_id" = \'7\'';
+ $this->_test($xml_file, $argsString, $expected);
+ }
+
function testWhereCorrelated1(){
$xml_file = $this->xmlPath . "where_correlated1.xml";
$argsString = '';
@@ -96,6 +135,22 @@
$this->_test($xml_file, $argsString, $expected);
}
+ function testWhereCorrelated2(){
+ $xml_file = $this->xmlPath . "where_correlated2.xml";
+ $argsString = '$args->module_srl = 12; $args->member_srl = 19;';
+ $expected = 'select *
+ from "xe_member" as "member"
+ where "member_srl" = 19
+ and "regdate" = (
+ select max("regdate") as "maxregdate"
+ from "xe_documents" as "documents"
+ where "documents"."user_id" = "member"."user_id"
+ and "module_srl" = 12
+ )
+ ';
+ $this->_test($xml_file, $argsString, $expected);
+ }
+
function testFromCorrelated1(){
$xml_file = $this->xmlPath . "from_correlated1.xml";
$argsString = '';
@@ -111,6 +166,26 @@
) as "a"
left join "xe_member" as "m" on "m"."member" = "a"."member_srl"';
$this->_test($xml_file, $argsString, $expected);
- }
+ }
+
+ function testFromCorrelated2(){
+ $xml_file = $this->xmlPath . "from_correlated2.xml";
+ $argsString = '$args->module_srl = 12; $args->count = 20;';
+ $expected = 'select "m"."member_srl"
+ , "m"."nickname"
+ , "m"."regdate"
+ , "a"."count"
+ from (
+ select "member_srl" as "member_srl"
+ , count(*) as "count"
+ from "xe_documents" as "documents"
+ where "module_srl" = 12
+ group by "member_srl"
+ ) as "a"
+ left join "xe_member" as "m" on "m"."member" = "a"."member_srl"
+ where "a"."count" >= 20
+';
+ $this->_test($xml_file, $argsString, $expected);
+ }
}
?>
diff --git a/test-phpUnit/db/xml_query/cubrid/data/from_correlated2.xml b/test-phpUnit/db/xml_query/cubrid/data/from_correlated2.xml
new file mode 100644
index 000000000..8dc162154
--- /dev/null
+++ b/test-phpUnit/db/xml_query/cubrid/data/from_correlated2.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test-phpUnit/db/xml_query/cubrid/data/from_uncorrelated2.xml b/test-phpUnit/db/xml_query/cubrid/data/from_uncorrelated2.xml
new file mode 100644
index 000000000..6431b3b90
--- /dev/null
+++ b/test-phpUnit/db/xml_query/cubrid/data/from_uncorrelated2.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test-phpUnit/db/xml_query/cubrid/data/select_correlated2.xml b/test-phpUnit/db/xml_query/cubrid/data/select_correlated2.xml
new file mode 100644
index 000000000..85ab25308
--- /dev/null
+++ b/test-phpUnit/db/xml_query/cubrid/data/select_correlated2.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test-phpUnit/db/xml_query/cubrid/data/where_correlated2.xml b/test-phpUnit/db/xml_query/cubrid/data/where_correlated2.xml
new file mode 100644
index 000000000..2ab45461c
--- /dev/null
+++ b/test-phpUnit/db/xml_query/cubrid/data/where_correlated2.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file