You are here

protected function Condition::mapConditionOperator in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Database/Query/Condition.php \Drupal\Core\Database\Query\Condition::mapConditionOperator()

Gets any special processing requirements for the condition operator.

Some condition types require special processing, such as IN, because the value data they pass in is not a simple value. This is a simple overridable lookup function.

Parameters

$operator: The condition operator, such as "IN", "BETWEEN", etc. Case-sensitive.

Return value

array The extra handling directives for the specified operator or an empty array if there are no extra handling directives.

1 call to Condition::mapConditionOperator()
Condition::compile in core/lib/Drupal/Core/Database/Query/Condition.php
Compiles the saved conditions for later retrieval.

File

core/lib/Drupal/Core/Database/Query/Condition.php, line 304
Contains \Drupal\Core\Database\Query\Condition.

Class

Condition
Generic class for a series of conditions in a query.

Namespace

Drupal\Core\Database\Query

Code

protected function mapConditionOperator($operator) {

  // $specials does not use drupal_static as its value never changes.
  static $specials = array(
    'BETWEEN' => array(
      'delimiter' => ' AND ',
    ),
    'IN' => array(
      'delimiter' => ', ',
      'prefix' => ' (',
      'postfix' => ')',
    ),
    'NOT IN' => array(
      'delimiter' => ', ',
      'prefix' => ' (',
      'postfix' => ')',
    ),
    'EXISTS' => array(
      'prefix' => ' (',
      'postfix' => ')',
    ),
    'NOT EXISTS' => array(
      'prefix' => ' (',
      'postfix' => ')',
    ),
    'IS NULL' => array(
      'use_value' => FALSE,
    ),
    'IS NOT NULL' => array(
      'use_value' => FALSE,
    ),
    // Use backslash for escaping wildcard characters.
    'LIKE' => array(
      'postfix' => " ESCAPE '\\\\'",
    ),
    'NOT LIKE' => array(
      'postfix' => " ESCAPE '\\\\'",
    ),
    // These ones are here for performance reasons.
    '=' => array(),
    '<' => array(),
    '>' => array(),
    '>=' => array(),
    '<=' => array(),
  );
  if (isset($specials[$operator])) {
    $return = $specials[$operator];
  }
  else {

    // We need to upper case because PHP index matches are case sensitive but
    // do not need the more expensive Unicode::strtoupper() because SQL statements are ASCII.
    $operator = strtoupper($operator);
    $return = isset($specials[$operator]) ? $specials[$operator] : array();
  }
  $return += array(
    'operator' => $operator,
  );
  return $return;
}