Example #1
0
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;
}
Example #3
0
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;
}