mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-09 03:32:00 +09:00
git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@10831 201d5d3c-b55e-5fd7-737f-ddc643e51545
219 lines
7.6 KiB
PHP
219 lines
7.6 KiB
PHP
<?php
|
|
/**
|
|
* @author NHN (developers@xpressengine.com)
|
|
* @package /classes/db/queryparts/condition
|
|
* @version 0.1
|
|
*/
|
|
class Condition {
|
|
/**
|
|
* column name
|
|
* @var string
|
|
*/
|
|
var $column_name;
|
|
var $argument;
|
|
/**
|
|
* operation can use 'equal', 'more', 'excess', 'less', 'below', 'like_tail', 'like_prefix', 'like', 'notlike_tail',
|
|
* 'notlike_prefix', 'notlike', 'in', 'notin', 'not_in', 'and', 'or', 'xor', 'not', 'notequal', 'between'
|
|
* 'null', 'notnull'
|
|
* @var string
|
|
*/
|
|
var $operation;
|
|
/**
|
|
* pipe can use 'and', 'or'...
|
|
* @var string
|
|
*/
|
|
var $pipe;
|
|
|
|
var $_value;
|
|
|
|
var $_show;
|
|
var $_value_to_string;
|
|
|
|
/**
|
|
* constructor
|
|
* @param string $column_name
|
|
* @param mixed $argument
|
|
* @param string $operation
|
|
* @param string $pipe
|
|
* @return void
|
|
*/
|
|
function Condition($column_name, $argument, $operation, $pipe){
|
|
$this->column_name = $column_name;
|
|
$this->argument = $argument;
|
|
$this->operation = $operation;
|
|
$this->pipe = $pipe;
|
|
|
|
}
|
|
|
|
function getArgument(){
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* value to string
|
|
* @param boolean $withValue
|
|
* @return string
|
|
*/
|
|
function toString($withValue = true){
|
|
if (!isset($this->_value_to_string)) {
|
|
if (!$this->show())
|
|
{
|
|
$this->_value_to_string = '';
|
|
}
|
|
else if ($withValue)
|
|
{
|
|
$this->_value_to_string = $this->toStringWithValue();
|
|
}
|
|
else
|
|
{
|
|
$this->_value_to_string = $this->toStringWithoutValue();
|
|
}
|
|
}
|
|
return $this->_value_to_string;
|
|
}
|
|
|
|
/**
|
|
* change string without value
|
|
* @return string
|
|
*/
|
|
function toStringWithoutValue(){
|
|
return $this->pipe . ' ' . $this->getConditionPart($this->_value);
|
|
}
|
|
|
|
/**
|
|
* change string with value
|
|
* @return string
|
|
*/
|
|
function toStringWithValue(){
|
|
return $this->pipe . ' ' . $this->getConditionPart($this->_value);
|
|
}
|
|
|
|
function setPipe($pipe){
|
|
$this->pipe = $pipe;
|
|
}
|
|
|
|
/**
|
|
* @return boolean
|
|
*/
|
|
function show(){
|
|
if(!isset($this->_show)){
|
|
if(is_array($this->_value) && count($this->_value) === 1 && $this->_value[0] === '') {
|
|
$this->_show = false;
|
|
}
|
|
else {
|
|
$this->_show = true;
|
|
switch($this->operation) {
|
|
case 'equal' :
|
|
case 'more' :
|
|
case 'excess' :
|
|
case 'less' :
|
|
case 'below' :
|
|
case 'like_tail' :
|
|
case 'like_prefix' :
|
|
case 'like' :
|
|
case 'notlike_tail' :
|
|
case 'notlike_prefix' :
|
|
case 'notlike' :
|
|
case 'in' :
|
|
case 'notin' :
|
|
case 'not_in' :
|
|
case 'and':
|
|
case 'or':
|
|
case 'xor':
|
|
case 'not':
|
|
case 'notequal' :
|
|
// if variable is not set or is not string or number, return
|
|
if(!isset($this->_value)) { $this->_show = false; break;}
|
|
if($this->_value === '') { $this->_show = false; break; }
|
|
if(!in_array(gettype($this->_value), array('string', 'integer'))) {$this->_show = false; break; }
|
|
break;
|
|
case 'between' :
|
|
if(!is_array($this->_value)) { $this->_show = false; break;}
|
|
if(count($this->_value)!=2) {$this->_show = false; break;}
|
|
case 'null':
|
|
case 'notnull':
|
|
break;
|
|
default:
|
|
// If operation is not one of the above, means the condition is invalid
|
|
$this->_show = false;
|
|
}
|
|
}
|
|
}
|
|
return $this->_show;
|
|
}
|
|
|
|
/**
|
|
* Return condition string
|
|
* @param int|string|array $value
|
|
* @return string
|
|
*/
|
|
function getConditionPart($value) {
|
|
$name = $this->column_name;
|
|
$operation = $this->operation;
|
|
|
|
switch($operation) {
|
|
case 'equal' :
|
|
return $name.' = '.$value;
|
|
break;
|
|
case 'more' :
|
|
return $name.' >= '.$value;
|
|
break;
|
|
case 'excess' :
|
|
return $name.' > '.$value;
|
|
break;
|
|
case 'less' :
|
|
return $name.' <= '.$value;
|
|
break;
|
|
case 'below' :
|
|
return $name.' < '.$value;
|
|
break;
|
|
case 'like_tail' :
|
|
case 'like_prefix' :
|
|
case 'like' :
|
|
if(defined('__CUBRID_VERSION__')
|
|
&& __CUBRID_VERSION__ >= '8.4.1')
|
|
return $name.' rlike '.$value;
|
|
else
|
|
return $name.' like '.$value;
|
|
break;
|
|
case 'notlike_tail' :
|
|
case 'notlike_prefix' :
|
|
case 'notlike' :
|
|
return $name.' not like '.$value;
|
|
break;
|
|
case 'in' :
|
|
return $name.' in '.$value;
|
|
break;
|
|
case 'notin' :
|
|
case 'not_in' :
|
|
return $name.' not in '.$value;
|
|
break;
|
|
case 'notequal' :
|
|
return $name.' <> '.$value;
|
|
break;
|
|
case 'notnull' :
|
|
return $name.' is not null';
|
|
break;
|
|
case 'null' :
|
|
return $name.' is null';
|
|
break;
|
|
case 'and' :
|
|
return $name.' & '.$value;
|
|
break;
|
|
case 'or' :
|
|
return $name.' | '.$value;
|
|
break;
|
|
case 'xor' :
|
|
return $name.' ^ '.$value;
|
|
break;
|
|
case 'not' :
|
|
return $name.' ~ '.$value;
|
|
break;
|
|
case 'between' :
|
|
return $name.' between ' . $value[0] . ' and ' . $value[1];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|