You are here

public function DatabaseConnection_sqlsrv::preprocessQuery in Drupal driver for SQL Server and SQL Azure 7.2

Same name and namespace in other branches
  1. 7.3 sqlsrv/database.inc \DatabaseConnection_sqlsrv::preprocessQuery()
  2. 7 sqlsrv/database.inc \DatabaseConnection_sqlsrv::preprocessQuery()

Internal function: massage a query to make it compliant with SQL Server.

1 call to DatabaseConnection_sqlsrv::preprocessQuery()
DatabaseConnection_sqlsrv::PDOPrepare in sqlsrv/database.inc
Internal function: prepare a query by calling PDO directly.

File

sqlsrv/database.inc, line 596
Database interface code for Microsoft SQL Server.

Class

DatabaseConnection_sqlsrv
Summary of DatabaseConnection_sqlsrv

Code

public function preprocessQuery($query) {

  // Force quotes around some SQL Server reserved keywords.
  if (preg_match('/^SELECT/i', $query)) {
    $query = preg_replace_callback(self::RESERVED_REGEXP, array(
      $this,
      'replaceReservedCallback',
    ), $query);
  }

  // Last chance to modify some SQL Server-specific syntax.
  $replacements = array();

  // Add prefixes to Drupal-specific functions.
  $defaultSchema = $this
    ->schema()
    ->GetDefaultSchema();
  foreach ($this
    ->schema()
    ->DrupalSpecificFunctions() as $function) {
    $replacements['/\\b(?<![:.])(' . preg_quote($function) . ')\\(/i'] = "{$defaultSchema}.\$1(";
  }

  // Rename some functions.
  $funcs = array(
    'LENGTH' => 'LEN',
    'POW' => 'POWER',
  );
  foreach ($funcs as $function => $replacement) {
    $replacements['/\\b(?<![:.])(' . preg_quote($function) . ')\\(/i'] = $replacement . '(';
  }

  // Replace the ANSI concatenation operator with SQL Server poor one.
  $replacements['/\\|\\|/'] = '+';

  // Now do all the replacements at once.
  $query = preg_replace(array_keys($replacements), array_values($replacements), $query);
  return $query;
}