Moved a few things and started on the MySQL schema
Rob Kinyon [Sat, 5 Dec 2009 20:46:18 +0000 (15:46 -0500)]
etc/mysql_tables.sql
lib/DBM/Deep/Engine.pm
lib/DBM/Deep/Engine/File.pm

index f054e5d..7a30a53 100644 (file)
@@ -1,57 +1,74 @@
-DROP TABLE IF EXISTS `rec_array`;
-CREATE TABLE `rec_array` (
-  `id` bigint(20) unsigned NOT NULL,
-  PRIMARY KEY (`id`)
+DROP TABLE IF EXISTS references;
+CREATE TABLE references (
+    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
+   ,`type` ENUM( 'hash', 'array' ) NOT NULL DEFAULT 'hash'
+   ,refcount BIGINT UNSIGNED NOT NULL DEFAULT 1
 );
 
-DROP TABLE IF EXISTS `rec_array_item`;
-CREATE TABLE `rec_array_item` (
-  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-  `array` bigint(20) NOT NULL,
-  `pos` bigint(20) NOT NULL,
-  `value_data` varchar(255) DEFAULT NULL,
-  `value_type` enum('array','data','hash','text','value') NOT NULL DEFAULT 'value',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY `array_2` (`array`,`pos`)
-);
-
-DROP TABLE IF EXISTS `rec_hash`;
-CREATE TABLE `rec_hash` (
-  `id` bigint(20) unsigned NOT NULL,
-  PRIMARY KEY (`id`)
-);
-
-DROP TABLE IF EXISTS `rec_hash_item`;
-CREATE TABLE `rec_hash_item` (
-  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-  `hash` bigint(20) NOT NULL,
-  `key_data` varchar(255) DEFAULT NULL,
-  `key_hash` varchar(22) NOT NULL,
-  `key_type` enum('text','value') NOT NULL DEFAULT 'value',
-  `value_data` varchar(255) DEFAULT NULL,
-  `value_type` enum('array','data','hash','text','value') NOT NULL DEFAULT 'value',
-  PRIMARY KEY (`id`),
-  UNIQUE KEY `hash_2` (`hash`,`key_hash`)
-);
-
-DROP TABLE IF EXISTS `rec_item`;
-CREATE TABLE `rec_item` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `item_type` enum('array','hash') NOT NULL DEFAULT 'hash',
-  PRIMARY KEY (`id`)
-);
-
-DROP TABLE IF EXISTS `rec_value_data`;
-CREATE TABLE `rec_value_data` (
-  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-  `data` longblob NOT NULL,
-  PRIMARY KEY (`id`)
-);
-
-DROP TABLE IF EXISTS `rec_value_text`;
-CREATE TABLE `rec_value_text` (
-  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-  `data` longtext NOT NULL,
-  PRIMARY KEY (`id`)
+DROP TABLE IF EXISTS datas;
+CREATE TABLE data (
+    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
+   ,reference_id BIGINT UNSIGNED NOT NULL
+   ,key TEXT NOT NULL
+   ,value TEXT
+   ,class TEXT
+   ,FOREIGN KEY (reference_id) REFERENCES references (id)
 );
 
+--DROP TABLE IF EXISTS `rec_array`;
+--CREATE TABLE `rec_array` (
+--  `id` bigint(20) unsigned NOT NULL,
+--  PRIMARY KEY (`id`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_array_item`;
+--CREATE TABLE `rec_array_item` (
+--  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+--  `array` bigint(20) NOT NULL,
+--  `pos` bigint(20) NOT NULL,
+--  `value_data` varchar(255) DEFAULT NULL,
+--  `value_type` enum('array','data','hash','text','value') NOT NULL DEFAULT 'value',
+--  PRIMARY KEY (`id`),
+--  UNIQUE KEY `array_2` (`array`,`pos`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_hash`;
+--CREATE TABLE `rec_hash` (
+--  `id` bigint(20) unsigned NOT NULL,
+--  PRIMARY KEY (`id`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_hash_item`;
+--CREATE TABLE `rec_hash_item` (
+--  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+--  `hash` bigint(20) NOT NULL,
+--  `key_data` varchar(255) DEFAULT NULL,
+--  `key_hash` varchar(22) NOT NULL,
+--  `key_type` enum('text','value') NOT NULL DEFAULT 'value',
+--  `value_data` varchar(255) DEFAULT NULL,
+--  `value_type` enum('array','data','hash','text','value') NOT NULL DEFAULT 'value',
+--  PRIMARY KEY (`id`),
+--  UNIQUE KEY `hash_2` (`hash`,`key_hash`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_item`;
+--CREATE TABLE `rec_item` (
+--  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+--  `item_type` enum('array','hash') NOT NULL DEFAULT 'hash',
+--  PRIMARY KEY (`id`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_value_data`;
+--CREATE TABLE `rec_value_data` (
+--  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+--  `data` longblob NOT NULL,
+--  PRIMARY KEY (`id`)
+--);
+--
+--DROP TABLE IF EXISTS `rec_value_text`;
+--CREATE TABLE `rec_value_text` (
+--  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+--  `data` longtext NOT NULL,
+--  PRIMARY KEY (`id`)
+--);
+--
index 40895dc..094f51c 100644 (file)
@@ -13,18 +13,6 @@ use DBM::Deep::Iterator ();
 #   mutex. But, it's the caller's responsability to make sure that this has
 #   been done.
 
-# Setup file and tag signatures.  These should never change.
-sub SIG_FILE     () { 'DPDB' }
-sub SIG_HEADER   () { 'h'    }
-sub SIG_HASH     () { 'H'    }
-sub SIG_ARRAY    () { 'A'    }
-sub SIG_NULL     () { 'N'    }
-sub SIG_DATA     () { 'D'    }
-sub SIG_INDEX    () { 'I'    }
-sub SIG_BLIST    () { 'B'    }
-sub SIG_FREE     () { 'F'    }
-sub SIG_SIZE     () {  1     }
-
 =head1 NAME
 
 DBM::Deep::Engine
index df8cc4e..d5b60f3 100644 (file)
@@ -17,6 +17,18 @@ sub sector_type { 'DBM::Deep::Sector::File' }
 
 my $STALE_SIZE = 2;
 
+# Setup file and tag signatures.  These should never change.
+sub SIG_FILE     () { 'DPDB' }
+sub SIG_HEADER   () { 'h'    }
+sub SIG_HASH     () { 'H'    }
+sub SIG_ARRAY    () { 'A'    }
+sub SIG_NULL     () { 'N'    }
+sub SIG_DATA     () { 'D'    }
+sub SIG_INDEX    () { 'I'    }
+sub SIG_BLIST    () { 'B'    }
+sub SIG_FREE     () { 'F'    }
+sub SIG_SIZE     () {  1     }
+
 # Please refer to the pack() documentation for further information
 my %StP = (
     1 => 'C', # Unsigned char value (no order needed as it's just one byte)