Thread: Free Pascal and Postgresql Functions, Possible?
Has there ever been any discussion on using Free Pascal to create functions (C Style)? I know pascal can be used to create user defined functions in other databases like Firebird (which was originally coded in C and now C++) Thanks Tony
On Sun, Dec 11, 2005 at 10:03:57PM -0600, Tony Caduto wrote: > Has there ever been any discussion on > using Free Pascal to create functions (C Style)? > > > I know pascal can be used to create user defined functions in other > databases like Firebird (which was originally coded in C and now C++) Has anyone tried? PostgreSQL doesn't particluarly care what language a function was written in, just as long as the calling convention matches. That said, pascal has historically had a different calling convention and that is likely to cause the most issues. Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them.
Attachment
--On Montag, Dezember 12, 2005 11:16:19 +0100 Martijn van Oosterhout <kleptog@svana.org> wrote: > On Sun, Dec 11, 2005 at 10:03:57PM -0600, Tony Caduto wrote: >> Has there ever been any discussion on >> using Free Pascal to create functions (C Style)? >> >> >> I know pascal can be used to create user defined functions in other >> databases like Firebird (which was originally coded in C and now C++) > Thought about that some time ago, too... > Has anyone tried? PostgreSQL doesn't particluarly care what language a > function was written in, just as long as the calling convention > matches. > > That said, pascal has historically had a different calling convention > and that is likely to cause the most issues. Free Pascal offers the cdecl modifier, which allows to declare and access functions with C style call convention. However, someone needs to write the necessary interface to the internal PostgreSQL structures that are needed for UDFs. > > Have a nice day, dito -- Thanks Bernd
Martijn van Oosterhout wrote: > That said, pascal has historically had a different calling convention > and that is likely to cause the most issues. > > Have a nice day, I know Delphi/Kylix can create C style DLLs and SOs with the C style calling convention, so I "assume" Free Pascal does as well. Is there any special C headers (for creating functions that return results?) that are PG specific that would need to be ported to Pascal? Tony
>> >> That said, pascal has historically had a different calling convention >> and that is likely to cause the most issues. > > > Free Pascal offers the cdecl modifier, which allows to declare and > access functions with C style call convention. However, someone needs to > write the necessary interface to the internal PostgreSQL structures that > are needed for UDFs. > >> >> Have a nice day, > > > dito > Sounds like it may be possible then. Man, if someone where to come up with a simple example on just doing something like adding two numbers or similar it might convince a few Delphi/Kylix/Freepascal users to switch over from Firebird/Interbase. I guess I could help with such a task if someone with C experience could help also. I have Freepascal/Lazarus installed as well as Kylix. Does anyone know what header would need to be ported to Pascal? Later, Tony
On Mon, Dec 12, 2005 at 08:43:52AM -0600, Tony Caduto wrote: > I know Delphi/Kylix can create C style DLLs and SOs with the C style > calling convention, so I "assume" Free Pascal does as well. > > Is there any special C headers (for creating functions that return > results?) that are PG specific that would need to be ported to Pascal? Well, I don't know about any special C headers. The examples in the documentation tell you what you need for various features. However, I think the most important header would be fmgr.h since that is how the C functions get arguments from and return data to the server. With a few declarations for things like palloc you should be able to do most things. Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them.
Attachment
Martijn van Oosterhout <kleptog@svana.org> writes: > On Mon, Dec 12, 2005 at 08:43:52AM -0600, Tony Caduto wrote: >> Is there any special C headers (for creating functions that return >> results?) that are PG specific that would need to be ported to Pascal? > Well, I don't know about any special C headers. The examples in the > documentation tell you what you need for various features. However, I > think the most important header would be fmgr.h since that is how the C > functions get arguments from and return data to the server. With a few > declarations for things like palloc you should be able to do most > things. It'd depend hugely on what you want to accomplish. For a self-contained computational function that you don't mind using "version 0" call convention for, you might not need any headers at all, just write the thing as a regular cdecl function. The next steps up would be access to palloc (so you could return pass-by-reference datatypes), elog (for error reporting), and fmgr.h (so you could use version-1 call convention, which is more portable than version-0 and can deal with NULLs). If you wanted to do stuff that involved poking into the backend's internal data structures, I think by far the path of least resistance is to forget Pascal and use C ... tom "hacked Pascal in the '70s" lane