mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-02 16:52:16 +09:00
Added index hints for CUBRID and Mysql.
git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9472 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
0b8949cfeb
commit
96b60466be
18 changed files with 350 additions and 4 deletions
|
|
@ -28,6 +28,9 @@
|
|||
require(_XE_PATH_.'classes/db/queryparts/expression/UpdateExpression.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/Table.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/JoinTable.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/CubridTableWithHint.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/MysqlTableWithHint.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/table/IndexHint.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/condition/ConditionGroup.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/condition/Condition.class.php');
|
||||
require(_XE_PATH_.'classes/db/queryparts/condition/ConditionWithArgument.class.php');
|
||||
|
|
@ -557,6 +560,15 @@
|
|||
$where = $query->getWhereString($with_values);
|
||||
if($where != '') $where = ' WHERE ' . $where;
|
||||
|
||||
$tableObjects = $query->getTables();
|
||||
$index_hint_list = '';
|
||||
foreach($tableObjects as $tableObject){
|
||||
if(is_a($tableObject, 'CubridTableWithHint'))
|
||||
$index_hint_list .= $tableObject->getIndexHintString() . ', ';
|
||||
}
|
||||
if($index_hint_list != '')
|
||||
$index_hint_list = 'USING INDEX ' . substr($index_hint_list, 0, -2);
|
||||
|
||||
$groupBy = $query->getGroupByString();
|
||||
if($groupBy != '') $groupBy = ' GROUP BY ' . $groupBy;
|
||||
|
||||
|
|
@ -566,7 +578,7 @@
|
|||
$limit = $query->getLimitString();
|
||||
if($limit != '') $limit = ' LIMIT ' . $limit;
|
||||
|
||||
return $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit;
|
||||
return $select . ' ' . $from . ' ' . $where . ' ' . $index_hint_list . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit;
|
||||
}
|
||||
|
||||
function getDeleteSql($query, $with_values = true){
|
||||
|
|
|
|||
25
classes/db/queryparts/table/CubridTableWithHint.class.php
Normal file
25
classes/db/queryparts/table/CubridTableWithHint.class.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
class CubridTableWithHint extends Table {
|
||||
var $name;
|
||||
var $alias;
|
||||
var $index_hints_list;
|
||||
|
||||
function CubridTableWithHint($name, $alias = NULL, $index_hints_list){
|
||||
parent::Table($name, $alias);
|
||||
$this->index_hints_list = $index_hints_list;
|
||||
}
|
||||
|
||||
function getIndexHintString(){
|
||||
$result = '';
|
||||
foreach($this->index_hints_list as $index_hint){
|
||||
$result .= $this->alias . '.' . $index_hint->getIndexName()
|
||||
. ($index_hint->getIndexHintType() == 'FORCE' ? '(+)' : '') . ', ';
|
||||
|
||||
}
|
||||
$result = substr($result, 0, -2);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
21
classes/db/queryparts/table/IndexHint.class.php
Normal file
21
classes/db/queryparts/table/IndexHint.class.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
class IndexHint {
|
||||
var $index_name;
|
||||
var $index_hint_type;
|
||||
|
||||
function IndexHint($index_name, $index_hint_type){
|
||||
$this->index_name = $index_name;
|
||||
$this->index_hint_type = $index_hint_type;
|
||||
}
|
||||
|
||||
function getIndexName(){
|
||||
return $this->index_name;
|
||||
}
|
||||
|
||||
function getIndexHintType() {
|
||||
return $this->index_hint_type;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
36
classes/db/queryparts/table/MysqlTableWithHint.class.php
Normal file
36
classes/db/queryparts/table/MysqlTableWithHint.class.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
class MysqlTableWithHint extends Table {
|
||||
var $name;
|
||||
var $alias;
|
||||
var $index_hints_list;
|
||||
|
||||
function MysqlTableWithHint($name, $alias = NULL, $index_hints_list){
|
||||
parent::Table($name, $alias);
|
||||
$this->index_hints_list = $index_hints_list;
|
||||
}
|
||||
|
||||
function toString(){
|
||||
$result = parent::toString();
|
||||
|
||||
$use_index_hint = ''; $force_index_hint = ''; $ignore_index_hint = '';
|
||||
foreach($this->index_hints_list as $index_hint){
|
||||
$index_hint_type = $index_hint->getIndexHintType();
|
||||
if($index_hint_type == 'USE') $use_index_hint .= $index_hint->getIndexName() . ', ';
|
||||
else if($index_hint_type == 'FORCE') $force_index_hint .= $index_hint->getIndexName() . ', ';
|
||||
else if($index_hint_type == 'IGNORE') $ignore_index_hint .= $index_hint->getIndexName() . ', ';
|
||||
}
|
||||
if($use_index_hint != ''){
|
||||
$result .= ' USE INDEX (' . substr($use_index_hint, 0, -2) . ') ';
|
||||
}
|
||||
if($force_index_hint != ''){
|
||||
$result .= ' FORCE INDEX (' . substr($force_index_hint, 0, -2) . ') ';
|
||||
}
|
||||
if($ignore_index_hint != ''){
|
||||
$result .= ' IGNORE INDEX (' . substr($ignore_index_hint, 0, -2) . ') ';
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue