Changed code to use dbParser as singleton - instead of passing it in the constructor every time.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0-DB@8392 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
mosmartin 2011-05-23 09:01:00 +00:00
parent abba8761cc
commit 52c3d503bc
20 changed files with 82 additions and 113 deletions

View file

@ -23,22 +23,20 @@
$action = strtolower($xml_obj->query->attrs->action);
if(!$action) return;
//$oDB = &DB::getParser();
//$dbParser = $oDB->getParser();
$dbParser = $this->getDBParser();
$parser = new QueryParser($xml_obj->query, $dbParser);
$parser = new QueryParser($xml_obj->query);
FileHandler::writeFile($cache_file, $parser->toString());
}
// singleton
function getDBParser(){
if(!$this->dbParser){
function &getDBParser(){
static $dbParser;
if(!$dbParser){
//$oDB = &DB::getParser();
//$dbParser = $oDB->getParser();
$this->dbParser = new DBParser('"');
//self::$dbParser = $oDB->getParser();
$dbParser = new DBParser('"');
}
return $this->dbParser;
return $dbParser;
}
function getXmlFileContent($xml_file){

View file

@ -17,16 +17,12 @@ class QueryParser {
var $action;
var $query_id;
var $dbParser;
var $column_type;
function QueryParser($query, $dbParser){
function QueryParser($query){
$this->query = $query;
$this->action = $this->query->attrs->action;
$this->query_id = $this->query->attrs->id;
$this->dbParser = $dbParser;
}
function getQueryId(){
@ -97,20 +93,20 @@ class QueryParser {
function toString(){
if($this->action == 'select'){
$columns = new SelectColumnsTag($this->query->columns->column, $this->dbParser);
$columns = new SelectColumnsTag($this->query->columns->column);
}else if($this->action == 'insert'){
$columns = new InsertColumnsTag($this->query->columns->column, $this->dbParser);
$columns = new InsertColumnsTag($this->query->columns->column);
}else if($this->action == 'update') {
$columns = new UpdateColumnsTag($this->query->columns->column, $this->dbParser);
$columns = new UpdateColumnsTag($this->query->columns->column);
}else if($this->action == 'delete') {
$columns = new DeleteColumnsTag($this->query->columns->column, $this->dbParser);
$columns = new DeleteColumnsTag($this->query->columns->column);
}
$tables = new TablesTag($this->query->tables->table, $this->dbParser);
$conditions = new ConditionsTag($this->query->conditions, $this->dbParser);
$groups = new GroupsTag($this->query->groups->group, $this->dbParser);
$navigation = new NavigationTag($this->query->navigation, $this->dbParser);
$tables = new TablesTag($this->query->tables->table);
$conditions = new ConditionsTag($this->query->conditions);
$groups = new GroupsTag($this->query->groups->group);
$navigation = new NavigationTag($this->query->navigation);
$this->setTableColumnTypes($tables);
@ -139,7 +135,6 @@ class QueryParser {
$buff .= '$output->orderby = ' . $navigation->getOrderByString() .';';
return "<?php if(!defined('__ZBXE__')) exit();\n"
. "\$dbParser = new DBParser('".$this->dbParser->getEscapeChar()."');\n"
. sprintf('$output->query_id = "%s";%s', $this->query_id, "\n")
. sprintf('$output->action = "%s";%s', $this->action, "\n")
. $prebuff

View file

@ -12,10 +12,8 @@
class ColumnTag {
var $name;
var $dbParser;
function ColumnTag($name, $dbParser){
$this->dbParser = $dbParser;
function ColumnTag($name){
$this->name = $name;
}
}

View file

@ -10,9 +10,10 @@
class DeleteColumnTag extends ColumnTag {
var $argument;
function DeleteColumnTag($column, $dbParser) {
parent::ColumnTag($column->attrs->name, $dbParser);
$this->name = $this->dbParser->parseColumnName($this->name);
function DeleteColumnTag($column) {
parent::ColumnTag($column->attrs->name);
$dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseColumnName($this->name);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($column);
}

View file

@ -10,12 +10,9 @@
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/DeleteColumnTag.class.php');
class DeleteColumnsTag{
var $dbParser;
var $columns;
function DeleteColumnsTag($xml_columns, $dbParser) {
$this->dbParser = $dbParser;
function DeleteColumnsTag($xml_columns) {
$this->columns = array();
if(!$xml_columns)
@ -24,7 +21,7 @@
if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){
$this->columns[] = new DeleteColumnTag($column, $this->dbParser);
$this->columns[] = new DeleteColumnTag($column);
}
}

View file

@ -10,9 +10,10 @@
class InsertColumnTag extends ColumnTag {
var $argument;
function InsertColumnTag($column, $dbParser) {
parent::ColumnTag($column->attrs->name, $dbParser);
$this->name = $this->dbParser->parseColumnName($this->name);
function InsertColumnTag($column) {
parent::ColumnTag($column->attrs->name);
$dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseColumnName($this->name);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($column);
}

View file

@ -10,12 +10,9 @@
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/InsertColumnTag.class.php');
class InsertColumnsTag{
var $dbParser;
var $columns;
function InsertColumnsTag($xml_columns, $dbParser) {
$this->dbParser = $dbParser;
function InsertColumnsTag($xml_columns) {
$this->columns = array();
if(!$xml_columns)
@ -24,7 +21,7 @@
if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){
$this->columns[] = new InsertColumnTag($column, $this->dbParser);
$this->columns[] = new InsertColumnTag($column);
}
}

View file

@ -11,11 +11,13 @@
var $alias;
var $click_count;
function SelectColumnTag($column, $dbParser){
parent::ColumnTag($column->attrs->name, $dbParser);
function SelectColumnTag($column){
parent::ColumnTag($column->attrs->name);
if(!$this->name) $this->name = "*";
if($this->name != "*")
$this->name = $this->dbParser->parseExpression($this->name);
if($this->name != "*") {
$dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseExpression($this->name);
}
$this->alias = $column->attrs->alias;
$this->click_count = $column->attrs->click_count;
@ -25,7 +27,8 @@
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);
return sprintf('new SelectExpression(\'%s\'%s)', $this->name, $this->alias ? ', \''.$this->dbParser->escape($this->alias) .'\'': '');
$dbParser = XmlQueryParser::getDBParser();
return sprintf('new SelectExpression(\'%s\'%s)', $this->name, $this->alias ? ', \''.$dbParser->escape($this->alias) .'\'': '');
}
}
?>

View file

@ -4,23 +4,20 @@
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/SelectColumnTag.class.php');
class SelectColumnsTag {
var $dbParser;
var $columns;
function SelectColumnsTag($xml_columns, $dbParser){
$this->dbParser = $dbParser;
function SelectColumnsTag($xml_columns){
$this->columns = array();
if(!$xml_columns) {
$this->columns[] = new SelectColumnTag("*", $this->dbParser);
$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, $this->dbParser);
$this->columns[] = new SelectColumnTag($column);
}
}

View file

@ -12,9 +12,10 @@
class UpdateColumnTag extends ColumnTag {
var $argument;
function UpdateColumnTag($column, $dbParser) {
parent::ColumnTag($column->attrs->name, $dbParser);
$this->name = $this->dbParser->parseColumnName($this->name);
function UpdateColumnTag($column) {
parent::ColumnTag($column->attrs->name);
$dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseColumnName($this->name);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($column);
}

View file

@ -11,23 +11,15 @@
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/column/UpdateColumnTag.class.php');
class UpdateColumnsTag{
var $dbParser;
var $columns;
function UpdateColumnsTag($xml_columns, $dbParser) {
$this->dbParser = $dbParser;
function UpdateColumnsTag($xml_columns) {
$this->columns = array();
if(!$xml_columns) {
$this->columns[] = new UpdateColumnTag("*", $this->dbParser);
return;
}
if(!is_array($xml_columns)) $xml_columns = array($xml_columns);
foreach($xml_columns as $column){
$this->columns[] = new UpdateColumnTag($column, $this->dbParser);
$this->columns[] = new UpdateColumnTag($column);
}
}

View file

@ -1,20 +1,17 @@
<?php
class ConditionGroupTag {
var $dbParser;
class ConditionGroupTag {
var $conditions;
var $pipe;
function ConditionGroupTag($conditions, $dbParser, $pipe = ""){
$this->dbParser = $dbParser;
function ConditionGroupTag($conditions, $pipe = ""){
$this->pipe = $pipe;
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){
$this->conditions[] = new ConditionTag($condition, $dbParser);
$this->conditions[] = new ConditionTag($condition);
}
}

View file

@ -8,7 +8,6 @@
*/
class ConditionTag {
var $dbParser;
var $operation;
var $column_name;
@ -17,15 +16,15 @@
var $argument;
var $default_column;
function ConditionTag($condition, $dbParser){
$this->dbParser = $dbParser;
function ConditionTag($condition){
$this->operation = $condition->attrs->operation;
$this->pipe = $condition->attrs->pipe;
$this->column_name = $this->dbParser->parseColumnName($condition->attrs->column);
$dbParser = XmlQueryParser::getDBParser();
$this->column_name = $dbParser->parseColumnName($condition->attrs->column);
// TODO fix this hack - argument_name is initialized in three places :) [ here, queryArgument and queryArgumentValidator]
$this->argument_name = $condition->attrs->var;
if(!$this->argument_name) $this->argument_name = $condition->attrs->column;
$this->default_column = $this->dbParser->parseColumnName($condition->attrs->default);
$this->default_column = $dbParser->parseColumnName($condition->attrs->default);
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($condition);
}

View file

@ -1,16 +1,14 @@
<?php
class ConditionsTag {
var $dbParser;
var $condition_groups;
function ConditionsTag($xml_conditions, $dbParser){
$this->dbParser = $dbParser;
function ConditionsTag($xml_conditions){
$this->condition_groups = array();
$xml_condition_list = $xml_conditions->condition;
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->dbParser);
$this->condition_groups[] = new ConditionGroupTag($xml_condition_list);
}
$xml_groups = $xml_conditions->group;
@ -18,7 +16,7 @@
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){
$this->condition_groups[] = new ConditionGroupTag($group->condition, $this->dbParser, $group->pipe);
$this->condition_groups[] = new ConditionGroupTag($group->condition, $group->pipe);
}
}
}

View file

@ -2,8 +2,8 @@
class JoinConditionsTag extends ConditionsTag {
function JoinConditionsTag($xml_conditions, $dbParser){
parent::ConditionsTag($xml_conditions, $dbParser);
function JoinConditionsTag($xml_conditions){
parent::ConditionsTag($xml_conditions);
$this->condition_groups[0]->conditions[0]->setPipe("");
}
}

View file

@ -2,21 +2,20 @@
class GroupsTag {
var $groups;
var $dbParser;
function GroupsTag($xml_groups, $dbParser){
$this->dbParser = $dbParser;
function GroupsTag($xml_groups){
$this->groups = array();
if($xml_groups) {
if(!is_array($xml_groups)) $xml_groups = array($xml_groups);
$dbParser = XmlQueryParser::getDBParser();
for($i=0;$i<count($xml_groups);$i++) {
$group = $xml_groups[$i];
$column = trim($group->attrs->column);
if(!$column) continue;
$column = $this->dbParser->parseExpression($column);
$column = $dbParser->parseExpression($column);
$this->groups[] = $column;
}
}

View file

@ -1,18 +1,17 @@
<?php
class IndexTag {
var $dbParser;
class IndexTag {
var $argument_name;
var $argument;
var $default;
var $sort_order;
var $sort_order_argument;
function IndexTag($index, $dbParser){
$this->dbParser = $dbParser;
function IndexTag($index){
$this->argument_name = $index->attrs->var;
$index->attrs->default = $this->dbParser->parseExpression($index->attrs->default);
$dbParser = XmlQueryParser::getDBParser();
$index->attrs->default = $dbParser->parseExpression($index->attrs->default);
$this->default = $index->attrs->default;
require_once(_XE_PATH_.'classes/xml/xmlquery/queryargument/QueryArgument.class.php');
$this->argument = new QueryArgument($index);

View file

@ -2,20 +2,19 @@
require_once(_XE_PATH_.'classes/xml/xmlquery/tags/navigation/IndexTag.class.php');
class NavigationTag {
var $dbParser;
var $order;
var $list_count;
var $page_count;
var $page;
function NavigationTag($xml_navigation, $dbParser){
function NavigationTag($xml_navigation){
$this->order = array();
if($xml_navigation) {
$order = $xml_navigation->index;
if($order) {
if(!is_array($order)) $order = array($order);
foreach($order as $order_info) {
$this->order[] = new IndexTag($order_info, $dbParser);
$this->order[] = new IndexTag($order_info);
}
}

View file

@ -15,13 +15,12 @@
var $join_type;
var $conditions;
var $dbParser;
function TableTag($table, $dbParser){
$this->dbParser = $dbParser;
function TableTag($table){
$this->unescaped_name = $table->attrs->name;
$this->name = $this->dbParser->parseTableName($table->attrs->name);
$dbParser = XmlQueryParser::getDBParser();
$this->name = $dbParser->parseTableName($table->attrs->name);
$this->alias = $table->attrs->alias;
//if(!$this->alias) $this->alias = $alias;
@ -44,16 +43,17 @@
}
function getTableString(){
$dbParser = XmlQueryParser::getDBParser();
if($this->isJoinTable()){
$conditionsTag = new JoinConditionsTag($this->conditions, $this->dbParser);
$conditionsTag = new JoinConditionsTag($this->conditions);
return sprintf('new JoinTable(\'%s\', \'%s\', "%s", %s)'
, $this->dbParser->escape($this->name)
, $this->dbParser->escape($this->alias)
, $dbParser->escape($this->name)
, $dbParser->escape($this->alias)
, $this->join_type, $conditionsTag->toString());
}
return sprintf('new Table(\'%s\'%s)'
, $this->dbParser->escape($this->name)
, $this->alias ? ', \'' . $this->dbParser->escape($this->alias) .'\'' : '');
, $dbParser->escape($this->name)
, $this->alias ? ', \'' . $dbParser->escape($this->alias) .'\'' : '');
}
}

View file

@ -1,18 +1,16 @@
<?php
class TablesTag {
var $dbParser;
var $tables;
function TablesTag($xml_tables, $dbParser){
$this->dbParser = $dbParser;
function TablesTag($xml_tables){
$this->tables = array();
if(!is_array($xml_tables)) $xml_tables = array($xml_tables);
if(count($xml_tables)) require_once(_XE_PATH_.'classes/xml/xmlquery/tags/table/TableTag.class.php');
foreach($xml_tables as $table){
$this->tables[] = new TableTag($table, $this->dbParser);
$this->tables[] = new TableTag($table);
}
}