Broken PL/PgSQL for 7.0 beta 3?

Started by Eric Lee Greenabout 26 years ago3 messageshackers
Jump to latest
#1Eric Lee Green
pgsql-hackers@estinc.com

The following code works under 6.5 and doesn't work in 7.0 beta 3. Comments?

------------------snip---------------------------------------
create table paths ( pathnum serial, pathname text );

CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
'/opt/brupro/pgsql/lib/plpgsql.so' LANGUAGE 'C';

CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
HANDLER plpgsql_call_handler
LANCOMPILER 'PL/pgSQL';

/**********************************************************
* This function makes handling paths MUCH faster on inserts:
**********************************************************/
CREATE FUNCTION get_path (text) RETURNS integer AS '
DECLARE
retval integer;
BEGIN
select pathnum into retval from paths where pathname = $1 ;
if not found then
insert into paths ( pathname )values ( $1 ) ;
select pathnum into retval from paths where pathname = $1 ;
end if ;
return retval ;
END;
' LANGUAGE 'plpgsql';

select get_path('/etc');

--------------end snip-------------------------------

--
Eric Lee Green eric@estinc.com
Software Engineer Visit our Web page:
Enhanced Software Technologies, Inc. http://www.estinc.com/
(602) 470-1115 voice (602) 470-1116 fax

#2Thomas Lockhart
lockhart@alumni.caltech.edu
In reply to: Eric Lee Green (#1)
Re: Broken PL/PgSQL for 7.0 beta 3?

The following code works under 6.5 and doesn't work in 7.0 beta 3. Comments?

Symptoms?

--
Thomas Lockhart lockhart@alumni.caltech.edu
South Pasadena, California

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Eric Lee Green (#1)
Re: Broken PL/PgSQL for 7.0 beta 3?

Eric Lee Green <pgsql-hackers@estinc.com> writes:

The following code works under 6.5 and doesn't work in 7.0 beta 3. Comments?

Please define "doesn't work". I get (starting with a virgin paths table)

tpc=# select get_path('/etc');
get_path
----------
1
(1 row)

tpc=# select get_path('/etc');
get_path
----------
1
(1 row)

tpc=# select get_path('/etcz');
get_path
----------
2
(1 row)

tpc=# select get_path('/etcz');
get_path
----------
2
(1 row)

tpc=# select get_path('/etc');
get_path
----------
1
(1 row)

which seems to be the intended behavior.

It might help to know what platform/compiler you are using, too.

regards, tom lane