sixd                                     Wed, 24 Mar 2010 22:08:55 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=296754

Log:
Fixed bug #51291 (oci_error doesn't report last error when called two times)

Bug: http://bugs.php.net/51291 (Assigned) oci_error dont report last error when 
called two times
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/oci8/oci8.c
    U   php/php-src/branches/PHP_5_3/ext/oci8/package.xml
    U   php/php-src/branches/PHP_5_3/ext/oci8/php_oci8.h
    A   php/php-src/branches/PHP_5_3/ext/oci8/tests/bug51291.phpt
    D   php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt
    A + php/php-src/branches/PHP_5_3/ext/oci8/tests/pecl_bug6109.phpt
        (from php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt:r296733)
    U   php/php-src/trunk/ext/oci8/oci8.c
    U   php/php-src/trunk/ext/oci8/package.xml
    U   php/php-src/trunk/ext/oci8/php_oci8.h
    A   php/php-src/trunk/ext/oci8/tests/bug51291.phpt
    D   php/php-src/trunk/ext/oci8/tests/bug6109.phpt
    A + php/php-src/trunk/ext/oci8/tests/pecl_bug6109.phpt
        (from php/php-src/trunk/ext/oci8/tests/bug6109.phpt:r296733)

Modified: php/php-src/branches/PHP_5_3/ext/oci8/oci8.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/oci8.c	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/branches/PHP_5_3/ext/oci8/oci8.c	2010-03-24 22:08:55 UTC (rev 296754)
@@ -1549,6 +1549,7 @@
 /* {{{ 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 @@
 {
 	*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;
 	}

Modified: php/php-src/branches/PHP_5_3/ext/oci8/package.xml
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/package.xml	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/branches/PHP_5_3/ext/oci8/package.xml	2010-03-24 22:08:55 UTC (rev 296754)
@@ -6,7 +6,7 @@
  <name>oci8</name>
  <channel>pecl.php.net</channel>
  <summary>Extension for Oracle Database</summary>
- <description>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.
+ <description>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.
  </description>
  <lead>
   <name>Christopher Jones</name>
@@ -37,17 +37,16 @@
  <time>15:00:00</time>

  <version>
-  <release>1.4.1</release>
-  <api>1.4.1</api>
+  <release>1.4.2</release>
+  <api>1.4.2</api>
  </version>
  <stability>
-  <release>stable</release>
-  <api>stable</api>
+  <release>development</release>
+  <api>development</api>
  </stability>
  <license uri="http://www.php.net/license";>PHP</license>
  <notes>
-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)
  </notes>
  <contents>
   <dir name="/">
@@ -369,6 +368,22 @@

 <release>
  <version>
+  <release>1.4.1</release>
+  <api>1.4.1</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.php.net/license";>PHP</license>
+ <notes>
+    Fixed bug #49560 (Using LOBs causes slow PHP shutdown)
+    Fixed bug #47281 ($php_errormsg is limited in size of characters)
+ </notes>
+</release>
+
+<release>
+ <version>
   <release>1.4.0</release>
   <api>1.4.0</api>
  </version>

Modified: php/php-src/branches/PHP_5_3/ext/oci8/php_oci8.h
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/php_oci8.h	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/branches/PHP_5_3/ext/oci8/php_oci8.h	2010-03-24 22:08:55 UTC (rev 296754)
@@ -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

Added: php/php-src/branches/PHP_5_3/ext/oci8/tests/bug51291.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/tests/bug51291.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/oci8/tests/bug51291.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -0,0 +1,434 @@
+--TEST--
+Bug #51291 (oci_error() doesn't report last error when called two times)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+echo "Test 1 - Parse\n";
+
+$s = @oci_parse($c, "select ' from dual");
+if (!$s) {
+    var_dump(oci_error($c));
+    echo "2nd call\n";
+    var_dump(oci_error($c));
+}
+
+echo "\nTest 2 - Parse\n";
+
+$s = @oci_parse($c, "select ' from dual");
+if (!$s) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+echo "\nTest 3 - Execute\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error($s));
+}
+
+echo "\nTest 4 - Execute - consecutive oci_error calls of different kinds\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 5 - Execute - after oci_rollback\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $r = oci_rollback($c);
+    echo "Rollback status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after oci_rollback\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 6 - Execute - after successful 2nd query with new handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s2 = oci_parse($c, 'select 1 from dual');
+    $r = oci_execute($s2, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s), oci_error($s2));
+}
+
+
+echo "\nTest 7 - Execute - after successful 2nd query with same handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s = oci_parse($c, 'select 1 from dual');
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 8 - Execute - after unsuccessful 2nd query with new handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s2 = oci_parse($c, 'select reallynothere from dual');
+    $r = oci_execute($s2, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after unsuccessful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s), oci_error($s2));
+}
+
+echo "\nTest 9 - Execute - after unsuccessful 2nd query with same handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s = oci_parse($c, 'select reallynothere from dual');
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after unsuccessful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+echo "\nTest 10 - Execute - after successful 2nd query with same statement\n";
+
+$s = oci_parse($c, "declare e exception; begin if :bv = 1 then raise e; end if; end;");
+$bv = 1;
+oci_bind_by_name($s, ":bv", $bv);
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $bv = 0;
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--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===


Property changes on: php/php-src/branches/PHP_5_3/ext/oci8/tests/bug51291.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Deleted: php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -1,46 +0,0 @@
---TEST--
-PECL Bug #6109 (Error messages not kept)
---SKIPIF--
-<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
---FILE--
-<?php
-
-require(dirname(__FILE__).'/connect.inc');
-
-// Run Test
-
-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);
-
-if ($r) {
-	echo "whoops - table does exist\n";
-} else {
-	for ($i = 0; $i < 5; $i++) {
-		$err = oci_error($s);
-		echo ($i) .' -> '.$err['message'] ."\n";
-	}
-}
-
-// Cleanup
-
-oci_close($c);
-
-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 ->
-Done

Copied: php/php-src/branches/PHP_5_3/ext/oci8/tests/pecl_bug6109.phpt (from rev 296733, php/php-src/branches/PHP_5_3/ext/oci8/tests/bug6109.phpt)
===================================================================
--- php/php-src/branches/PHP_5_3/ext/oci8/tests/pecl_bug6109.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/oci8/tests/pecl_bug6109.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -0,0 +1,40 @@
+--TEST--
+PECL Bug #6109 (Error messages not kept)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+// Run Test
+
+echo "Test 1\n";
+
+$s = oci_parse($c, 'delete from table_does_not_exist');
+$r = @oci_execute($s);
+
+if ($r) {
+	echo "whoops - table does exist\n";
+} else {
+	for ($i = 0; $i < 5; $i++) {
+		$err = oci_error($s);
+		echo ($i) .' -> '.$err['message'] ."\n";
+	}
+}
+
+// Cleanup
+
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+0 -> ORA-00942: %s
+1 -> ORA-00942: %s
+2 -> ORA-00942: %s
+3 -> ORA-00942: %s
+4 -> ORA-00942: %s
+Done

Modified: php/php-src/trunk/ext/oci8/oci8.c
===================================================================
--- php/php-src/trunk/ext/oci8/oci8.c	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/trunk/ext/oci8/oci8.c	2010-03-24 22:08:55 UTC (rev 296754)
@@ -1549,6 +1549,7 @@
 /* {{{ 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 @@
 {
 	*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;
 	}

Modified: php/php-src/trunk/ext/oci8/package.xml
===================================================================
--- php/php-src/trunk/ext/oci8/package.xml	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/trunk/ext/oci8/package.xml	2010-03-24 22:08:55 UTC (rev 296754)
@@ -6,7 +6,7 @@
  <name>oci8</name>
  <channel>pecl.php.net</channel>
  <summary>Extension for Oracle Database</summary>
- <description>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.
+ <description>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.
  </description>
  <lead>
   <name>Christopher Jones</name>
@@ -37,17 +37,16 @@
  <time>15:00:00</time>

  <version>
-  <release>1.4.1</release>
-  <api>1.4.1</api>
+  <release>1.4.2</release>
+  <api>1.4.2</api>
  </version>
  <stability>
-  <release>stable</release>
-  <api>stable</api>
+  <release>development</release>
+  <api>development</api>
  </stability>
  <license uri="http://www.php.net/license";>PHP</license>
  <notes>
-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)
  </notes>
  <contents>
   <dir name="/">
@@ -369,6 +368,22 @@

 <release>
  <version>
+  <release>1.4.1</release>
+  <api>1.4.1</api>
+ </version>
+ <stability>
+  <release>stable</release>
+  <api>stable</api>
+ </stability>
+ <license uri="http://www.php.net/license";>PHP</license>
+ <notes>
+    Fixed bug #49560 (Using LOBs causes slow PHP shutdown)
+    Fixed bug #47281 ($php_errormsg is limited in size of characters)
+ </notes>
+</release>
+
+<release>
+ <version>
   <release>1.4.0</release>
   <api>1.4.0</api>
  </version>

Modified: php/php-src/trunk/ext/oci8/php_oci8.h
===================================================================
--- php/php-src/trunk/ext/oci8/php_oci8.h	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/trunk/ext/oci8/php_oci8.h	2010-03-24 22:08:55 UTC (rev 296754)
@@ -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

Added: php/php-src/trunk/ext/oci8/tests/bug51291.phpt
===================================================================
--- php/php-src/trunk/ext/oci8/tests/bug51291.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/oci8/tests/bug51291.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -0,0 +1,434 @@
+--TEST--
+Bug #51291 (oci_error() doesn't report last error when called two times)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+echo "Test 1 - Parse\n";
+
+$s = @oci_parse($c, "select ' from dual");
+if (!$s) {
+    var_dump(oci_error($c));
+    echo "2nd call\n";
+    var_dump(oci_error($c));
+}
+
+echo "\nTest 2 - Parse\n";
+
+$s = @oci_parse($c, "select ' from dual");
+if (!$s) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+echo "\nTest 3 - Execute\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error($s));
+}
+
+echo "\nTest 4 - Execute - consecutive oci_error calls of different kinds\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    echo "2nd call\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 5 - Execute - after oci_rollback\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $r = oci_rollback($c);
+    echo "Rollback status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after oci_rollback\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 6 - Execute - after successful 2nd query with new handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s2 = oci_parse($c, 'select 1 from dual');
+    $r = oci_execute($s2, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s), oci_error($s2));
+}
+
+
+echo "\nTest 7 - Execute - after successful 2nd query with same handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s = oci_parse($c, 'select 1 from dual');
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+
+echo "\nTest 8 - Execute - after unsuccessful 2nd query with new handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s2 = oci_parse($c, 'select reallynothere from dual');
+    $r = oci_execute($s2, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after unsuccessful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s), oci_error($s2));
+}
+
+echo "\nTest 9 - Execute - after unsuccessful 2nd query with same handle\n";
+
+$s = @oci_parse($c, 'select doesnotexist from dual');
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $s = oci_parse($c, 'select reallynothere from dual');
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after unsuccessful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+echo "\nTest 10 - Execute - after successful 2nd query with same statement\n";
+
+$s = oci_parse($c, "declare e exception; begin if :bv = 1 then raise e; end if; end;");
+$bv = 1;
+oci_bind_by_name($s, ":bv", $bv);
+$r = @oci_execute($s, OCI_DEFAULT);
+if (!$r) {
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+    $bv = 0;
+    $r = oci_execute($s, OCI_DEFAULT);
+    echo "Execute status is ";
+    if (is_null($r)) echo "null";
+    else if ($r === false) echo "false";
+    else if ($r === true) echo "true";
+    else echo $r;
+    echo "\n";
+    echo "2nd call after successful execute\n";
+    var_dump(oci_error(), oci_error($c), oci_error($s));
+}
+
+?>
+===DONE===
+<?php exit(0); ?>
+--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===


Property changes on: php/php-src/trunk/ext/oci8/tests/bug51291.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Deleted: php/php-src/trunk/ext/oci8/tests/bug6109.phpt
===================================================================
--- php/php-src/trunk/ext/oci8/tests/bug6109.phpt	2010-03-24 22:06:21 UTC (rev 296753)
+++ php/php-src/trunk/ext/oci8/tests/bug6109.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -1,46 +0,0 @@
---TEST--
-PECL Bug #6109 (Error messages not kept)
---SKIPIF--
-<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
---FILE--
-<?php
-
-require(dirname(__FILE__).'/connect.inc');
-
-// Run Test
-
-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);
-
-if ($r) {
-	echo "whoops - table does exist\n";
-} else {
-	for ($i = 0; $i < 5; $i++) {
-		$err = oci_error($s);
-		echo ($i) .' -> '.$err['message'] ."\n";
-	}
-}
-
-// Cleanup
-
-oci_close($c);
-
-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 ->
-Done

Copied: php/php-src/trunk/ext/oci8/tests/pecl_bug6109.phpt (from rev 296733, php/php-src/trunk/ext/oci8/tests/bug6109.phpt)
===================================================================
--- php/php-src/trunk/ext/oci8/tests/pecl_bug6109.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/oci8/tests/pecl_bug6109.phpt	2010-03-24 22:08:55 UTC (rev 296754)
@@ -0,0 +1,40 @@
+--TEST--
+PECL Bug #6109 (Error messages not kept)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+// Run Test
+
+echo "Test 1\n";
+
+$s = oci_parse($c, 'delete from table_does_not_exist');
+$r = @oci_execute($s);
+
+if ($r) {
+	echo "whoops - table does exist\n";
+} else {
+	for ($i = 0; $i < 5; $i++) {
+		$err = oci_error($s);
+		echo ($i) .' -> '.$err['message'] ."\n";
+	}
+}
+
+// Cleanup
+
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+0 -> ORA-00942: %s
+1 -> ORA-00942: %s
+2 -> ORA-00942: %s
+3 -> ORA-00942: %s
+4 -> ORA-00942: %s
+Done
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to