]> granicus.if.org Git - php/commitdiff
PECL Bug #16842 (oci_error return false when NO_DATA_FOUND is raised)
authorChristopher Jones <sixd@php.net>
Thu, 1 Oct 2009 05:51:11 +0000 (05:51 +0000)
committerChristopher Jones <sixd@php.net>
Thu, 1 Oct 2009 05:51:11 +0000 (05:51 +0000)
ext/oci8/oci8.c
ext/oci8/tests/pecl_bug16842.phpt [new file with mode: 0644]

index 28fdea4555d3217cd11f5a2b17cebe3a1320bc53..491fee1b8580d60720b6ab2e1fe3a579a5a203da 100644 (file)
@@ -1371,6 +1371,12 @@ sb4 php_oci_error(OCIError *err_p, sword status TSRMLS_DC)
                        break;
                case OCI_NO_DATA:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCI_NO_DATA");
+                       errcode = php_oci_fetch_errmsg(err_p, &errbuf TSRMLS_CC);
+                       if (errbuf) {
+                               efree(errbuf);
+                       } else {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "OCI_NO_DATA: failed to fetch error message");
+                       }
                        break;
                case OCI_ERROR:
                        errcode = php_oci_fetch_errmsg(err_p, &errbuf TSRMLS_CC);
diff --git a/ext/oci8/tests/pecl_bug16842.phpt b/ext/oci8/tests/pecl_bug16842.phpt
new file mode 100644 (file)
index 0000000..d796d25
--- /dev/null
@@ -0,0 +1,69 @@
+--TEST--
+PECL Bug #16842 (NO_DATA_FOUND exception is a warning)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+error_reporting = E_WARNING
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+// Run Test
+
+echo "Test 1\n";
+
+echo "Raises NO_DATA_FOUND\n";
+$s = oci_parse($c, 'begin raise NO_DATA_FOUND; end;');
+$e = oci_execute($s);
+var_dump($e);
+var_dump(oci_error($s));
+
+echo "Test 2\n";
+
+echo "Raises ZERO_DIVIDE\n";
+$s = oci_parse($c, 'begin raise ZERO_DIVIDE; end;');
+$e = oci_execute($s);
+var_dump($e);
+var_dump(oci_error($s));
+
+oci_close($c);
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+Test 1
+Raises NO_DATA_FOUND
+
+Warning: oci_execute(): OCI_NO_DATA in %s on line 11
+bool(false)
+array(4) {
+  [%u|b%"code"]=>
+  int(1403)
+  [%u|b%"message"]=>
+  %unicode|string%(45) "ORA-01403: %s
+ORA-06512: at line 1"
+  [%u|b%"offset"]=>
+  int(0)
+  [%u|b%"sqltext"]=>
+  %unicode|string%(31) "begin raise NO_DATA_FOUND; end;"
+}
+Test 2
+Raises ZERO_DIVIDE
+
+Warning: oci_execute(): ORA-01476: %s
+ORA-06512: at line 1 in %s on line 19
+bool(false)
+array(4) {
+  [%u|b%"code"]=>
+  int(1476)
+  [%u|b%"message"]=>
+  %unicode|string%(56) "ORA-01476: %s
+ORA-06512: at line 1"
+  [%u|b%"offset"]=>
+  int(0)
+  [%u|b%"sqltext"]=>
+  %unicode|string%(29) "begin raise ZERO_DIVIDE; end;"
+}
+===DONE===