From 5b611b5302b07deab77358c48cb3424b4067669f Mon Sep 17 00:00:00 2001 From: zYne Date: Fri, 27 Jul 2007 20:18:58 +0000 Subject: [PATCH] --- lib/Doctrine/Search/Query.php | 41 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/lib/Doctrine/Search/Query.php b/lib/Doctrine/Search/Query.php index 4aa270c80..f53c03e69 100644 --- a/lib/Doctrine/Search/Query.php +++ b/lib/Doctrine/Search/Query.php @@ -178,9 +178,18 @@ class Doctrine_Search_Query if (is_array($term)) { $parsed = $this->parseTerms($term); } else { - $parsed = $this->parseClause($term); + if (strpos($term, '(') === false) { + $parsed = $foreignId . ' IN (SELECT ' . $foreignId . ' FROM ' . $this->_table->getTableName() . ' WHERE ' . $this->parseClause($term) . ')'; + } else { + $parsed = $this->parseClause($term); + } + } + + if (strlen($parsed) > 20) { + $ret[] = '(' . $parsed . ')'; + } else { + $ret[] = $parsed; } - $ret[] = $foreignId . ' IN (SELECT ' . $foreignId . ' FROM ' . $this->_table->getTableName() . ' WHERE ' . $parsed . ')'; } $r = implode(' AND ', $ret); @@ -193,35 +202,25 @@ class Doctrine_Search_Query } public function parseTerms(array $terms) { + $foreignId = current(array_diff($this->_table->getColumnNames(), array('keyword', 'field', 'position'))); + if (count($terms) > 1) { $ret = array(); foreach ($terms as $term) { - $parsed = $this->parseClause($term); - if (strlen($parsed) > 20) { - $ret[] = '(' . $parsed. ')'; - } else { - $ret[] = $parsed; - } + $ret[] = $this->parseClause($term); } + $parsed = implode(' OR ', $ret); - return implode(' OR ', $ret); + if (strpos($parsed, '(') === false) { + $parsed = $foreignId . ' IN (SELECT ' . $foreignId . ' FROM ' . $this->_table->getTableName() . ' WHERE ' . $parsed . ')'; + } + + return $parsed; } else { $ret = $this->parseTerm($terms[0]); return $ret[0]; } } - public function parseAndSeparatedTerms($terms, $foreignId) - { - $ret = array(); - - foreach ($terms as $term) { - $parsed = $this->parseClause($term); - - $ret[] = $foreignId . ' IN (SELECT ' . $foreignId . ' FROM ' . $this->_table->getTableName() . ' WHERE ' . $parsed . ')'; - } - - $r = implode(' AND ', $ret); - } public function parseTerm($term) { if (strpos($term, "'") === false) {