<field reporter:label="Function ID" name="function_id" reporter:datatype="link"/>
<field reporter:label="Subquery" name="subquery" reporter:datatype="link"/>
<field reporter:label="Cast Type" name="cast_type" reporter:datatype="link"/>
+ <field reporter:label="Negate?" name="negate" reporter:datatype="bool"/>
</fields>
<links>
<link field="parent_expr" reltype="has_a" key="id" map="" class="qxp"/>
</permacrud>
</class>
- <class id="xnbet" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="query::expr_xnbet" oils_persist:tablename="query.expr_xnbet" reporter:label="Not Between Expression">
- <fields oils_persist:primary="id" oils_persist:sequence="expression_id_seq">
- <field reporter:label="Expression ID" name="id" reporter:datatype="id"/>
- <field reporter:label="Is Parenthesized" name="parenthesize" reporter:datatype="bool"/>
- <field reporter:label="Parent Expression" name="parent_expr" reporter:datatype="link"/>
- <field reporter:label="Sequence Number" name="seq_no" reporter:datatype="int"/>
- </fields>
- <links>
- <link field="parent_expr" reltype="might_have" key="id" map="" class="qxp"/>
- </links>
- <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
- </permacrud>
- </class>
-
- <class id="xnex" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="query::expr_xnex" oils_persist:tablename="query.expr_xnex" reporter:label="Not Exists Expression">
- <fields oils_persist:primary="id" oils_persist:sequence="expression_id_seq">
- <field reporter:label="Expression ID" name="id" reporter:datatype="id"/>
- <field reporter:label="Is Parenthesized" name="parenthesize" reporter:datatype="bool"/>
- <field reporter:label="Parent Expression" name="parent_expr" reporter:datatype="link"/>
- <field reporter:label="Sequence Number" name="seq_no" reporter:datatype="int"/>
- <field reporter:label="Subquery" name="subquery" reporter:datatype="link"/>
- </fields>
- <links>
- <link field="parent_expr" reltype="might_have" key="id" map="" class="qxp"/>
- <link field="subquery" reltype="might_have" key="id" map="" class="qsq"/>
- </links>
- <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
- </permacrud>
- </class>
-
- <class id="xnin" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="query::expr_xnin" oils_persist:tablename="query.expr_xnin" reporter:label="Not In Expression">
- <fields oils_persist:primary="id" oils_persist:sequence="expression_id_seq">
- <field reporter:label="Expression ID" name="id" reporter:datatype="id"/>
- <field reporter:label="Is Parenthesized" name="parenthesize" reporter:datatype="bool"/>
- <field reporter:label="Parent Expression" name="parent_expr" reporter:datatype="link"/>
- <field reporter:label="Sequence Number" name="seq_no" reporter:datatype="int"/>
- <field reporter:label="Subquery" name="subquery" reporter:datatype="link"/>
- </fields>
- <links>
- <link field="parent_expr" reltype="might_have" key="id" map="" class="qxp"/>
- <link field="subquery" reltype="might_have" key="id" map="" class="qsq"/>
- </links>
- <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
- </permacrud>
- </class>
-
<class id="xnull" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="query::expr_xnull" oils_persist:tablename="query.expr_xnull" reporter:label="Null Expression">
<fields oils_persist:primary="id" oils_persist:sequence="expression_id_seq">
<field reporter:label="Expression ID" name="id" reporter:datatype="id"/>
'xfld', -- field
'xfunc', -- function
'xin', -- in
- 'xnbet', -- not between
- 'xnex', -- not exists
- 'xnin', -- not in
'xnull', -- null
'xnum', -- number
'xop', -- operator
subquery INT REFERENCES query.stored_query
DEFERRABLE INITIALLY DEFERRED,
cast_type INT REFERENCES query.datatype
- DEFERRABLE INITIALLY DEFERRED
+ DEFERRABLE INITIALLY DEFERRED,
+ negate BOOL NOT NULL DEFAULT FALSE
);
CREATE UNIQUE INDEX query_expr_parent_seq
DO INSTEAD
DELETE FROM query.expression WHERE id = OLD.id;
--- Create updatable view for NOT BETWEEN expressions
-
-CREATE OR REPLACE VIEW query.expr_xnbet AS
- SELECT
- id,
- parenthesize,
- parent_expr,
- seq_no
- FROM
- query.expression
- WHERE
- type = 'xnbet';
-
-CREATE OR REPLACE RULE query_expr_xnbet_insert_rule AS
- ON INSERT TO query.expr_xnbet
- DO INSTEAD
- INSERT INTO query.expression (
- id,
- type,
- parenthesize,
- parent_expr,
- seq_no
- ) VALUES (
- COALESCE(NEW.id, NEXTVAL('query.expression_id_seq'::REGCLASS)),
- 'xnbet',
- COALESCE(NEW.parenthesize, FALSE),
- NEW.parent_expr,
- COALESCE(NEW.seq_no, 1)
- );
-
-CREATE OR REPLACE RULE query_expr_xnbet_update_rule AS
- ON UPDATE TO query.expr_xnbet
- DO INSTEAD
- UPDATE query.expression SET
- id = NEW.id,
- parenthesize = NEW.parenthesize,
- parent_expr = NEW.parent_expr,
- seq_no = NEW.seq_no
- WHERE
- id = OLD.id;
-
-CREATE OR REPLACE RULE query_expr_xnbet_delete_rule AS
- ON DELETE TO query.expr_xnbet
- DO INSTEAD
- DELETE FROM query.expression WHERE id = OLD.id;
-
--- Create updatable view for NOT EXISTS expressions
-
-CREATE OR REPLACE VIEW query.expr_xnex AS
- SELECT
- id,
- parenthesize,
- parent_expr,
- seq_no,
- subquery
- FROM
- query.expression
- WHERE
- type = 'xnex';
-
-CREATE OR REPLACE RULE query_expr_xnex_insert_rule AS
- ON INSERT TO query.expr_xnex
- DO INSTEAD
- INSERT INTO query.expression (
- id,
- type,
- parenthesize,
- parent_expr,
- seq_no,
- subquery
- ) VALUES (
- COALESCE(NEW.id, NEXTVAL('query.expression_id_seq'::REGCLASS)),
- 'xnex',
- COALESCE(NEW.parenthesize, FALSE),
- NEW.parent_expr,
- COALESCE(NEW.seq_no, 1),
- NEW.subquery
- );
-
-CREATE OR REPLACE RULE query_expr_xnex_update_rule AS
- ON UPDATE TO query.expr_xnex
- DO INSTEAD
- UPDATE query.expression SET
- id = NEW.id,
- parenthesize = NEW.parenthesize,
- parent_expr = NEW.parent_expr,
- seq_no = NEW.seq_no,
- subquery = NEW.subquery
- WHERE
- id = OLD.id;
-
-CREATE OR REPLACE RULE query_expr_xnex_delete_rule AS
- ON DELETE TO query.expr_xnex
- DO INSTEAD
- DELETE FROM query.expression WHERE id = OLD.id;
-
--- Create updatable view for NOT IN expressions
-
-CREATE OR REPLACE VIEW query.expr_xnin AS
- SELECT
- id,
- parenthesize,
- parent_expr,
- seq_no,
- subquery
- FROM
- query.expression
- WHERE
- type = 'xnin';
-
-CREATE OR REPLACE RULE query_expr_xnin_insert_rule AS
- ON INSERT TO query.expr_xnin
- DO INSTEAD
- INSERT INTO query.expression (
- id,
- type,
- parenthesize,
- parent_expr,
- seq_no,
- subquery
- ) VALUES (
- COALESCE(NEW.id, NEXTVAL('query.expression_id_seq'::REGCLASS)),
- 'xnin',
- COALESCE(NEW.parenthesize, FALSE),
- NEW.parent_expr,
- COALESCE(NEW.seq_no, 1),
- NEW.subquery
- );
-
-CREATE OR REPLACE RULE query_expr_xnin_update_rule AS
- ON UPDATE TO query.expr_xnin
- DO INSTEAD
- UPDATE query.expression SET
- id = NEW.id,
- parenthesize = NEW.parenthesize,
- parent_expr = NEW.parent_expr,
- seq_no = NEW.seq_no,
- subquery = NEW.subquery
- WHERE
- id = OLD.id;
-
-CREATE OR REPLACE RULE query_expr_xnin_delete_rule AS
- ON DELETE TO query.expr_xnin
- DO INSTEAD
- DELETE FROM query.expression WHERE id = OLD.id;
-
-- Create updatable view for NULL expressions
CREATE OR REPLACE VIEW query.expr_xnull AS