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. */

Reply via email to