Version 1
[yaffs-website] / vendor / drush / drush / lib / Drush / Sql / Sqlsqlite.php
diff --git a/vendor/drush/drush/lib/Drush/Sql/Sqlsqlite.php b/vendor/drush/drush/lib/Drush/Sql/Sqlsqlite.php
new file mode 100644 (file)
index 0000000..2182afb
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+
+namespace Drush\Sql;
+
+use Drush\Log\LogLevel;
+
+class Sqlsqlite extends SqlBase {
+  public function command() {
+    return 'sqlite3';
+  }
+
+  public function creds($hide_password = TRUE) {
+    // SQLite doesn't do user management, instead relying on the filesystem
+    // for that. So the only info we really need is the path to the database
+    // file, and not as a "--key=value" parameter.
+    return ' '  .  $this->db_spec['database'];
+  }
+
+  public function createdb_sql($dbname, $quoted = false) {
+    return '';
+  }
+
+  /**
+   * Create a new database.
+   *
+   * @param boolean $quoted
+   *   Quote the database name. Mysql uses backticks to quote which can cause problems
+   *   in a Windows shell. Set TRUE if the CREATE is not running on the bash command line.
+   */
+  public function createdb($quoted = FALSE) {
+    $file = $this->db_spec['database'];
+    if (file_exists($file)) {
+      drush_log("SQLITE: Deleting existing database '$file'", LogLevel::DEBUG);
+      drush_delete_dir($file, TRUE);
+    }
+
+    // Make sure sqlite can create file
+    $path = dirname($file);
+    drush_log("SQLITE: creating '$path' for creating '$file'", LogLevel::DEBUG);
+    drush_mkdir($path);
+    if (!file_exists($path)) {
+      drush_log("SQLITE: Cannot create $path", LogLevel::ERROR);
+      return FALSE;
+    }
+    else {
+      return TRUE;
+    }
+  }
+
+  public function db_exists() {
+    return file_exists($this->db_spec['database']);
+  }
+
+  public function listTables() {
+    $return = $this->query('.tables');
+    $tables_raw = drush_shell_exec_output();
+    // SQLite's '.tables' command always outputs the table names in a column
+    // format, like this:
+    // table_alpha    table_charlie    table_echo
+    // table_bravo    table_delta      table_foxtrot
+    // â€¦and there doesn't seem to be a way to fix that. So we need to do some
+    // clean-up.
+    foreach ($tables_raw as $line) {
+      preg_match_all('/[^\s]+/', $line, $matches);
+      if (!empty($matches[0])) {
+        foreach ($matches[0] as $match) {
+          $tables[] = $match;
+        }
+      }
+    }
+    return $tables;
+  }
+
+  public function drop($tables) {
+    $sql = '';
+    // SQLite only wants one table per DROP TABLE command (so we have to do
+    // "DROP TABLE foo; DROP TABLE bar;" instead of "DROP TABLE foo, bar;").
+    foreach ($tables as $table) {
+      $sql .= "DROP TABLE $table; ";
+    }
+    return $this->query($sql);
+  }
+
+  public function dumpCmd($table_selection) {
+    // Dumping is usually not necessary in SQLite, since all database data
+    // is stored in a single file which can be copied just
+    // like any other file. But it still has a use in migration purposes and
+    // building human-readable diffs and such, so let's do it anyway.
+    $exec = $this->connect();
+    // SQLite's dump command doesn't support many of the features of its
+    // Postgres or MySQL equivalents. We may be able to fake some in the
+    // future, but for now, let's just support simple dumps.
+    $exec .= ' ".dump"';
+    if ($option = drush_get_option('extra', $this->query_extra)) {
+      $exec .= " $option";
+    }
+    return $exec;
+  }
+
+
+}