Re: [HACKERS] Patch for user-defined C-language functions
От | Bruce Momjian |
---|---|
Тема | Re: [HACKERS] Patch for user-defined C-language functions |
Дата | |
Msg-id | 199909280432.AAA00939@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Patch for user-defined C-language functions (Bernard Frankpitt <frankpit@pop.dn.net>) |
Список | 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 по дате отправления: