-
Notifications
You must be signed in to change notification settings - Fork 122
/
Copy pathChangeLog
3330 lines (2531 loc) · 173 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
2025-01-14 Version 4.7.7 Vincent Rogier vince.rogier@ocilib.net
* Enhancements (C API)
- Oracle XMLTYPE is now partially supported
* Added OCI_XmlType* data type (OCI_CDT_XMLTYPE) that can only be fetched from resultets in this current release
* OCI_ColumnGetType() reports "XMLTYPE" as SQL type
* OCI_TypeInfoGet() returns a valid OCI_TypeInfo handle for the type name "SYS.XMLTYPE"
* OCI_GetString() returns a string representation of a XMLTYPE object
* Added the following new APIs:
- OCI_GetXmlType()
- OCI_GetXmlType2()
- OCI_XmlTypeToText()
* In this current release, use OCI_GetString() instead of OCI_GetXmlType() as:
- OCI_XmlType handles can only be used to getting XML content strings, which is already done by OCI_GetString()
- In later releases, OCI_XmlType API will evolve to support local xml object creation, DOM manipulation, SQL binding
* Enhancements (C++ API)
- Oracle XMLTYPE is now partially supported:
* Added ocilib::XmlType class (that can only be retrieved using ocilib::Resultset::Get<ocilib::XmlType>())
* ocilib::Resultset::Get<ostring>() returns a string representation of the XMLTYPE object
- Added Interval::GetNanoSeconds() and Interval::SetNanoSeconds()
* Fixes (C API)
- Issue 329: OCI_GetSqlIdentifier() returns invalid values for Scrollable Statements when called more than once
- Issue 332: OCI_TypeInfoGet() : since v4.7.4, in case of failure, OCI_TypeInfo object is not removed from OCI_Connection internal list of OCI_TypeInfo objects
- Issue 331: Strange behaviour with XMLTYPE
- Issue 332: OCI_TypeInfoGet() : In case of failure, newly created OCI_TypeInfo object is not removed from OCI_Connection internal cache
- Issue 333: OCI_GetServerMajorVersion() returns wrong values for Oracle Server version < 18.1
- Issue 334: OCI_RefToText() return garbage when charset is OCI_CHARSET_WIDE
- Issue 347: OCI_MsgGetEnqueueTime() leaked DateTime handle causing OCI_Cleanup() reporting unfreed handle
- Issue 348: OCI_EventGetObject() might returned garbage character after object name
- Issue 354: OCI_ElemSetRaw() performed wrong check on element datatype
- Issue 361: Fixed HA event callback processing
* Fixes (C++ API)
- Issue 351: C++ Value types perform handle assignment instead of value assignment
- Issue 355: Since v4.7.5, connection acquired from ocilib::Pool where not released, leading to pool exhaustion
- Issue 362: Calling Environment::Initialize() / Environment::Cleanup() multiple times per process might lead to segfaults with latest embedded vc143 runtime
* Documentation
- Issue 352 : Fixed documentation for OCI_PoolGetNoWait and ocilib::Pool::SetNoWait()
- Issue 363 : Fixed documentation for OCI_IntervalGetDaySecond() and OCI_IntervalSetDaySecond(), Interval::GetDaySecond() and GetSaySecond()
2023-02-08 Version 4.7.6 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue 326: OCI_GetTimeout() always returns 0 since v4.7.0
* Fixes (C++ API)
- Issue 325: ocilib::Lob::GetConnection() does not compile anymore since v4.7.5
2023-02-06 Version 4.7.5 Vincent Rogier vince.rogier@ocilib.net
* Changes (C API)
- OCI_Cleanup() now returns FALSE if OCI_Initialize() has not been called
- OCI_GetSQLVerb() handles some new verbs added with Oracle 21c
- OCI_Execute() and related methods return now FALSE and report an OCI_Error for PL/SQL statements raising PL/SQL no_data_found exceptions
* This revert behavior introduced in v4.3.1 for addressing issue #68
* Motivation is to re-align on SQL*Plus behavior
- OCI_GetOCIRuntimeVersion() and OCI_GetOCICompileVersion() returned integer values on 6 digits instead of 4 digits
* Handles now minor version using 2 digits (e.g. Oracle OCI version 19.16.0)
* Use macros OCI_VER_MAJ, OCI_VER_MIN, OCI_VER_REV and OCI_VER_MAKE to do computations on versions
- Very old Oracle OCI 8.0.x is now supported
- Up to now, OCILIB supported all Oracle versions from 8.1
- Oracle 8.0 is now also supported for very old legacy systems (as Oracle 8.0 was released in mid 90's)
- As OCI multi-threaded APIs were only available from 8.1, passing OCI_ENV_THREADED to OCI_Initialize() with Oracle 8.0 will generate an error:
- OCILIB Error code : OCI_ERR_NOT_AVAILABLE
- OCILIB Error message : "Feature not available (Oracle 8.1 multihreading support)"
* Fixes (C API)
- Issue 297: Library compilation fails with MSVC 2022 version 17.2 (error C2220)
- Issue 298: OCI_DirPathLoad() can never returns in case of internal load errors (infinite loop)
- Issue 308: OCI_Execute() raises error OCI-22060 when binding host big_int variables with OCI_BDM_OUT in case the SQL or PL/SQL engine sets a NULL value
- Issue 309: OCI_Execute() does not raise exceptions when executing PL/SQL statement raising no data was found PL/SQL exception
- Issue 313: OCI_GetString() returns NULL for CLOB columns is the CLOB row value was filled with empty_clob()
- Issue 314: OCI_BindSetCharsetForm() is not accessible since v4.7.0
- ISsue 316: OCI_DequeueGet() returns messages with OCI_Object payloads that can have NULL properties while being NOT NULL when queued
- ISsue 323: OCI_SubscriptionRegister() generates a segfault on failure
* Fixes (C++ API)
- Issue 299: Performance issues with C++ API in multi-threaded environments
- Issue 306: Compile error under GCC when accessing an ocilib::Collection item
* Miscellaneous
- Updated compilers for MS Windows prebuilt binaries to VS2022 17.4.4
- Internal code changes / refactoring
- Some documentation updates
- Added more tests in tests suite
- Fixed ocilib C demo makefile : compilation could failed on some Linux environments
2021-11-30 Version 4.7.4 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue 291: OCI_DirPathGetErrorRow() always return 0 since v4.7.0
- Issue 284: OCI_MsgGetID() returns a NULL ID after being queued with OCI_DequeuePut()
- Issue 288: OCI_GetString() returns null on implicit conversion of a RAW value when it's longer than 64 bytes
- Issue 283: OCI_DequeueGet() returns null pointer when message has empty payload
- Issue 282: PL/SQL Server output wrong internal buffer size on some oracle versions
- Issue 281: ORA-00931 in OCI_TypeInfoGet() when using SYS.RAW type
* Fixes (C++ API)
- Issue 272: AddressSanitizer reports mismatched new[] vs delete
- Issue 278: ocilib::Object causes Segmentation fault
* Miscellaneous
- Updated compilers for MS Windows prebuilt binaries
* VS2022 17.0.1 for 32/64 bit DLLs
* VC runtime (statically linked) updated from vc142 to vc143
2021-03-09 Version 4.7.3 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue 251: OCI_ErrorGetMessage() returns invalid messages when OCILIB is build with OCI_CHARSET_WIDE on linux/unix platforms
- Issue 252: Incorrect OCILIB client driver layer namein V$SESSION_CONNECT_INFO and GV$SESSION_CONNECT_INFO when OCILIB is build with OCI_CHARSET_WIDE on linux/unix platforms
- Issue 253: Error occured at OcilibLobFree: ORA-01403: no data found
- Issue 258: OCI_SubscriptionRegister() returns always NULL since v4.7.0
- Issue 264: Fetched UROWIDs (IOT Table ROWIDs) values are truncated
- Issue 268: OCI_DirPathSetColumn() forwards parameter 'maxsize' as unsigned short to Oracle client leading to data truncation
* Fixes (C++ API)
- Issue 250: Exception handling when using OCI_CHARSET_WIDE
- Issue 262: Using correct delete[] in ManagedBuffer destructor
* Miscellaneous
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.9.0 for 32/64 bit DLLs
* VC runtime (statically linked) updated from vc141_xp to vc142
* Note: Windows XP is not supported anymore due to the runtime update
- Reduced some ocilib structures size by removing some paddings (especially in 64bits)
- Added a makefile to build the C++ demo (Makefile_demo_cpp) that is also now installed with the C demo Makefile
- OCILIB Test suite is now ported to Linux/Unix platforms
* Test suite is now provided in ocilib-x.y.z-gnu.tar.gz distribution archives and installed by 'make install' among documentation and demo (typically in /usr/local/share/doc/ocilib/tests)
* To build the test suite:
- Modify the db credentials in ocilib_tests.h
- Use Makefile_tests (it depends on google test that must be installed prior building the test suite)
2020-11-10 Version 4.7.2 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue 247: When using a OCI_Timestamp object created with OCI_TIMESTAMP_TZ flags, some OCILIB timestamps methods might raise an OCI_ERR_NULL_POINTER error
- Issue 248: For Oracle client version < 11g, version 4.7.0 broke the ability to fetch data from resultset containing specific datatypes
- Fixed some Coverity code analysis findings (hypothetical issues never encountered)
* Miscellaneous
- Updated C API test suite
* Re-Ran successfully test suite with OCILIB compiled in 8i, 9i, 10g, 11g, 12c, 18c modes (ANSI and Unicode)
2020-10-27 Version 4.7.1 Vincent Rogier vince.rogier@ocilib.net
* Enhancements (C API)
- OCILIB internal and public symbols management
* For static library:
- All private symbols that can have local scope are now declared static
- All private non static symbols are now prefixed with "Ocilib" to avoid collisions
* For shared library:
- No change for Windows platform as __declspec(dllimport) and __declspec(dllexport) were already handled
- When using GNUC compatible compiler:
- all public symbols are now declared with __attribute__ ((visibility ("default")))
- all private symbols are now delcared with __attribute__ ((visibility ("hidden")))
- Configure script will automatically add the compiler flag "-fvisibility=hidden"
- OCILIB compiles now without any warnings when using GNUC with flags -Wall -Wextra -pedantic
* Fixes (C API)
- Issue 242: Fixed strings.h conflict with recent GCC versions
- Issue 243 : Fixed compiling ocilib directly from repository on non Windows systems (while using distribution archive was OK)
- Issue 245 : Fixed ocilib shared library symbols visibility (Linux/Unix)
* Changes (C API)
- Removed useless old macros for mapping lib C string function to ansi or wide char versions (ostrXXX)
- Removed symbols ocisprintf(), ocistrdup(), ocistrcasecmp(), ociwcsdup(), ociwcscasecmp() from OCILIB shared library
* Miscellaneous
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.7.6 for 32/64 bit DLLs
2020-07-16 Version 4.7.0 Vincent Rogier vince.rogier@ocilib.net
* Enhancements (C API)
- Library internal design changes (preparing v5.0.0)
* OCILIB code base has been layered in 2 distinct API layers:
- Internal API that has now its own separate design
- v4.7.0 internal API, while matching the public one in this version, has most of its methods renamed
- It will evolve differently, preparing new public APIs for future versions
- Public APIs exposing features to clients
- v4.7.0 is exposing the same public API as previous versions
- v5.0.0 will expose a different API
- Both will use same internal API
- Contextual error management enhancements
- As internal APIs cannot be called from outside the library, last error management has been simplified and improved
- Enhancements on internal methods implementation:
- Since v3.0.0 (back in 2008), OCILIB methods implementations are standardized to follow the same single exit point pattern
- Standardized entry point checks and exit points are based on extentive macros usage
- But the control flow was handled by a status variable leading to continuous and nested checks
- With 4.7.0, no more "if (STATUS) {...}" in the code.
- Instead, in case of errors, code directly jumps to exit points that can have cleanup code sections.
- See it as try {...} finally{...}
- Thus, code is now very sequential, much easier to read, with no nested error management/branching.
- Public headers reorganization:
* Broke up ocilib.h content into multiple headers located in /include/ocilibc/
* Broke up C++ headers content into multiple headers located in /include/ocilibcpp/
- Enhanced Error handing:
* Updated OCI_Cleanup(): if there are any unfreed allocated bytes by the library itself (e.g. OCILIB user objects not freed)
- it raises an error of type OCI_ERR_UNFREED_BYTES (with the amount of bytes in the error message)
- it completes cleanup and returns FALSE
* Added method OCI_ErrorGetLocation() to return the method name where the exception occured
* Updated method OCI_ErrorGetString() to return a string using the following format "Error occured at {Location}: {Description}"
* Fixes (C API)
- Issue 239: Fetching nclobs as strings return value in hexa format truncated values when nsl_lang is UTF8
- Issue 238: Fetching clobs as strings return truncated values when nsl_lang is UTF8
- Issue 236: Memory issue with OCI_BAM_INTERNAL and OCI_CDT_NUMERIC
- Fixed OCI_EnqueuePut() and OCI_DequeueGet() in OCI_CHARSET_WIDE charset mode (added a workaround for a known oracle client UTF16 bug)
- Fixed a minor memory leak when using implicit resultsets
* Fixes (C++ API)
- Issue 230: Memory leaks while rebinding vectors
* Miscellaneous
- Extended C API Test suite that has now a much wider coverage
2020-04-18 Version 4.6.4 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #222: Allow OCI_SESSION_SYSDBA for session pools
- Issue #225: Fixed some PL/SQL tables binding issues when statement is an anonymous PL/SQL block
- Issue #226: When NOT using OCI_ENV_CONTEXT environment flag, OCI_CollToText() andOCI_ObjectToText() failed if previous OCILIB call failed
- Issue #227: Enhanced performance when fetching Clobs as strings (for Oracle 11g and above)
* Miscellaneous (C API)
- Some performance improvements when converting Objects and Collections to strings
- Some performance improvements when calling OCI_GetString() on non strings columns
- Minor changes in code for addressing some code analysis hints (clang, resharper)
* Miscellaneous (C++ API)
- Enhanced Number class in C++ API:
* Restrict arithmetic operations on supported types only
* Arithmetic operations are also now supported between Number objects
- Minor changes in code for addressing code analysis hints (clang, resharper)
- Updated C++ demo application
* Miscellaneous
- Updated documentation
- Updated all files Copyright to current year (2020)
- Updated compilers for MS Windows prebuilt binaries
* VS2019 16.5.3 for 32/64 bit DLLs
* Still targeting vc141_xp toolset for backward compatibility
2019-11-01 Version 4.6.3 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #207: Updated Oracle command codes that were not accurate
- Issue #213: Updated some version checks that were testing only for server version instead of testing both client and server versions
- Issue #216: Re-calling OCI_BindArraySetSize() with a smaller value than previous assignment led to segfaults when statement has non scalar type binds
- Issue #220: Implicit conversion Clob issue in OCI_GetString() when using UTF8 encoding
* Miscellaneous (C API)
- Issue #212: Added possible error codes for OCI_Initialize() in the documentation
- Issue #215: Added a workaround to correctly retrieve environment variables set at runtime using SetEnvironmentVariable() on Windows
2019-02-25 Version 4.6.2 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Fixed compile and run time Oracle version detection when Oracle version is >= 18.1
- Fixed OCI_SetTimeout() that was setting all timeouts with input value
- Fixed OCI_GetTimeout() that was returning OCI_NTO_CALL or OCI_NTO_RECEIVE value whatever requested timeout
- Added macro OCI_VER_MAKE to make an ocilib compliant oracle version from major, minor and revision versions (e.g. OCI_VER_MAKE(18,3,0) equals OCI_18_3)
- Updated Oracle versions constants
* Fixes (C++ API)
- Issue #197: Using C++ interface in multiple DLLs
2019-02-17 Version 4.6.1 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #188: Compile error with Oracle client 12.1 and option OCI_IMPORT_LINKAGE
- Issue #196: Warning 4996
- Issue #198: Compile Error with Oracle Client 12.2 and option OCI_ATTR_CALL_TIMEOUT
- Issue #199: Compile warnings on Oracle Client 12.2
* Fixes (C++ API)
- Issue #182: Cannot bind a std::vector as a PL/SQL Table (v4.6.0 fixed the issue only for 1st element of the vector)
- Issue #189: In/out binded vector<ostring> not updated after statement execution
- Issue #191: Reassigning SAME C handle to C++ a object leads to loose the content of the C handle
- Issue #192: Vectors of non scalar types binded as pure OUT binds are not updated after execution if vector element do not have their value set
- Issue #200: Compiler warning 4018 with 4.6.0
* Miscellaneous
- Updated compilers for MS Windows prebuilt binaries
* VS2017 15.9.7 for 32/64 bit DLLs
- Prebuilt static libraries built with TDM-GCC (Code::Blocks projects) are not shipped anymore
* Recent TDM- GCC versions produces executables that links statically against winpthreads
* This implies requirements and restrictions that motivated to remove prebuilt libs from ocilib releases
* Users can compile them using the provided Code::Blocks project
2018-11-21 Version 4.6.0 Vincent Rogier vince.rogier@ocilib.net
* Changes
- Enhanced Oracle 18c support
* Fixed Oracle minor and revision version when Oracle version >= 18c (due to breaking in OCI API)
* Added new version constants
- C API: added OCI_18_1, OCI_18_2, OCI_18_3
- C++ API: extended OracleVersionValues with Oracle18cR1, Oracle18cR2, Oracle18cR3
* Extended Column property flags:
- C API: extended OCI_ColumnGetPropertyFlags() with new flags OCI_CPF_IS_LPART and OCI_CPF_IS_CONID
- C++ API: extended PropertyFlagsValues enum with IsLogicalPartitioning and IsGeneratedByContainers
* Added the ability to retrieve the SQL_ID of an SQL statement:
- C API: added function OCI_GetSqlIdentifier()
- C++API: added function Statement::GetSqlIdentifier()
* Added the ability to find out if a CLOB/NCLOB/BLOB is remote
- C API: added function OCI_LobIsRemote()
- C++API: added function Lob<T, U>::IsRemote()
* Added network timeout management support
- C API: added functions OCI_SetTimeout() and OCI_GetTimeout()
- C API: added timeout types: OCI_NTO_SEND, OCI_NTO_RECEIVE, OCI_NTO_CALL
- C++ API: added functions Connection::SetTimeout() and Connection::GetTimeout()
- C++ API: added Connection::TimeoutTypeValues enum
- C++ API
* Added Environment::GetCharMaxSize()
* Fixes (C API)
- Fixed compilation with OCI_IMPORT_LINKAGE when compile time OCI version is OCI_8_1 or OCI_9_1 or OCI_9_2 (e.g. on Unix based system with very old Oracle clients)
* Fixes (C++ API)
- Issue #170: How to write a clob using utf-8 encoding charset
- Issue #181: Problem with utf-8 in LobNationalCharacter
- Issue #182: Cannot bind a std::vector as a PL/SQL Table
* Miscellaneous
- Issue #180 : Added workaround for OCI bug related to prefetching with Oracle 9i clients
- Updated compilers for MS Windows pre built binaries
* VS2017 15.9.1 for 32/64 bit DLLs
* Code::Blocks 17.12 (TDM-GCC 5.1.0) for 32 bit MinGW static libs
2018-09-13 Version 4.5.2 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #152: Wrong error reporting when calling OCI_Execute() on a non prepared statement
- Issue #153: OCI_GetSqlErrorPos() not working since v4.3.0
- Issue #158: OCI_IntervalCompare() always returns 0 (equality)
- Issue #159 (workaround for oracle Bug): OCI_TimestampAssign() returns ORA-00932 when timestamp type is OCI_DTYPE_TIMESTAMP_LTZ
- Issue #161: Current offset not updated when calling OCI_LobTruncate()
- Issue #162: OCI_RegisterObject() and OCI_RegisterRef() failure
- Issue #164: OCI_RefSetNull() fails if already null or if its underlying object has not been pinned
- OCI_IntervalArrayCreate() and OCI_TimestampArrayCreate() did not allow to create arrays if the connection handle was null
* Fixes (C++ API)
- Issue #155: ocilib::Date::operator inverted operator >= and <=
* Miscellaneous
- Updated compilers for MS Windows pre built binaries
* VS2017 15.8.3 for 32/64 bit DLLs
* Code::Blocks 17.12 (TDM-GCC 5.1.0) for 32 bit MinGW static libs
- Added Google Test suite for the C API
* Work In Progress
* VS2017 (only) project using Google test nugets
2018-02-21 Version 4.5.1 Vincent Rogier vince.rogier@ocilib.net
* Changes (C API)
- Updated driver information set by OCILIB since v3.1.0 (column CLIENT_DRIVER in V$SESSION_CONNECT_INFO)
* it is now including OCILIB version (e.g. "OCILIB : x.y.z" instead of "OCILIB")
- Extended OCI_SeTrace() and OCI_GetTrace():
* Added OCI_TRC_OPERATION: Name of the database operation set by the client application to be monitored (according Oracle docs)
* This value is stored the database in the column DBOP_NAME of the system view V$SQLMONITOR
* OCI_GetTrace() returns now NULL instead of an empty string if the given trace is not set or nullified
- Release Windows binaries are now built using VS 2017 15.5.6 (instead of VS2017 15.3.2)
* Fixes (C API)
- Driver information (introduced in Oracle 11gR1: was set by OCILIB if
- Oracle version >= 11gR1 for standalone connections and connections retrieved from connection pools
- Oracle version >= 11gR2 for connections retrieved from session pools
- Now it sets it correctly in all cases when Oracle version >= 11gR1
- Issue #141: OCIBindRaw() now accepts empty buffers (non null data with size = 0)
- Issue #142: OCI_GetStruct() was filling numeric fields with garbage values since v4.5.0
- Issue #143: OCI_SetTrace(): passing NULL values for clearing trace information leads to segfaults
- Issue #144: OCI_SetTrace(); If called at least once, it was causing small memory leak in OCI_ConnectionFree()
- Issue #145: Using OCI_BAM_INTERNAL for types using handles was leading to segfault when executing the statement
* Impacted types:OCI_Object, OCI_Lob, OCI_File, OCI_Timestamp, OCI_Interval, OCI_Ref and OCI_Collection
* Fixes (C++ API)
- Issue #141: ocilib::Statement::Bind<ocilib::Raw, unsigned int>() accepts now empty ocilib::Raw
* Miscellaneous
- OCILIB requires now C99 to be activated for compiling:
* When using autotools (Unixes): Enforcing C99 compiler flags using AC_PROG_CC_STDC() macro
* When using Visual Studio: OCILIB cannot be compiled anymore with VS2010 and earlier versions (released binaries use VS 2017)
* This was motivated for using variadic macros and allow variable declarations not only at beginning of blocks
- Addressed static code analysis hints and warnings
- Internal code refactoring and factorization
- Reduced cyclomatic complexity of some internal functions
* Some methods (connection logon/logoff, bindings) were far too long and had been decomposed and split in smaller ones
- Fixed demo an script files
2018-02-07 Version 4.5.0 Vincent Rogier vince.rogier@ocilib.net
* Enhancements (C and C++ API)
- Extended support for non final UTDs
* Added OCI_TypeInfoGetSuperType() and ocilib::TypeInfo::GetSuperType()
* Added OCI_TypeInfoIsFinalType() and ocilib::TypeInfo::IsFinalType()
* Added C and C++ demos about super types and sub types
* Fixes (C API)
- Issue #132, #133, #135: Fixed segfault while accessing to derived UTDs members (due to wrong members offset computation)
- Issue #134: OCI_ObjectToText() and OCI_CollToText() were mangling conversion errors leading OCI_GetLastError() to not report conversion errors
- Issue #136: OCI_RegisterSubscription() was not correctly setting port number if provided
- Issue #137: BINARY_DOUBLE and BINARY_FLOAT values could not be set or retrieved from OCI_Elem and OCI_Object
- Issue #139: OCI_ErrorGetInternalCode() may report wrong OCI_ERR_* value
* Miscellaneous
- Refactored internal numeric types conversions
- Removed usage of deprecated symbols
- Some code cleanup
2017-11-29 Version 4.4.1 Vincent Rogier vince.rogier@ocilib.net
* Enhancements (C API)
- Issue #116: OCI_ColumnGetFullSQLType() returns now [schema].[typename] for UDTs (instead of [typename] only
- Issue #122: Added default format OCI_FMT_TIMESTAMP_TZ when converting TIMESTAMP WITH TIMEZONE from/to strings
- Added OCI_CST_MERGE statement type
* Enhancements (C++ API)
- Added support for new methods and constants added in C API v4.4.0:
* Added Column::GetCollationID()
* Added CollationID enumeration
* Extended StatementType enumeration: added TypeMerge
* Extended SessionFlags values: Added SessionSysAsm, SessionSysBkp SessionSysDgD, SessionSysKmt, SessionSysRac, SessionPreAuth
* Fixes (C API)
- Issue #117 : Fixed segfault in OCI_StatementFree() when OCI_Objects were binded to a statement and nullified with OCI_BindSetNull()
- Issue #118 : Fixed OCI_NumberCompare() that was compare the first number with itself
- Issue #121 : Updated magic numbers (positive and negative infinity) handling in OCI_NumberToString() and OCI_NumberFromString()
- Issue #124 : OCI_DirPathSetColumn() might use a buffer to small to convert datetime/timestamp/interval values
* Miscellaneous
- Visual studio solutions/projects updates and cleanup
2017-10-25 Version 4.4.0 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #112: OCI_GetString behaves badly with empty LOBs
- Issue #104: XA connection open failed with ORA-12154
* Fixed broken support for XA connections
* Added 2 new error codes related to XA connections management (OCI_ERR_XA_ENV_FROM_STRING, OCI_ERR_XA_CONN_FROM_STRING)
- Issue #101: Wrong OCI_STRING_FORMAT_TIMESTAMP constant
- Fix for Oracle bug #9838993 workaround
* Version 4.2.1 introduced support for an experimental workaround for Oracle bug 9838993 (memory leak when using Unicode and re-preparing/executing same statement multiple times)
* This support was not always working as column names where sometimes not null terminated
* Enhancements (C API)
- OCI_Object: Supporting now non final object types
* if an OCI_Object instance real type is a sub type of its column object type, OCILIB is dynamically retrieving its real and right type instead of processing it as its base type
* Added missing synchronized access when iterating the list of existing OCI_TypeInfo in OCI_TypeInfoGet()
- Allocation Binding mode updates
* Added BindGetAllocationMode()
* updated OCI_GetBindAllocation() and OCI_SetBindAllocation() documentation to properly specify their usage
- Extended 12cR2 support:
* Increased identifier size to 128
* Added OCI_ColumnGetCollationID
* Added more Oracle Session Mode
- Refactored OCI_List implementation (Internal change
* No more access to OCI_List fields from other compilation units (encapsulation purposes)
* Refactored OCI_List implementation
2017-06-07 Version 4.3.3 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #81: Fixed OCI_GetInt() on string columns
* Wrong implicit string to integer conversion (returning 0 whatever string value) occurred under following conditions:
- Column is string based
- Oracle client < 12gR1
- Using OCI_GetInt() or OCI_GetUnsignedInt()
- Issue #86: Fixed wrong error information when statement execution failed involving 64bit integer binds
* It occurred under following conditions:
- Binding 64bit integer host variables with OCI_BDM_OUT flag set (default if OCI_BindSetDirection() has not been called)
- Statement execution failed on the server for any reasons (server side error, constraint violation, ..)
* Real server side error information was not reported by OCI_GetLastError() or error callback
* Instead an error "OCI-22060: argument [2] is an invalid or uninitialized number" was reported
- Issue #88: Fixed OCI_GetString() on BLOB columns with blob size > 1024 bytes
* Filling the resulting string with BLOB data led to a buffer overflow
- Issue #89: Fixed Segfault occurring in OCI_Execute()
* The issue was a wrong offset computation when trying to update user strings after execution.
* It occurred under following conditions:
- OCI_CHARSET_WIDE (Unicode) ocilib build
- Unix/Linux (wchar_t implemented as 32bit integers)
- Binding host string variable with OCI_BDM_OUT flag set (default if OCI_BindSetDirection() has not been called)
* Fixes (C++ API)
- Issue #63: (Re)Added cstddef header in ocilib_core.hpp as on some platforms/compiler versions, it was reported as needed (including <iterator> was not enough)
* Enhancements (C API)
- Issue #84: Add support for numeric type in OCI_ColumnGetSubType() with limitations as real numeric type cannot really be identified
2017-02-08 Version 4.3.2 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #69: Fixed OCI_StatementGetConnection() that was returning erroneous values (regression introduced in v4.3.0)
- Issue #70: Fixed Subscriptions issues when OCILIB charset is OCI_CHARSET_WIDE (Unicode builds)
* Bug with table names, objects names and rowids reported from CDN event callbacks:
- Up to Oracle 10g, theses strings were reported as ANSI strings instead of UTF16 strings, thus OCILIB was doing a translation to UTF16 before calling user callbacks
- From Oracle 11g, this Oracle bug seems fixed while OCILIB is still trying to perform translation fro; ANSI to UTF16
- Thus, now OCILIB, in Unicode builds, is performing the translation to UTF16 only if reported strings seems to be ANSI
* Bug with Oracle call OCISubscriptonUnRegister()
- OCI_SubscriptionUnregister() encounters an error ora-24015 when calling OCISubscriptonUnRegister() in Unicode build but not in ANSI builds
- Error ORA-24915 is now discarded if returned from OCISubscriptonUnRegister() in OCI_SubscriptionUnregister()
- Issue #71: Fixed regression introduced in v4.3.0 about binding big_uint variables (only unsigned 64bit integers)
* Pre and post statement execution methods were only handling big_int and not big_uint host variables
* Root cause was a wrong numeric sub type check (using == instead of operator &) as subtypes are handled using flags not unitary values
- Issue #72: Fixed OCI_LobErase() return value that was wrong since v4.3.0 (1 on success and 0 on failure) instead of the number of elements erased from the LOB
- Issue #75: Fixed OCI_ElemIsNull() that was marking the call as failed is the value was not NULL (regression introduced in v4.3.0)
- Issue #78: Fixed usage of OCI_SetBindAllocation() when switching bind allocation mode that may result in memory leaks
- Issue #79: Fixed issues in implicit conversion in OCI_GetString()
* Updated outdated OCI_GetString() documentation
* Reduce temporary buffer size in OCI_GetString() conversions
* Fixed implicit conversions in OCI_GetString() for LONG, BLOB
* Changes and Enhancements
- Issue #73: Activate support for N' substitution (NCHAR replacement in SQL statement strings) when source code is Unicode (Only for Oracle Client >= 10gR2)
- Issue #74: Added support for OCI_Number in format calls
* Added token '%n' for parsing OCI_Number in OCI_xxxFmt() calls
* Added OCI_ARG_NUMBER for fetching OCI_Number in OCI_Immediate() and OCI_ImmediateFmt() calls
- Issue #79: Added support for OCI_Statement (cursors) in OCI_GetString()
* Miscellaneous
- Removed outdated unmaintained Visual Studio 2005, 2008 an 2010 projects for building OCILIB DLLs and C/C++ tests applications
- Keeping visual Studio 2013 projects
- Added Visual Studio 2015 projects
- Prebuilt Windows OCILIB DLLs are now compiled using Visual Studio 2015
2017-01-25 Version 4.3.1 Vincent Rogier vince.rogier@ocilib.net
* Fixes (C API)
- Issue #60: Fixed bug introduced in v4.3.0 related to binding arrays of big ints
- Issue #64: Fixed structure size computation for Object members that are Objects
- Issue #65: Fixed Binding null/non initialized OCI_Number
* Even if OCI_BindSetNullAtPos() was called, attempting to bind a non initialized or null OCI_Number led to statement execution failure
- Issue #68: Fixed OCI_Excecute() behavior with PL/SQL "select into" and no data found
* When executing a PL/SQL block with inner PL/SQL code like "select into :<bind_variable> from table" that does fetch anything, Oracle call OCIStmtExecute() returns OCI_NO_DATA, which is handled by OCILIB as an failure
* Now OCI_Excecute() considers OCI_NO_DATA as success
* Updated OCI_GetAffectedRows() documentation for determining if inner PL/SQL "select into" was successful
* Fixes (C++ API)
- Issue #63: Added cstddef header in ocilib_core.hpp as on some platforms/compiler versions, it was reported as needed
- Issue #67: Fixed memory leak when using Number objects
* Removed attempt to use move semantics
* It is currently causing memory leaks and does not bring that much as C API handles are already handled using smart pointers
* Changes
- Request #66: Increased value of OCI_BIND_MAX
* Increased value of OCI_BIND_MAX from 1024 to 65535
* Now Internal Arrays of OCI_Bind can grow and are reallocated by blocks of 128 binds
2016-11-09 Version 4.3.0 Vincent Rogier vince.rogier@ocilib.net
* New Features:
- Added NUMBER SQL type native wrapping
* Optional type as NUMBER type can still be fetched/binded using regular C native numeric types
* New OCI_Number type can be used when precision matters or for dealing with special values such as positive and negative infinity
* C API :
- Added OCI_NUM_NUMBER numeric type
- Added OCI_Number type
- Added OCI_NumberCreate()
- Added OCI_NumberFree()
- Added OCI_NumberArrayCreate()
- Added OCI_NumberArrayFree()
- Added OCI_NumberAssign()
- Added OCI_NumberGetContent()
- Added OCI_NumberSetContent()
- Added OCI_NumberSetValue()
- Added OCI_NumberGetValue()
- Added OCI_NumberAdd()
- Added OCI_NumberSub()
- Added OCI_NumberMultiply()
- Added OCI_NumberDivide()
- Added OCI_NumberCompare()
- Added OCI_GetNumber()
- Added OCI_GetNumber2()
- Added OCI_BindNumber()
- Added OCI_BindArrayOfNumbers()
- Added OCI_RegisterNumber()
- Added OCI_NumberFromText()
- Added OCI_NumberToText()
- Added OCI_ElemGetNumber()
- Added OCI_ElemSetNumber()
- Added OCI_ObjectGetNumber()
- Added OCI_ObjectSetNumber()
* C++ API:
- Added ocilib::Number type encapsulating the C API OCI_Number type
- This new type comes with all possible operator overloads for better usability
* Fixes:
- OCI_ObjectGetString(): Fixed usage of internal temporary buffers
- OCI_FileRead(): Return value was not the correct one
- OCI_PoolGetConnection() : was returning NULL connections for session pool using external credentials
- OCI_StringGetFromType() : Fixed segfault when converting CLOBs (with length > to 512) to UTF8 strings in OCI_GetString() if an UTF8 charset is used
- Fix indicators usage for collections : OCI_IsNull() always returned FALSE even if fetched collection was NULL
- Fix compilation under C compilers not supporting C99 feature allowing declaring variables anywhere in blocks
* Miscellaneous:
- C API: Major internal code re-factoring
* Code factorization
* Replaced verbose macros with more compact ones
* Code base reduced by few thousands lines of code
* Fixed some error handling logic
- C API:
* Added OCI_GetDataSize() and OCI_GetDataSize2()
- C++ API:
* Rewrote iterators for ocilib::Collection<>
- Collection Iterators are now random iterators allowing Collections being used with STL algorithms such as std::sort()
- Added Collection const_iterators
* Addressed various code analysis hints
* Added C++ compiler capabilities detection (C+11)
- Updated samples in folder /demo
* Added required DDL and DML for all samples
* Updated some samples
2016-03-21 Version 4.2.1 Vincent Rogier vince.rogier@ocilib.net
* Licensing
- Re-licensing OCILIB to Apache License Version 2.0 instead of LGPL 2.1: this is merely for overcoming the static linkage issue of the LGPL V2.1
* Fixes
- C++ API: Fixed memory leak caused by Statement::Bind() with non scalar types when Connection objects are closed before their child Statement objects get out of scope
- C++ API: Fixed minor compilation warnings
- C API: Compilation was broken when targeting Oracle 8i
- C API: PL/SQL statements starting with keyword "CALL" where not identified as PL/SQL commands and thus output bind buffers were not updated accordingly
- C API: OCI_Execute() ignored custom fetch and prefetch values with Oracle clients >= 9.2
- C API: OCI_ElemSetString() caused memory retention when dealing repetitively with string attributes
- C API: OCI_Cleanup() leaked of few bytes
- C API: OCI_BindLob() caused access violation when binding CLOB/BLOB to PL/SQL OUT parameters using OCI_BDM_OUT bind direction mode
- C API: OCI_DirPathSetEntry() may passed Wrong SQL type passed to OCI_NumberFromString() for some numeric columns
- C API: OCI_GetLastError() wWas not reporting errors/warnings after the following calls: OCI_FetchPrev(), OCI_FetchNext(), OCI_FetchFirst() and OCI_FetchLast()
- C API: OCI_MemRealloc() may manipulate dandling pointers
- C API: Fixed some usage of OCI_BIND_CALL() macro
- C API: OCI_ObjectGettring(): When the attribute type was not a string, the application error handler
was called with error code OCI_ERR_ATTR_NOT_FOUND and then the method was converting the attribute to a string without problem as expected.
* Changes
- Added "Environment Variables" section in the C API documentation
- C++ API: Added silent parameter to Date::Date()
- C API: Fetch and prefetch values are not reset any more to default values when statement is re-prepared
- C API: Added support for specific environment variables: Now specific documented environment variables can be set for activating
experimental or optional behaviors mostly for implementing workaround for Oracle Bugs.
- C API: Added experimental workaround for unsolved Oracle OCI bug #9838993 using the environment variable "OCILIB_WORKAROUND_UTF16_COLUMN_NAME"
2015-09-21 Version 4.2.0 Vincent Rogier vince.rogier@ocilib.net
* New Features:
- Implemented Oracle 12c extended support for PL/SQL types (PL/SQL boolean, records and index by tables)
* These types can be now used in binding calls
* C API: PL/SQL records can now be used using OCI_Object
* C API: PL/SQL Index by tables can now be used using OCI_Coll
* C API: PL/SQL boolean can be used using boolean C type
* C API: Added OCI_BindBoolean()
* C API: Added OCI_ElemSetBoolean(), OCI_ElemGetBoolean()
* C API: Added OCI_ObjectSetBoolean(), OCI_ObjectGetBoolean()
* C API: OCI_TypeInfoGet() supports now records these PL/SQL types
* C API: Added collection type OCI_COLL_INDEXED_TABLE
* C API: Added data type OCI_CDT_BOOLEAN
* C++ API: PL/SQL records can now be used using ocilib::Object
* C++ API: PL/SQL Index by tables can now be used using ocilib::Collection<T>
* C++ API: PL/SQL boolean can be used using bool C++ type
* C++ API: Added template specializations for supporting PL/SQL boolean using C++ bool in the following calls:
- ocilib::Statement::Bind()
- ocilib::Object::Get()
- ocilib::Object::Set()
* C++ API: Added ocilib::Collection<T> specializations for supporting bool data type
* C++ API: Added ocilib::TypeBoolean
* C++ API: Added ocilib::Collection::IndexedTable
* C++ API: Added internal core class ocilib::BindTypeAdaptor<T1, T2>
- Added Memory usage information
* C API: Added OCI_GetAllocatedBytes
* C API: Added OCI_MEM_ORACLE, OCI_MEM_OCILIB and OCI_MEM_ALL
* C++ API: Added ocilib::Environment::GetAllocatedBytes()
* C++ API: Added ocilib::Environment::OracleClientBytes, ocilib::Environment::OcilibBytes, ocilib::Environment::AllBytes
- Added Session Max Cursor information
* C API: Added OCI_GetMaxCursors()
* C++ API: Added ocilib::Connection::GetMaxCursors()
* Enhancements:
- C++ API:: Enhanced pre/post statement execution check for binds
* Before execution, bind buffers are only updated from host variables if Bind Direction has the ocilib::BindInfo::In flag
* After execution, host variables are only updated from bind buffers if Bind Direction has the ocilib::BindInfo::Out flag
* Fixes:
- C API: Fixed OCI_GetLastError() that returned NULL after OCI_Initialize() if OCI shared lib cannot be loaded
- C API: Fixed OCI_ColumnGetSQLType() that has its break statements within the switch removed by mistake leading to return "?" in all cases
- C API: Fixed OCI_ElemSetXXX() where XXX is a numeric type
- C API: Fixed OCI_IterFree() when dealing with numbers
- C API: Fixed Memory retention in local OCI objects cache when calling OCI_ObjectFree(): Objects indicator structures were not freed until calling OCI_Cleanup()
- C API: Fixed OCI_ElemSetXXX() for numeric types when element is created using OCI_ElemCreate() instead of being retrieved with OCI_IterGetPrev() or OCI_IterGetNext()
- C API: When OCI_SubscriptionRegister() failed, the input connection was freed leading the caller to hold a dangling pointer to the connection handle
- C API: Fixed comparison call in OCI_TimestampCompare()
- C API: Fixed alignment computation in OCI_GetStruct()
- C API: Fixed alignment computation in OCI_ObjectGetUserStructSize()
- C API: Fixed compilation under compilers that require variable to be declared at the beginning of blocks (example : VS2010)
- C API: Fixed minor internal bugs and issues
- C++ API: ocilib::HandleHolder<T>::Acquire() => Made sure that a smart handle is not allocated if the input C handle is NULL (even if it shall not happen as the C API must raise an error if it cannot return a valid handle)
- C++ API: ocilib::HandleHolder<T>::SmartHandle::~SmartHandle() => the C API handle free function is now called only if the handle is not NULL
- C++ API: Fixed compilation error when using OCI_CHARSET_WIDE
- C++ API: Fixed ocilib::Raw binding when using OCI_CHARSET_WIDE
- C++ API: Fixed ocilib::BindArray::BindArrayObject<Raw, unsigned char>::SetInData()
- C++ API: Fixed binding array of Blobs
- C++ API: Fixed binding array of Raw
* Miscellaneous
- Doxygen documentation: Added C and C++ data types mappings documentation page
- Removed references to sourceforge.net
- Minor internal code changes to fixing hypothetical issues found by code analysis (CppCheck)
- Fixed some typos and formatting issues
2015-05-05 Version 4.1.0 Vincent Rogier vince.rogier@ocilib.net
* 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 adapter 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 vince.rogier@ocilib.net
* 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
- Factorized 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 multi-threaded 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 vince.rogier@ocilib.net
* 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 simpler
- 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()w
- 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