2014-12-10 Version 4.0.0 Vincent Rogier vince.rogier@ocilib.net * Introducing new C++ API - Full C API ported to C++ - Implemented as a small set of header files, no library compilation needed - Based on C++ and STL paradigms (Strong typing, templates, containers, RAII, exception handling, operators, stack objects) - Based on design patterns (RAII, delegation, reference counting, smart pointers, proxies, singleton) - No user dynamic object allocation required - The only dependences are : STL and OCILIB C API * Extended C API - Removed support for OCI_CHARSET_MIXED - This charset mode was introduced in early versions of OCILIB in order to support Unicode Data binding and fetching for Oracle8i that does not support full Unicode - It introduced high complexity in OCILIB code and had been source a bugs - This releases removes its support and now, OCILIB charset handling is much simplier - Thus OCILIB still support : - All Oracle versions : OCI_CHARSET_ANSI => ANSI/UTF8 strings (char* ) - Oracle 9i and above : OCI_CHARSET_WIDE => UTF16/UTF32 strings (wchar_t *) - Added Support for some Oracle 12cR1 new features: - Added support for "PL/SQL Implicit Results" - No API changes, internal code updates - Added demo file - Added Support for "Identity columns" : - Added OCI_ColumnGetPropertyFlags() - Collections: - Added OCI_CollDeleteElem() - Added OCI_CollGetCount() - Added OCI_IterGetCurrent() - Fixed OCI_IterGetPrev() and OCI_IterGetNext() : Last error flag for OCI_GetLastError() was wrongly set if it returned FALSE - Fixed OCI_ElemGetRaw() : possible segfault could happen - Fixed OCI_ElemSetNull() : it was not setting correctly the element indicator for collections of objects - Renamed some methods: - OCI_CollGetAt() to OCI_CollGetElem() - OCI_CollGetAt2() to OCI_CollGetElem2() - OCI_CollSetAt() to OCI_CollSetElem(). - Note that older method names are still supported using #define for backward compatibility reasons - Connection/Session Pools: - Fixed OCI_PoolGetConnection() that could return NULL connection handles (particularly when program is using OCI_PoolGetOpenedCount()) - Removed connection pooling emulation for Oracle 8i - Refactored Oracle pooling implementation (code is now simpler and much more robust) - Unicode builds: - Fixed LONG data type fetching when using Unicode builds on Unix/Linux platforms. Returned strings could have extraneous trailing characters - Fixed Buffer overwrite in OCI_LobRead2() in Unicode builds - Strings conversions: - Added OCI_ObjectToText() - Added OCI_CollToText() - Extended OCI_GetString() : supports now all types - Extended OCI_ObjectGetString() : supports now all types - Miscellaneous additions: - Added OCI_IsRebindingAllowed() - Added OCI_TypeInfoGetConnection() - Added OCI_SubscriptionGetConnection() - Added OCI_BindSetNotNullAtPos() - Added OCI_BindSetNotNull() - Added OCI_GetBindIndex() - Added OCI_ObjectGetRawSize() - Added OCI_ElemGetRawSize() - Added OCI_LobGetConnection() - Added OCI_FileGetConnection() - Added compile time (OCI_IMPORT_LINKAGE) and runtime (OCI_IMPORT_RUNTIME) detection of OCI shared library version for Oracle 12cR1 - Added new error code OCI_ERR_ITEM_NOT_FOUND - Added VS 2013 solutions - Important code refactoring - Miscellaneous fixes: - Fixed OCI_ObjectGetObject() that could cause segfault when an object had 2 members of object type on a row - Fixed OCI_IntervalAdd() and OCI_IntervalSubstract() that were not performing OCI calls due to wrong return code initialization - Fixed NULL lob handle input checking in OCI_LobWrite() and OCI_LobWrite2() - Fixed OCI_PoolGetConnection() prototype : added const qualifier on tag argument - Fixed memory usage of internal arrays (for numeric, text and raw types) when using OCI_BAM_INTERNAL bind allocation mode. Memory was not freed when the statement was freed but only at OCI_Cleanup() time. - Fixed segfault in OCI_HashCreate() if internal memory allocation failed - SQL warnings occurring in OCI_ExecuteXXX() calls were not propagated correctly to the global error handler and couldn't be retrieved with OCI_GetLastError() in OCI_ENV_CONTEXT mode - Fixed runtime (OCI_IMPORT_RUNTIME) detection of OCI shared library version for Oracle 11gR2 that was reported as OCI 11gR1 - Fixed segfault if a statement was executing more than once SQL statement with a "returning clause" (since statement cache support). It was due to an nice bug in the OCI client ! - Fixed OCI_BindSetNull() : if called prior executing an insert statement that had OCI_Object handles binded to it, objects content were inserted in the DB instead of NUL - Fixed OCI_TimestampGetTimeZoneOffset() : returned offsets may have unattended values if negative - Fixed OCI_TypeInfoGet() that was failing if : - object had been created with case sensitivity (e.g. using quotes) - object were related to the PUBLIC role