On Sun, Jul 16, 2006 at 05:16:58AM -0700, Neil Conway wrote:
> On Sun, 2006-07-16 at 01:00 -0700, David Fetter wrote:
> > On Sun, Jul 16, 2006 at 12:21:12AM -0700, Neil Conway wrote:
> > > You need to schema-qualify references to builtin functions, to
> > > avoid accidentally using functions of the same name that appear
> > > earlier in the user's search path.
> >
> > I don't understand what you mean here.
>
> For example, you shouldn't be using "generate_series" in the SQL
> query: if the user has a function of the same name earlier in their
> search path, psql will invoke the wrong function. Instead, you
> should call "pg_catalog.generate_series", as psql was careful to do
> prior to the patch.
Thanks for clarifying this. Patch attached.
Cheers,
D
--
David Fetter <[EMAIL PROTECTED]> http://fetter.org/
phone: +1 415 235 3778 AIM: dfetter666
Skype: davidfetter
Remember to vote!
Index: src/bin/psql/describe.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.140
diff -c -r1.140 describe.c
*** src/bin/psql/describe.c 14 Jun 2006 16:49:02 -0000 1.140
--- src/bin/psql/describe.c 16 Jul 2006 14:18:08 -0000
***************
*** 170,177 ****
"SELECT n.nspname as \"%s\",\n"
" p.proname as \"%s\",\n"
" CASE WHEN p.proretset THEN 'setof
' ELSE '' END ||\n"
! " pg_catalog.format_type(p.prorettype, NULL)
as \"%s\",\n"
! "
pg_catalog.oidvectortypes(p.proargtypes) as \"%s\"",
_("Schema"), _("Name"), _("Result
data type"),
_("Argument data types"));
--- 170,204 ----
"SELECT n.nspname as \"%s\",\n"
" p.proname as \"%s\",\n"
" CASE WHEN p.proretset THEN 'setof
' ELSE '' END ||\n"
! "
pg_catalog.format_type(p.prorettype, NULL) as \"%s\",\n"
! " CASE WHEN proallargtypes IS NOT
NULL THEN\n"
! "
pg_catalog.array_to_string(ARRAY(\n"
! " SELECT\n"
! " CASE\n"
! " WHEN p.proargmodes[s.i] =
'i' THEN ''\n"
! " WHEN p.proargmodes[s.i] =
'o' THEN 'OUT '\n"
! " WHEN p.proargmodes[s.i] =
'b' THEN 'INOUT '\n"
! " END ||\n"
! " CASE\n"
! " WHEN p.proargnames[s.i] =
'' OR p.proargnames[s.i] IS NULL THEN ''\n"
! " ELSE p.proargnames[s.i] ||
' ' \n"
! " END ||\n"
! "
pg_catalog.format_type(p.proallargtypes[s.i],-1)\n"
! " FROM\n"
! "
pg_catalog.generate_series(1,pg_catalog.array_upper(p.proallargtypes,1)) AS
s(i)\n"
! " ), ', ')\n"
! " ELSE\n"
! "
pg_catalog.array_to_string(ARRAY(\n"
! " SELECT\n"
! " CASE\n"
! " WHEN p.proargnames[s.i+1]
= '' OR p.proargnames[s.i+1] IS NULL THEN ''\n"
! " ELSE p.proargnames[s.i+1]
|| ' '\n"
! " END ||\n"
! "
pg_catalog.format_type(p.proargtypes[s.i],-1)\n"
! " FROM\n"
! "
pg_catalog.generate_series(0,pg_catalog.array_upper(p.proargtypes,1)) AS s(i)\n"
! " ), ', ')\n"
! " END AS \"%s\"",
_("Schema"), _("Name"), _("Result
data type"),
_("Argument data types"));
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings