Index: /trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm
===================================================================
--- /trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 4893)
+++ /trunk/Nebulous-Server/lib/Nebulous/Server/SQL.pm	(revision 4894)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: SQL.pm,v 1.5 2005-06-30 02:35:06 jhoblitt Exp $
+# $Id: SQL.pm,v 1.6 2005-08-27 03:40:25 jhoblitt Exp $
 
 package Nebulous::Server::SQL;
@@ -99,4 +99,29 @@
 );
 
+{
+    my @schema;
+
+    local $/ = ';';
+
+    foreach my $statement (<DATA>) {
+        last unless ( $statement =~ /\S+/ );
+        push @schema, $statement;
+    }
+
+    $sql{get_db_schema} = \@schema;
+}
+
+{
+    my @clear = split /;/, <<END;
+DROP TABLE IF EXISTS storage_object;
+DROP TABLE IF EXISTS instance;
+DROP TABLE IF EXISTS lock_record;
+DROP TABLE IF EXISTS volume;
+DROP TABLE IF EXISTS class;
+DROP TABLE IF EXISTS log
+END
+    $sql{get_db_clear} = \@clear;
+}
+
 __PACKAGE__->mk_ro_accessors( keys %sql );
 
@@ -113,3 +138,60 @@
 1;
 
-__END__
+__DATA__
+CREATE TABLE storage_object (
+    so_id BIGINT NOT NULL AUTO_INCREMENT,
+    ext_id VARCHAR(255) BINARY NOT NULL UNIQUE,
+    class_id TINYINT NOT NULL,
+    comment VARCHAR(255),
+    read_lock TINYINT DEFAULT 0 NOT NULL,
+    write_lock ENUM( 'write' ),
+    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    mtime TIMESTAMP,
+    PRIMARY KEY(so_id),
+    KEY(ext_id(64)),
+    KEY(class_id)
+) ENGINE=innodb;
+
+CREATE TABLE instance (
+    ins_id BIGINT NOT NULL AUTO_INCREMENT,
+    so_id BIGINT NOT NULL,
+    uri VARCHAR(255) BINARY NOT NULL,
+    sha1sum CHAR(40) ASCII,
+    assigned_location BOOL,
+    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    mtime TIMESTAMP,
+    PRIMARY KEY(ins_id),
+    KEY(so_id),
+    KEY(uri(64))
+) ENGINE=innodb;
+
+CREATE TABLE lock_record (
+    so_id BIGINT NOT NULL,
+    type ENUM( 'read', 'write' ) NOT NULL,
+    epoch TIMESTAMP,
+    KEY(so_ID)
+) ENGINE=innodb;
+
+CREATE TABLE volume (
+    vol_id INT NOT NULL AUTO_INCREMENT,
+    name VARCHAR(255) UNIQUE BINARY NOT NULL,
+    uri VARCHAR(255) BINARY NOT NULL,
+    key(vol_id)
+) ENGINE=innodb;
+
+CREATE TABLE class (
+    class_id TINYINT NOT NULL AUTO_INCREMENT,
+    instance TINYINT NOT NULL,
+    priority TINYINT,
+    comment VARCHAR(255),
+    key(class_id)
+) ENGINE=innodb;
+
+CREATE TABLE log (
+    timestamp TIMESTAMP,
+    hostname VARCHAR(255),
+    level VARCHAR(255),
+    sub VARCHAR(255),
+    message VARCHAR(2048) NOT NULL,
+    PRIMARY KEY(timestamp)
+) ENGINE=innodb;
Index: /trunk/Nebulous/lib/Nebulous/Server/SQL.pm
===================================================================
--- /trunk/Nebulous/lib/Nebulous/Server/SQL.pm	(revision 4893)
+++ /trunk/Nebulous/lib/Nebulous/Server/SQL.pm	(revision 4894)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: SQL.pm,v 1.5 2005-06-30 02:35:06 jhoblitt Exp $
+# $Id: SQL.pm,v 1.6 2005-08-27 03:40:25 jhoblitt Exp $
 
 package Nebulous::Server::SQL;
@@ -99,4 +99,29 @@
 );
 
+{
+    my @schema;
+
+    local $/ = ';';
+
+    foreach my $statement (<DATA>) {
+        last unless ( $statement =~ /\S+/ );
+        push @schema, $statement;
+    }
+
+    $sql{get_db_schema} = \@schema;
+}
+
+{
+    my @clear = split /;/, <<END;
+DROP TABLE IF EXISTS storage_object;
+DROP TABLE IF EXISTS instance;
+DROP TABLE IF EXISTS lock_record;
+DROP TABLE IF EXISTS volume;
+DROP TABLE IF EXISTS class;
+DROP TABLE IF EXISTS log
+END
+    $sql{get_db_clear} = \@clear;
+}
+
 __PACKAGE__->mk_ro_accessors( keys %sql );
 
@@ -113,3 +138,60 @@
 1;
 
-__END__
+__DATA__
+CREATE TABLE storage_object (
+    so_id BIGINT NOT NULL AUTO_INCREMENT,
+    ext_id VARCHAR(255) BINARY NOT NULL UNIQUE,
+    class_id TINYINT NOT NULL,
+    comment VARCHAR(255),
+    read_lock TINYINT DEFAULT 0 NOT NULL,
+    write_lock ENUM( 'write' ),
+    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    mtime TIMESTAMP,
+    PRIMARY KEY(so_id),
+    KEY(ext_id(64)),
+    KEY(class_id)
+) ENGINE=innodb;
+
+CREATE TABLE instance (
+    ins_id BIGINT NOT NULL AUTO_INCREMENT,
+    so_id BIGINT NOT NULL,
+    uri VARCHAR(255) BINARY NOT NULL,
+    sha1sum CHAR(40) ASCII,
+    assigned_location BOOL,
+    epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    mtime TIMESTAMP,
+    PRIMARY KEY(ins_id),
+    KEY(so_id),
+    KEY(uri(64))
+) ENGINE=innodb;
+
+CREATE TABLE lock_record (
+    so_id BIGINT NOT NULL,
+    type ENUM( 'read', 'write' ) NOT NULL,
+    epoch TIMESTAMP,
+    KEY(so_ID)
+) ENGINE=innodb;
+
+CREATE TABLE volume (
+    vol_id INT NOT NULL AUTO_INCREMENT,
+    name VARCHAR(255) UNIQUE BINARY NOT NULL,
+    uri VARCHAR(255) BINARY NOT NULL,
+    key(vol_id)
+) ENGINE=innodb;
+
+CREATE TABLE class (
+    class_id TINYINT NOT NULL AUTO_INCREMENT,
+    instance TINYINT NOT NULL,
+    priority TINYINT,
+    comment VARCHAR(255),
+    key(class_id)
+) ENGINE=innodb;
+
+CREATE TABLE log (
+    timestamp TIMESTAMP,
+    hostname VARCHAR(255),
+    level VARCHAR(255),
+    sub VARCHAR(255),
+    message VARCHAR(2048) NOT NULL,
+    PRIMARY KEY(timestamp)
+) ENGINE=innodb;
