Thread: Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
From
Robert Haas
Date:
On Tue, Apr 26, 2016 at 10:59 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Andres Freund <andres@anarazel.de> writes: >> I don't understand why we don't just drop V0. It makes debugging harder, >> exploitation easier (call arbitrary functions), and really has no >> features making it desirable. > > What's the argument that it makes debugging harder? Especially if > you aren't using it? > > I don't particularly buy the "easier exploitation" argument, either. > You can't create a C function without superuser, and if you've got > superuser there are plenty of ways to run arbitrary code. > > I'd agree that there are no desirable features that would motivate > writing new code in V0. But that's not the reason for keeping it; > the reason for keeping it is to avoid unnecessarily breaking > existing extension code. I don't think that argument holds much water any more. The V1 interface was added in 0a7fb4e9184539afcb6fed0f1d2bc0abddc2b0a6, more than 15 years ago. Anybody who has extension code that old that still does anything useful and hasn't needed much bigger changes that conversion to V1 calling convention deserves a medal. But more than that, it's unreasonable to expect 15-year-plus deprecation windows for features that are only exposed via C. If we stuck to that rigidly it would be a major impediment to forward progress. Let's add a GUC allow_oldstyle_functions with a default of off, and make fetch_finfo_record() throw an ERROR in the infofunc == NULL case unless allow_oldstyle_functions = on. That way, anybody who still really wants to use V0 can do so. For everybody else, the very first attempt to execute a function where you've forgotten or fat-fingered the PG_FUNCTION_INFO_V1 decoration will produce a clear error message telling you exactly what you did wrong. I confidently predict a lot more people will be happy about that development than will be sad about having to set a GUC to make their V0 functions work. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Re: Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
From
Tom Lane
Date:
Robert Haas <robertmhaas@gmail.com> writes: > Let's add a GUC allow_oldstyle_functions with a default of off, and > make fetch_finfo_record() throw an ERROR in the infofunc == NULL case > unless allow_oldstyle_functions = on. This is not about "V0 calling convention is awful". It isn't, really, unless you need to deal with nulls. This is about "allowing the finfo record to be missing is error-prone". What about inventing a PG_FUNCTION_INFO_V0() macro, and then defining the new GUC as "must find a matching finfo record"? That would present less conversion work for people who still have V0-style functions (and I'm sure there are more than a few of them out there). Now, if VS2015 actually has broken bool-returning V0, the argument for keeping it going becomes a lot weaker. But at this point I suspect strongly that that's not what happened but rather we've got a faulty bool cast there, which if true is something we need to fix regardless of any considerations about V0. Would someone please try the experiment requested upthread? regards, tom lane
Re: Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
From
Robert Haas
Date:
On Wed, Apr 27, 2016 at 9:53 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Robert Haas <robertmhaas@gmail.com> writes: >> Let's add a GUC allow_oldstyle_functions with a default of off, and >> make fetch_finfo_record() throw an ERROR in the infofunc == NULL case >> unless allow_oldstyle_functions = on. > > This is not about "V0 calling convention is awful". It isn't, really, > unless you need to deal with nulls. This is about "allowing the finfo > record to be missing is error-prone". What about inventing a > PG_FUNCTION_INFO_V0() macro, and then defining the new GUC as "must > find a matching finfo record"? That would present less conversion > work for people who still have V0-style functions (and I'm sure there > are more than a few of them out there). I'm not, but I don't have a problem with PG_FUNCTION_INFO_V0. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Re: Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
From
Michael Paquier
Date:
On Wed, Apr 27, 2016 at 10:53 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Now, if VS2015 actually has broken bool-returning V0, the argument for > keeping it going becomes a lot weaker. But at this point I suspect > strongly that that's not what happened but rather we've got a faulty > bool cast there, which if true is something we need to fix regardless > of any considerations about V0. Would someone please try the experiment > requested upthread? I just gave it a try. And by using PG_1_BYTE() the tests of contrib/seg/ are passing. -- Michael
Re: Re: [COMMITTERS] Re: pgsql: Convert contrib/seg's bool-returning SQL functions to V1 call co
From
Tom Lane
Date:
Michael Paquier <michael.paquier@gmail.com> writes: > On Wed, Apr 27, 2016 at 10:53 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Now, if VS2015 actually has broken bool-returning V0, the argument for >> keeping it going becomes a lot weaker. But at this point I suspect >> strongly that that's not what happened but rather we've got a faulty >> bool cast there, which if true is something we need to fix regardless >> of any considerations about V0. Would someone please try the experiment >> requested upthread? > I just gave it a try. And by using PG_1_BYTE() the tests of > contrib/seg/ are passing. Thanks! Barring objections, I will revert c8e81afc60093b19 tomorrow and instead fix DatumGetBool. regards, tom lane