On 6.07.2010 14:36, John Scoles wrote:
luben wrote:
Gee didn't know anyone else was even interested in DRCP. good to see
there is some interest
Just to let you know that branch is in the very Beta stages so expect a
few things to be missing
Yes, I know it is in beta. I was just intereseted.
Ok would like to see the code for that/
I have attached the patch against DRCP branch
Finally, if this work is accepted I will add proper documentation for
the new attributes.
That would save me some trouble.
Now I have a little favour to ask of you. Seems I am getting a problem
with 31lob.t test 8 the sql "BEGIN ? := DBMS_LOB.GETLENGTH( ? ); END;";
does not return the correct length when used with DRCP
If you have half a moment and can take a look at that one that would be
great.
Tomorrow I will send a patch for the documentation.
I am not experienced with perl driver hacking but I will take a look on
the failing LOB test and try to figure what is going on.
Best regards
luben
Index: dbdimp.c
===================================================================
--- dbdimp.c (revision 14227)
+++ dbdimp.c (working copy)
@@ -388,8 +388,21 @@
#ifdef ORA_OCI_112
/*check to see if the user is connecting with DRCP */
+ STRLEN svp_len;
if (DBD_ATTRIB_TRUE(attr,"ora_drcp",8,svp))
imp_dbh->using_drcp = 1;
+ if ((svp=DBD_ATTRIB_GET_SVP(attr, "ora_pool_class", 14)) && SvOK(*svp)) {
+ if (!SvPOK(*svp))
+ croak("ora_pool_class is not a string");
+ imp_dbh->pool_class = (text *) SvPV (*svp, svp_len );
+ imp_dbh->pool_classl= (ub4) svp_len;
+ }
+ if (DBD_ATTRIB_TRUE(attr,"ora_pool_min",12,svp))
+ DBD_ATTRIB_GET_IV( attr, "ora_pool_min", 12, svp, imp_dbh->pool_min);
+ if (DBD_ATTRIB_TRUE(attr,"ora_pool_max",12,svp))
+ DBD_ATTRIB_GET_IV( attr, "ora_pool_max", 12, svp, imp_dbh->pool_max);
+ if (DBD_ATTRIB_TRUE(attr,"ora_pool_incr",13,svp))
+ DBD_ATTRIB_GET_IV( attr, "ora_pool_incr", 13, svp,
imp_dbh->pool_incr);
#endif
/* check to see if DBD_verbose or ora_verbose is set*/
if (DBD_ATTRIB_TRUE(attr,"dbd_verbose",11,svp))
@@ -793,6 +806,10 @@
if (imp_dbh->using_drcp) { /* connect uisng a
DRCP */
ub4 purity = OCI_ATTR_PURITY_SELF;
+ /* some pool default values */
+ if (!imp_dbh->pool_min ) imp_dbh->pool_min=4;
+ if (!imp_dbh->pool_max ) imp_dbh->pool_max=40;
+ if (!imp_dbh->pool_incr) imp_dbh->pool_incr=2;
OCIHandleAlloc_ok(imp_dbh->envhp,
&imp_dbh->poolhp, OCI_HTYPE_SPOOL, status);
@@ -801,14 +818,14 @@
imp_dbh->poolhp,
(OraText **)
&imp_dbh->pool_name,
(ub4 *)
&imp_dbh->pool_namel,
- dbname,
+ (OraText *) dbname,
strlen(dbname),
- 10,
- 100,
- 4,
- uid,
+ imp_dbh->pool_min,
+ imp_dbh->pool_max,
+ imp_dbh->pool_incr,
+ (OraText *) uid,
strlen(uid),
- pwd,
+ (OraText *) pwd,
strlen(pwd),
status);
@@ -827,6 +844,10 @@
OCIAttrSet_log_stat(imp_dbh->authp,
(ub4) OCI_HTYPE_AUTHINFO,
&purity, (ub4)
0,(ub4) OCI_ATTR_PURITY, imp_dbh->errhp, status);
+ OCIAttrSet_log_stat(imp_dbh->authp,
(ub4) OCI_HTYPE_AUTHINFO,
+ (OraText *)
imp_dbh->pool_class, (ub4) imp_dbh->pool_classl,
+ (ub4) OCI_ATTR_CONNECTION_CLASS,
imp_dbh->errhp, status);
+
cred_type = ora_parse_uid(imp_dbh,
&uid, &pwd);
OCISessionGet_log_stat(imp_dbh->envhp,
imp_dbh->errhp, &imp_dbh->svchp, imp_dbh->authp,
@@ -1103,6 +1124,7 @@
{
dTHX;
STRLEN kl;
+ STRLEN vl;
char *key = SvPV(keysv,kl);
int on = SvTRUE(valuesv);
int cacheit = 1;
@@ -1114,6 +1136,19 @@
else if (kl==8 && strEQ(key, "ora_drcp") ) {
imp_dbh->using_drcp = 1;
}
+ else if (kl==14 && strEQ(key, "ora_pool_class") ) {
+ imp_dbh->pool_class = (text *) SvPV (valuesv, vl );
+ imp_dbh->pool_classl= (ub4) vl;
+ }
+ else if (kl==12 && strEQ(key, "ora_pool_min") ) {
+ imp_dbh->pool_min = SvIV (valuesv);
+ }
+ else if (kl==12 && strEQ(key, "ora_pool_max") ) {
+ imp_dbh->pool_max = SvIV (valuesv);
+ }
+ else if (kl==13 && strEQ(key, "ora_pool_incr") ) {
+ imp_dbh->pool_incr = SvIV (valuesv);
+ }
#endif
else if (kl==20 && strEQ(key, "ora_oci_success_warn") ) {
oci_warn = SvIV (valuesv);
Index: dbdimp.h
===================================================================
--- dbdimp.h (revision 14227)
+++ dbdimp.h (working copy)
@@ -45,6 +45,11 @@
text *pool_name;
ub4 pool_namel;
bool using_drcp;
+ text *pool_class;
+ ub4 pool_classl;
+ ub4 pool_min;
+ ub4 pool_max;
+ ub4 pool_incr;
#endif
int proc_handles; /* If true, srvhp, svchp, and authp
handles
are owned by
ProC and must not be freed. */