Fixed select bug - unless default value is explicitly set as empty string, ignore arguments whose value is empty string.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0-DB@8624 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ucorina 2011-07-22 11:50:08 +00:00
parent 8f04aa5d63
commit 7de48344cc
7 changed files with 47 additions and 21 deletions

View file

@ -53,6 +53,7 @@
function show(){
if($this->hasArgument() && !$this->argument->isValid()) return false;
if($this->hasArgument() && ($this->_value === '\'\'')) return false;
switch($this->operation) {
case 'equal' :
case 'more' :

View file

@ -7,7 +7,7 @@
var $isValid;
var $errorMessage;
function Argument($name, $value){
$this->value = $value;
$this->name = $name;

View file

@ -5,17 +5,9 @@
var $argument_validator;
var $column_name;
var $operation;
var $ignoreValue;
function QueryArgument($tag){
// HACK (this is for backwords compatibility - there are many xml files that have variable names (var) given with .)
// eg. var = point.memeber_srl (getMemberList query from point module)
$this->argument_name = str_replace('.', '_',$tag->attrs->var);
if(!$this->argument_name) $this->ignoreValue = true;
else $this->ignoreValue = false;
$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->column);
@ -28,10 +20,7 @@
}
if($tag->attrs->operation) $this->operation = $tag->attrs->operation;
// If we work with ConditionArgument, check if default value exists, and if yes, create argument
if($this->operation && $tag->attrs->default) $this->ignoreValue = false;
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php');
$this->argument_validator = new QueryArgumentValidator($tag, $this);
@ -59,7 +48,7 @@
$arg = sprintf("\n$%s_argument = new ConditionArgument('%s', %s, '%s');\n"
, $this->argument_name
, $this->argument_name
, $this->ignoreValue ? 'null' : '$args->'.$this->argument_name
, '$args->'.$this->argument_name
, $this->operation
);
@ -67,6 +56,7 @@
$arg = sprintf("\n$%s_argument = new Argument('%s', %s);\n"
, $this->argument_name
, $this->argument_name
, '$args->'.$this->argument_name
, $this->ignoreValue ? 'null' : '$args->'.$this->argument_name);

View file

@ -16,6 +16,19 @@ class ConditionArgumentTest extends CubridTest {
$condition = new Condition('"extra_vars"."document_srl"',$document_srl_argument,"in", 'and');
$this->assertEquals('and "extra_vars"."document_srl" in (1234)', $condition->toString());
}
function testZeroValue(){
$args->site_srl = 0;
$site_srl_argument = new ConditionArgument('site_srl', $args->site_srl, 'equal');
$site_srl_argument->checkNotNull();
$site_srl_argument->createConditionValue();
if(!$site_srl_argument->isValid()) return $site_srl_argument->getErrorMessage();
$site_srl_argument->setColumnType('number');
$condition = new Condition('"sites"."site_srl"',$site_srl_argument,"equal");
$this->assertEquals(' "sites"."site_srl" = 0', $condition->toString());
}
/**
* @todo Implement testCreateConditionValue().
*/

View file

@ -50,8 +50,6 @@
$this->assertNotEquals(-225, $output->error);
$this->assertNotEquals('Missing value for attribute "homepage" with the NOT NULL constraint.', $output->message);
}
function test_communication_addFriendGroup(){

View file

@ -11,7 +11,7 @@
$this->assertEquals($output->data->module_srl, 111);
}
function test_module_getInfo(){
function test_module_getInfo(){
$args->site_srl = 0;
$output = executeQuery('module.getSiteInfo', $args);
$this->assertTrue(is_a($output, 'Object'));
@ -46,5 +46,17 @@
$this->assertTrue(is_int($output->page), $output->message);
}
function test_member_getMemberList(){
$args->is_admin = '';
$args->is_denied = '';
$args->sort_index = "list_order";
$args->sort_order = 'asc';
$args->list_count = 40;
$args->page_count = 10;
$output = executeQuery('member.getMemberList', $args);
$this->assertEquals(0, $output->error, $output->message);
}
}
?>

View file

@ -194,9 +194,21 @@
, "xe_documents" as "documents"
WHERE "documents"."document_srl" = 10
and "modules"."module_srl" = "documents"."module_srl"';
$this->_test($xml_file, $argsString, $expected);
$this->_test($xml_file, $argsString, $expected);
}
function test_member_getMemberList(){
$xml_file = _XE_PATH_ . "modules/member/queries/getMemberList.xml";
$argsString = '$args->is_admin = \'\';
$args->is_denied = \'\';
$args->sort_index = "list_order";
$args->sort_order = \'asc\';
$args->list_count = 40;
$args->page_count = 10;';
$expected = 'select * from "xe_member" as "member"
order by "list_order" asc
limit 0, 40';
$this->_test($xml_file, $argsString, $expected);
}
}