]> granicus.if.org Git - php/commitdiff
pdo_oci: Add PDO_OCI_ATTR_ACTION and CLIENT_INFO
authorCameron Porter <porterca@us.ibm.com>
Thu, 24 Jan 2019 02:14:00 +0000 (20:14 -0600)
committerChristopher Jones <christopher.jones@oracle.com>
Mon, 11 Feb 2019 05:10:47 +0000 (16:10 +1100)
Add the ability to set the action and client info on the database
session for PDO OCI using PDO attributes.

ext/pdo_oci/oci_driver.c
ext/pdo_oci/php_pdo_oci_int.h

index 292363ff891f6caf84c33162f93110209868db12..8dddaef597d799fb6b2fe1167ca2470a4a67445a 100644 (file)
@@ -454,6 +454,38 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
        } else if (attr == PDO_ATTR_PREFETCH) {
                H->prefetch = pdo_oci_sanitize_prefetch(lval);
                return 1;
+       } else if (attr == PDO_OCI_ATTR_ACTION) {
+#if (OCI_MAJOR_VERSION >= 10)
+               zend_string *action = zval_get_string(val);
+
+               H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+                               (dvoid *) ZSTR_VAL(action), (ub4) ZSTR_LEN(action),
+                               OCI_ATTR_ACTION, H->err);
+               if (H->last_err) {
+                       oci_drv_error("OCIAttrSet: OCI_ATTR_ACTION");
+                       return 0;
+               }
+               return 1;
+#else
+               oci_drv_error("Unsupported attribute type");
+               return 0;
+#endif
+       } else if (attr == PDO_OCI_ATTR_CLIENT_INFO) {
+#if (OCI_MAJOR_VERSION >= 10)
+               zend_string *client_info = zval_get_string(val);
+
+               H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+                               (dvoid *) ZSTR_VAL(client_info), (ub4) ZSTR_LEN(client_info),
+                               OCI_ATTR_CLIENT_INFO, H->err);
+               if (H->last_err) {
+                       oci_drv_error("OCIAttrSet: OCI_ATTR_CLIENT_INFO");
+                       return 0;
+               }
+               return 1;
+#else
+               oci_drv_error("Unsupported attribute type");
+               return 0;
+#endif
        } else {
                return 0;
        }
index 340348f100f29ad756020907e5e55285b4154792..05ad6597e76e9b9d1b4271ed367aa9bc615a1d96 100644 (file)
@@ -100,3 +100,9 @@ extern struct pdo_stmt_methods oci_stmt_methods;
 
 /* Arbitrary assumed row length for prefetch memory limit calcuation */
 #define PDO_OCI_PREFETCH_ROWSIZE 1024
+
+
+enum {
+       PDO_OCI_ATTR_ACTION = PDO_ATTR_DRIVER_SPECIFIC,
+       PDO_OCI_ATTR_CLIENT_INFO,
+};
\ No newline at end of file