DBD-QBase

 view release on metacpan or  search on metacpan

QBase.xs  view on Meta::CPAN



void
_XXX_do(dbh, statement)
    SV *	dbh
    char *	statement
    CODE:
    I32 rows;
    /* XXX currently implemented as execute(prepare()) in DBI.pm	*/
    rows = dbd_db_do(dbh, statement);
    if      (rows == 0) {	XST_mPV(0, "OK");	}
    else if (rows >  0) {	XST_mIV(0, rows);	}
    else {			ST(0) = &sv_undef;	}


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:
    ST(0) = &sv_yes;
    if (!dbd_db_STORE(dbh, keysv, valuesv))
	if (!DBIS->set_attr(dbh, keysv, valuesv))
	    ST(0) = &sv_no;

void
FETCH(dbh, keysv)
    SV *	dbh
    SV *	keysv
    CODE:
    SV *valuesv = dbd_db_FETCH(dbh, keysv);
    if (!valuesv)
	valuesv = DBIS->get_attr(dbh, keysv);
    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), (int)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::QBase    PACKAGE = DBD::QBase::st


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


void
rows(sth)
    SV *	sth
    CODE:
    XST_mIV(0, dbd_st_rows(sth));


void
bind_param(sth, param, value, attribs=Nullsv)
    SV *	sth
    SV *	param
    SV *	value
    SV *	attribs
    CODE:
    DBD_ATTRIBS_CHECK("bind_param", sth, attribs);
    ST(0) = dbd_bind_ph(sth, param, value, attribs) ? &sv_yes : &sv_no;


void
execute(sth, ...)
    SV *	sth



( run in 0.575 second using v1.01-cache-2.11-cpan-39bf76dae61 )