Hmm....!!
 
Well yes could be done but not as part of any release of DBD::Oracle it would 
have to be you own hacked version
 
A few pointers to start.
 
You will not be able to 'get' a handle and retrun it as a Scalar it will only 
ever be a pointer so you will just get some sort of number,
 
You would simly edit the Oracle.xs file
 
add in the   includes to your C++ .h files
 
then add a few extra 
 
'ora_'
 
functions to take care of you C++ calls;
 
A quick example
 
void
ora_some_c_call(dbh)
   SV *dbh
   PREINIT:
   D_imp_dbh(dbh);  //this gets all the OCI handles for you (see dbdimp.h for 
the sturct imp_dbh_st)
   CODE:
   MYSomeC_Plus_Plus_method(dbh->envhp,dbh->svchp,dbh->seshp,dbh->srvhp);
 
 
 
Myself I would write a small 'c' wrapper that would call you c++ and just a 
single .XS function that calls that small 'c' wrapper to fire your function.
 
Hope this helps
 
Cheers
John
 

> Date: Thu, 27 Oct 2011 09:48:54 -0400
> From: bro...@deseret.com
> To: byter...@hotmail.com
> CC: dbi-users@perl.org
> Subject: Re: DBI-Users> RE: DBD-Oracle - obtaining OCI handles from $dbh
> 
> Yes, I assumed I would need to extend DBD::Oracle is some manner
> to allow those handles to be extracted from a $dbh object.
> 
> The specific OCI handles that the C++ libraries use are
> 
> - Environment handle
> - Service Context handle
> - Session handle
> - Server handle 
> 
> My initial thought process on how it might work is this
> 
> Create a method in the DBD::Oracle XS code to retrieve those
> handles and return them back to Perl space as a scalar.
> 
> Then with the Perl scalars that hold the OCI handles obtained from
> $dbh, pass those values to my Perl bindings to the custom C++ libraries.
> (I would need to extend the C++ libraries to allow the set methods
> to the objects that hold those OCI handles).
> 
> ...then the C++ libraries should work the same.
> 
> The motivation for this approach is that I have a large code base
> of these C++ libraries that have been tested, so it would cost
> prohibitive to simply replace them with a pure Perl implementation.
> 
> However, it is so much easier to work with Perl and DBI, it would
> be useful to have DBI connect to the database and do some table
> lookups. The C++ code could then be integrated seemlessly with my
> Perl code. As time allows, I would gradually peel away functionality
> from the legacy C++ libraries and implement it in Perl. But to 
> ease the migration path, this approach seemed to have some merits.
> 
> 
> Quoting John Scoles (byter...@hotmail.com):
> > 
> > 
> > 
> > 
> > > Date: Wed, 26 Oct 2011 21:46:30 -0400
> > > From: bro...@deseret.com
> > > To: dbi-users@perl.org
> > > Subject: DBD-Oracle - obtaining OCI handles from $dbh
> > > 
> > > I have created some Perl bindings for some existing custom C++ 
> > > libraries.
> > > 
> > > One of these C++ libraries implements a class that uses Oracle
> > > OCI calls.
> > > 
> > > I would like to create a connection to the Oracle database 
> > > using Perl's DBI (DBD::Oracle) module, and then ideally share
> > > that connection with the C++ libraries.
> > > 
> > > This would require me to extract the Oracle OCI handles from
> > > the $dbh object...and then pass them to the C++ libraries.
> > > 
> > > What would be the best way to get access to the underlying
> > > Oracle OCI handles from a $dbh object?
> > 
> > Hmm! Interesting concept. Which OCI handles are we talking about??
> > Like Matin said you would have to do that with .XS and you would pass I 
> > guess a pointer to the 
> > 'C' struct that holds the pointers to DBD::Oraclles pointers? 
> > 
> > You would have to cast that struct into you C++ somehow??
> > 
> > There would be a good number of handles to pass over. You might be able to 
> > find them by looking at the Perl process tree
> > and finding the SV that holds the struct and then sening that over?
> > 
> > All just guesses on my part.
> > 
> > Interesting concept non the less.
> > 
> > Cheers
> > John
> > 
                                          

Reply via email to