- Do scope-end release for oci_pconnect (oci8.old_oci_close_semantics=1 gives old behavior)
- Fix session reuse with 10.2 client libs
- Fix the Ping macro version check for 10.2
- Add type check associated with zend_list_find
- Code connection re-organized for reuse
- Format comments
- WS changes
- Prepare for new PECL release
Tests:
- Add new tests
- Rationalize password tests
- Revert use of __DIR__ so tests will work with PHP 5.2
- Update some skipifs to make tests more portable
This updated fixes (this list is not complete):
-------------------
#33915 - crash in _oci_close_session
#26393 - Segfault during request shutdown in _oci_close_session() (oci8.c:2443)
#32741 - hang on ociexecute() with collections (only with 10g, works with 9i)
#32325 - can't retrieve collection using OCI8
#33583 - Apache1.3.33 Segmentation fault with php5 & OCI_New_Collection
#32361 - connection oci_connect stay persist after process the php
#29013 - multiple logins cause handles become invalid
#28944 - OCITypeByName: OCI-21522 with two connections
Fixed by connection handling rewrite.
#32140 - NVARCHAR columns are truncated
#31042 - oci_fetch_* sets field value to false
#27156 - OCIFetchInto returns false as column value when column contains >1 umlaut
Fixed by multiplying buffer size by 3.
#33866 - OCIlogon do not returns conn resource for account with expired paswd
#33365 - logon fails when password expires
Fixed by adding new oci_password_change() call syntax.
#33159 - DB-connect via webserver fails after DB-restart ORA-24327
#30808 - oci8 cannot connect after restarting DB
#30127 - lost oracle connection. need restart apache.
#29902 - oci8 doesn't disconnect sessions, overloads oracle server
#29779 - (the same issue with the Oracle server going offline)
#26829 - Killed Oracle Sessions openned with OCIPLogon()
Fixed by adding oci8.ping_interval option.
#32988ext/oci8: OCI doesn't support DB external authentication
Fixed by adding support of external credentials (turned off by default).
Added new INI options:
----------------------
oci8.ping_interval
oci8.max_persistent
oci8.persistent_timeout
oci8.privileged_connect
oci8.statement_cache_size
oci8.default_prefetch
oci8.old_oci_close_semantics
See the updated docs for the detailed descriptions.
Major changes:
--------------
- connection handling algorithm rewritten. That should add stability and fix all non-reproducible crashes etc;
- extension refactored and divided into several files to improve readability and to make it easier to maintain;
- added support of statement caching;
- added support of privileged connections using external credentials;
- added new INI options to manage persistent connections;
- fixed oci_close() to close connections correctly.
@- added ZTS connection pooling support to the oci extension
@ connections will now be pooled per process and not
@ per thread anymore. the number of persistent and active
@ connections is now also shown in the phpinfo() output (harald)
ocitelllob(); [ OCI_Lob->tell(); ] - ftell(); analogue for Lobs
ociwritelob(); [ OCI_Lob->write(); ] - fwrite(); analogue for Lobs
ocitruncatelob(); [ OCI_Lob->truncate(); ] - ftruncate(); analogue for Lobs
ocieraselob(); [ OCI_Lob->erase(); ] - erases specified part of a Lob (for BLOBs it means zero-filling, for CLOBs - space-filling)
ociflushlob(); [ OCI_Lob->flush(); ] - flushes Lob buffer (if buffering was enabled before)
ocisetbufferinglob(); [ OCI_Lob->setBuffering(); ] - turns on/off buffering for the current Lob
ocigetbufferinglob(); [ OCI_Lob->getBuffering(); ] - gets buffering' current state
ocirewindlob(); [ OCI_Lob->rewind(); ] - rewind(); analogue for Lobs
ocireadlob(); [ OCI_Lob->read(); ] - fread(); analogue for Lobs
ocieoflob(); [ OCI_Lob->eof(); ] - feof(); analogue for Lobs
ociseeklob(); [ OCI_Lob->seek(); ] - fseek(); analogue for Lobs
ocilobgetlength(); [ OCI_Lob->getLength(); ] - filesize(); analogue for Lobs
ociappendlob(); - appends data from a Lob to another Lob
ocicopylob(); - copies data from a Lob to another Lob
ociisequallob(); - compares 2 Lobs and checks if they are equal
TODO cleanup
and other minor fixes
OCILogon now has a forth optional parameter, which is the character set requested by the string (i.e. we8iso8859p1). when left blank, NLS_LANG or default is used.
config.m4 was changed to identify Oracle 9+ which is needed for this feature. all other oracle versions (lesser) fall back to the old behaviour.
- only invalidate the define list after all rows from a REFCORSOR are read,
"normal" corsors will now remember their column defines. this means that
ocigetcolumn[name|type|..] will from now on work even after the result set
has been read.
Added a few RCS $Id$ tags.
# Note: I have avoided changing any .h files if the corresponding .c file
# had not already been changed as I am not sure if there are any legal
# issues here. So some extensions still have PHP 3 headers.
Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment"
All identifiers that begin with an underscore and either an uppercase
letter or another underscore are always reserved for any use by the
implementation.
lots of cleanup - all invisible to the user (i hope;-)
- full refcounting of connections & statements
- cleanup of the descriptor-code (descriptors are now real resources)
- we now use SQLT_CHR instead of SQLT_STR (no trailing \0) - smarter & faster
- ocifetchinto(OCI_BOTH) will use references.