Skip to content
ChangeLog 145 KiB
Newer Older
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825
      - 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 is 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 <module>, section <Formatted functions>)
  
      - 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)
 
2008-03-31 Version 2.3.0 Vincent Rogier vince.rogier@gmail.com

    * Added Support for OCI Connection Pools

      - See new section in the documentation (page <module>, section <Connection pooling>)
      - Added type OCI_ConnPool
      - Added OCI_ConnPoolCreate()
      - Added OCI_ConnPoolFree()
      - Added OCI_ConnPoolGetConnection()
      - Added OCI_ConnPoolGetTimeout()
      - Added OCI_ConnPoolSetTimeout()
      - Added OCI_ConnPoolGetlGetNoWait()
      - Added OCI_ConnPoolSetNoWait()
      - Added OCI_ConnPoolGetBusyCount()
      - Added OCI_ConnPoolGetOpenedCount()
      - Added OCI_ConnPoolGetMin()
      - Added OCI_ConnPoolGetMax()
      - Added OCI_ConnPoolGetIncrement()

    * Added Support for OCI Mutexes
     
      - See new section in the documentation (page <module>, section <Threads and mutexes>)
      - Added type OCI_Mutex
      - Added OCI_MutexCreate()
      - Added OCI_MutexFree()
      - Added OCI_MutexAcquire()
      - Added OCI_MutexRelease()

    * Added Support for OCI Threads
     
      - See new section in the documentation (page <module>, section <Threads and mutexes>)
      - Added type OCI_Thread
      - Added OCI_ThreadCreate()
      - Added OCI_ThreadFree()
      - Added OCI_ThreadRun()
      - Added OCI_ThreadJoin()

    * Extended support for public retrieval of internal OCI handles :

      - Added OCI_HandleGetMutex()
      - Added OCI_HandleGetThread()
      - Added OCI_HandleGetThreadID()

    * Extended Lobs support :

      - Added OCI_LobAssign()
      - Added OCI_FileAssign()

    * Extended "Formatted" functions support :

      - Added support for OCI_Timestamp (<%p>) and OCI_Interval(<%v>)

    * Public interface (IMPORTANT CHANGES)

      - OCI_Initialize() :

        * New flag : OCI_ENV_THREADED
        * Up to v2.2.0, OCILIB was internally initializing OCI in threaded mode (even for non threaded applications)
        * With  v2.3.0, applications HAVE TO SET EXPLICITLY the flag OCI_ENV_THREADED for multithreaded applications

      - Normalization of few Function Names :

        * OCI_CreateConnection() -> OCI_ConnectionCreate()
        * OCI_FreeConnection() -> OCI_ConnectionFree()
        * OCI_CreateStatement() -> OCI_StatementCreate()
        * OCI_FreeStatement() -> OCI_StatementFree()

      - Added Macro for existing code compatibility

    * Bug fixes :

      - OCILIB_MINOR_VERSION was not updated
      - A segmentation fault could happen when fetching Long column
      - If an OCI_Statement object or its internal handle could not be allocated, the entry was not removed from the connection statements list
      - Binding and fetching Unicode strings on national character columns: non ansi characters (code points) were badly converted (Now, it uses national charset form for conversion)
      - OCI_LobErase() : Offset value was wrongly used (shifted by 1) and could cause an error if set to zero
      - OCI_Immediate() and OCI_ImmediateFmt() :

        * Passing OCILIB objects for output result led to crash because of assignment of out-of-scope object pointers
        * Now, pass the OCILIB object handle, NOT the handle address
        * Now, OCI_Long, OCI_Statement are not handled

    * Miscelleanous

      - Added OCI_ReleaseResultsets() : optional call to release resultsets
      - OCI_SetPrefetchSize() and OCI_SetPrefetchMemory() : internal value is now set only is OCI call succeed
      - Internal connection rewrite for handling Connection pool
      - Renamed few function parameters + documentation updates
      - Unicode strings are now converted into database using national charset form
      - OCI environment handle : 

        * Up to v2.2.0, every connection object holded an environment handle
        * Now, there is an unique environment handle associated to the internal OCI_Library object

