ID:               40313
 Updated by:       [EMAIL PROTECTED]
 Reported By:      christopher dot jones at oracle dot com
-Status:           Assigned
+Status:           Suspended
 Bug Type:         OCI8 related
 Operating System: n/a
 PHP Version:      5.2.1RC4
 Assigned To:      tony2001
 New Comment:

I think the current behavior is correct and I personally do not see any
reasons to change it at the moment.


Previous Comments:
------------------------------------------------------------------------

[2007-02-02 02:29:03] christopher dot jones at oracle dot com

Description:
------------
The session management differs in some cases when there is an
uncommited transaction.

Run the test case with and without the parse/execute lines commented. 
When the lines are commented out an explicit oci_close() or the end of
f1() causes the connection to be closed.  With the lines active the
sessions remain open and the transactions are not rolled back.

A third error case is if the sample script is changed to use
oci_new_connect(). Confusingly the explict close has no effect but the
end-of-scope will rollback and close the connection.

This may be a in implementation quirk of reference counting but it is a
user level bug.  Oci_close() should always close when
oci8.oci_old_close_semantics has its default value.  The cleanup at
end-of-scope should be consistent regardless of the user transaction
state.

Reproduce code:
---------------
<?php

// Create this table first: create table cj1 (a number);


$v = ini_get('oci8.old_oci_close_semantics');
echo "oci8.old_oci_close_semantics is $v\n";

ociinternaldebug(1);

echo "Test 1\n";

$c1 = oci_new_connect("hr", "hr", "localhost/XE");

echo "Do statement\n";
$s1 = oci_parse($c1, "insert into cj1 values(1)");
var_dump(oci_execute($s1, OCI_DEFAULT));

echo "Before close: transaction should rollback and connection should
be closed\n";

ocilogoff($c1);

echo "After close\n";

echo "Test 2\n";

function f1()
{
    echo "In f1()\n";
    $c2 = oci_new_connect("hr", "hr", "localhost/XE");

    if (!$c2) {
        $m = ocierror();
        echo $m['message'];
        exit;
    }
    else {
        echo "Connection succeeded\n";
    }

    echo "Do statement\n";
    $s2 = oci_parse($c2, "insert into cj1 values(1)"); 
    var_dump(oci_execute($s2, OCI_DEFAULT));

    echo "Before end of scope\n";
}

f1();
echo "after f1() call - end of scope\n";

echo "End of script\n";

?>




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=40313&edit=1

Reply via email to