Add new expression type 'xser' to represent series expressions,
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0280.schema.query-xser.sql
1 BEGIN;
2
3 -- Create new expression type 'xser' for serial expressions,
4 -- i.e. series of expressions separated by operators
5
6 INSERT INTO config.upgrade_log (version) VALUES ('0280'); -- Scott McKellar
7
8 ALTER TABLE query.expression
9         DROP CONSTRAINT expression_type;
10
11 ALTER TABLE query.expression
12         ADD CONSTRAINT expression_type CHECK
13     ( type IN (
14          'xbet',    -- between
15          'xbind',   -- bind variable
16          'xbool',   -- boolean
17          'xcase',   -- case
18          'xcast',   -- cast
19          'xcol',    -- column
20          'xex',     -- exists
21          'xfld',    -- field
22          'xfunc',   -- function
23          'xin',     -- in
24          'xisnull', -- is null
25          'xnull',   -- null
26          'xnum',    -- number
27          'xop',     -- operator
28          'xser',    -- series
29          'xstr',    -- string
30          'xsubq'    -- subquery
31     ) );
32
33 -- Create updatable view for series expressions
34
35 CREATE OR REPLACE VIEW query.expr_xser AS
36     SELECT
37                 id,
38                 parenthesize,
39                 parent_expr,
40                 seq_no,
41                 operator,
42                 negate
43     FROM
44         query.expression
45     WHERE
46         type = 'xser';
47
48 CREATE OR REPLACE RULE query_expr_xser_insert_rule AS
49     ON INSERT TO query.expr_xser
50     DO INSTEAD
51     INSERT INTO query.expression (
52                 id,
53                 type,
54                 parenthesize,
55                 parent_expr,
56                 seq_no,
57                 operator,
58                 negate
59     ) VALUES (
60         COALESCE(NEW.id, NEXTVAL('query.expression_id_seq'::REGCLASS)),
61         'xser',
62         COALESCE(NEW.parenthesize, FALSE),
63         NEW.parent_expr,
64         COALESCE(NEW.seq_no, 1),
65                 NEW.operator,
66                 NEW.negate
67     );
68
69 CREATE OR REPLACE RULE query_expr_xser_update_rule AS
70     ON UPDATE TO query.expr_xser
71     DO INSTEAD
72     UPDATE query.expression SET
73         id = NEW.id,
74         parenthesize = NEW.parenthesize,
75         parent_expr = NEW.parent_expr,
76         seq_no = NEW.seq_no,
77                 operator = NEW.operator,
78                 negate = NEW.negate
79     WHERE
80         id = OLD.id;
81
82 CREATE OR REPLACE RULE query_expr_xser_delete_rule AS
83     ON DELETE TO query.expr_xser
84     DO INSTEAD
85     DELETE FROM query.expression WHERE id = OLD.id;
86
87 COMMIT;