END IF;
END IF;
- IF node.negate THEN
- IF caseless THEN
- op := 'NOT LIKE';
- ELSE
- op := '<>';
- END IF;
- ELSE
- IF caseless THEN
- op := 'LIKE';
- ELSE
- op := '=';
- END IF;
- END IF;
-
my_alias := 'n' || node.id::TEXT;
jrow := my_join || ' (SELECT *, ';
IF node.tag IS NOT NULL THEN
+ IF node.negate THEN
+ IF caseless THEN
+ op := 'NOT LIKE';
+ ELSE
+ op := '<>';
+ END IF;
+ ELSE
+ IF caseless THEN
+ op := 'LIKE';
+ ELSE
+ op := '=';
+ END IF;
+ END IF;
+
jrow := jrow || node.quality ||
' AS quality FROM metabib.full_rec mfr WHERE mfr.tag = ''' ||
node.tag || '''';
jrow := jrow || ' AND (';
jrow := jrow || vandelay._node_tag_comparisons(caseless, op, tags_rstore, tagkey);
jrow := jrow || ')) ' || my_alias || my_using || E'\n';
- ELSE -- svf
- jrow := jrow || 'id AS record, ' || node.quality ||
- ' AS quality FROM metabib.record_attr mra WHERE mra.attrs->''' ||
- node.svf || ''' ' || op || ' $2->''' || node.svf || ''') ' ||
- my_alias || my_using || E'\n';
+ ELSE -- svf XXX TODO multi and composite attrs are not supported yet
+ jrow := jrow || 'mra.source AS record, ' || node.quality ||
+ ' AS quality FROM metabib.record_attr_vector_list mra,' ||
+ ' config.coded_value_map ccvm WHERE' ||
+ ' ccvm.ctype = ' || quote_literal(node.svf) ||
+ ' AND ccvm.code = ' || quote_literal( ($2 -> node.svf) ) || ' AND';
+
+ IF node.negate THEN
+ jrow := jrow || ' NOT (';
+ END IF;
+
+ jrow := jrow || ' mra.vlist @> intset(ccvm.id)' ||
+
+ IF node.negate THEN
+ jrow := jrow || ' )';
+ END IF;
+
+ jrow := jrow || ' ' || my_alias || my_using || E'\n';
+
END IF;
INSERT INTO _vandelay_tmp_jrows (j) VALUES (jrow);
END;