summaryrefslogtreecommitdiff
path: root/ext/pdo_oci/oci_driver.c
diff options
context:
space:
mode:
authorCameron Porter <porterca@us.ibm.com>2019-01-25 11:44:10 -0600
committerChristopher Jones <christopher.jones@oracle.com>2019-02-11 16:10:47 +1100
commit38363f4820a0a0a6764ce41fc1fae327d782836a (patch)
tree3998432a2ae84d15601c8abd74ea2d7cb73ffe90 /ext/pdo_oci/oci_driver.c
parentfc940f0703c5c0f683821469fe89b5d8a684abc2 (diff)
downloadphp-git-38363f4820a0a0a6764ce41fc1fae327d782836a.tar.gz
pdo_oci: Add client identifier and module attrs
Add tests for the new attributes, and check the setAttribute return value.
Diffstat (limited to 'ext/pdo_oci/oci_driver.c')
-rw-r--r--ext/pdo_oci/oci_driver.c113
1 files changed, 79 insertions, 34 deletions
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index 8dddaef597..959faadbc2 100644
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -437,57 +437,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;
+ if (H->last_err) {
+ H->last_err = oci_drv_error("OCITransCommit");
+ return 0;
+ }
+ dbh->in_txn = 0;
}
- dbh->in_txn = 0;
- }
- 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 if (attr == PDO_OCI_ATTR_ACTION) {
+ 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);
+ zend_string *action = zval_get_string(val);
- H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+ 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;
+ if (H->last_err) {
+ oci_drv_error("OCIAttrSet: OCI_ATTR_ACTION");
+ return 0;
+ }
+ return 1;
#else
- oci_drv_error("Unsupported attribute type");
- return 0;
+ oci_drv_error("Unsupported attribute type");
+ return 0;
#endif
- } else if (attr == PDO_OCI_ATTR_CLIENT_INFO) {
+ }
+ case PDO_OCI_ATTR_CLIENT_INFO:
+ {
#if (OCI_MAJOR_VERSION >= 10)
- zend_string *client_info = zval_get_string(val);
+ zend_string *client_info = zval_get_string(val);
- H->last_err = OCIAttrSet(H->session, OCI_HTYPE_SESSION,
+ 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");
+ 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
}
- return 1;
+ 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;
+ oci_drv_error("Unsupported attribute type");
+ return 0;
#endif
- } else {
- return 0;
+ }
+ 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;
}
}