Esempio n. 1
0
 protected function applyQuery(ESphinxQuery $query)
 {
     $this->applyCriteria($query->getCriteria());
     $this->sphinxClient->AddQuery($query->getText(), $query->getIndexes());
 }
Esempio n. 2
0
 public function testCreate()
 {
     $query = new ESphinxQuery('text', 'index');
     $this->assertEquals($query->getText(), 'text');
     $this->assertEquals($query->getIndexes(), 'index');
 }
 private function applyCondition(CDbCriteria $criteria, ESphinxQuery $query)
 {
     $queryCriteria = $query->getCriteria();
     if (strlen($query->getText())) {
         $criteria->addCondition('MATCH(:match)');
         $criteria->params[':match'] = $query->getText();
     }
     foreach ($queryCriteria->getInConditions() as $name => $values) {
         $criteria->addInCondition($name, $values);
     }
     foreach ($queryCriteria->getNotInConditions() as $name => $values) {
         $criteria->addNotInCondition($name, $values);
     }
     foreach ($queryCriteria->getInRanges() as $name => $range) {
         $criteria->addBetweenCondition($name, $range['min'], $range['max']);
     }
     foreach ($queryCriteria->getNotInRanges() as $name => $range) {
         $criteria->addCondition("{$name} NOT BETWEEN ? AND ?");
         $criteria->params[] = $range['min'];
         $criteria->params[] = $range['max'];
     }
     if ($queryCriteria->getIdMax()) {
         $criteria->addCondition('id <= :maxid');
         $criteria->params[':maxid'] = $queryCriteria->getIdMax();
     }
     if ($queryCriteria->getIdMin()) {
         $criteria->addCondition('id <= :minid');
         $criteria->params[':minid'] = $queryCriteria->getIdMin();
     }
 }
 /**
  * @param  $query
  * @return CDbCriteria
  */
 private function createDbCriteria(ESphinxQuery $query)
 {
     $criteria = new ESphinxQlCriteria();
     // create select
     $criteria->select = $query->getCriteria()->select;
     // process conditions
     $queryCriteria = $query->getCriteria();
     if (strlen($query->getText())) {
         $criteria->addCondition('MATCH(' . ESphinxQlCriteria::PARAM_PREFIX . ESphinxQlCriteria::$paramCount . ')');
         $criteria->params[ESphinxQlCriteria::PARAM_PREFIX . ESphinxQlCriteria::$paramCount++] = $query->getText();
     }
     $this->applyIdLimits($criteria, $queryCriteria);
     $this->applyFilters($queryCriteria->getFilters(), $criteria);
     $this->applyRanges($queryCriteria->getRangeFilters(), $criteria);
     $this->applyGroup($criteria, $queryCriteria);
     $this->applyOrder($criteria, $queryCriteria);
     $this->applyOptions($criteria, $queryCriteria);
     // limit
     $criteria->limit = $queryCriteria->limit;
     $criteria->offset = $queryCriteria->offset;
     return $criteria;
 }