X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fdrush%2Fdrush%2Fincludes%2Fdbtng.inc;fp=vendor%2Fdrush%2Fdrush%2Fincludes%2Fdbtng.inc;h=e7e105b82a0f902e60c6d155fa20282436aa8caa;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/vendor/drush/drush/includes/dbtng.inc b/vendor/drush/drush/includes/dbtng.inc new file mode 100644 index 000000000..e7e105b82 --- /dev/null +++ b/vendor/drush/drush/includes/dbtng.inc @@ -0,0 +1,194 @@ + $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". + */