get rid of xmlschema

This commit is contained in:
Shish 2009-01-22 04:05:55 -08:00
parent 64fb261b87
commit 44ac62e1ae
15 changed files with 171 additions and 2586 deletions

View File

@ -104,14 +104,14 @@ class EventLog implements Extension {
global $config;
if($config->get_int("ext_event_log_version", 0) < 1) {
$database->Execute("CREATE TABLE event_log (
id int(11) NOT NULL auto_increment primary key,
owner_id int(11) NOT NULL,
owner_ip char(15) NOT NULL,
date datetime NOT NULL,
event varchar(32) NOT NULL,
entry varchar(255) NOT NULL
)");
$database->create_table("event_log", "
id SCORE_AIPK,
owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
owner_ip SCORE_INET NOT NULL,
date DATETIME NOT NULL,
event VARCHAR(32) NOT NULL,
entry TEXT NOT NULL
");
$config->set_int("ext_event_log_version", 1);
}
}

View File

@ -116,13 +116,12 @@ class ImageBan implements Extension {
protected function install() {
global $database;
global $config;
$database->Execute("CREATE TABLE image_bans (
id int(11) NOT NULL auto_increment,
hash char(32) default NULL,
date datetime default NULL,
reason varchar(255) default NULL,
PRIMARY KEY (id)
)");
$database->create_table("image_bans", "
id SCORE_AIPK,
hash CHAR(32) NOT NULL,
date DATETIME DEFAULT now(),
reason TEXT NOT NULL,
");
$config->set_int("ext_imageban_version", 1);
}

View File

@ -103,15 +103,13 @@ class IPBan implements Extension {
// shortcut to latest
if($config->get_int("ext_ipban_version") < 1) {
$database->execute("
CREATE TABLE bans (
id {$database->engine->auto_increment},
banner_id INTEGER NOT NULL,
ip VARCHAR(15) NOT NULL,
end_timestamp INTEGER,
reason TEXT NOT NULL,
INDEX (end_timestamp)
) {$database->engine->create_table_extras};
$database->create_table("bans", "
id SCORE_AIPK,
banner_id INTEGER NOT NULL,
ip SCORE_INET NOT NULL,
end_timestamp INTEGER,
reason TEXT NOT NULL,
INDEX (end_timestamp)
");
$config->set_int("ext_ipban_version", 6);
}

View File

@ -31,21 +31,21 @@ class Notes implements Extension {
protected function install() {
global $database;
global $config;
$database->Execute("CREATE TABLE image_notes (
id int(11) NOT NULL auto_increment PRIMARY KEY,
image_id int(11) NOT NULL,
user_id int(11) NOT NULL,
owner_ip char(15) NOT NULL,
created_at datetime NOT NULL,
updated_at datetime NOT NULL,
version int(11) DEFAULT 1 NOT NULL,
is_active enum('Y', 'N') DEFAULT 'Y' NOT NULL,
x int(11) NOT NULL,
y int(11) NOT NULL,
w int(11) NOT NULL,
h int(11) NOT NULL,
body text NOT NULL
)");
$database->create_table("image_notes", "
id SCORE_AIPK,
image_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
owner_ip SCORE_INET NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
version INTEGER DEFAULT 1 NOT NULL,
is_active SCORE_BOOL DEFAULT SCORE_BOOL_Y NOT NULL,
x INTEGER NOT NULL,
y INTEGER NOT NULL,
w INTEGER NOT NULL,
h INTEGER NOT NULL,
body TEXT NOT NULL
");
$config->set_int("ext_notes_version", 1);
}
}

View File

@ -92,14 +92,12 @@ class NumericScore implements Extension {
if($config->get_int("ext_numeric_score_version") < 1) {
$database->Execute("ALTER TABLE images ADD COLUMN numeric_score INTEGER NOT NULL DEFAULT 0");
$database->Execute("CREATE INDEX images__numeric_score ON images(numeric_score)");
$database->Execute("
CREATE TABLE numeric_score_votes (
image_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
score INTEGER NOT NULL,
UNIQUE(image_id, user_id),
INDEX(image_id)
)
$database->create_table("numeric_score_votes", "
image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
score INTEGER NOT NULL,
UNIQUE(image_id, user_id),
INDEX(image_id)
");
$config->set_int("ext_numeric_score_version", 1);
}

View File

@ -121,18 +121,16 @@ class PM implements Extension {
// shortcut to latest
if($config->get_int("pm_version") < 1) {
$database->execute("
CREATE TABLE private_message (
id {$database->engine->auto_increment},
from_id INTEGER NOT NULL,
from_ip VARCHAR(15) NOT NULL,
to_id INTEGER NOT NULL,
sent_date DATETIME NOT NULL,
subject VARCHAR(64) NOT NULL,
message TEXT NOT NULL,
is_read ENUM('Y', 'N') NOT NULL DEFAULT 'N',
INDEX (to_id)
) {$database->engine->create_table_extras};
$database->create_table("private_message", "
id SCORE_AIPK,
from_id INTEGER NOT NULL,
from_ip SCORE_INET NOT NULL,
to_id INTEGER NOT NULL,
sent_date DATETIME NOT NULL,
subject VARCHAR(64) NOT NULL,
message TEXT NOT NULL,
is_read SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
INDEX (to_id)
");
$config->set_int("pm_version", 1);
}

View File

@ -115,12 +115,12 @@ class ReportImage implements Extension {
global $database;
global $config;
if($config->get_int("ext_report_image_version") < 1) {
$database->Execute("CREATE TABLE image_reports (
id {$database->engine->auto_increment},
image_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
$database->create_table("image_reports", "
id SCORE_AIPK,
image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
reporter_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
reason TEXT NOT NULL
)");
");
$config->set_int("ext_report_image_version", 1);
}
}

View File

@ -67,12 +67,11 @@ class Tag_History implements Extension {
global $config;
if($config->get_int("ext_tag_history_version") < 1) {
$database->Execute("CREATE TABLE tag_histories
(
id integer NOT NULL auto_increment PRIMARY KEY,
image_id integer NOT NULL,
tags text NOT NULL
)");
$database->create_table("tag_histories", "
id SCORE_AIPK,
image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
tags TEXT NOT NULL
");
$config->set_int("ext_tag_history_version", 1);
}

View File

@ -81,14 +81,12 @@ class TextScore implements Extension {
if($config->get_int("ext_text_score_version") < 1) {
$database->Execute("ALTER TABLE images ADD COLUMN text_score INTEGER NOT NULL DEFAULT 0");
$database->Execute("CREATE INDEX images__text_score ON images(text_score)");
$database->Execute("
CREATE TABLE text_score_votes (
image_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
score INTEGER NOT NULL,
UNIQUE(image_id, user_id),
INDEX(image_id)
)
$database->create_table("text_score_votes", "
image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
score INTEGER NOT NULL,
UNIQUE(image_id, user_id),
INDEX(image_id)
");
$config->set_int("ext_text_score_version", 1);
}

View File

@ -147,17 +147,18 @@ class Wiki implements Extension {
global $config;
if($config->get_int("ext_wiki_version", 0) < 1) {
$database->Execute("CREATE TABLE wiki_pages (
id int(11) NOT NULL auto_increment,
owner_id int(11) NOT NULL,
owner_ip char(15) NOT NULL,
date datetime default NULL,
title varchar(255) NOT NULL,
revision int(11) NOT NULL default 1,
body text NOT NULL,
PRIMARY KEY (id), UNIQUE (title, revision)
)");
$config->set_int("ext_wiki_version", 1);
$database->create_table("wiki_pages", "
id SCORE_AIPK,
owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
owner_ip SCORE_INET NOT NULL,
date DATETIME DEFAULT NULL,
title VARCHAR(255) NOT NULL,
revision INTEGER NOT NULL DEFAULT 1,
locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
body TEXT NOT NULL,
UNIQUE (title, revision)
");
$config->set_int("ext_wiki_version", 2);
}
if($config->get_int("ext_wiki_version") < 2) {
$database->Execute("ALTER TABLE wiki_pages ADD COLUMN

View File

@ -53,22 +53,45 @@ class ImgQuerylet {
class DBEngine {
var $name = null;
var $auto_increment = null;
var $inet = null;
var $create_table_extras = "";
public function create_table_sql($name, $data) {
return "CREATE TABLE $name ($data)";
}
}
class MySQL extends DBEngine {
var $name = "mysql";
var $auto_increment = "INTEGER PRIMARY KEY auto_increment";
var $create_table_extras = "TYPE=INNODB DEFAULT CHARSET='utf8'";
function init($db) {
public function init($db) {
$db->Execute("SET NAMES utf8;");
}
public function create_table_sql($name, $data) {
$data = str_replace($data, "SCORE_AIPK", "INTEGER PRIMARY KEY auto_increment");
$data = str_replace($data, "SCORE_INET", "CHAR(15)");
$data = str_replace($data, "SCORE_BOOL", "ENUM('Y', 'N')");
$data = str_replace($data, "SCORE_BOOL_Y", "'Y'");
$data = str_replace($data, "SCORE_BOOL_N", "'N'");
$data = str_replace($data, "SCORE_NOW", "now()");
$ctes = "TYPE=InnoDB DEFAULT CHARSET='utf8'";
return "CREATE TABLE $name ($data) $ctes";
}
}
class PostgreSQL extends DBEngine {
var $name = "pgsql";
var $auto_increment = "SERIAL PRIMARY KEY";
function init($db) {
public function init($db) {
}
public function create_table_sql($name, $data) {
$data = str_replace($data, "SCORE_AIPK", "SERIAL PRIMARY KEY");
$data = str_replace($data, "SCORE_INET", "INET");
$data = str_replace($data, "SCORE_BOOL", "BOOL",);
$data = str_replace($data, "SCORE_BOOL_Y", "'t'");
$data = str_replace($data, "SCORE_BOOL_N", "'f'");
$data = str_replace($data, "SCORE_NOW", "current_time");
return "CREATE TABLE $name ($data)";
}
}
// }}}
@ -180,7 +203,6 @@ class Database {
}
}
// safety wrapping {{{
public function execute($query, $args=array()) {
$result = $this->db->Execute($query, $args);
if($result === False) {
@ -220,9 +242,7 @@ class Database {
}
public function create_table($name, $data) {
$data = str_replace($data, "SCORE_AIPK", $this->engine->auto_increment);
$ctes = $this->engine->create_table_extras;
$this->execute("CREATE TABLE $name ($data) $ctes");
$this->execute($this->engine->create_table_sql($name, $data));
}
public function upgrade_schema($filename) {
@ -248,6 +268,5 @@ class Database {
$config->set_bool("in_upgrade", false);
}
// }}}
}
?>

View File

@ -160,17 +160,17 @@ class CommentList implements Extension {
// shortcut to latest
if($config->get_int("ext_comments_version") < 1) {
$database->Execute("CREATE TABLE comments (
id {$database->engine->auto_increment},
image_id INTEGER NOT NULL,
owner_id INTEGER NOT NULL,
owner_ip CHAR(16) NOT NULL,
$database->create_table("comments", "
id SCORE_AIPK,
image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
owner_ip SCORE_INET NOT NULL,
posted DATETIME DEFAULT NULL,
comment TEXT NOT NULL,
INDEX (image_id),
INDEX (owner_ip),
INDEX (posted)
) {$database->engine->create_table_extras}");
");
$config->set_int("ext_comments_version", 2);
}

View File

@ -1,68 +0,0 @@
<?xml version="1.0"?>
<schema version="0.3">
<!-- FIXME: mysql utf8ness -->
<table name="aliases">
<field name="oldtag" type="C" size="128"><key/><notnull/></field>
<field name="newtag" type="C" size="128"><notnull/></field>
<index name="aliases__unique"><col>oldtag</col><col>newtag</col><unique/></index>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<table name="config">
<field name="name" type="C" size="128"><key/><notnull/></field>
<field name="value" type="X" size="4000"></field>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<table name="images">
<field name="id" type="I"><key/><autoincrement/></field>
<field name="owner_id" type="I"><notnull/></field>
<field name="owner_ip" type="C" size="15"><notnull/></field>
<field name="filename" type="C" size="64"><notnull/></field>
<field name="filesize" type="I"><notnull/></field>
<field name="hash" type="C" size="32"><notnull/></field>
<field name="ext" type="C" size="4"><notnull/></field>
<field name="source" type="C" size="249"></field>
<field name="width" type="I"><notnull/></field>
<field name="height" type="I"><notnull/></field>
<field name="posted" type="T"><notnull/></field>
<index name="images__owner_id"><col>owner_id</col></index>
<index name="images__hash"><col>hash</col><unique/></index>
<index name="images__width"><col>width</col></index>
<index name="images__height"><col>height</col></index>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<table name="users">
<field name="id" type="I"><key/><autoincrement/></field>
<field name="name" type="C" size="32"><notnull/></field>
<field name="pass" type="C" size="32"></field>
<field name="joindate" type="T"><notnull/></field>
<field name="admin" type="C" size="1"><notnull/><default value="N"/></field>
<field name="email" type="C" size="249"></field>
<index name="users__name"><col>name</col><unique/></index>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<table name="tags">
<field name="id" type="I"><key/><autoincrement/></field>
<field name="tag" type="C" size="64"><notnull/></field>
<field name="count" type="I"><notnull/><default value="0"/></field>
<index name="tags__tag"><col>tag</col><unique/></index>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<table name="image_tags">
<field name="image_id" type="I"><notnull/></field>
<field name="tag_id" type="I"><notnull/></field>
<index name="image_tags__image_id"><col>image_id</col></index>
<index name="image_tags__tag_id"><col>tag_id</col></index>
<index name="image_tags__key"><col>image_id</col><col>tag_id</col><unique/></index>
<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
</table>
<sql>
<query>DELETE FROM config WHERE name='db_version'</query>
<query>INSERT INTO config(name, value) VALUES('db_version', 6)</query>
</sql>
</schema>

View File

@ -53,8 +53,7 @@ if(is_readable("config.php")) {
exit;
}
require_once "core/compat.inc.php";
require_once "lib/adodb/adodb.inc.php";
require_once "lib/adodb/adodb-xmlschema03.inc.php";
require_once "core/database.class.php";
do_install();
@ -143,15 +142,62 @@ function create_tables($dsn) { // {{{
}
else {
if(substr($dsn, 0, 5) == "mysql") {
$db->Execute("SET NAMES utf8");
$engine = new MySQL();
}
$schema = new adoSchema($db);
$sql = $schema->ParseSchema("ext/upgrade/schema.xml");
$result = $schema->ExecuteSchema();
else if(substr($dsn, 0, 5) == "pgsql") {
$engine = new PostgreSQL();
}
$engine->init($db);
if(!$result) {
die("Error creating tables from XML schema");
}
$db->execute($engine->create_table_sql("aliases", "
oldtag VARCHAR(128) NOT NULL PRIMARY KEY,
newtag VARCHAR(128) NOT NULL,
UNIQUE(oldtag, newtag)
"));
$db->execute($engine->create_table_sql("config", "
name VARCHAR(128) NOT NULL PRIMARY KEY,
value TEXT
"));
$db->execute($engine->create_table_sql("images", "
id SCORE_AIPK,
owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
owner_ip SCORE_INET NOT NULL,
filename VARCHAR(64) NOT NULL,
filesize INTEGER NOT NULL,
hash CHAR(32) NOT NULL,
ext CHAR(4) NOT NULL,
source VARCHAR(255),
width INTEGER NOT NULL,
height INTEGER NOT NULL,
posted TIMESTAMP NOT NULL DEFAULT SCORE_NOW,
INDEX(owner_id),
INDEX(hash),
INDEX(width),
INDEX(height)
"));
$db->execute($engine->create_table_sql("users", "
id SCORE_AIPK,
name VARCHAR(32) NOT NULL,
pass CHAR(32),
joindate DATATIME NOT NULL DEFAULT SCORE_NOW,
admin SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
email VARCHAR(128),
INDEX(name)
"));
$db->execute($engine->create_table_sql("tags", "
id SCORE_AIPK,
tag VARCHAR(64) NOT NULL,
count NOT NULL DEFAULT 0,
INDEX(tag)
"));
$db->execute($engine->create_table_sql("image_tags", "
image_id INTEGER REFERENCES images(id) ON DELETE CASCADE,
tag_id INTEGER REFERENCES tags(id) ON DELETE CASCADE,
INDEX(image_id),
INDEX(tag_id),
INDEX(image_id, tag_id)
"));
$db->execute("INSERT INTO config(name, value) VALUES('db_version', 7)");
}
$db->Close();
} // }}}
@ -220,7 +266,7 @@ function write_config($dsn) { // {{{
<p><textarea cols="80" rows="2">$file_content</textarea>
<p>One done, <a href='index.php?q=setup'>Continue</a>
<p>One done, <a href='index.php'>Continue</a>
EOD;
exit;
}

File diff suppressed because it is too large Load Diff