diff options
author | Aleksander Machniak <alec@alec.pl> | 2015-02-28 10:17:32 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2015-02-28 10:17:32 +0100 |
commit | b86e091fcd0567450c5cbef2207780e265865b2d (patch) | |
tree | 632f5ad39fe07449996f0495a3cc151619219014 /bin | |
parent | b7abf8412c9dbaeeaf95357715b5c241a1742c44 (diff) |
Add initdb.sh to create database from initial.sql script with prefix support (#1490188)
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/initdb.sh | 75 |
1 files changed, 75 insertions, 0 deletions
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 +<?php +/* + +-----------------------------------------------------------------------+ + | bin/initdb.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2015, The Roundcube Dev Team | + | Copyright (C) 2010-2015, Kolab Systems AG | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Create database schema | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +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"; +} + +?> |