RETURNS INTEGER[]
AS $$
DECLARE
- lookup_token TEXT;
+ words TEXT[];
id INTEGER;
return_word_id INTEGER[];
+ word_ids INTEGER[];
+ j INTEGER;
BEGIN
- lookup_token := make_standard_name(lookup_word);
- SELECT array_agg(word_id) FROM word
- WHERE word_token = lookup_token and class is null and type is null
- INTO return_word_id;
- IF return_word_id IS NULL THEN
- id := nextval('seq_word');
- INSERT INTO word VALUES (id, lookup_token, null, null, null, null, 0);
- return_word_id = ARRAY[id];
+ words := string_to_array(make_standard_name(lookup_word), ' ');
+ IF array_upper(words, 1) IS NOT NULL THEN
+ FOR j IN 1..array_upper(words, 1) LOOP
+ IF (words[j] != '') THEN
+ SELECT array_agg(word_id) INTO word_ids
+ FROM word
+ WHERE word_token = words[j] and class is null and type is null;
+
+ IF word_ids IS NULL THEN
+ id := nextval('seq_word');
+ INSERT INTO word VALUES (id, words[j], null, null, null, null, 0);
+ return_word_id := return_word_id || id;
+ ELSE
+ return_word_id := array_merge(return_word_id, word_ids);
+ END IF;
+ END IF;
+ END LOOP;
END IF;
+
RETURN return_word_id;
END;
$$