Re: [HACKERS] Patch for user-defined C-language functions

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: Bernard Frankpitt <frankpit(at)pop(dot)dn(dot)net>
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] Patch for user-defined C-language functions
Date: 1999-09-28 04:32:14
Message-ID: 199909280432.AAA00939@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Applied.

> Hi all,
>
> I have been working with user defined types and user defined c
> functions. One problem that I have encountered with the function
> manager is that it does not allow the user to define type conversion
> functions that convert between user types. For instance if mytype1,
> mytype2, and mytype3 are three Postgresql user types, and if I wish to
> define Postgresql conversion functions like
>
> CREATE FUNCTION mytype3 ( mytype2 )
> RETURNS mytype3
> AS 'mytypes.so'
> LANGUAGE 'C'
>
> CREATE FUNCTION mytype3 ( mytype1 )
> RETURNS mytype3
> AS 'mytypes.so'
> LANGUAGE 'C'
>
> I run into problems, because the Postgresql dynamic loader would look
> for a single link symbol, mytype3, for both pieces of object code. If
> I just change the name of one of the Postgresql functions (to make the
> symbols distinct), the automatic type conversion that Postgresql uses,
> for example, when matching operators to arguments no longer finds the
> type conversion function.
>
> The solution that I propose, and have implemented in the attatched
> patch extends the CREATE FUNCTION syntax as follows. In the first case
> above I use the link symbol mytype2_to_mytype3 for the link object
> that implements the first conversion function, and define the
> Postgresql operator with the following syntax
>
> CREATE FUNCTION mytype3 ( mytype2 )
> RETURNS mytype3
> AS 'mytypes.so', 'mytype2_to_mytype3'
> LANGUAGE 'C'
>
> The syntax for the AS clause, which was 'AS <link-file>' becomes
>
> AS <link_file>[, <link_name>]
>
> Specification of the link_name is optional, and not needed if the link
> name is the same as the Postgresql function name.
>
> The patch includes changes to the parser to include the altered
> syntax, changes to the ProcedureStmt node in nodes/parsenodes.h,
> changes to commands/define.c to handle the extra information in the AS
> clause, and changes to utils/fmgr/dfmgr.c that alter the way that the
> dynamic loader figures out what link symbol to use. I store the
> string for the link symbol in the prosrc text attribute of the pg_proc
> table which is currently unused in rows that reference dynamically
> loaded
> functions.
>
>
> Bernie Frankpitt

[Attachment, skipping...]

--
Bruce Momjian | http://www.op.net/~candle
maillist(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 1999-09-28 04:32:24 Re: [HACKERS] Doccumentation Patch for Create Function
Previous Message Hiroshi Inoue 1999-09-28 04:26:21 RE: [HACKERS] Vacuum analyze bug CAUGHT