Re: [GENERAL] Shared Objects (Dynamic loading) - Mailing list pgsql-novice

From Jasbinder Bali
Subject Re: [GENERAL] Shared Objects (Dynamic loading)
Date
Msg-id a47902760608232351i423966d6mfcecf3753ac2c738@mail.gmail.com
Whole thread Raw
In response to Shared Objects (Dynamic loading)  ("Jasbinder Bali" <jsbali@gmail.com>)
Responses Re: [GENERAL] Shared Objects (Dynamic loading)  ("Jasbinder Bali" <jsbali@gmail.com>)
Re: [GENERAL] Shared Objects (Dynamic loading)  (Michael Fuhr <mike@fuhr.org>)
List pgsql-novice
Well, the server side code is in ECPG because thats the easiest choice i could see.
I really don't know how difficult or beneficial would SPI be. Haven't heard of SPI before.
I was under the impression that ECPG and libpg are the only two choices a developer has in postgresql for database related activities.

I am using char in postgres function as an analogue for char* in C. Is this correct?
The link that you gave says varchar* in C has varchar as its analogue in postgresql.

Thanks and regards,
Jas

On 8/24/06, Michael Fuhr <mike@fuhr.org> wrote:
On Thu, Aug 24, 2006 at 01:03:43AM -0400, Jasbinder Bali wrote:
> CREATE OR REPLACE FUNCTION sp_trigger_raw_email(int4, text)
>  RETURNS bool AS
> '/usr/local/pgsql/jsbali/parser', 'parse_email'
>  LANGUAGE 'c' VOLATILE STRICT;
> ALTER FUNCTION sp_trigger_raw_email(int4,text ) OWNER TO postgres;
>
> function parse_email(int caseno, char *rawemail)
> populates a few global variables first and then
> call another function parse_header().
> function parse_header() makes use of  the  global variables and then using
> ECPG stores values in a table in the database.

Is there a reason this server-side code is using ECPG instead of SPI?

http://www.postgresql.org/docs/8.1/interactive/spi.html

> My question is, when we try to make use of a specific function of a shared
> object dynamically loaded as show above, then
> would that function be able to access all global variables populated
> elsewhere in the program or all the global variables can't be accessed
> inside that function of the shared object.

A function should be able to access any global symbol and any static
symbol in the same object file.  Are you having trouble doing so?

> Also, in the above function definition,
> the signature of parse_email function is
> parse_email(int, char*) and i am passing (int4 , text) to int as seen in the
> function code pasted above.
> Is text in pgsql going to match with char* or i should use some other
> datatype?

See "C-Language Functions" in the documentation, in particular what
it says about version 1 calling conventions.

http://www.postgresql.org/docs/8.1/interactive/xfunc-c.html

Is there a reason you're coding in C instead of a higher-level
language like PL/Perl?  If you're parsing email messages then coding
in Perl, Python, Ruby, etc., would probably be easier than C.

--
Michael Fuhr

pgsql-novice by date:

Previous
From: "Jasbinder Bali"
Date:
Subject: Shared Objects (Dynamic loading)
Next
From: "Jasbinder Bali"
Date:
Subject: Re: [GENERAL] Shared Objects (Dynamic loading)