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