Skip to content
ChangeLog 145 KiB
Newer Older
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000

    * Improved Execute/Fetch performance with prepared statement

      - Improved by x15 fetch performance when executing and fetching prepared statements that return resultsets
      
          - Prior to v3.7.0 :

              - Before a prepared statement was re-executed, any previous resultset was freed
              - Then, once the statement was re-executed, the resultset was recreated by OCI_GetResultset()

          - From v3.7.0 :

              - The resulset is created only once and is just reinitialized before re-execution
              - Avoiding these unnecessary memory allocations/deallocations improves drastically the performances

    * Extended Array interface

      - Added OCI_SetBindAllocation()
      - Added OCI_GetBindAllocation()
      - Improved drastically performance for handle based array internally created or externally created with OCI_xxxxArrayCreate()
      - Added demo file array_internal.c

    * Miscellaneous changes

      - Modified connection internal handles allocation/deallocation: 

         - Server handle is now allocated/deallocated when physical connection to server is created/freed
         - Session and context handles are now allocated/deallocated at logon/logoff time
         - Before theses handles were all allocated/deallocated when physical connection to server was created/freed
         - The old way could cause problems with old Oracle versions
      
      - Existing programs must be recompiled (in order to use this new version of ocilib) with no code change (as compatibility macros are provided)

    * Miscellaneous fixes
    
      - Fixed OCI_Object binding: 
    
         - Internal objects indicator structures were not binded properly
         - Even if the internal objects indicators were updated correctly, it was not seen by the server
         - Only the object itself nullity flag was sent to server
   
      - Fixed Batch error handling:
        
         - Some errors could not have be caught
         - Added checks in OCI_GetBatchErrorCount()

      - Fixed OCI_Element API :

         - Setting values with a standalone OCI_Element object associated to a standalone collection was broken
         - For collection of REFs, internal OCI_REf object was not freed by OCI_ElemFree()

      - Fixed OCI_Object members internal offset computation for 64bits builds
      - Fixed OCI_DirPathSave() that could not execute on a loaded stream
      - Fixed Connection pooling emulation for Oracle 8i
      - Fixed warnings when compiling OCILIB with OCI_IMPORT_LINKAGE and Oracle 8i
      - Fixed few internal return values literals in OCI_CHECK_XXX macros (like FALSE literal returned for pointer values ...)

2010-05-18 Version 3.6.0 Vincent Rogier vince.rogier@ocilib.net

    * Improved Array interface
    
      - Arrays of non scalar datatypes (based on handles) previously had to be initialized element by element and could be time consuming
      - It is now possible to allocate arrays in one step and thus improve performance (especially with Oracle 11g), internal OCILIB structures and OCI handles are allocated in one step
      - Added OCI_DateArrayCreate()
      - Added OCI_DateArrayFree()
      - Added OCI_TimestampArrayCreate()
      - Added OCI_TimestampArrayFree()
      - Added OCI_IntervalArrayCreate()
      - Added OCI_IntervalArrayFree()
      - Added OCI_LobArrayCreate()
      - Added OCI_LobArrayFree()
      - Added OCI_FileArrayCreate()
      - Added OCI_FileArrayFree()
      - Added OCI_ObjectArrayCreate()
      - Added OCI_ObjectArrayFree()
      - Added OCI_RefArrayCreate()
      - Added OCI_RefArrayFree()
      - Added OCI_CollArrayCreate()
      - Added OCI_CollArrayFree()
      
    * Added proper support for UTF8 strings

      - Use OCI_CHARSET_ANSI mode
      - Set the environment variable NLS_LANG to value that contains the substring 'UTF8'
      - Depending on the database charset :
    
          - UTF8 : UTF8 strings are used for any text based binds or retrieved columns values
          - Other charsets : UTF8 strings can be used only with national strings (NCHAR/NVARCHAR/NCLOB)

    * Exented String support

      - Added OCI_BindSetCharsetForm() to enable the use of national charset on binded strings

    * Extended LOB API

      - It is now possible to specify for CLOB/NCLOB buffer lengths in characters and/or bytes for R/W operations
      - Added OCI_LobRead2()
      - Added OCI_LobWrite2()
      - Added OCI_LobAppend2()

    * Modified native CHARSET modes

      - OCI_CHARSET_UNICODE replaced by OCI_CHARSET_WIDE 
      - OCI_CHAR_UNICODE replaced by OCI_CHAR_WIDE
      - OCI_XXX_UNICODE symbols are still supported for backward compatibility
   
    * Fixed Multiple loads in Direct path mode

      - Fixed the API to enable multiple load
      - Updated direct path demo

    * Miscellaneous changes

      - Added OCI_HandleGetSubscription()
      - Modified OCI_Initialize() : renamed parameter 'home' to 'lib_path' 
      - OCI_GetString() : when column base type is not string based, the implicit conversion uses now now dynamic memory allocation to return full data content instead of truncating to OCI_BUFFER_SIZE limit    
      - Various documentation updates
      - Modified OCI_LobRead() (and thus OCI_LobRead2()) to set a trailing null character
      - Replaced few left direct malloc() calls by OCI_MemAlloc()

    * Miscellaneous fixes

      - fixed prototype of OCI_ConnPoolGetlGetNoWait() => OCI_ConnPoolGetGetNoWait()
      - fixed internal raw size retrieving in OCI_ObjectGetRaw() and OCI_ElemSetRaw()
      - fixed OCI_ObjectSetString() in OCI_CHARSET_MIXED mode that could cause a segfault
      - fixed internal string conversions in OCI_CHARSET_MIXED mode on Unix systems that could cause a segfault
      - fixed various problems of RAW and LONG handling in OCI_MIXED_CHARSET mode
      - fixed OCI_ServerGetOutput() when statements are reprepared
      - fixed computation of objects members offsets (in the internal object opaque structure) which caused misaligned pointer and lead to segfault depending on the members datatype
      - fixed OCI_xxxFmt() functions that were badly formatting the ouput sql when more than one DATE parameter was present
      - fixed OCI_BindArrayOfXXXX() documentation
      - fixed OCI_BindArraySetSize() when called many times with a new size > initial size
      - fixed endianness problem on big endian platforms when a string buffer had to be converted
      - fixed internal lengths used in implicit conversions in OCI_GetString() for some datatypes
      - Improved long long support detection
      - fixed national charset attribute detection for NCLOB binds
      - Fixed memory leak appeared in v3.5.0 when deallocating internal fetched LOBs

    * Modified developer and support contacts

      - use the following contact address for any information/question/help about OCILIB :

          - support and help         : support@ocilib.net
          - contact and information  : vince.rogier@ocilib.net 

