Version 1
[yaffs-website] / vendor / drush / drush / includes / dbtng.inc
diff --git a/vendor/drush/drush/includes/dbtng.inc b/vendor/drush/drush/includes/dbtng.inc
new file mode 100644 (file)
index 0000000..e7e105b
--- /dev/null
@@ -0,0 +1,194 @@
+<?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".
+ */