From e0c5ffc792657f5fb3ff1f0774cfcd18befb8175 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 14 Feb 2008 18:13:29 +0000 Subject: A simple beginning to an install script git-svn-id: https://code.elgg.org/elgg/trunk@34 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/database.php | 81 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 5 deletions(-) (limited to 'engine/lib/database.php') diff --git a/engine/lib/database.php b/engine/lib/database.php index aa7deb97a..66383afe3 100644 --- a/engine/lib/database.php +++ b/engine/lib/database.php @@ -221,17 +221,88 @@ } - /** - * Returns the number of rows returned by the last select statement, without the need to re-execute the query. - * - * @return int The number of rows returned by the last statement - */ + /** + * Returns the number of rows returned by the last select statement, without the need to re-execute the query. + * + * @return int The number of rows returned by the last statement + */ function count_last_select() { $row = get_data_row("SELECT found_rows() as count"); if ($row) return $row->count; return 0; } + + /** + * Get the tables currently installed in the Elgg database + * + * @return array List of tables + */ + function get_db_tables() { + $result = get_data("show tables"); + $result = (array) $result; + + $tables = array(); + + if (is_array($result)) { + foreach($result as $row) { + foreach($row as $element) { + $tables[] = $element; + } + } + } + + return $tables; + } + + /** + * Get the last database error for a particular database link + * + * @param database link $dblink + * @return string Database error message + */ + function get_db_error($dblink) { + return mysql_error($dblink); + } + + /** + * Runs a full database script from disk + * + * @param string $scriptlocation The full apth to the script + */ + function run_sql_script($scriptlocation) { + + if ($script = file_get_contents($scriptlocation)) { + + $errors = array(); + + $script = preg_replace('/\-\-.*\n/', '', $script); + $sql_statements = preg_split('/;[\n\r]+/', $script); + foreach($sql_statements as $statement) { + $statement = trim($statement); + if (!empty($statement)) { + $result = update_data($statement); + if ($result == false) { + $error = mysql_error(); + $error = trim($error); + if (!empty($error)) { + $errors[] = $error; + } + } + } + } + if (!empty($errors)) { + $errortxt = ""; + foreach($errors as $error) + $errortxt .= " {$error};"; + throw new DatabaseException("There were a number of issues: " . $errortxt); + } + + } else { + throw new DatabaseException("Elgg couldn't find the requested database script at {$scriptlocation}."); + } + + } // Stuff for initialisation -- cgit v1.2.3