From 055b7e0d682f6e721eca119cb156e7dd17a593b0 Mon Sep 17 00:00:00 2001 From: lickawtl Date: Tue, 4 Oct 2011 16:58:40 +0000 Subject: [PATCH] add priority_hint to mysql git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9485 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/db/DB.class.php | 16 ++++++++++------ classes/db/DBMysql.class.php | 6 +++--- classes/db/queryparts/Query.class.php | 10 ++++++++++ .../xml/xmlquery/tags/query/QueryTag.class.php | 7 +++++++ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index cc61b51c5..11c030ac7 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -583,9 +583,10 @@ return $select . ' ' . $from . ' ' . $where . ' ' . $index_hint_list . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit; } - function getDeleteSql($query, $with_values = true){ + function getDeleteSql($query, $with_values = true, $with_priority = false){ $sql = 'DELETE '; + $sql .= $with_priority?$query->getPriority():''; $tables = $query->getTables(); $sql .= $tables[0]->getAlias(); @@ -600,7 +601,7 @@ return $sql; } - function getUpdateSql($query, $with_values = true){ + function getUpdateSql($query, $with_values = true, $with_priority = false){ $columnsList = $query->getUpdateString($with_values); if($columnsList == '') return new Object(-1, "Invalid query"); @@ -609,15 +610,18 @@ $where = $query->getWhereString($with_values); if($where != '') $where = ' WHERE ' . $where; + + $priority = $with_priority?$query->getPriority():''; - return "UPDATE $tableName SET $columnsList ".$where; + return "UPDATE $priority $tableName SET $columnsList ".$where; } - function getInsertSql($query, $with_values = true){ + function getInsertSql($query, $with_values = true, $with_priority = false){ $tableName = $query->getFirstTableName(); $values = $query->getInsertString($with_values); - - return "INSERT INTO $tableName \n $values"; + $priority = $with_priority?$query->getPriority():''; + + return "INSERT $priority INTO $tableName \n $values"; } function _getSlaveConnectionStringIndex() { diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index cac1fe1e2..061a35232 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -369,7 +369,7 @@ //$priority = ''; //if($output->priority) $priority = $output->priority['type'].'_priority'; - $query = $this->getInsertSql($queryObject); + $query = $this->getInsertSql($queryObject, true, true); if(is_a($query, 'Object')) return; return $this->_query($query); } @@ -383,7 +383,7 @@ //$priority = ''; //if($output->priority) $priority = $output->priority['type'].'_priority'; - $query = $this->getUpdateSql($queryObject); + $query = $this->getUpdateSql($queryObject, true, true); if(is_a($query, 'Object')) return; return $this->_query($query); } @@ -392,7 +392,7 @@ * @brief Handle deleteAct **/ function _executeDeleteAct($queryObject) { - $query = $this->getDeleteSql($queryObject); + $query = $this->getDeleteSql($queryObject, true, true); if(is_a($query, 'Object')) return; diff --git a/classes/db/queryparts/Query.class.php b/classes/db/queryparts/Query.class.php index 95cbc4c30..729ca46e4 100644 --- a/classes/db/queryparts/Query.class.php +++ b/classes/db/queryparts/Query.class.php @@ -3,6 +3,7 @@ class Query extends Object { var $queryID; var $action; + var $priority; var $columns; var $tables; @@ -27,6 +28,7 @@ , $limit = null){ $this->queryID = $queryID; $this->action = $action; + $this->priority = $priority; if(!isset($tables)) return; $this->columns = $this->setColumns($columns); @@ -48,6 +50,10 @@ function setAction($action){ $this->action = $action; } + + function setPriority($priority){ + $this->priority = $priority; + } function setColumnList($columnList){ $this->columnList = $columnList; @@ -152,6 +158,10 @@ function getAction(){ return $this->action; } + + function getPriority(){ + return $this->priority?'LOW_PRIORITY':''; + } function getSelectString($with_values = true){ foreach($this->columns as $column){ diff --git a/classes/xml/xmlquery/tags/query/QueryTag.class.php b/classes/xml/xmlquery/tags/query/QueryTag.class.php index 63f281d2f..80da6c1ad 100644 --- a/classes/xml/xmlquery/tags/query/QueryTag.class.php +++ b/classes/xml/xmlquery/tags/query/QueryTag.class.php @@ -3,6 +3,7 @@ class QueryTag { var $action; var $query_id; + var $priority; var $column_type; var $query; @@ -23,6 +24,7 @@ class QueryTag { function QueryTag($query, $isSubQuery = false){ $this->action = $query->attrs->action; $this->query_id = $query->attrs->id; + $this->priority = $query->attrs->priority; $this->query = $query; $this->isSubQuery = $isSubQuery; if($this->isSubQuery) $this->action = 'select'; @@ -46,6 +48,10 @@ class QueryTag { function getQueryId(){ return $this->query->attrs->query_id ? $this->query->attrs->query_id : $this->query->attrs->id; } + + function getPriority(){ + return $this->query->attrs->priority; + } function getAction(){ return $this->query->attrs->action; @@ -124,6 +130,7 @@ class QueryTag { $buff .= '$query = new Query();'.PHP_EOL; $buff .= sprintf('$query->setQueryId("%s");%s', $this->query_id, "\n"); $buff .= sprintf('$query->setAction("%s");%s', $this->action, "\n"); + $buff .= sprintf('$query->setPriority("%s");%s', $this->priority, "\n"); $buff .= $this->preBuff; if($this->columns) $buff .= '$query->setColumns(' . $this->columns->toString() . ');'.PHP_EOL;