issue 262 coding convention in classes

git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@12230 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ovclas 2012-11-15 07:19:11 +00:00
parent cf271c0a98
commit d5a46e5e90
27 changed files with 1840 additions and 1625 deletions

View file

@ -346,4 +346,4 @@ class Argument
} }
} }
/* End of file Argument.class.php */ /* End of file Argument.class.php */
/* Location: ./classes/xml/xmlquery/Argument.class.php */ /* Location: ./classes/xml/xmlquery/argument/Argument.class.php */

View file

@ -1,122 +1,127 @@
<?php <?php
/**
* ConditionArgument class
* @author NHN (developers@xpressengine.com)
* @package /classes/xml/xmlquery/argument
* @version 0.1
*/
class ConditionArgument extends Argument
{
/** /**
* ConditionArgument class * Operator keyword. for example 'in', 'notint', 'between'
* @author NHN (developers@xpressengine.com) * @var string
* @package /classes/xml/xmlquery/argument
* @version 0.1
*/ */
class ConditionArgument extends Argument { var $operation;
/**
* Operator keyword. for example 'in', 'notint', 'between'
* @var string
*/
var $operation;
/**
/** * constructor
* constructor * @param string $name
* @param string $name * @param mixed $value
* @param mixed $value * @param string $operation
* @param string $operation * @return void
* @return void */
*/ function ConditionArgument($name, $value, $operation)
function ConditionArgument($name, $value, $operation){ {
$operationList = array('in'=>1, 'notin'=>1, 'not_in'=>1, 'between'=>1); $operationList = array('in'=>1, 'notin'=>1, 'not_in'=>1, 'between'=>1);
if(isset($value) && isset($operationList[$operation]) && !is_array($value) && $value != ''){ if(isset($value) && isset($operationList[$operation]) && !is_array($value) && $value != '')
$value = str_replace(' ', '', $value); {
$value = str_replace('\'', '', $value); $value = str_replace(' ', '', $value);
$value = explode(',', $value); $value = str_replace('\'', '', $value);
} $value = explode(',', $value);
parent::Argument($name, $value);
$this->operation = $operation;
} }
parent::Argument($name, $value);
$this->operation = $operation;
}
/** /**
* create condition value. set $this->value * create condition value. set $this->value
* @return void * @return void
*/ */
function createConditionValue(){ function createConditionValue()
if(!isset($this->value)) return; {
if(!isset($this->value)) return;
$operation = $this->operation; $operation = $this->operation;
$value = $this->value; $value = $this->value;
switch($operation) { switch($operation)
case 'like_prefix' : {
if(defined('__CUBRID_VERSION__') case 'like_prefix' :
&& __CUBRID_VERSION__ >= '8.4.1') { if(defined('__CUBRID_VERSION__') && __CUBRID_VERSION__ >= '8.4.1')
$this->value = '^' . str_replace('%', '(.*)', preg_quote($value)); {
} $this->value = '^' . str_replace('%', '(.*)', preg_quote($value));
else }
$this->value = $value.'%'; else
break; $this->value = $value.'%';
case 'like_tail' : break;
if(defined('__CUBRID_VERSION__') case 'like_tail' :
&& __CUBRID_VERSION__ >= '8.4.1') if(defined('__CUBRID_VERSION__') && __CUBRID_VERSION__ >= '8.4.1')
$this->value = str_replace('%', '(.*)', preg_quote($value)) . '$'; $this->value = str_replace('%', '(.*)', preg_quote($value)) . '$';
else else
$this->value = '%'.$value; $this->value = '%'.$value;
break; break;
case 'like' : case 'like' :
if(defined('__CUBRID_VERSION__') if(defined('__CUBRID_VERSION__') && __CUBRID_VERSION__ >= '8.4.1')
&& __CUBRID_VERSION__ >= '8.4.1') { {
$this->value = str_replace('%', '(.*)', preg_quote($value)); $this->value = str_replace('%', '(.*)', preg_quote($value));
} }
else else
$this->value = '%'.$value.'%'; $this->value = '%'.$value.'%';
break; break;
case 'notlike' : case 'notlike' :
$this->value = '%'.$value.'%'; $this->value = '%'.$value.'%';
break; break;
case 'notlike_prefix' : case 'notlike_prefix' :
$this->value = $value.'%'; $this->value = $value.'%';
break; break;
case 'notlike_tail' : case 'notlike_tail' :
$this->value = '%'.$value; $this->value = '%'.$value;
break; break;
case 'in': case 'in':
if(!is_array($value)) $this->value = array($value); if(!is_array($value)) $this->value = array($value);
break; break;
case 'notin': case 'notin':
case 'not_in': case 'not_in':
if(!is_array($value)) $this->value = array($value); if(!is_array($value)) $this->value = array($value);
break; break;
}
} }
}
/** /**
* Since ConditionArgument is used in WHERE clause, * Since ConditionArgument is used in WHERE clause,
* where the argument value is compared to a table column, * where the argument value is compared to a table column,
* it is assumed that all arguments have type. There are cases though * it is assumed that all arguments have type. There are cases though
* where the column does not have any type - if it was removed from * where the column does not have any type - if it was removed from
* the XML schema for example - see the is_secret column in xe_documents table. * the XML schema for example - see the is_secret column in xe_documents table.
* In this case, the column type is retrieved according to argument * In this case, the column type is retrieved according to argument
* value type (using the PHP function is_numeric). * value type (using the PHP function is_numeric).
* *
* @return type string * @return type string
*/ */
function getType(){ function getType()
if($this->type) {
{ if($this->type)
return $this->type; {
} return $this->type;
else if(!is_numeric($this->value))
{
return 'varchar';
}
else
{
return '';
}
} }
else if(!is_numeric($this->value))
function setColumnType($column_type){ {
if(!isset($this->value)) return; return 'varchar';
if($column_type === '') return;
$this->type = $column_type;
} }
else
{
return '';
}
}
} function setColumnType($column_type)
{
if(!isset($this->value)) return;
if($column_type === '') return;
?> $this->type = $column_type;
}
}
/* End of file ConditionArgument.class.php */
/* Location: ./classes/xml/xmlquery/argument/ConditionArgument.class.php */

View file

@ -1,16 +1,16 @@
<?php <?php
/** /**
* SortArgument class * SortArgument class
* @author NHN (developers@xpressengine.com) * @author NHN (developers@xpressengine.com)
* @package /classes/xml/xmlquery/argument * @package /classes/xml/xmlquery/argument
* @version 0.1 * @version 0.1
*/ */
class SortArgument extends Argument { class SortArgument extends Argument
{
function getValue(){ function getValue()
return $this->getUnescapedValue(); {
} return $this->getUnescapedValue();
}
} }
/* End of file SortArgument.class.php */
?> /* Location: ./classes/xml/xmlquery/argument/SortArgument.class.php */

View file

@ -1,146 +1,160 @@
<?php <?php
/**
* DefaultValue class
* @author NHN (developers@xpressengine.com)
* @package /classes/xml/xmlquery/queryargument
* @version 0.1
*/
class DefaultValue
{
/** /**
* DefaultValue class * Column name
* @author NHN (developers@xpressengine.com) * @var string
* @package /classes/xml/xmlquery/queryargument
* @version 0.1
*/ */
class DefaultValue { var $column_name;
/** /**
* Column name * Value
* @var string * @var mixed
*/ */
var $column_name; var $value;
/** /**
* Value * sequnence status
* @var mixed * @var bool
*/ */
var $value; var $is_sequence = false;
/** /**
* sequnence status * operation status
* @var bool * @var bool
*/ */
var $is_sequence = false; var $is_operation = false;
/** /**
* operation status * operation
* @var bool * @var string
*/ */
var $is_operation = false; var $operation = '';
/** /**
* operation * Checks if value is plain string or name of XE function (ipaddress, plus, etc).
* @var string * @var bool
*/ */
var $operation = ''; var $_is_string = false;
/** /**
* Checks if value is plain string or name of XE function (ipaddress, plus, etc). * Checks if value is string resulted from evaluating a piece of PHP code (see $_SERVER[REMOTE_ADDR])
* @var bool * @var bool
*/ */
var $_is_string = false; var $_is_string_from_function = false;
/**
* Checks if value is string resulted from evaluating a piece of PHP code (see $_SERVER[REMOTE_ADDR])
* @var bool
*/
var $_is_string_from_function = false;
/** /**
* constructor * constructor
* @param string $column_name column name * @param string $column_name column name
* @param mixed $value value * @param mixed $value value
* @return void * @return void
*/ */
function DefaultValue($column_name, $value){ function DefaultValue($column_name, $value)
$dbParser = &DB::getParser(); {
$this->column_name = $dbParser->parseColumnName($column_name); $dbParser = &DB::getParser();
$this->value = $value; $this->column_name = $dbParser->parseColumnName($column_name);
$this->value = $this->_setValue(); $this->value = $value;
} $this->value = $this->_setValue();
function isString(){
return $this->_is_string;
$str_pos = strpos($this->value, '(');
if($str_pos===false) return true;
return false;
}
function isStringFromFunction(){
return $this->_is_string_from_function;
}
function isSequence(){
return $this->is_sequence;
}
function isOperation(){
return $this->is_operation;
}
function getOperation(){
return $this->operation;
}
function _setValue(){
if(!isset($this->value)) return;
// If value contains comma separated values and does not contain paranthesis
// -> default value is an array
if(strpos($this->value, ',') !== false && strpos($this->value, '(') === false) {
return sprintf('array(%s)', $this->value);
}
$str_pos = strpos($this->value, '(');
// // TODO Replace this with parseExpression
if($str_pos===false) {
$this->_is_string = true;
return '\''.$this->value.'\'';
}
//if($str_pos===false) return $this->value;
$func_name = substr($this->value, 0, $str_pos);
$args = substr($this->value, $str_pos+1, -1);
switch($func_name) {
case 'ipaddress' :
$val = '$_SERVER[\'REMOTE_ADDR\']';
$this->_is_string_from_function = true;
break;
case 'unixtime' :
$val = 'time()';
break;
case 'curdate' :
$val = 'date("YmdHis")';
$this->_is_string_from_function = true;
break;
case 'sequence' :
$this->is_sequence = true;
$val = '$sequence';
break;
case 'plus' :
$args = abs($args);
$this->is_operation = true;
$this->operation = '+';
$val = sprintf('%d', $args);
break;
case 'minus' :
$args = abs($args);
$this->is_operation = true;
$this->operation = '-';
$val = sprintf('%d', $args);
break;
case 'multiply' :
$args = intval($args);
$this->is_operation = true;
$this->operation = '*';
$val = sprintf('%d', $args);
break;
default :
$val = '\'' . $this->value . '\'';
//$val = $this->value;
}
return $val;
}
function toString(){
return $this->value;
}
} }
function isString()
{
return $this->_is_string;
$str_pos = strpos($this->value, '(');
if($str_pos===false) return true;
return false;
}
function isStringFromFunction()
{
return $this->_is_string_from_function;
}
function isSequence()
{
return $this->is_sequence;
}
function isOperation()
{
return $this->is_operation;
}
function getOperation()
{
return $this->operation;
}
function _setValue()
{
if(!isset($this->value)) return;
// If value contains comma separated values and does not contain paranthesis
// -> default value is an array
if(strpos($this->value, ',') !== false && strpos($this->value, '(') === false)
{
return sprintf('array(%s)', $this->value);
}
$str_pos = strpos($this->value, '(');
// // TODO Replace this with parseExpression
if($str_pos===false)
{
$this->_is_string = true;
return '\''.$this->value.'\'';
}
//if($str_pos===false) return $this->value;
$func_name = substr($this->value, 0, $str_pos);
$args = substr($this->value, $str_pos+1, -1);
switch($func_name)
{
case 'ipaddress' :
$val = '$_SERVER[\'REMOTE_ADDR\']';
$this->_is_string_from_function = true;
break;
case 'unixtime' :
$val = 'time()';
break;
case 'curdate' :
$val = 'date("YmdHis")';
$this->_is_string_from_function = true;
break;
case 'sequence' :
$this->is_sequence = true;
$val = '$sequence';
break;
case 'plus' :
$args = abs($args);
$this->is_operation = true;
$this->operation = '+';
$val = sprintf('%d', $args);
break;
case 'minus' :
$args = abs($args);
$this->is_operation = true;
$this->operation = '-';
$val = sprintf('%d', $args);
break;
case 'multiply' :
$args = intval($args);
$this->is_operation = true;
$this->operation = '*';
$val = sprintf('%d', $args);
break;
default :
$val = '\'' . $this->value . '\'';
//$val = $this->value;
}
return $val;
}
function toString()
{
return $this->value;
}
}
/* End of file DefaultValue.class.php */
/* Location: ./classes/xml/xmlquery/queryargument/DefaultValue.class.php */

