Free Pascal and Postgresql Functions, Possible?

Started by Tony Cadutoover 20 years ago7 messagesgeneral
Jump to latest
#1Tony Caduto
tony.caduto@amsoftwaredesign.com

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

#2Martijn van Oosterhout
kleptog@svana.org
In reply to: Tony Caduto (#1)
Re: Free Pascal and Postgresql Functions, Possible?

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/

Show quoted text

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.

#3Bernd Helmle
mailings@oopsware.de
In reply to: Martijn van Oosterhout (#2)
Re: Free Pascal and Postgresql Functions, Possible?

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

#4Tony Caduto
tony.caduto@amsoftwaredesign.com
In reply to: Martijn van Oosterhout (#2)
Re: Free Pascal and Postgresql Functions, Possible?

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

#5Tony Caduto
tony.caduto@amsoftwaredesign.com
In reply to: Bernd Helmle (#3)
Re: Free Pascal and Postgresql Functions, Possible?

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

#6Martijn van Oosterhout
kleptog@svana.org
In reply to: Tony Caduto (#4)
Re: Free Pascal and Postgresql Functions, Possible?

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/

Show quoted text

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.

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Martijn van Oosterhout (#6)
Re: Free Pascal and Postgresql Functions, Possible?

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