DBD-PgSPI
view release on metacpan or search on metacpan
PROTOTYPES: DISABLE
BOOT:
items = 0; /* avoid 'unused variable' warning */
DBISTATE_INIT;
/* XXX this interface will change: */
DBI_IMP_SIZE("DBD::PgSPI::dr::imp_data_size", sizeof(imp_drh_t));
DBI_IMP_SIZE("DBD::PgSPI::db::imp_data_size", sizeof(imp_dbh_t));
DBI_IMP_SIZE("DBD::PgSPI::st::imp_data_size", sizeof(imp_sth_t));
dbd_init(DBIS);
# ------------------------------------------------------------
# database level interface
# ------------------------------------------------------------
MODULE = DBD::PgSPI PACKAGE = DBD::PgSPI::db
void
_login(dbh)
SV * dbh
CODE:
D_imp_dbh(dbh);
if ( DBIc_ACTIVE(imp_dbh) ) {
warn("Attempt to open second connection in SPI, ignored");
} else {
dbd_db_login(dbh, imp_dbh, "", "", "");
}
ST(0) = &PL_sv_yes;
void
commit(dbh)
SV * dbh
CODE:
warn("commit ineffective in PgSPI");
ST(0) = &PL_sv_yes;
void
rollback(dbh)
SV * dbh
CODE:
warn("rollback ineffective in PgSPI");
ST(0) = &PL_sv_yes;
void
disconnect(dbh)
SV * dbh
CODE:
D_imp_dbh(dbh);
if ( !DBIc_ACTIVE(imp_dbh) ) {
XSRETURN_YES;
}
/* pre-disconnect checks and tidy-ups */
if (DBIc_CACHED_KIDS(imp_dbh)) {
SvREFCNT_dec(DBIc_CACHED_KIDS(imp_dbh));
DBIc_CACHED_KIDS(imp_dbh) = Nullhv;
}
/* Check for disconnect() being called whilst refs to cursors */
/* still exists. This possibly needs some more thought. */
if (DBIc_ACTIVE_KIDS(imp_dbh) && DBIc_WARN(imp_dbh) && !PL_dirty) {
char *plural = (DBIc_ACTIVE_KIDS(imp_dbh)==1) ? "" : "s";
warn("disconnect(%s) invalidates %d active statement%s. %s",
SvPV(dbh,PL_na), (int)DBIc_ACTIVE_KIDS(imp_dbh), plural,
"Either destroy statement handles or call finish on them before disconnecting.");
}
ST(0) = dbd_db_disconnect(dbh, imp_dbh) ? &PL_sv_yes : &PL_sv_no;
void
STORE(dbh, keysv, valuesv)
SV * dbh
SV * keysv
SV * valuesv
CODE:
D_imp_dbh(dbh);
ST(0) = &PL_sv_yes;
if (!dbd_db_STORE_attrib(dbh, imp_dbh, keysv, valuesv)) {
if (!DBIS->set_attr(dbh, keysv, valuesv)) {
ST(0) = &PL_sv_no;
}
}
void
FETCH(dbh, keysv)
SV * dbh
SV * keysv
CODE:
D_imp_dbh(dbh);
SV *valuesv = dbd_db_FETCH_attrib(dbh, imp_dbh, keysv);
if (!valuesv) {
valuesv = DBIS->get_attr(dbh, keysv);
}
ST(0) = valuesv; /* dbd_db_FETCH_attrib did sv_2mortal */
void
DESTROY(dbh)
SV * dbh
PPCODE:
D_imp_dbh(dbh);
ST(0) = &PL_sv_yes;
if (!DBIc_IMPSET(imp_dbh)) { /* was never fully set up */
if (DBIc_WARN(imp_dbh) && !PL_dirty && dbis->debug >= 2) {
warn("Database handle %s DESTROY ignored - never set up", SvPV(dbh,PL_na));
}
}
else {
/* pre-disconnect checks and tidy-ups */
if (DBIc_CACHED_KIDS(imp_dbh)) {
SvREFCNT_dec(DBIc_CACHED_KIDS(imp_dbh));
DBIc_CACHED_KIDS(imp_dbh) = Nullhv;
}
if (DBIc_IADESTROY(imp_dbh)) { /* want's ineffective destroy */
DBIc_ACTIVE_off(imp_dbh);
}
if (DBIc_ACTIVE(imp_dbh)) {
if (DBIc_WARN(imp_dbh) && (!PL_dirty || dbis->debug >= 3)) {
( run in 0.505 second using v1.01-cache-2.11-cpan-39bf76dae61 )