--
-- pseudo_contains/2
--
create or replace function pseudo_contains(
character varying,
character varying
) returns int4 as $$
declare
indexed_stuff alias for $1;
space_sep_list_untrimmed alias for $2;
space_sep_list text;
upper_indexed_stuff text;
-- if you call this var start you get hosed royally
first_space integer;
score integer;
begin
space_sep_list := upper(ltrim(rtrim(space_sep_list_untrimmed)));
upper_indexed_stuff := upper(indexed_stuff);
score := 0;
if space_sep_list is null or indexed_stuff is null then
return score;
end if;
loop
first_space := position(' ' in space_sep_list);
if first_space = 0 then
-- one token or maybe end of list
if position(space_sep_list in upper_indexed_stuff) <> 0 then
return score+10;
end if;
return score;
else
-- first_space <> 0
if position(substring(space_sep_list from 1 for first_space-1) in upper_indexed_stuff) <> 0 then
score := score + 10;
end if;
end if;
space_sep_list := substring(space_sep_list from first_space+1);
end loop;
end;$$ language plpgsql;