2010-02-03 Version 3.5.1 Vincent Rogier vince.rogier@gmail.com

    * Miscellaneous fixes

      - fixed reinitialization of OCI_Statement objects binded to other statements
      - fixed endianness problem with precision attribute of sub columns of objects retrieved with OCI_TypeInfoGet()
      - fixed compilation error with Oracle client < 10gR2 when using build mode OCI_IMPORT_LINKAGE
      - fixed returned value of OCI_GetColumnIndex()

    * Documentation updates / fixes
 
2009-12-21 Version 3.5.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for Oracle Database Change notification / Continuous Query Notification

      - Added type OCI_Subscription
      - Added OCI_SubscriptionRegister()
      - Added OCI_SubscriptionUnregister()
      - Added OCI_SubscriptionAddStatement()
      - Added OCI_SubscriptionGetName()
      - Added OCI_SubscriptionGetPort()
      - Added OCI_SubscriptionGetTimeout()
      
      - Added type OCI_Event
      - Added OCI_EventGetType()
      - Added OCI_EventGetOperation()
      - Added OCI_EventGetDatabase()
      - Added OCI_EventGetObject()
      - Added OCI_EventGetRowid()
      - Added OCI_EventGetSubscription()
      
      - Added new environment mode OCI_ENV_EVENTS to enable events
      - Updated documentation (new page <modules> <Database Change Notification>)

    * Added support for Oracle warning (grace period notification, SQL truncation, etc ...)

      - Added OCI_EnableWarnings()
      - Added error type OCI_ERR_WARNING
      - Updated documentation (page <modules> <error handling>)

    * New functions 

      - OCI_CollGetAt2()
      - OCI_SetUserPassword() to renew a user password (expired or active) 
      - OCI_SetErrorHandler() to modify user error handler callback after library initialization

    * Major Object API internal update, rewrite and improvement

      - Speed improvements
      - Now works on Unicode builds (tired to wait after Oracle fixes that never come, so i have reimplemented some buggy OCI calls)
      - Smarter code

    * Extended Lob Support

      - Added OCI_LobEnableBuffering()
      - Added OCI_LobGetChunkSize()
      
    * Native 64 bits fixes

      - Fixed Direct Path API
      - Added casts + modified some variables types

    * PL/SQL support fixes
      - Segmentation fault could happen when using OCI_Date binds in PL/SQL statements
      - Binds values for OCI_Date and big_int variable where not updated after OCI_Execute for PL/SQL
      - OCI_ServerGetOutput() : ouput was broken if PL/SQL statement/blocks were re-executed
      - OCI_ServerGetOutput() : trash string was returned if the number of amount of output lines was greater than the value of the  <arrsize> parameter of OCI_ServerEnableOutput()
       
    * Miscellaneous fixes

      - OCI_ImmediateFmt(), OCI_PrepareFmt(), OCI_ExecuteStmtFmt():  trailing character of formatted string representation of dates was missing on non windows platforms
      - OCI_ObjectGetColl() : the internal OCI Collection handle of the returned OCI_Coll object was invalid and thus caused segfault when calling OCI_Coll functions afterwards for these objects
      - OCI_DateNextDay() : On Unix systems+Unicode builds -> wrong value passed to the OCI internal call
      - OCI_Immediate() : if execution failed, internal OCI_Statement (and thus server cursor) was not deallocated 
      - OCI_ConnectionFree() : removed internal call to object cache cleanup routine
      - OCI_DatabaseShutdown() : a segfault happened if the connection to the server could not be done 
      - fixed typos in OCILIB documentation (generated from OCILIB main header file: ocilib.h)

    * Miscellaneous changes
    
      - OCI_RefToText() : parameter size is now if type <unsigned int> instead of <int>
      - Modified : OCI_BIND_MAX (maximum number of binds for a statement) is now 1024 by default instead of 512
      - Added Oracle spatial demo source (demo/geometry.c)
      - Now, OCI_API is by default set to __stdcall when using MS visual studio if it is not already defined
      - If client version >= 11.1, OCILIB Resultsets allocate internal OCI descriptors array in one call (lobs, files, timestamp and interval)
 
    * Information : OCI_DatabaseStartup() fails on Unicode builds because OCI function OCIDBStartup() fails if OCI is initialized in UTF16 mode ! Another bug to report to Oracle !

2009-07-28 Version 3.4.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for Oracle 11g remote instance management

      - Added OCI_DatabaseStartup()
      - Added OCI_DatabaseShutdown()
      - Added documentation (page <modules> <Remote Instance startup/shutdown>)

    * Miscellaneous fixes

      - Fixed String binds: since v.3.3.0, an error ORA-01480 could happened if the string length was equal to the max size passed to OCI_BindString()
      - Fixed OCI_CollGetSize() that was returning wrong size after OCI_Execute() if the collection was binded as pure out variable or retrieved as a member of fetched OCI_Object handle
      - Fixed OCI_GetColumnNullable() : since v.3.0.0, it was always returning TRUE
      - Fixed internal binds buffer lenghts updates

    * Miscellaneous changes

      - Removed collection bounds / input index checking in OCI_CollGetAt() and OCI_CollSetAt()
      - Modified behaviour of OCI_BindGetDataSize() and OCI_BindSetDataSize() (see documentation or function declarations for more information)
      - Modified Oracle version handling:
        - Minor versions of OCI are now also detected at compile and runtime time
        - Versions constants have changed: 
          - before: 
            - OCI_8 (8), OCI_9 (9), OCI_10 (10), OCI_11 (11)
          - now : 
            - OCI_8_0  ( 800), OCI_8_1  ( 810)
            - OCI_9_0  ( 900), OCI_9_1  ( 920)
            - OCI_10_1 (1010), OCI_10_2 (1020)
            - OCI_11_1 (1110), OCI_11_2 (1120)
          - Compatibility macros were added to map old versions constant:
            - OCI_8 (=> OCI_8_0), OCI_9 (=> OCI_9_0), OCI_10 (=> OCI_10_1), OCI_11 (=> OCI_11_1)
          - All OCILIB functions returning single version number now returns the new version constants
          - Added macros to extract versions part numbers from new single version numbers:
            - OCI_VER_MAJ() : major    version
            - OCI_VER_MIN() : minor    version
            - OCI_VER_REV() : revision version

