public static function Condition::translateCondition

public static Condition::translateCondition(&$condition, SelectInterface $sql_query, $case_sensitive)

Translates the string operators to SQL equivalents.

Parameters

array $condition: The condition array.

\Drupal\Core\Database\Query\SelectInterface $sql_query: Select query instance.

bool|null $case_sensitive: If the condition should be case sensitive or not, NULL if the field does not define it.

See also

\Drupal\Core\Database\Query\ConditionInterface::condition()

File

core/lib/Drupal/Core/Entity/Query/Sql/Condition.php, line 86

Class

Condition
Implements entity query conditions for SQL databases.

Namespace

Drupal\Core\Entity\Query\Sql

Code

public static function translateCondition(&$condition, SelectInterface $sql_query, $case_sensitive) {
  // // There is nothing we can do for IN ().
  if (is_array($condition['value'])) {
    return;
  }

  // Ensure that the default operator is set to simplify the cases below.
  if (empty($condition['operator'])) {
    $condition['operator'] = '=';
  }
  switch ($condition['operator']) {
    case '=':
      // If a field explicitly requests that queries should not be case
      // sensitive, use the LIKE operator, otherwise keep =.
      if ($case_sensitive === FALSE) {
        $condition['value'] = $sql_query->escapeLike($condition['value']);
        $condition['operator'] = 'LIKE';
      }
      break;
    case '<>':
      // If a field explicitly requests that queries should not be case
      // sensitive, use the NOT LIKE operator, otherwise keep <>.
      if ($case_sensitive === FALSE) {
        $condition['value'] = $sql_query->escapeLike($condition['value']);
        $condition['operator'] = 'NOT LIKE';
      }
      break;
    case 'STARTS_WITH':
      if ($case_sensitive) {
        $condition['operator'] = 'LIKE BINARY';
      }
      else {
        $condition['operator'] = 'LIKE';
      }
      $condition['value'] = $sql_query->escapeLike($condition['value']) . '%';
      break;

    case 'CONTAINS':
      if ($case_sensitive) {
        $condition['operator'] = 'LIKE BINARY';
      }
      else {
        $condition['operator'] = 'LIKE';
      }
      $condition['value'] = '%' . $sql_query->escapeLike($condition['value']) . '%';
      break;

    case 'ENDS_WITH':
      if ($case_sensitive) {
        $condition['operator'] = 'LIKE BINARY';
      }
      else {
        $condition['operator'] = 'LIKE';
      }
      $condition['value'] = '%' . $sql_query->escapeLike($condition['value']);
      break;
  }
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Query!Sql!Condition.php/function/Condition::translateCondition/8.1.x