[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);