From 2441b70033cb3b1dda240295e2540be3caf27450 Mon Sep 17 00:00:00 2001 From: Christopher Jones Date: Wed, 24 Mar 2010 22:08:55 +0000 Subject: [PATCH] Fixed bug #51291 (oci_error doesn't report last error when called two times) --- ext/oci8/oci8.c | 14 +- ext/oci8/package.xml | 29 +- ext/oci8/php_oci8.h | 2 +- ext/oci8/tests/bug51291.phpt | 434 ++++++++++++++++++ .../tests/{bug6109.phpt => pecl_bug6109.phpt} | 14 +- 5 files changed, 469 insertions(+), 24 deletions(-) create mode 100644 ext/oci8/tests/bug51291.phpt rename ext/oci8/tests/{bug6109.phpt => pecl_bug6109.phpt} (71%) diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c index 0211f4ada7..74a3e00f1f 100644 --- a/ext/oci8/oci8.c +++ b/ext/oci8/oci8.c @@ -1549,6 +1549,7 @@ void php_oci_connection_descriptors_free(php_oci_connection *connection TSRMLS_D /* {{{ php_oci_error() * * Fetch & print out error message if we get an error + * Returns an Oracle error number */ sb4 php_oci_error(OCIError *err_p, sword status TSRMLS_DC) { @@ -1639,19 +1640,20 @@ int php_oci_fetch_sqltext_offset(php_oci_statement *statement, text **sqltext, u { *sqltext = NULL; *error_offset = 0; + sword errstatus; - PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrGet, ((dvoid *)statement->stmt, OCI_HTYPE_STMT, (dvoid *) sqltext, (ub4 *)0, OCI_ATTR_STATEMENT, statement->err)); + PHP_OCI_CALL_RETURN(errstatus, OCIAttrGet, ((dvoid *)statement->stmt, OCI_HTYPE_STMT, (dvoid *) sqltext, (ub4 *)0, OCI_ATTR_STATEMENT, statement->err)); - if (statement->errcode != OCI_SUCCESS) { - statement->errcode = php_oci_error(statement->err, statement->errcode TSRMLS_CC); + if (errstatus != OCI_SUCCESS) { + statement->errcode = php_oci_error(statement->err, errstatus TSRMLS_CC); PHP_OCI_HANDLE_ERROR(statement->connection, statement->errcode); return 1; } - PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrGet, ((dvoid *)statement->stmt, OCI_HTYPE_STMT, (ub2 *)error_offset, (ub4 *)0, OCI_ATTR_PARSE_ERROR_OFFSET, statement->err)); + PHP_OCI_CALL_RETURN(errstatus, OCIAttrGet, ((dvoid *)statement->stmt, OCI_HTYPE_STMT, (ub2 *)error_offset, (ub4 *)0, OCI_ATTR_PARSE_ERROR_OFFSET, statement->err)); - if (statement->errcode != OCI_SUCCESS) { - statement->errcode = php_oci_error(statement->err, statement->errcode TSRMLS_CC); + if (errstatus != OCI_SUCCESS) { + statement->errcode = php_oci_error(statement->err, errstatus TSRMLS_CC); PHP_OCI_HANDLE_ERROR(statement->connection, statement->errcode); return 1; } diff --git a/ext/oci8/package.xml b/ext/oci8/package.xml index 2fee0fcaff..cc526ca028 100644 --- a/ext/oci8/package.xml +++ b/ext/oci8/package.xml @@ -6,7 +6,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> oci8 pecl.php.net Extension for Oracle Database - This extension allows you to access Oracle databases using the Oracle Call Interface (OCI8). It can be built with PHP 4.3.9 to 5.x. It can be linked with Oracle 9.2, 10.2, 11.1, or 11.2 client libraries. + This extension allows you to access Oracle databases. It can be built with PHP 4.3.9 to 5.x. It can be linked with Oracle 9.2, 10.2, 11.1, or 11.2 client libraries. Christopher Jones @@ -37,17 +37,16 @@ http://pear.php.net/dtd/package-2.0.xsd"> - 1.4.1 - 1.4.1 + 1.4.2 + 1.4.2 - stable - stable + development + development PHP -Fixed bug #49560 (Using LOBs causes slow PHP shutdown) -Fixed bug #47281 ($php_errormsg is limited in size of characters) + Fixed bug #51291 (oci_error doesn't report last error when called two times) @@ -367,6 +366,22 @@ Fixed bug #47281 ($php_errormsg is limited in size of characters) + + + 1.4.1 + 1.4.1 + + + stable + stable + + PHP + + Fixed bug #49560 (Using LOBs causes slow PHP shutdown) + Fixed bug #47281 ($php_errormsg is limited in size of characters) + + + 1.4.0 diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h index 7ccce856af..a2aac090d1 100644 --- a/ext/oci8/php_oci8.h +++ b/ext/oci8/php_oci8.h @@ -46,7 +46,7 @@ */ #undef PHP_OCI8_VERSION #endif -#define PHP_OCI8_VERSION "1.4.1" +#define PHP_OCI8_VERSION "1.4.2-development" extern zend_module_entry oci8_module_entry; #define phpext_oci8_ptr &oci8_module_entry diff --git a/ext/oci8/tests/bug51291.phpt b/ext/oci8/tests/bug51291.phpt new file mode 100644 index 0000000000..75851d63b1 --- /dev/null +++ b/ext/oci8/tests/bug51291.phpt @@ -0,0 +1,434 @@ +--TEST-- +Bug #51291 (oci_error() doesn't report last error when called two times) +--SKIPIF-- + +--FILE-- + +===DONE=== + +--EXPECTF-- +Test 1 - Parse +array(4) { + ["code"]=> + int(1756) + ["message"]=> + string(48) "ORA-01756: %s" + ["offset"]=> + int(0) + ["sqltext"]=> + string(0) "" +} +2nd call +array(4) { + ["code"]=> + int(1756) + ["message"]=> + string(48) "ORA-01756: %s" + ["offset"]=> + int(0) + ["sqltext"]=> + string(0) "" +} + +Test 2 - Parse + +Warning: oci_error() expects parameter 1 to be resource, boolean given in %sbug51291.php on line %d +bool(false) +array(4) { + ["code"]=> + int(1756) + ["message"]=> + string(48) "ORA-01756: %s" + ["offset"]=> + int(0) + ["sqltext"]=> + string(0) "" +} +NULL +2nd call + +Warning: oci_error() expects parameter 1 to be resource, boolean given in %sbug51291.php on line %d +bool(false) +array(4) { + ["code"]=> + int(1756) + ["message"]=> + string(48) "ORA-01756: %s" + ["offset"]=> + int(0) + ["sqltext"]=> + string(0) "" +} +NULL + +Test 3 - Execute +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +2nd call +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} + +Test 4 - Execute - consecutive oci_error calls of different kinds +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +2nd call +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} + +Test 5 - Execute - after oci_rollback +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +Rollback status is true +2nd call after oci_rollback +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} + +Test 6 - Execute - after successful 2nd query with new handle +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +Execute status is true +2nd call after successful execute +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +bool(false) + +Test 7 - Execute - after successful 2nd query with same handle +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +Execute status is true +2nd call after successful execute +bool(false) +bool(false) +bool(false) + +Test 8 - Execute - after unsuccessful 2nd query with new handle +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} + +Warning: oci_execute(): ORA-00904: "REALLYNOTHERE": %s in %sbug51291.php on line %d +Execute status is false +2nd call after unsuccessful execute +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(46) "ORA-00904: "REALLYNOTHERE": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(30) "select reallynothere from dual" +} + +Test 9 - Execute - after unsuccessful 2nd query with same handle +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(45) "ORA-00904: "DOESNOTEXIST": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(29) "select doesnotexist from dual" +} + +Warning: oci_execute(): ORA-00904: "REALLYNOTHERE": %s in %sbug51291.php on line %d +Execute status is false +2nd call after unsuccessful execute +bool(false) +bool(false) +array(4) { + ["code"]=> + int(904) + ["message"]=> + string(46) "ORA-00904: "REALLYNOTHERE": %s" + ["offset"]=> + int(7) + ["sqltext"]=> + string(30) "select reallynothere from dual" +} + +Test 10 - Execute - after successful 2nd query with same statement +bool(false) +bool(false) +array(4) { + ["code"]=> + int(6510) + ["message"]=> + string(72) "ORA-06510: PL/SQL: %s +ORA-06512: %s" + ["offset"]=> + int(0) + ["sqltext"]=> + string(64) "declare e exception; begin if :bv = 1 then raise e; end if; end;" +} +Execute status is true +2nd call after successful execute +bool(false) +bool(false) +bool(false) +===DONE=== diff --git a/ext/oci8/tests/bug6109.phpt b/ext/oci8/tests/pecl_bug6109.phpt similarity index 71% rename from ext/oci8/tests/bug6109.phpt rename to ext/oci8/tests/pecl_bug6109.phpt index 029c5dddb8..d0762fa883 100644 --- a/ext/oci8/tests/bug6109.phpt +++ b/ext/oci8/tests/pecl_bug6109.phpt @@ -11,10 +11,6 @@ require(dirname(__FILE__).'/connect.inc'); echo "Test 1\n"; -echo "Once Oracle has popped the message from its stack, the message is\n"; -echo "no longer available.\n"; - - $s = oci_parse($c, 'delete from table_does_not_exist'); $r = @oci_execute($s); @@ -36,11 +32,9 @@ echo "Done\n"; ?> --EXPECTF-- Test 1 -Once Oracle has popped the message from its stack, the message is -no longer available. 0 -> ORA-00942: %s -1 -> -2 -> -3 -> -4 -> +1 -> ORA-00942: %s +2 -> ORA-00942: %s +3 -> ORA-00942: %s +4 -> ORA-00942: %s Done -- 2.40.0