git-svn-id: http://xe-core.googlecode.com/svn/trunk@1482 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-05-21 03:07:57 +00:00
parent a8af22d557
commit 5129945ad8
3 changed files with 86 additions and 49 deletions

View file

@ -338,31 +338,65 @@
* @brief updateAct 처리
**/
function _executeUpdateAct($output) {
// 테이블 정리
foreach($output->tables as $key => $val) {
//$table_list[] = '`'.$this->prefix.$key.'` as '.$val;
$table_list[] = '`'.$this->prefix.$key.'`';
}
$table_count = count(array_values($output->tables));
// 컬럼 정리
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else {
if($output->column_type[$name]!='number') $value = "'".$this->addQuotes($value)."'";
elseif(!$value || is_numeric($value)) $value = (int)$value;
// 대상 테이블이 1개일 경우
if($table_count == 1) {
// 테이블 정리
list($target_table) = array_keys($output->tables);
$target_table = $this->prefix.$target_table;
$column_list[] = sprintf("`%s` = %s", $name, $value);
// 컬럼 정리
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else {
if($output->column_type[$name]!='number') $value = "'".$this->addQuotes($value)."'";
elseif(!$value || is_numeric($value)) $value = (int)$value;
$column_list[] = sprintf("`%s` = %s", $name, $value);
}
}
// 조건절 정리
$condition = $this->getCondition($output);
$query = sprintf("update %s set %s %s", $target_table, implode(',',$column_list), $condition);
// 대상 테이블이 2개일 경우 (sqlite에서 update 테이블을 1개 이상 지정 못해서 이렇게 꽁수로... 다른 방법이 있으려나..)
} elseif($table_count == 2) {
// 테이블 정리
foreach($output->tables as $key => $val) {
$table_list[$val] = $this->prefix.$val;
}
list($source_table, $target_table) = array_values($table_list);
// 조건절 정리
$condition = $this->getCondition($output);
foreach($table_list as $key => $val) {
$condition = eregi_replace($key.'\\.', $val.'.', $condition);
}
// 컬럼 정리
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
list($s_prefix, $s_column) = explode('.',$name);
list($t_prefix, $t_column) = explode('.',$value);
$s_table = $table_list[$s_prefix];
$t_table = $table_list[$t_prefix];
$column_list[] = sprintf(' %s = (select %s from %s %s) ', $s_column, $t_column, $t_table, $condition);
}
$query = sprintf('update %s set %s where exists(select * from %s %s)', $source_table, implode(',', $column_list), $target_table, $condition);
} else {
return;
}
// 조건절 정리
$condition = $this->getCondition($output);
$query = sprintf("update %s set %s %s", implode(',',$table_list), implode(',',$column_list), $condition);
return $this->_query($query);
}

View file

@ -375,13 +375,40 @@
* @brief updateAct 처리
**/
function _executeUpdateAct($output) {
// 대상 테이블이 2개 이상일 경우
if(count(array_values($output->tables) > 1)) {
$table_count = count(array_values($output->tables));
// 대상 테이블이 1개일 경우
if($table_count == 1) {
// 테이블 정리
list($target_table) = array_keys($output->tables);
$target_table = $this->prefix.$target_table;
// 컬럼 정리
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else {
if($output->column_type[$name]!='number') $value = "'".$this->addQuotes($value)."'";
elseif(!$value || is_numeric($value)) $value = (int)$value;
$column_list[] = sprintf("`%s` = %s", $name, $value);
}
}
// 조건절 정리
$condition = $this->getCondition($output);
$query = sprintf("update %s set %s %s", $target_table, implode(',',$column_list), $condition);
// 대상 테이블이 2개일 경우 (sqlite에서 update 테이블을 1개 이상 지정 못해서 이렇게 꽁수로... 다른 방법이 있으려나..)
} elseif($table_count == 2) {
// 테이블 정리
foreach($output->tables as $key => $val) {
$table_list[$val] = $this->prefix.$val;
}
list($target_table) = array_values($table_list);
list($source_table, $target_table) = array_values($table_list);
// 조건절 정리
$condition = $this->getCondition($output);
@ -402,31 +429,9 @@
$column_list[] = sprintf(' %s = (select %s from %s %s) ', $s_column, $t_column, $t_table, $condition);
}
$query = sprintf('update %s set %s', $target_table, implode(',', $column_list));
// 대상 테이블이 1개일 경우
$query = sprintf('update %s set %s where exists(select * from %s %s)', $source_table, implode(',', $column_list), $target_table, $condition);
} else {
// 테이블 정리
list($target_table) = array_keys($output->tables);
// 컬럼 정리
foreach($output->columns as $key => $val) {
if(!isset($val['value'])) continue;
$name = $val['name'];
$value = $val['value'];
if(strpos($name,'.')!==false&&strpos($value,'.')!==false) $column_list[] = $name.' = '.$value;
else {
if($output->column_type[$name]!='number') $value = "'".$this->addQuotes($value)."'";
elseif(!$value || is_numeric($value)) $value = (int)$value;
$column_list[] = sprintf("`%s` = %s", $name, $value);
}
}
// 조건절 정리
$condition = $this->getCondition($output);
$query = sprintf("update %s set %s %s", $target_table, implode(',',$column_list), $condition);
return;
}
$this->_prepare($query);

View file

@ -351,11 +351,9 @@
function procImporterAdminSync() {
// 게시물정보 싱크
$output = executeQuery('importer.updateDocumentSync');
if(!$output->toBool()) return $output;
// 댓글정보 싱크
$output = executeQuery('importer.updateCommentSync');
if(!$output->toBool()) return $output;
$this->setMessage('msg_sync_completed');
}