</actions>
</permacrud>
</class>
+ <class id="asq" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::search_query" oils_persist:tablename="actor.search_query" reporter:label="Search Query" oils_persist:field_safe="true">
+ <fields oils_persist:primary="id" oils_persist:sequence="actor.search_query_id_seq">
+ <field name="id" reporter:datatype="id" reporter:selector="label"/>
+ <field name="label" reporter:datatype="text" oils_persist:i18n="true"/>
+ <field name="query_text" reporter:datatype="text"/>
+ </fields>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <retrieve/>
+ </actions>
+ </permacrud>
+ </class>
+
<class id="asfg" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::search_filter_group" oils_persist:tablename="actor.search_filter_group" reporter:label="Search Filter Group" oils_persist:field_safe="true">
<fields oils_persist:primary="id" oils_persist:sequence="actor.search_filter_group_id_seq">
<field name="id" reporter:datatype="id" reporter:selector="label"/>
<field name="owner" reporter:datatype="org_unit"/>
- <field name="code" reporter:datatype="text"/>
<field name="label" reporter:datatype="text" oils_persist:i18n="true"/>
<field name="create_date" reporter:datatype="timestamp"/>
<field name="entries" oils_persist:virtual="true" reporter:datatype="link"/>
<fields oils_persist:primary="id" oils_persist:sequence="actor.search_filter_group_entry_id_seq">
<field name="id" reporter:datatype="id" reporter:selector="label"/>
<field name="grp" reporter:datatype="link"/>
- <field name="label" reporter:datatype="text" oils_persist:i18n="true"/>
<field name="pos" reporter:datatype="int"/>
- <field name="query_text" reporter:datatype="text"/>
+ <field name="query" reporter:datatype="link"/>
</fields>
<links>
<link field="grp" reltype="has_a" key="id" map="" class="asfge"/>
+ <link field="query" reltype="has_a" key="id" map="" class="asq"/>
</links>
<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
<actions>
<context link="grp" field="owner"/>
</create>
<retrieve/>
- <update permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner">
+ <update permission="ADMIN_SEARCH_FILTER_GROUP">
<context link="grp" field="owner"/>
</update>
- <delete permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner">
+ <delete permission="ADMIN_SEARCH_FILTER_GROUP">
<context link="grp" field="owner"/>
</delete>
</actions>
BEGIN;
--- QP sub-search inclusion will be based on actor.search_query.id
+-- General purpose query container. Any table the needs to store
+-- a QueryParser query should store it here. This will be the
+-- source for top-level and QP sub-search inclusion queries.
CREATE TABLE actor.search_query (
id SERIAL PRIMARY KEY,
label TEXT NOT NULL, -- i18n
- query_text TEXT NOT NULL, -- QP text
+ query_text TEXT NOT NULL -- QP text
);
-- e.g. "Reading Level"
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
label TEXT NOT NULL, -- i18n
create_date TIMESTAMPTZ NOT NULL DEFAULT now(),
- CONSTRAINT asfg_code_once_per_org UNIQUE (owner, code),
CONSTRAINT asfg_label_once_per_org UNIQUE (owner, label)
);
CONSTRAINT asfge_query_once_per_group UNIQUE (grp, query)
);
-
--- also use query for user saved searches.
--- this allows us to support user-default-search-filters for KCLS (opac36)
--- https://docs.google.com/document/d/1EvdytPqFjLwuA3R7U0tSuk3floBossoBdRfLR_1YH7Y/edit
--- note:would need a tmp stored proc to migrate properly
-ALTER TABLE actor.usr_saved_search
- ADD COLUMN query NOT NULL REFERENCES actor.search_query(id)
- ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
- DROP COLUMN query_text, -- gets from query
- DROP COLUMN name, -- gets from query
- DROP COLUMN query_type, -- may be presumptuous. QP text is the only used type.
-
---
-
COMMIT;
/*
-- Fictional Example
BEGIN;
-INSERT INTO actor.search_filter_group (owner, code, label) VALUES (4, 'reading_level', 'Reading Level');
-INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'Children', 'audience(a,b,c) locations(3,4,5,6)');
-INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'Juvenile', 'audience(j,d) locations(1,2,7,8)');
-INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'General', 'audience(e,f,g)');
+
+INSERT INTO actor.search_filter_group (owner, label)
+ VALUES (4, 'Reading Level');
+
+INSERT INTO actor.search_query (label, query_text)
+ VALUES ('Children', 'audience(a,b,c) locations(3,4,5,6)');
+INSERT INTO actor.search_query (label, query_text)
+ VALUES ('Juvenile', 'audience(j,d) locations(1,2,7,8)');
+INSERT INTO actor.search_query (label, query_text)
+ VALUES ('General', 'audience(e,f,g)');
+
+INSERT INTO actor.search_filter_group_entry (grp, query)
+ VALUES (1, (SELECT id FROM actor.search_query WHERE label = 'Children'));
+INSERT INTO actor.search_filter_group_entry (grp, query)
+ VALUES (1, (SELECT id FROM actor.search_query WHERE label = 'Juvenile'));
+INSERT INTO actor.search_filter_group_entry (grp, query)
+ VALUES (1, (SELECT id FROM actor.search_query WHERE label = 'General'));
+
COMMIT;
*/
-/* UNDO
+/*
+-- UNDO
BEGIN;
DROP TABLE actor.search_filter_group_entry;
DROP TABLE actor.search_filter_group;
+DROP TABLE actor.search_query;
COMMIT;
*/