Re: [HACKERS] Function-manager redesign: second draft (long)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: wieck(at)debis(dot)com (Jan Wieck)
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] Function-manager redesign: second draft (long)
Date: 1999-10-26 15:14:40
Message-ID: 22968.940950880@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

[ responding to both of Jan's messages in one ]

wieck(at)debis(dot)com (Jan Wieck) writes:
> I like the current interface for it's simpleness from the user
> function developers point of view.

There is that; even with a good set of convenience macros there will be
more to learn about writing user functions. OTOH, the way it is now
is not exactly transparent --- in particular, NULL handling is so easy
to forget about/get wrong. We can make that much easier. We can also
simplify the interface noticeably for standard types like float4/float8.

BTW: I am not in nearly as big a hurry as Bruce is to rip out support
for the current user-function interface. I want to get rid of old-style
builtin functions before 7.0 because of the portability issue (see
below). But if a particular user is using old-style user functions
and isn't having portability problems on his machine, there's no need
to force him to convert, it seems to me.

> And converting ALL
> internal plus most of the contrib directories ones to
> something new is really a huge project.

It is. I was hoping to get some help ;-) ... but I will do it myself
if I have to.

> ... And there are only a few internal
> functions where a new fmgr interface really is required due
> to incomplete NULL handling or the like.

If your goal is *only* to deal with the NULL issue, or *only* to get
things working on a specific platform like Alpha, then yes we could
patch in a few dozen places and not undertake a complete changeover.
But I believe that we really need to fix this right, because it will
keep coming back to haunt us until we do. I will not be happy as
long as we have ports that have to compile "-O0" because of fmgr
brain-damage. I fear there are going to be more and more such ports
as people install smarter compilers that assume they are working with
ANSI-compliant source code. We're giving up performance system-wide
because of fmgr.

> Therefore I would prefer an interface extension, that doesn't
> require changes to existing functions. What about adding a
> proifversion to pg_proc, telling the fmgr which call
> interface the function uses?

I was going to let the prolang column tell that, by having different
language codes for old vs. new builtin function and old vs. new
dynamic-linked C function. We could add a version column instead,
but that seems like unnecessary complication.

> First fmgr_info() is extended to put the interface version
> into the FmgrInfo too. Then fmgr_faddr() is renamed to
> fmgr_faddr_v1() and it has to check that only functions using
> the old interface are called through it (there aren't that
> many calls to it as you might think).

I think it should be possible to make fmgr_faddr call both old and
new functions --- I haven't actually written code yet, but I think
I can do it. You're right that that's important in order to spread
out the repair work instead of having a "big bang".

> This approach nearly matches all my thoughts about the
> redesign of the fmgr. In the system table section I miss
> named arguments.

As you said in your earlier message, that is a parser-level feature
that has nothing to do with what happens at the fmgr level. I don't
want to worry about it for this revision.

> Also I miss the interface for tuple set returns. I know that
> this requires much more in other sections than only the fmgr,
> but we need to cover it now or we'll not be able to do it
> without another change to the fmgr interface at the time we
> want to support real stored procedures.

OK, I'm willing to worry about that. But what, exactly, needs to
be provided in the fmgr interface?

regards, tom lane

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jan Wieck 1999-10-26 15:36:00 Re: [HACKERS] Function-manager redesign: second draft (long)
Previous Message Roberto Joao Lopes Garcia 1999-10-26 14:25:15 Error: shmget failed