2008-03-19 Version 2.2.0 Vincent Rogier vince.rogier@gmail.com

    * Public interface

      - Added OCI_SetPrefetchMemory() (see documentation)
      - Added OCI_GetPrefetchMemory()
      - Added OCI_SetPassword()
      - Added OCI_Break()
      - See new section in the documentation (page <module>, section <Aborting long operations>)
      - Modified few functions prototypes with no parameters -> from f() to f(void) for strict ansi C support 
      - Added 'const' qualifier to nearly all string parameter and string return values

    * Extended OCI_GetString() :

      - Modified : Implicit conversion from double uses now '%f' instead of '%g'.
      - Added support for OCI_Timestamp, OCI_Interval and implicit conversion

    * Fixes

      - Memory leak : If a statement that has returned a resulset is re-executed directly with OCI_Execute() (without any parse step), the previous resultset was not freed
      - Some statements attributes (fetch size, pre-fetched size, bind mode, long mode, long size) where reinitialized at every SQL parsing. Now they are persistent.
      - Constants OCI_FETCH_SIZE, OCI_PREFETCH_SIZE values were set to Oracle default values and were not assigned at statement creation time.
        So, if the library was rebuilt with different values, the modified values where not applied! Now, theses attributes are internally set internally when a statement is created
      - Now server version is initialized when the connection object is created (some tests for some features support could failed)

    * Modifications

      - Added support for OS authentification by passing NULL user and NULL password to OCI_CreateConnection()
      - Modified default date format for implicit conversion (DD/MM/YYYY -> YYYY-MM-DD)
      - Modified OCI_BindXX() calls : if bind mode is OCI_BIND_POS, the position used is now the given bind name (:1, :2, ...) instead of the internal bind object index
      - Modified OCI_CreateConnection() : it returns now NULL id OCI_Initialize() has not been called
      - Reintroduced support for native C++ compilation of OCILIB

    * Miscellaneous

      - Validation of LabWindow/LabView compilers
      - change email -> vince.rogier@gmail.com
      - Modified demo application: tests are now grouped in series of functions
      - Object support in Unicode builds : Oracle confirmed the bug when setting objects attributes (bug #6885036 on Metalink)

2008-03-04 Version 2.1.0 Vincent Rogier vince_rogier@yahoo.fr

    * Added public retrieval of internal OCI handles :

      - See new section in the documentation (page <module>, section <Using OCI Handles directly>)
      - OCI_HandleGetEnvironment()
      - OCI_HandleGetContext()
      - OCI_HandleGetServer()
      - OCI_HandleGetError()
      - OCI_HandleGetSession()
      - OCI_HandleGetTransaction()
      - OCI_HandleGetStatement()
      - OCI_HandleGetLob()
      - OCI_HandleGetFile()
      - OCI_HandleGetDate()
      - OCI_HandleGetTimestamp()
      - OCI_HandleGetInterval()
      - OCI_HandleGetObject() 

    * Extended Hash Tables support :

      - See updated example in the documentation (page <module>, section <Hash tables>)
      - Added OCI_HashGetEntry() to browse an OCILIB Hash Tables
      - Added OCI_HashGetType()
      - Added OCI_HashGetSize()
 
    * Added support for Lobs larger > 4 Go (Oracle 10g)

      - See updated section in the documentation (page <module>, section <Internal Large Objects (LOBs)>)
      - Added type lobsize_t (unsigned int or unsigned long long depending platform and compiler)
      - Modified OCI_Lob and OCI_File APIs to change lob size and offset type from unsigned int to lobsize_t 
        
    * Extended Oracle versions support

      - Added OCI_GetVersionConnection()
      - Building OCILIB with versions of Oracle < 10g and OCI_IMPORT_LINKAGE option could fail because :

        * BINARY FLOAT and BINARY DOUBLE (introduced in 10g) type references were not excluded from 8i and 9i builds
        * Some Timestamp and Interval (introduced in 9i) code portions were not excluded from 8i builds

      - Modified Oracle version detection
      - Rewritten conditional code compilation directives for handling correctly all versions of Oracle (8i -> 11g)
      - The library has been through series of tests on the following environments:

          * Servers : 10.2.0.1.0,  8.1.7.0.0           
          * Clients : 11.1.0.6.0, 10.2.0.1.0, 9.2.0.1.0, 9.0.1.0.1

      - few errors were encountered but always linked to Oracle known bugs identified on Metalink : nclobs on 8i, intervals on 9i, Full Unicode handling on 9i
      - Known issues that are currently being investigated: 

        * Oracle 8i only + "mixed charset" build : read/write on a CLOB fetched from a "return into" inserts '\0' between characters (looks like double unicode expansion..)

    * Modified Error handling

      - Added OCI_ErrorGetType()
      - Removed error messages prefixes "(OCI_xxx) - "
 
    * Fixed :

      - OCI_RegisterDate() caused OCI_Execute() to crash with Oracle < 10g. It is a known Oracle bug (metalink id #3269146 : OCIBindDynamic() with SQL_ODT).
      - OCI_RegisterDate() works nows on version < 10g (using SQLT_ODT for 10g and SQLT_DAT for 8i and 9i)
      - OCI_LobAppendLob() caused an ORA-24805 on Oracle 8.1.x only
      - OCI_xxxxToText() functions now initialize output buffers even on failure
  
2008-02-16 Version 2.0.0 Vincent Rogier vince_rogier@yahoo.fr
 
    * Added Support for Unicode build on Unix-like systems

      - Now, Unicode is correctly handled on Unix systems (4 bytes wchar_t)
 
    * Added support for Oracle Named types (Oracles Objects)

      - OCI_ObjectCreate()
      - OCI_ObjectFree()
      - OCI_ObjectGetDate()
      - OCI_ObjectGetDouble()
      - OCI_ObjectGetFile()
      - OCI_ObjectGetInt()
      - OCI_ObjectGetInterval()
      - OCI_ObjectGetLob()
      - OCI_ObjectGetObject()
      - OCI_ObjectGetRaw()
      - OCI_ObjectGetString()
      - OCI_ObjectGetTimeStamp()
      - OCI_ObjectSetDouble()
      - OCI_ObjectSetInt()
      - OCI_ObjectSetRaw()
      - OCI_ObjectSetString()
      - OCI_ObjectSetNull()
      - OCI_BindObject()
      - OCI_BindArrayOfObjects()
      - OCI_RegisterObject()
      - OCI_GetObject()
      - OCI_GetObject2()
      - Known issue : OCI function internally used to set attributes values is causes a crash on Unicode Build
      - So, DO NOT USE OCILIB Object API in Unicode build until i have sorted that with Oracle support

    * Added National attribute (charsetform) support

      - added OCI_GetColumnCharsetForm()
      - added OCI_Lob type OCI_NCLOB
      - added national charset support for binding, defining and lob manipulation

    * Extended column information

      - added OCI_GetColumnFullSQLType() that gives the same and exact output than SQL*Plus
      - added OCI_GetColumnFractionnalPrecision() for timestamp/interval
      - added OCI_GetColumnLeadingPrecision() for interval
      - modified OCI_GetColumnPrecision() return non zero only for numeric/float

    * Added support for SYSDBA, SYSOPER session modes

      - modified OCI_CreateConnection() that takes a new extra parameter to manage the session mode
      - added OCI_GetSessionMode()

    * Added support for BINARY FLOAT and BINARY DOUBLE (introduced with Oracle 10g)
 
    * Modified Input string buffer length parameters:

      - Parameter 'len' of OCI_LobRead(), OCI_LobWrite(), OCI_LobAppend(), OCI_LongRead(), OCI_LongWrite() is now :

        * Number of bytes for OCI_BLOB and OCI_BLONG
        * Number of characters for OCI_CLOB/OCI_NCLOB and OCI_CLONG

      - OCI_LobGetLength(), OCI_LobGetOffset() and OCI_LongGetSize() return now the length/offset expressed :

        * In bytes for OCI_BLOB and OCI_BLONG
        * In characters for OCI_CLOB/OCI_NCLOB and OCI_CLONG

      - Parameter 'size' of OCI_DateToText(), OCI_TimestampToText(), OCI_TimestampGetTimeZoneName(), OCI_IntervalToText is now :

        * Number of characters

    * Modified OCI_Long objects

      - Added OCI_LongGetBuffer()
      - Modified: Long columns are complety read internally during fetch sequence
      - Modified: OCILIB can handle more than one OCI_Long object in select resulset
      - OCI_LongRead() still supported but obsolete, use intead OCI_LongGetBuffer() 
      - Fixed : insert statement with OCI_Long bind variable that have inserted 0 bytes caused a crash when
        the statement was freed

    * Modified OCI_Schema public interface

      - Extended support for describing Named types
      - Renamed OCI_SchemaGetTable() to OCI_SchemaGet()
      - Remaned OCI_SchemaGetTableColumn() to OCI_SchemaGetColumn()
      - Remaned OCI_SchemaGetTableColumnCount() to OCI_SchemaGetColumnCount()
      - Added OCI_SchemaGetType()
      - Added OCI_SchemaGetName()

    * Miscellaneous bugs fixes:

      - Fixed : OCI_FetchNext() could return FALSE before the real end of the resultset
      - Fixed : Simple bind of OCILIB objects could lead OCI to crash 
      - Fixed : OCI_VERSION_REVISION was wrongly defined.
      - Fixed : OCI_VERSION_xxx were not up to date
      - Fixed : Modified few internal variables types (size and sign) to conform to Oracle Doc and to make
        AIX "Strict" C Compiler happy !
      - Fixed : Modified configure script for install options on GNU package
      - Fixed : OCI_RegisterString() : the buffer size was wrongly calculated in mixed charset builds
      - Fixed : Corrected spelling of OCI_LobGetLenght() -> OCI_LobGetLength()
      - Fixed : If OCI_RegisterXXX() calls were made in a different order than the variable list in the returning 
        clause, resultset columns were created in the wrong order and leaded to type mismatch

    * Miscellaneous modifications:

      - OCI_Initialize() takes a new param for future environment options and extra modes (by default OCI_ENV_DEFAULT)
      - Sometimes, OCI client describes FLOAT as NUMBER... Added extra checks to correct that!
      - Modification of configure script for 32 bits detection on 32/64bits systems
      - Rewrote the demo app for keeping a unique source demo for all platforms and builds
      - Added OCI_Object and RAWs output support fro OCI_Immediate() and OCI_ImmediateFmt()
      - Added OCILIB own transaction types for OCI_CreateTransaction() and OCI_TransactionGetMode()
      - Removed lots of typos in the source code comments and documentation! 

2008-01-28 Version 1.6.0 Vincent Rogier vince_rogier@yahoo.fr
 
    * Extended Oracle version information

      - OCI_GetServerMajorVersion()    
      - OCI_GetServerMinorVersion()    
      - OCI_GetServerRevisionVersion()    

    * Added support for "SQL returning clause"

      - OCI_GetNextResultset()
      - OCI_RegisterInt()    
      - OCI_RegisterString() 
      - OCI_RegisterRaw()   
      - OCI_RegisterDouble()    
      - OCI_RegisterDate()    
      - OCI_RegisterLob()    
      - OCI_RegisterFile()    
      - OCI_RegisterTimestamp()    
      - OCI_RegisterInterval()  
   
    * Miscellaneous added functions

      - OCI_BindArrayGetSize()
      - OCI_GetColumnCharUsed() 
      - OCI_SchemaGetTableName()

    * Important modifications

      - OCI_BindString() and OCI_BindArrayOfStrings() : the parameter len which is the max length of the buffer
       (or array element) is NOW :
            
        * UNDERSTOOD WITHOUT the zero terminal terminator.
        * EXPRESSED in CHARACTERS

      - So, for OCI_BindString() :

        * if the string is char    str[31], pass 30 as len instead of 31 in earlier version
        * if the string is wchar_t str[31], pass 30 as len instead of 62 in earlier version

      - So, for OCI_BindArrayOfStrings() :

        * if the string is char    str[10][31], pass 30 as len instead of 31 in earlier version
        * if the string is wchar_t str[10][31], pass 30 as len instead of 62 in earlier version

      - OCI_GetColumnSize() : return the size in characters for string column created with the qualifier CHAR for
        indicating the size in character and not in bytes

      - Prototypes for OCI_BindArrayOfInts(), OCI_BindArrayOfDoubles(), OCI_BindArrayOfStrings() changed :

        * For scalar C types (int, double and char*), the 'data' parameter was changed from type** to type* in
          order to avoid compiler warnings and casts

    * Miscellaneous modifications

      - Updated documentation (returning features and rowids, ...)
      - Extended source code comments
      - OCI_IsNull() was returning FALSE with a NULL handle, now returns TRUE
      - Added few cast and corrected few variable cast to compile nicely with highest warning level (on MS VS2005)
      - Some static were missing from internal function prototypes declaration
      - OCI_FreeResultset() => removed from public interface
      - Updated input parameter checking macros return values of few functions
      - OCI_SchemaGetTable() -> input parameter checking was missing
      - Updated demo application to make it fully portable (charset and platform)
      - Added comments on internal structure members
      - Call to OCI_GetXXXX2() : added checking on the internal map object allocation on failure
      - OCI_BindRaw() : now returns FALSE if len <= 0
      - OCI_ALLOC() : removed type casting
 
    * Miscellaneous fixes

      - OCI_Immediate() and OCI_ImmediateFmt()  : timestamp and interval params ARE STILL NOT parsed from 
       formatted query
      - Some NUMBER columns were wrongly mapped to C int type instead of double
      - OCI_Long internal structure could not be freed for an standalone instance
      - Demo application for handling string in unicode and mixed mode
      - OCI_LobErase : added size checking (oracle error with size = 0 on an empty lob)
      - OCI_BindArrayOfStrings : the allocated size was done with sizeof(mtext) instead of sizeof(dtext)

2008-01-10 Version 1.5.4 Vincent Rogier vince_rogier@yahoo.fr

    * Miscellaneous modifications and fixes

      - Added    : OCI_REVISION_VERSION constant
      - Fixed    : Statement handle on a statement bind call() was allocated again and not always freed and could
                  lead to an ORA-1000 error (since version 1.3.0)
      - Fixed    : OCI_Date * Array binding : wrong memory allocation size
      - Fixed    : Strings Array binding did not adjust the buffer size depending on the sizeof(dtext) and could
                  make OCI_execute failed on an Unicode build
      - Fixed    : OCI_Long * Type (CLONG or BLONG) was wrongly set
      - Modified : Refactoring of internal datatypes allocation, binding and defining for better performances, 
                  more comptact and safer code
      - Modified : Object datatypes defining from query (User types and Refs) generates now an error
      - Modified : Extended demo application with array binding support, ref cursor, nested tables, 
                  timestamps and intervals
      - Removed  : internal structure OCI_Data

2008-01-07 Version 1.5.3 Vincent Rogier vince_rogier@yahoo.fr

    * Fixed : Array binding support introduced in version 1.5.0 caused troubled for single objects bindings 
            (lobs, files, dates, intervals, timestamps)

2008-01-06 Version 1.5.2 Vincent Rogier vince_rogier@yahoo.fr

    * Fixed : First OCI_FetchNext() call on an EMPTY resultset was returning TRUE

2008-01-04 Version 1.5.1 Vincent Rogier vince_rogier@yahoo.fr

    * Fixed : OCI_Execute() crashed with a ref cursor bind variable (since v1.5.0, arghhh !! )
    * Fixed : OCI_ExecuteStmtFmt() was returning FALSE even on success

2008-01-04 Version 1.5.0 Vincent Rogier vince_rogier@yahoo.fr

    * Added proper RAW support

      - OCI_GetRaw()  
      - OCI_GetRaw2()    
      - OCI_BindRaw()
      - OCI_BindArrayOfRaws()
 
    * Added Array interface support for fast bulk operations
    
      - OCI_BindArraySetSize()    
      - OCI_BindArrayOfInts()    
      - OCI_BindArrayOfStrings()    
      - OCI_BindArrayOfDoubles()    
      - OCI_BindArrayOfDates()    
      - OCI_BindArrayOfTimestamps()    
      - OCI_BindArrayOfIntervals()    
      - OCI_BindArrayOfLobs()    
      - OCI_BindArrayOfFiles()

    * Timestamps and intervals
    
      - Added support in OCI_Immediate() and OCI_ImmediateFmt()    
      - Added support in OCI_GetColumnSQLType()

    * Added OCILIB versioning constants
    
      - OCILIB_MAJOR_VERSION     
      - OCILIB_MINOR_VERSION 

    * Miscellanious modifications and fixes

      - Modified : Resetting bind indicators to not null after each execute call
      - Fixed    : Column retrieving from name is NOW case insensitive 
      - Modified : Hash table key comparison is NOW case insensitive
      - Added    : ChangeLog content to HTML documentation Main page

2007-12-29 Version 1.4.0 Vincent Rogier vince_rogier@yahoo.fr

    * Resulset values can be retrieved now by column names

      - OCI_GetInt2()    
      - OCI_GetString2()    
      - OCI_GetDouble2()    
      - OCI_GetDate2()    
      - OCI_GetStatement2()   
      - OCI_GetLob2()    
      - OCI_GetLong2()    
      - OCI_GetTimestamp2()    
      - OCI_GetInterval2()    
      - OCI_GetColumn2()    
      - OCI_GetColumnIndex()

    * Added OCI version detection
    
      - Now, OCI versions are detected at compile and runtime    
      - OCI_GetOCICompileVersion()    
      - OCI_GetOCIRuntimeVersion()

    * Added Timestamp datatype support
    
      - Type OCI_Timestamp    
      - OCI_TimestampAssign()    
      - OCI_TimestampCheck()     
      - OCI_TimestampCompare()     
      - OCI_TimestampConstruct()     
      - OCI_TimestampConvert()     
      - OCI_TimestampFromText()     
      - OCI_TimestampGetDate()    
      - OCI_TimestampGetTime()    
      - OCI_TimestampGetTimeZoneName()     
      - OCI_TimestampGetTimeZoneOffset()    
      - OCI_TimestampIntervalAdd()    
      - OCI_TimestampIntervalSub()
      - OCI_TimestampSubtract()    
      - OCI_TimestampSysTimeStamp()    
      - OCI_TimestampToText()    
      - OCI_BindTimestamp()    
      - OCI_GetTimestamp()
  
    * Added Interval datatype support
    
      - Type OCI_Interval    
      - OCI_IntervalCreate()    
      - OCI_IntervalFree()    
      - OCI_IntervalAssign()    
      - OCI_IntervalCheck()     
      - OCI_IntervalCompare()    
      - OCI_IntervalFromText()    
      - OCI_IntervalToText()    
      - OCI_IntervalFromTimeZone()    
      - OCI_IntervalGetDaySecond()     
      - OCI_IntervalGetYearMonth()     
      - OCI_IntervalSetDaySecond()   
      - OCI_IntervalSetYearMonth()    
      - OCI_IntervalAdd()    
      - OCI_IntervalSubtract()    
      - OCI_BindInterval()    
      - OCI_GetInterval()

    * Added Hash tables support
    
      - type OCI_HashTable    
      - OCI_CreateHashTable()    
      - OCI_FreeHashTable()    
      - OCI_HashGetValue()    
      - OCI_HashGetInt()    
      - OCI_HashGetPointer()    
      - OCI_HashAddString()    
      - OCI_HashAddInt()    
      - OCI_HashAddPointer()    
      - OCI_HashLookup()    
      - OCI_HashGetString()

    * Added OCILIB C source compatibility for C++    
    
      - Modified OCI_ALLOC() macro to add cast to malloc    
      - Added few cast required the C++    
      - Modified internal OCI_ErrorHandler() in order to call handler after reset of connection 
        status for C++ exceptions    
      - Modified : now, OCILIB C source perfectly compiles with a C++ compiler

    * Miscellanious modifications and fixes
    
      - Modified OCI_Variant type (from private to public scope)    
      - Modified : Every call to execute frees previous resultsets    
      - Fixed : OCI_FileIsEqual() was not exported    
      - Fixed : implicit conversion to int and double (OCI_GetInt() and OCI_GetDouble()) from a text value 
        column (OCI_CDT_TEXT) where not implemented in unicode    
      - Modified OCILIB descriptors ( OCI_XXXFree() ) to correct some leeks and for compatibility with C++ 
        destructors (for OCILIB++ that coming soon)    
      - Modified : Mapping text macros scope moved from private to public for OCILIB++    
      - Changed the statement types from OCI_STMT_XXX to OCI_CST_XXX    
      - OCI_DateAssign() : the two handles were not in good order 

2007-12-18 Version 1.3.1 Vincent Rogier vince_rogier@yahoo.fr

  * Fixed sourceforge bug #1853369
    
      - Committed updates from others transactions where not seen until the next OCI_Commit() call due
        to the default transaction object mode.    
      - Mode changed from OCI_TRANS_SERIALIZABLE to OCI_TRANS_READWRITE

    * Fixed missing Unicode _T() macros in demo source file on Microsoft Windows platform
    * Fixed demo project on Microsoft Windows platform && Visual Studio (ocilib source was linked to exe
      instead of using Dlls)

2007-12-06 Version 1.3.0 Vincent Rogier vince_rogier@yahoo.fr

    * Added Full BFILE support
    
      - Added Type OCI_File    
      - Added OCI_FileCreate()    
      - Added OCI_FileFree()    
      - Added OCI_FileSeek()    
      - Added OCI_FileGetOffset()    
      - Added OCI_FileRead()    
      - Added OCI_FileGetType()    
      - Added OCI_FileGetSize()    
      - Added OCI_FileExists()    
      - Added OCI_FileSetName()    
      - Added OCI_FileGetDirectory()    
      - Added OCI_FileGetName()    
      - Added OCI_FileOpen()    
      - Added OCI_FileIsOpen()    
      - Added OCI_FileClose()    
      - Added OCI_FileIsEqual()

    * Extended Lob support
    
      - Added OCI_LobCopyFromFile()    
      - Added OCI_LobAppend()    
      - Added OCI_LobOpen()    
      - Added OCI_LobClose()    
      - Added OCI_LobIsEqual()    
      - Modified OCI_lobGetLenght()    
      - Modified OCI_lobAppend()   
        
    * Added Pre-fetch support        
    
      - OCI_SetPrefetchSize()    
      - OCI_GetPrefetchSize()

    * Added Support for describing database objects (currently only table support)
    
      - Added Type OCI_Schema    
      - Added OCI_SchemaGetTable()    
      - Added OCI_SchemaGetTableColumnCount()    
      - Added OCI_SchemaGetTableColumn()    
      - Added OCI_SchemaFreeTable()
            
    * Modified and extended Column info API    
    
      - Modified type OCI_Column from private to public handle    
      - Added OCI_GetColumn()    
      - Added OCI_GetColumnSQLType()    
      - Added OCI_GetColumnPrecision()    
      - Added OCI_GetColumnScale()    
      - Added OCI_GetColumnNullable()    
      - Modified OCI_GetColumnType()    
      - Modified OCI_GetColumnName()    
      - Modified OCI_GetColumnSize()
        
    * Extended support for formatted functions
    
      - OCI_SqlImmediate() supports now ouput for OCI_Date*, OCI_Long*, OCI_Lob*, OCI_File*, OCI_Statement*
 
    * Fixed OCILIB Objects binding:
    
      - for LOB, FILE and REF Cursors handles    
      - corrected SQL type for CLOB
                
    * Miscellaneous internal fixes
    
      - Fixed dsizeof() macro    
      - OCI_Cleanup() : fixed memory leak if object not explicitly freed (since internal version 0.9)     
      - OCIEnvCreate() call : OCI_THREADED was missing (since internal version 0.9)    
      - OCIEnvCreate() call : OCI_OJBECT was missing in unicode mode (since internal version 0.9)     
      - Fixed memory leak when fetching OCI_Statement * Resultset columns
        
    * Miscellanious internal modifications
    
      - Modification of column buffer internal implementation (use of unions)
      - Modified ocistrdup()    
      - Modified scope of few local functions (static where missing)    
      - Redefinition of local structure members from type 'int' to 'boolean'    
      - Updated logical tests to TRUE/FALSE for clarity     
      - Now, Statement handle fetched from a cursor column MUST not be released as in earlier versions

    * Performances improvement        
    
      - Statement handle is now allocated at on Statement creation and not at every prepare call
         
    * Updated Documentation
          
2007-12-01 Version 1.2.1 Vincent Rogier vince_rogier@fsinet.fr

    * Updated Documentation
    
      - Regeneration from source without macro expansion to make it cleaner    
      - Update of Charset support section

    * Fixed sourceforge bug #1841998
    
      - For string based output columns, the last character was truncated because not enough memory was 
        allocated (due to an bad copy/paste operation !)

2007-11-25 Version 1.2.0 Vincent Rogier vince_rogier@yahoo.fr

    * Added Documentation
    
      - Full API documentation 
      - Html help     
      - Embedded documentation in source code

    * Added Global Transaction support
    
      - Added OCI_Transaction structure and handle 
      - Added OCI_XID structure and handle    
      - Added OCI_CreateTransaction()    
      - Added OCI_FreeTransaction()    
      - Added OCI_PrepareTransaction()    
      - Added OCI_ForgetTransaction()    
      - Added OCI_ResumeTransaction()    
      - Added OCI_TransactionGetMode()    
      - Added OCI_TransactionGetTimeout()    
      - Added OCI_GetTransaction()
      - Added OCI_SetTransaction()    
      - Modified OCI_StartTransaction() 

    * Modified Lob support
    
      - Removed OCI_LobGetCacheMode()    
      - Modified OCI_LobInit() (del cache param)    
      - Modified OCI_Lob (del cache member)    
      - Added OCI_LobErase()

    * Modified Error Handling
    
      - Removed OCI_GetErrorCode()    
      - Added OCI_ErrorGetOCICode()    
      - Added OCI_ErrorGetInternalCode()

2007-11-12 Version 1.1.0 Vincent Rogier vince_rogier@yahoo.fr

    * Modified : the library comes with 2 archives : GNU et Win32
    * Modified : interfaces and some functions calls
    * Added    : use of GNU install tools
    * Added    : options for building the library
    * Fixed    : unicode support

2007-10-19 Version 1.0.0 Vincent Rogier vince_rogier@yahoo.fr

    * Added    : First public release.