View file

@ -5,7 +5,8 @@
* @package /classes/xml/xmlquery/queryargument * @package /classes/xml/xmlquery/queryargument
* @version 0.1 * @version 0.1
*/ */
class QueryArgument { class QueryArgument
{
/** /**
* Argument name * Argument name
* @var string * @var string
@ -48,13 +49,14 @@ class QueryArgument {
* @param bool $ignore_value * @param bool $ignore_value
* @return void * @return void
*/ */
function QueryArgument($tag, $ignore_value = false) { function QueryArgument($tag, $ignore_value = false)
{
static $number_of_arguments = 0; static $number_of_arguments = 0;
$this->argument_name = $tag->attrs->var; $this->argument_name = $tag->attrs->var;
if (!$this->argument_name) if(!$this->argument_name)
$this->argument_name = str_replace('.', '_', $tag->attrs->name); $this->argument_name = str_replace('.', '_', $tag->attrs->name);
if (!$this->argument_name) if(!$this->argument_name)
$this->argument_name = str_replace('.', '_', $tag->attrs->column); $this->argument_name = str_replace('.', '_', $tag->attrs->column);
$this->variable_name = $this->argument_name; $this->variable_name = $this->argument_name;
@ -63,41 +65,47 @@ class QueryArgument {
$this->argument_name .= $number_of_arguments; $this->argument_name .= $number_of_arguments;
$name = $tag->attrs->name; $name = $tag->attrs->name;
if (!$name) if(!$name)
$name = $tag->attrs->column; $name = $tag->attrs->column;
if (strpos($name, '.') === false) if(strpos($name, '.') === false)
$this->column_name = $name; $this->column_name = $name;
else { else
{
list($prefix, $name) = explode('.', $name); list($prefix, $name) = explode('.', $name);
$this->column_name = $name; $this->column_name = $name;
$this->table_name = $prefix; $this->table_name = $prefix;
} }
if ($tag->attrs->operation) if($tag->attrs->operation)
$this->operation = $tag->attrs->operation; $this->operation = $tag->attrs->operation;
$this->argument_validator = new QueryArgumentValidator($tag, $this); $this->argument_validator = new QueryArgumentValidator($tag, $this);
$this->ignore_value = $ignore_value; $this->ignore_value = $ignore_value;
} }
function getArgumentName() { function getArgumentName()
{
return $this->argument_name; return $this->argument_name;
} }
function getColumnName() { function getColumnName()
{
return $this->column_name; return $this->column_name;
} }
function getTableName(){ function getTableName()
{
return $this->table_name; return $this->table_name;
} }
function getValidatorString() { function getValidatorString()
{
return $this->argument_validator->toString(); return $this->argument_validator->toString();
} }
function isConditionArgument() { function isConditionArgument()
if ($this->operation) {
if($this->operation)
return true; return true;
return false; return false;
} }
@ -106,52 +114,56 @@ class QueryArgument {
* Change QueryArgument object to string * Change QueryArgument object to string
* @return string * @return string
*/ */
function toString() { function toString()
if ($this->isConditionArgument()) { {
if($this->isConditionArgument())
{
// Instantiation // Instantiation
$arg = sprintf("\n" . '${\'%s_argument\'} = new ConditionArgument(\'%s\', %s, \'%s\');' . "\n" $arg = sprintf("\n" . '${\'%s_argument\'} = new ConditionArgument(\'%s\', %s, \'%s\');' . "\n"
, $this->argument_name , $this->argument_name
, $this->variable_name , $this->variable_name
, '$args->' . $this->variable_name , '$args->' . $this->variable_name
, $this->operation , $this->operation
); );
// Call methods to validate argument and ensure default value // Call methods to validate argument and ensure default value
$arg .= $this->argument_validator->toString(); $arg .= $this->argument_validator->toString();
// Prepare condition string // Prepare condition string
$arg .= sprintf('${\'%s_argument\'}->createConditionValue();' . "\n" $arg .= sprintf('${\'%s_argument\'}->createConditionValue();' . "\n"
, $this->argument_name , $this->argument_name
); );
// Check that argument passed validation, else return // Check that argument passed validation, else return
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n" $arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
, $this->argument_name , $this->argument_name
, $this->argument_name , $this->argument_name
); );
} else { }
else
{
$arg = sprintf("\n" . '${\'%s_argument\'} = new Argument(\'%s\', %s);' . "\n" $arg = sprintf("\n" . '${\'%s_argument\'} = new Argument(\'%s\', %s);' . "\n"
, $this->argument_name , $this->argument_name
, $this->variable_name , $this->variable_name
, $this->ignore_value ? 'null' : '$args->{\'' . $this->variable_name . '\'}'); , $this->ignore_value ? 'null' : '$args->{\'' . $this->variable_name . '\'}');
$arg .= $this->argument_validator->toString(); $arg .= $this->argument_validator->toString();
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n" $arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
, $this->argument_name , $this->argument_name
, $this->argument_name , $this->argument_name
); );
} }
// If the argument is null, skip it // If the argument is null, skip it
if ($this->argument_validator->isIgnorable()) { if($this->argument_validator->isIgnorable())
{
$arg = sprintf("if(isset(%s)) {", '$args->' . $this->variable_name) $arg = sprintf("if(isset(%s)) {", '$args->' . $this->variable_name)
. $arg . $arg
. sprintf("} else\n" . '${\'%s_argument\'} = null;', $this->argument_name); . sprintf("} else\n" . '${\'%s_argument\'} = null;', $this->argument_name);
} }
return $arg; return $arg;
} }
} }
/* End of file QueryArgument.class.php */
?> /* Location: ./classes/xml/xmlquery/queryargument/QueryArgument.class.php */

View file

@ -1,29 +1,30 @@
<?php <?php
/**
* SortQueryArgument class
* @author NHN (developers@xpressengine.com)
* @package /classes/xml/xmlquery/queryargument
* @version 0.1
*/
class SortQueryArgument extends QueryArgument
{
/** /**
* SortQueryArgument class * Change SortQueryArgument object to string
* @author NHN (developers@xpressengine.com) * @return string
* @package /classes/xml/xmlquery/queryargument
* @version 0.1
*/ */
class SortQueryArgument extends QueryArgument{ function toString()
/** {
* Change SortQueryArgument object to string $arg = sprintf("\n" . '${\'%s_argument\'} = new SortArgument(\'%s\', %s);' . "\n"
* @return string , $this->argument_name
*/ , $this->argument_name
function toString(){ , '$args->'.$this->variable_name);
$arg = sprintf("\n" . '${\'%s_argument\'} = new SortArgument(\'%s\', %s);' . "\n" $arg .= $this->argument_validator->toString();
, $this->argument_name
, $this->argument_name
, '$args->'.$this->variable_name);
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n"
$arg .= $this->argument_validator->toString(); , $this->argument_name
, $this->argument_name
$arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n" );
, $this->argument_name return $arg;
, $this->argument_name }
); }
return $arg; /* End of file DefaultValue.class.php */
} /* Location: ./classes/xml/xmlquery/queryargument/DefaultValue.class.php */
}
?>

View file

