Received: from localhost.localdomain (postgresql.org [64.49.215.8]) by localhost (Postfix) with ESMTP id 6C0C64772AB for ; Thu, 13 Jun 2002 20:47:12 -0400 (EDT) Received: from xyzzy.dhs.org (cvx-west-205-210-52-213.kingston.net [205.210.52.213]) by postgresql.org (Postfix) with ESMTP id 50397476BA7 for ; Thu, 13 Jun 2002 19:40:33 -0400 (EDT) Received: from xyzzy.dhs.org (quux.lan.internal [::ffff:192.168.1.6]) by xyzzy.dhs.org with esmtp; Thu, 13 Jun 2002 19:40:25 -0400 Message-ID: <3D092D3B.3070308@xyzzy.dhs.org> Date: Thu, 13 Jun 2002 19:39:39 -0400 From: Andrew Hammond User-Agent: Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.1a) Gecko/20020611 X-Accept-Language: en-ca, en-us, en MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: simple recursive function in plpgsql fails Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Archive-Number: 200206/201 X-Sequence-Number: 8166 ians=# SELECT version(); version --------------------------------------------------------------- PostgreSQL 7.1.3 on i686-pc-linux-gnu, compiled by GCC 2.95.4 My goal is to find the last occurance of a pattern in a string. As a helper function, I wrote this: DROP FUNCTION reverse(text); CREATE FUNCTION reverse(text) RETURNS text AS 'DECLARE str ALIAS FOR $1; BEGIN IF length(str) > 1 THEN RETURN reverse(substr(str, 2)) || substr(str, 1, 1); ELSE RETURN str; END IF; END;' LANGUAGE 'plpgsql' ians=# SELECT reverse('q'); reverse --------- q (1 row) ians=# SELECT reverse('qw'); reverse --------- wq (1 row) ians=# SELECT reverse('qwe'); reverse --------- ewq (1 row) ians=# SELECT reverse('qwer'); reverse --------- rerq (1 row) Ooops... ------------------------------------------------------------------------ Andrew G. Hammond drew@xyzzy.dhs.org http://xyzzy.dhs.org/~drew/ 56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F 613-389-5481 5CD3 62B0 254B DEB1 86E0 8959 093E F70A B457 84B1