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

View file

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