2009-06-30 Version 3.3.0 Vincent Rogier vince.rogier@gmail.com

    * Added SQL command and verb retrieving

      - Added OCI_GetSQLVerb()
      - Added OCI_GetSQLCommand()
      - Added OCI_SFC_XXXX constants for the 124 Oracle SQL command codes

    * Added support for batched errors for Array DML

      - Added OCI_ErrorGetRow()
      - Added OCI_GetBatchError()
      - Added OCI_GetBatchErrorCount()
      - Updated array interface demo (demo/array.c)

    * Extended Lob Support

      - Added OCI_LobGetMaxSize()
      - Added OCI_LobFlush()

    * Extended Collection API

      - Added OCI_CollClear()
      - Modified OCI_CollTrim(), OCI_CollGetMax(), OCI_CollGetSize() that now take or return 'unsigned int' instead of 'int' type
      - Modified OCI_CollTrim() to accept a zero value as number of elements to trim 
   
    * Modified and extended Bind API

      - Added OCI_BindSetNull()
      - Added OCI_BindSetNullAtPos()
      - Added OCI_BindIsNull()
      - Added OCI_BindIsNullAtPos()
      - Modified OCI_SetNullxxx() calls that are now defined as obsolete macros around OCI_BindSetxxx() calls

    * Extended OCI_ImmediateXXX() API

     - Added missing support for Objects, Collection and REF
     - Added OCI_ARG_OBJECT, OCI_ARG_COLLECTION and OCI_ARG_REF

    * Extended OCI_XXXFmt() API

     - Added support for REFs
     - Added token identifier '%r' for REFs
   
    * Miscellaneous changes

      - Added OCI_Ping()
      - Added Exception type OCI_ERR_CREATE_OCI_ENVIRONMENT if internal Oracle OCI environment handle cannot be allocated
      - Updated documentation (page <modules> <Installing OCILIB>)
      - Modified GNU configure script: the Oracle OCI library folder search sequence is now : lib32, lib, lib64

    * Miscellaneous fixes

      - Fixed OCI_CollAssign() that was assigning destination collection to source collection
      - Fixed missing const qualifier in some Direct Path functions prototypes    
      - Fixed OCI_ElemSetXXX() for numeric types that was returning FALSE for local collection
      - Fixed PL/SQL tables binds for non scalar types (wrong values handled since v3.2.0)
      - Fixed possible infinite recursivity when calling some OCI_ErrorGetXXX() calls within an error handler at OCILIB initialization
      - Fixed Error message if Oracle shared lib was not found: library name was not correct on Unicode builds
      - Fixed OCI_GetString() : in mixed charset builds, the returned string was truncated for numeric columns 
      - Fixed internal function OCI_MoveString() for inplace string buffers packing/expansion
      - Fixed in/out or out string binds:
        * Bind indicator is now not reset to "not null" after an execute call if the statement is PL/SQL code
        * Wide string binds on Unixes platforms (Mixed and Unicode builds) : 
          - the trailing null character was missing if the binded string had been shortened by some PL/SQL code or user
          - Internal initialization of bind array of data legnths: the length was including null terminator character and could lead to some memory corruptions
      - Fixed some demo example codes 
      - Fixed computation of internal OCI_Object sub objects offsets in their parents’ indicator array (could have caused segfaults and/or bad indicator values)
      - Fixed problems with OCI_Elem internal null indicators:
          - In some cases, a segfault caused by a null pointer could happened
          - For OCI_Object handles held by an OCI_Elem handle, the object internal indicator structure was not properly set/retrieved
                   
