Vincent
]]>- OCI_Cleanup() now returns FALSE if OCI_Initialize() has not been called
- OCI_GetSQLVerb() handles some new verbs added with Oracle 21c
- OCI_Execute() and related methods return now FALSE and report an OCI_Error for PL/SQL statements raising PL/SQL no_data_found exceptions
* This revert behavior introduced in v4.3.1 for addressing issue #68
* Motivation is to re-align on SQL*Plus behavior
- OCI_GetOCIRuntimeVersion() and OCI_GetOCICompileVersion() returned integer values on 6 digits instead of 4 digits
* Handles now minor version using 2 digits (e.g. Oracle OCI version 19.16.0)
* Use macros OCI_VER_MAJ, OCI_VER_MIN, OCI_VER_REV and OCI_VER_MAKE to do computations on versions
- Very old Oracle OCI 8.0.x is now supported
- Up to now, OCILIB supported all Oracle versions from 8.1
- Oracle 8.0 is now also supported for very old legacy systems (as Oracle 8.0 was released in mid 90's)
- As OCI multi-threaded APIs were only available from 8.1, passing OCI_ENV_THREADED to OCI_Initialize() with Oracle 8.0 will generate an error:
- OCILIB Error code : OCI_ERR_NOT_AVAILABLE
- OCILIB Error message : "Feature not available (Oracle 8.1 multihreading support)"
- Issue 297: Library compilation fails with MSVC 2022 version 17.2 (error C2220)
- Issue 298: OCI_DirPathLoad() can never returns in case of internal load errors (infinite loop)
- Issue 308: OCI_Execute() raises error OCI-22060 when binding host big_int variables with OCI_BDM_OUT in case the SQL or PL/SQL engine sets a NULL value
- Issue 309: OCI_Execute() does not raise exceptions when executing PL/SQL statement raising no data was found PL/SQL exception
- Issue 313: OCI_GetString() returns NULL for CLOB columns is the CLOB row value was filled with empty_clob()
- Issue 314: OCI_BindSetCharsetForm() is not accessible since v4.7.0
- ISsue 316: OCI_DequeueGet() returns messages with OCI_Object payloads that can have NULL properties while being NOT NULL when queued
- ISsue 317: OCI_SubscriptionRegister() generates a segfault on failure
- Issue 299: Performance issues with C++ API in multi-threaded environments
- Issue 306: Compile error under GCC when accessing an ocilib::Collection item
- Updated compilers for MS Windows prebuilt binaries to VS2022 17.4.4
- Internal code changes / refactoring
- Some documentation updates
- Added more tests in tests suite
- Fixed ocilib C demo makefile : compilation could failed on some Linux environments
Vincent
]]> - Issue 291: OCI_DirPathGetErrorRow() always return 0 since v4.7.0
- Issue 284: OCI_MsgGetID() returns a NULL ID after being queued with OCI_DequeuePut()
- Issue 288: OCI_GetString returns null on implicit conversion of a RAW value when it's longer than 64 bytes
- Issue 283: OCI_DequeueGet() returns null pointer when message has empty payload
- Issue 282: PL/SQL Server output wrong internal buffer size on some oracle versions
- Issue 281: ORA-00931 in OCI_TypeInfoGet() when using SYS.RAW type
- Issue 272: AddressSanitizer reports mismatched new[] vs delete
- Issue 278: ocilib::Object causes Segmentation fault
-Updated compilers for MS Windows prebuilt binaries
* VS2022 17.0.1 for 32/64 bit DLLs
* VC runtime (statically linked) updated from vc142 to vc143
Vincent
]]> - Issue 251: OCI_ErrorGetMessage() returns invalid messages when OCILIB is build with OCI_CHARSET_WIDE on linux/unix platforms
- Issue 252: Incorrect OCILIB client driver layer namein V$SESSION_CONNECT_INFO and GV$SESSION_CONNECT_INFO when OCILIB is build with OCI_CHARSET_WIDE on linux/unix platforms
- Issue 253: Error occured at OcilibLobFree: ORA-01403: no data found
- Issue 258: OCI_SubscriptionRegister() returns always NULL since v4.7.0
- Issue 264: Fetched UROWIDs (IOT Table ROWIDs) values are truncated
- Issue 268: OCI_DirPathSetColumn() forwards parameter 'maxsize' as unsigned short to Oracle client leading to data truncation
### Fixes (C++ API)
- Issue 250: Exception handling when using OCI_CHARSET_WIDE
- Issue 262: Using correct delete[] in ManagedBuffer destructor
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.9.0 for 32/64 bit DLLs
* VC runtime (statically linked) updated from vc141_xp to vc142
* Note: Windows XP is not supported anymore due to the runtime update
- Reduced some ocilib structures size by removing some paddings (especially in 64bits)
- Added a makefile to build the C++ demo (Makefile_demo_cpp) that is also now installed with the C demo Makefile
- OCILIB Test suite is now ported to Linux/Unix platforms
* Test suite is now provided in ocilib-x.y.z-gnu.tar.gz distribution archives and installed by 'make install' among documentation and demo (typically in /usr/local/share/doc/ocilib/tests)
* To build the test suite:
- Modify the db credentials in ocilib_tests.h
- Use Makefile_tests (it depends on google test that must be installed prior building the test suite)
Vincent
]]> - OCILIB internal and public symbols management
* For static library:
- All private symbols that can have local scope are now declared static
- All private non static symbols are now prefixed with "Ocilib" to avoid collisions
* For shared library:
- No change for Windows platform as __declspec(dllimport) and __declspec(dllexport) were already handled
- When using GNUC compatible compiler:
- all public symbols are now declared with __attribute__ ((visibility ("default")))
- all private symbols are now delcared with __attribute__ ((visibility ("hidden")))
- Configure script will automatically add the compiler flag "-fvisibility=hidden"
- OCILIB compiles now without any warnings when using GNUC with flags -Wall -Wextra -pedantic
- Issue 242: Fixed strings.h conflict with recent GCC versions
- Issue 243 : Fixed compiling ocilib directly from repository on non Windows systems (while using distribution archive was OK)
- Issue 245 : Fixed ocilib shared library symbols visibility (Linux/Unix)
- Removed useless old macros for mapping lib C string function to ansi or wide char versions (ostrXXX)
- Removed symbols ocisprintf(), ocistrdup(), ocistrcasecmp(), ociwcsdup(), ociwcscasecmp() from OCILIB shared library
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.7.6 for 32/64 bit DLLs <br/>
Vincent
]]> - Library internal design changes (preparing v5.0.0)
* OCILIB code base has been layered in 2 distinct API layers:
- Internal API that has now its own separate design
- v4.7.0 internal API, while matching the public one in this version, has most of its methods renamed
- It will evolve differently, preparing new public APIs for future versions
- Public APIs exposing features to clients
- v4.7.0 is exposing the same public API as previous versions
- v5.0.0 will expose a different API
- Both will use same internal API
- Contextual error management enhancements
- As internal APIs cannot be called from outside the library, last error management has been simplified and improved
- Enhancements on internal methods implementation:
- Since v3.0.0 (back in 2008), OCILIB methods implementations are standardized to follow the same single exit point pattern
- Standardized entry point checks and exit points are based on extentive macros usage
- But the control flow was handled by a status variable leading to continuous and nested checks
- With 4.7.0, no more "if (STATUS) {...}" in the code.
- Instead, in case of errors, code directly jumps to exit points that can have cleanup code sections.
- See it as try {...} finally{...}
- Thus, code is now very sequential, much easier to read, with no nested error management/branching.
- Public headers reorganization:
* Broke up ocilib.h content into multiple headers located in /include/ocilibc/
* Broke up C++ headers content into multiple headers located in /include/ocilibcpp/
- Enhanced Error handing:
* Updated OCI_Cleanup(): if there are any unfreed allocated bytes by the library itself (e.g. OCILIB user objects not freed)
- it raises an error of type OCI_ERR_UNFREED_BYTES (with the amount of bytes in the error message)
- it completes cleanup and returns FALSE
* Added method OCI_ErrorGetLocation() to return the method name where the exception occured
* Updated method OCI_ErrorGetString() to return a string using the following format "Error occured at {Location}: {Description}"
- Issue 239: Fetching nclobs as strings return value in hexa format truncated values when nsl_lang is UTF8
- Issue 238: Fetching clobs as strings return truncated values when nsl_lang is UTF8
- Issue 236: Memory issue with OCI_BAM_INTERNAL and OCI_CDT_NUMERIC
- Fixed OCI_EnqueuePut() and OCI_DequeueGet() in OCI_CHARSET_WIDE charset mode (added a workaround for a known oracle client UTF16 bug)
- Fixed a minor memory leak when using implicit resultsets
- Issue 230: Memory leaks while rebinding vectors
- Extended C API Test suite that has now a much wider coverage
Vincent
]]>- Issue #222: Allow OCI_SESSION_SYSDBA for session pools
- Issue #225: Fixed some PL/SQL tables binding issues when statement is an anonymous PL/SQL block
- Issue #226: When NOT using OCI_ENV_CONTEXT environment flag, OCI_CollToText() and OCI_ObjectToText() failed if previous OCILIB call failed
- Issue #227: Enhanced performance when fetching Clobs as strings (for Oracle 11g and above)
- Some performance improvements when converting Objects and Collections to strings
- Some performance improvements when calling OCI_GetString() on non strings columns
- Minor changes in code for addressing some code analysis hints (clang, resharper)
- Enhanced Number class in C++ API:
* Restrict arithmetic operations on supported types only
* Arithmetic operations are also now supported between Number objects
- Minor changes in code for addressing code analysis hints (clang, resharper)
- Updated C++ demo application
- Updated documentation
- Updated all files Copyright to current year (2020)
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.5.3 for 32/64 bit DLLs
* Still targeting vc141_xp toolset for backward compatibility <br/>
Vincent
]]> - Issue #207: Updated Oracle command codes that were not accurate
- Issue #213: Updated some version checks that were testing only for server version instead of testing both client and server versions
- Issue #216: Re-calling OCI_BindArraySetSize() with a smaller value than previous assignment led to segfaults when statement has non scalar type binds
- Issue #220: Implicit conversion Clob issue in OCI_GetString() when using UTF8 encoding
- Issue #212: Added possible error codes for OCI_Initialize() in the documentation
- Issue #215: Added a workaround to correctly retrieve environment variables set at runtime using SetEnvironmentVariable() on Windows
Vincent
]]> - Fixed compile and run time Oracle version detection when Oracle version is >= 18.1
- Fixed OCI_SetTimeout() that was setting all timeouts with input value
- Fixed OCI_GetTimeout() that was returning OCI_NTO_CALL or OCI_NTO_RECEIVE value whatever requested timeout
- Added macro OCI_VER_MAKE to make an ocilib compliant oracle version from major, minor and revision versions (e.g. OCI_VER_MAKE(18,3,0) equals OCI_18_3)
- Updated Oracle versions constants
- Issue #197: Using C++ interface in multiple DLLs
Vincent
]]> - Issue #188: Compile error with Oracle client 12.1 and option OCI_IMPORT_LINKAGE
- Issue #196: Warning 4996
- Issue #198: Compile Error with Oracle Client 12.2 and option OCI_ATTR_CALL_TIMEOUT
- Issue #199: Compile warnings on Oracle Client 12.2
- Issue #182: Cannot bind a std::vector as a PL/SQL Table (v4.6.0 fixed the issue only for 1st element of the vector)
- Issue #189: In/out binded vector<ostring> not updated after statement execution
- Issue #191: Reassigning SAME C handle to C++ a object leads to loose the content of the C handle
- Issue #192: Vectors of non scalar types binded as pure OUT binds are not updated after execution if vector element do not have their value set
- Issue #200: Compiler warning 4018 with 4.6.0
- Updated compilers for MS Windows prebuilt binaries
* VS2017 15.9.7 for 32/64 bit DLLs
- Prebuilt static libraries built with TDM-GCC (Code::Blocks projects) are not shipped anymore
* Recent TDM- GCC versions produces executables that links statically against winpthreads
* This implies requirements and restrictions that motivated to remove prebuilt libs from ocilib releases
* Users can compile them using the provided Code::Blocks project
Vincent
]]>