Re: plpgsql at what point does the knowledge of the query come in?

From: Henry Drexler <alonup8tb(at)gmail(dot)com>
To: rod(at)iol(dot)ie
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: plpgsql at what point does the knowledge of the query come in?
Date: 2011-10-21 18:57:40
Message-ID: CAAtgU9TxqPtLPwJnELhhFbhVPHwP05FXS_-_VEvrZt1AqVw+5g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I realize I have sent a lot of messages on this thread so this will be the
last one unless I come up with a solution, then I will post that.

The idea behind this is to take a string and remove one character from it
successively and try to match that against any of the nodes in the query.

So for the following query 'pig dog cat' should be matched to 'pig dogcat'
when 'pig dog cat' is passed through the function. The reason for this is
because when successively removing characters 'pig dog cat' will get to the
point of 'pig dogcat' and therefore equal to the other node. (this process
can be seen in the raise notice output below).

The confusing thing is this works with other word pairs such as 'ls' 'l' and
longer ones, but there are many that it fails on for some inexplicable(to
me) reason.

Function:
---------------------

create or replace function nnodetestt(text) returns text language plpgsql
immutable as $$
DECLARE
newnode alias for $1;
nnlength integer;
t text;
nmarker text;
BEGIN
nnlength := length(newnode);
RAISE NOTICE 'number %', nnlength;
for i in 1..(nnlength) loop
select into t node from (Values('pig dogcat'),('pig dog cat')) blast(node)
where node = left(newnode, i-1)||right(newnode, nnlength-i);
-- RAISE NOTICE 'nnlength %', nnlength;
--raise notice 'increment %',right(newnode, nnlength-i);
RAISE NOTICE 'textbreakout: %' , left(newnode, i-1)||right(newnode,
nnlength-i);
end loop;
return t;
END;
$$

Query:
---------------------

select
node,
nnodetestt(node)
from
(Values('pig dogcat'),('pig dog cat'))
blast(node)

Raise Notice Output:
---------------------
NOTICE: number 10
NOTICE: textbreakout: ig dogcat
NOTICE: textbreakout: pg dogcat
NOTICE: textbreakout: pi dogcat
NOTICE: textbreakout: pigdogcat
NOTICE: textbreakout: pig ogcat
NOTICE: textbreakout: pig dgcat
NOTICE: textbreakout: pig docat
NOTICE: textbreakout: pig dogat
NOTICE: textbreakout: pig dogct
NOTICE: textbreakout: pig dogca
NOTICE: number 11
NOTICE: textbreakout: ig dog cat
NOTICE: textbreakout: pg dog cat
NOTICE: textbreakout: pi dog cat
NOTICE: textbreakout: pigdog cat
NOTICE: textbreakout: pig og cat
NOTICE: textbreakout: pig dg cat
NOTICE: textbreakout: pig do cat
NOTICE: textbreakout: pig dogcat <- here you can see it matches, so it
should be working
NOTICE: textbreakout: pig dog at
NOTICE: textbreakout: pig dog ct
NOTICE: textbreakout: pig dog ca

Total query runtime: 12 ms.
2 rows retrieved.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Henry Drexler 2011-10-21 20:01:15 Re: plpgsql at what point does the knowledge of the query come in?
Previous Message Eduardo Morras 2011-10-21 18:53:12 Re: PostGIS in a commercial project