. */ /** * Doctrine_Search_QueryWeight_TestCase * * @package Doctrine * @author Konsta Vesterinen * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @category Object Relational Mapping * @link www.phpdoctrine.org * @since 1.0 * @version $Revision$ */ class Doctrine_Search_QueryWeight_TestCase extends Doctrine_UnitTestCase { public function testQuerySupportsMultiWordOrOperatorSearchWithQuotes() { $q = new Doctrine_Search_Query('SearchTestIndex'); $q->search("doctrine^2 OR 'dbal database'"); $sql = 'SELECT foreign_id, SUM(relevancy) AS relevancy_sum ' . 'FROM (SELECT COUNT(keyword) * 2 AS relevancy, foreign_id ' . 'FROM search_index ' . 'WHERE keyword = ? ' . 'GROUP BY foreign_id ' . 'UNION ' . 'SELECT COUNT(keyword) AS relevancy, foreign_id ' . 'FROM search_index) AS query_alias ' . 'WHERE keyword = ? AND (position + 1) = (SELECT position FROM search_index WHERE keyword = ?) ' . 'GROUP BY foreign_id) ' . 'GROUP BY foreign_id ' . 'ORDER BY relevancy_sum'; $this->assertEqual($q->getSql(), $sql); } public function testSearchSupportsMixingOfOperatorsParenthesisAndWeights() { $q = new Doctrine_Search_Query('SearchTestIndex'); $q->search('(doctrine^2 OR orm) AND dbal'); $sql = "SELECT foreign_id, SUM(relevancy) AS relevancy_sum FROM (SELECT COUNT(keyword) * 2 AS relevancy, foreign_id FROM search_index WHERE keyword = 'doctrine' GROUP BY foreign_id UNION SELECT COUNT(keyword) * 2 AS relevancy, foreign_id FROM search_index WHERE keyword = 'orm' GROUP BY foreign_id INTERSECT SELECT COUNT(keyword) AS relevancy, foreign_id FROM search_index) AS query_alias WHERE keyword = 'dbal' GROUP BY foreign_id) GROUP BY foreign_id ORDER BY relevancy_sum"; $this->assertEqual($q->getSql(), $sql); } public function testQuerySupportsMultiWordAndOperatorSearchWithQuotesAndWeights() { $q = new Doctrine_Search_Query('SearchTestIndex'); $q->search("doctrine^2 'dbal database'"); $sql = "SELECT foreign_id, SUM(relevancy) AS relevancy_sum FROM (SELECT COUNT(keyword) * 2 AS relevancy, foreign_id FROM search_index WHERE keyword = 'doctrine' GROUP BY foreign_id INTERSECT SELECT COUNT(keyword) AS relevancy, foreign_id FROM search_index) AS query_alias WHERE keyword = 'dbal' AND (position + 1) = (SELECT position FROM search_index WHERE keyword = 'database') GROUP BY foreign_id) GROUP BY foreign_id ORDER BY relevancy_sum"; $this->assertEqual($q->getSql(), $sql); } public function testQuerySupportsMultiWordNegationOperatorSearchWithQuotesWeights() { $q = new Doctrine_Search_Query('SearchTestIndex'); $q->search("doctrine^2 'dbal database' -rdbms"); $sql = "SELECT foreign_id, SUM(relevancy) AS relevancy_sum FROM (SELECT COUNT(keyword) * 2 AS relevancy, foreign_id FROM search_index WHERE keyword = 'doctrine' GROUP BY foreign_id INTERSECT SELECT COUNT(keyword) AS relevancy, foreign_id FROM search_index) AS query_alias WHERE keyword = 'dbal' AND (position + 1) = (SELECT position FROM search_index WHERE keyword = 'database') GROUP BY foreign_id EXCEPT SELECT COUNT(keyword) AS relevancy, foreign_id FROM search_index) AS query_alias WHERE keyword != 'rdbms' GROUP BY foreign_id ) GROUP BY foreign_id ORDER BY relevancy_sum"; $this->assertEqual($q->getSql(), $sql); } }