Updated the way DB class files are included.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9034 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ucorina 2011-09-05 14:15:20 +00:00
parent 03b5c9a365
commit 833dcfae37
18 changed files with 270 additions and 242 deletions

View file

@ -13,24 +13,30 @@
* queryid = module_name.query_name * queryid = module_name.query_name
**/ **/
require_once(_XE_PATH_.'classes/xml/xmlquery/DBParser.class.php'); if(!defined('__XE_LOADED_DB_CLASS__')){
require_once(_XE_PATH_.'classes/xml/xmlquery/argument/Argument.class.php'); define('__XE_LOADED_DB_CLASS__', 1);
require_once(_XE_PATH_.'classes/xml/xmlquery/argument/SortArgument.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/argument/ConditionArgument.class.php'); require(_XE_PATH_.'classes/xml/xmlquery/DBParser.class.php');
require_once(_XE_PATH_.'classes/xml/XmlQueryParser.class.php'); require(_XE_PATH_.'classes/xml/xmlquery/QueryParser.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/expression/Expression.class.php'); require(_XE_PATH_.'classes/xml/xmlquery/argument/Argument.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php'); require(_XE_PATH_.'classes/xml/xmlquery/argument/SortArgument.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php'); require(_XE_PATH_.'classes/xml/xmlquery/argument/ConditionArgument.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpression.class.php'); require(_XE_PATH_.'classes/xml/XmlQueryParser.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(_XE_PATH_.'classes/db/queryparts/expression/Expression.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php'); require(_XE_PATH_.'classes/db/queryparts/expression/SelectExpression.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php'); require(_XE_PATH_.'classes/db/queryparts/expression/InsertExpression.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/expression/StarExpression.class.php'); require(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpression.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/order/OrderByColumn.class.php'); require(_XE_PATH_.'classes/db/queryparts/table/Table.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/limit/Limit.class.php'); require(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/Query.class.php'); require(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php');
require_once(_XE_PATH_.'classes/db/queryparts/Subquery.class.php'); require(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php');
require(_XE_PATH_.'classes/db/queryparts/expression/StarExpression.class.php');
require(_XE_PATH_.'classes/db/queryparts/order/OrderByColumn.class.php');
require(_XE_PATH_.'classes/db/queryparts/limit/Limit.class.php');
require(_XE_PATH_.'classes/db/queryparts/Query.class.php');
require(_XE_PATH_.'classes/db/queryparts/Subquery.class.php');
}
class DB { class DB {
@ -56,6 +62,7 @@
var $errstr = ''; ///< error message var $errstr = ''; ///< error message
var $query = ''; ///< query string of latest executed query var $query = ''; ///< query string of latest executed query
var $elapsed_time = 0; ///< elapsed time of latest executed query var $elapsed_time = 0; ///< elapsed time of latest executed query
var $elapsed_dbclass_time = 0; ///< elapsed time of latest executed query
var $transaction_started = false; ///< transaction flag var $transaction_started = false; ///< transaction flag
@ -313,6 +320,9 @@
**/ **/
function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $database_type = 'master') { function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $database_type = 'master') {
if(!$query_id) return new Object(-1, 'msg_invalid_queryid'); if(!$query_id) return new Object(-1, 'msg_invalid_queryid');
$this->actDBClassStart();
$this->query_id = $query_id; $this->query_id = $query_id;
$id_args = explode('.', $query_id); $id_args = explode('.', $query_id);
@ -322,20 +332,31 @@
$id = $id_args[1]; $id = $id_args[1];
} elseif(count($id_args) == 3) { } elseif(count($id_args) == 3) {
$target = $id_args[0]; $target = $id_args[0];
if(!in_array($target, array('addons','widgets'))) return; if(!in_array($target, array('addons','widgets'))){
$this->actDBClassFinish();
return;
}
$module = $id_args[1]; $module = $id_args[1];
$id = $id_args[2]; $id = $id_args[2];
} }
if(!$target || !$module || !$id) return new Object(-1, 'msg_invalid_queryid'); if(!$target || !$module || !$id){
$this->actDBClassFinish();
return new Object(-1, 'msg_invalid_queryid');
}
$xml_file = sprintf('%s%s/%s/queries/%s.xml', _XE_PATH_, $target, $module, $id); $xml_file = sprintf('%s%s/%s/queries/%s.xml', _XE_PATH_, $target, $module, $id);
if(!file_exists($xml_file)) return new Object(-1, 'msg_invalid_queryid'); if(!file_exists($xml_file)){
$this->actDBClassFinish();
return new Object(-1, 'msg_invalid_queryid');
}
// look for cache file // look for cache file
$cache_file = $this->checkQueryCacheFile($query_id, $xml_file); $cache_file = $this->checkQueryCacheFile($query_id, $xml_file);
$result = $this->_executeQuery($cache_file, $args, $query_id, $arg_columns, $database_type);
$this->actDBClassFinish();
// execute query // execute query
return $this->_executeQuery($cache_file, $args, $query_id, $arg_columns, $database_type); return $result;
} }
@ -746,7 +767,27 @@
$this->_afterConnect($result); $this->_afterConnect($result);
} }
/**
* @brief start recording DBClass log
* @return none
**/
function actDBClassStart() {
$this->setError(0, 'success');
$this->act_dbclass_start = getMicroTime();
$this->elapsed_dbclass_time = 0;
}
/**
* @brief finish recording DBClass log
* @return none
**/
function actDBClassFinish() {
if(!$this->query) return;
$this->act_dbclass_finish = getMicroTime();
$elapsed_dbclass_time = $this->act_dbclass_finish - $this->act_dbclass_start;
$this->elapsed_dbclass_time = $elapsed_dbclass_time;
$GLOBALS['__dbclass_elapsed_time__'] += $elapsed_dbclass_time;
}
} }
?> ?>

