DBD-NET
view release on metacpan or search on metacpan
dbdnet/NET.c view on Meta::CPAN
if (items != 1)
croak("Usage: DBD::NET::db::rollback(dbh)");
{
SV * dbh = ST(0);
ST(0) = dbd_db_rollback(dbh) ? &sv_yes : &sv_no;
}
XSRETURN(1);
}
XS(XS_DBD__NET__db_STORE)
{
dXSARGS;
if (items != 3)
croak("Usage: DBD::NET::db::STORE(dbh, keysv, valuesv)");
{
SV * dbh = ST(0);
SV * keysv = ST(1);
SV * valuesv = ST(2);
if (!dbd_db_STORE(dbh, keysv, valuesv)) {
/* XXX hand-off to DBI for possible processing */
croak("Can't set %s->{%s}: unrecognised attribute",
SvPV(dbh,na), SvPV(keysv,na));
}
ST(0) = &sv_undef; /* discarded anyway */
}
XSRETURN(1);
}
XS(XS_DBD__NET__db_FETCH)
{
dXSARGS;
if (items != 2)
croak("Usage: DBD::NET::db::FETCH(dbh, keysv)");
{
SV * dbh = ST(0);
SV * keysv = ST(1);
SV *valuesv = dbd_db_FETCH(dbh, keysv);
if (!valuesv) {
/* XXX hand-off to DBI for possible processing */
croak("Can't get %s->{%s}: unrecognised attribute",
SvPV(dbh,na), SvPV(keysv,na));
}
ST(0) = valuesv; /* dbd_db_FETCH did sv_2mortal */
}
XSRETURN(1);
}
XS(XS_DBD__NET__db_disconnect)
{
dXSARGS;
if (items != 1)
croak("Usage: DBD::NET::db::disconnect(dbh)");
{
SV * dbh = ST(0);
D_imp_dbh(dbh);
if ( !DBIc_ACTIVE(imp_dbh) ) {
if (DBIc_WARN(imp_dbh) && !dirty)
warn("disconnect: already logged off!");
XSRETURN_YES;
}
/* Check for disconnect() being called whilst refs to cursors */
/* still exists. This needs some more thought. */
/* XXX We need to track DBIc_ACTIVE children not just all children */
if (DBIc_KIDS(imp_dbh) && DBIc_WARN(imp_dbh) && !dirty) {
warn("disconnect(%s) invalidates %d associated cursor(s)",
SvPV(dbh,na), DBIc_KIDS(imp_dbh));
}
ST(0) = dbd_db_disconnect(dbh) ? &sv_yes : &sv_no;
}
XSRETURN(1);
}
XS(XS_DBD__NET__db_DESTROY)
{
dXSARGS;
if (items != 1)
croak("Usage: DBD::NET::db::DESTROY(dbh)");
{
SV * dbh = ST(0);
D_imp_dbh(dbh);
ST(0) = &sv_yes;
if (!DBIc_IMPSET(imp_dbh)) { /* was never fully set up */
if (DBIc_WARN(imp_dbh) && !dirty)
warn("Database handle %s DESTROY ignored - never set up",
SvPV(dbh,na));
return;
}
if (DBIc_ACTIVE(imp_dbh)) {
if (DBIc_WARN(imp_dbh) && !dirty)
warn("Database handle destroyed without explicit disconnect");
dbd_db_disconnect(dbh);
}
dbd_db_destroy(dbh);
}
XSRETURN(1);
}
XS(XS_DBD__NET__st__prepare)
{
dXSARGS;
if (items != 2)
croak("Usage: DBD::NET::st::_prepare(sth, statement)");
{
SV * sth = ST(0);
char * statement = (char *)SvPV(ST(1),na);
ST(0) = dbd_st_prepare(sth, statement) ? &sv_yes : &sv_no;
}
XSRETURN(1);
}
XS(XS_DBD__NET__st_rows)
{
dXSARGS;
if (items != 1)
croak("Usage: DBD::NET::st::rows(sth)");
{
SV * sth = ST(0);
D_imp_sth(sth);
}
XSRETURN(1);
}
XS(XS_DBD__NET__st_execute)
{
dXSARGS;
( run in 0.779 second using v1.01-cache-2.11-cpan-df04353d9ac )