[svn:dbd-oracle] r14984 - dbd-oracle/branches/FAN
[email protected] Wed, 2 Nov 2011 05:02:25 -0700 (PDT)
| Newsgroups | perl.dbd.oracle.changes |
|---|---|
| Message-ID | <[email protected]> |
Author: byterock
Date: Wed Nov 2 05:02:24 2011
New Revision: 14984
Modified:
dbd-oracle/branches/FAN/dbdimp.c
dbd-oracle/branches/FAN/dbdimp.h
dbd-oracle/branches/FAN/oci8.c
Log:
got the handle back
Modified: dbd-oracle/branches/FAN/dbdimp.c
==============================================================================
--- dbd-oracle/branches/FAN/dbdimp.c (original)
+++ dbd-oracle/branches/FAN/dbdimp.c Wed Nov 2 05:02:24 2011
@@ -945,7 +945,7 @@
PerlIO_printf(DBILOGFP,"Setting up HA Event Callback!");
}
- status = reg_ha_callback(imp_dbh);
+ status = reg_ha_callback(dbh,imp_dbh);
if (status != OCI_SUCCESS) {
oci_error(dbh, NULL, status,
Modified: dbd-oracle/branches/FAN/dbdimp.h
==============================================================================
--- dbd-oracle/branches/FAN/dbdimp.h (original)
+++ dbd-oracle/branches/FAN/dbdimp.h Wed Nov 2 05:02:24 2011
@@ -12,6 +12,7 @@
struct ha_context_st {
PerlInterpreter *ct_perl;
+ SV *dbh;
imp_dbh_t *imp_dbh;
char *function;
};
@@ -407,7 +408,7 @@
ub4 ora_db_version _((SV *dbh, imp_dbh_t *imp_dbh));
sb4 reg_taf_callback _((imp_dbh_t *imp_dbh));
-sb4 reg_ha_callback _((imp_dbh_t *imp_dbh));
+sb4 reg_ha_callback _((SV *dbh,imp_dbh_t *imp_dbh));
/* These defines avoid name clashes for multiple statically linked DBD's */
Modified: dbd-oracle/branches/FAN/oci8.c
==============================================================================
--- dbd-oracle/branches/FAN/oci8.c (original)
+++ dbd-oracle/branches/FAN/oci8.c Wed Nov 2 05:02:24 2011
@@ -1305,6 +1305,7 @@
ha_context_t *ctx =(ha_context_t*)ha_ctx;
OCIServer *srvhp;
dTHXa(ctx->ct_perl);
+ SV* dbh = ctx->dbh;
dSP;
imp_dbh_t *imp_dbh = (imp_dbh_t*)ctx->imp_dbh;
sword status;
@@ -1314,12 +1315,29 @@
ub4 event_att_len;
ub4 event_code;
HV* ha_event;
+ // HV* dbh_h= SvSTASH(SvRV( ctx->dbh));;
AV* servers;
PERL_SET_CONTEXT(ctx->ct_perl);
ha_event = newHV();
servers = newAV();
PUSHMARK(SP);
+ //sv_bless(dbh,dbh_h);
+ if (dbh){
+ PerlIO_printf(DBILOGFP, " dhb is object cb_f=%d\n",sv_isobject(SvRV(dbh)));
+ }
+ //PerlIO_printf(DBILOGFP, " dhb isa DBI::db cb_f=%d\n",sv_derived_from(dbh,"DBI::db"));
+
+PerlIO_printf(DBILOGFP, " dhb isa cb_f=%d\n",sv_derived_from(SvRV(dbh),"DBI::db"));
+
+//PerlIO_printf(DBILOGFP, " dhb isa cb_f=%s\n", HvNAME(dbh_h));
+
+
+
+
+// PerlIO_printf(DBILOGFP, " dhb isa DBI::db cb_f=%d\n",sv_derived_from(dbh,"DBI::db"));
+
+
OCIAttrGet_log_stat(eventhp, OCI_HTYPE_EVENT, (dvoid *)&event_code, 0, OCI_ATTR_HA_SOURCE, imp_dbh->errhp, status);
hv_store(ha_event,"Source",6,sv_2mortal(newSVpv(oci_ha_event_source(event_code),strlen(oci_ha_event_source(event_code)))),0);
@@ -1398,6 +1416,8 @@
}
hv_store(ha_event,"Instances",9,newRV_noinc((SV*)servers),0);
+ //sv_2mortal(newRV_inc((SV*)DBIc_MY_H(imp_xxh)))
+ XPUSHs(sv_2mortal(newRV_inc((SV*)DBIc_MY_H(imp_dbh))));
XPUSHs(sv_2mortal(newRV((SV*)ha_event)));
PUTBACK;
call_pv(ctx->function, G_DISCARD);
@@ -1405,18 +1425,39 @@
sb4
-reg_ha_callback( imp_dbh_t *imp_dbh)
+reg_ha_callback(SV *dbh, imp_dbh_t *imp_dbh)
{
dTHX;
sword status;
ha_context_t *ctx = NULL;
+ SV* dbhref = newRV(dbh);// = sv_setref_iv(dbh, "DBI::db");
+// = newSVrv((SV*) dbh, "DBI::db");
+//newRV_noinc((SV*) dbh);
/*allocate space for the callback */
Newz(1, ctx, 1, ha_context_t);
ctx->function= (char*)safemalloc(strlen(imp_dbh->ha_function));
ctx->ct_perl = my_perl;
ctx->imp_dbh = imp_dbh;
+ //sv_setref_pv(dbhref,"DBI::db", dbh);
+ ctx->dbh = dbhref; //newSVrv( dbh, "DBI::db");
+PerlIO_printf(DBILOGFP, " dhb isa DBI::db=%d\n",sv_derived_from(dbh,"DBI::db"));
+
+PerlIO_printf(DBILOGFP, " dhb isa DBI::db=%d\n",sv_derived_from(SvRV(dbhref),"DBI::db"));
+
+
+
+
+//sv_bless(dbhref, gv_stashpv("DBI::db", 0));
strcpy((char *)ctx->function,imp_dbh->ha_function);
+PerlIO_printf(DBILOGFP, " dhb isa DBI::db=%d\n",sv_derived_from(dbh,"DBI::db"));
+
+
+PerlIO_printf(DBILOGFP, " dhb is object=%d\n",sv_isobject(ctx->dbh));
+
+PerlIO_printf(DBILOGFP, " dhb isa DBI::db=%d\n",sv_derived_from(dbh,"DBI::db"));
+
+
PerlIO_printf(DBILOGFP, " In reg_ha_callback reg OCI_ATTR_FOCBK =%d, OCI_ATTR_EVTCTX=%d\n",OCI_ATTR_EVTCBK,OCI_ATTR_EVTCTX);
OCIAttrSet_log_stat(imp_dbh->envhp, (ub4) OCI_HTYPE_ENV,(dvoid *)hacb_fn ,(ub4)0,(ub4)OCI_ATTR_EVTCBK, imp_dbh->errhp, status);