Newer
Older
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
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 anlways 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 fron 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 regresson 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 apps
- 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 platorms/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 behaviours 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 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 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
- 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 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 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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 vince.rogier@ocilib.net
* 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