@ -1,113 +1,125 @@
<?php <?php
/**
* QueryArgumentValidator class
* @author NHN (developers@xpressengine.com)
* @package /classes/xml/xmlquery/queryargument/validator
* @version 0.1
*/
class QueryArgumentValidator
{
/** /**
* QueryArgumentValidator class * Argument name
* @author NHN (developers@xpressengine.com) * @var string
* @package /classes/xml/xmlquery/queryargument/validator
* @version 0.1
*/ */
class QueryArgumentValidator { var $argument_name;
/** /**
* Argument name * Default value
* @var string * @var string
*/ */
var $argument_name; var $default_value;
/** /**
* Default value * Notnull status setting, if value should be not null, this value is 'notnull'
* @var string * @var string
*/ */
var $default_value; var $notnull;
/** /**
* Notnull status setting, if value should be not null, this value is 'notnull' * Filter for value type, for example number
* @var string * @var string
*/ */
var $notnull; var $filter;
/** /**
* Filter for value type, for example number * Minimum length for value
* @var string * @var int
*/ */
var $filter; var $min_length;
/** /**
* Minimum length for value * Maximum length for value
* @var int * @var int
*/ */
var $min_length; var $max_length;
/**
* Maximum length for value
* @var int
*/
var $max_length;
var $validator_string; var $validator_string;
/** /**
* Query argument for validate * Query argument for validate
* @var QueryArgument object * @var QueryArgument object
*/ */
var $argument; var $argument;
/** /**
* constructor * constructor
* @param Xml_Node_ $tag tag object by Query xml file parse * @param Xml_Node_ $tag tag object by Query xml file parse
* @param QueryArgument $argument * @param QueryArgument $argument
* @return void * @return void
*/ */
function QueryArgumentValidator($tag, $argument){ function QueryArgumentValidator($tag, $argument)
$this->argument = $argument; {
$this->argument_name = $this->argument->getArgumentName(); $this->argument = $argument;
$this->argument_name = $this->argument->getArgumentName();
$this->default_value = $tag->attrs->default; $this->default_value = $tag->attrs->default;
$this->notnull = $tag->attrs->notnull; $this->notnull = $tag->attrs->notnull;
$this->filter = $tag->attrs->filter; $this->filter = $tag->attrs->filter;
$this->min_length = $tag->attrs->min_length; $this->min_length = $tag->attrs->min_length;
$this->max_length = $tag->attrs->max_length; $this->max_length = $tag->attrs->max_length;
}
function isIgnorable(){
if(isset($this->default_value) || isset($this->notnull)) return false;
return true;
}
function toString(){
$validator = '';
if($this->filter){
$validator .= sprintf('${\'%s_argument\'}->checkFilter(\'%s\');' . "\n"
, $this->argument_name
, $this->filter
);
}
if($this->min_length){
$validator .= sprintf('${\'%s_argument\'}->checkMinLength(%s);' . "\n"
, $this->argument_name
, $this->min_length
);
}
if($this->max_length){
$validator .= sprintf('${\'%s_argument\'}->checkMaxLength(%s);'. "\n"
, $this->argument_name
, $this->max_length
);
}
if(isset($this->default_value)){
$this->default_value = new DefaultValue($this->argument_name, $this->default_value);
if($this->default_value->isSequence())
$validator .= '$db = &DB::getInstance(); $sequence = $db->getNextSequence(); ';
if($this->default_value->isOperation())
$validator .= sprintf('${\'%s_argument\'}->setColumnOperation(\'%s\');' . "\n"
, $this->argument_name
, $this->default_value->getOperation()
);
$validator .= sprintf('${\'%s_argument\'}->ensureDefaultValue(%s);' . "\n"
, $this->argument_name
, $this->default_value->toString()
);
}
if($this->notnull){
$validator .= sprintf('${\'%s_argument\'}->checkNotNull();' . "\n"
, $this->argument_name
);
}
return $validator;
}
} }
?> function isIgnorable()
{
if(isset($this->default_value) || isset($this->notnull)) return false;
return true;
}
function toString()
{
$validator = '';
if($this->filter)
{
$validator .= sprintf('${\'%s_argument\'}->checkFilter(\'%s\');' . "\n"
, $this->argument_name
, $this->filter
);
}
if($this->min_length)
{
$validator .= sprintf('${\'%s_argument\'}->checkMinLength(%s);' . "\n"
, $this->argument_name
, $this->min_length
);
}
if($this->max_length)
{
$validator .= sprintf('${\'%s_argument\'}->checkMaxLength(%s);'. "\n"
, $this->argument_name
, $this->max_length
);
}
if(isset($this->default_value))
{
$this->default_value = new DefaultValue($this->argument_name, $this->default_value);
if($this->default_value->isSequence())
$validator .= '$db = &DB::getInstance(); $sequence = $db->getNextSequence(); ';
if($this->default_value->isOperation())
{
$validator .= sprintf('${\'%s_argument\'}->setColumnOperation(\'%s\');' . "\n"
, $this->argument_name
, $this->default_value->getOperation()
);
}
$validator .= sprintf('${\'%s_argument\'}->ensureDefaultValue(%s);' . "\n"
, $this->argument_name
, $this->default_value->toString()
);
}
if($this->notnull)
{
$validator .= sprintf('${\'%s_argument\'}->checkNotNull();' . "\n"
, $this->argument_name
);
}
return $validator;
}
}
/* End of file QueryArgumentValidator.class.php */
/* Location: ./classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php */

View file

@ -1,28 +1,32 @@
<?php <?php
/**
* ColumnTag class
* Models the <column> tag inside an XML Query file
* Since the <column> tag supports different attributes depending on
* the type of query (select, update, insert, delete) this is only
* the base class for the classes that will model each type <column> tag.
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class ColumnTag
{
/** /**
* ColumnTag class * Column name
* Models the <column> tag inside an XML Query file * @var string
* Since the <column> tag supports different attributes depending on
* the type of query (select, update, insert, delete) this is only
* the base class for the classes that will model each type <column> tag.
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class ColumnTag { var $name;
/**
* Column name /**
* @var string * constructor
*/ * @param string $name
var $name; * @return void
*/
/** function ColumnTag($name)
* constructor {
* @param string $name $this->name = $name;
* @return void
*/
function ColumnTag($name){
$this->name = $name;
}
} }
}
/* End of file ColumnTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/ColumnTag.class.php */

View file

@ -1,40 +1,45 @@
<?php <?php
/**
* InsertColumnTag
* Models the <column> tag inside an XML Query file whose action is 'insert'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class InsertColumnTag extends ColumnTag
{
/** /**
* InsertColumnTag * argument
* Models the <column> tag inside an XML Query file whose action is 'insert' * @var QueryArgument object
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class InsertColumnTag extends ColumnTag { var $argument;
/**
* argument
* @var QueryArgument object
*/
var $argument;
/**
* constructor
* @param object $column
* @return void
*/
function InsertColumnTag($column) {
parent::ColumnTag($column->attrs->name);
$dbParser = DB::getParser();
$this->name = $dbParser->parseColumnName($this->name);
$this->argument = new QueryArgument($column);
}
function getExpressionString(){
return sprintf('new InsertExpression(\'%s\', ${\'%s_argument\'})'
, $this->name
, $this->argument->argument_name);
}
function getArgument(){
return $this->argument;
}
/**
* constructor
* @param object $column
* @return void
*/
function InsertColumnTag($column)
{
parent::ColumnTag($column->attrs->name);
$dbParser = DB::getParser();
$this->name = $dbParser->parseColumnName($this->name);
$this->argument = new QueryArgument($column);
} }
?>
function getExpressionString()
{
return sprintf('new InsertExpression(\'%s\', ${\'%s_argument\'})'
, $this->name
, $this->argument->argument_name);
}
function getArgument()
{
return $this->argument;
}
}
/* End of file InsertColumnTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/InsertColumnTag.class.php */

View file

@ -1,31 +1,36 @@
<?php <?php
/**
* InsertColumnTagWithoutArgument
* Models the <column> tag inside an XML Query file whose action is 'insert-select'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class InsertColumnTagWithoutArgument extends ColumnTag
{
/** /**
* InsertColumnTagWithoutArgument * constructor
* Models the <column> tag inside an XML Query file whose action is 'insert-select' * @param object $column
* * @return void
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class InsertColumnTagWithoutArgument extends ColumnTag { function InsertColumnTagWithoutArgument($column)
/** {
* constructor parent::ColumnTag($column->attrs->name);
* @param object $column $dbParser = DB::getParser();
* @return void $this->name = $dbParser->parseColumnName($this->name);
*/
function InsertColumnTagWithoutArgument($column) {
parent::ColumnTag($column->attrs->name);
$dbParser = DB::getParser();
$this->name = $dbParser->parseColumnName($this->name);
}
function getExpressionString(){
return sprintf('new Expression(\'%s\')', $this->name);
}
function getArgument(){
return null;
}
} }
?>
function getExpressionString()
{
return sprintf('new Expression(\'%s\')', $this->name);
}
function getArgument()
{
return null;
}
}
/* End of file InsertColumnTagWithoutArgument.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/InsertColumnTagWithoutArgument.class.php */

View file

@ -1,65 +1,72 @@
<?php <?php
/**
* InsertColumnsTag class
* Models the <column> tag inside an XML Query file whose action is 'insert'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class InsertColumnsTag
{
/** /**
* InsertColumnsTag class * Column list
* Models the <column> tag inside an XML Query file whose action is 'insert' * @var array value is InsertColumnTag object
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class InsertColumnsTag{ var $columns;
/**
* Column list
* @var array value is InsertColumnTag object
*/
var $columns;
/** /**
* constructor * constructor
* @param array|string $xml_columns * @param array|string $xml_columns
* @return void * @return void
*/ */
function InsertColumnsTag($xml_columns) { function InsertColumnsTag($xml_columns)
$this->columns = array(); {
$this->columns = array();
if(!$xml_columns) if(!$xml_columns)
return; return;
if(!is_array($xml_columns)) $xml_columns = array($xml_columns); if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){ foreach($xml_columns as $column)
if($column->name === 'query') $this->columns[] = new QueryTag($column, true); {
else if(!isset($column->attrs->var) && !isset($column->attrs->default)) $this->columns[] = new InsertColumnTagWithoutArgument($column); if($column->name === 'query') $this->columns[] = new QueryTag($column, true);
else $this->columns[] = new InsertColumnTag($column); else if(!isset($column->attrs->var) && !isset($column->attrs->default)) $this->columns[] = new InsertColumnTagWithoutArgument($column);
} else $this->columns[] = new InsertColumnTag($column);
} }
/**
* InsertColumnTag object to string
* @return string
*/
function toString(){
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column){
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
}
/**
* Return argument list
* @return array
*/
function getArguments(){
$arguments = array();
foreach($this->columns as $column){
$arguments[] = $column->getArgument();
}
return $arguments;
}
} }
?> /**
* InsertColumnTag object to string
* @return string
*/
function toString()
{
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column)
{
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
}
/**
* Return argument list
* @return array
*/
function getArguments()
{
$arguments = array();
foreach($this->columns as $column)
{
$arguments[] = $column->getArgument();
}
return $arguments;
}
}
/* End of file InsertColumnsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php */

View file

@ -1,53 +1,58 @@
<?php <?php
/**
* SelectColumnTag
* Models the <column> tag inside an XML Query file whose action is 'select'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class SelectColumnTag extends ColumnTag
{
/** /**
* SelectColumnTag * alias
* Models the <column> tag inside an XML Query file whose action is 'select' * @var string
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class SelectColumnTag extends ColumnTag{ var $alias;
/** /**
* alias * click count status
* @var string * @var bool
*/ */
var $alias; var $click_count;
/**
* click count status /**
* @var bool * constructor
*/ * @param string|object $column
var $click_count; * @return void
*/
/** function SelectColumnTag($column)
* constructor {
* @param string|object $column if ($column == "*" || $column->attrs->name == '*')
* @return void {
*/ parent::ColumnTag(NULL);
function SelectColumnTag($column){ $this->name = "*";
if ($column == "*" || $column->attrs->name == '*')
{
parent::ColumnTag(NULL);
$this->name = "*";
}
else
{
parent::ColumnTag($column->attrs->name);
$dbParser = new DB(); $dbParser = &$dbParser->getParser();
$this->name = $dbParser->parseExpression($this->name);
$this->alias = $column->attrs->alias;
$this->click_count = $column->attrs->click_count;
}
} }
else
function getExpressionString(){ {
if($this->name == '*') return "new StarExpression()"; parent::ColumnTag($column->attrs->name);
if($this->click_count) $dbParser = new DB(); $dbParser = &$dbParser->getParser();
return sprintf('new ClickCountExpression(%s, %s, $args->%s)', $this->name, $this->alias,$this->click_count); $this->name = $dbParser->parseExpression($this->name);
if(strpos($this->name, '$') === 0)
return sprintf('new SelectExpression($args->%s)', substr($this->name, 1)); $this->alias = $column->attrs->alias;
$dbParser = DB::getParser(); $this->click_count = $column->attrs->click_count;
return sprintf('new SelectExpression(\'%s\'%s)', $this->name, $this->alias ? ', \''.$dbParser->escape($this->alias) .'\'': '');
} }
} }
function getExpressionString()
{
if($this->name == '*') return "new StarExpression()";
if($this->click_count)
return sprintf('new ClickCountExpression(%s, %s, $args->%s)', $this->name, $this->alias,$this->click_count);
if(strpos($this->name, '$') === 0)
return sprintf('new SelectExpression($args->%s)', substr($this->name, 1));
$dbParser = DB::getParser();
return sprintf('new SelectExpression(\'%s\'%s)', $this->name, $this->alias ? ', \''.$dbParser->escape($this->alias) .'\'': '');
}
}
/* End of file SelectColumnTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/SelectColumnTag.class.php */