2009-04-20 Version 3.2.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for Direct Path Loading
    
      - See section in the documentation (page <module>, section <Direct Path loading>)
      - Added handle OCI_DirPath
      - Added OCI_DirPathCreate()
      - Added OCI_DirPathFree()
      - Added OCI_DirPathSetColumn()
      - Added OCI_DirPathPrepare()
      - Added OCI_DirPathSetEntry()
      - Added OCI_DirPathConvert()
      - Added OCI_DirPathLoad()
      - Added OCI_DirPathReset()
      - Added OCI_DirPathFinish()
      - Added OCI_DirPathAbort()
      - Added OCI_DirPathSave()
      - Added OCI_DirPathFlushRow()
      - Added OCI_DirPathSetCurrentRows()
      - Added OCI_DirPathGetCurrentRows()
      - Added OCI_DirPathGetMaxRows()
      - Added OCI_DirPathSetDateFormat()
      - Added OCI_DirPathSetParallel()
      - Added OCI_DirPathSetNoLog()
      - Added OCI_DirPathSetCacheSize()
      - Added OCI_DirPathSetBufferSize()
      - Added OCI_DirPathGetAffectedRows()
      - Added OCI_DirPathGetRowCount()
      - Added OCI_DirPathGetErrorColumn()
      - Added OCI_DirPathGetErrorRow() 
      - added OCI_HandleGetDirPathStream()
      - added OCI_HandleGetDirPathColArray()
      - added OCI_HandleGetDirPathCtx()
      - Added Exception type OCI_ERR_COLUMN_NOT_FOUND
      - Added Exception type OCI_ERR_DIRPATH_STATE
      - updated demo application with a direct path loading example
      - Added source code of a standalone application in demo directory
      
    * Modified Database objects describe API

      - OCI_Schema handle has been renamed to OCI_TypeInfo
      - All OCI_SchemaXXX() functions have been renamed to OCI_TypeInfoXXX()
      - Constants OCI_SCHEMA_XXX have been renamed to OCI_TIF_XXX
      - Macro have been added to mapp old types, defines and names to new ones for backward compatibility

    * Extended binding possibilities

      - Added OCI_BindArrayGetSize()
      - Added OCI_AllowRebinding()
      - Different host variables can be binded to the same statement bind placeholder
      - It is possible the update a bind array real number of element before execution
      - Added exception type OCI_ERR_BIND_ARRAY_SIZE
      - Fixed OCI_SetNullXXX() : the upper bound of an array bind was not checked

    * Extended Object API

      - Added OCI_ObjectGetStruct()
      - Now it is possible to retrieve the underlying C (OTT style) structure of an OCI_Object handle

    * Fixed OCI_Element API

      - Modified OCI_ElemCreate() that takes now an OCI_TypeInfo handle instead of an OCI_Connection handle
      - Fixed OCI_ElemFree() that could not free underlying sub objects OCI handles
      - Fixed segfaults when using local instance of OCI_Elem objects created wit OCI_ElemCreate()

    * Extended UROWID support

      - Large UROWID hexadecimal strings where truncated to OCI_ROWID_SIZE (default 23) characters
      - Now OCILIB handles correctly UROWID columns (size up to 4000 chars)
         
    * Miscellaneous fixes

      - Fixed OCI_TimestampToCTime() : members tm_year and tm_mon of the tm structure passed to the function were not properly set
      - Fixed memory leak : when re-executing a prepared statement that hold a SQL 'select', internal OCI column descriptor for each column of the resultset was not freed
      - Fixed implicit conversion of numeric data to string when using OCI_GetString() in mixed and Unicode builds : Entire values had a trailing dot.
      - Fixed OCI_LongRead() : internal offset variable was not reset across OCI_FetchNext() calls causing NULL reads after some fetch sequences
      - Fixed memory leak in internal function OCI_ObjectInit()
      - Fixed configure script for GNU package to detect OCI header location of some older versions ($ORACLE_HOME/rdbms/demo)
      - Fixed internal OCI_StringCopy2to4bytes() when converting internal Oracle UTF16 strings with odd lengths to Unix UTF32 strings
      - Renamed OCI_ColumnGetFractionnalPrecision() to OCI_ColumnGetFractionalPrecision() - added macro for backward compatibility
      
    * Updated windows package

      - Added 2 code::blocks projects
         - ocilib_static_lib_mingw.cbp : to build OCILIB as a 32 bits static library (ansi, mixed and unicode builds) in ocilib/proj/mingw
         - ocilib_demo_codeblocks.cbp  : to build OCILIB 32 bits demo application (ansi, mixed and Unicode builds) in ocilib/proj/test
      - Precompiled OCILIB 32 bits static libraries are now provided within the package :
         - built with Code::Block 8.03 (minGW / gcc-core-3.4.5)
         - available static libs in ocilib/lib32 : libociliba.a (ansi), libocilibm.a (mixed), libocilibw.a (unicode)
      - OCILIB prebuilt Dlls are still compiled with Microsoft Visual Studio
      
    * Miscellaneous internal changes

      - The object cache is now freed when a connection is terminated
      - Internal source file schema.c has been renamed to typeinfo.c
      - Internal source file dirpath.c has been added
      - Fixed some internal calls to please GDCC and its aliasing warnings with -Wall options
      
    * Documentation updates 

      - Added notes in OCI_ConnectionCreate() documentation for using External credentials
      - Added notes in OCI_BindArraySetSize() documentation for modifying input array number of elements between statement executions
      - All OCILIB headers and sources files (45 files - 43.000 lines) have been checked with spell checker to correct typos (my English remains not so good !)
           
