From b86e091fcd0567450c5cbef2207780e265865b2d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 28 Feb 2015 10:17:32 +0100 Subject: Add initdb.sh to create database from initial.sql script with prefix support (#1490188) --- bin/initdb.sh | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 bin/initdb.sh (limited to 'bin') diff --git a/bin/initdb.sh b/bin/initdb.sh new file mode 100755 index 000000000..bf3244876 --- /dev/null +++ b/bin/initdb.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env php + | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array( + 'd' => 'dir', +)); + +if (empty($opts['dir'])) { + rcube::raise_error("Database schema directory not specified (--dir).", false, true); +} + +// Check if directory exists +if (!file_exists($opts['dir'])) { + rcube::raise_error("Specified database schema directory doesn't exist.", false, true); +} + +$RC = rcube::get_instance(); +$DB = rcube_db::factory($RC->config->get('db_dsnw')); + +$DB->set_debug((bool)$RC->config->get('sql_debug')); + +// Connect to database +$DB->db_connect('w'); +if (!$DB->is_connected()) { + rcube::raise_error("Error connecting to database: " . $DB->is_error(), false, true); +} + +$file = $opts['dir'] . '/' . $DB->db_provider . '.initial.sql'; +if (!file_exists($file)) { + rcube::raise_error("DDL file $file not found", false, true); +} + +echo "Creating database schema... "; + +if ($sql = file_get_contents($file)) { + if (!$DB->exec_script($sql)) { + $error = $DB->is_error(); + } +} +else { + $error = "Unable to read file $file or it is empty"; +} + +if ($error) { + echo "[FAILED]\n"; + rcube::raise_error($error, false, true); +} +else { + echo "[OK]\n"; +} + +?> -- cgit v1.2.3