Re: [HACKERS] CREATE FUNCTION broken
От | jwieck@debis.com (Jan Wieck) |
---|---|
Тема | Re: [HACKERS] CREATE FUNCTION broken |
Дата | |
Msg-id | m0y3N8f-000BFRC@orion.SAPserv.Hamburg.dsh.de обсуждение исходный текст |
Ответ на | Re: [HACKERS] CREATE FUNCTION broken ("Thomas G. Lockhart" <lockhart@alumni.caltech.edu>) |
Список | pgsql-hackers |
Tom wrote: > > > Someone changed the parser to build a TypeName node on CREATE > > FUNCTION in any case. As a side effect, ALL! functions > > created got the proretset attribute to true. Thus for a > > SELECT the parser wrapped an Iter node around the Expr and > > since singleton functions set isDone the Iter returns no > > tuple up. > > Ah. I broke it (though the regression tests did not find the problem). What > I changed was the code in gram.y, which used to just create a string node > for the return type clause _unless_ the return type was a "SETOF type". In > that case a Typename node was created, and the setof attribute was > explicitly set. > > What you found is that farther along, the setof attribute was forced to be > true if _any_ Typename node is present. Haven't spend time to analyze if other places might have been affected by that - just thought we should trust the parser about the SETOF flag in TypeName node instead of knowing it better deep down in the utility commands. ;-) > > It looks like your patch will completely fix things, and is better than my > reverting the gram.y code. Can you suggest a small test case to include in > the regression suite? Small test case - hmmm. The regression tests found it - but you wouldn't expect it there. It's in the trigger test, where at some places SELECT set_ttdummy(0) returns 0 columns instead of one. Anyway - add a little function in regress.c returning a basetype value. Then add tests that use it in SELECT queries. int32 allways_one() { return 1; } SELECT allways_one() AS one; SELECT a, allways_one() AS one FROM t; > > Unless there are objections from others (with a preference for reverting > the gram.y code) I'll go ahead and apply Jan's patch. Even if reverting the gram.y code - my patch could only make things better. Until later, Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #======================================== jwieck@debis.com (Jan Wieck) #
В списке pgsql-hackers по дате отправления: