public function visitTextComparisonExpression(Expr\TextComparisonExpression $textComparison) { $field = $expr->getField(); $value = $this->visitValueIdentifier($textComparison->getValue()); switch ($textComparison->getOperator()) { case Expr\TextComparisonExpression::MATCH: case Expr\TextComparisonExpression::CONTAIN: return $field . Literals::L_COLON . Literals::L_MATCH . Literals::L_COLON . $value; case Expr\TextComparisonExpression::NOT_MATCH: case Expr\TextComparisonExpression::NOT_CONTAIN: return $field . Literals::L_COLON . Literals::L_NOT_MATCH . Literals::L_COLON . $value; default: throw new \RuntimeException(sprintf('Unknown Operator[%s] for TextComparisonExpression.', (string) $textComparison->getOperator())); } }
/** * postfix * Match postfix * @param mixed $field * @param mixed $value * @access public * @return void */ public function postfix($field, $value) { if (!$value instanceof Expr\ConditionalExpression) { $value = $this->buildPart(Expr\TextComparisonExpression::WILDCARD_STRING . Expr\TextComparisonExpression::escapeString((string) $value)); } return new Expr\TextComparisonExpression($field, $value, Expr\TextComparisonExpression::MATCH); }
public function testBasic() { $escaped = Expr\TextComparisonExpression::escapeString('.abc*123_abc'); $this->assertEquals('\\.abc\\*123_abc', $escaped); }
public function visitTextComparisonExpression(Expr\TextComparisonExpression $textComparison) { // fixme $rawValue = $this->visitValueIdentifier($textComparison->getValue()); $parameterName = str_replace('.', '_', $textComparison->getField()) . '_' . substr(md5($rawValue), 0, 5); $placeHolder = ':' . $parameterName; $qb = $this->getQueryBuilder(); switch ($textComparison->getOperator()) { case Expr\TextComparisonExpression::MATCH: $parameter = new Parameter($parameterName, $this->convertWildcardValue($rawValue)); $qb->getParameters()->add($parameter); return $qb->expr()->like($this->visitField($textComparison->getField()), $placeHolder); case Expr\TextComparisonExpression::NOT_MATCH: $parameter = new Parameter($parameterName, $this->convertWildcardValue($rawValue)); $qb->getParameters()->add($parameter); return $qb->expr()->notLike($this->visitField($textComparison->getField()), $placeHolder); case Expr\TextComparisonExpression::CONTAIN: $parameter = new Parameter($parameterName, '%' . $rawValue . '%'); $qb->getParameters()->add($parameter); return $qb->expr()->like($this->visitField($textComparison->getField()), $placeHolder); case Expr\TextComparisonExpression::NOT_CONTAIN: $parameter = new Parameter($parameterName, '%' . $rawValue . '%'); $qb->getParameters()->add($parameter); return $qb->expr()->notLike($this->visitField($textComparison->getField()), $placeHolder); default: throw new \RuntimeException(sprintf('Unknown Operator[%s] for TextComparisonExpression.', (string) $textComparison->getOperator())); } }