summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Robertson <jonrober@stanford.edu>2014-10-09 22:24:18 -0700
committerJon Robertson <jonrober@stanford.edu>2014-10-09 22:24:18 -0700
commit58186415a0f232cf84ced650ecc1326df66f9c6d (patch)
tree5b34314712a2dd22497dbeab8692a1f3edc03762
parent94cfb1c7969515a863d7b0e09f00b6ced5f4fc5c (diff)
Added new column in the Duo table
New column is required to differentiate the Duo table entries now that we have more than one Duo object type. Added the new field and rebuilt schema definitions and upgrade files. Change-Id: Icf538eaded93f4f2820984c087d4850a586a7db1
-rw-r--r--perl/lib/Wallet/Schema.pm2
-rw-r--r--perl/lib/Wallet/Schema/Result/Duo.pm14
-rw-r--r--perl/sql/Wallet-Schema-0.09-0.10-MySQL.sql14
-rw-r--r--perl/sql/Wallet-Schema-0.09-0.10-PostgreSQL.sql18
-rw-r--r--perl/sql/Wallet-Schema-0.09-0.10-SQLite.sql26
-rw-r--r--perl/sql/Wallet-Schema-0.10-MySQL.sql209
-rw-r--r--perl/sql/Wallet-Schema-0.10-PostgreSQL.sql216
-rw-r--r--perl/sql/Wallet-Schema-0.10-SQLite.sql220
8 files changed, 716 insertions, 3 deletions
diff --git a/perl/lib/Wallet/Schema.pm b/perl/lib/Wallet/Schema.pm
index cb4c93e..5b850c0 100644
--- a/perl/lib/Wallet/Schema.pm
+++ b/perl/lib/Wallet/Schema.pm
@@ -18,7 +18,7 @@ use base 'DBIx::Class::Schema';
# This version should be increased on any code change to this module. Always
# use two digits for the minor version with a leading zero if necessary so
# that it will sort properly.
-our $VERSION = '0.09';
+our $VERSION = '0.10';
__PACKAGE__->load_namespaces;
__PACKAGE__->load_components (qw/Schema::Versioned/);
diff --git a/perl/lib/Wallet/Schema/Result/Duo.pm b/perl/lib/Wallet/Schema/Result/Duo.pm
index 80a71dc..6ad61e9 100644
--- a/perl/lib/Wallet/Schema/Result/Duo.pm
+++ b/perl/lib/Wallet/Schema/Result/Duo.pm
@@ -45,9 +45,19 @@ __PACKAGE__->table("duo");
__PACKAGE__->add_columns(
"du_name",
{ data_type => "varchar", is_nullable => 0, size => 255 },
+ "du_type",
+ { data_type => "varchar", is_nullable => 0, size => 16 },
"du_key",
{ data_type => "varchar", is_nullable => 0, size => 255 },
);
-__PACKAGE__->set_primary_key("du_name");
-
+__PACKAGE__->set_primary_key("du_name", "du_type");
+
+__PACKAGE__->belongs_to(
+ 'object',
+ 'Wallet::Schema::Result::Object',
+ {
+ 'foreign.ob_type' => 'self.du_type',
+ 'foreign.ob_name' => 'self.du_name',
+ },
+ );
1;
diff --git a/perl/sql/Wallet-Schema-0.09-0.10-MySQL.sql b/perl/sql/Wallet-Schema-0.09-0.10-MySQL.sql
new file mode 100644
index 0000000..3c54c6d
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.09-0.10-MySQL.sql
@@ -0,0 +1,14 @@
+-- Convert schema 'sql/Wallet-Schema-0.09-MySQL.sql' to 'Wallet::Schema v0.10':;
+
+BEGIN;
+
+ALTER TABLE duo DROP PRIMARY KEY,
+ ADD COLUMN du_type varchar(16) NOT NULL,
+ ADD INDEX duo_idx_du_type_du_name (du_type, du_name),
+ ADD PRIMARY KEY (du_name, du_type),
+ ADD CONSTRAINT duo_fk_du_type_du_name FOREIGN KEY (du_type, du_name) REFERENCES objects (ob_type, ob_name),
+ ENGINE=InnoDB;
+
+
+COMMIT;
+
diff --git a/perl/sql/Wallet-Schema-0.09-0.10-PostgreSQL.sql b/perl/sql/Wallet-Schema-0.09-0.10-PostgreSQL.sql
new file mode 100644
index 0000000..c69e6a5
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.09-0.10-PostgreSQL.sql
@@ -0,0 +1,18 @@
+-- Convert schema 'sql/Wallet-Schema-0.09-PostgreSQL.sql' to 'sql/Wallet-Schema-0.10-PostgreSQL.sql':;
+
+BEGIN;
+
+ALTER TABLE duo DROP CONSTRAINT duo_pkey;
+
+ALTER TABLE duo ADD COLUMN du_type character varying(16) NOT NULL;
+
+CREATE INDEX duo_idx_du_type_du_name on duo (du_type, du_name);
+
+ALTER TABLE duo ADD PRIMARY KEY (du_name, du_type);
+
+ALTER TABLE duo ADD CONSTRAINT duo_fk_du_type_du_name FOREIGN KEY (du_type, du_name)
+ REFERENCES objects (ob_type, ob_name) DEFERRABLE;
+
+
+COMMIT;
+
diff --git a/perl/sql/Wallet-Schema-0.09-0.10-SQLite.sql b/perl/sql/Wallet-Schema-0.09-0.10-SQLite.sql
new file mode 100644
index 0000000..5feb89f
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.09-0.10-SQLite.sql
@@ -0,0 +1,26 @@
+-- Convert schema 'sql/Wallet-Schema-0.09-SQLite.sql' to 'sql/Wallet-Schema-0.10-SQLite.sql':;
+
+BEGIN;
+
+-- Back up Duo data to a temp table. SQLite has limited ALTER TABLE support,
+-- so we need to do this to alter the keys on the table.
+CREATE TEMPORARY TABLE duo_backup (
+ du_name varchar(255) NOT NULL,
+ du_key varchar(255) NOT NULL,
+ PRIMARY KEY (du_name)
+);
+INSERT INTO duo_backup SELECT du_name,du_key FROM duo;
+DROP TABLE duo;
+
+-- Create the new Duo table and move the old data into it.
+CREATE TABLE duo (
+ du_name varchar(255) NOT NULL,
+ du_type varchar(16) NOT NULL,
+ du_key varchar(255) NOT NULL,
+ PRIMARY KEY (du_name, du_type),
+ FOREIGN KEY (du_type, du_name) REFERENCES objects(ob_type, ob_name)
+);
+INSERT INTO duo SELECT du_name,du_key,'duo' FROM duo_backup;
+DROP TABLE duo_backup;
+
+COMMIT;
diff --git a/perl/sql/Wallet-Schema-0.10-MySQL.sql b/perl/sql/Wallet-Schema-0.10-MySQL.sql
new file mode 100644
index 0000000..c0b7fcc
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.10-MySQL.sql
@@ -0,0 +1,209 @@
+--
+-- Created by SQL::Translator::Producer::MySQL
+-- Created on Thu Oct 9 20:54:55 2014
+--
+SET foreign_key_checks=0;
+
+DROP TABLE IF EXISTS `acl_history`;
+
+--
+-- Table: `acl_history`
+--
+CREATE TABLE `acl_history` (
+ `ah_id` integer NOT NULL auto_increment,
+ `ah_acl` integer NOT NULL,
+ `ah_name` varchar(255) NULL,
+ `ah_action` varchar(16) NOT NULL,
+ `ah_scheme` varchar(32) NULL,
+ `ah_identifier` varchar(255) NULL,
+ `ah_by` varchar(255) NOT NULL,
+ `ah_from` varchar(255) NOT NULL,
+ `ah_on` datetime NOT NULL,
+ INDEX `acl_history_idx_ah_acl` (`ah_acl`),
+ INDEX `acl_history_idx_ah_name` (`ah_name`),
+ PRIMARY KEY (`ah_id`)
+);
+
+DROP TABLE IF EXISTS `acl_schemes`;
+
+--
+-- Table: `acl_schemes`
+--
+CREATE TABLE `acl_schemes` (
+ `as_name` varchar(32) NOT NULL,
+ `as_class` varchar(64) NULL,
+ PRIMARY KEY (`as_name`)
+) ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS `acls`;
+
+--
+-- Table: `acls`
+--
+CREATE TABLE `acls` (
+ `ac_id` integer NOT NULL auto_increment,
+ `ac_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`ac_id`),
+ UNIQUE `ac_name` (`ac_name`)
+) ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS `enctypes`;
+
+--
+-- Table: `enctypes`
+--
+CREATE TABLE `enctypes` (
+ `en_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`en_name`)
+);
+
+DROP TABLE IF EXISTS `flags`;
+
+--
+-- Table: `flags`
+--
+CREATE TABLE `flags` (
+ `fl_type` varchar(16) NOT NULL,
+ `fl_name` varchar(255) NOT NULL,
+ `fl_flag` enum('locked', 'unchanging') NOT NULL,
+ PRIMARY KEY (`fl_type`, `fl_name`, `fl_flag`)
+);
+
+DROP TABLE IF EXISTS `keytab_enctypes`;
+
+--
+-- Table: `keytab_enctypes`
+--
+CREATE TABLE `keytab_enctypes` (
+ `ke_name` varchar(255) NOT NULL,
+ `ke_enctype` varchar(255) NOT NULL,
+ PRIMARY KEY (`ke_name`, `ke_enctype`)
+);
+
+DROP TABLE IF EXISTS `keytab_sync`;
+
+--
+-- Table: `keytab_sync`
+--
+CREATE TABLE `keytab_sync` (
+ `ks_name` varchar(255) NOT NULL,
+ `ks_target` varchar(255) NOT NULL,
+ PRIMARY KEY (`ks_name`, `ks_target`)
+);
+
+DROP TABLE IF EXISTS `object_history`;
+
+--
+-- Table: `object_history`
+--
+CREATE TABLE `object_history` (
+ `oh_id` integer NOT NULL auto_increment,
+ `oh_type` varchar(16) NOT NULL,
+ `oh_name` varchar(255) NOT NULL,
+ `oh_action` varchar(16) NOT NULL,
+ `oh_field` varchar(16) NULL,
+ `oh_type_field` varchar(255) NULL,
+ `oh_old` varchar(255) NULL,
+ `oh_new` varchar(255) NULL,
+ `oh_by` varchar(255) NOT NULL,
+ `oh_from` varchar(255) NOT NULL,
+ `oh_on` datetime NOT NULL,
+ INDEX `object_history_idx_oh_type_oh_name` (`oh_type`, `oh_name`),
+ PRIMARY KEY (`oh_id`)
+);
+
+DROP TABLE IF EXISTS `sync_targets`;
+
+--
+-- Table: `sync_targets`
+--
+CREATE TABLE `sync_targets` (
+ `st_name` varchar(255) NOT NULL,
+ PRIMARY KEY (`st_name`)
+);
+
+DROP TABLE IF EXISTS `types`;
+
+--
+-- Table: `types`
+--
+CREATE TABLE `types` (
+ `ty_name` varchar(16) NOT NULL,
+ `ty_class` varchar(64) NULL,
+ PRIMARY KEY (`ty_name`)
+) ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS `acl_entries`;
+
+--
+-- Table: `acl_entries`
+--
+CREATE TABLE `acl_entries` (
+ `ae_id` integer NOT NULL,
+ `ae_scheme` varchar(32) NOT NULL,
+ `ae_identifier` varchar(255) NOT NULL,
+ INDEX `acl_entries_idx_ae_scheme` (`ae_scheme`),
+ INDEX `acl_entries_idx_ae_id` (`ae_id`),
+ PRIMARY KEY (`ae_id`, `ae_scheme`, `ae_identifier`),
+ CONSTRAINT `acl_entries_fk_ae_scheme` FOREIGN KEY (`ae_scheme`) REFERENCES `acl_schemes` (`as_name`),
+ CONSTRAINT `acl_entries_fk_ae_id` FOREIGN KEY (`ae_id`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS `objects`;
+
+--
+-- Table: `objects`
+--
+CREATE TABLE `objects` (
+ `ob_type` varchar(16) NOT NULL,
+ `ob_name` varchar(255) NOT NULL,
+ `ob_owner` integer NULL,
+ `ob_acl_get` integer NULL,
+ `ob_acl_store` integer NULL,
+ `ob_acl_show` integer NULL,
+ `ob_acl_destroy` integer NULL,
+ `ob_acl_flags` integer NULL,
+ `ob_expires` datetime NULL,
+ `ob_created_by` varchar(255) NOT NULL,
+ `ob_created_from` varchar(255) NOT NULL,
+ `ob_created_on` datetime NOT NULL,
+ `ob_stored_by` varchar(255) NULL,
+ `ob_stored_from` varchar(255) NULL,
+ `ob_stored_on` datetime NULL,
+ `ob_downloaded_by` varchar(255) NULL,
+ `ob_downloaded_from` varchar(255) NULL,
+ `ob_downloaded_on` datetime NULL,
+ `ob_comment` varchar(255) NULL,
+ INDEX `objects_idx_ob_acl_destroy` (`ob_acl_destroy`),
+ INDEX `objects_idx_ob_acl_flags` (`ob_acl_flags`),
+ INDEX `objects_idx_ob_acl_get` (`ob_acl_get`),
+ INDEX `objects_idx_ob_owner` (`ob_owner`),
+ INDEX `objects_idx_ob_acl_show` (`ob_acl_show`),
+ INDEX `objects_idx_ob_acl_store` (`ob_acl_store`),
+ INDEX `objects_idx_ob_type` (`ob_type`),
+ PRIMARY KEY (`ob_name`, `ob_type`),
+ CONSTRAINT `objects_fk_ob_acl_destroy` FOREIGN KEY (`ob_acl_destroy`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_acl_flags` FOREIGN KEY (`ob_acl_flags`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_acl_get` FOREIGN KEY (`ob_acl_get`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_owner` FOREIGN KEY (`ob_owner`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_acl_show` FOREIGN KEY (`ob_acl_show`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_acl_store` FOREIGN KEY (`ob_acl_store`) REFERENCES `acls` (`ac_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `objects_fk_ob_type` FOREIGN KEY (`ob_type`) REFERENCES `types` (`ty_name`)
+) ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS `duo`;
+
+--
+-- Table: `duo`
+--
+CREATE TABLE `duo` (
+ `du_name` varchar(255) NOT NULL,
+ `du_type` varchar(16) NOT NULL,
+ `du_key` varchar(255) NOT NULL,
+ INDEX `duo_idx_du_type_du_name` (`du_type`, `du_name`),
+ PRIMARY KEY (`du_name`, `du_type`),
+ CONSTRAINT `duo_fk_du_type_du_name` FOREIGN KEY (`du_type`, `du_name`) REFERENCES `objects` (`ob_type`, `ob_name`)
+) ENGINE=InnoDB;
+
+SET foreign_key_checks=1;
+
diff --git a/perl/sql/Wallet-Schema-0.10-PostgreSQL.sql b/perl/sql/Wallet-Schema-0.10-PostgreSQL.sql
new file mode 100644
index 0000000..3bcb0ae
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.10-PostgreSQL.sql
@@ -0,0 +1,216 @@
+--
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Thu Oct 9 20:54:56 2014
+--
+--
+-- Table: acl_history.
+--
+DROP TABLE "acl_history" CASCADE;
+CREATE TABLE "acl_history" (
+ "ah_id" serial NOT NULL,
+ "ah_acl" integer NOT NULL,
+ "ah_name" character varying(255),
+ "ah_action" character varying(16) NOT NULL,
+ "ah_scheme" character varying(32),
+ "ah_identifier" character varying(255),
+ "ah_by" character varying(255) NOT NULL,
+ "ah_from" character varying(255) NOT NULL,
+ "ah_on" timestamp NOT NULL,
+ PRIMARY KEY ("ah_id")
+);
+CREATE INDEX "acl_history_idx_ah_acl" on "acl_history" ("ah_acl");
+CREATE INDEX "acl_history_idx_ah_name" on "acl_history" ("ah_name");
+
+--
+-- Table: acl_schemes.
+--
+DROP TABLE "acl_schemes" CASCADE;
+CREATE TABLE "acl_schemes" (
+ "as_name" character varying(32) NOT NULL,
+ "as_class" character varying(64),
+ PRIMARY KEY ("as_name")
+);
+
+--
+-- Table: acls.
+--
+DROP TABLE "acls" CASCADE;
+CREATE TABLE "acls" (
+ "ac_id" serial NOT NULL,
+ "ac_name" character varying(255) NOT NULL,
+ PRIMARY KEY ("ac_id"),
+ CONSTRAINT "ac_name" UNIQUE ("ac_name")
+);
+
+--
+-- Table: enctypes.
+--
+DROP TABLE "enctypes" CASCADE;
+CREATE TABLE "enctypes" (
+ "en_name" character varying(255) NOT NULL,
+ PRIMARY KEY ("en_name")
+);
+
+--
+-- Table: flags.
+--
+DROP TABLE "flags" CASCADE;
+CREATE TABLE "flags" (
+ "fl_type" character varying(16) NOT NULL,
+ "fl_name" character varying(255) NOT NULL,
+ "fl_flag" character varying NOT NULL,
+ PRIMARY KEY ("fl_type", "fl_name", "fl_flag")
+);
+
+--
+-- Table: keytab_enctypes.
+--
+DROP TABLE "keytab_enctypes" CASCADE;
+CREATE TABLE "keytab_enctypes" (
+ "ke_name" character varying(255) NOT NULL,
+ "ke_enctype" character varying(255) NOT NULL,
+ PRIMARY KEY ("ke_name", "ke_enctype")
+);
+
+--
+-- Table: keytab_sync.
+--
+DROP TABLE "keytab_sync" CASCADE;
+CREATE TABLE "keytab_sync" (
+ "ks_name" character varying(255) NOT NULL,
+ "ks_target" character varying(255) NOT NULL,
+ PRIMARY KEY ("ks_name", "ks_target")
+);
+
+--
+-- Table: object_history.
+--
+DROP TABLE "object_history" CASCADE;
+CREATE TABLE "object_history" (
+ "oh_id" serial NOT NULL,
+ "oh_type" character varying(16) NOT NULL,
+ "oh_name" character varying(255) NOT NULL,
+ "oh_action" character varying(16) NOT NULL,
+ "oh_field" character varying(16),
+ "oh_type_field" character varying(255),
+ "oh_old" character varying(255),
+ "oh_new" character varying(255),
+ "oh_by" character varying(255) NOT NULL,
+ "oh_from" character varying(255) NOT NULL,
+ "oh_on" timestamp NOT NULL,
+ PRIMARY KEY ("oh_id")
+);
+CREATE INDEX "object_history_idx_oh_type_oh_name" on "object_history" ("oh_type", "oh_name");
+
+--
+-- Table: sync_targets.
+--
+DROP TABLE "sync_targets" CASCADE;
+CREATE TABLE "sync_targets" (
+ "st_name" character varying(255) NOT NULL,
+ PRIMARY KEY ("st_name")
+);
+
+--
+-- Table: types.
+--
+DROP TABLE "types" CASCADE;
+CREATE TABLE "types" (
+ "ty_name" character varying(16) NOT NULL,
+ "ty_class" character varying(64),
+ PRIMARY KEY ("ty_name")
+);
+
+--
+-- Table: acl_entries.
+--
+DROP TABLE "acl_entries" CASCADE;
+CREATE TABLE "acl_entries" (
+ "ae_id" integer NOT NULL,
+ "ae_scheme" character varying(32) NOT NULL,
+ "ae_identifier" character varying(255) NOT NULL,
+ PRIMARY KEY ("ae_id", "ae_scheme", "ae_identifier")
+);
+CREATE INDEX "acl_entries_idx_ae_scheme" on "acl_entries" ("ae_scheme");
+CREATE INDEX "acl_entries_idx_ae_id" on "acl_entries" ("ae_id");
+
+--
+-- Table: objects.
+--
+DROP TABLE "objects" CASCADE;
+CREATE TABLE "objects" (
+ "ob_type" character varying(16) NOT NULL,
+ "ob_name" character varying(255) NOT NULL,
+ "ob_owner" integer,
+ "ob_acl_get" integer,
+ "ob_acl_store" integer,
+ "ob_acl_show" integer,
+ "ob_acl_destroy" integer,
+ "ob_acl_flags" integer,
+ "ob_expires" timestamp,
+ "ob_created_by" character varying(255) NOT NULL,
+ "ob_created_from" character varying(255) NOT NULL,
+ "ob_created_on" timestamp NOT NULL,
+ "ob_stored_by" character varying(255),
+ "ob_stored_from" character varying(255),
+ "ob_stored_on" timestamp,
+ "ob_downloaded_by" character varying(255),
+ "ob_downloaded_from" character varying(255),
+ "ob_downloaded_on" timestamp,
+ "ob_comment" character varying(255),
+ PRIMARY KEY ("ob_name", "ob_type")
+);
+CREATE INDEX "objects_idx_ob_acl_destroy" on "objects" ("ob_acl_destroy");
+CREATE INDEX "objects_idx_ob_acl_flags" on "objects" ("ob_acl_flags");
+CREATE INDEX "objects_idx_ob_acl_get" on "objects" ("ob_acl_get");
+CREATE INDEX "objects_idx_ob_owner" on "objects" ("ob_owner");
+CREATE INDEX "objects_idx_ob_acl_show" on "objects" ("ob_acl_show");
+CREATE INDEX "objects_idx_ob_acl_store" on "objects" ("ob_acl_store");
+CREATE INDEX "objects_idx_ob_type" on "objects" ("ob_type");
+
+--
+-- Table: duo.
+--
+DROP TABLE "duo" CASCADE;
+CREATE TABLE "duo" (
+ "du_name" character varying(255) NOT NULL,
+ "du_type" character varying(16) NOT NULL,
+ "du_key" character varying(255) NOT NULL,
+ PRIMARY KEY ("du_name", "du_type")
+);
+CREATE INDEX "duo_idx_du_type_du_name" on "duo" ("du_type", "du_name");
+
+--
+-- Foreign Key Definitions
+--
+
+ALTER TABLE "acl_entries" ADD CONSTRAINT "acl_entries_fk_ae_scheme" FOREIGN KEY ("ae_scheme")
+ REFERENCES "acl_schemes" ("as_name") DEFERRABLE;
+
+ALTER TABLE "acl_entries" ADD CONSTRAINT "acl_entries_fk_ae_id" FOREIGN KEY ("ae_id")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_acl_destroy" FOREIGN KEY ("ob_acl_destroy")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_acl_flags" FOREIGN KEY ("ob_acl_flags")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_acl_get" FOREIGN KEY ("ob_acl_get")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_owner" FOREIGN KEY ("ob_owner")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_acl_show" FOREIGN KEY ("ob_acl_show")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_acl_store" FOREIGN KEY ("ob_acl_store")
+ REFERENCES "acls" ("ac_id") ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE;
+
+ALTER TABLE "objects" ADD CONSTRAINT "objects_fk_ob_type" FOREIGN KEY ("ob_type")
+ REFERENCES "types" ("ty_name") DEFERRABLE;
+
+ALTER TABLE "duo" ADD CONSTRAINT "duo_fk_du_type_du_name" FOREIGN KEY ("du_type", "du_name")
+ REFERENCES "objects" ("ob_type", "ob_name") DEFERRABLE;
+
diff --git a/perl/sql/Wallet-Schema-0.10-SQLite.sql b/perl/sql/Wallet-Schema-0.10-SQLite.sql
new file mode 100644
index 0000000..b3450d1
--- /dev/null
+++ b/perl/sql/Wallet-Schema-0.10-SQLite.sql
@@ -0,0 +1,220 @@
+--
+-- Created by SQL::Translator::Producer::SQLite
+-- Created on Thu Oct 9 20:51:25 2014
+--
+
+BEGIN TRANSACTION;
+
+--
+-- Table: acl_history
+--
+DROP TABLE acl_history;
+
+CREATE TABLE acl_history (
+ ah_id INTEGER PRIMARY KEY NOT NULL,
+ ah_acl integer NOT NULL,
+ ah_name varchar(255),
+ ah_action varchar(16) NOT NULL,
+ ah_scheme varchar(32),
+ ah_identifier varchar(255),
+ ah_by varchar(255) NOT NULL,
+ ah_from varchar(255) NOT NULL,
+ ah_on datetime NOT NULL
+);
+
+CREATE INDEX acl_history_idx_ah_acl ON acl_history (ah_acl);
+
+CREATE INDEX acl_history_idx_ah_name ON acl_history (ah_name);
+
+--
+-- Table: acl_schemes
+--
+DROP TABLE acl_schemes;
+
+CREATE TABLE acl_schemes (
+ as_name varchar(32) NOT NULL,
+ as_class varchar(64),
+ PRIMARY KEY (as_name)
+);
+
+--
+-- Table: acls
+--
+DROP TABLE acls;
+
+CREATE TABLE acls (
+ ac_id INTEGER PRIMARY KEY NOT NULL,
+ ac_name varchar(255) NOT NULL
+);
+
+CREATE UNIQUE INDEX ac_name ON acls (ac_name);
+
+--
+-- Table: enctypes
+--
+DROP TABLE enctypes;
+
+CREATE TABLE enctypes (
+ en_name varchar(255) NOT NULL,
+ PRIMARY KEY (en_name)
+);
+
+--
+-- Table: flags
+--
+DROP TABLE flags;
+
+CREATE TABLE flags (
+ fl_type varchar(16) NOT NULL,
+ fl_name varchar(255) NOT NULL,
+ fl_flag enum NOT NULL,
+ PRIMARY KEY (fl_type, fl_name, fl_flag)
+);
+
+--
+-- Table: keytab_enctypes
+--
+DROP TABLE keytab_enctypes;
+
+CREATE TABLE keytab_enctypes (
+ ke_name varchar(255) NOT NULL,
+ ke_enctype varchar(255) NOT NULL,
+ PRIMARY KEY (ke_name, ke_enctype)
+);
+
+--
+-- Table: keytab_sync
+--
+DROP TABLE keytab_sync;
+
+CREATE TABLE keytab_sync (
+ ks_name varchar(255) NOT NULL,
+ ks_target varchar(255) NOT NULL,
+ PRIMARY KEY (ks_name, ks_target)
+);
+
+--
+-- Table: object_history
+--
+DROP TABLE object_history;
+
+CREATE TABLE object_history (
+ oh_id INTEGER PRIMARY KEY NOT NULL,
+ oh_type varchar(16) NOT NULL,
+ oh_name varchar(255) NOT NULL,
+ oh_action varchar(16) NOT NULL,
+ oh_field varchar(16),
+ oh_type_field varchar(255),
+ oh_old varchar(255),
+ oh_new varchar(255),
+ oh_by varchar(255) NOT NULL,
+ oh_from varchar(255) NOT NULL,
+ oh_on datetime NOT NULL
+);
+
+CREATE INDEX object_history_idx_oh_type_oh_name ON object_history (oh_type, oh_name);
+
+--
+-- Table: sync_targets
+--
+DROP TABLE sync_targets;
+
+CREATE TABLE sync_targets (
+ st_name varchar(255) NOT NULL,
+ PRIMARY KEY (st_name)
+);
+
+--
+-- Table: types
+--
+DROP TABLE types;
+
+CREATE TABLE types (
+ ty_name varchar(16) NOT NULL,
+ ty_class varchar(64),
+ PRIMARY KEY (ty_name)
+);
+
+--
+-- Table: acl_entries
+--
+DROP TABLE acl_entries;
+
+CREATE TABLE acl_entries (
+ ae_id integer NOT NULL,
+ ae_scheme varchar(32) NOT NULL,
+ ae_identifier varchar(255) NOT NULL,
+ PRIMARY KEY (ae_id, ae_scheme, ae_identifier),
+ FOREIGN KEY (ae_scheme) REFERENCES acl_schemes(as_name),
+ FOREIGN KEY (ae_id) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE
+);
+
+CREATE INDEX acl_entries_idx_ae_scheme ON acl_entries (ae_scheme);
+
+CREATE INDEX acl_entries_idx_ae_id ON acl_entries (ae_id);
+
+--
+-- Table: objects
+--
+DROP TABLE objects;
+
+CREATE TABLE objects (
+ ob_type varchar(16) NOT NULL,
+ ob_name varchar(255) NOT NULL,
+ ob_owner integer,
+ ob_acl_get integer,
+ ob_acl_store integer,
+ ob_acl_show integer,
+ ob_acl_destroy integer,
+ ob_acl_flags integer,
+ ob_expires datetime,
+ ob_created_by varchar(255) NOT NULL,
+ ob_created_from varchar(255) NOT NULL,
+ ob_created_on datetime NOT NULL,
+ ob_stored_by varchar(255),
+ ob_stored_from varchar(255),
+ ob_stored_on datetime,
+ ob_downloaded_by varchar(255),
+ ob_downloaded_from varchar(255),
+ ob_downloaded_on datetime,
+ ob_comment varchar(255),
+ PRIMARY KEY (ob_name, ob_type),
+ FOREIGN KEY (ob_acl_destroy) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_acl_flags) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_acl_get) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_owner) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_acl_show) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_acl_store) REFERENCES acls(ac_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ FOREIGN KEY (ob_type) REFERENCES types(ty_name)
+);
+
+CREATE INDEX objects_idx_ob_acl_destroy ON objects (ob_acl_destroy);
+
+CREATE INDEX objects_idx_ob_acl_flags ON objects (ob_acl_flags);
+
+CREATE INDEX objects_idx_ob_acl_get ON objects (ob_acl_get);
+
+CREATE INDEX objects_idx_ob_owner ON objects (ob_owner);
+
+CREATE INDEX objects_idx_ob_acl_show ON objects (ob_acl_show);
+
+CREATE INDEX objects_idx_ob_acl_store ON objects (ob_acl_store);
+
+CREATE INDEX objects_idx_ob_type ON objects (ob_type);
+
+--
+-- Table: duo
+--
+DROP TABLE duo;
+
+CREATE TABLE duo (
+ du_name varchar(255) NOT NULL,
+ du_type varchar(16) NOT NULL,
+ du_key varchar(255) NOT NULL,
+ PRIMARY KEY (du_name, du_type),
+ FOREIGN KEY (du_type, du_name) REFERENCES objects(ob_type, ob_name)
+);
+
+CREATE INDEX duo_idx_du_type_du_name ON duo (du_type, du_name);
+
+COMMIT;