Releases: vrogier/ocilib
Releases · vrogier/ocilib
v4.7.6
v4.7.5
Changes (C API)
- 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)"
Fixes (C API)
- 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
Fixes (C++ API)
- Issue 299: Performance issues with C++ API in multi-threaded environments
- Issue 306: Compile error under GCC when accessing an ocilib::Collection item
Miscellaneous
- 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
v4.7.4
Fixes (C API)
- 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
Fixes (C++ API)
- Issue 272: AddressSanitizer reports mismatched new[] vs delete
- Issue 278: ocilib::Object causes Segmentation fault
Miscellaneous
-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
v4.7.3
Fixes (C API)
- 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
Miscellaneous
- 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)
v4.7.2
Fixes (C API)
- Issue 247: When using a OCI_Timestamp object created with OCI_TIMESTAMP_TZ flags, some OCILIB timestamps methods might raise an OCI_ERR_NULL_POINTER error
- Issue 248: For Oracle client version < 11g, version 4.7.0 broke the ability to fetch data from resultset containing specific datatypes
- Fixed some Coverity code analysis findings (hypothetical issues never encountered)
Miscellaneous
- Updated C API test suite
* Re-Ran successfully test suite with OCILIB compiled in 8i, 9i, 10g, 11g, 12c, 18c modes (ANSI and Unicode)
Note: PDBs are now included with ocilib-x.y.y-windows.zip distribution archives
v4.7.1
This release contains no code changes.
It enhances library symbol visibility with GCC and compilation issues with recent GCC versions
Enhancements (C API)
- 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
Fixes (C API)
- 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)
Changes (C API)
- 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
Miscellaneous
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.7.6 for 32/64 bit DLLs
v4.7.0
Enhancements (C API)
- 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}"
Fixes (C API)
- 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
Fixes (C++ API)
- Issue 230: Memory leaks while rebinding vectors
Miscellaneous
- Extended C API Test suite that has now a much wider coverage
v4.6.4
Fixes (C API)
- 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)
Miscellaneous (C API)
- 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)
Miscellaneous (C++ API)
- 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
Miscellaneous
- 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
v4.6.3
Fixes (C API)
- 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
Miscellaneous (C API)
- 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
v4.6.2
Fixes (C API)
- 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
Fixes (C++ API)
- Issue #197: Using C++ interface in multiple DLLs