pg: Statement preparing + inspection; less wonky object handling?

This commit is contained in:
Yorhel 2025-02-05 11:49:22 +01:00
parent c51b5f3598
commit 187417f160
5 changed files with 186 additions and 10 deletions

38
FU.xs
View file

@ -1,5 +1,7 @@
#include <stdio.h>
#include <dlfcn.h>
#undef PERL_IMPLICIT_SYS
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
@ -20,11 +22,16 @@ PROTOTYPES: DISABLE
TYPEMAP: <<EOT
TYPEMAP
fupg_conn * FUPG_CONN
fupg_st * FUPG_ST
INPUT
FUPG_CONN
if (sv_derived_from($arg, \"FU::PG::conn\")) $var = (fupg_conn *)SvIVX(SvRV($arg));
else croak(\"invalid object\");
else croak(\"invalid connection object\");
FUPG_ST
if (sv_derived_from($arg, \"FU::PG::st\")) $var = (fupg_st *)SvIVX(SvRV($arg));
else croak(\"invalid statement object\");
#"
EOT
@ -56,7 +63,7 @@ int lib_version()
void connect(const char *pkg, const char *conninfo)
CODE:
(void)pkg;
ST(0) = sv_setref_pv(sv_newmortal(), "FU::PG::conn", fupg_connect(aTHX_ conninfo));
ST(0) = fupg_connect(aTHX_ conninfo);
MODULE = FU PACKAGE = FU::PG::conn
@ -67,10 +74,35 @@ int server_version(fupg_conn *c)
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 exec(fupg_conn *c, SV *sv)
CODE:
ST(0) = fupg_exec(c, SvPVutf8_nolen(sv));
ST(0) = fupg_exec(aTHX_ c, SvPVutf8_nolen(sv));
void q(fupg_conn *c, SV *sv, ...)
CODE:
ST(0) = fupg_q(aTHX_ c, SvPVutf8_nolen(sv), ax, items);
void DESTROY(fupg_conn *c)
CODE:
fupg_destroy(c);
MODULE = FU PACKAGE = FU::PG::st
void params(fupg_st *st)
CODE:
ST(0) = fupg_st_params(aTHX_ st);
void columns(fupg_st *st)
CODE:
ST(0) = fupg_st_columns(aTHX_ st);
void DESTROY(fupg_st *st)
CODE:
fupg_st_destroy(st);