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); }