END;
$$ LANGUAGE PLPGSQL STRICT IMMUTABLE;
+CREATE OR REPLACE FUNCTION migration_tools.name_parse_out_last_first_middle_and_random_affix (TEXT) RETURNS TEXT[] AS $$
+ DECLARE
+ full_name TEXT := $1;
+ temp TEXT;
+ family_name TEXT := '';
+ first_given_name TEXT := '';
+ second_given_name TEXT := '';
+ suffix TEXT := '';
+ prefix TEXT := '';
+ BEGIN
+ temp := full_name;
+ -- Use values, not structure, for prefix/suffix, unless we come up with a better idea
+ IF temp ilike '%MR.%' THEN
+ prefix := 'Mr.';
+ temp := REGEXP_REPLACE( temp, E'MR\.\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%MRS.%' THEN
+ prefix := 'Mrs.';
+ temp := REGEXP_REPLACE( temp, E'MRS\.\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%MS.%' THEN
+ prefix := 'Ms.';
+ temp := REGEXP_REPLACE( temp, E'MS\.\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%DR.%' THEN
+ prefix := 'Dr.';
+ temp := REGEXP_REPLACE( temp, E'DR\.\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%JR%' THEN
+ suffix := 'Jr.';
+ temp := REGEXP_REPLACE( temp, E'JR\.?\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%JR,%' THEN
+ suffix := 'Jr.';
+ temp := REGEXP_REPLACE( temp, E'JR,\\s*', ',', 'i' );
+ END IF;
+ IF temp ilike '%SR%' THEN
+ suffix := 'Sr.';
+ temp := REGEXP_REPLACE( temp, E'SR\.?\\s*', '', 'i' );
+ END IF;
+ IF temp ilike '%SR,%' THEN
+ suffix := 'Sr.';
+ temp := REGEXP_REPLACE( temp, E'SR,\\s*', ',', 'i' );
+ END IF;
+ IF temp ilike '%III%' THEN
+ suffix := 'III';
+ temp := REGEXP_REPLACE( temp, E'III', '', 'i' );
+ END IF;
+ IF temp ilike '%II%' THEN
+ suffix := 'II';
+ temp := REGEXP_REPLACE( temp, E'II', '', 'i' );
+ END IF;
+ IF temp ilike '%IV%' THEN
+ suffix := 'IV';
+ temp := REGEXP_REPLACE( temp, E'IV', '', 'i' );
+ END IF;
+
+ family_name := BTRIM( REGEXP_REPLACE(temp,E'^(\\S+).*$',E'\\1') );
+ first_given_name := CASE WHEN temp ~ E'^\\S+$' THEN 'N/A' ELSE BTRIM( REGEXP_REPLACE(temp,E'^\\S+\\s+(\\S+).*$',E'\\1') ) END;
+ second_given_name := CASE WHEN temp ~ E'^\\S+$' THEN '' ELSE BTRIM( REGEXP_REPLACE(temp,E'^\\S+\\s+\\S+\\s*(.*)$',E'\\1') ) END;
+
+ RETURN ARRAY[ family_name, prefix, first_given_name, second_given_name, suffix ];
+ END;
+$$ LANGUAGE PLPGSQL STRICT IMMUTABLE;
+
+
CREATE OR REPLACE FUNCTION migration_tools.address_parse_out_citystatezip (TEXT) RETURNS TEXT[] AS $$
DECLARE
city_state_zip TEXT := $1;
END;
$$ LANGUAGE PLPGSQL STRICT STABLE;
+CREATE OR REPLACE FUNCTION migration_tools.attempt_hz_date (TEXT,TEXT) RETURNS DATE AS $$
+ DECLARE
+ attempt_value ALIAS FOR $1;
+ fail_value ALIAS FOR $2;
+ output DATE;
+ BEGIN
+ FOR output IN
+ EXECUTE E'SELECT (\'1970-01-01\'::date + \'' || attempt_value || E' days\'::interval)::date AS a;'
+ LOOP
+ RETURN output;
+ END LOOP;
+ EXCEPTION
+ WHEN OTHERS THEN
+ FOR output IN
+ EXECUTE 'SELECT ' || quote_literal(fail_value) || '::date AS a;'
+ LOOP
+ RETURN output;
+ END LOOP;
+ END;
+$$ LANGUAGE PLPGSQL STRICT STABLE;
+
CREATE OR REPLACE FUNCTION migration_tools.attempt_money (TEXT,TEXT) RETURNS NUMERIC(8,2) AS $$
DECLARE
attempt_value ALIAS FOR $1;
);
$$ LANGUAGE SQL;
+CREATE OR REPLACE FUNCTION migration_tools.find_hold_matrix_matchpoint2 (INTEGER) RETURNS SETOF action.matrix_test_result AS $$
+ SELECT action.hold_request_permit_test(
+ (SELECT pickup_lib FROM action.hold_request WHERE id = $1),
+ (SELECT request_lib FROM action.hold_request WHERE id = $1),
+ (SELECT current_copy FROM action.hold_request WHERE id = $1),
+ (SELECT usr FROM action.hold_request WHERE id = $1),
+ (SELECT requestor FROM action.hold_request WHERE id = $1)
+ );
+$$ LANGUAGE SQL;
+
CREATE OR REPLACE FUNCTION migration_tools.find_circ_matrix_matchpoint (INTEGER) RETURNS SETOF action.found_circ_matrix_matchpoint AS $$
SELECT action.find_circ_matrix_matchpoint(
(SELECT circ_lib FROM action.circulation WHERE id = $1),