Advertisement
Guest User

Possible quick fix for record import

a guest
Apr 8th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION vandelay._get_expr_push_jrow(
  2.     node vandelay.match_set_point,
  3.     tags_rstore HSTORE
  4. ) RETURNS VOID AS $$
  5. DECLARE
  6.     jrow        TEXT;
  7.     my_alias    TEXT;
  8.     op          TEXT;
  9.     tagkey      TEXT;
  10.     caseless    BOOL;
  11.     jrow_count  INT;
  12.     my_using    TEXT;
  13.     my_join     TEXT;
  14. BEGIN
  15.     -- remember $1 is tags_rstore, and $2 is svf_rstore
  16.  
  17.     caseless := FALSE;
  18.     SELECT COUNT(*) INTO jrow_count FROM _vandelay_tmp_jrows;
  19.     IF jrow_count > 0 THEN
  20.         my_using := ' USING (record)';
  21.         my_join := 'FULL OUTER JOIN';
  22.     ELSE
  23.         my_using := '';
  24.         my_join := 'FROM';
  25.     END IF;
  26.  
  27.     IF node.tag IS NOT NULL THEN
  28.         caseless := (node.tag IN ('020', '022', '024'));
  29.         tagkey := node.tag;
  30.         IF node.subfield IS NOT NULL THEN
  31.             tagkey := tagkey || node.subfield;
  32.         END IF;
  33.     END IF;
  34.  
  35.     IF node.negate THEN
  36.         IF caseless THEN
  37.             op := 'NOT LIKE';
  38.         ELSE
  39.             op := '<>';
  40.         END IF;
  41.     ELSE
  42.         IF caseless THEN
  43.             op := 'LIKE';
  44.         ELSE
  45.             op := '=';
  46.         END IF;
  47.     END IF;
  48.  
  49.     my_alias := 'n' || node.id::TEXT;
  50.  
  51.     jrow := my_join || ' (SELECT *, ';
  52.     IF node.tag IS NOT NULL THEN
  53.         jrow := jrow  || node.quality ||
  54.             ' AS quality FROM metabib.full_rec mfr WHERE mfr.tag = ''' ||
  55.             node.tag || '''';
  56.         IF node.subfield IS NOT NULL THEN
  57.             jrow := jrow || ' AND mfr.subfield = ''' ||
  58.                 node.subfield || '''';
  59.         END IF;
  60.         jrow := jrow || ' AND (';
  61.         jrow := jrow || vandelay._node_tag_comparisons(caseless, op, tags_rstore, tagkey);
  62.         jrow := jrow || ')) ' || my_alias || my_using || E'\n';
  63.     ELSE    -- svf
  64.         jrow := jrow || 'id AS record, ' || node.quality ||
  65.             ' AS quality FROM metabib.record_attr_flat mraf WHERE mraf.attr = ''' ||
  66.             node.svf || ''' AND mraf.value = ''' || op || ' $2->''' || node.svf || ''') ' ||
  67.             my_alias || my_using || E'\n';
  68.     END IF;
  69.     INSERT INTO _vandelay_tmp_jrows (j) VALUES (jrow);
  70. END;
  71. $$ LANGUAGE PLPGSQL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement