+++ /dev/null
-<?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;
- }
-
-
-}