<class id="vmsp" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="vandelay::match_set_point" oils_persist:tablename="vandelay.match_set_point" reporter:label="Record Matching Definition">
<fields oils_persist:primary="id" oils_persist:sequence="vandelay.match_set_point_id_seq">
<field reporter:label="Match Definition ID" name="id" reporter:datatype="id"/>
+ <field reporter:label="Expression Tree Parent" name="parent" reporter:datatype="link"/>
<field reporter:label="Match Set" name="match_set" reporter:datatype="link"/>
- <field reporter:label="Coded Field" name="svf" reporter:datatype="text"/>
+ <field reporter:label="Boolean Operator" name="bool_op" reporter:datatype="text"/>
+ <field reporter:label="Coded Field" name="svf" reporter:datatype="link"/>
<field reporter:label="Tag" name="tag" reporter:datatype="text"/>
<field reporter:label="Subfield" name="subfield" reporter:datatype="text"/>
- <field reporter:label="Required?" name="required" reporter:datatype="bool"/>
<field reporter:label="Importance" name="quality" reporter:datatype="int"/>
</fields>
<links>
+ <link field="parent" reltype="has_a" key="id" map="" class="vmsp"/>
<link field="match_set" reltype="has_a" key="id" map="" class="vms"/>
+ <link field="svf" reltype="has_a" key="id" map="" class="crad"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
- <create permission="CREATE_IMPORT_MATCH_SET ADMIN_IMPORT_IMPORT_MATCH_SET" context_field="owner"/>
- <retrieve permission="CREATE_IMPORT_MATCH_SET UPDATE_IMPORT_MATCH_SET DELETE_IMPORT_MATCH_SET" context_field="owner"/>
- <update permission="UPDATE_IMPORT_MATCH_SET" context_field="owner"/>
- <delete permission="DELETE_IMPORT_MATCH_SET" context_field="owner"/>
+ <create permission="CREATE_IMPORT_MATCH_SET ADMIN_IMPORT_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </create>
+ <retrieve permission="CREATE_IMPORT_MATCH_SET UPDATE_IMPORT_MATCH_SET DELETE_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </retrieve>
+ <update permission="UPDATE_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </update>
+ <delete permission="DELETE_IMPORT_MATCH_SET">
+ <context link="match_set" field="owner"/>
+ </delete>
</actions>
</permacrud>
</class>
-- Table to define match points, either FF via SVF or tag+subfield
CREATE TABLE vandelay.match_set_point (
id SERIAL PRIMARY KEY,
- match_set INT NOT NULL REFERENCES vandelay.match_set (id),
- svf TEXT REFERENCES config.record_attr_definition,
+ match_set INT REFERENCES vandelay.match_set (id),
+ parent INT REFERENCES vandelay.match_set_point (id),
+ bool_op TEXT CHECK (bool_op IS NULL OR (bool_op IN ('AND','OR','NOT'))),
+ svf TEXT REFERENCES config.record_attr_definition (name),
tag TEXT,
subfield TEXT,
- required BOOL NOT NULL DEFAULT TRUE,
quality INT NOT NULL DEFAULT 1, -- higher is better
CONSTRAINT vmsp_need_a_subfield_with_a_tag CHECK ((tag IS NOT NULL AND subfield IS NOT NULL) OR tag IS NULL),
- CONSTRAINT vmsp_need_a_tag_or_a_ff CHECK ((tag IS NOT NULL AND svf IS NULL) OR (tag IS NULL AND svf IS NOT NULL))
+ CONSTRAINT vmsp_need_a_tag_or_a_ff_or_a_bo CHECK (
+ (tag IS NOT NULL AND svf IS NULL AND bool_op IS NULL) OR
+ (tag IS NULL AND svf IS NOT NULL AND bool_op IS NULL) OR
+ (tag IS NULL AND svf IS NULL AND bool_op IS NOT NULL)
+ )
);
-CREATE UNIQUE INDEX vmsp_def_once_per_set ON vandelay.match_set_point (match_set, COALESCE(tag,''), COALESCE(subfield,''), COALESCE(svf,''));
CREATE TABLE vandelay.match_set_quality (
id SERIAL PRIMARY KEY,
first_round := TRUE;
-- whew ... here we go ...
+
+
+ -- Commented out until replaced by tree-ish version
+/*
FOR test IN SELECT * FROM vandelay.match_set_point WHERE match_set = my_bib_queue.match_set ORDER BY required DESC LOOP
IF test.tag IS NOT NULL THEN
FOR rvalue IN SELECT value FROM vandelay.flatten_marc( xml ) WHERE tag = test.tag AND subfield = test.subfield LOOP
FOR tmp_rec IN SELECT * FROM UNNEST(matches) LOOP
INSERT INTO vandelay.bib_match (matched_set, queued_record, eg_record, quality) VALUES (my_bib_queue.match_set, NEW.id, tmp_rec, (quality_set -> tmp_rec::TEXT));
END LOOP;
+*/
RETURN NEW;
END;