X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=blackboard-dns.git;a=blobdiff_plain;f=DDNS%2FDBInfo.hs;fp=DDNS%2FDBInfo.hs;h=21cfe0334b4148e35bde6d14d741c6e9406d3291;hp=0000000000000000000000000000000000000000;hb=f46e263327d20c700179b2d3a5896be82d3b4aca;hpb=23aa8a3221ebacf5891def22006b9850497437de diff --git a/DDNS/DBInfo.hs b/DDNS/DBInfo.hs new file mode 100644 index 0000000..21cfe03 --- /dev/null +++ b/DDNS/DBInfo.hs @@ -0,0 +1,92 @@ +module DDNS.DBInfo + ( dbinfo + , indexDeclarations + ) + where + +import Database.HaskellDB.DBSpec +import qualified Database.HaskellDB.DBSpec.PPHelpers as PP + + +dbinfo :: DBInfo +dbinfo = DBInfo { + dbname = "BlackboardDNS" + , opts = DBOptions { + useBString = False + , makeIdent = PP.mkIdentPreserving + } + , tbls = [ zones + , records + ] + } + +zones :: TInfo +zones = TInfo { + tname = "zones" + , cols = [ CInfo "zone" (StringT, False) + , CInfo "ns" (StringT, False) + , CInfo "owner" (StringT, False) + , CInfo "serial" (IntT , False) + , CInfo "refresh" (IntT , False) + , CInfo "retry" (IntT , False) + , CInfo "expire" (IntT , False) + , CInfo "minTTL" (IntT , False) + ] + } + +records :: TInfo +records = TInfo { + tname = "records" + , cols = [ CInfo "name" (StringT, False) + , CInfo "zone" (StringT, False) + , CInfo "recType" (StringT, False) + , CInfo "recData" (StringT, False) + ] + } + +-- This kind of dirty hack should go away someday. +indexDeclarations :: [String] +indexDeclarations + = [ "CREATE UNIQUE INDEX pkey_on_zones ON zones ( zone )" + , "CREATE INDEX pkey_on_records ON records ( name, zone )" + , "CREATE TRIGGER insert_into_records\n" ++ + " BEFORE INSERT ON records\n" ++ + " FOR EACH ROW\n" ++ + " WHEN\n" ++ + " NOT EXISTS (\n" ++ + " SELECT 1\n" ++ + " FROM zones\n" ++ + " WHERE zone = NEW.zone\n" ++ + " )\n" ++ + " BEGIN\n" ++ + " SELECT RAISE(ABORT, \"FK constraint failure\");\n" ++ + " END" + , "CREATE TRIGGER change_record_zone\n" ++ + " BEFORE UPDATE OF zone ON records\n" ++ + " FOR EACH ROW\n" ++ + " WHEN\n" ++ + " NOT EXISTS (\n" ++ + " SELECT 1\n" ++ + " FROM zones\n" ++ + " WHERE zone = NEW.zone\n" ++ + " )\n" ++ + " BEGIN\n" ++ + " SELECT RAISE(ABORT, \"FK constraint failure\");\n" ++ + " END" + , "CREATE TRIGGER update_zone_name\n" ++ + " AFTER UPDATE OF zone ON zones\n" ++ + " FOR EACH ROW\n" ++ + " BEGIN\n" ++ + " UPDATE records\n" ++ + " SET zone = NEW.zone\n" ++ + " WHERE zone = OLD.zone;\n" ++ + " END" + , "CREATE TRIGGER delete_zone\n" ++ + " AFTER DELETE ON zones\n" ++ + " FOR EACH ROW\n" ++ + " BEGIN\n" ++ + " DELETE\n" ++ + " FROM records\n" ++ + " WHERE zone = OLD.zone;\n" ++ + " END" + ]