module MigrationHelpers def foreign_key(from_table, from_column, to_table) constraint_name = "fk_#{from_table}_#{to_table}" execute %{ CREATE TRIGGER #{constraint_name}_insert BEFORE INSERT ON #{from_table} FOR EACH ROW BEGIN SELECT RAISE(ABORT, "constraint violation: #{constraint_name}") WHERE (SELECT id FROM #{to_table} WHERE id = NEW.#{from_column}) IS NULL; END; } execute %{ CREATE TRIGGER #{constraint_name}_update BEFORE UPDATE ON #{from_table} FOR EACH ROW BEGIN SELECT RAISE(ABORT, "constraint violation: #{constraint_name}") WHERE (SELECT id FROM #{to_table} WHERE id = NEW.#{from_column}) IS NULL; END; } execute %{ CREATE TRIGGER #{constraint_name}_delete BEFORE DELETE ON #{to_table} FOR EACH ROW BEGIN SELECT RAISE(ABORT, "constraint violation: #{constraint_name}") WHERE (SELECT id FROM #{from_table} WHERE #{from_column} = OLD.id) IS NOT NULL; END; } end end