From 314700baddc149cc00171fa228349522b53c0c0d Mon Sep 17 00:00:00 2001 From: ngleader Date: Thu, 8 Oct 2009 02:14:12 +0000 Subject: [PATCH] add "click count -incr()" for Cubrid Xml Query git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6826 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/db/DBCubrid.class.php | 24 ++++++--- classes/xml/XmlQueryParser.class.php | 78 +++++++++++++--------------- 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index 449064286..14189cad3 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -582,21 +582,29 @@ $column_list = array(); foreach($output->columns as $key => $val) { $name = $val['name']; - $alias = $val['alias']; + + $click_count = '%s'; + if($val['click_count'] && count($output->conditions)>0){ + $click_count = 'incr(%s)'; + } + + $alias = $val['alias'] ? sprintf('"%s"',$val['alias']) : null; if(substr($name,-1) == '*') { $column_list[] = $name; } elseif(strpos($name,'.')===false && strpos($name,'(')===false) { - if($alias) $column_list[] = sprintf('"%s" as "%s"', $name, $alias); - else $column_list[] = sprintf('"%s"',$name); + $name = sprintf($click_count,$name); + if($alias) $column_list[] = sprintf('%s as %s', $name, $alias); + else $column_list[] = sprintf('%s',$name); } else { if(strpos($name,'.')!=false) { list($prefix, $name) = explode('.',$name); - $deli=($name == '*') ? "" : "\""; - if($alias) $column_list[] = sprintf("%s.$deli%s$deli as \"%s\"", $prefix, $name, $alias); - else $column_list[] = sprintf("%s.$deli%s$deli",$prefix,$name); + $prefix = sprintf('"%s"',$prefix); + $name = ($name == '*') ? $name : sprintf('"%s"',$name); + + $column_list[] = sprintf($click_count,sprintf('%s.%s', $prefix, $name)) . ($alias ? sprintf(' as %s',$alias) : ''); + } else { - if($alias) $column_list[] = sprintf('%s as "%s"', $name, $alias); - else $column_list[] = sprintf('%s',$name); + $column_list[] = sprintf($click_count,$name) . ($alias ? sprintf(' as %s',$alias) : ''); } } } diff --git a/classes/xml/XmlQueryParser.class.php b/classes/xml/XmlQueryParser.class.php index 6506d95a5..333baf34e 100644 --- a/classes/xml/XmlQueryParser.class.php +++ b/classes/xml/XmlQueryParser.class.php @@ -113,7 +113,6 @@ $output->page_count = $out->page_count; $output->page = $out->page; - $column_count = count($output->columns); $condition_count = count($output->conditions); @@ -125,7 +124,6 @@ } $buff .= ' );'."\n"; - // php script 생성 $buff .= '$output->_tables = array( '; foreach($output->tables as $key => $val) { @@ -133,8 +131,6 @@ } $buff .= ' );'."\n"; - - if(count($output->left_tables)){ $buff .= '$output->left_tables = array( '; foreach($output->left_tables as $key => $val) { @@ -143,7 +139,6 @@ $buff .= ' );'."\n"; } - // column 정리 if($column_count) { $buff .= '$output->columns = array ( '; @@ -169,8 +164,6 @@ $buff .= ' );'."\n"; } - - // order 정리 if($output->order) { $buff .= '$output->order = array('; @@ -247,11 +240,7 @@ FileHandler::writeFile($cache_file, $buff); } - - - function _setColumn($columns){ - if(!$columns) { $output->column[] = array("*" => "*"); } else { @@ -274,13 +263,13 @@ "minlength" => $val->attrs->minlength, "maxlength" => $val->attrs->maxlength, "alias" => $val->attrs->alias, + "click_count" => $val->attrs->click_count, ); } } return $output; } - function _setConditions($conditions){ // 조건절 정리 @@ -359,35 +348,50 @@ return $output; } - - - - function _getColumn($columns){ $buff = ''; + $str = ''; + $print_vars = array(); + foreach($columns as $key => $val) { + $str = 'array("name"=>"%s","alias"=>"%s"'; + $print_vars = array(); + $print_vars[] = $val['name']; + $print_vars[] = $val['alias']; + $val['default'] = $this->getDefault($val['name'], $val['default']); if($val['var'] && strpos($val['var'],'.')===false) { - if($val['default']) $buff .= sprintf('array("name"=>"%s", "alias"=>"%s", "value"=>$args->%s?$args->%s:%s),%s', $val['name'], $val['alias'], $val['var'], $val['var'], $val['default'] ,"\n"); - else $buff .= sprintf('array("name"=>"%s", "alias"=>"%s", "value"=>$args->%s),%s', $val['name'], $val['alias'], $val['var'], "\n"); + if($val['default']){ + $str .= ',"value"=>$args->%s?$args->%s:%s'; + $print_vars[] = $val['var']; + $print_vars[] = $val['var']; + $print_vars[] = $val['default']; + }else{ + $str .= ',"value"=>$args->%s'; + $print_vars[] = $val['var']; + } - if($val['default']) $default_list[$val['var']] = $val['default']; - if($val['notnull']) $notnull_list[] = $val['var']; - if($val['minlength']) $minlength_list[$val['var']] = $val['minlength']; - if($val['maxlength']) $maxlength_list[$val['var']] = $val['maxlength']; } else { - if($val['default']) $buff .= sprintf('array("name"=>"%s", "alias"=>"%s", "value"=>%s),%s', $val['name'], $val['alias'], $val['default'] ,"\n"); - else $buff .= sprintf('array("name"=>"%s", "alias"=>"%s",),%s', $val['name'], $val['alias'], "\n"); + if($val['default']){ + $str .= ',"value"=>%s'; + $print_vars[] = $val['default']; + } } + + if($val['click_count']){ + $str .= ',"click_count"=>$args->%s'; + $print_vars[] = $val['click_count']; + } + + $str .= '),%s'; + $print_vars[] = "\n"; + + $buff .= vsprintf($str, $print_vars); } return $buff; } - - - - function _getConditions($conditions){ $buff = ''; foreach($conditions as $key => $val) { @@ -414,12 +418,6 @@ return $buff; } - - - - - - /** * @brief column, condition등의 key에 default 값을 세팅 **/ @@ -449,8 +447,7 @@ $args = abs($args); if ($db_info->db_type == 'cubrid') { $val = sprintf ('"\\"%s\\"+%d"', $name, $args); - } - else { + } else { $val = sprintf('"%s+%d"', $name, $args); } break; @@ -458,17 +455,15 @@ $args = abs($args); if ($db_info->db_type == 'cubrid') { $val = sprintf ('"\\"%s\\"-%d"', $name, $args); - } - else { + } else { $val = sprintf('"%s-%d"', $name, $args); } break; case 'multiply' : - $args = intval($args); + $args = intval($args); if ($db_info->db_type == 'cubrid') { $val = sprintf ('"\\"%s\\"*%d"', $name, $args); - } - else { + } else { $val = sprintf('"%s*%d"', $name, $args); } break; @@ -476,6 +471,5 @@ return $val; } - } ?>