+++ /dev/null
-<?php
-
-/**
- * @file
- * Wrappers to abstract database operations from Drupal version.
- */
-
-/**
- * @defgroup dbfunctions Database convenience functions.
- * @{
- */
-
-/**
- * Replace named placeholders in a WHERE snippet.
- *
- * Helper function to allow the usage of Drupal 7+ WHERE snippets
- * with named placeholders in code for Drupal 6.
- *
- * @param $where
- * String with a WHERE snippet using named placeholders.
- * @param $args
- * Array of placeholder values.
- * @return
- * String. $where filled with literals from $args.
- */
-function _drush_replace_query_placeholders($where, $args) {
- foreach ($args as $key => $data) {
- if (is_array($data)) {
- $new_keys = array();
- // $data can't have keys that are a prefix of other keys to
- // prevent a corrupted result in the below calls to str_replace().
- // To avoid this we will use a zero padded indexed array of the values of $data.
- $pad_length = strlen((string)count(array_values($data)));
- foreach (array_values($data) as $i => $value) {
- if (!is_numeric($value)) {
- $value = "'".$value."'";
- }
- $new_keys[$key . '_' . str_pad($i, $pad_length, '0', STR_PAD_LEFT)] = $value;
- }
- $where = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $where);
- unset($args[$key]);
- $args += $new_keys;
- }
- else if (!is_numeric($data)) {
- $args[$key] = "'".$data."'";
- }
- }
-
- foreach ($args as $key => $data) {
- $where = str_replace($key, $data, $where);
- }
-
- return $where;
-}
-
-/**
- * A db_select() that works for any version of Drupal.
- *
- * @param $table
- * String. The table to operate on.
- * @param $fields
- * Array or string. Fields affected in this operation. Valid string values are '*' or a single column name.
- * @param $where
- * String. WHERE snippet for the operation. It uses named placeholders. see @_drush_replace_query_placeholders()
- * @param $args
- * Array. Arguments for the WHERE snippet.
- * @param $start
- * Int. Value for OFFSET.
- * @param $length
- * Int. Value for LIMIT.
- * @param $order_by_field
- * String. Database column to order by.
- * @param $order_by_direction
- * ('ASC', 'DESC'). Ordering direction.
- * @return
- * A database resource.
- */
-function drush_db_select($table, $fields = '*', $where = NULL, $args = NULL, $start = NULL, $length = NULL, $order_by_field = NULL, $order_by_direction = 'ASC') {
- if (drush_drupal_major_version() >= 7) {
- if (!is_array($fields)) {
- if ($fields == '*') {
- $fields = array();
- }
- else {
- $fields = array($fields);
- }
- }
- $query = db_select($table, $table)
- ->fields($table, $fields);
- if (!empty($where)) {
- $query = $query->where($where, $args);
- }
- if (isset($order_by_field)) {
- $query = $query->orderBy($order_by_field, $order_by_direction);
- }
- if (isset($length)) {
- $query = $query->range($start, $length);
- }
- return $query->execute();
- }
- else {
- if (is_array($fields)) {
- $fields = implode(', ', $fields);
- }
- $query = "SELECT $fields FROM {{$table}}";
- if (!empty($where)) {
- $where = _drush_replace_query_placeholders($where, $args);
- $query .= " WHERE ".$where;
- }
- if (isset($order_by_field)) {
- $query .= " ORDER BY $order_by_field $order_by_direction";
- }
- if (isset($length)) {
- $sql = drush_sql_get_class();
- $db_scheme = $sql->scheme();
- if ($db_scheme == 'oracle')
- return db_query_range($query, $start, $length);
- else {
- $limit = " LIMIT $length";
- if (isset($start)) {
- $limit .= " OFFSET $start";
- }
- $query .= $limit;
- }
- }
-
- return db_query($query, $args);
- }
-}
-
-/**
- * A db_delete() that works for any version of Drupal.
- *
- * @param $table
- * String. The table to operate on.
- * @param $where
- * String. WHERE snippet for the operation. It uses named placeholders. see @_drush_replace_query_placeholders()
- * @param $args
- * Array. Arguments for the WHERE snippet.
- * @return
- * Affected rows (except on D7+mysql without a WHERE clause - returns TRUE) or FALSE.
- */
-function drush_db_delete($table, $where = NULL, $args = NULL) {
- if (drush_drupal_major_version() >= 7) {
- if (!empty($where)) {
- $query = db_delete($table)->where($where, $args);
- return $query->execute();
- }
- else {
- return db_truncate($table)->execute();
- }
- }
- else {
- $query = "DELETE FROM {{$table}}";
- if (!empty($where)) {
- $where = _drush_replace_query_placeholders($where, $args);
- $query .= ' WHERE '.$where;
- }
- if (!db_query($query, $args)) {
- return FALSE;
- }
- return db_affected_rows();
- }
-}
-
-/**
- * A db_result() that works consistently for any version of Drupal.
- *
- * @param
- * A Database result object.
- */
-function drush_db_result($result) {
- switch (drush_drupal_major_version()) {
- case 6:
- return db_result($result);
- case 7:
- default:
- return $result->fetchField();
- }
-}
-
-/**
- * A db_fetch_object() that works for any version of Drupal.
- *
- * @param
- * A Database result object.
- */
-function drush_db_fetch_object($result) {
- return drush_drupal_major_version() >= 7 ? $result->fetchObject() : db_fetch_object($result);
-}
-
-/**
- * @} End of "defgroup dbfunctions".
- */