MCPcopy Create free account
hub / github.com/Rello/analytics / buildFilterExpression

Method buildFilterExpression

lib/Db/StorageMapper.php:347–392  ·  view source on GitHub ↗
(IQueryBuilder $sql, string $column, string $option, $value)

Source from the content-addressed store, hash-verified

345 }
346
347 private function buildFilterExpression(IQueryBuilder $sql, string $column, string $option, $value)
348 {
349 if (is_array($value)) {
350 $valueNoQuotes = array_map(function($v) {
351 return trim($v, "'");
352 }, $value);
353 } else {
354 $valueNoQuotes = trim($value, "'");
355 }
356
357 if ($option === 'EQ') {
358 return $sql->expr()->eq($column, $sql->createNamedParameter($valueNoQuotes));
359 } elseif ($option === 'GT') {
360 return $sql->expr()->gt($column, $sql->createNamedParameter($valueNoQuotes));
361 } elseif ($option === 'LT') {
362 return $sql->expr()->lt($column, $sql->createNamedParameter($valueNoQuotes));
363 } elseif ($option === 'IN') {
364 preg_match_all("/'(?:[^'\\\\]|\\\\.)*'|[^,;]+/", $value, $matches);
365 $valuesArray = array_map(function($v) {
366 return trim($v, " '");
367 }, $matches[0]);
368
369 $parameter = 'inValues' . (++$this->filterParameterCounter);
370 $sql->setParameter($parameter, $valuesArray, IQueryBuilder::PARAM_STR_ARRAY);
371 return $sql->expr()->in($column, $sql->createParameter($parameter));
372 } elseif ($option === 'LIKE') {
373 return $sql->expr()->like($column, $sql->createNamedParameter($this->buildLikePattern($valueNoQuotes)));
374 } elseif ($option === 'NOTLIKE') {
375 return 'NOT (' . $sql->expr()->like($column, $sql->createNamedParameter($this->buildLikePattern($valueNoQuotes))) . ')';
376 } elseif ($option === 'BETWEEN') {
377 if (is_array($value)) {
378 $start = $value[0];
379 $end = $value[1];
380 } else {
381 list($start, $end) = explode(',', $valueNoQuotes, 2);
382 $start = trim($start);
383 $end = trim($end);
384 }
385 return $sql->expr()->andX(
386 $sql->expr()->gte($column, $sql->createNamedParameter($start)),
387 $sql->expr()->lte($column, $sql->createNamedParameter($end))
388 );
389 }
390
391 return null;
392 }
393
394 private function buildLikePattern(string $value): string
395 {

Callers 1

applyFilterOptionsMethod · 0.95

Calls 1

buildLikePatternMethod · 0.95

Tested by

no test coverage detected