Skip to content
ChangeLog 145 KiB
Newer Older
2017-10-25 Version 4.4.0 Vincent Rogier vince.rogier@ocilib.net

    * Fixes (C API)

        - Issue #112: OCI_GetString behaves badly with empty LOBs
        - Issue #104: XA connection open failed with ORA-12154
            * Fixed broken support for XA connections
            * Added 2 new error codes related to XA connections management (OCI_ERR_XA_ENV_FROM_STRING, OCI_ERR_XA_CONN_FROM_STRING)
        - Issue #101: Wrong OCI_STRING_FORMAT_TIMESTAMP constant
         - Fix for Oracle bug #9838993 workaround
            * Version 4.2.1 introduced support for an experimental workaround for Oracle bug 9838993 (memory leak when using unicode and re-preparing/executing same statement multiple times)
            * This support was not anlways working as column names where sometimes not null terminated
            
    * Enhancements (C API)
              
        - OCI_Object: Supporting now non final object types
            * if an OCI_Object instance real type is a sub type of its column object type, OCILIB is dynamically retrieving its real and right type instead of processing it as its base type
            * Added missing synchronized access when iterating the list of existing OCI_TypeInfo in OCI_TypeInfoGet()
        - Allocation Binding mode updates
            * Added BindGetAllocationMode()
            * updated OCI_GetBindAllocation() and OCI_SetBindAllocation() documentation to properly specify their usage
        - Extended 12cR2 support:
            * Increased identifier size to 128
            * Added OCI_ColumnGetCollationID
            * Added more Oracle Session Mode               
        - Refactored OCI_List implementation (Internal change
            * No more access to OCI_List fields from other compilation units (encapsulation purposes)
            * Refactored OCI_List implementation
        
 2017-06-07 Version 4.3.3 Vincent Rogier vince.rogier@ocilib.net

    * Fixes (C API)

        - Issue #81: Fixed OCI_GetInt() on string columns 
            * Wrong implicit string to integer conversion (returning 0 whatever string value) occurred under following conditions: 
                - Column is string based
                - Oracle client < 12gR1
                - Using OCI_GetInt() or OCI_GetUnsignedInt()
        - Issue #86: Fixed wrong error information when statement execution failed involving 64bit integer binds
            * It occurred under following conditions:     
                - Binding 64bit integer host variables with OCI_BDM_OUT flag set (default if OCI_BindSetDirection() has not been called)
                - Statement execution failed on the server for any reasons (server side error, constraint violation, ..) 
            * Real server side error information was not reported by OCI_GetLastError() or error callback
            * Instead an error "OCI-22060: argument [2] is an invalid or uninitialized number" was reported
        - Issue #88: Fixed OCI_GetString() on BLOB columns with blob size > 1024 bytes
            * Filling the resulting string with BLOB data led to a buffer overflow 
        - Issue #89: Fixed Segfault occurring in OCI_Execute()
            * The issue was a wrong offset computation when trying to update user strings after execution.
            * It occurred under following conditions:     
                - OCI_CHARSET_WIDE (Unicode) ocilib build 
                - Unix/Linux (wchar_t implemented as 32bit integers)
                - Binding host string variable with OCI_BDM_OUT flag set (default if OCI_BindSetDirection() has not been called)
           
    * Fixes (C++ API)
 
        - Issue #63: (Re)Added cstddef header in ocilib_core.hpp as on some platforms/compiler versions, it was reported as needed (including <iterator> was not enough)

    * Enhancements (C API)

        - Issue #84: Add support for numeric type in OCI_ColumnGetSubType() with limitations as real numeric type cannot really be identified
        
2017-02-08 Version 4.3.2 Vincent Rogier vince.rogier@ocilib.net

    * Fixes (C API)
    
        - Issue #69: Fixed OCI_StatementGetConnection() that was returning erroneous values (regression introduced in v4.3.0)
        - Issue #70: Fixed Subscriptions issues when OCILIB charset is OCI_CHARSET_WIDE (Unicode builds)
		    * Bug with table names, objects names and rowids reported from CDN event callbacks:
				- Up to Oracle 10g, theses strings were reported as ANSI strings instead of UTF16 strings, thus OCILIB was doing a translation to UTF16 before calling user callbacks
				- From Oracle 11g, this Oracle bug seems fixed while OCILIB is still trying to perform translation fron ANSI to UTF16
				- Thus, now OCILIB, in Unicode builds, is performing the translation to UTF16 only if reported strings seems to be ANSI
			* Bug with Oracle call OCISubscriptonUnRegister()
				- OCI_SubscriptionUnregister() encounters an error ora-24015 when calling OCISubscriptonUnRegister() in Unicode build but not in ANSI builds 
				- Error ORA-24915 is now discarded if returned from OCISubscriptonUnRegister() in OCI_SubscriptionUnregister()
		- Issue #71: Fixed regresson introduced in v4.3.0 about binding big_uint variables (only unsigned 64bit integers)
			* Pre and post statement execution methods were only handling big_int and not big_uint host variables
			* Root cause was a wrong numeric sub type check (using == instead of operator &) as subtypes are handled using flags not unitary values
		- Issue #72: Fixed OCI_LobErase() return value that was wrong since v4.3.0 (1 on success and 0 on failure) instead of the number of elements erased from the LOB
		- Issue #75: Fixed OCI_ElemIsNull() that was marking the call as failed is the value was not NULL (regression introduced in v4.3.0)
		- Issue #78: Fixed usage of OCI_SetBindAllocation() when switching bind allocation mode that may result in memory leaks
        - Issue #79: Fixed issues in implicit conversion in OCI_GetString()
			* Updated outdated OCI_GetString() documentation
			* Reduce temporary buffer size in  OCI_GetString() conversions
			* Fixed implicit conversions in OCI_GetString() for LONG, BLOB

	* Changes and Enhancements
	
        - Issue #73: Activate support for N' substitution (nchar replacement in SQL statement strings) when source code is unicode (Only for Oracle Client >= 10gR2)
	    - Issue #74: Added support for OCI_Number in format calls	   
			* Added token '%n' for parsing OCI_Number in OCI_xxxFmt() calls
			* Added OCI_ARG_NUMBER for fetching OCI_Number in OCI_Immediate() and OCI_ImmediateFmt() calls
		- Issue #79: Added support for OCI_Statement (cursors) in OCI_GetString()
			
	* Miscellaneous
	
        - Removed outdated unmaintained Visual Studio 2005, 2008 an 2010 projects for building OCILIB DLLs and C/C++ tests apps
		- Keeping visual Studio 2013 projects
        - Added Visual Studio 2015 projects
		- Prebuilt Windows OCILIB dlls are now compiled using Visual Studio 2015
		
2017-01-25 Version 4.3.1 Vincent Rogier vince.rogier@ocilib.net

    * Fixes (C API) 
    
        - Issue #60: Fixed bug introduced in v4.3.0 related to binding arrays of big ints
        - Issue #64: Fixed structure size computation for Object members that are Objects
        - Issue #65: Fixed Binding null/non initialized OCI_Number
            * Even if OCI_BindSetNullAtPos() was called, attempting to bind a non initialized or null OCI_Number led to statement execution failure
        - Issue #68: Fixed OCI_Excecute() behavior with PL/SQL "select into" and no data found
            * When executing a PL/SQL block with inner PL/SQL code like "select into :<bind_variable> from table" that does fetch anything, Oracle call OCIStmtExecute() returns OCI_NO_DATA, which is handled by OCILIB as an failure
            * Now OCI_Excecute() considers OCI_NO_DATA as success
            * Updated OCI_GetAffectedRows() documentation for determining if inner PL/SQL "select into" was successful
            
    * Fixes (C++ API) 

        - Issue #63: Added cstddef header in ocilib_core.hpp as on some platorms/compiler versions, it was reported as needed
        - Issue #67: Fixed memory leak when using Number objects
            * Removed attempt to use move semantics 
            * It is currently causing memory leaks  and does not bring that much as C API handles are already handled using smart pointers

    * Changes:
        - Request #66: Increased value of OCI_BIND_MAX
            * Increased value of OCI_BIND_MAX from 1024 to 65535
            * Now Internal Arrays of OCI_Bind can grow and are reallocated by blocks of 128 binds

2016-11-09 Version 4.3.0 Vincent Rogier vince.rogier@ocilib.net

    * New Features: 
    
         - Added NUMBER SQL type native wrapping 
         
            * Optional type as NUMBER type can still be fetched/binded using regular C native numeric types
            * New OCI_Number type can be used when precision matters or for dealing with special values such as positive and negative infinity
            * C API : 
                - Added OCI_NUM_NUMBER numeric type
                - Added OCI_Number type
                - Added OCI_NumberCreate()
                - Added OCI_NumberFree()
                - Added OCI_NumberArrayCreate()
                - Added OCI_NumberArrayFree()
                - Added OCI_NumberAssign()
                - Added OCI_NumberGetContent()
                - Added OCI_NumberSetContent()
                - Added OCI_NumberSetValue()
                - Added OCI_NumberGetValue()
                - Added OCI_NumberAdd()
                - Added OCI_NumberSub()
                - Added OCI_NumberMultiply()
                - Added OCI_NumberDivide()
                - Added OCI_NumberCompare()
                - Added OCI_GetNumber()
                - Added OCI_GetNumber2()
                - Added OCI_BindNumber()
                - Added OCI_BindArrayOfNumbers()
                - Added OCI_RegisterNumber()
                - Added OCI_NumberFromText()
                - Added OCI_NumberToText()
                - Added OCI_ElemGetNumber()
                - Added OCI_ElemSetNumber()
                - Added OCI_ObjectGetNumber()
                - Added OCI_ObjectSetNumber()
                
            * C++ API: 
                - Added ocilib::Number type encapsulating the C API OCI_Number type
                - This new type comes with all possible operator overloads for better usability
 
    * Fixes:

        - OCI_ObjectGetString(): Fixed usage of internal temporary buffers
        - OCI_FileRead(): Return value was not the correct one
        - OCI_PoolGetConnection() : was returning NULL connections for session pool using external credentials
        - OCI_StringGetFromType() : Fixed segfault when converting CLOBs (with length > to 512) to UTF8 strings in OCI_GetString() if an UTF8 charset is used
        - Fix indicators usage for collections : OCI_IsNull() always returned FALSE even if fetched collection was NULL
        - Fix compilation under C compilers not supporting C99 feature allowing declaring variables anywhere in blocks
        
    * Miscellaneous:
    
        - C API: Major internal code re-factoring
        
            * Code factorization
            * Replaced verbose macros with more compact ones
            * Code base reduced by few thousands lines of code
            * Fixed some error handling logic
            
        - C API: 
        
            * Added OCI_GetDataSize() and OCI_GetDataSize2()
        
        - C++ API: 

            * Rewrote iterators for ocilib::Collection<> 
                - Collection Iterators are now random iterators allowing Collections being used with STL algorithms such as std::sort()
                - Added Collection const_iterators
            * Addressed various code analysis hints
            * Added C++ compiler capabilities detection (C+11)

        - Updated samples in folder /demo

            * Added required DDL and DML for all samples
            * Updated some samples
Loading
Loading full blame...