Skip to content

Releases: vrogier/ocilib

v4.7.6

09 Feb 21:17
3ce8acc
Compare
Choose a tag to compare

Fixes (C API)

  • Issue 326: OCI_GetTimeout() always returns 0 since v4.7.0

Fixes (C++ API)

  • Issue 325: ocilib::Lob::GetConnection() does not compile anymore since v4.7.5

v4.7.5

06 Feb 20:10
ce6a770
Compare
Choose a tag to compare

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

30 Nov 17:43
1ef4342
Compare
Choose a tag to compare

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

09 Mar 21:16
7599544
Compare
Choose a tag to compare

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

10 Nov 14:24
Compare
Choose a tag to compare

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

28 Oct 09:01
Compare
Choose a tag to compare

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

16 Jul 08:56
46ea653
Compare
Choose a tag to compare

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

18 Apr 10:40
b9eaff0
Compare
Choose a tag to compare

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

01 Nov 12:37
Compare
Choose a tag to compare

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

25 Feb 19:53
Compare
Choose a tag to compare

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