function update_structure($verbose, $action) { global $a, $db; $errors = false; logger('updating structure', LOGGER_DEBUG); // Get the current structure $database = array(); $tables = q("show tables"); foreach ($tables as $table) { $table = current($table); $database[$table] = table_structure($table); } // Get the definition $definition = db_definition(); // Compare it foreach ($definition as $name => $structure) { $sql3 = ""; if (!isset($database[$name])) { $r = db_create_table($name, $structure["fields"], $verbose, $action); if (false === $r) { $errors .= t('Errors encountered creating database tables.') . $name . EOL; } } else { // Drop the index if it isn't present in the definition foreach ($database[$name]["indexes"] as $indexname => $fieldnames) { if (!isset($structure["indexes"][$indexname])) { $sql2 = db_drop_index($indexname); if ($sql3 == "") { $sql3 = "ALTER TABLE `" . $name . "` " . $sql2; } else { $sql3 .= ", " . $sql2; } } } // Compare the field structure field by field foreach ($structure["fields"] as $fieldname => $parameters) { if (!isset($database[$name]["fields"][$fieldname])) { $sql2 = db_add_table_field($fieldname, $parameters); if ($sql3 == "") { $sql3 = "ALTER TABLE `" . $name . "` " . $sql2; } else { $sql3 .= ", " . $sql2; } } else { // Compare the field definition $current_field_definition = implode(",", $database[$name]["fields"][$fieldname]); $new_field_definition = implode(",", $parameters); if ($current_field_definition != $new_field_definition) { $sql2 = db_modify_table_field($fieldname, $parameters); if ($sql3 == "") { $sql3 = "ALTER TABLE `" . $name . "` " . $sql2; } else { $sql3 .= ", " . $sql2; } } } } } // Create the index foreach ($structure["indexes"] as $indexname => $fieldnames) { if (!isset($database[$name]["indexes"][$indexname])) { $sql2 = db_create_index($indexname, $fieldnames); if ($sql2 != "") { if ($sql3 == "") { $sql3 = "ALTER TABLE `" . $name . "` " . $sql2; } else { $sql3 .= ", " . $sql2; } } } } if ($sql3 != "") { $sql3 .= ";"; if ($verbose) { echo $sql3 . "\n"; } if ($action) { $r = @$db->q($sql3); if (false === $r) { $errors .= t('Errors encountered performing database changes.') . $sql3 . EOL; } } } } return $errors; }
function dump_all($data = false) { global $db_name; ob_cleanup(); define('DEBUG_CONSOLE_HIDE', 1); set_time_limit(0); $tables = list_tables(); $table_filter = get('table_filter'); $tables = table_filter($tables, $table_filter); header("Cache-control: private"); header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename=' . date('Ymd') . '_' . $db_name . '.sql'); foreach ($tables as $key => $table) { table_structure($table); if ($data) { table_data($table); } flush(); } exit; }
function dump_all($data = false) { // @dump // @structure // @data GET("table_filter", "string"); global $db_driver, $db_server, $db_name; ob_cleanup(); define('DEBUG_CONSOLE_HIDE', 1); set_time_limit(0); $tables = list_tables(); $table_filter = $_GET["table_filter"]; $tables = table_filter($tables, $table_filter); header("Cache-control: private"); header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename=' . $db_name . '.sql'); echo "--\n"; if ($data) { echo "-- Dump type: DATA & STRUCTURE\n"; } else { echo "-- Dump type: STRUCTURE ONLY\n"; } if ("sqlite" == $db_driver) { echo "-- Database file: {$db_server}\n"; } else { echo "-- Database: {$db_name}\n"; } $date = date("Y-m-d"); echo "-- Exported on: {$date}\n"; $version = DBKISS_VERSION; echo "-- Powered by: DBKiss (http://www.gosu.pl/dbkiss/)\n"; echo "--\n\n"; foreach ($tables as $key => $table) { echo "-- TABLE: \"{$table}\"\n\n"; table_structure($table); if ($data) { echo "-- INSERTS for: \"{$table}\"\n\n"; table_data($table); } flush(); } unset($table); $views = list_tables(true); foreach ($views as $key => $view) { echo "-- VIEW: \"{$view}\"\n\n"; table_structure($view, "view"); flush(); } echo "--\n"; echo "-- END OF DUMP\n"; echo "--\n"; exit; }