2008-04-24 Version 2.4.0 Vincent Rogier vince.rogier@gmail.com * Extended support for handling all integers types - Added type big_int (64bits long long if supported or int if 64bits integers not available) - Added support for shorts - Added support for unsigned integers (unsigned short, unsigned int and unsigned big_int) - Automatic conversion between integer types whenever possible - Removed lobsize_t : Lob calls are using now the type big_uint * Added public interface for short type - Added OCI_BindShort() - Added OCI_BindArrayOfShorts() - Added OCI_GetShort() - Added OCI_GetShort2() - Added OCI_RegisterShort() - Added OCI_ObjectGetShort() - Added OCI_ObjectSetShort() * Added public interface for unsigned short type - Added OCI_BindUnsignedShort() - Added OCI_BindArrayOfUnsignedShorts() - Added OCI_GetUnsignedShort() - Added OCI_GetUnsignedShort2() - Added OCI_RegisterUnsignedShort() - Added OCI_ObjectGetUnsignedShort() - Added OCI_ObjectSetUnsignedShort() * Added public interface for unsigned int type - Added OCI_BindUnsignedInt() - Added OCI_BindArrayOfUnsignedInts() - Added OCI_GetUnsignedInt() - Added OCI_GetUnsignedInt2() - Added OCI_RegisterUnsignedInt() - Added OCI_ObjectGetUnsignedInt() - Added OCI_ObjectSetUnsignedInt() * Added public interface for big_int type - Added OCI_BindBigInt() - Added OCI_BindArrayOfBigInts() - Added OCI_GetBigInt() - Added OCI_GetBigInt2() - Added OCI_RegisterBigInt() - Added OCI_ObjectGetBigInt() - Added OCI_ObjectSetBigInt() * Added public interface for big_uint type (unsigned big_int) - Added OCI_BindUnsignedBigInt() - Added OCI_BindArrayOfUnsignedBigInts() - Added OCI_GetUnsignedBigInt() - Added OCI_GetUnsignedBigInt2() - Added OCI_RegisterUnsignedBigInt() - Added OCI_ObjectGetUnsignedBigInt() - Added OCI_ObjectSetUnsignedBigInt() * Extended Object type informations - Added OCI_TimestampGetType() - Added OCI_IntervalGetType() - Added constant OCI_UNKNOWN - Removed OCI_SCHEMA_UNKNOWN, OCI_CDT_UNKNOWN, OCI_HASH_UNKNOWN, OCI_ERR_UNKNOWN, OCI_CST_UNDEFINED - Use instead OCI_UNKNOWN * Added prebuilt binaries for MS Windows 64bits - Renamed package ocilib-x.y.z.win32.zip => ocilib-x.y.z.windows.zip - Renamed folder lib -> lib32 (for 32bits binaries) - Added folder lib64 (for 64 bits binaries) - DLL projects for VS2005 and 2008 are provided - DLL are compiled with C99 long long type enabled (as before, it's just a reminder) - Removed compiled demo binaries from the package to reduce archive size that was increased with 64bits binaries * Extended Error handling - Added : OCI_Initialize() with OCI runtime loading build option raises now an error if OCI shared library cannot be loaded - Added : OCI_Initialize() with OCI_CHARSET_UNICODE and Oracle client 8 raises now an error (Oracle 8i cannot handle Unicode metadata strings) - Added : OCI_xxxFmt() calls raise now an error if a format identifier is invalid - Added : OCI_Immediatexxx() calls raise now an error if the type value is not an OCI_ARG_XXX constant - Modified : Internal error functions (added OCI_ErrorGeneric()) * Modified OCI_Immediate() and OCI_ImmediateFmt() - Extended type safety (public interface modifications) : * For output placeholders, you have to pass NOW one of the OCI_ARG_xxx constant to tell OCILIB the type the placeholder pointer * Every placeholder pointer has to be preceded by the type constant * Example : OCI_Immediate(st, "select int_col, str_col from my_table", OCI_ARG_INT, &my_int, OCI_ARG_TEXT, my_text); * Output placeholders : support NOW for short, unsigned short, unsigned int, big_int, big_uint * Updated section in the documentation (page , section ) - Fixed : For OCI_ImmediateFmt(), temporary Statement object was not freed (line commented in 2.3.0 with no reasons !) - Fixed : If internal OCI_GetString() returned NULL, a segmentation fault could happen - Modified : No check was done on scalar C type placeholder pointers nullity (possible source of seg fault) - Modified : OCI_Date handling was not updated with v2.3.0 modifications - Modified : OCI_Long and OCI_Statement handling was not removed as stated in the changelog of v2.3.0 - Modified : Factorization of the 2 functions code * Modified OCI_xxxFmt() calls : - Added new identifiers : * '%u' : unsigned int * '%hi' : short * '%hu' : unsigned short * '%li' : big_int * '%lu' : big_uint * Miscellaneous changes - Added : windows platforms (WIN32/WIN64) detection - Modified : added some cast to please absolute paranoid builds - Modified : OCI_GetRaw() was not checking if parameter 'buffer' was null - Modified : rewritten implicit integers and double type conversion in OCI_Getxxx() calls - Modified : Macro used for identifying Windows platforms from WIN32 to _WINDOWS - Modified : modified some expression evaluation for explicit checks (replaced some if(var) with if(var == x)) - Modified : added some pointers reinitializations (not needed but we never known...) - Modified : OCI_ResultsetExpandStrings() is now included in builds only if OCI_CHECK_DATASTRINGS is defined - Modified : OCI_Thread and OCI_Mutex code relooking with OCI_DIRECT, OCI_CHECK_STATUS macros - Removed : implicit conversion from text to integers in OCIGetxxxIntxx() calls * Miscellaneous Fixes - Fixed : OCILIB was not compiling with MSVC6 (added macro to use _vsnprintf()/_vsnwprintf with MS compilers and vsnprintf()/vsnwprintf() for all others compilers) - Fixed : OCI_LobAppendLob() was not updating internal current offset position - Fixed : OCI_ParseSqlFmt() : OCI_interval * variable was not checked for nullity - Fixed : OCI_Initialize() with runtime loading mode : oracle 11g detection was broken (missing 'else' keyword) - Fixed : OCI_GetResultset() : selecting unsupported REF datatype was throwing 2 errors instead of one. - Fixed : OCI_GetDate() + client Oracle 11g + "Return into" clause : the OCILIB workaround for Oracle bug #3269146 was not working properly - Fixed : OCI_BindString() + client Oracle 8i + OCI_CHARSET_MIXED build : setting internally OCI_ATTR_CHARSET_FORM (since v2.0.0) caused a crash with Oracle 8.1.7.O (OCI bug ?) - Normalization of few Function Names : * OCI_CreateTransaction() -> OCI_TransactionCreate() * OCI_FreeTransaction() -> OCI_TransactionFree() * OCI_CreateHashTable() -> OCI_HashCreate() * OCI_FreeHashTable() -> OCI_HashFree() * OCI_xxxTransaction() -> OCI_Transactionxxx() - Added Macro for existing code compatibility (except for OCI_xxxTransaction() functions)