View file

@ -9,8 +9,39 @@
* @todo include info about column types for parsing user input * @todo include info about column types for parsing user input
**/ **/
require_once(_XE_PATH_.'classes/xml/xmlquery/DBParser.class.php'); if(!defined('__XE_LOADED_XML_CLASS__')){
require_once(_XE_PATH_.'classes/xml/xmlquery/QueryParser.class.php'); define('__XE_LOADED_XML_CLASS__', 1);
require(_XE_PATH_.'classes/xml/xmlquery/tags/query/QueryTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/table/TableTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/table/TablesTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/SelectColumnTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/group/GroupsTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/NavigationTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/IndexTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/LimitTag.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/queryargument/SortQueryArgument.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php');
require(_XE_PATH_.'classes/xml/xmlquery/queryargument/DefaultValue.class.php');
}
class XmlQueryParser extends XmlParser { class XmlQueryParser extends XmlParser {
static $dbParser = null; static $dbParser = null;

View file

@ -1,61 +1,51 @@
<?php <?php
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php'); class QueryParser {
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/SelectColumnsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/table/TablesTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/JoinConditionsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/group/GroupsTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/NavigationTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/IndexTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/query/QueryTag.class.php');
class QueryParser {
var $queryTag; var $queryTag;
function QueryParser($query, $isSubQuery = false){ function QueryParser($query, $isSubQuery = false) {
$this->queryTag = new QueryTag($query, $isSubQuery); $this->queryTag = new QueryTag($query, $isSubQuery);
} }
function getTableInfo($query_id, $table_name){ function getTableInfo($query_id, $table_name) {
$column_type = array(); $column_type = array();
$id_args = explode('.', $query_id); $id_args = explode('.', $query_id);
if(count($id_args)==2) { if (count($id_args) == 2) {
$target = 'modules'; $target = 'modules';
$module = $id_args[0]; $module = $id_args[0];
$id = $id_args[1]; $id = $id_args[1];
} elseif(count($id_args)==3) { } elseif (count($id_args) == 3) {
$target = $id_args[0]; $target = $id_args[0];
if(!in_array($target, array('modules','addons','widgets'))) return; if (!in_array($target, array('modules', 'addons', 'widgets')))
return;
$module = $id_args[1]; $module = $id_args[1];
$id = $id_args[2]; $id = $id_args[2];
} }
// get column properties from the table // get column properties from the table
$table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $module, $table_name); $table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $module, $table_name);
if(!file_exists($table_file)) { if (!file_exists($table_file)) {
$searched_list = FileHandler::readDir(_XE_PATH_.'modules'); $searched_list = FileHandler::readDir(_XE_PATH_ . 'modules');
$searched_count = count($searched_list); $searched_count = count($searched_list);
for($i=0;$i<$searched_count;$i++) { for ($i = 0; $i < $searched_count; $i++) {
$table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $searched_list[$i], $table_name); $table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $searched_list[$i], $table_name);
if(file_exists($table_file)) break; if (file_exists($table_file))
break;
} }
} }
if(file_exists($table_file)) { if (file_exists($table_file)) {
$table_xml = FileHandler::readFile($table_file); $table_xml = FileHandler::readFile($table_file);
$xml_parser = new XmlParser(); $xml_parser = new XmlParser();
$table_obj = $xml_parser->parse($table_xml); $table_obj = $xml_parser->parse($table_xml);
if($table_obj->table) { if ($table_obj->table) {
if(isset($table_obj->table->column) && !is_array($table_obj->table->column)) if (isset($table_obj->table->column) && !is_array($table_obj->table->column)) {
{
$table_obj->table->column = array($table_obj->table->column); $table_obj->table->column = array($table_obj->table->column);
} }
foreach($table_obj->table->column as $k => $v) { foreach ($table_obj->table->column as $k => $v) {
$column_type[$v->attrs->name] = $v->attrs->type; $column_type[$v->attrs->name] = $v->attrs->type;
} }
} }
@ -64,11 +54,12 @@ class QueryParser {
return $column_type; return $column_type;
} }
function toString(){ function toString() {
return "<?php if(!defined('__ZBXE__')) exit();\n" return "<?php if(!defined('__ZBXE__')) exit();\n"
.$this->queryTag->toString() . $this->queryTag->toString()
. 'return $query; ?>'; . 'return $query; ?>';
} }
}
}
?> ?>

View file

