- Fix inability to add existing tags to item

- Fix error if a local tag matches a different remote tag
- Add additional triggers to enforce referential integrity
This commit is contained in:
Dan Stillman 2008-08-15 05:32:18 +00:00
parent 5990ac0618
commit c73513576a
3 changed files with 283 additions and 12 deletions

View file

@ -1,4 +1,4 @@
-- 2
-- 3
-- Triggers to validate date field
DROP TRIGGER IF EXISTS insert_date_field;
@ -45,7 +45,7 @@ DROP TRIGGER IF EXISTS fku_annotations_itemID_itemAttachments_itemID;
CREATE TRIGGER fku_annotations_itemID_itemAttachments_itemID
BEFORE UPDATE OF itemID ON annotations
FOR EACH ROW
BEGIN
BEGIN
SELECT RAISE(ABORT, 'update on table "annotations" violates foreign key constraint "fku_annotations_itemID_itemAttachments_itemID"')
WHERE NEW.itemID IS NOT NULL AND (SELECT COUNT(*) FROM itemAttachments WHERE itemID = NEW.itemID) = 0;
END;
@ -58,6 +58,13 @@ CREATE TRIGGER fkd_annotations_itemID_itemAttachments_itemID
WHERE (SELECT COUNT(*) FROM annotations WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_itemAttachments_itemID_annotations_itemID;
CREATE TRIGGER fku_itemAttachments_itemID_annotations_itemID
AFTER UPDATE OF itemID ON itemAttachments
FOR EACH ROW BEGIN
UPDATE annotations SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- collections/parentCollectionID
DROP TRIGGER IF EXISTS fki_collections_parentCollectionID_collections_collectionID;
CREATE TRIGGER fki_collections_parentCollectionID_collections_collectionID
@ -83,6 +90,13 @@ CREATE TRIGGER fkd_collections_parentCollectionID_collections_collectionID
WHERE (SELECT COUNT(*) FROM collections WHERE parentCollectionID = OLD.collectionID) > 0;
END;
DROP TRIGGER IF EXISTS fku_collections_collectionID_collections_parentCollectionID;
CREATE TRIGGER fku_collections_collectionID_collections_parentCollectionID
AFTER UPDATE OF collectionID ON collections
FOR EACH ROW BEGIN
UPDATE collections SET parentCollectionID=NEW.collectionID WHERE parentCollectionID=OLD.collectionID;
END;
-- collectionItems/collectionID
DROP TRIGGER IF EXISTS fki_collectionItems_collectionID_collections_collectionID;
CREATE TRIGGER fki_collectionItems_collectionID_collections_collectionID
@ -108,6 +122,13 @@ CREATE TRIGGER fkd_collectionItems_collectionID_collections_collectionID
WHERE (SELECT COUNT(*) FROM collectionItems WHERE collectionID = OLD.collectionID) > 0;
END;
DROP TRIGGER IF EXISTS fku_collections_collectionID_collectionItems_collectionID;
CREATE TRIGGER fku_collections_collectionID_collectionItems_collectionID
AFTER UPDATE OF collectionID ON collections
FOR EACH ROW BEGIN
UPDATE collectionItems SET collectionID=NEW.collectionID WHERE collectionID=OLD.collectionID;
END;
-- collectionItems/itemID
DROP TRIGGER IF EXISTS fki_collectionItems_itemID_items_itemID;
CREATE TRIGGER fki_collectionItems_itemID_items_itemID
@ -133,6 +154,13 @@ CREATE TRIGGER fkd_collectionItems_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM collectionItems WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_collectionItems_itemID;
CREATE TRIGGER fku_items_itemID_collectionItems_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE collectionItems SET collectionID=NEW.itemID WHERE collectionID=OLD.itemID;
END;
-- creators/creatorDataID
DROP TRIGGER IF EXISTS fki_creators_creatorDataID_creatorData_creatorDataID;
CREATE TRIGGER fki_creators_creatorDataID_creatorData_creatorDataID
@ -158,6 +186,14 @@ CREATE TRIGGER fkd_creators_creatorDataID_creatorData_creatorDataID
WHERE (SELECT COUNT(*) FROM creators WHERE creatorDataID = OLD.creatorDataID) > 0;
END;
DROP TRIGGER IF EXISTS fku_creatorData_creatorDataID_creators_creatorDataID;
CREATE TRIGGER fku_creatorData_creatorDataID_creators_creatorDataID
BEFORE UPDATE OF creatorDataID ON creatorData
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "creatorData" violates foreign key constraint "fku_creatorData_creatorDataID_creators_creatorDataID"')
WHERE (SELECT COUNT(*) FROM creators WHERE creatorDataID = OLD.creatorDataID) > 0;
END;
-- fulltextItems/itemID
DROP TRIGGER IF EXISTS fki_fulltextItems_itemID_items_itemID;
CREATE TRIGGER fki_fulltextItems_itemID_items_itemID
@ -183,6 +219,14 @@ CREATE TRIGGER fkd_fulltextItems_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM fulltextItems WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_fulltextItems_itemID;
CREATE TRIGGER fku_items_itemID_fulltextItems_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE fulltextItems SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- fulltextItemWords/wordID
DROP TRIGGER IF EXISTS fki_fulltextItemWords_wordID_fulltextWords_wordID;
CREATE TRIGGER fki_fulltextItemWords_wordID_fulltextWords_wordID
@ -208,6 +252,14 @@ CREATE TRIGGER fkd_fulltextItemWords_wordID_fulltextWords_wordID
WHERE (SELECT COUNT(*) FROM fulltextItemWords WHERE wordID = OLD.wordID) > 0;
END;
DROP TRIGGER IF EXISTS fku_fulltextWords_wordID_fulltextItemWords_wordID;
CREATE TRIGGER fku_fulltextWords_wordID_fulltextItemWords_wordID
BEFORE UPDATE OF wordID ON fulltextWords
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "fulltextWords" violates foreign key constraint "fku_fulltextWords_wordID_fulltextItemWords_wordID"')
WHERE (SELECT COUNT(*) FROM fulltextItemWords WHERE wordID = OLD.wordID) > 0;
END;
-- fulltextItemWords/itemID
DROP TRIGGER IF EXISTS fki_fulltextItemWords_itemID_items_itemID;
CREATE TRIGGER fki_fulltextItemWords_itemID_items_itemID
@ -233,6 +285,13 @@ CREATE TRIGGER fkd_fulltextItemWords_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM fulltextItemWords WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_fulltextItemWords_itemID;
CREATE TRIGGER fku_items_itemID_fulltextItemWords_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE fulltextItemWords SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- highlights/itemID
DROP TRIGGER IF EXISTS fki_highlights_itemID_itemAttachments_itemID;
CREATE TRIGGER fki_highlights_itemID_itemAttachments_itemID
@ -258,6 +317,13 @@ CREATE TRIGGER fkd_highlights_itemID_itemAttachments_itemID
WHERE (SELECT COUNT(*) FROM highlights WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_itemAttachments_itemID_highlights_itemID;
CREATE TRIGGER fku_itemAttachments_itemID_highlights_itemID
AFTER UPDATE OF itemID ON itemAttachments
FOR EACH ROW BEGIN
UPDATE highlights SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemAttachments/itemID
DROP TRIGGER IF EXISTS fki_itemAttachments_itemID_items_itemID;
CREATE TRIGGER fki_itemAttachments_itemID_items_itemID
@ -283,6 +349,13 @@ CREATE TRIGGER fkd_itemAttachments_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemAttachments WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemAttachments_itemID;
CREATE TRIGGER fku_items_itemID_itemAttachments_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemAttachments SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemAttachments/sourceItemID
DROP TRIGGER IF EXISTS fki_itemAttachments_sourceItemID_items_itemID;
CREATE TRIGGER fki_itemAttachments_sourceItemID_items_itemID
@ -308,6 +381,13 @@ CREATE TRIGGER fkd_itemAttachments_sourceItemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemAttachments WHERE sourceItemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemAttachments_sourceItemID;
CREATE TRIGGER fku_items_itemID_itemAttachments_sourceItemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemAttachments SET sourceItemID=NEW.itemID WHERE sourceItemID=OLD.itemID;
END;
-- itemCreators/itemID
DROP TRIGGER IF EXISTS fki_itemCreators_itemID_items_itemID;
CREATE TRIGGER fki_itemCreators_itemID_items_itemID
@ -333,6 +413,13 @@ CREATE TRIGGER fkd_itemCreators_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemCreators WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemCreators_itemID;
CREATE TRIGGER fku_items_itemID_itemCreators_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemCreators SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemCreators/creatorID
DROP TRIGGER IF EXISTS fki_itemCreators_creatorID_creators_creatorID;
CREATE TRIGGER fki_itemCreators_creatorID_creators_creatorID
@ -358,6 +445,13 @@ CREATE TRIGGER fkd_itemCreators_creatorID_creators_creatorID
WHERE (SELECT COUNT(*) FROM itemCreators WHERE creatorID = OLD.creatorID) > 0;
END;
DROP TRIGGER IF EXISTS fku_creators_creatorID_itemCreators_creatorID;
CREATE TRIGGER fku_creators_creatorID_itemCreators_creatorID
AFTER UPDATE OF creatorID ON creators
FOR EACH ROW BEGIN
UPDATE itemCreators SET creatorID=NEW.creatorID WHERE creatorID=OLD.creatorID;
END;
-- itemCreators/creatorTypeID
DROP TRIGGER IF EXISTS fki_itemCreators_creatorTypeID_creatorTypes_creatorTypeID;
CREATE TRIGGER fki_itemCreators_creatorTypeID_creatorTypes_creatorTypeID
@ -383,6 +477,14 @@ CREATE TRIGGER fkd_itemCreators_creatorTypeID_creatorTypes_creatorTypeID
WHERE (SELECT COUNT(*) FROM itemCreators WHERE creatorTypeID = OLD.creatorTypeID) > 0;
END;
DROP TRIGGER IF EXISTS fku_creatorTypes_creatorTypeID_itemCreators_creatorTypeID;
CREATE TRIGGER fku_creatorTypes_creatorTypeID_itemCreators_creatorTypeID
BEFORE UPDATE OF creatorTypeID ON creatorTypes
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "creatorTypes" violates foreign key constraint "fku_creatorTypes_creatorTypeID_itemCreators_creatorTypeID"')
WHERE (SELECT COUNT(*) FROM itemCreators WHERE creatorTypeID = OLD.creatorTypeID) > 0;
END;
-- itemData/itemID
DROP TRIGGER IF EXISTS fki_itemData_itemID_items_itemID;
CREATE TRIGGER fki_itemData_itemID_items_itemID
@ -408,6 +510,13 @@ CREATE TRIGGER fkd_itemData_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemData WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemData_itemID;
CREATE TRIGGER fku_items_itemID_itemData_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemData SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemData/fieldID
DROP TRIGGER IF EXISTS fki_itemData_fieldID_fields_fieldID;
CREATE TRIGGER fki_itemData_fieldID_fields_fieldID
@ -433,6 +542,14 @@ CREATE TRIGGER fkd_itemData_fieldID_fields_fieldID
WHERE (SELECT COUNT(*) FROM itemData WHERE fieldID = OLD.fieldID) > 0;
END;
DROP TRIGGER IF EXISTS fku_fields_fieldID_itemData_fieldID;
CREATE TRIGGER fku_fields_fieldID_itemData_fieldID
BEFORE UPDATE OF fieldID ON FIELDS
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "fields" violates foreign key constraint "fku_fields_fieldID_itemData_fieldID"')
WHERE (SELECT COUNT(*) FROM itemData WHERE fieldID = OLD.fieldID) > 0;
END;
-- itemData/valueID
DROP TRIGGER IF EXISTS fki_itemData_valueID_itemDataValues_valueID;
CREATE TRIGGER fki_itemData_valueID_itemDataValues_valueID
@ -458,6 +575,14 @@ CREATE TRIGGER fkd_itemData_valueID_itemDataValues_valueID
WHERE (SELECT COUNT(*) FROM itemData WHERE valueID = OLD.valueID) > 0;
END;
DROP TRIGGER IF EXISTS fku_itemDataValues_valueID_itemData_valueID;
CREATE TRIGGER fku_itemDataValues_valueID_itemData_valueID
BEFORE UPDATE OF valueID ON itemDataValues
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "itemDataValues" violates foreign key constraint "fku_itemDataValues_valueID_itemData_valueID"')
WHERE (SELECT COUNT(*) FROM itemData WHERE valueID = OLD.valueID) > 0;
END;
-- itemNotes/itemID
DROP TRIGGER IF EXISTS fki_itemNotes_itemID_items_itemID;
CREATE TRIGGER fki_itemNotes_itemID_items_itemID
@ -483,6 +608,13 @@ CREATE TRIGGER fkd_itemNotes_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemNotes WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemNotes_itemID;
CREATE TRIGGER fku_items_itemID_itemNotes_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemNotes SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemNotes/sourceItemID
DROP TRIGGER IF EXISTS fki_itemNotes_sourceItemID_items_itemID;
CREATE TRIGGER fki_itemNotes_sourceItemID_items_itemID
@ -508,6 +640,13 @@ CREATE TRIGGER fkd_itemNotes_sourceItemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemNotes WHERE sourceItemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemNotes_sourceItemID;
CREATE TRIGGER fku_items_itemID_itemNotes_sourceItemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemNotes SET sourceItemID=NEW.itemID WHERE sourceItemID=OLD.itemID;
END;
-- itemSeeAlso/itemID
DROP TRIGGER IF EXISTS fki_itemSeeAlso_itemID_items_itemID;
CREATE TRIGGER fki_itemSeeAlso_itemID_items_itemID
@ -533,6 +672,13 @@ CREATE TRIGGER fkd_itemSeeAlso_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemSeeAlso WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemSeeAlso_itemID;
CREATE TRIGGER fku_items_itemID_itemSeeAlso_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemSeeAlso SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemSeeAlso/linkedItemID
DROP TRIGGER IF EXISTS fki_itemSeeAlso_linkedItemID_items_itemID;
CREATE TRIGGER fki_itemSeeAlso_linkedItemID_items_itemID
@ -558,6 +704,13 @@ CREATE TRIGGER fkd_itemSeeAlso_linkedItemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemSeeAlso WHERE linkedItemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fku_items_itemID_itemSeeAlso_linkedItemID;
CREATE TRIGGER fku_items_itemID_itemSeeAlso_linkedItemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemSeeAlso SET linkedItemID=NEW.itemID WHERE linkedItemID=OLD.itemID;
END;
-- itemTags/itemID
DROP TRIGGER IF EXISTS fki_itemTags_itemID_items_itemID;
CREATE TRIGGER fki_itemTags_itemID_items_itemID
@ -583,6 +736,13 @@ CREATE TRIGGER fkd_itemTags_itemID_items_itemID
WHERE (SELECT COUNT(*) FROM itemTags WHERE itemID = OLD.itemID) > 0;
END;
DROP TRIGGER IF EXISTS fkd_items_itemID_itemTags_itemID;
CREATE TRIGGER fkd_items_itemID_itemTags_itemID
AFTER UPDATE OF itemID ON items
FOR EACH ROW BEGIN
UPDATE itemTags SET itemID=NEW.itemID WHERE itemID=OLD.itemID;
END;
-- itemTags/tagID
DROP TRIGGER IF EXISTS fki_itemTags_tagID_tags_tagID;
CREATE TRIGGER fki_itemTags_tagID_tags_tagID
@ -608,6 +768,13 @@ CREATE TRIGGER fkd_itemTags_tagID_tags_tagID
WHERE (SELECT COUNT(*) FROM itemTags WHERE tagID = OLD.tagID) > 0;
END;
DROP TRIGGER IF EXISTS fku_tags_tagID_itemTags_tagID;
CREATE TRIGGER fku_tags_tagID_itemTags_tagID
AFTER UPDATE OF tagID ON tags
FOR EACH ROW BEGIN
UPDATE itemTags SET tagID=NEW.tagID WHERE tagID=OLD.tagID;
END;
-- savedSearchConditions/savedSearchID
DROP TRIGGER IF EXISTS fki_savedSearchConditions_savedSearchID_savedSearches_savedSearchID;
CREATE TRIGGER fki_savedSearchConditions_savedSearchID_savedSearches_savedSearchID
@ -633,6 +800,13 @@ CREATE TRIGGER fkd_savedSearchConditions_savedSearchID_savedSearches_savedSearch
WHERE (SELECT COUNT(*) FROM savedSearchConditions WHERE savedSearchID = OLD.savedSearchID) > 0;
END;
DROP TRIGGER IF EXISTS fku_savedSearches_savedSearchID_savedSearchConditions_savedSearchID;
CREATE TRIGGER fku_savedSearches_savedSearchID_savedSearchConditions_savedSearchID
AFTER UPDATE OF savedSearchID ON savedSearches
FOR EACH ROW BEGIN
UPDATE savedSearchConditions SET savedSearchID=NEW.savedSearchID WHERE savedSearchID=OLD.savedSearchID;
END;
-- syncDeleteLog/syncObjectTypeID
DROP TRIGGER IF EXISTS fki_syncDeleteLog_syncObjectTypeID_syncObjectTypes_syncObjectTypeID;
CREATE TRIGGER fki_syncDeleteLog_syncObjectTypeID_syncObjectTypes_syncObjectTypeID
@ -658,6 +832,14 @@ CREATE TRIGGER fkd_syncDeleteLog_syncObjectTypeID_syncObjectTypes_syncObjectType
WHERE (SELECT COUNT(*) FROM syncDeleteLog WHERE syncObjectTypeID = OLD.syncObjectTypeID) > 0;
END;
DROP TRIGGER IF EXISTS fku_syncObjectTypes_syncObjectTypeID_syncDeleteLog_syncObjectTypeID;
CREATE TRIGGER fku_syncObjectTypes_syncObjectTypeID_syncDeleteLog_syncObjectTypeID
BEFORE DELETE ON syncObjectTypes
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "syncObjectTypes" violates foreign key constraint "fku_syncObjectTypes_syncObjectTypeID_syncDeleteLog_syncObjectTypeID"')
WHERE (SELECT COUNT(*) FROM syncDeleteLog WHERE syncObjectTypeID = OLD.syncObjectTypeID) > 0;
END;
-- proxyHosts/proxyID
DROP TRIGGER IF EXISTS fki_proxyHosts_proxyID_proxies_proxyID;
CREATE TRIGGER fki_proxyHosts_proxyID_proxies_proxyID
@ -682,3 +864,11 @@ CREATE TRIGGER fkd_proxyHosts_proxyID_proxies_proxyID
SELECT RAISE(ABORT, 'delete on table "proxies" violates foreign key constraint "fkd_proxyHosts_proxyID_proxies_proxyID"')
WHERE (SELECT COUNT(*) FROM proxyHosts WHERE proxyID = OLD.proxyID) > 0;
END;
DROP TRIGGER IF EXISTS fku_proxies_proxyID_proxyHosts_proxyID;
CREATE TRIGGER fku_proxies_proxyID_proxyHosts_proxyID
BEFORE DELETE ON proxies
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'update on table "proxies" violates foreign key constraint "fku_proxies_proxyID_proxyHosts_proxyID"')
WHERE (SELECT COUNT(*) FROM proxyHosts WHERE proxyID = OLD.proxyID) > 0;
END;