View file

@ -1,83 +1,94 @@
<?php <?php
/**
* SelectColumnTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class SelectColumnsTag
{
/** /**
* SelectColumnTag class * Column list
* * @var array value is SelectColumnTag object
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class SelectColumnsTag { var $columns;
/**
* Column list
* @var array value is SelectColumnTag object
*/
var $columns;
/** /**
* constructor * constructor
* @param Xml_Node_ $xml_columns * @param Xml_Node_ $xml_columns
* @return void * @return void
*/ */
function SelectColumnsTag($xml_columns_tag){ function SelectColumnsTag($xml_columns_tag)
if (!$xml_columns_tag) {
$xml_columns_tag = new Xml_Node_(); if (!$xml_columns_tag)
$xml_columns_tag = new Xml_Node_();
$xml_columns = $xml_columns_tag->column; $xml_columns = $xml_columns_tag->column;
$xml_queries = $xml_columns_tag->query; $xml_queries = $xml_columns_tag->query;
$this->columns = array(); $this->columns = array();
if(!$xml_columns) { if(!$xml_columns)
$this->columns[] = new SelectColumnTag("*"); {
return; $this->columns[] = new SelectColumnTag("*");
} return;
if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){
$this->columns[] = new SelectColumnTag($column);
}
if(!$xml_queries) {
return;
}
if(!is_array($xml_queries)) $xml_queries = array($xml_queries);
foreach($xml_queries as $column){
$this->columns[] = new QueryTag($column, true);
}
} }
/** if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
* SelectColumnTag object to string
* @return string foreach($xml_columns as $column)
*/ {
function toString(){ $this->columns[] = new SelectColumnTag($column);
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column){
if(is_a($column, 'QueryTag'))
$output_columns .= $column->toString() . PHP_EOL . ',';
else
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
} }
/**
* Return argument list if(!$xml_queries)
* @return array {
*/ return;
function getArguments(){ }
$arguments = array();
foreach($this->columns as $column){ if(!is_array($xml_queries)) $xml_queries = array($xml_queries);
if(is_a($column, 'QueryTag'))
$arguments = array_merge($arguments, $column->getArguments()); foreach($xml_queries as $column)
} {
return $arguments; $this->columns[] = new QueryTag($column, true);
} }
} }
?>
/**
* SelectColumnTag object to string
* @return string
*/
function toString()
{
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column)
{
if(is_a($column, 'QueryTag'))
$output_columns .= $column->toString() . PHP_EOL . ',';
else
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
}
/**
* Return argument list
* @return array
*/
function getArguments()
{
$arguments = array();
foreach($this->columns as $column)
{
if(is_a($column, 'QueryTag'))
$arguments = array_merge($arguments, $column->getArguments());
}
return $arguments;
}
}
/* End of file SelectColumnsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php */

View file

@ -1,73 +1,83 @@
<?php <?php
/**
* UpdateColumnTag
* Models the <column> tag inside an XML Query file whose action is 'update'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class UpdateColumnTag extends ColumnTag
{
/** /**
* UpdateColumnTag * argument
* Models the <column> tag inside an XML Query file whose action is 'update' * @var QueryArgument object
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class UpdateColumnTag extends ColumnTag { var $argument;
/** /**
* argument * default value
* @var QueryArgument object * @var string
*/ */
var $argument; var $default_value;
/**
* default value
* @var string
*/
var $default_value;
/** /**
* constructor * constructor
* @param object $column * @param object $column
* @return void * @return void
*/ */
function UpdateColumnTag($column) { function UpdateColumnTag($column)
parent::ColumnTag($column->attrs->name); {
$dbParser = DB::getParser(); parent::ColumnTag($column->attrs->name);
$this->name = $dbParser->parseColumnName($this->name); $dbParser = DB::getParser();
if($column->attrs->var) $this->name = $dbParser->parseColumnName($this->name);
$this->argument = new QueryArgument($column); if($column->attrs->var)
else { $this->argument = new QueryArgument($column);
if(strpos($column->attrs->default, '.') !== false) else
$this->default_value = "'" . $dbParser->parseColumnName($column->attrs->default) . "'"; {
else { if(strpos($column->attrs->default, '.') !== false)
$default_value = new DefaultValue($this->name, $column->attrs->default); $this->default_value = "'" . $dbParser->parseColumnName($column->attrs->default) . "'";
if($default_value->isOperation()) else
$this->argument = new QueryArgument($column, true); {
//else $this->default_value = $dbParser->parseColumnName($column->attrs->default); $default_value = new DefaultValue($this->name, $column->attrs->default);
else { if($default_value->isOperation())
$this->default_value = $default_value->toString(); $this->argument = new QueryArgument($column, true);
if($default_value->isStringFromFunction()){ //else $this->default_value = $dbParser->parseColumnName($column->attrs->default);
$this->default_value = '"\'".' . $this->default_value . '."\'"'; else
} {
if($default_value->isString()){ $this->default_value = $default_value->toString();
$this->default_value = '"' . $this->default_value . '"'; if($default_value->isStringFromFunction())
} {
} $this->default_value = '"\'".' . $this->default_value . '."\'"';
}
if($default_value->isString())
} {
} $this->default_value = '"' . $this->default_value . '"';
} }
}
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(){
return $this->argument;
} }
} }
?> 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()
{
return $this->argument;
}
}
/* End of file UpdateColumnTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php */

View file

@ -1,61 +1,67 @@
<?php <?php
/**
* UpdateColumnsTag
* Models the <column> tag inside an XML Query file whose action is 'update'
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/
class UpdateColumnsTag
{
/** /**
* UpdateColumnsTag * Column list
* Models the <column> tag inside an XML Query file whose action is 'update' * @var array value is UpdateColumnTag object
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/column
* @version 0.1
*/ */
class UpdateColumnsTag{ var $columns;
/**
* Column list
* @var array value is UpdateColumnTag object
*/
var $columns;
/** /**
* constructor * constructor
* @param array|string $xml_columns * @param array|string $xml_columns
* @return void * @return void
*/ */
function UpdateColumnsTag($xml_columns) { function UpdateColumnsTag($xml_columns)
$this->columns = array(); {
$this->columns = array();
if(!is_array($xml_columns)) $xml_columns = array($xml_columns); if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){ foreach($xml_columns as $column)
if($column->name === 'query') $this->columns[] = new QueryTag($column, true); {
else $this->columns[] = new UpdateColumnTag($column); if($column->name === 'query') $this->columns[] = new QueryTag($column, true);
} else $this->columns[] = new UpdateColumnTag($column);
} }
/**
* UpdateColumnTag object to string
* @return string
*/
function toString(){
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column){
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
}
/**
* Return argument list
* @return array
*/
function getArguments(){
$arguments = array();
foreach($this->columns as $column){
$arguments[] = $column->getArgument();
}
return $arguments;
}
} }
?> /**
* UpdateColumnTag object to string
* @return string
*/
function toString()
{
$output_columns = 'array(' . PHP_EOL;
foreach($this->columns as $column)
{
$output_columns .= $column->getExpressionString() . PHP_EOL . ',';
}
$output_columns = substr($output_columns, 0, -1);
$output_columns .= ')';
return $output_columns;
}
/**
* Return argument list
* @return array
*/
function getArguments()
{
$arguments = array();
foreach($this->columns as $column)
{
$arguments[] = $column->getArgument();
}
return $arguments;
}
}
/* End of file UpdateColumnsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php */

View file

@ -1,66 +1,74 @@
<?php <?php
/**
* ConditionGroupTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/
class ConditionGroupTag
{
/** /**
* ConditionGroupTag class * condition list
* * @var string|array value is ConditionTag object
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/ */
class ConditionGroupTag { var $conditions;
/** /**
* condition list * pipe
* @var string|array value is ConditionTag object * @var string
*/ */
var $conditions; var $pipe;
/**
* pipe
* @var string
*/
var $pipe;
/** /**
* constructor * constructor
* @param string|array $conditions * @param string|array $conditions
* @param string $pipe * @param string $pipe
* @return void * @return void
*/ */
function ConditionGroupTag($conditions, $pipe = ""){ function ConditionGroupTag($conditions, $pipe = "")
$this->pipe = $pipe; {
$this->pipe = $pipe;
if(!is_array($conditions)) $conditions = array($conditions); if(!is_array($conditions)) $conditions = array($conditions);
foreach($conditions as $condition){ foreach($conditions as $condition)
//if($condition->node_name === 'query') $this->conditions[] = new QueryTag($condition, true); {
$this->conditions[] = new ConditionTag($condition); //if($condition->node_name === 'query') $this->conditions[] = new QueryTag($condition, true);
} $this->conditions[] = new ConditionTag($condition);
} }
function getConditions(){
return $this->conditions;
}
/**
* ConditionTag object to string
* @return string
*/
function getConditionGroupString(){
$conditions_string = 'array('.PHP_EOL;
foreach($this->conditions as $condition){
$conditions_string .= $condition->getConditionString() . PHP_EOL . ',';
}
$conditions_string = substr($conditions_string, 0, -2);//remove ','
$conditions_string .= ')';
return sprintf("new ConditionGroup(%s%s)", $conditions_string, $this->pipe ? ',\''.$this->pipe . '\'': '');
}
function getArguments(){
$arguments = array();
foreach($this->conditions as $condition){
$arguments = array_merge($arguments, $condition->getArguments());
}
return $arguments;
}
} }
?>
function getConditions()
{
return $this->conditions;
}
/**
* ConditionTag object to string
* @return string
*/
function getConditionGroupString()
{
$conditions_string = 'array('.PHP_EOL;
foreach($this->conditions as $condition)
{
$conditions_string .= $condition->getConditionString() . PHP_EOL . ',';
}
$conditions_string = substr($conditions_string, 0, -2);//remove ','
$conditions_string .= ')';
return sprintf("new ConditionGroup(%s%s)", $conditions_string, $this->pipe ? ',\''.$this->pipe . '\'': '');
}
function getArguments()
{
$arguments = array();
foreach($this->conditions as $condition)
{
$arguments = array_merge($arguments, $condition->getArguments());
}
return $arguments;
}
}
/* End of file ConditionGroupTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php */

View file

