]> hydra-www.ietfng.org Git - csdb/commitdiff
cdb; foreign key handling
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 12 Mar 2022 21:10:15 +0000 (21:10 +0000)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 12 Mar 2022 21:11:08 +0000 (21:11 +0000)
- init: add foreign key behavior constraints
- everywhere: request sqlite honor them

cdb

diff --git a/cdb b/cdb
index 5dad4454efc992449e4ee3a86b09ac3bbc555528..1bad82ca862787caf5916edac9628a96f4256622 100755 (executable)
--- a/cdb
+++ b/cdb
@@ -378,8 +378,10 @@ mksubcmd(function(c)
          hash   TEXT NOT NULL UNIQUE ON CONFLICT FAIL)]])
   ddo([[CREATE TABLE IF NOT EXISTS hash_hash_superseders (
          supersederid INTEGER PRIMARY KEY ASC,
-         oldid INTEGER REFERENCES hashes(hashid),
-         newid INTEGER REFERENCES hashes(hashid),
+         oldid INTEGER REFERENCES hashes(hashid)
+           ON UPDATE CASCADE ON DELETE RESTRICT,
+         newid INTEGER REFERENCES hashes(hashid)
+           ON UPDATE CASCADE ON DELETE RESTRICT,
          timestamp INTEGER DEFAULT CURRENT_TIMESTAMP,
          note TEXT,
          UNIQUE(oldid, newid) ON CONFLICT FAIL)]])
@@ -388,8 +390,10 @@ mksubcmd(function(c)
   -- TODO: can we make path_hash a WITHOUT ROWID table?
   ddo([[CREATE TABLE IF NOT EXISTS path_hash (
          pairid INTEGER PRIMARY KEY ASC,
-         pathid INTEGER REFERENCES paths(pathid),
-         hashid INTEGER REFERENCES hashes(hashid),
+         pathid INTEGER REFERENCES paths(pathid)
+           ON UPDATE CASCADE ON DELETE RESTRICT,
+         hashid INTEGER REFERENCES hashes(hashid)
+           ON UPDATE CASCADE ON DELETE RESTRICT,
          timestamp INTEGER DEFAULT CURRENT_TIMESTAMP,
          UNIQUE(pathid, hashid) ON CONFLICT FAIL)]])
   ddo([[CREATE INDEX IF NOT EXISTS path_hash_idx_pathid
@@ -1142,6 +1146,8 @@ if not dbh then
   error ("Database error: " .. err)
 end
 
+sql_do(dbh, "PRAGMA foreign_keys = ON;")
+
 args:_command_fn(dbh)
 
 ----------------------------------------------------------------- }}}