2020-07-16 Version 4.7.0 Vincent Rogier vince.rogier@ocilib.net * 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