@ -1,156 +1,165 @@
<?php <?php
/**
* ConditionTag
* Models the <condition> tag inside an XML Query file. Base class.
*
* @author Corina
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/
class ConditionTag
{
/** /**
* ConditionTag * operation for example 'in', 'between', 'not in'...
* Models the <condition> tag inside an XML Query file. Base class. * @var string
*
* @author Corina
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/ */
class ConditionTag { var $operation;
/** /**
* operation for example 'in', 'between', 'not in'... * Column name
* @var string * @var string
*/ */
var $operation; var $column_name;
/** /**
* Column name * Pipe
* @var string * @var string
*/ */
var $column_name; var $pipe;
/** /**
* Pipe * Argument name
* @var string * @var string
*/ */
var $pipe; var $argument_name;
/** /**
* Argument name * QueryArgument object
* @var string * @var QueryArgument
*/ */
var $argument_name; var $argument;
/** /**
* QueryArgument object * Default column
* @var QueryArgument * @var string
*/ */
var $argument; var $default_column;
/** /**
* Default column * QueryTag object
* @var string * @var QueryTag
*/ */
var $default_column; var $query;
/**
* QueryTag object
* @var QueryTag
*/
var $query;
/** /**
* constructor * constructor
* @param object $condition * @param object $condition
* @return void * @return void
*/ */
function ConditionTag($condition){ function ConditionTag($condition)
$this->operation = $condition->attrs->operation; {
$this->pipe = $condition->attrs->pipe; $this->operation = $condition->attrs->operation;
$dbParser = DB::getParser(); $this->pipe = $condition->attrs->pipe;
$this->column_name = $dbParser->parseExpression($condition->attrs->column); $dbParser = DB::getParser();
$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, '.') !== false if($isColumnName = (strpos($condition->attrs->default, '.') !== false
&& strpos($condition->attrs->default, '.') !== 0 && strpos($condition->attrs->default, '.') !== 0
&& strpos($condition->attrs->default, '%') === false )) && strpos($condition->attrs->default, '%') === false ))
{ {
$condition->attrs->default = $dbParser->parseExpression($condition->attrs->default); $condition->attrs->default = $dbParser->parseExpression($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();
}
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))
{ {
$this->query = new QueryTag($condition, TRUE); $operationList = array('in' => 1, 'between' => 1, 'not in' => 1);
$this->default_column = $this->query->toString(); if(isset($operationList[$this->operation]))
}
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); $default_value = $condition->attrs->default;
if(isset($operationList[$this->operation])) 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->isString() && !$isColumnName && !is_numeric($condition->attrs->default))
{ {
$default_value = $condition->attrs->default;
if(strpos($default_value, "'") !== FALSE) if(strpos($default_value, "'") !== FALSE)
$default_value = "\"" . $default_value . "\""; $default_value = "\"" . $default_value . "\"";
else else
{ $default_value = "'" . $default_value . "'";
$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->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 = $default_value;
$this->default_column = "'" . $dbParser->parseColumnName($condition->attrs->var) . "'";
} }
} else
$this->default_column = "'" . $dbParser->parseColumnName($condition->attrs->var) . "'";
function setPipe($pipe){
$this->pipe = $pipe;
}
function getArguments(){
$arguments = array();
if($this->query)
$arguments = array_merge($arguments, $this->query->getArguments());
if($this->argument)
$arguments[] = $this->argument;
return $arguments;
}
function getConditionString(){
if($this->query){
return sprintf("new ConditionSubquery('%s',%s,%s%s)"
, $this->column_name
, $this->default_column
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
else if(isset($this->default_column)){
return sprintf("new ConditionWithoutArgument('%s',%s,%s%s)"
, $this->column_name
, $this->default_column
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
else{
return sprintf("new ConditionWithArgument('%s',%s,%s%s)"
, $this->column_name
, '$' . $this->argument_name . '_argument'
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
} }
} }
?>
function setPipe($pipe)
{
$this->pipe = $pipe;
}
function getArguments()
{
$arguments = array();
if($this->query)
$arguments = array_merge($arguments, $this->query->getArguments());
if($this->argument)
$arguments[] = $this->argument;
return $arguments;
}
function getConditionString()
{
if($this->query)
{
return sprintf("new ConditionSubquery('%s',%s,%s%s)"
, $this->column_name
, $this->default_column
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
else if(isset($this->default_column))
{
return sprintf("new ConditionWithoutArgument('%s',%s,%s%s)"
, $this->column_name
, $this->default_column
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
else
{
return sprintf("new ConditionWithArgument('%s',%s,%s%s)"
, $this->column_name
, '$' . $this->argument_name . '_argument'
, '"'.$this->operation.'"'
, $this->pipe ? ", '" . $this->pipe . "'" : ''
);
}
}
}
/* End of file ConditionTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/condition/ConditionTag.class.php */

View file

@ -1,70 +1,81 @@
<?php <?php
/**
* ConditionsTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/
class ConditionsTag
{
/** /**
* ConditionsTag class * ConditionGroupTag list
* * @var array value is ConditionGroupTag object
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/ */
class ConditionsTag { var $condition_groups;
/**
* ConditionGroupTag list
* @var array value is ConditionGroupTag object
*/
var $condition_groups;
/** /**
* constructor * constructor
* @param object $xml_conditions * @param object $xml_conditions
* @return void * @return void
*/ */
function ConditionsTag($xml_conditions){ function ConditionsTag($xml_conditions)
$this->condition_groups = array(); {
if (!$xml_conditions) $this->condition_groups = array();
return; if(!$xml_conditions)
return;
$xml_condition_list = array(); $xml_condition_list = array();
if($xml_conditions->condition) if($xml_conditions->condition)
$xml_condition_list = $xml_conditions->condition; $xml_condition_list = $xml_conditions->condition;
if($xml_conditions->query){ if($xml_conditions->query)
if(!is_array($xml_condition_list)) $xml_condition_list = array($xml_condition_list); {
if(!is_array($xml_conditions->query)) $xml_conditions->query = array($xml_conditions->query); if(!is_array($xml_condition_list)) $xml_condition_list = array($xml_condition_list);
$xml_condition_list = array_merge($xml_condition_list, $xml_conditions->query); if(!is_array($xml_conditions->query)) $xml_conditions->query = array($xml_conditions->query);
} $xml_condition_list = array_merge($xml_condition_list, $xml_conditions->query);
if($xml_condition_list){ }
$this->condition_groups[] = new ConditionGroupTag($xml_condition_list); if($xml_condition_list)
} {
$this->condition_groups[] = new ConditionGroupTag($xml_condition_list);
$xml_groups = $xml_conditions->group;
if($xml_groups){
if(!is_array($xml_groups)) $xml_groups = array($xml_groups);
foreach($xml_groups as $group){
$this->condition_groups[] = new ConditionGroupTag($group->condition, $group->attrs->pipe);
}
}
} }
/** $xml_groups = $xml_conditions->group;
* ConditionGroupTag object to string if($xml_groups)
* @return string {
*/ if(!is_array($xml_groups)) $xml_groups = array($xml_groups);
function toString(){ foreach($xml_groups as $group)
$output_conditions = 'array(' . PHP_EOL; {
foreach($this->condition_groups as $condition){ $this->condition_groups[] = new ConditionGroupTag($group->condition, $group->attrs->pipe);
$output_conditions .= $condition->getConditionGroupString() . PHP_EOL . ',';
} }
$output_conditions = substr($output_conditions, 0, -1);
$output_conditions .= ')';
return $output_conditions;
}
function getArguments(){
$arguments = array();
foreach($this->condition_groups as $condition){
$arguments = array_merge($arguments, $condition->getArguments());
}
return $arguments;
} }
} }
?>
/**
* ConditionGroupTag object to string
* @return string
*/
function toString()
{
$output_conditions = 'array(' . PHP_EOL;
foreach($this->condition_groups as $condition)
{
$output_conditions .= $condition->getConditionGroupString() . PHP_EOL . ',';
}
$output_conditions = substr($output_conditions, 0, -1);
$output_conditions .= ')';
return $output_conditions;
}
function getArguments()
{
$arguments = array();
foreach($this->condition_groups as $condition)
{
$arguments = array_merge($arguments, $condition->getArguments());
}
return $arguments;
}
}
/* End of file ConditionsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/condition/ConditionsTag.class.php */

View file

@ -1,21 +1,23 @@
<?php <?php
/**
* JoinConditionsTag class
*
* @author Corina
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/
class JoinConditionsTag extends ConditionsTag
{
/** /**
* JoinConditionsTag class * constructor
* * @param object $xml_conditions
* @author Corina * @return void
* @package /classes/xml/xmlquery/tags/condition
* @version 0.1
*/ */
class JoinConditionsTag extends ConditionsTag { function JoinConditionsTag($xml_conditions)
/** {
* constructor parent::ConditionsTag($xml_conditions);
* @param object $xml_conditions $this->condition_groups[0]->conditions[0]->setPipe("");
* @return void
*/
function JoinConditionsTag($xml_conditions){
parent::ConditionsTag($xml_conditions);
$this->condition_groups[0]->conditions[0]->setPipe("");
}
} }
}
?> /* End of file JoinConditionsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php */

View file

@ -1,50 +1,56 @@
<?php <?php
/**
* GroupsTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/group
* @version 0.1
*/
class GroupsTag
{
/** /**
* GroupsTag class * column list
* * @var array
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/group
* @version 0.1
*/ */
class GroupsTag { var $groups;
/**
* column list /**
* @var array * constructor
*/ * @param array|string $xml_groups
var $groups; * @return void
*/
/** function GroupsTag($xml_groups)
* constructor {
* @param array|string $xml_groups $this->groups = array();
* @return void
*/ if($xml_groups)
function GroupsTag($xml_groups){ {
$this->groups = array(); if(!is_array($xml_groups)) $xml_groups = array($xml_groups);
if($xml_groups) { $dbParser = &DB::getParser();
if(!is_array($xml_groups)) $xml_groups = array($xml_groups); for($i=0;$i<count($xml_groups);$i++)
{
$dbParser = &DB::getParser(); $group = $xml_groups[$i];
for($i=0;$i<count($xml_groups);$i++) { $column = trim($group->attrs->column);
$group = $xml_groups[$i]; if(!$column) continue;
$column = trim($group->attrs->column);
if(!$column) continue; $column = $dbParser->parseExpression($column);
$this->groups[] = $column;
$column = $dbParser->parseExpression($column);
$this->groups[] = $column;
}
}
}
function toString(){
$output = 'array(' . PHP_EOL;
foreach($this->groups as $group){
$output .= "'" . $group . "' ,";
} }
$output = substr($output, 0, -1);
$output .= ')';
return $output;
} }
} }
?> function toString()
{
$output = 'array(' . PHP_EOL;
foreach($this->groups as $group)
{
$output .= "'" . $group . "' ,";
}
$output = substr($output, 0, -1);
$output .= ')';
return $output;
}
}
/* End of file GroupsTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/group/GroupsTag.class.php */

View file

@ -1,77 +1,82 @@
<?php <?php
/**
* IndexTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/
class IndexTag
{
/** /**
* IndexTag class * argument name
* * @var string
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/ */
class IndexTag { var $argument_name;
/** /**
* argument name * QueryArgument object
* @var string * @var QueryArgument
*/ */
var $argument_name; var $argument;
/** /**
* QueryArgument object * Default value
* @var QueryArgument * @var string
*/ */
var $argument; var $default;
/** /**
* Default value * Sort order
* @var string * @var string
*/ */
var $default; var $sort_order;
/** /**
* Sort order * Sort order argument
* @var string * @var SortQueryArgument object
*/ */
var $sort_order; var $sort_order_argument;
/**
* Sort order argument
* @var SortQueryArgument object
*/
var $sort_order_argument;
/** /**
* constructor * constructor
* @param object $index * @param object $index
* @return void * @return void
*/ */
function IndexTag($index){ function IndexTag($index)
$this->argument_name = $index->attrs->var; {
$this->argument_name = $index->attrs->var;
// Sort index - column by which to sort // Sort index - column by which to sort
//$dbParser = new DB(); $dbParser = &$dbParser->getParser(); //$dbParser = new DB(); $dbParser = &$dbParser->getParser();
//$index->attrs->default = $dbParser->parseExpression($index->attrs->default); //$index->attrs->default = $dbParser->parseExpression($index->attrs->default);
$this->default = $index->attrs->default; $this->default = $index->attrs->default;
$this->argument = new QueryArgument($index); $this->argument = new QueryArgument($index);
// Sort order - asc / desc // Sort order - asc / desc
$this->sort_order = $index->attrs->order; $this->sort_order = $index->attrs->order;
$sortList = array('asc'=>1, 'desc'=>1); $sortList = array('asc'=>1, 'desc'=>1);
if(!isset($sortList[$this->sort_order])){ if(!isset($sortList[$this->sort_order]))
$arg = new Xml_Node_(); {
$arg->attrs = new Xml_Node_(); $arg = new Xml_Node_();
$arg->attrs->var = $this->sort_order; $arg->attrs = new Xml_Node_();
$arg->attrs->default = 'asc'; $arg->attrs->var = $this->sort_order;
$this->sort_order_argument = new SortQueryArgument($arg); $arg->attrs->default = 'asc';
$this->sort_order = '$'.$this->sort_order_argument->getArgumentName().'_argument'; $this->sort_order_argument = new SortQueryArgument($arg);
} $this->sort_order = '$'.$this->sort_order_argument->getArgumentName().'_argument';
else $this->sort_order = '"'.$this->sort_order.'"';
}
function toString(){
return sprintf('new OrderByColumn(${\'%s_argument\'}, %s)', $this->argument->getArgumentName(), $this->sort_order);
}
function getArguments(){
$arguments = array();
$arguments[] = $this->argument;
if($this->sort_order_argument)
$arguments[] = $this->sort_order_argument;
return $arguments;
} }
else $this->sort_order = '"'.$this->sort_order.'"';
} }
?> function toString()
{
return sprintf('new OrderByColumn(${\'%s_argument\'}, %s)', $this->argument->getArgumentName(), $this->sort_order);
}
function getArguments()
{
$arguments = array();
$arguments[] = $this->argument;
if($this->sort_order_argument)
$arguments[] = $this->sort_order_argument;
return $arguments;
}
}
/* End of file IndexTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/navigation/IndexTag.class.php */

