Re: [HACKERS] Patch for user-defined C-language functions - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] Patch for user-defined C-language functions
Date
Msg-id 199909280432.AAA00939@candle.pha.pa.us
Whole thread Raw
In response to Patch for user-defined C-language functions  (Bernard Frankpitt <frankpit@pop.dn.net>)
List 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@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Doccumentation Patch for Create Function
Next
From: "Hiroshi Inoue"
Date:
Subject: Recovery on incomplete write