public function walkComparison(Comparison $comparison, AbstractNode $parentNode)
{
$field = $comparison->getField();
$value = $comparison->getValue()->getValue();
// shortcut for walkValue()
switch ($comparison->getOperator()) {
case Comparison::EQ:
return $parentNode->eq()->field($this->getField($field))->literal($value)->end();
case Comparison::NEQ:
return $parentNode->neq()->field($this->getField($field))->literal($value)->end();
case Comparison::LT:
return $parentNode->lt()->field($this->getField($field))->literal($value)->end();
case Comparison::LTE:
return $parentNode->lte()->field($this->getField($field))->literal($value)->end();
case Comparison::GT:
return $parentNode->gt()->field($this->getField($field))->literal($value)->end();
case Comparison::GTE:
return $parentNode->gte()->field($this->getField($field))->literal($value)->end();
case Comparison::IN:
return $this->getInConstraint($parentNode, $field, $value);
case Comparison::NIN:
$node = $parentNode->not();
$this->getInConstraint($node, $field, $value);
return $node->end();
case Comparison::CONTAINS:
return $parentNode->like()->field($this->getField($field))->literal($value)->end();
case ExtraComparison::NOT_CONTAINS:
return $parentNode->not()->like()->field($this->getField($field))->literal($value)->end()->end();
case ExtraComparison::IS_NULL:
return $parentNode->not()->fieldIsset($this->getField($field))->end();
case ExtraComparison::IS_NOT_NULL:
return $parentNode->fieldIsset($this->getField($field));
}
throw new \RuntimeException('Unknown comparison operator: ' . $comparison->getOperator());
}