summaryrefslogtreecommitdiff
path: root/ext/pdo_oci/oci_driver.c
diff options
context:
space:
mode:
authorChristopher Jones <christopher.jones@oracle.com>2019-02-11 17:03:51 +1100
committerChristopher Jones <christopher.jones@oracle.com>2019-02-11 17:03:51 +1100
commita1b8e6b1c1aaf6cb2a22b53c2e33278d269d2cf4 (patch)
treee87037afea46b9f7f52118871e524f17d1c4ae9b /ext/pdo_oci/oci_driver.c
parentf28bf785fdff1e95d9e9f480b2784ca2df756657 (diff)
parentbdce2954c3f12a80da5c0e10c4434c02d57c9eea (diff)
downloadphp-git-a1b8e6b1c1aaf6cb2a22b53c2e33278d269d2cf4.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Merge PDO_OCI PR PDO_OCI tracing attribute PR merge pdo_oci: Add client identifier and module attrs pdo_oci: Register new attr constants and add tests pdo_oci: Add PDO_OCI_ATTR_ACTION and CLIENT_INFO
Diffstat (limited to 'ext/pdo_oci/oci_driver.c')
-rw-r--r--ext/pdo_oci/oci_driver.c103
1 files changed, 90 insertions, 13 deletions
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index f00e1e6ff8..607069008d 100644
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -435,25 +435,102 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
zend_long lval = zval_get_long(val);
pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
- if (attr == PDO_ATTR_AUTOCOMMIT) {
- if (dbh->in_txn) {
- /* Assume they want to commit whatever is outstanding */
- H->last_err = OCITransCommit(H->svc, H->err, 0);
+ switch (attr) {
+ case PDO_ATTR_AUTOCOMMIT:
+ {
+ if (dbh->in_txn) {
+ /* Assume they want to commit whatever is outstanding */
+ H->last_err = OCITransCommit(H->svc, H->err, 0);
+
+ if (H->last_err) {
+ H->last_err = oci_drv_error("OCITransCommit");
+ return 0;
+ }
+ dbh->in_txn = 0;
+ }
+
+ dbh->auto_commit = (unsigned int)lval? 1 : 0;
+ return 1;
+ }
+ case PDO_ATTR_PREFETCH:
+ {
+ H->prefetch = pdo_oci_sanitize_prefetch(lval);
+ return 1;
+ }
+ case 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) {
- H->last_err = oci_drv_error("OCITransCommit");
+ oci_drv_error("OCIAttrSet: OCI_ATTR_ACTION");
return 0;
}
- dbh->in_txn = 0;
+ return 1;
+#else
+ oci_drv_error("Unsupported attribute type");
+ return 0;
+#endif
}
+ case PDO_OCI_ATTR_CLIENT_INFO:
+ {
+#if (OCI_MAJOR_VERSION >= 10)
+ zend_string *client_info = zval_get_string(val);
- dbh->auto_commit = (unsigned int)lval? 1 : 0;
- return 1;
- } else if (attr == PDO_ATTR_PREFETCH) {
- H->prefetch = pdo_oci_sanitize_prefetch(lval);
- return 1;
- } else {
- return 0;
+ 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
+ }
+ case PDO_OCI_ATTR_CLIENT_IDENTIFIER:
+ {
+#if (OCI_MAJOR_VERSION >= 10)
+ zend_string *identifier = zval_get_string(val);
+
+ H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+ (dvoid *) ZSTR_VAL(identifier), (ub4) ZSTR_LEN(identifier),
+ OCI_ATTR_CLIENT_IDENTIFIER, H->err);
+ if (H->last_err) {
+ oci_drv_error("OCIAttrSet: OCI_ATTR_CLIENT_IDENTIFIER");
+ return 0;
+ }
+ return 1;
+#else
+ oci_drv_error("Unsupported attribute type");
+ return 0;
+#endif
+ }
+ case PDO_OCI_ATTR_MODULE:
+ {
+#if (OCI_MAJOR_VERSION >= 10)
+ zend_string *module = zval_get_string(val);
+
+ H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+ (dvoid *) ZSTR_VAL(module), (ub4) ZSTR_LEN(module),
+ OCI_ATTR_MODULE, H->err);
+ if (H->last_err) {
+ oci_drv_error("OCIAttrSet: OCI_ATTR_MODULE");
+ return 0;
+ }
+ return 1;
+#else
+ oci_drv_error("Unsupported attribute type");
+ return 0;
+#endif
+ }
+ default:
+ return 0;
}
}