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
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 |