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 )