mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-08 03:01:43 +09:00
Issue 388 - Query cache error related table alias
git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9544 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
92a49aa179
commit
308d1606a7
8 changed files with 94 additions and 14 deletions
|
|
@ -26,6 +26,7 @@
|
|||
require(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpression.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpressionWithoutArgument.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/Table.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/CubridTableWithHint.class.php');
|
||||
|
|
@ -605,22 +606,22 @@
|
|||
$columnsList = $query->getUpdateString($with_values);
|
||||
if($columnsList == '') return new Object(-1, "Invalid query");
|
||||
|
||||
$tableName = $query->getFirstTableName();
|
||||
if($tableName == '') return new Object(-1, "Invalid query");
|
||||
$tables = $query->getFromString($with_values);
|
||||
if($tables == '') return new Object(-1, "Invalid query");
|
||||
|
||||
$where = $query->getWhereString($with_values);
|
||||
if($where != '') $where = ' WHERE ' . $where;
|
||||
|
||||
|
||||
$priority = $with_priority?$query->getPriority():'';
|
||||
|
||||
return "UPDATE $priority $tableName SET $columnsList ".$where;
|
||||
return "UPDATE $priority $tables SET $columnsList ".$where;
|
||||
}
|
||||
|
||||
function getInsertSql($query, $with_values = true, $with_priority = false){
|
||||
$tableName = $query->getFirstTableName();
|
||||
$values = $query->getInsertString($with_values);
|
||||
$priority = $with_priority?$query->getPriority():'';
|
||||
|
||||
|
||||
return "INSERT $priority INTO $tableName \n $values";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* @class UpdateExpression
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
*/
|
||||
|
||||
class UpdateExpressionWithoutArgument extends UpdateExpression {
|
||||
var $argument;
|
||||
|
||||
function UpdateExpressionWithoutArgument($column_name, $argument){
|
||||
parent::Expression($column_name);
|
||||
$this->argument = $argument;
|
||||
}
|
||||
|
||||
function getExpression($with_value = true){
|
||||
return "$this->column_name = $this->argument";
|
||||
}
|
||||
|
||||
function getValue(){
|
||||
// TODO Escape value according to column type instead of variable type
|
||||
$value = $this->argument;
|
||||
if(!is_numeric($value)) return "'".$value."'";
|
||||
return $value;
|
||||
}
|
||||
|
||||
function show(){
|
||||
if(!$this->argument) return false;
|
||||
$value = $this->argument;
|
||||
if(!isset($value)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function getArgument(){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
static $number_of_arguments = 0;
|
||||
|
||||
$this->argument_name = $tag->attrs->var;
|
||||
if(!$this->argument_name) $this->argument_name = $tag->attrs->name;
|
||||
if(!$this->argument_name) $this->argument_name = str_replace('.', '_',$tag->attrs->name);
|
||||
if(!$this->argument_name) $this->argument_name = str_replace('.', '_',$tag->attrs->column);
|
||||
|
||||
$this->variable_name = $this->argument_name;
|
||||
|
|
|
|||
|
|
@ -11,18 +11,28 @@
|
|||
|
||||
class UpdateColumnTag extends ColumnTag {
|
||||
var $argument;
|
||||
var $default_value;
|
||||
|
||||
function UpdateColumnTag($column) {
|
||||
parent::ColumnTag($column->attrs->name);
|
||||
$dbParser = DB::getParser();
|
||||
$this->name = $dbParser->parseColumnName($this->name);
|
||||
$this->argument = new QueryArgument($column);
|
||||
if($column->attrs->var)
|
||||
$this->argument = new QueryArgument($column);
|
||||
else
|
||||
$this->default_value = $dbParser->parseColumnName($column->attrs->default);
|
||||
}
|
||||
|
||||
function getExpressionString(){
|
||||
if($this->argument)
|
||||
return sprintf('new UpdateExpression(\'%s\', $%s_argument)'
|
||||
, $this->name
|
||||
, $this->argument->argument_name);
|
||||
else {
|
||||
return sprintf('new UpdateExpressionWithoutArgument(\'%s\', \'%s\')'
|
||||
, $this->name
|
||||
, $this->default_value);
|
||||
}
|
||||
}
|
||||
|
||||
function getArgument(){
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
if(!defined('__DEBUG__')) define('__DEBUG__', 4);
|
||||
define('__ZBXE__', true);
|
||||
define('__XE__', true);
|
||||
|
||||
require_once(_XE_PATH_.'test-phpUnit/Helper.class.php');
|
||||
require_once(_XE_PATH_.'test-phpUnit/QueryTester.class.php');
|
||||
|
|
@ -38,6 +39,7 @@
|
|||
require_once(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpressionWithoutArgument.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/table/Table.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/table/CubridTableWithHint.class.php');
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
$args->use_mobile = "";
|
||||
$args->site_srl = 0;
|
||||
$args->module_srl = 47374;';
|
||||
$expected = 'UPDATE "xe_modules"
|
||||
$expected = 'UPDATE "xe_modules" as "modules"
|
||||
SET "module" = \'page\'
|
||||
, "mid" = \'test\'
|
||||
, "browser_title" = \'test\'
|
||||
|
|
@ -29,14 +29,14 @@
|
|||
, "footer_text" = \'\'
|
||||
, "use_mobile" = \'n\'
|
||||
WHERE "site_srl" = 0
|
||||
AND "module_srl" = 47374';
|
||||
AND "module_srl" = 47374';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
function test_member_updateLastLogin(){
|
||||
$xml_file = _XE_PATH_ . "modules/member/queries/updateLastLogin.xml";
|
||||
$argsString = ' $args->member_srl = 4;
|
||||
$args->last_login = "20110607120549";';
|
||||
$expected = 'UPDATE "xe_member" SET "member_srl" = 4, "last_login" = \'20110607120549\' WHERE "member_srl" = 4';
|
||||
$expected = 'UPDATE "xe_member" as "member" SET "member_srl" = 4, "last_login" = \'20110607120549\' WHERE "member_srl" = 4';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
$xml_file = _XE_PATH_ . "modules/point/queries/updatePoint.xml";
|
||||
$argsString = ' $args->member_srl = 4;
|
||||
$args->point = 105;';
|
||||
$expected = 'UPDATE "xe_point" SET "point" = 105 WHERE "member_srl" = 4';
|
||||
$expected = 'UPDATE "xe_point" as "point" SET "point" = 105 WHERE "member_srl" = 4';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
|
|
@ -62,7 +62,7 @@
|
|||
$argsString = '$args->menu_srl = 204;
|
||||
$args->title = "test_menu";
|
||||
';
|
||||
$expected = 'UPDATE "xe_menu" SET "title" = \'test_menu\' WHERE "menu_srl" = 204';
|
||||
$expected = 'UPDATE "xe_menu" as "menu" SET "title" = \'test_menu\' WHERE "menu_srl" = 204';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
$args->menu_srl = 237423;
|
||||
$args->listorder = -8;
|
||||
$args->menu_item_srl = 237431;';
|
||||
$expected = 'UPDATE "xe_menu_item" SET "parent_srl" = 0, "listorder" = -8 WHERE "menu_item_srl" = 237431';
|
||||
$expected = 'UPDATE "xe_menu_item" as "menu_item" SET "parent_srl" = 0, "listorder" = -8 WHERE "menu_item_srl" = 237431';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,23 @@
|
|||
$argsString = '$args->is_secret = \'Y\';
|
||||
$args->status = \'SECRET\';
|
||||
';
|
||||
$expected = 'update `xe_documents` set `status` = \'secret\' where `is_secret` = \'y\'';
|
||||
$expected = 'update `xe_documents` as `documents` set `status` = \'secret\' where `is_secret` = \'y\'';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Issue 388 - Query cache error related table alias
|
||||
* http://code.google.com/p/xe-core/issues/detail?id=388
|
||||
*/
|
||||
function test_importer_updateDocumentSync(){
|
||||
$xml_file = _TEST_PATH_ . "db/xml_query/mysql/data/importer.updateDocumentSync.xml";
|
||||
$argsString = '';
|
||||
$expected = 'UPDATE `xe_documents` as `documents`, `xe_member` as `member`
|
||||
SET `documents`.`member_srl` = `member`.`member_srl`
|
||||
WHERE `documents`.`user_id` = `member`.`user_id`
|
||||
';
|
||||
$this->_test($xml_file, $argsString, $expected);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<query id="updateDocumentSync" action="update">
|
||||
<tables>
|
||||
<table name="documents" alias="documents" />
|
||||
<table name="member" alias="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="documents.member_srl" default="member.member_srl" filter="number" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="documents.user_id" default="member.user_id" />
|
||||
</conditions>
|
||||
</query>
|
||||
Loading…
Add table
Add a link
Reference in a new issue