DBD-NET

 view release on metacpan or  search on metacpan

dbdnet/NET.xs  view on Meta::CPAN


void
_login(dbh, host, dbname, user, pass)
	SV *	dbh
	char *	host
	char *	dbname
	char *	user
	char *	pass
	CODE:
	ST(0) = dbd_db_login(dbh, host, dbname, user, pass) ? &sv_yes : &sv_no;


void
commit(dbh)
	SV *        dbh
	CODE:
	ST(0) = dbd_db_commit(dbh) ? &sv_yes : &sv_no;

void
rollback(dbh)
	SV *        dbh
	CODE:
	ST(0) = dbd_db_rollback(dbh) ? &sv_yes : &sv_no;

void
STORE(dbh, keysv, valuesv)
	SV *        dbh
	SV *        keysv
	SV *        valuesv
	CODE:
	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 */

void
FETCH(dbh, keysv)
	SV *        dbh
	SV *        keysv
	CODE:
	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  */

void
disconnect(dbh)
	SV *        dbh
	CODE:
	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;


void
DESTROY(dbh)
	SV *        dbh
	CODE:
	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);


MODULE = DBD::NET    PACKAGE = DBD::NET::st

void
_prepare(sth, statement)
	SV *        sth
	char *      statement
	CODE:
	ST(0) = dbd_st_prepare(sth, statement) ? &sv_yes : &sv_no;


void
rows(sth)
	SV *        sth
	CODE:
	D_imp_sth(sth);
#    XST_mIV(0, (IV)imp_sth->cda->rpc);


void
execute(sth, ...)
	SV *        sth
	CODE:
	D_imp_sth(sth);
	/* Handle binding any supplied values to placeholders */
	if (items > 1) {
		char name[16];
		int i, error;
		if (items-1 != HvKEYS(imp_sth->bind_names)) {
			do_error(0);
			XSRETURN_UNDEF;
		}
		for(i=1, error=0; i < items ; ++i) {
			sprintf(name, ":p%d", i);
			if (dbd_bind_ph(sth, imp_sth, name, ST(i)))
				++error;



( run in 0.436 second using v1.01-cache-2.11-cpan-df04353d9ac )