summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Porter <porterca@us.ibm.com>2019-01-24 12:40:26 -0600
committerChristopher Jones <christopher.jones@oracle.com>2019-02-11 16:10:47 +1100
commitfc940f0703c5c0f683821469fe89b5d8a684abc2 (patch)
treed3724eca0f6d7294c8ec06616440fa7579bd7dc9
parenta095472e620a5f73c8f7bff8b6e83a559ec2511b (diff)
downloadphp-git-fc940f0703c5c0f683821469fe89b5d8a684abc2.tar.gz
pdo_oci: Register new attr constants and add tests
-rw-r--r--ext/pdo_oci/pdo_oci.c3
-rw-r--r--ext/pdo_oci/tests/pdo_oci_attr_action.phpt52
-rw-r--r--ext/pdo_oci/tests/pdo_oci_attr_client_info.phpt52
-rw-r--r--ext/pdo_oci/tests/pdo_oci_class_constants.phpt62
4 files changed, 169 insertions, 0 deletions
diff --git a/ext/pdo_oci/pdo_oci.c b/ext/pdo_oci/pdo_oci.c
index 904406e41d..e9f2b29364 100644
--- a/ext/pdo_oci/pdo_oci.c
+++ b/ext/pdo_oci/pdo_oci.c
@@ -92,6 +92,9 @@ static MUTEX_T pdo_oci_env_mutex;
*/
PHP_MINIT_FUNCTION(pdo_oci)
{
+ REGISTER_PDO_CLASS_CONST_LONG("OCI_ATTR_ACTION", (zend_long)PDO_OCI_ATTR_ACTION);
+ REGISTER_PDO_CLASS_CONST_LONG("OCI_ATTR_CLIENT_INFO", (zend_long)PDO_OCI_ATTR_CLIENT_INFO);
+
php_pdo_register_driver(&pdo_oci_driver);
// Defer OCI init to PHP_RINIT_FUNCTION because with php-fpm,
diff --git a/ext/pdo_oci/tests/pdo_oci_attr_action.phpt b/ext/pdo_oci/tests/pdo_oci_attr_action.phpt
new file mode 100644
index 0000000000..50b8b74fc2
--- /dev/null
+++ b/ext/pdo_oci/tests/pdo_oci_attr_action.phpt
@@ -0,0 +1,52 @@
+--TEST--
+PDO_OCI: Attribute: Setting session action
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+
+require(dirname(__FILE__) . '/../../pdo/tests/pdo_test.inc');
+
+$query = 'select action from v$session where sid = (select distinct sid from v$mystat)';
+
+$dbh = PDOTest::factory();
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'ACTION NOT SET: ';
+var_dump($row['action']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_ACTION, "some action");
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'ACTION SET: ';
+var_dump($row['action']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_ACTION, "something else!");
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'ACTION RESET: ';
+var_dump($row['action']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_ACTION, null);
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'ACTION NULLED: ';
+var_dump($row['action']);
+
+echo "Done\n";
+
+?>
+--EXPECT--
+ACTION NOT SET: NULL
+ACTION SET: string(11) "some action"
+ACTION RESET: string(15) "something else!"
+ACTION NULLED: NULL
+Done
diff --git a/ext/pdo_oci/tests/pdo_oci_attr_client_info.phpt b/ext/pdo_oci/tests/pdo_oci_attr_client_info.phpt
new file mode 100644
index 0000000000..7551365c17
--- /dev/null
+++ b/ext/pdo_oci/tests/pdo_oci_attr_client_info.phpt
@@ -0,0 +1,52 @@
+--TEST--
+PDO_OCI: Attribute: Setting session client info
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+
+require(dirname(__FILE__) . '/../../pdo/tests/pdo_test.inc');
+
+$query = 'select client_info from v$session where sid = (select distinct sid from v$mystat)';
+
+$dbh = PDOTest::factory();
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'CLIENT_INFO NOT SET: ';
+var_dump($row['client_info']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_CLIENT_INFO, "some client info");
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'CLIENT_INFO SET: ';
+var_dump($row['client_info']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_CLIENT_INFO, "something else!");
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'CLIENT_INFO RESET: ';
+var_dump($row['client_info']);
+
+$dbh->setAttribute(PDO::OCI_ATTR_CLIENT_INFO, null);
+
+$stmt = $dbh->query($query);
+$row = $stmt->fetch();
+echo 'CLIENT_INFO NULLED: ';
+var_dump($row['client_info']);
+
+echo "Done\n";
+
+?>
+--EXPECT--
+CLIENT_INFO NOT SET: NULL
+CLIENT_INFO SET: string(16) "some client info"
+CLIENT_INFO RESET: string(15) "something else!"
+CLIENT_INFO NULLED: NULL
+Done
diff --git a/ext/pdo_oci/tests/pdo_oci_class_constants.phpt b/ext/pdo_oci/tests/pdo_oci_class_constants.phpt
new file mode 100644
index 0000000000..34ad7aafde
--- /dev/null
+++ b/ext/pdo_oci/tests/pdo_oci_class_constants.phpt
@@ -0,0 +1,62 @@
+--TEST--
+PDO OCI specific class constants
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require(dirname(__FILE__).'/../../pdo/tests/pdo_test.inc');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+
+require(dirname(__FILE__) . '/../../pdo/tests/pdo_test.inc');
+
+$expected = [
+ 'OCI_ATTR_CLIENT_INFO' => true,
+ 'OCI_ATTR_ACTION' => true,
+];
+
+$ref = new ReflectionClass('PDO');
+$constants = $ref->getConstants();
+$values = [];
+
+foreach ($constants as $name => $value) {
+ if (substr($name, 0, 8) == 'OCI_ATTR') {
+ if (!isset($values[$value])) {
+ $values[$value] = [$name];
+ } else {
+ $values[$value][] = $name;
+ }
+
+ if (isset($expected[$name])) {
+ unset($expected[$name]);
+ unset($constants[$name]);
+ }
+
+ } else {
+ unset($constants[$name]);
+ }
+}
+
+if (!empty($constants)) {
+ printf("[001] Dumping list of unexpected constants\n");
+ var_dump($constants);
+}
+
+if (!empty($expected)) {
+ printf("[002] Dumping list of missing constants\n");
+ var_dump($expected);
+}
+
+if (!empty($values)) {
+ foreach ($values as $value => $constants) {
+ if (count($constants) > 1) {
+ printf("[003] Several constants share the same value '%s'\n", $value);
+ var_dump($constants);
+ }
+ }
+}
+
+print "done!";
+--EXPECT--
+done!