View file

@ -1,57 +1,63 @@
<?php <?php
/**
* LimitTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/
class LimitTag
{
/** /**
* LimitTag class * Value is relate to limit query
* * @var array
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/ */
class LimitTag { var $arguments;
/** /**
* Value is relate to limit query * QueryArgument object
* @var array * @var QueryArgument
*/ */
var $arguments; var $page;
/** /**
* QueryArgument object * QueryArgument object
* @var QueryArgument * @var QueryArgument
*/ */
var $page; var $page_count;
/** /**
* QueryArgument object * QueryArgument object
* @var QueryArgument * @var QueryArgument
*/ */
var $page_count; var $list_count;
/**
* QueryArgument object
* @var QueryArgument
*/
var $list_count;
/** /**
* constructor * constructor
* @param object $index * @param object $index
* @return void * @return void
*/ */
function LimitTag($index){ function LimitTag($index)
if($index->page && $index->page->attrs && $index->page_count && $index->page_count->attrs){ {
$this->page = new QueryArgument($index->page); if($index->page && $index->page->attrs && $index->page_count && $index->page_count->attrs)
$this->page_count = new QueryArgument($index->page_count); {
$this->arguments[] = $this->page; $this->page = new QueryArgument($index->page);
$this->arguments[] = $this->page_count; $this->page_count = new QueryArgument($index->page_count);
} $this->arguments[] = $this->page;
$this->arguments[] = $this->page_count;
$this->list_count = new QueryArgument($index->list_count);
$this->arguments[] = $this->list_count;
} }
function toString(){ $this->list_count = new QueryArgument($index->list_count);
if ($this->page)return sprintf('new Limit(${\'%s_argument\'}, ${\'%s_argument\'}, ${\'%s_argument\'})', $this->list_count->getArgumentName(), $this->page->getArgumentName(), $this->page_count->getArgumentName()); $this->arguments[] = $this->list_count;
else return sprintf('new Limit(${\'%s_argument\'})', $this->list_count->getArgumentName());
}
function getArguments(){
return $this->arguments;
}
} }
?>
function toString()
{
if($this->page)return sprintf('new Limit(${\'%s_argument\'}, ${\'%s_argument\'}, ${\'%s_argument\'})', $this->list_count->getArgumentName(), $this->page->getArgumentName(), $this->page_count->getArgumentName());
else return sprintf('new Limit(${\'%s_argument\'})', $this->list_count->getArgumentName());
}
function getArguments()
{
return $this->arguments;
}
}
/* End of file LimitTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/navigation/LimitTag.class.php */

View file

@ -1,99 +1,109 @@
<?php <?php
/**
* NavigationTag class
*
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/
class NavigationTag
{
/** /**
* NavigationTag class * Order
* * @var array
* @author Arnia Software
* @package /classes/xml/xmlquery/tags/navigation
* @version 0.1
*/ */
class NavigationTag { var $order;
/** /**
* Order * List count
* @var array * @var int
*/ */
var $order; var $list_count;
/** /**
* List count * Page count
* @var int * @var int
*/ */
var $list_count; var $page_count;
/** /**
* Page count * Page
* @var int * @var int
*/ */
var $page_count; var $page;
/** /**
* Page * Limit
* @var int * @var LimitTag object
*/ */
var $page; var $limit;
/**
* Limit
* @var LimitTag object
*/
var $limit;
/** /**
* constructor * constructor
* @param object $xml_navigation * @param object $xml_navigation
* @return void * @return void
*/ */
function NavigationTag($xml_navigation){ function NavigationTag($xml_navigation)
$this->order = array(); {
if($xml_navigation) { $this->order = array();
$order = $xml_navigation->index; if($xml_navigation)
if($order) { {
if(!is_array($order)) $order = array($order); $order = $xml_navigation->index;
foreach($order as $order_info) { if($order)
$this->order[] = new IndexTag($order_info); {
} if(!is_array($order)) $order = array($order);
foreach($order as $order_info)
{
$this->order[] = new IndexTag($order_info);
}
if($xml_navigation->page && $xml_navigation->page->attrs || $xml_navigation->list_count && $xml_navigation->list_count->attrs) if($xml_navigation->page && $xml_navigation->page->attrs || $xml_navigation->list_count && $xml_navigation->list_count->attrs)
$this->limit = new LimitTag($xml_navigation); $this->limit = new LimitTag($xml_navigation);
if ($xml_navigation->list_count) if($xml_navigation->list_count)
$this->list_count = $xml_navigation->list_count->attrs; $this->list_count = $xml_navigation->list_count->attrs;
if ($xml_navigation->page_count) if($xml_navigation->page_count)
$this->page_count = $xml_navigation->page_count->attrs; $this->page_count = $xml_navigation->page_count->attrs;
if ($xml_navigation->page) if($xml_navigation->page)
$this->page = $xml_navigation->page->attrs; $this->page = $xml_navigation->page->attrs;
}
}
}
/**
* NavigationTag object to string
* @return string
*/
function getOrderByString(){
$output = 'array(' . PHP_EOL;
foreach($this->order as $order){
$output .= $order->toString() . PHP_EOL . ',';
} }
$output = substr($output, 0, -1);
$output .= ')';
return $output;
}
/**
* LimitTag object to string
* @return string
*/
function getLimitString(){
if ($this->limit) return $this->limit->toString();
else return "";
}
function getArguments(){
$arguments = array();
foreach($this->order as $order){
$arguments = array_merge($order->getArguments(), $arguments);
}
if($this->limit) $arguments = array_merge($this->limit->getArguments(), $arguments);
return $arguments;
} }
} }
?> /**
* NavigationTag object to string
* @return string
*/
function getOrderByString()
{
$output = 'array(' . PHP_EOL;
foreach($this->order as $order)
{
$output .= $order->toString() . PHP_EOL . ',';
}
$output = substr($output, 0, -1);
$output .= ')';
return $output;
}
/**
* LimitTag object to string
* @return string
*/
function getLimitString()
{
if($this->limit) return $this->limit->toString();
else return "";
}
function getArguments()
{
$arguments = array();
foreach($this->order as $order)
{
$arguments = array_merge($order->getArguments(), $arguments);
}
if($this->limit) $arguments = array_merge($this->limit->getArguments(), $arguments);
return $arguments;
}
}
/* End of file NavigationTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/navigation/NavigationTag.class.php */

View file

