#include #include #undef PERL_IMPLICIT_SYS #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "c/common.c" #include "c/jsonfmt.c" #include "c/jsonparse.c" #include "c/libpq.h" #include "c/pgconn.c" #define FUPG_CONN_COOKIE \ if (c->cookie) fu_confess("Invalid attempt to run a query on the top-level connection while a transaction object exists") #define FUPG_ST_COOKIE \ if (st->cookie != st->conn->cookie) fu_confess("Invalid cross-transaction operation on statement object") typedef fupg_conn *fupg_txn; MODULE = FU PROTOTYPES: DISABLE TYPEMAP: <conn); OUTPUT: RETVAL void _debug_trace(fupg_conn *c, bool on) CODE: if (on) PQtrace(c->conn, stderr); else PQuntrace(c->conn); ST(0) = c->self; void _set_cookie(fupg_conn *c, UV cookie) CODE: c->cookie = cookie; UV _get_cookie(fupg_conn *c) CODE: RETVAL = c->cookie; OUTPUT: RETVAL void status(fupg_conn *c) CODE: ST(0) = sv_2mortal(newSVpv(fupg_status(c), 0)); void exec(fupg_conn *c, SV *sv) CODE: FUPG_CONN_COOKIE; ST(0) = fupg_exec(aTHX_ c, SvPVutf8_nolen(sv)); void q(fupg_conn *c, SV *sv, ...) CODE: FUPG_CONN_COOKIE; ST(0) = fupg_q(aTHX_ c, SvPVutf8_nolen(sv), ax, items); void disconnect(fupg_conn *c) CODE: fupg_disconnect(c); void DESTROY(fupg_conn *c) CODE: fupg_destroy(c); MODULE = FU PACKAGE = FU::PG::txn void exec(fupg_txn c, SV *sv) CODE: ST(0) = fupg_exec(aTHX_ c, SvPVutf8_nolen(sv)); void q(fupg_txn c, SV *sv, ...) CODE: ST(0) = fupg_q(aTHX_ c, SvPVutf8_nolen(sv), ax, items); MODULE = FU PACKAGE = FU::PG::st void params(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_params(aTHX_ st); void columns(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_columns(aTHX_ st); void exec(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_exec(aTHX_ st); void val(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_val(aTHX_ st); void rowl(fupg_st *st) CODE: FUPG_ST_COOKIE; XSRETURN(fupg_st_rowl(aTHX_ st, ax)); void rowa(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_rowa(aTHX_ st); void rowh(fupg_st *st) CODE: FUPG_ST_COOKIE; ST(0) = fupg_st_rowh(aTHX_ st); void DESTROY(fupg_st *st) CODE: fupg_st_destroy(st);