- 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