diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index 71dc76e34..1e4785941 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -316,6 +316,7 @@ require_once(_XE_PATH_.'classes/xml/xmlquery/DBParser.class.php'); require_once(_XE_PATH_.'classes/xml/xmlquery/argument/Argument.class.php'); + require_once(_XE_PATH_.'classes/xml/xmlquery/argument/ConditionArgument.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/expression/Expression.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php'); require_once(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php'); @@ -326,6 +327,7 @@ require_once(_XE_PATH_.'classes/db/queryparts/condition/Condition.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'); $output = include($cache_file); diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index 4193f8270..54aca4125 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -795,9 +795,13 @@ } $orderBy = substr($orderBy, 0, -2); } - - - $query = $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy; + $limit = ''; + if(count($output->limit) > 0){ + $limit = 'limit '; + $limit .= $output->limit->toString(); + } + + $query = $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit; //$query = sprintf ("select %s from %s %s %s %s", $columns, implode (',',$table_list), implode (' ',$left_join), $condition, //$groupby_query.$orderby_query); //$query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):''; diff --git a/classes/db/queryparts/limit/Limit.class.php b/classes/db/queryparts/limit/Limit.class.php new file mode 100644 index 000000000..fc20d3fbe --- /dev/null +++ b/classes/db/queryparts/limit/Limit.class.php @@ -0,0 +1,16 @@ +start = ($page-1)*$list_count; + $this->end = $list_count; + } + + function toString(){ + return $this->start . ' , ' . $this->end; + } + } + +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/QueryParser.class.php b/classes/xml/xmlquery/QueryParser.class.php index 805140fe5..20dd541d3 100644 --- a/classes/xml/xmlquery/QueryParser.class.php +++ b/classes/xml/xmlquery/QueryParser.class.php @@ -131,9 +131,10 @@ class QueryParser { $buff .= '$output->columns = ' . $columns->toString() . ';'.PHP_EOL; $buff .= '$output->tables = ' . $tables->toString() .';'.PHP_EOL; $buff .= '$output->conditions = '.$conditions->toString() .';'.PHP_EOL; - $buff .= '$output->groups = ' . $groups->toString() . ';'; - $buff .= '$output->orderby = ' . $navigation->getOrderByString() .';'; - + $buff .= '$output->groups = ' . $groups->toString() . ';'; + $buff .= '$output->orderby = ' . $navigation->getOrderByString() .';'; + $buff .= $navigation->getLimitString()?'$output->limit = ' . $navigation->getLimitString() .';':""; + return "query_id = "%s";%s', $this->query_id, "\n") . sprintf('$output->action = "%s";%s', $this->action, "\n") diff --git a/classes/xml/xmlquery/tags/navigation/LimitTag.class.php b/classes/xml/xmlquery/tags/navigation/LimitTag.class.php new file mode 100644 index 000000000..52b81b8d0 --- /dev/null +++ b/classes/xml/xmlquery/tags/navigation/LimitTag.class.php @@ -0,0 +1,27 @@ +page = $index->page->attrs; + $this->page_count = $index->page_count->attrs; + $this->list_count = $index->list_count->attrs; + + require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php'); + $this->arguments[] = new QueryArgument($index->page); + $this->arguments[] = new QueryArgument($index->list_count); + } + + function toString(){ + return sprintf("new Limit(\$%s_argument->getValue(), \$%s_argument->getValue())", $this->page->var, $this->list_count->var); + } + + function getArguments(){ + return $this->arguments; + } + } +?> \ No newline at end of file diff --git a/classes/xml/xmlquery/tags/navigation/NavigationTag.class.php b/classes/xml/xmlquery/tags/navigation/NavigationTag.class.php index c37f94652..7edf8d519 100644 --- a/classes/xml/xmlquery/tags/navigation/NavigationTag.class.php +++ b/classes/xml/xmlquery/tags/navigation/NavigationTag.class.php @@ -1,11 +1,13 @@ order = array(); @@ -17,7 +19,10 @@ $this->order[] = new IndexTag($order_info); } } - + + if($xml_navigation->page->attrs && $xml_navigation->list_count->attrs) + $this->limit = new LimitTag($xml_navigation); + $list_count = $xml_navigation->list_count->attrs; $this->list_count = $list_count; @@ -40,7 +45,8 @@ } function getLimitString(){ - + if ($this->limit) return $this->limit->toString(); + else return ""; } function getArguments(){ @@ -48,6 +54,7 @@ foreach($this->order as $order){ $arguments = array_merge($order->getArguments(), $arguments); } + if($this->limit) $arguments = array_merge($this->limit->getArguments(), $arguments); return $arguments; } }