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