Example #1
0
 /**
  * @param PatternMatch $patternMatch
  *
  * @throws \RuntimeException When an unsupported pattern-match type is provided
  *
  * @return string
  */
 protected function getPatternMatchType(PatternMatch $patternMatch)
 {
     $type = '';
     if ($patternMatch->isExclusive()) {
         $type .= 'NOT_';
     }
     switch ($patternMatch->getType()) {
         case PatternMatch::PATTERN_CONTAINS:
         case PatternMatch::PATTERN_NOT_CONTAINS:
             $type .= 'CONTAINS';
             break;
         case PatternMatch::PATTERN_STARTS_WITH:
         case PatternMatch::PATTERN_NOT_STARTS_WITH:
             $type .= 'STARTS_WITH';
             break;
         case PatternMatch::PATTERN_ENDS_WITH:
         case PatternMatch::PATTERN_NOT_ENDS_WITH:
             $type .= 'ENDS_WITH';
             break;
         case PatternMatch::PATTERN_REGEX:
         case PatternMatch::PATTERN_NOT_REGEX:
             $type .= 'REGEX';
             break;
         case PatternMatch::PATTERN_EQUALS:
         case PatternMatch::PATTERN_NOT_EQUALS:
             $type .= 'EQUALS';
             break;
         default:
             throw new \RuntimeException(sprintf('Unsupported pattern-match type "%s" found. Please report this bug.', $patternMatch->getType()));
     }
     return $type;
 }
 /**
  * {@inheritdoc}
  */
 public function getPatternMatcher(PatternMatch $patternMatch, $column)
 {
     if ($patternMatch->isRegex()) {
         return $this->getMatchSqlRegex($column, $this->connection->quote($patternMatch->getValue()), $patternMatch->isCaseInsensitive(), $patternMatch->isExclusive());
     }
     if (in_array($patternMatch->getType(), [PatternMatch::PATTERN_EQUALS, PatternMatch::PATTERN_NOT_EQUALS], true)) {
         $value = $this->connection->quote($patternMatch->getValue());
         if ($patternMatch->isCaseInsensitive()) {
             $column = "LOWER({$column})";
             $value = "LOWER({$value})";
         }
         return $column . ($patternMatch->isExclusive() ? ' <>' : ' =') . " {$value}";
     }
     $patternMap = [PatternMatch::PATTERN_STARTS_WITH => '%%%s', PatternMatch::PATTERN_NOT_STARTS_WITH => '%%%s', PatternMatch::PATTERN_CONTAINS => '%%%s%%', PatternMatch::PATTERN_NOT_CONTAINS => '%%%s%%', PatternMatch::PATTERN_ENDS_WITH => '%s%%', PatternMatch::PATTERN_NOT_ENDS_WITH => '%s%%'];
     $value = addcslashes($patternMatch->getValue(), $this->getLikeEscapeChars());
     $value = $this->connection->quote(sprintf($patternMap[$patternMatch->getType()], $value));
     $escape = $this->connection->quote('\\');
     if ($patternMatch->isCaseInsensitive()) {
         $column = "LOWER({$column})";
         $value = "LOWER({$value})";
     }
     return $column . ($patternMatch->isExclusive() ? ' NOT' : '') . " LIKE {$value} ESCAPE {$escape}";
 }
 /**
  * @param PatternMatch $patternMatch
  *
  * @throws \RuntimeException When an unsupported pattern-match type is found
  *
  * @return string
  */
 private function getPatternMatchOperator(PatternMatch $patternMatch)
 {
     $operator = $patternMatch->isCaseInsensitive() ? '~i' : '~';
     if ($patternMatch->isExclusive()) {
         $operator .= '!';
     }
     switch ($patternMatch->getType()) {
         case PatternMatch::PATTERN_CONTAINS:
         case PatternMatch::PATTERN_NOT_CONTAINS:
             $operator .= '*';
             break;
         case PatternMatch::PATTERN_STARTS_WITH:
         case PatternMatch::PATTERN_NOT_STARTS_WITH:
             $operator .= '>';
             break;
         case PatternMatch::PATTERN_ENDS_WITH:
         case PatternMatch::PATTERN_NOT_ENDS_WITH:
             $operator .= '<';
             break;
         case PatternMatch::PATTERN_REGEX:
         case PatternMatch::PATTERN_NOT_REGEX:
             $operator .= '?';
             break;
         case PatternMatch::PATTERN_EQUALS:
         case PatternMatch::PATTERN_NOT_EQUALS:
             $operator .= '=';
             break;
         default:
             throw new \RuntimeException(sprintf('Unsupported pattern-match type "%s" found. Please report this bug.', $patternMatch->getType()));
     }
     return $operator;
 }