2009-01-23 Version 3.1.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for Oracle REF datatype

      - Added OCI_RefCreate()
      - Added OCI_RefFree()
      - Added OCI_RefGetObject()
      - Added OCI_RefAssign()
      - Added OCI_RefIsNull()
      - Added OCI_RefSetNull()
      - Added OCI_RefToText()
      - Added OCI_RefGetHexSize()
      - Added OCI_GetRef2()
      - Added OCI_GetRef()
      - Added OCI_BindRef()
      - Added OCI_BindArrayOfRefs()
      - Added OCI_RegisterRef()
      - Added OCI_ElemGetRef()
      - Added OCI_HandleGetRef()
      - Added OCI_ObjectGetRef()
      - Added OCI_ObjectGetSelfRef()

    * Added some tracing features

      - Added OCI_SetTrace()
      - Added OCI_GetTrace()

    * Extended Object API

      - Fixed internal handling of null attributes (it has been rewritten)
      - Modified local (transients) objects creation. Now:

        * By default, all attributes are set to NULL
        * Non scalar attributes must be set by calling new functions OCI_ObjectSetXXX()

      - Added setters functions for non scalar object attributes

        * OCI_ObjectSetDate
        * OCI_ObjectSetInterval
        * OCI_ObjectSetTimestamp
        * OCI_ObjectSetColl
        * OCI_ObjectSetObject
        * OCI_ObjectSetFile
        * OCI_ObjectSetLob
        * OCI_ObjectSetRef

      - Added Miscellaneous Object functions

        * Added OCI_ObjectIsNull()
        * Added OCI_ObjectAssign()
        * Added OCI_ObjectGetType()

    * Extended Collection elements API

      - Fixed : OCI_ElemSetNull() that was only updating null indicator
      - Fixed : some functions were not checking input element handle nullity
      - Added checks on element type in OCI_ElemGetXXX() calls that throw an exception if the element type is not the same type as the one requested
      - Added setters functions for non scalar element base datatypes

        * OCI_ElemSetDate()
        * OCI_ElemSetInterval()
        * OCI_ElemSetTimestamp()
        * OCI_ElemSetColl()
        * OCI_ElemSetObject()
        * OCI_ElemSetFile()
        * OCI_ElemSetLob()
        * OCI_ElemSetRef()
   
    * Extended Bind informations

      - Modified : OCI_Bind handles are now public and can be retrieved for public information
      - Added OCI_GetBindCount()
      - Added OCI_GetBind()
      - Added OCI_GetBind2()
      - Added OCI_BindGetName()
      - Added OCI_BindGetType()
      - Added OCI_BindGetSubtype()
      - Added OCI_BindGetStatement()
      - Added OCI_BindGetData()
      - Added OCI_BindGetDataCount()
      - Added OCI_BindGetDataSize()
      - Added OCI_BindGetDataSizeAtPos()
      - Added OCI_BindSetDataSize()
      - Added OCI_BindSetDataSizeAtPos()
      - Added OCI_SetNull2()
      - Added OCI_SetNullAtPos2()
      - Extended OCIBindxxx() calls satefy : 

        * An error OCI_ERR_BIND_ALREADY_USED is now raised if the bind name or position is already binded to the statement
        * With the bind mode by position, provided bind indexes <= 0  and > OCI_BIND_MAX will cause an error OCI_ERR_OUT_OF_BOUNDS

      - Extended binds/registers limits :
 
        * OCI implements the SQL returning clause through binds operations
        * OCILIB wraps the result of the returning clause within OCI_Resultet object but has to use internal binds to create its resultset
        * Prior to v3.1.0, OCI_BIND_MAX (default 512) was the maximum of OCI_Bindxxx() including OCI_Registerxxx() that an OCI_Statement could handle
        * With v3.1.0, OCILIB can handle OCI_BIND_MAX user binds handle and OCI_BIND_MAX items in the returning clause

    * Fixed Unicode support for Unixes platforms

        * Unicode support for platforms with 4 bytes wchar_t was broken
        * Fixed configure script was setting bad charset macros
        * Fixed some internal buffer expansion functions

    * Miscellaneous public modifications

      - Added OCI_IsNull2()
      - Added OCI_ResultsetGetStatement()
      - Added OCI_BindArrayOfColls()
      - Added OCI_GetDataLength()
  
      - Added functions to retrieve OCI_Schema object from various OCILIB object bases on Oracle object type :

        * Added OCI_ObjectGetSchema()
        * Added OCI_CollGetSchema()
        * Added OCI_RefGetSchema()

      - Added runtime information about OCILIB builds modes :

        * Added OCI_GetImportMode()
        * Added OCI_GetCharsetMetaData()
        * Added OCI_GetCharsetUserData()

      - On Oracle versions >= 11g, OCILIB now sets the client driver layer name information

        * Value set to the constant OCILIB_DRIVER_NAME (by default "OCILIB") 
        * It is recorded in the system views V$SESSION_CONNECT_INFO and GV$SESSION_CONNECT_INFO

      - Modified ocilib demo to properly support MinGw and unix based unicode console output

    * Miscellaneous internal modifications

      - Added internal reference counter to OCI_Schema object 

        * Some OCILIB objects keep a pointer to some OCI_schema objects
        * If OCI_SchemaFree() was called, these objects were holding a reference to a freed block of memory and then accessing this reference could cause a segfault
        * Now OCI_SchemaFree() only frees an schema object if its reference counter is zero.
       
    * Miscellaneous fixes

      - OCI_FetchPrev() was returning FALSE if called directly after OCI_FetchLast() on resulsets with less then OCI_FETCH_SIZE rows (default set to 20)
      - if OCI_FetchXXX calls were returning FALSE, internal error flag was wrongly set to TRUE and OCI_GetLastError() could return a previous OCI_Error handle
      - OCI_Fetchxxx() functions could return TRUE even if the given SQL statement had some SQL conversion function that failed (like to_date(), etc..)
      - OCI_Getxxx() functions could cause a segfault called before any OCI_Fetchxxx() calls 
      - OCI_IsConnected() was always returning FALSE since v3.0.0
      - OCI_SchemaGet() with OCI_SCHEMA_TABLE was causing an ORA-24328 with Oracle 8 and 9 (working fine with Oracle 10) since v3.0.0
      - OCI_Execute() could raise an ORA-01483 if an OCI_Timestamp handle of type OCI_TIMESTAMP, initialized with OCI_TimestampSysTimeStamp() only, was binded to the statement
      - Fixed OCI_TimestampIntervalAdd() and OCI_TimestampIntervalSub() that might have raised errors with OCI_Timestamp handles of type OCI_TIMESTAMP
      - Fixed some preprocessor directives in oci_loader.h
      - Fixed OCI_Object reusability: internal sub object could not be freed when fetching next object and thus lead to memory leaks
      - Since v3.0.0, fetching LONG column with OCI_LONG_IMPLICIT mode was truncating data to its half length in Unicode and Mixed Builds 
      - Fixed some preprocessor directives for MinGw support
      - Fixed runtime loading of oracle libs that might have not worked if the provided OCI library location ended with an existing slash
      - Fixed internal OCI_CopyString() that might caused some troubles in Unicode builds 
      - Fixed some internal wrong arrays size used for memory allocation
      - Fixed some OCI_Date and OCI_Timestamp decode functions to work properly on big-endian platforms
      - Fixed string binding on mixed charset build iwth Oracle 8i
      - since v3.0.0, OCILIB source compilation was broken for oracle 8i
      - Fixed demo file output.c

2008-10-17 Version 3.0.1 Vincent Rogier vince.rogier@gmail.com

    * Miscellaneous fixes

      - Added checks (OCI_ERR_MIN_VALUE) on len parameter (len >=1) of OCI_LobRead(), OCI_LobApend(), OCI_LobWrite(), OCI_FileRead()
      - Compilation of ocilib source with MSCV6++ was broken (vsnprintf was not defined to _vsnprintf anymore)
      - Memory leak : internal bind data allocated for handling PL/SQL tables was never freed 
      - Memory leak : internal OCI_Elem object used by OCI_Coll was never freed
      - Memory leak : since v3.0.0,  OCI_Statement internal stored SQL command string was not freed anymore
      - Scrollable cursors : executing a non select query on a scrollable statement was causing an oracle error

    * The library has been re-tested with various test suites under valgrind to check memory handling and it is now clean !

2008-10-13 Version 3.0.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for scrollable cursors

      - See section in the documentation (page <module>, section <Fetching data>)
      - Added OCI_FetchPrev()
      - Added OCI_FetchLast()
      - Added OCI_FetchFirst()
      - Added OCI_FetchSeek()
      - Added OCI_SetFetchMode()
      - Added OCI_GetFetchMode()
      - Added OCI_GetCurrentRow()

    * Added support for Collection types : VARRAYs and NESTED TABLES

      - Added section in the documentation (page <module> - section <Oracle Collections (Varrays and Nested Tables)>)
      - Added type OCI_Coll
      - Added type OCI_Iter
      - Added type OCI_Elem
      - Added OCI_CollCreate()
      - Added OCI_CollFree()
      - Added OCI_CollAssign()
      - Added OCI_CollGetType()
      - Added OCI_CollGetMax()
      - Added OCI_CollGetSize()
      - Added OCI_CollTrim()
      - Added OCI_CollGetAt()
      - Added OCI_CollSetAt()
      - Added OCI_CollAppend()
      - Added OCI_BindColl()
      - Added OCI_GetColl()
      - Added OCI_GetColl2()
      - Added OCI_ObjectGetColl()
      - Added OCI_HandleGetColl()
      - Added OCI_IterCreate()
      - Added OCI_IterFree()
      - Added OCI_IterGetNext()
      - Added OCI_IterGetPrev()
      - Added OCI_ElemCreate()
      - Added OCI_ElemFree() 
      - Added OCI_ElemGetShort()
      - Added OCI_ElemGetUnsignedShort()
      - Added OCI_ElemGetInt()
      - Added OCI_ElemGetUnsignedInt()
      - Added OCI_ElemGetBigInt()
      - Added OCI_ElemGetUnsignedBigInt()
      - Added OCI_ElemGetDouble()
      - Added OCI_ElemGetString()
      - Added OCI_ElemGetRaw()
      - Added OCI_ElemGetDate()
      - Added OCI_ElemGetTimeStamp()
      - Added OCI_ElemGetInterval()
      - Added OCI_ElemGetLob()
      - Added OCI_ElemGetFile()
      - Added OCI_ElemGetObject()
      - Added OCI_ElemGetColl()
      - Added OCI_ElemSetShort()
      - Added OCI_ElemSetUnsignedShort()
      - Added OCI_ElemSetInt()
      - Added OCI_ElemSetUnsignedInt()
      - Added OCI_ElemSetBigInt()
      - Added OCI_ElemSetUnsignedBigInt()
      - Added OCI_ElemSetDouble()
      - Added OCI_ElemSetString()
      - Added OCI_ElemSetRaw()
      - Added OCI_ElemSetNull()
      - Added OCI_ElemIsNull()    
      
    * Massive Library rewrite:

      - Update OCILIB Full Name from "OCILIB (C Wrapper for Oracle OCI)" to "OCILIB - C Driver for Oracle"
      - Split OCILIB main source file into 30 source files
      - All public and internal functions have been partially / largely reorganized / rewritten  
      - Miscellaneous code optimization, enhancement and cleanup
      - OCILIB source code compilation procudes zero warnings with highest warning settings of GCC and Microsoft C compiler
      - Note for GCC builds :

        * OCILIB static/shared libs are now bigger because of the split sources and the autotools default CFLAG set to "-g -02"
        * Stripping the library (using the command strip) will make it 3 times smaller.

      - Standardization of functions implementation:
      
        * 1 - Checks
        * 2 - Function code
        * 3 - thread error status (optionnal)
        * 4 - Single exit point
        
      - OCILIB main header file (ocilib.h) moved from folder ./src to folder ./include. 

        - For MS windows users, do not forget to update your compiler/IDE settings for include paths
 
    * Extended error handling

      - Updated section in the documentation (page <module>, section <Error handling>)
      - Major rewrite for the internal error handling code
      - Added support for thread contextual error handling
      
        * New Flag OCI_ENV_CONTEXT for OCI_Initialize()
        * Added OCI_GetLastError()
        
      - Enforced input parameter checking
      - Added OCI_GetSqlErrorPos() to retrieve the position error in a SQL statement
      - Now, OCILIB calls guaranties to raise an error in any situation where it should instead of just returning to caller as it was doing before
      - Added some Memory checking:

        * OCILIB now keeps counts of all internal allocated OCI handles, descriptors and objects
        * OCI_Cleanup() will throw an error in case of unfreed OCI object and returns FALSE
     
      - Modified return values for OCi_ErrorGetType() :
      
        * OCI_ERR_ORACLE : OCI calls error, SQL errors, ...
        * OCI_ERR_OCILIB : internal OCILIB and application logic errors
        
      - New exceptions are raised:
      
        * OCI_ERR_NONE                : "No error"
        * OCI_ERR_NOT_INITIALIZED     : "OCILIB has not been initialized"
        * OCI_ERR_LOADING_SHARED_LIB  : "Cannot load OCI shared library (%lib_name%)"
        * OCI_ERR_LOADING_SYMBOLS     : "Cannot load OCI symbols from shared library"
        * OCI_ERR_MULTITHREADED       : "OCILIB has not been initialized in multithreaded mode"
        * OCI_ERR_MEMORY              : "Memory allocation failure (type %type_name%, size : %block_size%)"  
        * OCI_ERR_NOT_AVAILABLE       : "Feature not available (%feature_name%) "
        * OCI_ERR_NULL_POINTER        : "A null %type_name% has been provided"
        * OCI_ERR_NOT_SUPPORTED       : "Oracle datatype not supported (sqlcode %oracle_code%) " (currently only REFs are not supported)
        * OCI_ERR_PARSE_TOKEN         : "Unknown identifier %token% while parsing SQL"
        * OCI_ERR_MAP_ARGUMENT        : "Unknown argument %arg_code% while retreiving data"
        * OCI_ERR_OUT_OF_BOUNDS       : "Index %value% out of bounds. Must be between %min% and %max%"
        * OCI_ERR_UNFREED_DATA        : "Found %nb% unfreed %data_type%"
        * OCI_ERR_MAX_BIND            : "Maximum number of binds (%limit%) already reached" (currently 512)
        * OCI_ERR_ATTR_NOT_FOUND      : "Object attribute '%name%' not found"
        * OCI_ERR_MIN_VALUE           : "The integer parameter value must be at least %min%"
        * OCI_ERR_NOT_COMPATIBLE      : "Elements are not compatibles (type 1 = %typecode1%, type 2 = %typecode2%)"
        * OCI_ERR_STMT_STATE          : "Unable to perform this operation on a %stmt_state% statement"
        * OCI_ERR_STMT_NOT_SCROLLABLE : "The statement is not scrollable"

      - The exception OCI_ERR_NOT_INITIALIZED is only available with OCI_GetLastError(), even 
        if OCI_ENV_CONTEXT is not used with OCI_Initialize(), and is raised when calling OCI_XXXXCreate()
        to allocate OCILIB handles before any call to OCI_Initialize()

    * Extended implicit datatype conversions

      - Added OCI_SetDefaultFormatNumeric()
      - Added OCI_GetDefaultFormatNumeric()
      - Added OCI_SetDefaultFormatDate()
      - Added OCI_GetDefaultFormatDate()
      - Modified OCI_SetFormatDate() and OCI_GetFormatDate() that now are macro for compatibility with older code
      - Added support for implicit conversion:

        * String columns can be retrieved as numeric data
        * OCI_GetString() and OCI_GetString() can return string data whatever the real type of the column (except for Object, Collection and Cursor based columns)

    * Improved internal numeric datatypes handling

      - Modified : public OCILIB datatype OCI_CDT_INTEGER and OCI_CDT_DOUBLE has been replaced by one datatype : OCI_CDT_NUMERIC
      - Modified : Now, all fetched numeric columns are internally mapped to OCINumber OCI type and to public type OCI_CDT_NUMERIC
      - Modified : Much cleaner, compact an easier code for handling OCI_GetXXXX() calls for all numeric types
                    
    * Extended Date, timestamp and interval support

      - Added OCI_TimestampGetDateTime()
      - Added checks for securing input integer pointer :

        * OCI_DateGetTime(), OCI_DateGetDate(), OCI_DateGetDateTime()
        * OCI_TimestampGetTime(), OCI_TimestampGetDate(), OCI_TimestampGetDateTime(), OCI_TimestampGetTimeZoneOffset()
        * OCI_IntervalGetDaySecond(), OCI_IntervalGetYearMonth()

    * Extended OCILIB documentation that has been updated and some precisions has been added:

      - Added    : page <module> - section <PL/SQL support> with new code examples
      - Added    : page <module> - section <Collections (Varrays and Nested Tables> with new code examples
      - Extended : page <module> - section <Error handling> for thread contextual error handling
      - Extended : page <module> - section <Fetching data> for scrollable cursors and string conversions
      - Extended : page <module> - section <Library objects and datatypes>) for supported datatypes
      - Updated  : page <module> - section <Charset support>
      - Modified : page <module> - section <Build Options> content moved to page <module> - section <Installing OCILIB>
      - Updated  : miscellaneous changes
         
    * Miscellaneous changes

      - Modified : up to 110 various functions prototypes have been modified to change the type of the return value or some parameters from int -> unsigned int
      - Modified : OCI_GetResultset() returns now the first resultset if it exists instead of creating a new one
      - Modified : OCI_SetNull() and OCI_SetNullAtPos() : now indexes and positions start at 1
      - Modified : OCI_BIND_MAX (maximum number of binds for a statement) is now 512 by default instead of 256
      - Modified : OCI_BindArraySetSize() : param nbelem type modified from 'int' to 'unsigned int'
      - Modified : OCI_HashGetEntry() : now indexes and positions start at 1
      - Modified : Rearranged internal structures to respect alignment and avoid padding
      - Modified : OCI_HashGetEntry() : now indexes and positions start at 1
      - Modified : return value in case of failure for OCI_TransactionGetMode() [OCI_ERROR->OCI_UNKNOWN] and OCI_TransactionGetTimeout() [OCI_ERROR -> 0]
      - Modified : OCI_GetColumnXXX() calls are now renamed to OCI_ColumnGetXXX() and old prototypes are maintained as macros for backward compatibility
      - Added    : OCI_StatementGetConnection()
      - Added    : OCI_ColumnGetSchema()
      - Added    : OCI_ColumnGetSubType()
      - Added    : support for MSVC6++/unicodes builds

        * Inclusion of wchar.h is now done in extern C++ block for MSVC6++ and cpp applications
        * swprintf() is mapped to _snwprintf() because VC6 C-library is not ISO C compliant
 
    * Fixed some Connection pools problems
 
      - Fixed : Connection pools : every call to OCI_ConnPoolGetConnection() was allocating internal data instead of using existing ones.
      - Fixed : Memory leak : internal connection transaction handle was never freed
      - Fixed : OCI_ConnPoolCreate() : parameter 'incr_con' was not used (value '1' used instead)

    * Fixed some PL/SQL table problems
 
      - Fixed : PL/SQL table pure IN binds was causing PL/SQL error when the table parameters was accessed by PL/SQL procedures
      - Fixed : Passing the value 1 for array size in PL/SQL tables binds caused an ORA-06550
  
    * Fixed Oracle Long fetching

      - Segmentation fault was happening if a select contained a LONG column + other columns
      - Unnecessary reallocation of internal LONG buffers was done at every internal fetch call (by default every 20 rows)
      - When using OCI_LONG_IMPLICIT (LONG mapped to VARCHAR), strings returned by OCI_GetString() might not have their final null character
       
    * Modified GNU configure scripts

      - Added    : For GNU builds added configure option --with-custom-loader for platforms that are not using '-ldl' (if using option --with-oracle-linkage=runtime)
      - Fixed    : Some configure options were broken
      - Modified : Added some checks and some outputs

    * Miscellaneous fixes

      - Fixed : Replaced any references of 'long' C type with 'int' C types in unix wchar internal conversion functions (on 64bits platforms, 
                sizeof(long) is 8 bytes so it lead to some buffer bad alignment)
      - Fixed : Second parameter 'ptm' of OCI_DateToCTime() and OCI_TimestampToCTime() was not mandatory as it should have been
      - Fixed : Unicode buffer conversion : Internal OCI_StringLength() could not work properly on some architectures
      - Fixed : Binding 64bits integers was not working properly (wrong internal flags)
      - Fixed : OCI_ObjectGetShort() and OCI_ObjectGetUnsignedShort() were missing in ocilib.c
      - Fixed : the header "limits.h" was not included in ocilib.h and on some configurations the support of 'long long' could not be detected
      - Fixed : CLOBs read/writes on OCILIB Unix/Unicode builds could not work properly (wrong buffer passed to OCI)
      - Fixed : OCI_SetUserData() was not exported
      - Fixed : return value of the declaration of OCI_GetVersionConnection() was wrong (boolean instead of unsigned int)
      - Fixed : OCI_ServerEnableOutput() and OCI_ServerDisableOutput() prototypes did not have the OCI_API call convention (for MS builds)
      - Fixed : OCI_ObjectGetString() prototype was returning wrong type 'mtext *' instead of 'dtext *'

    * Updated main demo application

      - Added : Example for scrollable cursors and collections (varrays and nested tables)
      - Fixed : some bad cast could lead buffer bad filling in mixed charset build

    * Fixed Mixed charset builds (OCI_CHARSET_MIXED ONLY)

      - Fixed : OCI_ObjectGetString() and OCI_ObjectSetString() were misunderstanding string buffers
      - Fixed : OCI_ServerEnableOutput() was not allocating enough memory to hold output buffer lines
      - Info  : OCILIB functions using the OCI functions OCIStringPtr() and OCIStringAssignText() have a limitation on mixed charset builds :

        * In mixed builds, OCILIB Strings (dtext *) used for handling user data are wchar_t strings, but the underlying OCI API 
          understands theses strings as not unicode but ansi or other encoding 
        * So, there is now, when building OCILIB with OCI_CHARSET_MIXED, an internal conversion to/from ANSI data when using :
          
          - OCI_ObjectGetString() and OCI_ObjectSetString()
          - OCI_ElemGetString() and OCI_ElemSetString()

