forked from vrogier/ocilib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChangeLog
2516 lines (1922 loc) · 126 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
2015-05-05 Version 4.1.0 Vincent Rogier [email protected]
* C API
- Major library code update:
* All public functions entry and exit points have been rewritten in order to satisfy requirements of the OCI_ENV_CONTEXT environment flag
* Fixed some functions that were not setting context result properly when using OCI_ENV_CONTEXT flag
* various internal code updates and minor fixes
* OCI_EnableWarnings() and OCI_SetErrorHandler() are now return a boolean values
* Factorized internal OCILIB objects clean up in various places
- Enhanced implicit string conversion for Date, Timestamps and Numeric values
* Conversion formats can be now set at both library and connection level
- The library is using its own default format if none are set
- Program can define formats at library level
- Program can define formats for a specific connection
* It is now possible define specific conversion formats for:
- OCI_Date
- OCI_Timestamp
- All Numeric types
- Binary double
- Binary float
* Added new methods:
- OCI_SetFormat()
- OCI_GetFormat()
* Removed the following methods that are now defined as macros for backward compatibility reasons:
- OCI_SetDefaultFormatDate()
- OCI_GetDefaultFormatDate()
- OCI_SetDefaultFormatNumeric()
- OCI_GetDefaultFormatNumeric()
- Fixes
* Fixed compilation under oracle 11gR1 caused by wrong oracle version checking in the file pool.c
* Fixed few warnings raised by Clang C compiler
* Fixed Binary Float implicit conversion to string when using Oracle 12g
* Fixed UTF8 strings bytes size computing when passing them to Oracle client
* Fixed binding double and float when Oracle client >= 10.1 and Oracle Server < 10.1 (usage of binary_double and binray_float supported by the client from 10gR1 but not supported by Oracle 8i and 9i)
* Fixed memory leak in internal method OCI_StringFromStringPtr() used in OCI_ElemGetString() and OCI_ObjectGetString()
* Fixed possible memory retention related to OCI Object cache (depending on the Oracle Client version)
- Warning : Programs must be recompiled (with no code change needed) as some methods have been removed from the library
* C++ API
- Enhancements
* Added abstract Streamable class:
- It allows derived classes to be compatible with any external stream class supporting the operator << (std::(w)string)
- The following classes derives now from Streamable : Date, Interval, Timestamp, Collection, Object and Reference
* Added Support for the enhancements made to the string conversion format in the C API:
- Added Enum FormatType
- Added Environment::GetFormat() and Environment::SetFormat()
- Added Connection::GetFormat() and Connection::SetFormat()
- Removed Connection::SetDefaultDateFormat() and Connection::GetDefaultDateFormat()
- Removed Connection::SetDefaultNumericFormat() and Connection::GetDefaultNumericFormat()
* Added support for Clang C++ compiler
* Statement::Bind<>(): Added specializations for Collection and std::vector<Collection<T>> instead of relying on default the implementation that is now removed
* Added parametrized constructors for Date, Interval and Timestamp classes
* Made sure that translation from C raw buffer to the C++ Raw class does not fail in case of NULL buffers with non zero size parameter
* Modified internal access to environment singleton object instance
* Added enum values for Oracle Versions
* Added new template methods to Resultset class
- Get<T1, T2>() : template method allowing to return a user defined type from a resultset current row content using a translator user defined method/functor/lambda (e.g. return an user defined struct/class from a select on a table)
- ForEach<T1>() : convenient method wrapping the while(rs.Next)) pattern and that call the an user defined method/functor/lambda for each row fetched
- ForEach<T1, T2>() : version of ForEach<T1> and Get<T1, T2> combined
- See the updated main demo application for examples
* Added template methods Statement::Execute() and Statement::ExecutePrepared():
- theses overloaded methods can take fetch callbacks and also datatype adater callbacks
- It makes the code much compact as it hides the resultset fetch calls
- It also allow adapting resultsets returned values to user defined types
- See the updated main demo application for examples
* Added Resultset::Get<>() overloads with input value arguments to fill instead of returning values. This allow to no specify the data type in the Get<>() call.
- void Get(unsigned int, TDataType &value) const
- void Get(const ostring &name, TDataType &value) const;
- Changes:
* Exception class does not derive any more from HandleHolder<>
* Date::SysDate() is now a static method that returns a now a Date Object with system date time
* Timestamp::SysTimestamp() is now a static method that returns a now a Timestamp Object with system timestamp
* Renamed Statement::Execute(void) to ExecutePrepared(void)
* Added default constructors for classes holding datatypes.
- Using the default constructor, we have objects holding no C handles -
- Their IsNull() properties return is true.
- They can now be stored in structures and classes without the need of passing parameters
- Their initialization can be deferred from declaration using function return values or using their class constructor with class name
- Fixes
* Fixed missing operator "|" for recently Enum promoted to Flags
* Fixed HandleHolder<>::operator bool
* Fixed Statement::Prepare() and Statement::Execute() : when called again for the same object, the internal map of binds was not cleared although bind objects were freed, leading to a segfault
* Fixed Statement::Bind<ostring> : strings binded to statements with Out or InOut direction mode had their content padded up to max provided size after execution
* Fixed C++03 standard violation : Removed usage of std::vector::data() that was introduced in C++11 in order to be compliant with C++03
* Fixed Timestamp::SetDate()
* Removed unimplemented prototype Lob<TLobObjectType>:: operator TLobObjectType()
* Fixed segfault when Environment::Initialize() fails to load the oci shared library
- C++ compilers validated versions:
* Microsoft C++ compiler : all versions from Visual Studio 2008
* GCC : all versions from 4.1
* Clang : all versions from 3.1
* OCILIB++ shall also compile with older versions of these compilers and with other C++ compilers, but not tested
- Miscellaneous
* Internal code clean up
* Updated some demo files
2015-01-13 Version 4.0.1 Vincent Rogier [email protected]
* C API
- Fixed OCI_ObjectGetXXX() and OCI_ObjectSetXXX() : internal access to some field members could cause segfaults with complex object types having deep nested objects
- Fixed possible segfaults in OCI_Execute() when string input binds are used in Unicode build on Unix platforms if the bind direction is not explicitly set
- Added error type OCI_ERR_ARG_INVALID_VALUE
- Input arguments handled as unsigned int value that correspond to a set of possible value are now checked.
- If the provided value does not fit within the set of expected values, an error is raised
- Factorised some internal code using new methods OCI_ExternalSubTypeToSQLType() and OCI_ExternalSubTypeToSQLType()
- Replaced some TAB occurrences with spaces
- Internal code cleanup and refactoring
- Internal minor code changes to remove GCC warnings with all possible paranoid options activated.
- Fixed internal macro OCI_CHECK_STMT_STATUS that had been wrongly modified in previous some refactoring
* C++ API
- Some Enum<> definitions where promoted to Flags<>
- Fixed possible race condition in internal smart pointer members access in multithreaded applications
- Fixed Statement::Bind<ostring>() : inadequate memory allocation parameter in BindAdaptor class constructor initialization
- Fixed access violation in Pool object destructor when a global Pool object is not explicitly closed and destructor called after Environment::Cleanup()
- Code refactoring and enhancements
* Miscellaneous
- Update Copyright to 2015
- Fixed some typos in some files
2014-12-10 Version 4.0.0 Vincent Rogier [email protected]
* Introducing new C++ API
- Full C API ported to C++
- Implemented as a small set of header files, no library compilation needed
- Based on C++ and STL paradigms (Strong typing, templates, containers, RAII, exception handling, operators, stack objects)
- Based on design patterns (RAII, delegation, reference counting, smart pointers, proxies, singleton)
- No user dynamic object allocation required
- The only dependences are : STL and OCILIB C API
* Extended C API
- Removed support for OCI_CHARSET_MIXED
- This charset mode was introduced in early versions of OCILIB in order to support Unicode Data binding and fetching for Oracle8i that does not support full Unicode
- It introduced high complexity in OCILIB code and had been source a bugs
- This releases removes its support and now, OCILIB charset handling is much simplier
- Thus OCILIB still support :
- All Oracle versions : OCI_CHARSET_ANSI => ANSI/UTF8 strings (char* )
- Oracle 9i and above : OCI_CHARSET_WIDE => UTF16/UTF32 strings (wchar_t *)
- Added Support for some Oracle 12cR1 new features:
- Added support for "PL/SQL Implicit Results"
- No API changes, internal code updates
- Added demo file
- Added Support for "Identity columns" :
- Added OCI_ColumnGetPropertyFlags()
- Collections:
- Added OCI_CollDeleteElem()
- Added OCI_CollGetCount()
- Added OCI_IterGetCurrent()
- Fixed OCI_IterGetPrev() and OCI_IterGetNext() : Last error flag for OCI_GetLastError() was wrongly set if it returned FALSE
- Fixed OCI_ElemGetRaw() : possible segfault could happen
- Fixed OCI_ElemSetNull() : it was not setting correctly the element indicator for collections of objects
- Renamed some methods:
- OCI_CollGetAt() to OCI_CollGetElem()
- OCI_CollGetAt2() to OCI_CollGetElem2()
- OCI_CollSetAt() to OCI_CollSetElem().
- Note that older method names are still supported using #define for backward compatibility reasons
- Connection/Session Pools:
- Fixed OCI_PoolGetConnection() that could return NULL connection handles (particularly when program is using OCI_PoolGetOpenedCount())
- Removed connection pooling emulation for Oracle 8i
- Refactored Oracle pooling implementation (code is now simpler and much more robust)
- Unicode builds:
- Fixed LONG data type fetching when using Unicode builds on Unix/Linux platforms. Returned strings could have extraneous trailing characters
- Fixed Buffer overwrite in OCI_LobRead2() in Unicode builds
- Strings conversions:
- Added OCI_ObjectToText()
- Added OCI_CollToText()
- Extended OCI_GetString() : supports now all types
- Extended OCI_ObjectGetString() : supports now all types
- Miscellaneous additions:
- Added OCI_IsRebindingAllowed()
- Added OCI_TypeInfoGetConnection()
- Added OCI_SubscriptionGetConnection()
- Added OCI_BindSetNotNullAtPos()
- Added OCI_BindSetNotNull()
- Added OCI_GetBindIndex()
- Added OCI_ObjectGetRawSize()
- Added OCI_ElemGetRawSize()
- Added OCI_LobGetConnection()
- Added OCI_FileGetConnection()
- Added compile time (OCI_IMPORT_LINKAGE) and runtime (OCI_IMPORT_RUNTIME) detection of OCI shared library version for Oracle 12cR1
- Added new error code OCI_ERR_ITEM_NOT_FOUND
- Added VS 2013 solutions
- Important code refactoring
- Miscellaneous fixes:
- Fixed OCI_ObjectGetObject() that could cause segfault when an object had 2 members of object type on a row
- Fixed OCI_IntervalAdd() and OCI_IntervalSubstract() that were not performing OCI calls due to wrong return code initialization
- Fixed NULL lob handle input checking in OCI_LobWrite() and OCI_LobWrite2()
- Fixed OCI_PoolGetConnection() prototype : added const qualifier on tag argument
- Fixed memory usage of internal arrays (for numeric, text and raw types) when using OCI_BAM_INTERNAL bind allocation mode. Memory was not freed when the statement was freed but only at OCI_Cleanup() time.
- Fixed segfault in OCI_HashCreate() if internal memory allocation failed
- SQL warnings occurring in OCI_ExecuteXXX() calls were not propagated correctly to the global error handler and couldn't be retrieved with OCI_GetLastError() in OCI_ENV_CONTEXT mode
- Fixed runtime (OCI_IMPORT_RUNTIME) detection of OCI shared library version for Oracle 11gR2 that was reported as OCI 11gR1
- Fixed segfault if a statement was executing more than once SQL statement with a "returning clause" (since statement cache support). It was due to an nice bug in the OCI client !
- Fixed OCI_BindSetNull() : if called prior executing an insert statement that had OCI_Object handles binded to it, objects content were inserted in the DB instead of NUL
- Fixed OCI_TimestampGetTimeZoneOffset() : returned offsets may have unattended values if negative
- Fixed OCI_TypeInfoGet() that was failing if :
- object had been created with case sensitivity (e.g. using quotes)
- object were related to the PUBLIC role
2013-03-04 Version 3.12.1 Vincent Rogier [email protected]
* Fixed Unicode support (OCI_CHARSET_WIDE and OCI_CHARSET_MIXED)
- Unix plaftorms : Fixed OCI_LongWrite() for OCI_CLONG type : string may wrongly be inserted into DB
- Unix plaftorms : Fixed OCI_LongRead() for OCI_CLONG type : strings may contain trailing garbage data
- Unix plaftorms : Fixed OCI_LobRead2() for OCI_CLOB type : strings may contain trailing garbage data
- Unix plaftorms : Fixed OCI_GetString() : strings may be truncated
- All platforms : Fixed OCI_GetString() : when column is number based, the string resulting from number conversion may have trailing dot or comma
* Miscellaneous fixes
- Reduced size of buffers used to store string column data when nls_lang is UTF8
- Fixed error variable checking in internal call OCI_DirPathArrayToStream()
* Miscellaneous changes
- Update all files Copyright strings to current year (2013)
2013-02-07 Version 3.12.0 Vincent Rogier [email protected]
* Added support for lob prefetching introduced in 11gR1
- Added OCI_GetDefaultLobPrefetchSize()
- Added OCI_SetDefaultLobPrefetchSize()
* Enhanced Direct Path API
- Added OCI_DirPathSetConvertMode() that gives the ability to force direct path conversions
- Modified OCI_DirPathGetErrorRow() and OCI_DirPathGetErrorColumn() behavior that can return all erred rows/columns after a conversion or load operation
- Added direct path demo file dirpath_complete.c
- Updated documentation
* Fixed Direct Path API
- Fixed direct path logic when stream buffer are too small (OCI_DirPathConvert() returning OCI_DRP_FULL)
- Fixed direct path logic when conversion and loading errors occur
- Fixed OCI_DirPathConvert() that support now resuming conversion when an error occurs by fixing values and calling OCI_DirPathConvert() again in default mode (in previous releases duplicated rows were inserted in database)
- Fixed OCI_DirPathGetErrorRow() and OCI_DirPathGetErrorColumn() that returned zero based row/column indexes instead of being 1 based row/column indexes
- Fixed OCI_DirPathSetEntry() : Setting NULL values on column that had decimal/date format throwed an Oracle error
* Fixed Oracle Streams AQ (Advanced Queues) asynchrounous notifications :
- Fixed possible race condition in OCI_DequeueSubscribe() that could cause to have the internal callback called before the user callback was assigned to the dequeue object
* Fixed numeric/ string conversions :
- Fixed OCI_GetInt(), OCI_GetShort(), OCI_GetBigInt() and unsigned versions when the column type was string based (bug in string/number conversion introduced in v3.11.0)
* Miscellaneous fixes :
- Fixed wrong column buffer size computation for strings, rowids and longs when using OCI_CHARSET_WIDE or OCI_CHARSET_MIXED on unixes platforms
2012-12-19 Version 3.11.1 Vincent Rogier [email protected]
* Fixed broken support for Oracle Database Change notifications
- Fixed OCI_SubscriptionRegister() : Previous version 3.11.0 introduced a bug in subscription registration
* OCILIB Thanks file was missing in 3.11.0 packages. It is reintroduced within this release.
2012-12-12 Version 3.11.0 Vincent Rogier [email protected]
* Extended Oracle Streams AQ (Advanced Queues) support :
- Added support for asynchrounous notifications (Petr Vanek proposal) :
- Added OCI_DequeueSubscribe()
- Added OCI_DequeueUnsubscribe()
- Added demo file queue_async.c
* Fixed And Enhhanced support of BINARY FLOAT and BINARY DOUBLE types :
- Updated OCI_GetDouble(), OCI_GetDouble2(), OCI_GetFloat(), OCI_GetFloat2() :
- In previous releases, BINARY FLOAT and BINARY DOUBLE were fetched as NUMBER and locally converted to native double and float types using Oracle Client API
- With this release, BINARY FLOAT and BINARY DOUBLE are directly fetched as native double and float types
- BINARY FLOAT and BINARY DOUBLE were not supported in Oracle Objects and Oracle Collections (TYPES, VARRAYs and NESTED TABLES)
- In previous releases, segfaults could happen when manipulating objects with BINARY FLOAT and BINARY DOUBLE members or collections of BINARY FLOAT and BINARY DOUBLE
- With this release, BINARY FLOAT and BINARY DOUBLE are fully supported within OCI_Elem and OCI_Object
- Updated OCI_BindDouble(), OCI_BindArrayOfDoubles(), OCI_BindFloat(), OCI_BindArrayOfFloats()
- If the Oracle client supports BINARY FLOAT and BINARY DOUBLE types (Oracle 10g and above), host double and float variables are binding as BINARY FLOAT and BINARY DOUBLE instead of NUMBER.
- This prevent the Oracle client from performing internal conversions.
- Enhanced String conversions :
- When OCILIB has to convert BINARY DOUBLE values to/from strings, it now supports the double type full range of values.
- OCILIB uses now the C runtime to perform BINARY DOUBLE and BINARY FLOAT conversions to/from strings as the Oracle Client API cannot handle the full double datatype wihtin its string conversion API
* Miscellaneous changes :
- OCI_GetString() : Conversion from numeric types has been rewritten, much cleaner code now
- Internal numeric types handling (conversions between numeric types, to/from strings) has been rewritten
- Miscellaneous code updates : OCILIB source code has been tested against various code analysis tools
- Documentation updates
- Added pkgconfig support for Unixes/Linux platforms (thanks to Petr Vanek)
* Miscellaneous fixes :
- OCI_GetBatchErrorCount() always returned 0
- OCI_FileGetDirectory() did not set error flag for OCI_GetLastError()
- OCI_ElemGetRaw() was setting error flag to TRUE in all cases for OCI_GetLastError()
- OCI_PoolGetStatementCacheSize() was setting error flag to FALSE in all cases for OCI_GetLastError()
- OCI_LobRead() and OCI_LobRead2() : In OCI_CHARSET_WIDE and OCI_CHARSET_MIXED builds, values could be truncated with Oracle clients 8i and 9i only
- OCI_LobWrite2() and OCI_LobAppend2() : returned byte count may not been accurate for CLOB when using OCI_CHARSET_WIDE or OCI_CHARSET_MIXED builds
- OCI_ColumnGetCharUsed() : Attribute introduced in Oracle 9.2 but OCILIB tried to retrieve it from Oracle 9.0 as well
- OCI_ConnectionFree() could generate a segfault on a reused connection retrieved from a connection pool since version 3.10.0
- OCI_TypeInfoGet() could generate a segfault in OCI_CHARSET_WIDE builds when a table/view column or object member was an Oracle Type (Object and Collection)
- OCI_xxxFmt() calls : Timestamp arguments were not formatted correctly (missing quotes in the formatted SQL)
- Scrollable Statements :
- An Oracle error (ORA-01001 or ORA-01002) was thrown when fetching a statement (PL/SQL Cursor or Nested table) that was returned by a select statement that contained more thant one column
- This happened only if the statement was retrieved from a scrollable statement using array fetching (internal OCILIB default behavior)
- This is an Oracle bug and a workaround has been found
- Now, OCILIB internally sets the resultset internal array size to 1 and thus ignore any values set using OCI_SetFetchSize() for such statements
* Modified Prebuilt MS Windows binaries
- Official Windows OCILIB Binaries are now built using MS C compiler optimization capabilities (compiler remains MS Visual Studio 2010 Express) :
- Full optimization compiler flag (/Ox)
- Whole program optimization flag (/GL)
2012-08-08 Version 3.10.0 Vincent Rogier [email protected]
* Added support for native C float datatype :
- Added OCI_GetFloat()
- Added OCI_GetFloat2()
- Added OCI_BindFloat()
- Added OCI_BindArrayOfFloats()
- Added OCI_RegisterFloat()
- Added OCI_ElemGetFloat()
- Added OCI_ElemSetFloat()
- Added OCI_ObjectGetFloat()
- Added OCI_ObjectSetFloat()
- Added constant OCI_ARG_FLOAT
- Added constant OCI_NUM_FLOAT
- Use the input identifier '%g' for OCI_StmtxxxxFmt() calls when passing float variables
- Updated demo application to use float datatype
* Fixed OCI_IntervalArrayCreate() : wrong internal handle type caused the function to fail to allocate the array with the right interval type
2012-06-29 Version 3.9.4 Vincent Rogier [email protected]
* Miscellaneous fixes
- Connection and Session Pools : Fixed few bugs related to OCILIB automatic adaptation to runtime client versions and features that could lead OCI_PoolGetConnection() to return NULL
- Statement cache was not properly activated when feature was available
- OCI_PoolGetStatementCacheSize() : an error was raised as an invalid internal oci attibute code was used
- Fixed broken compilation support for Oracle 8i and 9i clients on unix platforms when oracle shared lib import mode is OCI_IMPORT_LINKAGE
- Oracle 11g : OCILIB driver name could not be properly set in the view V$SESSION_CONNECT_INFO
- Oracle XA :
- Unix platforms : No change, XA is supported for all Oracle Clients >= 8i
- MS Windows Platforms :
* When using the Dlls provided in OCILIB releases, XA wis now enabled only if the Oracle client loaded at runtime has XA symbols embedded in oci.dll (usually >= Oracle 10g)
* When compiling yourself OCILIB, support is enabled only with Oracle Client 10g and above as on MS Windows, for 8i and 9i, specific import libraries are used and can be missing in some installations
* So when XA is not enabled, using the flag OCI_SESSION_XA with OCI_ConnectionCreate() will now throw an exception
* Miscellaneous changes
- default transaction behavior :
- Prior to v3.9.4, a default transaction object was created in OCI_ConnectionCreate() and associated to the returned connection object.
- From v3.9.4
* No changes for regular standalone transactions and transactions retrieved from connection pool.
* For XA connections and connections retrieved from session pool, no transaction object is created anymore and thus, OCI_GetTransaction() will return NULL for newly created connections.
* Note that transaction objects must not be set to connections retrieved from a session pool or to XA connections
* For other types of connections (regular or retrieved from connection pool), transaction objects can be used as normal
- Various internal minor code change
- Note that all sources files have been updated to include year 2012 in the copyright section
2011-12-05 Version 3.9.3 Vincent Rogier [email protected]
* Miscellaneous fixes
- Fixed broken support for Oracle 8i client since v3.9.0
- Fixed OCI_ObjectSetObject() : a bug had been introduced in v3.8.1 when computing internal object structure offsets and paddings
- Fixed OCI_LobRead(), OCI_LobRead2() : in OCI_CHARSET_WIDE charset builds only, a segfault could happen caused by an internal buffer overwrite
- Fixed OCI_SetStatementCacheSize(), OCI_GetStatementCacheSize() : an error ORA-24315 (with no incidence) could be thrown by some versions of Oracle clients
- Fixed OCI_BindXXX() : All binding methods returned TRUE instead of FALSE when an exception OCI_ERR_MAX_BIND occured
- Fixed OCI_GetString() : an error OCI-22061 was happening when the column was numeric and a user defined numeric format where provided with OCI_SetDefaultFormatNumeric()
- Fixed OCI_GetServerRevisionVersion() : it was returned the same value as OCI_GetServerMajorVersion() since v3.4.0
- Fixed internal method OCI_ParseSqlFmt() used in OCI_xxxFmt() calls : Quoted strings were not properly output since v3.9.0
- Fixed internal allocation mode :
- some OCI_BindXXX() calls were not compatible with OCI_BAM_INTERNAL allocation mode and when used with it, were causing segfaults if the host variable parameter was NULL
- now these methods raise an OCI_ERR_NULL_POINTER error if the host variable parameter is NULL and the statement bind allocation mode is set to OCI_BAM_INTERNAL
* Miscellaneous changes
- OCILIB library compilation
- Modified compile time detection of OCI client version when using OCI_IMPORT_LINKAGE as Oracle backported some defines introduced at version (X) in patches for version (X-1) !
- OCILIB documentation
- Updated Bind allocation mode description : added list of incompatible OCI_BindXXX() methods
- Added OCI_BAM_INTERNAL compatibility information in all OCI_BindXXX calls() documentation
- Added OCI_ENV_EVENTS requirements for subscriptions and HA methods
- Minor changes
- few code internal minor changes
- Removed in each OCILIB source file, the version number and date time (updated at each new release, using diff tools was a nigthmare !)
2011-07-13 Version 3.9.2 Vincent Rogier [email protected]
* Miscellaneous fixes
- Detection of the 'long long' type on unix/linux platforms is now working as expected in all situations
- version 3.9.0 broke support of Oracle client versions < 10g when using OCI import mode OCI_IMPORT_LINKAGE (default option on unix/linux platforms)
2011-07-08 Version 3.9.1 Vincent Rogier [email protected]
* Miscellaneous fixes
- Fixed OCI_BindString() : version 3.9.0 introduced a memory leak when using this method
- Fixed OCI_IsNull() : version 3.7.0 introduced a bug when OCI_IsNull() was called for OCI_CDT_OBJECT columns. It always returned FALSE
- Fixed OCI_GetStruct() : version 3.7.0 introduced a bug (same as above) that caused the indicator array parameter filled with wrong indicator values for OCI_CDT_OBJECT columns
- Fixed use of "Returning into" SQL clause : version 3.9.0 broke re-execution of a prepared statment that contains a "returning into" sql clause
2011-04-20 Version 3.9.0 Vincent Rogier [email protected]
* Added support Oracle XA
- Oracle XA integration in OCLIB is transparent by using OCI_ConnectionCreate() and requires just :
- an XA db name for parameter 'db'
- an extra flag OCI_SESSION_XA for parametrer 'mode'
- no user or password
- See the OCI_ConnectionCreate() documentation for the XA open string needed by OCILIB to pass to the TMP
* Added support for statement cache
- Statement cache is now automatically enabled when using an Oracle client >= 9iR2
- Added statement cache size customization when using an Oracle client >= 10gR1 :
- Added OCI_SetStatementCacheSize()
- Added OCI_GetStatementCacheSize()
- Added OCI_PoolSetStatementCacheSize()
- Added OCI_PoolGetStatementCacheSize()
* Added support for TAF (Transparent Application Failover) and HA (High availabality)
- The following handler has been added when using an Oracle client >= 10gR2
- Added OCI_IsTAFCapable()
- Added OCI_SetTAFHandler()
- Added OCI_SetHAHandler()
* Added support for Connection attributes introduced in Oracle 10gR2
- Added OCI_GetDBName()
- Added OCI_GetInstanceName()
- Added OCI_GetServiceName()
- Added OCI_GetServerName()
- Added OCI_GetDomainName()
- Added OCI_GetInstanceStartTime()
* Improved bind tuning. Now it is possible to set the bind direction mode (in, out, in/out) for slightly better performance
- Added OCI_BindSetDirection()
- Added OCI_BindGetDirection()
* Miscellaneous new calls :
- Added OCI_Describe() and OCI_DescribeFmt() to enable the retrieving of an OCI_Resultset object for 'select' statement wihtout exectuing the SQL
* Miscellaneous changes :
- Reenforced checks on OCI_Statement handle related methods that checks the statement state (prepared, executed, parsed,...) that now can throw more exceptions
- Updated layout of some internal structure to supress unnecessary padding
- Manual update of source code formatted with Uncrustify (wrong indentation of preprocessor directives)
- User callbacks were not correctly documented
- Updated Doxygen version used to generate the documentation (update in the output html style)
* Miscellaneous fixes :
- Fixed Binding call using the binding mode OCI_BAM_INTERNAL :
- arrays of Lobs, Files, Intervals and timestamps : internal objects were not properly initialized
- big_int : single bind and array bind were incorrectly implemented (allocation size wrongly computed that lead to a segfault for arrays)
- strings :
- single binds : if the length parameter was set to 0, a segfault happened
- Wide strings : if the native Oracle Unicode used a different size than the C runtime for wchar_t (like unix like system) translation were not performed by OCILIB
- Fixed 11Gr2 compile time detection when using OCI_IMPORT_LINKAGE (default on Unix platform)
- Fixed OCI_ImmediateFmt() : the method returned FALSE even on success
- Fixed OCI_PoolGetConnection() : OCILIB tried to set the driver name attribute (appeared in 10gR2) on the session that is not allowed anymore in 11g
- Fixed OCI_SetFormatDate() macro : fixed macros parameters declaration
- Fixed OCI_ColumnGetNullable() returned value
- Fixed OCI_ConnectionCreate() : 2 OCI handles not freed if connection failed
- Fixed OCI_SetPrefetchSize(), OCI_SetPrefetchMemory() : the given value was not really passed to Oracle
- Fixed OCI_TypeInfoGet() called internally when fetching object owned by a different schema
- Fixed OCI_Parse() : the method was internally doing a describe operation instead of just a parse (which gave same results from an end user view)
- Fixed OCI_LobAssign() that was not handling correclty Lob arrays created with OCI_LobArrayCreate()
- Fixed OCI_BindDouble() and OCI_BindArrayOfDoubles() : internal sub numeric type OCI_NUM_DOUBLE was not set on the bind handle
- Fixed OCI_StringGetFromAttrHandle() allocation of insuffucient buffer in unicode mode
- Fixed OCI_ObjectSetxxx() could return true if attribute not found
- Fixed Queues function in OCI_CHARSET_MIXED mode
2010-12-13 Version 3.8.1 Vincent Rogier [email protected]
* Miscellaneous fixes
- Fixed internal computation of OCI_Object attributes null indicator offsets
- Fixed OCI_Elem handle initialization by OCI_CollGetAt() and OCI_CollGetAt2()
- Fixed OCI_Ping() : OCI symbol OCIPing() was not dynamically loaded if OCI_IMPORT_RUNTIME was used (default for precompiled MS Windows Dlls)
- Fixed OCI_ConnectionCreate() : in case of an unsuccessfull attempt to create a connection, an OCI internal handle was not freed since v3.7.0 (-> memory leak)
- Fixed OCI_LongWrite() + OCI_CHARSET_WIDE charset mode : internal length passed to internal OCI calls was expressed in chars instead of bytes
- Fixed OCI_TypeInfoGet() + OCI_TYF_TYPE : an Oracle error was raised when passing as type name a builtin system type like "SYS.RAW"
- Fixed OCI_GetLastError() that could return NULL when errors occured in OCI_FetchXXX() calls (although the global error handler was correctly fired)
- Fixed OCI_DequeueGet() : a segfault happened if the queue payload was of type RAW
- Fixed OCI_DequeueFree() : internal structure member that hold the value set by OCI_DequeueSetConsumer() was not freed (memory leak)
- Fixed OCI_MsgFree() : internal message ID allocated at enqueue time by OCI_EnqueuePut() was not freed (memory leak)
- Fixed OCI_IterFree() : internal OCI_Elem handle was not freed for local collections resulting a small memory leak
- Fixed OCI_EnqueuePut() and OCI_DequeueGet() : possible memory leak on Unix platforms + OCI_CHARSET_WIDE/OCI_CHARSET_MIXED charset mode
- Fixed OCI_DequeueFree() : Internal OCI_Msg handle deallocation forgot to deallocate internal message ID resulting a small memory leak
- Fixed OCI_SetPassword() and OCI_SetUserPassword() : in OCI_CHARSET_WIDE and OCI_CHARSET_MIXED builds, theses functions failed to change the password
- Fixed OCI_LobRead2() and OCI_LobWrite2() that could block when using UTF8 through NLS_LANG environment variable
- Fixed OCI_GetStruct() : structure padding was not handled properly
- Fixed internal allocation of ROWID and UROWID internal buffers when using UTF8 through NLS_LANG environment variable
* Miscellaneous changes
- Added Exception type OCI_ERR_REBIND_BAD_DATATYPE if a rebinding call attempts to bind a datatype different than the initial one
- Updated documentation about datatypes for rebinding
- Added support for numeric subtypes in OCI_BindGetSubtype() + documentation update
- Manual update of source code formatted with Uncrustify (wrong indentation of witch case and some variable initialization)
- Pre built MS Windows 32/64bits Dlls are now built using MS Visual Studio 2010 Express (instead of MS Visual Studio 2008 Professional)
- A MS Visual Studio 2010 Express solution and project has been added to the Windows package to rebuild the Dlls
2010-10-24 Version 3.8.0 Vincent Rogier [email protected]
* Added support for Oracle Streams AQ (Advanced Queues)
- See section in the documentation (page <module>, section <Oracle Advanced Queues (A/Q)>)
- Added demo file queue.c
- Added type OCI_Msg
- Added type OCI_Agent
- Added type OCI_Enqueue
- Added type OCI_Dequeue
- Added OCI_MsgCreate()
- Added OCI_MsgFree()
- Added OCI_MsgReset()
- Added OCI_MsgSetObject()
- Added OCI_MsgGetObject()
- Added OCI_MsgGetRaw()
- Added OCI_MsgSetRaw()
- Added OCI_MsgGetAttemptCount()
- Added OCI_MsgSetEnqueueDelay()
- Added OCI_MsgGetEnqueueTime()
- Added OCI_MsgGetExpiration()
- Added OCI_MsgSetExpiration()
- Added OCI_MsgGetState()
- Added OCI_MsgGetPriority()
- Added OCI_MsgSetPriority()
- Added OCI_MsgGetID()
- Added OCI_MsgGetOriginalID()
- Added OCI_MsgSetOriginalID()
- Added OCI_MsgGetSender()
- Added OCI_MsgSetSender()
- Added OCI_MsgSetConsumers()
- Added OCI_MsgGetCorrelation()
- Added OCI_MsgSetCorrelation()
- Added OCI_MsgSetExceptionQueue()
- Added OCI_MsgGetExceptionQueue()
- Added OCI_EnqueueCreate()
- Added OCI_EnqueueFree()
- Added OCI_EnqueuePut()
- Added OCI_EnqueueSetSequenceDeviation()
- Added OCI_EnqueueGetSequenceDeviation()
- Added OCI_EnqueueSetVisibility()
- Added OCI_EnqueueGetVisibility()
- Added OCI_EnqueueSetRelativeMsgID()
- Added OCI_EnqueueGetRelativeMsgID()
- Added OCI_DequeueCreate()
- Added OCI_DequeueFree()
- Added OCI_DequeueGet()
- Added OCI_DequeueSetConsumer()
- Added OCI_DequeueGetConsumer()
- Added OCI_DequeueSetCorrelation()
- Added OCI_DequeueGetCorrelation()
- Added OCI_DequeueSetRelativeMsgID()
- Added OCI_DequeueGetRelativeMsgID()
- Added OCI_DequeueSetVisibility()
- Added OCI_DequeueGetVisibility()
- Added OCI_DequeueSetMode()
- Added OCI_DequeueGetMode
- Added OCI_DequeueSetNavigation()
- Added OCI_DequeueGetNavigation()
- Added OCI_DequeueSetWaitTime()
- Added OCI_DequeueGetWaitTime()
- Added OCI_DequeueListen()
- Added OCI_DequeueSetAgentList()
- Added OCI_AgentCreate()
- Added OCI_AgentFree()
- Added OCI_AgentSetName()
- Added OCI_AgentGetName()
- Added OCI_AgentSetAddress()
- Added OCI_AgentGetAddress()
- Added OCI_QueueCreate()
- Added OCI_QueueAlter()
- Added OCI_QueueDrop()
- Added OCI_QueueStart()
- Added OCI_QueueStop()
- Added OCI_QueueTableCreate()
- Added OCI_QueueTableAlter()
- Added OCI_QueueTableDrop()
- Added OCI_QueueTablePurge()
- Added OCI_QueueTableMigrate()
* Added support for SQL parsing only
- Added OCI_Parse()
- Added OCI_ParseFmt()
* Miscellaneous changes
- All OCILIB source files have been reformatted using uncrustify (best source code formatter ever tried !!)
- Source code max line length have been modified (80 -> 100 characters)
* Miscellaneous fixes
- Fixed memory leak : if an OCI_Bindxxx() returned FALSE (eg. non present binds in the sql statment), the newly internal allocated bind object was not freed
- Fixed possible segfault in OCI_Cleanup() if OCI_SubscriptionRegister() had been previouly called call unsuccessfully
- Fixed internal array allocation when using OCI_ArraySetSize() called many times on the same prepared SQL statement
- Fixed OCI_ElemGetTimeStamp() and OCI_ElemGetInterval() when collections are retreived from the server
- Fixed possible segfault in OCI_TimestampFromCTime() and OCI_TimestampFromCTime() if the libc function localtime() returns a NULL tm structure pointer
- Fixed OCI_GetSessionTag() linkage : the function was internally named OCI_GetSessionData() instead of OCI_GetSessionTag() in connection.c
- Fixed binding of date arrays : the introduction of OCI_XXXArrayCreate() in v3.6.0 has introduced a bug in dates array binding that would cause to pass NULL data for some elements of the array
- Fixed some API naming inconstancy (lower/upper case)
- OCI_ElemGetTimeStamp() renamed to OCI_ElemGetTimestamp()
- OCI_ObjectGetTimeStamp() renamed to OCI_ObjectGetTimestamp()
- OCI_TimestampSysTimeStamp() renamed to OCI_TimestampSysTimestamp()
- Macros have been added for backward compatibility
- Existing programs must be recompiled (in order to use this new version of ocilib) with no code change (as compatibility macros are provided)
2010-07-26 Version 3.7.0 Vincent Rogier [email protected]
* Added support for Session Pools
- Added support for Oracle Session pools :
- This features has beed introduced in Oracle 9.2
- For Oracle clients < 9.2, sessions are handled as regular connection pools
- Renamed type OCI_ConnPool to OCI_Pool
- Renamed all OCI_ConnPooXXX() calls to OCI_PoolXXX()
- Added macros that maps old OCI_ConnPoolXXX() prototypes to OCI_PoolXXX() functions
- Added new parameter 'type' to OCI_PoolCreate(). Possible values are
- OCI_POOL_CONNECTION : creates a connection pool
- OCI_POOL_SESSION : creates a session pool
- Added support for session pool tagging:
- Added OCI_GetSessionTag()
- Added OCI_SetSessionTag()
- Added new parameter 'tag' to OCI_PoolGetConnection()
- Updated documentation:
- Renamed page <module>, section <Connection pooling> to <Oracle pooling>
- Added Information about session pooling
* Extended fetch interface
- Added OCI_GetStruct()
- Added OCI_SetStructNumericType()
- Added demo file fetch_struct.c
* 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 [email protected]
* 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 : [email protected]
- contact and information : [email protected]
2010-02-03 Version 3.5.1 Vincent Rogier [email protected]
* 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 [email protected]
* 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 [email protected]
* 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 [email protected]
* 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