IDO Queries: performance quickfixes

Will be obsoleted by the new filter implementation, but for now it
helps a little bit
This commit is contained in:
Thomas Gelf 2014-05-20 13:27:58 +00:00
parent b447225512
commit e6d80ae1f6
3 changed files with 27 additions and 6 deletions

View File

@ -75,7 +75,12 @@ class TreeToSqlParser
if (count($right) > 1) { if (count($right) > 1) {
return 'IN'; return 'IN';
} else { } else {
return 'LIKE'; foreach ($right as $r) {
if (strpos($r, '*') !== false) {
return 'LIKE';
}
}
return '=';
} }
case Node::OPERATOR_EQUALS_NOT: case Node::OPERATOR_EQUALS_NOT:
if (count($right) > 1) { if (count($right) > 1) {
@ -171,7 +176,11 @@ class TreeToSqlParser
if ($node->context === Node::CONTEXT_TIMESTRING && !is_numeric($value)) { if ($node->context === Node::CONTEXT_TIMESTRING && !is_numeric($value)) {
$value = strtotime($value); $value = strtotime($value);
} }
$values[] = $this->query->getDatasource()->getConnection()->quote($value); if (preg_match('/^\d+$/', $value)) {
$values[] = $value;
} else {
$values[] = $this->query->getDatasource()->getConnection()->quote($value);
}
} }
$valueString = join(',', $values); $valueString = join(',', $values);

View File

@ -113,9 +113,9 @@ class ContactgroupQuery extends IdoQuery
+-------------------------+-------------+------------+------------------------+ +-------------------------+-------------+------------+------------------------+
*/ */
$this->baseQuery->join( $this->baseQuery->distinct()->join(
// array('scg' => $this->prefix . 'service_contactgroups'), array('scg' => $this->prefix . 'service_contactgroups'),
array('scg' => $scgSub), // array('scg' => $scgSub),
'scg.contactgroup_object_id = cg.contactgroup_object_id', 'scg.contactgroup_object_id = cg.contactgroup_object_id',
array() array()
)->join( )->join(

View File

@ -14,11 +14,23 @@ class CustomvarQuery extends IdoQuery
'service_host_name' => 'cvo.name1 COLLATE latin1_general_ci', 'service_host_name' => 'cvo.name1 COLLATE latin1_general_ci',
'service_description' => 'cvo.name2 COLLATE latin1_general_ci', 'service_description' => 'cvo.name2 COLLATE latin1_general_ci',
'contact_name' => 'cvo.name1 COLLATE latin1_general_ci', 'contact_name' => 'cvo.name1 COLLATE latin1_general_ci',
'object_type' => "CASE cvo.objecttype_id WHEN 1 THEN 'host' WHEN 2 THEN 'service' WHEN 10 THEN 'contact' ELSE 'invalid' END" 'object_type' => "CASE cvo.objecttype_id WHEN 1 THEN 'host' WHEN 2 THEN 'service' WHEN 10 THEN 'contact' ELSE 'invalid' END",
'object_type_id' => 'cvo.objecttype_id'
// 'object_type' => "CASE cvo.objecttype_id WHEN 1 THEN 'host' WHEN 2 THEN 'service' WHEN 3 THEN 'hostgroup' WHEN 4 THEN 'servicegroup' WHEN 5 THEN 'hostescalation' WHEN 6 THEN 'serviceescalation' WHEN 7 THEN 'hostdependency' WHEN 8 THEN 'servicedependency' WHEN 9 THEN 'timeperiod' WHEN 10 THEN 'contact' WHEN 11 THEN 'contactgroup' WHEN 12 THEN 'command' ELSE 'other' END" // 'object_type' => "CASE cvo.objecttype_id WHEN 1 THEN 'host' WHEN 2 THEN 'service' WHEN 3 THEN 'hostgroup' WHEN 4 THEN 'servicegroup' WHEN 5 THEN 'hostescalation' WHEN 6 THEN 'serviceescalation' WHEN 7 THEN 'hostdependency' WHEN 8 THEN 'servicedependency' WHEN 9 THEN 'timeperiod' WHEN 10 THEN 'contact' WHEN 11 THEN 'contactgroup' WHEN 12 THEN 'command' ELSE 'other' END"
), ),
); );
public function where($expression, $parameters = null)
{
$types = array('host' => 1, 'service' => 2, 'contact' => 10);
if ($expression === 'object_type') {
parent::where('object_type_id', $types[$parameters]);
} else {
parent::where($expression, $parameters);
}
return $this;
}
protected function joinBaseTables() protected function joinBaseTables()
{ {
$this->baseQuery = $this->db->select()->from( $this->baseQuery = $this->db->select()->from(