| /*------------------------------------------------------------------------- |
| * |
| * plperl.h |
| * Common include file for PL/Perl files |
| * |
| * This should be included _AFTER_ postgres.h and system include files |
| * |
| * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1995, Regents of the University of California |
| * |
| * src/pl/plperl/plperl.h |
| */ |
| |
| #ifndef PL_PERL_H |
| #define PL_PERL_H |
| |
| /* stop perl headers from hijacking stdio and other stuff on Windows */ |
| #ifdef WIN32 |
| #define WIN32IO_IS_STDIO |
| /* |
| * isnan is defined in both the perl and mingw headers. We don't use it, |
| * so this just clears up the compile warning. |
| */ |
| #ifdef isnan |
| #undef isnan |
| #endif |
| #endif |
| |
| /* |
| * Supply a value of PERL_UNUSED_DECL that will satisfy gcc - the one |
| * perl itself supplies doesn't seem to. |
| */ |
| #if defined(__GNUC__) |
| #define PERL_UNUSED_DECL __attribute__ ((unused)) |
| #endif |
| |
| /* |
| * Sometimes perl carefully scribbles on our *printf macros. |
| * So we undefine them here and redefine them after it's done its dirty deed. |
| */ |
| |
| #ifdef USE_REPL_SNPRINTF |
| #undef snprintf |
| #undef vsnprintf |
| #endif |
| |
| #define list_head sys_list_head |
| #define list_tail sys_list_tail |
| |
| /* required for perl API */ |
| #include "EXTERN.h" |
| #include "perl.h" |
| #include "XSUB.h" |
| #include "ppport.h" |
| |
| #undef list_head |
| #undef list_tail |
| |
| |
| /* put back our snprintf and vsnprintf */ |
| #ifdef USE_REPL_SNPRINTF |
| #ifdef snprintf |
| #undef snprintf |
| #endif |
| #ifdef vsnprintf |
| #undef vsnprintf |
| #endif |
| #ifdef __GNUC__ |
| #define vsnprintf(...) pg_vsnprintf(__VA_ARGS__) |
| #define snprintf(...) pg_snprintf(__VA_ARGS__) |
| #else |
| #define vsnprintf pg_vsnprintf |
| #define snprintf pg_snprintf |
| #endif /* __GNUC__ */ |
| #endif /* USE_REPL_SNPRINTF */ |
| |
| /* perl version and platform portability */ |
| #define NEED_eval_pv |
| #define NEED_newRV_noinc |
| #define NEED_sv_2pv_flags |
| #include "ppport.h" |
| |
| /* perl may have a different width of "bool", don't buy it */ |
| #ifdef bool |
| #undef bool |
| #endif |
| |
| /* supply HeUTF8 if it's missing - ppport.h doesn't supply it, unfortunately */ |
| #ifndef HeUTF8 |
| #define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ |
| SvUTF8(HeKEY_sv(he)) : \ |
| (U32)HeKUTF8(he)) |
| #endif |
| |
| /* supply GvCV_set if it's missing - ppport.h doesn't supply it, unfortunately */ |
| #ifndef GvCV_set |
| #define GvCV_set(gv, cv) (GvCV(gv) = cv) |
| #endif |
| |
| /* declare routines from plperl.c for access by .xs files */ |
| HV *plperl_spi_exec(char *, int); |
| void plperl_return_next(SV *); |
| SV *plperl_spi_query(char *); |
| SV *plperl_spi_fetchrow(char *); |
| SV *plperl_spi_prepare(char *, int, SV **); |
| HV *plperl_spi_exec_prepared(char *, HV *, int, SV **); |
| SV *plperl_spi_query_prepared(char *, int, SV **); |
| void plperl_spi_freeplan(char *); |
| void plperl_spi_cursor_close(char *); |
| char *plperl_sv_to_literal(SV *, char *); |
| |
| |
| |
| #endif /* PL_PERL_H */ |