예제 #1
0
function create_tables($dsn)
{
    // {{{
    if (substr($dsn, 0, 5) == "mysql") {
        $engine = new MySQL();
    } else {
        if (substr($dsn, 0, 5) == "pgsql") {
            $engine = new PostgreSQL();
        } else {
            if (substr($dsn, 0, 6) == "sqlite") {
                $engine = new SQLite();
            } else {
                die("Unknown database engine; Shimmie currently officially supports MySQL\n\t\t(mysql://), with hacks for Postgres (pgsql://) and SQLite (sqlite://)");
            }
        }
    }
    $db = NewADOConnection($dsn);
    if (!$db) {
        die("Couldn't connect to \"{$dsn}\"");
    } else {
        $engine->init($db);
        $db->execute($engine->create_table_sql("aliases", "\n\t\t\toldtag VARCHAR(128) NOT NULL PRIMARY KEY,\n\t\t\tnewtag VARCHAR(128) NOT NULL,\n\t\t\tINDEX(newtag)\n\t\t"));
        $db->execute($engine->create_table_sql("config", "\n\t\t\tname VARCHAR(128) NOT NULL PRIMARY KEY,\n\t\t\tvalue TEXT\n\t\t"));
        $db->execute($engine->create_table_sql("users", "\n\t\t\tid SCORE_AIPK,\n\t\t\tname VARCHAR(32) UNIQUE NOT NULL,\n\t\t\tpass CHAR(32),\n\t\t\tjoindate SCORE_DATETIME NOT NULL DEFAULT SCORE_NOW,\n\t\t\tadmin SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,\n\t\t\temail VARCHAR(128)\n\t\t"));
        $db->execute($engine->create_table_sql("images", "\n\t\t\tid SCORE_AIPK,\n\t\t\towner_id INTEGER NOT NULL,\n\t\t\towner_ip SCORE_INET NOT NULL,\n\t\t\tfilename VARCHAR(64) NOT NULL,\n\t\t\tfilesize INTEGER NOT NULL,\n\t\t\thash CHAR(32) UNIQUE NOT NULL,\n\t\t\text CHAR(4) NOT NULL,\n\t\t\tsource VARCHAR(255),\n\t\t\twidth INTEGER NOT NULL,\n\t\t\theight INTEGER NOT NULL,\n\t\t\tposted SCORE_DATETIME NOT NULL DEFAULT SCORE_NOW,\n\t\t\tlocked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,\n\t\t\tINDEX(owner_id),\n\t\t\tINDEX(width),\n\t\t\tINDEX(height),\n\t\t\tFOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE\n\t\t"));
        $db->execute($engine->create_table_sql("tags", "\n\t\t\tid SCORE_AIPK,\n\t\t\ttag VARCHAR(64) UNIQUE NOT NULL,\n\t\t\tcount INTEGER NOT NULL DEFAULT 0\n\t\t"));
        $db->execute($engine->create_table_sql("image_tags", "\n\t\t\timage_id INTEGER NOT NULL,\n\t\t\ttag_id INTEGER NOT NULL,\n\t\t\tINDEX(image_id),\n\t\t\tINDEX(tag_id),\n\t\t\tUNIQUE(image_id, tag_id),\n\t\t\tFOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,\n\t\t\tFOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n\t\t"));
        $db->execute("INSERT INTO config(name, value) VALUES('db_version', 8)");
    }
    $db->Close();
}