1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//! v7.37.18 (18.12) — ENABLE/DISABLE TRIGGER variants beyond
//! ALL / <name>. PG dumps emit:
//! ENABLE TRIGGER USER — all user-defined triggers
//! ENABLE TRIGGER REPLICA — replica-only (session_replication_role)
//! ENABLE TRIGGER ALWAYS — always run regardless of role
//! ENABLE ALWAYS TRIGGER <name>
//! ENABLE REPLICA TRIGGER <name>
//! SPG has no replication role, so these all reduce to the
//! existing ALL or Named selector; this commit makes the parser
//! accept the forms cleanly.
use spg_engine::Engine;
fn engine_with_trigger() -> Engine {
let mut e = Engine::new();
e.execute("CREATE TABLE t (id INT)").unwrap();
e.execute(
"CREATE FUNCTION noop_fn() RETURNS TRIGGER AS $$ BEGIN RETURN NEW; END; $$ LANGUAGE plpgsql",
)
.unwrap();
e.execute("CREATE TRIGGER ix_trg BEFORE INSERT ON t FOR EACH ROW EXECUTE FUNCTION noop_fn()")
.unwrap();
e
}
#[test]
fn enable_disable_trigger_user_accepted() {
let mut e = engine_with_trigger();
e.execute("ALTER TABLE t ENABLE TRIGGER USER").unwrap();
e.execute("ALTER TABLE t DISABLE TRIGGER USER").unwrap();
}
#[test]
fn enable_disable_trigger_replica_accepted() {
let mut e = engine_with_trigger();
e.execute("ALTER TABLE t ENABLE TRIGGER REPLICA").unwrap();
e.execute("ALTER TABLE t DISABLE TRIGGER REPLICA").unwrap();
}
#[test]
fn enable_disable_trigger_always_accepted() {
let mut e = engine_with_trigger();
e.execute("ALTER TABLE t ENABLE TRIGGER ALWAYS").unwrap();
e.execute("ALTER TABLE t DISABLE TRIGGER ALWAYS").unwrap();
}
#[test]
fn enable_replica_trigger_named_accepted() {
let mut e = engine_with_trigger();
e.execute("ALTER TABLE t ENABLE REPLICA TRIGGER ix_trg")
.unwrap();
e.execute("ALTER TABLE t ENABLE ALWAYS TRIGGER ix_trg")
.unwrap();
e.execute("ALTER TABLE t DISABLE TRIGGER ix_trg").unwrap();
}
#[test]
fn enable_disable_trigger_all_still_works() {
// Regression guard for the existing ALL / <name> path.
let mut e = engine_with_trigger();
e.execute("ALTER TABLE t DISABLE TRIGGER ALL").unwrap();
e.execute("ALTER TABLE t ENABLE TRIGGER ALL").unwrap();
e.execute("ALTER TABLE t DISABLE TRIGGER ix_trg").unwrap();
e.execute("ALTER TABLE t ENABLE TRIGGER ix_trg").unwrap();
}