Issue 2191: XML query condition 'like' error.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@10956 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ucorina 2012-07-30 15:24:45 +00:00
parent 650910ff53
commit 2681ef5502
3 changed files with 74 additions and 37 deletions

View file

@ -53,50 +53,62 @@
$this->operation = $condition->attrs->operation; $this->operation = $condition->attrs->operation;
$this->pipe = $condition->attrs->pipe; $this->pipe = $condition->attrs->pipe;
$dbParser = DB::getParser(); $dbParser = DB::getParser();
$this->column_name = $dbParser->parseExpression($condition->attrs->column); $this->column_name = $dbParser->parseExpression($condition->attrs->column);
// If default value is column name, it should be escaped // If default value is column name, it should be escaped
if($isColumnName = strpos($condition->attrs->default, '.')){ if($isColumnName = (strpos($condition->attrs->default, '.') !== false
$condition->attrs->default = $dbParser->parseColumnName($condition->attrs->default); && strpos($condition->attrs->default, '%') === false ))
} {
$condition->attrs->default = $dbParser->parseColumnName($condition->attrs->default);
}
if($condition->node_name == 'query'){ if($condition->node_name == 'query')
$this->query = new QueryTag($condition, true); {
$this->default_column = $this->query->toString(); $this->query = new QueryTag($condition, TRUE);
} $this->default_column = $this->query->toString();
else if($condition->attrs->var && !strpos($condition->attrs->var, '.')){ }
else if($condition->attrs->var && !strpos($condition->attrs->var, '.'))
{
$this->argument = new QueryArgument($condition); $this->argument = new QueryArgument($condition);
$this->argument_name = $this->argument->getArgumentName(); $this->argument_name = $this->argument->getArgumentName();
} }
else { else
if(isset($condition->attrs->default)){ {
$operationList = array('in'=>1, 'between'=>1, 'not in'=>1); if(isset($condition->attrs->default))
if(isset($operationList[$this->operation])){ {
$default_value = $condition->attrs->default; $operationList = array('in' => 1, 'between' => 1, 'not in' => 1);
if(strpos($default_value, "'") !== false) if(isset($operationList[$this->operation]))
$default_value = "\"" . $default_value . "\""; {
else $default_value = $condition->attrs->default;
$default_value = "'" . $default_value . "'"; if(strpos($default_value, "'") !== FALSE)
} $default_value = "\"" . $default_value . "\"";
else { else
$default_value_object = new DefaultValue($this->column_name, $condition->attrs->default); {
$default_value = $default_value_object->toString(); $default_value = "'" . $default_value . "'";
}
}
else
{
$default_value_object = new DefaultValue($this->column_name, $condition->attrs->default);
$default_value = $default_value_object->toString();
if($default_value_object->isStringFromFunction()){ if($default_value_object->isStringFromFunction())
$default_value = '"\'".' . $default_value . '."\'"'; {
} $default_value = '"\'".' . $default_value . '."\'"';
}
if($default_value_object->isString() && !$isColumnName && !is_numeric( $condition->attrs->default)){ if($default_value_object->isString() && !$isColumnName && !is_numeric($condition->attrs->default))
if(strpos($default_value, "'") !== false) {
$default_value = "\"" . $default_value . "\""; if(strpos($default_value, "'") !== FALSE)
else $default_value = "\"" . $default_value . "\"";
$default_value = "'" . $default_value . "'"; else
} $default_value = "'" . $default_value . "'";
} }
$this->default_column = $default_value; }
} $this->default_column = $default_value;
else }
$this->default_column = "'" . $dbParser->parseColumnName($condition->attrs->var) . "'" ; else
$this->default_column = "'" . $dbParser->parseColumnName($condition->attrs->var) . "'";
} }
} }

View file

@ -329,4 +329,17 @@ class MysqlSelectTest extends MysqlTest {
'; ';
$this->_test($xml_file, $argsString, $expected); $this->_test($xml_file, $argsString, $expected);
} }
function testLikeWithDot()
{
$xml_file = _TEST_PATH_ . "db/xml_query/mysql/data/likewithdot.xml";
$argsString = '';
$expected = 'select *
from `xe_layouts` as `layouts`
where `site_srl` = 0
and `layout_type` = \'p\'
and `layout` like \'%.%\'';
$this->_test($xml_file, $argsString, $expected);
}
} }

View file

@ -0,0 +1,12 @@
<query id="likewithdot" action="select">
<tables>
<table name="layouts" />
</tables>
<columns>
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" default="0" />
<condition operation="equal" column="layout_type" var="layout_type" default="P" pipe="and" />
<condition operation="like" column="layout" default="%.%" pipe="and" />
</conditions>
</query>