mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-08 19:42:15 +09:00
Update new xml query classes with xe 1.5
with improved query argument support and update and delete queries git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0-DB@8378 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
5f9a5249ac
commit
7dbe0626b6
39 changed files with 1619 additions and 540 deletions
|
|
@ -314,6 +314,16 @@
|
|||
|
||||
if($source_args) $args = @clone($source_args);
|
||||
|
||||
require_once(_XE_PATH_.'classes/xml/xmlquery/DBParser.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/Expression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/table/Table.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php');
|
||||
require_once(_XE_PATH_.'classes/db/queryparts/expression/StarExpression.class.php');
|
||||
|
||||
$output = @include($cache_file);
|
||||
|
||||
if( (is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool()) return $output;
|
||||
|
|
|
|||
|
|
@ -812,7 +812,65 @@
|
|||
* to get a specific page list easily in select statement,\n
|
||||
* a method, navigation, is used
|
||||
**/
|
||||
function _executeSelectAct ($output)
|
||||
function _executeSelectAct($output){
|
||||
$query = '';
|
||||
|
||||
$select = 'SELECT ';
|
||||
foreach($output->columns as $column){
|
||||
if($column->show())
|
||||
$select .= $column->getExpression() . ', ';
|
||||
}
|
||||
$select = substr($select, 0, -2);
|
||||
|
||||
$from = 'FROM ';
|
||||
$simple_table_count = 0;
|
||||
foreach($output->tables as $table){
|
||||
/*if($simple_table_count > 0) $from .= ', ';
|
||||
|
||||
$from .= $table->toString() . ' ';
|
||||
if(!$table->isJoinTable()) $simple_table_count++;
|
||||
*/
|
||||
if($table->isJoinTable() || !$simple_table_count) $from .= $table->toString() . ' ';
|
||||
else $from .= ', '.$table->toString() . ' ';
|
||||
$simple_table_count++;
|
||||
}
|
||||
|
||||
$where = '';
|
||||
if(count($output->conditions) > 0){
|
||||
$where = 'WHERE ';
|
||||
foreach($output->conditions as $conditionGroup){
|
||||
$where .= $conditionGroup->toString();
|
||||
}
|
||||
}
|
||||
|
||||
$groupBy = '';
|
||||
if($output->groups) if($output->groups[0] !== "")
|
||||
$groupBy = 'GROUP BY ' . implode(', ', $output->groups);
|
||||
|
||||
$orderBy = '';
|
||||
if(count($output->orderby) > 0){
|
||||
$orderBy = 'ORDER BY ';
|
||||
foreach($output->orderby as $order){
|
||||
$orderBy .= $order->toString() .', ';
|
||||
}
|
||||
$orderBy = substr($orderBy, 0, -2);
|
||||
}
|
||||
|
||||
|
||||
$query = $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy;
|
||||
|
||||
//$query = sprintf ("select %s from %s %s %s %s", $columns, implode (',',$table_list), implode (' ',$left_join), $condition, //$groupby_query.$orderby_query);
|
||||
//$query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):'';
|
||||
$result = $this->_query ($query);
|
||||
if ($this->isError ()) return;
|
||||
$data = $this->_fetch ($result);
|
||||
|
||||
$buff = new Object ();
|
||||
$buff->data = $data;
|
||||
|
||||
return $buff;
|
||||
}
|
||||
/*function _executeSelectAct ($output)
|
||||
{
|
||||
// tables
|
||||
$table_list = array ();
|
||||
|
|
@ -1049,6 +1107,7 @@
|
|||
|
||||
return $buff;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief displays the current stack trace. Fetch the result
|
||||
|
|
|
|||
87
classes/db/queryparts/condition/Condition.class.php
Normal file
87
classes/db/queryparts/condition/Condition.class.php
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
|
||||
class Condition {
|
||||
var $column_name;
|
||||
var $value;
|
||||
var $operation;
|
||||
var $pipe;
|
||||
|
||||
function Condition($column_name, $value, $operation, $pipe = ""){
|
||||
$this->column_name = $column_name;
|
||||
$this->value = $value;
|
||||
$this->operation = $operation;
|
||||
$this->pipe = $pipe;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
return $this->pipe . ' ' . $this->getConditionPart($this->column_name, $this->value, $this->operation);
|
||||
}
|
||||
|
||||
function getConditionPart($name, $value, $operation) {
|
||||
switch($operation) {
|
||||
case 'equal' :
|
||||
case 'more' :
|
||||
case 'excess' :
|
||||
case 'less' :
|
||||
case 'below' :
|
||||
case 'like_tail' :
|
||||
case 'like_prefix' :
|
||||
case 'like' :
|
||||
case 'in' :
|
||||
case 'notin' :
|
||||
case 'notequal' :
|
||||
// if variable is not set or is not string or number, return
|
||||
if(!isset($value)) return;
|
||||
if($value === '') return;
|
||||
if(!in_array(gettype($value), array('string', 'integer'))) return;
|
||||
break;
|
||||
case 'between' :
|
||||
if(!is_array($value)) return;
|
||||
if(count($value)!=2) return;
|
||||
|
||||
}
|
||||
|
||||
switch($operation) {
|
||||
case 'equal' :
|
||||
return $name.' = '.$value;
|
||||
break;
|
||||
case 'more' :
|
||||
return $name.' >= '.$value;
|
||||
break;
|
||||
case 'excess' :
|
||||
return $name.' > '.$value;
|
||||
break;
|
||||
case 'less' :
|
||||
return $name.' <= '.$value;
|
||||
break;
|
||||
case 'below' :
|
||||
return $name.' < '.$value;
|
||||
break;
|
||||
case 'like_tail' :
|
||||
case 'like_prefix' :
|
||||
case 'like' :
|
||||
return $name.' like '.$value;
|
||||
break;
|
||||
case 'in' :
|
||||
return $name.' in ('.$value.')';
|
||||
break;
|
||||
case 'notin' :
|
||||
return $name.' not in ('.$value.')';
|
||||
break;
|
||||
case 'notequal' :
|
||||
return $name.' <> '.$value;
|
||||
break;
|
||||
case 'notnull' :
|
||||
return $name.' is not null';
|
||||
break;
|
||||
case 'null' :
|
||||
return $name.' is null';
|
||||
break;
|
||||
case 'between' :
|
||||
return $name.' between ' . $value[0] . ' and ' . $value[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
27
classes/db/queryparts/condition/ConditionGroup.class.php
Normal file
27
classes/db/queryparts/condition/ConditionGroup.class.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class ConditionGroup {
|
||||
var $conditions;
|
||||
var $pipe;
|
||||
|
||||
function ConditionGroup($conditions, $pipe = ""){
|
||||
$this->conditions = $conditions;
|
||||
$this->pipe = $pipe;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
if($this->pipe !== "")
|
||||
$group = $this->pipe .'(';
|
||||
else $group = '';
|
||||
|
||||
foreach($this->conditions as $condition){
|
||||
$group .= $condition->toString() . ' ';
|
||||
}
|
||||
|
||||
if($this->pipe !== "")
|
||||
$group .= ')';
|
||||
|
||||
return $group;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class ClickCountExpression
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
*/
|
||||
|
||||
class ClickCountExpression extends SelectExpression {
|
||||
var $click_count;
|
||||
|
||||
function ClickCountExpression($column_name, $alias = NULL, $click_count = false){
|
||||
parent::SelectExpression($column_name, $alias);
|
||||
|
||||
if(!is_bool($click_count)){
|
||||
error_log("Click_count value for $column_name was not boolean", 0);
|
||||
$this->click_count = false;
|
||||
return;
|
||||
}
|
||||
$this->click_count = $click_count;
|
||||
}
|
||||
|
||||
function show() {
|
||||
return $this->click_count;
|
||||
}
|
||||
|
||||
function getExpression(){
|
||||
return "$this->column_name = $this->column_name + 1";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
34
classes/db/queryparts/expression/DeleteExpression.class.php
Normal file
34
classes/db/queryparts/expression/DeleteExpression.class.php
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
/**
|
||||
* @class DeleteExpression
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
*/
|
||||
|
||||
class DeleteExpression extends Expression {
|
||||
var $value;
|
||||
|
||||
function DeleteExpression($column_name, $value){
|
||||
parent::Expression($column_name);
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
function getExpression(){
|
||||
return "$this->column_name = $this->value";
|
||||
}
|
||||
|
||||
function getValue(){
|
||||
// TODO Escape value according to column type instead of variable type
|
||||
if(!is_numeric($this->value)) return "'".$this->value."'";
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
function show(){
|
||||
if(!$this->value) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
30
classes/db/queryparts/expression/Expression.class.php
Normal file
30
classes/db/queryparts/expression/Expression.class.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* @class Expression
|
||||
* @author Corina
|
||||
* @brief Represents an expression used in select/update/insert/delete statements
|
||||
*
|
||||
* Examples (expressions are inside double square brackets):
|
||||
* select [[columnA]], [[columnB as aliasB]] from tableA
|
||||
* update tableA set [[columnA = valueA]] where columnB = something
|
||||
*
|
||||
*/
|
||||
|
||||
class Expression {
|
||||
var $column_name;
|
||||
|
||||
function Expression($column_name){
|
||||
$this->column_name = $column_name;
|
||||
}
|
||||
|
||||
function getColumnName(){
|
||||
return $this->column_name;
|
||||
}
|
||||
|
||||
function show() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function getExpression() {
|
||||
}
|
||||
}
|
||||
28
classes/db/queryparts/expression/InsertExpression.class.php
Normal file
28
classes/db/queryparts/expression/InsertExpression.class.php
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class InsertExpression
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
*/
|
||||
|
||||
class InsertExpression extends Expression {
|
||||
var $value;
|
||||
|
||||
function InsertExpression($column_name, $value){
|
||||
parent::Expression($column_name);
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
function getValue(){
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
function show(){
|
||||
if(!isset($this->value)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
32
classes/db/queryparts/expression/SelectExpression.class.php
Normal file
32
classes/db/queryparts/expression/SelectExpression.class.php
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class SelectExpression
|
||||
* @author Arnia Software
|
||||
* @brief Represents an expresion that appears in the select clause
|
||||
*
|
||||
* @remarks
|
||||
* $column_name can be:
|
||||
* - a table column name
|
||||
* - an sql function - like count(*)
|
||||
* - an sql expression - substr(column_name, 1, 8) or score1 + score2
|
||||
* $column_name is already escaped
|
||||
*/
|
||||
|
||||
class SelectExpression extends Expression {
|
||||
var $column_alias;
|
||||
|
||||
function SelectExpression($column_name, $alias = NULL){
|
||||
parent::Expression($column_name);
|
||||
$this->column_alias = $alias;
|
||||
}
|
||||
|
||||
function getExpression() {
|
||||
return sprintf("%s%s", $this->column_name, $this->column_alias ? " as ".$this->column_alias : "");
|
||||
}
|
||||
|
||||
function show() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
?>
|
||||
16
classes/db/queryparts/expression/StarExpression.class.php
Normal file
16
classes/db/queryparts/expression/StarExpression.class.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class StarExpression
|
||||
* @author Corina
|
||||
* @brief Represents the * in 'select * from ...' statements
|
||||
*
|
||||
*/
|
||||
|
||||
class StarExpression extends SelectExpression {
|
||||
|
||||
function StarExpression(){
|
||||
parent::SelectExpression("*");
|
||||
}
|
||||
}
|
||||
?>
|
||||
34
classes/db/queryparts/expression/UpdateExpression.class.php
Normal file
34
classes/db/queryparts/expression/UpdateExpression.class.php
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
/**
|
||||
* @class UpdateExpression
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
*/
|
||||
|
||||
class UpdateExpression extends Expression {
|
||||
var $value;
|
||||
|
||||
function UpdateExpression($column_name, $value){
|
||||
parent::Expression($column_name);
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
function getExpression(){
|
||||
return "$this->column_name = $this->value";
|
||||
}
|
||||
|
||||
function getValue(){
|
||||
// TODO Escape value according to column type instead of variable type
|
||||
if(!is_numeric($this->value)) return "'".$this->value."'";
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
function show(){
|
||||
if(!$this->value) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
16
classes/db/queryparts/order/OrderByColumn.class.php
Normal file
16
classes/db/queryparts/order/OrderByColumn.class.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
class OrderByColumn {
|
||||
var $column_name;
|
||||
var $sort_order;
|
||||
|
||||
function OrderByColumn($column_name, $sort_order){
|
||||
$this->column_name = $column_name;
|
||||
$this->sort_order = $sort_order;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
return $this->column_name . ' ' . $this->sort_order;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
37
classes/db/queryparts/table/JoinTable.class.php
Normal file
37
classes/db/queryparts/table/JoinTable.class.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class JoinTable
|
||||
* @author Arnia Software
|
||||
* @brief
|
||||
*
|
||||
* @remarks
|
||||
* $conditions in an array of Condition objects
|
||||
*
|
||||
*/
|
||||
|
||||
class JoinTable extends Table {
|
||||
var $join_type;
|
||||
var $conditions;
|
||||
|
||||
function JoinTable($name, $alias, $join_type, $conditions){
|
||||
parent::Table($name, $alias);
|
||||
$this->join_type = $join_type;
|
||||
$this->conditions = $conditions;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
$part = $this->join_type . ' ' . $this->name ;
|
||||
$part .= $this->alias ? ' as ' . $this->alias : '';
|
||||
$part .= ' on ';
|
||||
foreach($this->conditions as $conditionGroup)
|
||||
$part .= $conditionGroup->toString();
|
||||
return $part;
|
||||
}
|
||||
|
||||
function isJoinTable(){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
26
classes/db/queryparts/table/Table.class.php
Normal file
26
classes/db/queryparts/table/Table.class.php
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
class Table {
|
||||
var $name;
|
||||
var $alias;
|
||||
|
||||
function Table($name, $alias = NULL){
|
||||
$this->name = $name;
|
||||
$this->alias = $alias;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
return sprintf("%s%s", $this->name, $this->alias ? ' as ' . $this->alias : '');
|
||||
}
|
||||
|
||||
function getName(){
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
function isJoinTable(){
|
||||
if(in_array($tableName,array('left join','left outer join','right join','right outer join'))) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue