#658, #1 수정.(XmlQueryParser, DBCubrid)

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6763 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ysnglee2000 2009-08-28 16:21:49 +00:00
parent a76fcfb06b
commit 274f98219c
2 changed files with 69 additions and 18 deletions

View file

@ -322,16 +322,16 @@
$table_name = $this->prefix.$table_name; $table_name = $this->prefix.$table_name;
$query = sprintf('create class %s;', $table_name); $query = sprintf('create class "%s";', $table_name);
$this->_query($query); $this->_query($query);
$query = sprintf("call change_owner('%s','%s') on class db_root;", $table_name, $this->userid); /*$query = sprintf("call change_owner('%s','%s') on class db_root;", $table_name, $this->userid);
$this->_query($query); $this->_query($query); */
if(!is_array($xml_obj->table->column)) $columns[] = $xml_obj->table->column; if(!is_array($xml_obj->table->column)) $columns[] = $xml_obj->table->column;
else $columns = $xml_obj->table->column; else $columns = $xml_obj->table->column;
$query = sprintf("alter class %s add attribute ", $table_name); $query = sprintf("alter class \"%s\" add attribute ", $table_name);
foreach($columns as $column) { foreach($columns as $column) {
$name = $column->attrs->name; $name = $column->attrs->name;
@ -384,7 +384,7 @@
if(count($index_list)) { if(count($index_list)) {
foreach($index_list as $key => $val) { foreach($index_list as $key => $val) {
$query = sprintf("create index %s_%s on %s (%s);", $table_name, $key, $table_name, '"'.implode('","',$val).'"'); $query = sprintf("create index \"%s_%s\" on %s (%s);", $table_name, $key, $table_name, '"'.implode('","',$val).'"');
$this->_query($query); $this->_query($query);
} }
} }
@ -488,19 +488,18 @@
function _executeUpdateAct($output) { function _executeUpdateAct($output) {
// 테이블 정리 // 테이블 정리
foreach($output->tables as $key => $val) { foreach($output->tables as $key => $val) {
$table_list[] = "\"".$this->prefix.$val."\" as \"".$key."\""; $table_list[] = '"'.$this->prefix.$val.'" as "'.$key.'"';
} }
// 컬럼 정리 // 컬럼 정리
foreach($output->columns as $key => $val) { foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue; if(!isset($val['value'])) continue;
$name = $val['name']; $name = $val['name'];
$value = $val['value']; $value = $val['value'];
for ($i = 0; $i < $key; $i++) { // 한문장에 같은 속성에 대한 중복 설정은 큐브리드에서는 허용치 않음 for ($i = 0; $i < $key; $i++) { // 한문장에 같은 속성에 대한 중복 설정은 큐브리드에서는 허용치 않음
if ($output->columns[$i]['name'] == $name) break; if ($output->columns[$i]['name'] == $name) break;
} }
if ($i < $key) continue; // 중복이 발견되면 이후의 설정은 무시 if ($i < $key) continue; // 중복이 발견되면 이후의 설정은 무시
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value; if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else { else {
if($output->column_type[$name]!='number') { if($output->column_type[$name]!='number') {
@ -571,7 +570,7 @@
foreach($left_tables as $key => $val) { foreach($left_tables as $key => $val) {
$condition = $this->_getCondition($output->left_conditions[$key],$output->column_type); $condition = $this->_getCondition($output->left_conditions[$key],$output->column_type);
if($condition){ if($condition){
$left_join[] = $val . ' "'.$this->prefix.$output->_tables[$key].'" as "'.$key . '" on (' . $condition . ')'; $left_join[] = $val . ' "'.$this->prefix.$output->_tables[$key].'" "'.$key . '" on (' . $condition . ')';
} }
} }
@ -618,6 +617,18 @@
if ($output->order) { if ($output->order) {
foreach($output->order as $key => $val) { foreach($output->order as $key => $val) {
if ($val[0] != 'count') {
if (strpos ($val[0], '.')) {
$tmpval = explode ('.', $val[0]);
$tmpval[0] = sprintf ('"%s"', $tmpval[0]);
$tmpval[1] = sprintf ('"%s"', $tmpval[1]);
$val[0] = implode ('.', $tmpval);
}
elseif (strpos ($val[0], '(')) $val[0] = $val[0];
else {
$val[0] = sprintf ('"%s"', $val[0]);
}
}
$index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]); $index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]);
} }
if(count($index_list)) $query .= ' order by '.implode(',',$index_list); if(count($index_list)) $query .= ' order by '.implode(',',$index_list);
@ -638,6 +649,18 @@
if($output->order) { if($output->order) {
foreach($output->order as $key => $val) { foreach($output->order as $key => $val) {
if ($val[0] != 'count') {
if (strpos ($val[0], '.')) {
$tmpval = explode ('.', $val[0]);
$tmpval[0] = sprintf ('"%s"', $tmpval[0]);
$tmpval[1] = sprintf ('"%s"', $tmpval[1]);
$val[0] = implode ('.', $tmpval);
}
elseif (strpos ($val[0], '(')) $val[0] = $val[0];
else {
$val[0] = sprintf ('"%s"', $val[0]);
}
}
$index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]); $index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]);
} }
if(count($index_list)) $query .= ' order by '.implode(',',$index_list); if(count($index_list)) $query .= ' order by '.implode(',',$index_list);
@ -762,6 +785,18 @@
if ($output->order) { if ($output->order) {
foreach($output->order as $key => $val) { foreach($output->order as $key => $val) {
if ($val[0] != 'count') {
if (strpos ($val[0], '.')) {
$tmpval = explode ('.', $val[0]);
$tmpval[0] = sprintf ('"%s"', $tmpval[0]);
$tmpval[1] = sprintf ('"%s"', $tmpval[1]);
$val[0] = implode ('.', $tmpval);
}
elseif (strpos ($val[0], '(')) $val[0] = $val[0];
else {
$val[0] = sprintf ('"%s"', $val[0]);
}
}
$index_list[] = sprintf('%s %s', $val[0], $val[1]); $index_list[] = sprintf('%s %s', $val[0], $val[1]);
} }
if(count($index_list)) $query .= ' order by '.implode(',',$index_list); if(count($index_list)) $query .= ' order by '.implode(',',$index_list);

View file

@ -424,6 +424,7 @@
* @brief column, condition등의 key에 default 값을 세팅 * @brief column, condition등의 key에 default 값을 세팅
**/ **/
function getDefault($name, $value) { function getDefault($name, $value) {
$db_info = Context::getDBInfo ();
if(!$value) return; if(!$value) return;
$str_pos = strpos($value, '('); $str_pos = strpos($value, '(');
if($str_pos===false) return '"'.$value.'"'; if($str_pos===false) return '"'.$value.'"';
@ -446,15 +447,30 @@
break; break;
case 'plus' : case 'plus' :
$args = abs($args); $args = abs($args);
$val = sprintf('"%s+%d"', $name, $args); if ($db_info->db_type == 'cubrid') {
$val = sprintf ('"\\"%s\\"+%d"', $name, $args);
}
else {
$val = sprintf('"%s+%d"', $name, $args);
}
break; break;
case 'minus' : case 'minus' :
$args = abs($args); $args = abs($args);
$val = sprintf('"%s-%d"', $name, $args); if ($db_info->db_type == 'cubrid') {
break; $val = sprintf ('"\\"%s\\"-%d"', $name, $args);
case 'multiply' : }
$args = intval($args); else {
$val = sprintf('"%s*%d"', $name, $args); $val = sprintf('"%s-%d"', $name, $args);
}
break;
case 'multiply' :
$args = intval($args);
if ($db_info->db_type == 'cubrid') {
$val = sprintf ('"\\"%s\\"*%d"', $name, $args);
}
else {
$val = sprintf('"%s*%d"', $name, $args);
}
break; break;
} }