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