2008-07-24 Version 2.5.1 Vincent Rogier vince.rogier@gmail.com

    * Fixed : OCILIB builds with Runtime loading of OCI shared library activated

      - Loading dynamically OCIMutexXXX() functions was broken with v2.5.0
      - Runtime loading of the OCI shared library on Unix-like platforms was broken with v2.5.0

    * Fixed Unicode builds: 

      - Binding C Unicode strings (wchar_t *) to PL/SQL tables of char/varchar was throwing an PLS-00418 error 
      - The internal buffer expansion (for Unix-like platforms where wchar_t is 4 bytes) could mess up the data for arrays of string binds
      - OCI_ConnPoolGetConnection() could return NULL with an Oracle 8i client if OCILIB was built with an OCI version >= 8 or with OCI_IMPORT_RUNTIME option

2008-07-21 Version 2.5.0 Vincent Rogier vince.rogier@gmail.com

    * Added support for PL/SQL tables (PL/SQL arrays)

      - Bind (input, output) C arrays to PL/SQL using OCI_BindArrayOfxxx() functions
      - All the OCI_BindArrayOfxxx() functions take now an extra param : the size of the array for PL/PL/SQL table
      - For regular array interface bind, pass 0 for the array size which is set by OCI_BindArraySetSize() 

    * Extended Date, timestamp and interval support

      - Added OCI_DateGetDateTime()
      - Added OCI_DateSetDateTime()
      - Added support for converting C types (time_t, tm) to/from OCI_Date and OCI_Timestamp :

        * Added OCI_DateFromCTime()
        * Added OCI_DateToCTime()
        * Added OCI_TimestampFromCTime()
        * Added OCI_TimestampToCTime()

      - Date, timestamp and interval can now be create outside a database connection:
            
        * To create a connection independent object, pass a NULL OCI_Connection pointer to OCI_DateCreate(), OCI_TimestampCreate() and OCI_intervalCreate() functions
        * Keep in mind that using a connection pointer is still recommended because it is checking that the server is able to handle these datatypes

      - Fixed OCI_TimestampIntervalAdd(), OCI_TimestampIntervalSub() : 

        * If the timestamps type was not OCI_TIMESTAMP_TZ, an error occured
        * Now, these functions changes the timestamps types for OCI raw call and set it back before returning
        * Possible bug OCI -> Investigating with Oracle support 

    * Extended OCI_Connection handle attributes

      - Added OCI_IsConnected()
      - Added OCI_SetUserData()
      - Added OCI_GetUserData()

    * Added Support for retrieving server output

      - Added OCI_ServerEnableOutput()
      - Added OCI_ServerDisableOutput()
      - Added OCI_ServerGetOutput()

    * Added Support for OCI Threadkeys
     
      - Thread Keys are kind of process wide variable identified by an string identifier with thread specific values
      - See section in the documentation (page <module>, section <Threads and mutexes>)
      - Added OCI_ThreadKeyCreate()
      - Added OCI_ThreadKeyGetValue()
      - Added OCI_ThreadKeySetValue()

    * Extended runtime loading of Oracle shared libs on various Unix-like systems

      - Added support for Mac OSX (handling 'dylib' lib extension)
      - Added support for some HP/UX platforms (handling 'sl' lib extension)
      - Modified dl_open() flags for AIX and HP/UX
      - Modified configure script for Oracle shared Client library detection

    * Added Support for Oracle Instant Client on Unix-like systems

      - See section in the documentation (page <module>, section <Installation>)
      - Added configure option : --with-oracle-headers-path
      - Added configure option : --with-oracle-lib-path

    * Extended OCILIB documentation:

      - Added "Installation" page
      - All examples have been checked, updated, corrected and extended
      - All examples are now provided as full programs sources code

    * Added more demo source code

      - 26 full application sources codes are now provided in the ocilib/demo directory
      - Theses application examples are now integrated in the OCILIB documentation
 
    * Misc:

      - Added const qualifier to return values of OCI_HandleXXX() calls
      - Fixed parameter checking in some OCI_ObjectXXX() calls

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()