@ -6,7 +6,8 @@
* @package /classes/xml/xmlquery/tags/query * @package /classes/xml/xmlquery/tags/query
* @version 0.1 * @version 0.1
*/ */
class QueryTag { class QueryTag
{
/** /**
* Action for example, 'select', 'insert', 'delete'... * Action for example, 'select', 'insert', 'delete'...
* @var string * @var string
@ -99,15 +100,17 @@ class QueryTag {
* @param bool $isSubQuery * @param bool $isSubQuery
* @return void * @return void
*/ */
function QueryTag($query, $isSubQuery = false) { function QueryTag($query, $isSubQuery = false)
{
$this->action = $query->attrs->action; $this->action = $query->attrs->action;
$this->query_id = $query->attrs->id; $this->query_id = $query->attrs->id;
$this->priority = $query->attrs->priority; $this->priority = $query->attrs->priority;
$this->query = $query; $this->query = $query;
$this->isSubQuery = $isSubQuery; $this->isSubQuery = $isSubQuery;
if ($this->isSubQuery) if($this->isSubQuery)
$this->action = 'select'; $this->action = 'select';
if ($query->attrs->alias) { if($query->attrs->alias)
{
$dbParser = DB::getParser(); $dbParser = DB::getParser();
$this->alias = $dbParser->escape($query->attrs->alias); $this->alias = $dbParser->escape($query->attrs->alias);
} }
@ -120,35 +123,42 @@ class QueryTag {
$this->getConditions(); $this->getConditions();
$this->getGroups(); $this->getGroups();
$this->getNavigation(); $this->getNavigation();
$this->getPrebuff(); $this->getPrebuff();
$this->getBuff(); $this->getBuff();
} }
function show() { function show()
{
return true; return true;
} }
function getQueryId() { function getQueryId()
{
return $this->query->attrs->query_id ? $this->query->attrs->query_id : $this->query->attrs->id; return $this->query->attrs->query_id ? $this->query->attrs->query_id : $this->query->attrs->id;
} }
function getPriority() { function getPriority()
{
return $this->query->attrs->priority; return $this->query->attrs->priority;
} }
function getAction() { function getAction()
{
return $this->query->attrs->action; return $this->query->attrs->action;
} }
function setTableColumnTypes($tables) { function setTableColumnTypes($tables)
{
$query_id = $this->getQueryId(); $query_id = $this->getQueryId();
if (!isset($this->column_type[$query_id])) { if(!isset($this->column_type[$query_id]))
{
$table_tags = $tables->getTables(); $table_tags = $tables->getTables();
$column_type = array(); $column_type = array();
foreach ($table_tags as $table_tag) { foreach ($table_tags as $table_tag)
if (is_a($table_tag, 'TableTag')) { {
if(is_a($table_tag, 'TableTag'))
{
$table_name = $table_tag->getTableName(); $table_name = $table_tag->getTableName();
$table_alias = $table_tag->getTableAlias(); $table_alias = $table_tag->getTableAlias();
$tag_column_type = QueryParser::getTableInfo($query_id, $table_name); $tag_column_type = QueryParser::getTableInfo($query_id, $table_name);
@ -159,36 +169,48 @@ class QueryTag {
} }
} }
function getColumns(){ function getColumns()
if($this->action == 'select'){ {
if($this->action == 'select')
{
return $this->columns = new SelectColumnsTag($this->query->columns); return $this->columns = new SelectColumnsTag($this->query->columns);
}else if($this->action == 'insert' || $this->action == 'insert-select'){ }
else if($this->action == 'insert' || $this->action == 'insert-select')
{
return $this->columns = new InsertColumnsTag($this->query->columns->column); return $this->columns = new InsertColumnsTag($this->query->columns->column);
}else if($this->action == 'update') { }
else if($this->action == 'update')
{
return $this->columns = new UpdateColumnsTag($this->query->columns->column); return $this->columns = new UpdateColumnsTag($this->query->columns->column);
}else if($this->action == 'delete') { }
else if($this->action == 'delete')
{
return $this->columns = null; return $this->columns = null;
} }
} }
function getPrebuff() { function getPrebuff()
{
if($this->isSubQuery) return; if($this->isSubQuery) return;
// TODO Check if this work with arguments in join clause // TODO Check if this work with arguments in join clause
$arguments = $this->getArguments(); $arguments = $this->getArguments();
$prebuff = ''; $prebuff = '';
foreach ($arguments as $argument) { foreach ($arguments as $argument)
if (isset($argument)) { {
if(isset($argument))
{
$arg_name = $argument->getArgumentName(); $arg_name = $argument->getArgumentName();
if ($arg_name) { if($arg_name)
{
unset($column_type); unset($column_type);
$prebuff .= $argument->toString(); $prebuff .= $argument->toString();
$table_alias = $argument->getTableName(); $table_alias = $argument->getTableName();
if(isset($table_alias)) if(isset($table_alias))
{ {
if (isset($this->column_type[$this->getQueryId()][$table_alias][$argument->getColumnName()])) if (isset($this->column_type[$this->getQueryId()][$table_alias][$argument->getColumnName()]))
$column_type = $this->column_type[$this->getQueryId()][$table_alias][$argument->getColumnName()]; $column_type = $this->column_type[$this->getQueryId()][$table_alias][$argument->getColumnName()];
} }
else else
{ {
@ -200,13 +222,14 @@ class QueryTag {
$column_type = $current_table[$column_name]; $column_type = $current_table[$column_name];
} }
} }
if (isset($column_type)) if (isset($column_type))
{
$prebuff .= sprintf('if(${\'%s_argument\'} !== null) ${\'%s_argument\'}->setColumnType(\'%s\');' . "\n" $prebuff .= sprintf('if(${\'%s_argument\'} !== null) ${\'%s_argument\'}->setColumnType(\'%s\');' . "\n"
, $arg_name , $arg_name
, $arg_name , $arg_name
, $column_type); , $column_type);
}
} }
} }
} }
@ -215,9 +238,11 @@ class QueryTag {
return $this->preBuff = $prebuff; return $this->preBuff = $prebuff;
} }
function getBuff() { function getBuff()
{
$buff = ''; $buff = '';
if ($this->isSubQuery) { if($this->isSubQuery)
{
$buff = 'new Subquery('; $buff = 'new Subquery(';
$buff .= "'" . $this->alias . '\', '; $buff .= "'" . $this->alias . '\', ';
$buff .= ($this->columns ? $this->columns->toString() : 'null' ) . ', ' . PHP_EOL; $buff .= ($this->columns ? $this->columns->toString() : 'null' ) . ', ' . PHP_EOL;
@ -239,77 +264,87 @@ class QueryTag {
$buff .= sprintf('$query->setAction("%s");%s', $this->action, "\n"); $buff .= sprintf('$query->setAction("%s");%s', $this->action, "\n");
$buff .= sprintf('$query->setPriority("%s");%s', $this->priority, "\n"); $buff .= sprintf('$query->setPriority("%s");%s', $this->priority, "\n");
$buff .= $this->preBuff; $buff .= $this->preBuff;
if ($this->columns) if($this->columns)
$buff .= '$query->setColumns(' . $this->columns->toString() . ');' . PHP_EOL; $buff .= '$query->setColumns(' . $this->columns->toString() . ');' . PHP_EOL;
$buff .= '$query->setTables(' . $this->tables->toString() .');'.PHP_EOL; $buff .= '$query->setTables(' . $this->tables->toString() .');'.PHP_EOL;
if($this->action == 'insert-select') if($this->action == 'insert-select')
$buff .= '$query->setSubquery(' . $this->subquery->toString() .');'.PHP_EOL; $buff .= '$query->setSubquery(' . $this->subquery->toString() .');'.PHP_EOL;
$buff .= '$query->setConditions('.$this->conditions->toString() .');'.PHP_EOL; $buff .= '$query->setConditions('.$this->conditions->toString() .');'.PHP_EOL;
$buff .= '$query->setGroups(' . $this->groups->toString() . ');'.PHP_EOL; $buff .= '$query->setGroups(' . $this->groups->toString() . ');'.PHP_EOL;
$buff .= '$query->setOrder(' . $this->navigation->getOrderByString() .');'.PHP_EOL; $buff .= '$query->setOrder(' . $this->navigation->getOrderByString() .');'.PHP_EOL;
$buff .= '$query->setLimit(' . $this->navigation->getLimitString() .');'.PHP_EOL; $buff .= '$query->setLimit(' . $this->navigation->getLimitString() .');'.PHP_EOL;
$this->buff = $buff; $this->buff = $buff;
return $this->buff; return $this->buff;
} }
function getTables() { function getTables()
{
if($this->query->index_hint && ($this->query->index_hint->attrs->for == 'ALL' || Context::getDBType() == strtolower($this->query->index_hint->attrs->for))) if($this->query->index_hint && ($this->query->index_hint->attrs->for == 'ALL' || Context::getDBType() == strtolower($this->query->index_hint->attrs->for)))
return $this->tables = new TablesTag($this->query->tables, $this->query->index_hint); return $this->tables = new TablesTag($this->query->tables, $this->query->index_hint);
else else
return $this->tables = new TablesTag($this->query->tables); return $this->tables = new TablesTag($this->query->tables);
} }
function getSubquery(){ function getSubquery()
if($this->query->query){ {
if($this->query->query)
{
$this->subquery = new QueryTag($this->query->query, true); $this->subquery = new QueryTag($this->query->query, true);
} }
} }
function getConditions(){ function getConditions()
{
return $this->conditions = new ConditionsTag($this->query->conditions); return $this->conditions = new ConditionsTag($this->query->conditions);
} }
function getGroups() { function getGroups()
if ($this->query->groups) {
return $this->groups = new GroupsTag($this->query->groups->group); if($this->query->groups)
return $this->groups = new GroupsTag($this->query->groups->group);
else else
return $this->groups = new GroupsTag(NULL); return $this->groups = new GroupsTag(NULL);
} }
function getNavigation() { function getNavigation()
{
return $this->navigation = new NavigationTag($this->query->navigation); return $this->navigation = new NavigationTag($this->query->navigation);
} }
function toString() { function toString()
{
return $this->buff; return $this->buff;
} }
function getTableString() { function getTableString()
{
return $this->buff; return $this->buff;
} }
function getConditionString() { function getConditionString()
{
return $this->buff; return $this->buff;
} }
function getExpressionString() { function getExpressionString()
{
return $this->buff; return $this->buff;
} }
function getArguments(){ function getArguments()
{
$arguments = array(); $arguments = array();
if ($this->columns) if($this->columns)
$arguments = array_merge($arguments, $this->columns->getArguments()); $arguments = array_merge($arguments, $this->columns->getArguments());
if($this->action =='insert-select') if($this->action =='insert-select')
$arguments = array_merge($arguments, $this->subquery->getArguments()); $arguments = array_merge($arguments, $this->subquery->getArguments());
$arguments = array_merge($arguments, $this->tables->getArguments()); $arguments = array_merge($arguments, $this->tables->getArguments());
$arguments = array_merge($arguments, $this->conditions->getArguments()); $arguments = array_merge($arguments, $this->conditions->getArguments());
$arguments = array_merge($arguments, $this->navigation->getArguments()); $arguments = array_merge($arguments, $this->navigation->getArguments());
return $arguments; return $arguments;
} }
} }
/* End of file QueryTag.class.php */
?> /* Location: ./classes/xml/xmlquery/tags/navigation/QueryTag.class.php */

View file

@ -1,54 +1,60 @@
<?php <?php
include 'TableTag.class.php';
/**
* HintTableTag
* Models the <table> tag inside an XML Query file and the corresponding <index_hint> tag
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/
class HintTableTag extends TableTag
{
/** /**
* HintTableTag * Action for example, 'select', 'insert', 'delete'...
* Models the <table> tag inside an XML Query file and the corresponding <index_hint> tag * @var array
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/ */
class HintTableTag extends TableTag { var $index;
/**
* Action for example, 'select', 'insert', 'delete'...
* @var array
*/
var $index;
/** /**
* constructor * constructor
* Initialises Table Tag properties * Initialises Table Tag properties
* @param object $table XML <table> tag * @param object $table XML <table> tag
* @param array $index * @param array $index
* @return void * @return void
*/ */
function HintTableTag($table, $index){ function HintTableTag($table, $index)
parent::TableTag($table); {
$this->index = $index; parent::TableTag($table);
} $this->index = $index;
function getTableString(){
$dbParser = DB::getParser();
$dbType = ucfirst(Context::getDBType());
$result = sprintf('new %sTableWithHint(\'%s\'%s, array('
, $dbType == 'Mysqli' ? 'Mysql' : $dbType
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : ', null'
//, ', \'' . $dbParser->escape($this->index->name) .'\', \'' . $this->index->type .'\''
);
foreach($this->index as $indx){
$result .= "new IndexHint(";
$result .= '\'' . $dbParser->escape($indx->name) .'\', \'' . $indx->type .'\'' . ') , ';
}
$result = substr($result, 0, -2);
$result .= '))';
return $result;
}
function getArguments(){
if(!isset($this->conditionsTag)) return array();
return $this->conditionsTag->getArguments();
}
} }
?> function getTableString()
{
$dbParser = DB::getParser();
$dbType = ucfirst(Context::getDBType());
$result = sprintf('new %sTableWithHint(\'%s\'%s, array('
, $dbType == 'Mysqli' ? 'Mysql' : $dbType
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : ', null'
//, ', \'' . $dbParser->escape($this->index->name) .'\', \'' . $this->index->type .'\''
);
foreach($this->index as $indx)
{
$result .= "new IndexHint(";
$result .= '\'' . $dbParser->escape($indx->name) .'\', \'' . $indx->type .'\'' . ') , ';
}
$result = substr($result, 0, -2);
$result .= '))';
return $result;
}
function getArguments()
{
if(!isset($this->conditionsTag)) return array();
return $this->conditionsTag->getArguments();
}
}
/* End of file HintTableTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/table/HintTableTag.class.php */

View file

@ -1,118 +1,126 @@
<?php <?php
/**
* TableTag
* Models the <table> tag inside an XML Query file
* @abstract
* Example
* <table name="modules" />
* <table name="documents" alias="doc" />
* Attributes
* name - name of the table - table prefix will be automatically added
* alias - table alias. If no value is specified, the table name will be set as default alias
* join_type - in case the table is part of a join clause, this specifies the type of join: left, right etc.
* - permitted values: 'left join','left outer join','right join','right outer join'
* Children
* Can have children of type <conditions>
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/
class TableTag
{
/** /**
* TableTag * Unescaped name
* Models the <table> tag inside an XML Query file * @var string
* @abstract
* Example
* <table name="modules" />
* <table name="documents" alias="doc" />
* Attributes
* name - name of the table - table prefix will be automatically added
* alias - table alias. If no value is specified, the table name will be set as default alias
* join_type - in case the table is part of a join clause, this specifies the type of join: left, right etc.
* - permitted values: 'left join','left outer join','right join','right outer join'
* Children
* Can have children of type <conditions>
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/ */
class TableTag { var $unescaped_name;
/** /**
* Unescaped name * name
* @var string * @var string
*/ */
var $unescaped_name; var $name;
/** /**
* name * alias
* @var string * @var string
*/ */
var $name; var $alias;
/** /**
* alias * Join type
* @var string * @example 'left join', 'left outer join', 'right join', 'right outer join'
*/ * @var string
var $alias; */
/** var $join_type;
* Join type /**
* @example 'left join', 'left outer join', 'right join', 'right outer join' * Condition object
* @var string * @var object
*/ */
var $join_type; var $conditions;
/** /**
* Condition object * JoinConditionsTag
* @var object * @var JoinConditionsTag object
*/ */
var $conditions; var $conditionsTag;
/**
* JoinConditionsTag
* @var JoinConditionsTag object
*/
var $conditionsTag;
/** /**
* constructor * constructor
* Initialises Table Tag properties * Initialises Table Tag properties
* @param object $table XML <table> tag * @param object $table XML <table> tag
* @return void * @return void
*/ */
function TableTag($table){ function TableTag($table)
$dbParser = DB::getParser(); {
$dbParser = DB::getParser();
$this->unescaped_name = $table->attrs->name;
$this->name = $dbParser->parseTableName($table->attrs->name);
$this->alias = $table->attrs->alias;
if(!$this->alias) $this->alias = $table->attrs->name;
$this->join_type = $table->attrs->type;
$this->conditions = $table->conditions;
if($this->isJoinTable())
$this->conditionsTag = new JoinConditionsTag($this->conditions);
}
function isJoinTable(){
$joinList = array('left join'=>1, 'left outer join'=>1, 'right join'=>1, 'right outer join'=>1);
if(isset($joinList[$this->join_type])
&& count($this->conditions)) return true;
return false;
}
function getTableAlias(){
return $this->alias;
}
function getTableName(){
return $this->unescaped_name;
}
/**
* Returns string for printing in PHP query cache file
* The string contains code for instantiation of either
* a Table or a JoinTable object
* @return string
*/
function getTableString(){
$dbParser = DB::getParser();
if($this->isJoinTable()){ $this->unescaped_name = $table->attrs->name;
return sprintf('new JoinTable(\'%s\', \'%s\', "%s", %s)' $this->name = $dbParser->parseTableName($table->attrs->name);
, $dbParser->escape($this->name)
, $dbParser->escape($this->alias) $this->alias = $table->attrs->alias;
, $this->join_type, $this->conditionsTag->toString()); if(!$this->alias) $this->alias = $table->attrs->name;
}
return sprintf('new Table(\'%s\'%s)' $this->join_type = $table->attrs->type;
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : ''); $this->conditions = $table->conditions;
}
if($this->isJoinTable())
function getArguments(){ $this->conditionsTag = new JoinConditionsTag($this->conditions);
if(!isset($this->conditionsTag)) return array();
return $this->conditionsTag->getArguments();
}
} }
?> function isJoinTable()
{
$joinList = array('left join'=>1, 'left outer join'=>1, 'right join'=>1, 'right outer join'=>1);
if(isset($joinList[$this->join_type])
&& count($this->conditions)) return true;
return false;
}
function getTableAlias()
{
return $this->alias;
}
function getTableName()
{
return $this->unescaped_name;
}
/**
* Returns string for printing in PHP query cache file
* The string contains code for instantiation of either
* a Table or a JoinTable object
* @return string
*/
function getTableString()
{
$dbParser = DB::getParser();
if($this->isJoinTable())
{
return sprintf('new JoinTable(\'%s\', \'%s\', "%s", %s)'
, $dbParser->escape($this->name)
, $dbParser->escape($this->alias)
, $this->join_type, $this->conditionsTag->toString());
}
return sprintf('new Table(\'%s\'%s)'
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : '');
}
function getArguments()
{
if(!isset($this->conditionsTag)) return array();
return $this->conditionsTag->getArguments();
}
}
/* End of file TableTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/table/TableTag.class.php */

View file

@ -1,87 +1,99 @@
<?php <?php
/**
* TablesTag class
* Models the <tables> tag inside an XML Query file
* @abstract
* Example
* <tables>
* <table name="documents" alias="doc" />
* </tables>
* Attributes
* None.
* Children
* Can have children of type <table> or <query>
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/
class TablesTag
{
/** /**
* TablesTag class * Table list
* Models the <tables> tag inside an XML Query file * @var array
* @abstract
* Example
* <tables>
* <table name="documents" alias="doc" />
* </tables>
* Attributes
* None.
* Children
* Can have children of type <table> or <query>
*
* @author Arnia Sowftare
* @package /classes/xml/xmlquery/tags/table
* @version 0.1
*/ */
class TablesTag { var $tables;
/**
* Table list
* @var array
*/
var $tables;
/** /**
* constructor * constructor
* @param object $xml_tables_tag * @param object $xml_tables_tag
* @param object $xml_index_hints_tag * @param object $xml_index_hints_tag
* @return void * @return void
*/ */
function TablesTag($xml_tables_tag, $xml_index_hints_tag = NULL){ function TablesTag($xml_tables_tag, $xml_index_hints_tag = NULL)
$this->tables = array(); {
$this->tables = array();
$xml_tables = $xml_tables_tag->table; $xml_tables = $xml_tables_tag->table;
if(!is_array($xml_tables)) $xml_tables = array($xml_tables); if(!is_array($xml_tables)) $xml_tables = array($xml_tables);
if($xml_index_hints_tag){ if($xml_index_hints_tag)
$index_nodes = $xml_index_hints_tag->index; {
if(!is_array($index_nodes)) $index_nodes = array($index_nodes); $index_nodes = $xml_index_hints_tag->index;
foreach($index_nodes as $index_node) { if(!is_array($index_nodes)) $index_nodes = array($index_nodes);
if(!isset($indexes[$index_node->attrs->table])) $indexes[$index_node->attrs->table] = array(); foreach($index_nodes as $index_node)
$count = count($indexes[$index_node->attrs->table]); {
$indexes[$index_node->attrs->table][$count] = (object) NULL; if(!isset($indexes[$index_node->attrs->table])) $indexes[$index_node->attrs->table] = array();
$indexes[$index_node->attrs->table][$count]->name = $index_node->attrs->name; $count = count($indexes[$index_node->attrs->table]);
$indexes[$index_node->attrs->table][$count]->type = $index_node->attrs->type; $indexes[$index_node->attrs->table][$count] = (object) NULL;
} $indexes[$index_node->attrs->table][$count]->name = $index_node->attrs->name;
} $indexes[$index_node->attrs->table][$count]->type = $index_node->attrs->type;
foreach($xml_tables as $tag){
if($tag->attrs->query == 'true'){
$this->tables[] = new QueryTag($tag, true);
}
else {
if(isset($indexes[$tag->attrs->name]) && $indexes[$tag->attrs->name])
$this->tables[] = new HintTableTag($tag, $indexes[$tag->attrs->name]);
else
$this->tables[] = new TableTag($tag);
}
}
}
function getTables(){
return $this->tables;
}
function toString(){
$output_tables = 'array(' . PHP_EOL;
foreach($this->tables as $table){
if(is_a($table, 'QueryTag'))
$output_tables .= $table->toString() . PHP_EOL . ',';
else
$output_tables .= $table->getTableString() . PHP_EOL . ',';
} }
$output_tables = substr($output_tables, 0, -1);
$output_tables .= ')';
return $output_tables;
} }
function getArguments(){ foreach($xml_tables as $tag)
$arguments = array(); {
foreach($this->tables as $table) if($tag->attrs->query == 'true')
$arguments = array_merge($arguments, $table->getArguments()); {
return $arguments; $this->tables[] = new QueryTag($tag, true);
} }
else
{
if(isset($indexes[$tag->attrs->name]) && $indexes[$tag->attrs->name])
$this->tables[] = new HintTableTag($tag, $indexes[$tag->attrs->name]);
else
$this->tables[] = new TableTag($tag);
}
}
} }
?>
function getTables()
{
return $this->tables;
}
function toString()
{
$output_tables = 'array(' . PHP_EOL;
foreach($this->tables as $table)
{
if(is_a($table, 'QueryTag'))
$output_tables .= $table->toString() . PHP_EOL . ',';
else
$output_tables .= $table->getTableString() . PHP_EOL . ',';
}
$output_tables = substr($output_tables, 0, -1);
$output_tables .= ')';
return $output_tables;
}
function getArguments()
{
$arguments = array();
foreach($this->tables as $table)
$arguments = array_merge($arguments, $table->getArguments());
return $arguments;
}
}
/* End of file TablesTag.class.php */
/* Location: ./classes/xml/xmlquery/tags/table/TablesTag.class.php */