public function addOr(Criterion $criterion)
 {
     $currentField = $this->getTable() . '.' . $this->getColumn();
     $addedField = $this->getTable() . '.' . $this->getColumn();
     KalturaLog::debug("Add OR criterion field [{$addedField}] to current field [{$currentField}]");
     // Validate that the added criterion and the current criterios are both attributes or both matches
     if ($this->criteria->hasSphinxFieldName($addedField)) {
         $currentSphinxField = $this->criteria->getSphinxFieldName($currentField);
         $addedSphinxField = $this->criteria->getSphinxFieldName($addedField);
         if ($currentSphinxField != $addedSphinxField) {
             KalturaLog::debug("Current sphinx field [{$currentSphinxField}] and added sphinx field [{$addedField}]");
             $currentType = $this->criteria->getSphinxFieldType($currentSphinxField);
             $addedType = $this->criteria->getSphinxFieldType($addedField);
             if ($currentType != $addedType) {
                 KalturaLog::debug("Current type [{$currentType}] and added type [{$addedType}]");
                 if ($currentType == IIndexable::FIELD_TYPE_STRING || $addedType == IIndexable::FIELD_TYPE_STRING) {
                     throw new kCoreException("Cannot mix OR operator on attributes and matches", kCoreException::INVALID_QUERY);
                 }
             }
         }
     }
     if ($criterion instanceof SphinxCriterion) {
         $criterion->setSelfMatchOperator(self::SPHINX_OR);
     }
     return parent::addOr($criterion);
 }
Пример #2
0
 /**
  * Append an OR Criterion onto this Criterion's list.
  * @return     Criterion
  */
 public function addOr(Criterion $criterion)
 {
     $this->hasOr = true;
     return parent::addOr($criterion);
 }