Index: trunk/Nebulous/lib/Nebulous/Server.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Server.pm	(revision 5051)
+++ trunk/Nebulous/lib/Nebulous/Server.pm	(revision 5478)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.10 2005-08-25 01:44:32 jhoblitt Exp $
+# $Id: Server.pm,v 1.11 2005-11-05 02:35:45 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -103,4 +103,5 @@
 
     my $uri;
+    my $object_id;
     my $ins_id;
 
@@ -109,5 +110,20 @@
             # create storage_object
             my $query = $db->prepare_cached( $sql->new_object ); 
-            $query->execute( $key, $class, $comment );
+            $query->execute( 'NULL', $key );
+        }
+
+        {
+            # get object ID
+            my $query = $db->prepare_cached( $sql->last_insert_id );
+            $query->execute;
+            ( $object_id ) = $query->fetchrow_array;
+
+            $query->finish;
+        }
+
+        {
+            # create storage_object_attr
+            my $query = $db->prepare_cached( $sql->new_object_attr ); 
+            $query->execute( $object_id, $class, $comment );
         }
 
Index: trunk/Nebulous/lib/Nebulous/Server/SQL.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Server/SQL.pm	(revision 5051)
+++ trunk/Nebulous/lib/Nebulous/Server/SQL.pm	(revision 5478)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: SQL.pm,v 1.9 2005-08-31 21:00:12 jhoblitt Exp $
+# $Id: SQL.pm,v 1.10 2005-11-05 02:35:45 jhoblitt Exp $
 
 package Nebulous::Server::SQL;
@@ -24,6 +24,11 @@
     new_object          => qq{
         INSERT INTO storage_object
-        (so_id, ext_id, class_id, comment, read_lock, write_lock)
-        VALUES (NULL, ?, ?, ?, 0, NULL)
+        (so_id, ext_id)
+        VALUES (?, ?)
+    },
+    new_object_attr  => qq{
+        INSERT INTO storage_object_attr
+        (so_id, class_id, comment, read_lock, write_lock)
+        VALUES (?, ?, ?, 0, NULL)
     },
     delete_object       => qq{
@@ -40,32 +45,46 @@
     },
     get_object          => qq{
-        SELECT so_id, ext_id, class_id, comment, read_lock, write_lock, epoch, mtime
+        SELECT storage_object.so_id,
+            ext_id, class_id, comment, read_lock, write_lock, epoch, mtime
         FROM storage_object
+        LEFT JOIN storage_object_attr
+        USING (so_id)
         WHERE ext_id = ?
     },
     get_object_locks    => qq{
-        SELECT so_id, read_lock, write_lock 
+        SELECT storage_object.so_id,
+            read_lock, write_lock 
         FROM storage_object
+        LEFT JOIN storage_object_attr
+        USING (so_id)
         WHERE ext_id = ?
         FOR UPDATE
     },
     set_write_lock      => qq{
-        UPDATE storage_object
+        UPDATE storage_object_attr
+        LEFT JOIN storage_object
+        USING(so_id)
         SET write_lock = 'write'
-        WHERE ext_id = ?
+        WHERE storage_object.ext_id = ?
     },
     delete_write_lock   => qq{
-        UPDATE storage_object
+        UPDATE storage_object_attr
+        LEFT JOIN storage_object
+        USING(so_id)
         SET write_lock = NULL
         WHERE ext_id = ?
     },
     increment_read_lock => qq{
-        UPDATE storage_object
-        SET read_lock = read_lock+1
+        UPDATE storage_object_attr
+        LEFT JOIN storage_object
+        USING(so_id)
+        SET read_lock = read_lock + 1
         WHERE ext_id = ?
     },
     decrement_read_lock => qq{
-        UPDATE storage_object
-        SET read_lock = read_lock-1
+        UPDATE storage_object_attr
+        LEFT JOIN storage_object
+        USING(so_id)
+        SET read_lock = read_lock - 1
         WHERE ext_id = ?
     },
@@ -85,9 +104,10 @@
     },
     get_object_instances        => qq{
-        SELECT storage_object.so_id, uri, assigned_location
+        SELECT storage_object.so_id,
+            uri, assigned_location
         FROM storage_object
         LEFT JOIN instance
         USING (so_id)
-        WHERE storage_object.ext_id = ?
+        WHERE ext_id = ?
     },
     get_storage_volume_byname   => qq{
@@ -143,7 +163,15 @@
 
 __DATA__
+DROP TABLE IF EXISTS storage_object;
 CREATE TABLE storage_object (
     so_id BIGINT NOT NULL AUTO_INCREMENT,
     ext_id VARCHAR(255) BINARY NOT NULL UNIQUE,
+    PRIMARY KEY(so_id),
+    KEY(ext_id(64))
+) ENGINE=innodb;
+
+DROP TABLE IF EXISTS storage_object_attr ;
+CREATE TABLE storage_object_attr (
+    so_id BIGINT NOT NULL AUTO_INCREMENT,
     class_id TINYINT NOT NULL,
     comment VARCHAR(255),
@@ -153,5 +181,4 @@
     mtime TIMESTAMP,
     PRIMARY KEY(so_id),
-    KEY(ext_id(64)),
     KEY(class_id)
 ) ENGINE=innodb;