@ -29,7 +29,6 @@
if($tag->attrs->operation) $this->operation = $tag->attrs->operation; if($tag->attrs->operation) $this->operation = $tag->attrs->operation;
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/validator/QueryArgumentValidator.class.php');
$this->argument_validator = new QueryArgumentValidator($tag, $this); $this->argument_validator = new QueryArgumentValidator($tag, $this);
} }

View file

@ -1,6 +1,4 @@
<?php <?php
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/DefaultValue.class.php');
class QueryArgumentValidator { class QueryArgumentValidator {
var $argument_name; var $argument_name;
var $default_value; var $default_value;

View file

@ -1,7 +0,0 @@
<?php
class Validator {
}
?>

View file

@ -14,7 +14,6 @@
parent::ColumnTag($column->attrs->name); parent::ColumnTag($column->attrs->name);
$dbParser = XmlQueryParser::getDBParser(); $dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseColumnName($this->name); $this->name = $dbParser->parseColumnName($this->name);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($column); $this->argument = new QueryArgument($column);
} }

View file

@ -6,9 +6,6 @@
* *
**/ **/
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php');
class InsertColumnsTag{ class InsertColumnsTag{
var $columns; var $columns;

View file

@ -1,8 +1,5 @@
<?php <?php
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/SelectColumnTag.class.php');
class SelectColumnsTag { class SelectColumnsTag {
var $columns; var $columns;

View file

@ -16,7 +16,6 @@
parent::ColumnTag($column->attrs->name); parent::ColumnTag($column->attrs->name);
$dbParser = XmlQueryParser::getDBParser(); $dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseColumnName($this->name); $this->name = $dbParser->parseColumnName($this->name);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($column); $this->argument = new QueryArgument($column);
} }

View file

@ -7,9 +7,6 @@
* *
**/ **/
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/ColumnTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php');
class UpdateColumnsTag{ class UpdateColumnsTag{
var $columns; var $columns;

View file

@ -8,7 +8,6 @@
$this->pipe = $pipe; $this->pipe = $pipe;
if(!is_array($conditions)) $conditions = array($conditions); if(!is_array($conditions)) $conditions = array($conditions);
if(count($conditions))require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionTag.class.php');
foreach($conditions as $condition){ foreach($conditions as $condition){
//if($condition->node_name === 'query') $this->conditions[] = new QueryTag($condition, true); //if($condition->node_name === 'query') $this->conditions[] = new QueryTag($condition, true);

View file

@ -31,8 +31,6 @@
$this->default_column = $this->query->toString(); $this->default_column = $this->query->toString();
} }
else if(($condition->attrs->var && !$isColumnName) || $isColumnName === false){ else if(($condition->attrs->var && !$isColumnName) || $isColumnName === false){
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($condition); $this->argument = new QueryArgument($condition);
$this->argument_name = $this->argument->getArgumentName(); $this->argument_name = $this->argument->getArgumentName();
} }

View file

@ -15,14 +15,12 @@
$xml_condition_list = array_merge($xml_condition_list, $xml_conditions->query); $xml_condition_list = array_merge($xml_condition_list, $xml_conditions->query);
} }
if($xml_condition_list){ if($xml_condition_list){
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php');
$this->condition_groups[] = new ConditionGroupTag($xml_condition_list); $this->condition_groups[] = new ConditionGroupTag($xml_condition_list);
} }
$xml_groups = $xml_conditions->group; $xml_groups = $xml_conditions->group;
if($xml_groups){ if($xml_groups){
if(!is_array($xml_groups)) $xml_groups = array($xml_groups); if(!is_array($xml_groups)) $xml_groups = array($xml_groups);
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/condition/ConditionGroupTag.class.php');
foreach($xml_groups as $group){ foreach($xml_groups as $group){
$this->condition_groups[] = new ConditionGroupTag($group->condition, $group->attrs->pipe); $this->condition_groups[] = new ConditionGroupTag($group->condition, $group->attrs->pipe);
} }

View file

@ -14,8 +14,6 @@
//$dbParser = XmlQueryParser::getDBParser(); //$dbParser = XmlQueryParser::getDBParser();
//$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;
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/SortQueryArgument.class.php');
$this->argument = new QueryArgument($index); $this->argument = new QueryArgument($index);
// Sort order - asc / desc // Sort order - asc / desc

View file

@ -7,8 +7,6 @@
var $list_count; var $list_count;
function LimitTag($index){ function LimitTag($index){
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
if($index->page->attrs && $index->page_count->attrs){ if($index->page->attrs && $index->page_count->attrs){
$this->page = new QueryArgument($index->page); $this->page = new QueryArgument($index->page);
$this->page_count = new QueryArgument($index->page_count); $this->page_count = new QueryArgument($index->page_count);

View file

@ -1,7 +1,4 @@
<?php <?php
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/IndexTag.class.php');
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/LimitTag.class.php');
class NavigationTag { class NavigationTag {
var $order; var $order;
var $list_count; var $list_count;

View file

@ -16,8 +16,6 @@
* Can have children of type <table> or <query> * Can have children of type <table> or <query>
*/ */
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/table/TableTag.class.php');
class TablesTag { class TablesTag {
var $tables; var $tables;