Feature |
Comment |
New (in OTL 4.0.5):
-
In OTL/ODBC, OTL/DB2-CLI, a new function and a new constructor in otl_connect:
rlogon(HENV,HDBC,int),
otl_connect(HENV,HDBC,int).
It allows the ODBC or DB2-CLI code to be patched with OTL. In other words,
if you have a piece of legacy code in straight ODBC, or DB2-CLI, you could
use the primary, existing database connection (environment, and database
connect handles), in order to instantiate a secondary, OTL connect. More
more detail, see examples 157,
158.
|
|
New (in OTL 4.0.4):
-
This is a maintenance release, which fixes a bug, recently (in 4.0.3) introduced
in OTL/ODBC.
|
|
New (in OTL 4.0.3):
-
This is a maintenance release, which fixes a bug, recently introduced in
OTL/ODBC for ODBC 3.x. A return code of a call to ODBC was not checked
for errors.
|
|
New (in OTL 4.0.2):
-
In OTL/OCI8/9, a new function in otl_connect: cancel().
The function allows asynchronous cancellation of any database call, executiing
through the otl_connect object. For more detail, see example 156
|
|
New (in OTL 4.0.1):
-
In OTL/ODBC, and OTL/DB2-CLI, a new function in otl_connect: set_transaction_isolation_level().
It allows the user to set up the following transaction isolation level:
-
READ COMMITTED
-
READ UNCOMMITTED
-
REPEATABLE READ
-
SERIALIZABLE
For detail, see examples 154,
155
|
|
New (in OTL 4.0.0):
-
It is an accumulative release that fixes a number of bugs (e.g. a bug in
stream pooling and exceptions), compilation warnings and provides
better support for newer compilers like GNU C++ 3.0.x, Forte C++ 6.x (successor
of Sun Pro C++), aCC (ANSI C++ for HP UX), as well as xlC 5.x (IBM
C++ on AIX).
-
Support for Open Source Interbase
6.x via XTG Systems ' Open
Source ODBC driver for
Interbase. A new #define OTL_ODBC_XTG_IBASE6
was introduced in order to make OTL work correctly with the driver. A number
of code examples to illustrate this new feature (
133, 134, 135, 136, 137, 138, 139) were added to the list of OTL
code examples.
-
Support for Open Source PostgreSQL
7.x.x via the PostgreSQL
ODBC driver that is also Open Source. A number of code examples to
illustrate this new feature (140,
141, 142, 143, 144, 145, 146 ) were added to the list of OTL
code examples.
-
Better backward compatibility with ODBC 2.5 specification. When ODBCVER
is set to 0x0250 (#define ODBCVER 0x0250) , OTL makes ODBC 2.5 compliant
calls, instead of assuming that the level of ODBC is greater than or equal
to 0x0300. See example 147 for more
detail.
-
Support for Oracle 9i. A new #define was introduced: #define OTL_ORA9I.
Basically, everything that works for OTL_ORAXX, works for OTL_ORA9I, therefore,
this new #define should be okay to use with already existing code. Later
on, new, Oracle 9i specific features will be introduced under #define OTL_ORA9I.
This time, no special examples are need to illustrate the new #define.
Any example for OTL/OCI7, OTL/OCI8 can be used with #define OTL_ORA9I.
-
Support for a new bind variable type in otl_stream
for OCI8/9: :var< refcur,out[XXX]>.
It allows the otl_stream to return multiple reference cursors from the
same PL/SQL block/stored procedure call. This new type of bind variables
allows the user to combine reference cursors with other input/output parameters
in a single stored procedure call. See examples 148,
149, 150, 151 for more detail.
-
New in otl_stream for OTL/OCI8/9 function: get_stream_type().
The function returns the type
of SQL statement, which the stream was instantiated with. See example 152
for more detail.
-
New in otl_stream for OTL/OCI8/9 function: create_stored_proc_call(),
that automatically creates a stored procedure call with definitions of
the procedure's parameters. See example 153,
for more detail.
-
New function in otl_connect: otl_terminate.
This function is static in class and defined only for OTL/OCI8i,9i.
-
New #define is introduced: #define OTL_ODBC_SQL_EXTENDED_FETCH_ON.
Normally, if ODBC version is set to >= 3.0, SQLFetchScroll is used. However,
some ODBC drivers, as well as DB2 CLI in Linux (DB2 in Linux, even in Linux/390),
have a bug in SQLFetchScroll, when CLOB/BLOB fields are used. This new
#define forces OTL to use SQLExtendedFetch instead, or even SQLFetch, in
the case of the stream buffer size of 1.
|
|
New (in OTL 3.2.20):
-
A fix for problem 62
-
A fix for problem 63. Now, OTL throws
a new OTL-defined exception with
error code 32013.
-
A group of new functions
was introduced for describing the otl_stream's bind variables:
For more detail, see examples 130, 131,
132.
|
|
New (in OTL 3.2.19):
LOB stream mode, previously implemented
in OTL 3.1.14 for OCI8 only, is extented to OTL/ODBC and OTL/DB2 CLI
: now, the otl_lob_stream class
implements the LOB stream mode for OTL/OCI8, OTL/ODBC, and OTL/DB2-CLI.
Also, a new function in the otl_stream class was introduced in order
to support the LOB stream mode: set_lob_stream_mode().
For more detal, see examples 122 , 123,
124,
125,
126,
127
, 128,
129.
-
A fix for problem 61
|
|
OTL 3.2.18 compared to OTL 3.2.17 has no visible changes. This is a
maintenace release. A few changes were made under #define OTL_ACE
to use more appropriate containers for better implementation of the
otl_stream
pooling. |
|
(in OTL 3.2.17):
-
New #define OTL_STLPORT was
inroduced in order to fix problems 60
. Briefly, OTL_STLPORT can be used whenever OTL_STL is used, except for
otl_output_iterator,
otl_input_iterator
.
-
New #define OTL_VALUE_TEMPLATE_ON
was introduced in order to make the otl_value<T>
class available without turning #define OTL_STL
on. Fore more detail, see examples 119 , 120,
121
-
New #define OTL_USER_DEFINED_STRING_CLASS_ON
was introduced for specifying a string class name for reading from / writing
to the otl_streamm other than STL's std::string. This feature
is useful for specifynig (1) a third-party string class other than
std::string, or, specifying (2) std::string class without turning
on #define OTL_STL.
(1) makes sense for multi-threaded, scalable application, when a more
efficient [than std::string] string class is required. For example, a string
class without string reference counters, and any internal locking, with
a more optimal string memory allocator.
(2) makes sense for cases when it would be nice to have operators
<<(otl_stream&,...) and >>(otl_stream&,...) defined for a
third-party string class, or even for std::string without turning on #define
OTL_STL, since not all C++ compilers compile OTL successfully with OTL_STL
on.
Fore more detail, see examples 119 , 120,
121
-
New #define OTL_ACE was inroduced
as an effort to integrate OTL with ACE.
More precisely, STL-like features of OTL (string class in otl_stream operations,
OTL_STREAM_POOLING, based on STL containers, etc.). In case with ACE, when
OTL_ACE is defined, OTL_STERAM_POOLING is implemented on top of ACE's Array
and Hasp_Map classes. The string class for otl_stream's operations is ACE_TString.
|
|
(in OTL 3.2.16):
-
Problems 57, 58,
59
are fixed.
|
|
(in OTL 3.2.15):
-
Problems 52, 54,
55
are fixed.
-
As a fix to problem 53 , a new otl_stream
function was introduced: otl_stream::
set_flush(). See also examples 116, 117,
118.
|
|
(in OTL 3.2.14):
|
|
(in OTL 3.2.13):
-
Problem 45 is fixed.
-
Problem 46 is fixed. A new #define was
introduced to enable the fix / feature: OTL_UNCAUGHT_EXCEPTION_ON.
For more detail, see examples 101, 102,
103
, and read the description of the problem
46
more carefully.
-
Problem 47 is fixed. A new #define OTL_EXTENDED_EXCEPTION
was introduced to enable the otl_exception's extended
fields for OTL/ODBC and OTL/DB2-CLI. See also example 104.
-
Problem 48 is fixed. See also example
105.
If MS SQL Server is being accessed from Linux via a ODBC-to-ODBC brigde,
the corresponding ODBC driver on the Linux side should be compliant with
ODBC 3.5. Otherwise, support of GUIDs will not be enabled, and the result
of running the example 105 will be unpredictable.
-
Problem 49 is fixed. See also examples
106,
107
, 108,
109 .
This actually is a new feature in OTL/ODBC and in OTL/DB2-CLI: bulk operations
with LOB data types (LONG, LONG RAW, CLOB, BLOB, TEXT, IMAGE, etc.). Keep
in mind, when writing portable code, that this feature is NOT compatible
with with OTL/OCIx.
-
New otl_stream::set_all_column_types
() function, which allows to override the default mapping of column groups
in SELECT otl_stream's. For example: map all numeric columns to strings,
map all date columns to strings, or the combination of both.This feature
provides a handier interface in case of large numbers or date-to-string
handling, when the structure of the SELECT statement is unknown in advance.
See also example 110, 111,
112.
|
|
(in OTL 3.2.12): problem 44
is fixed.Also it was reported that, in fact, problem 39
was resolved for at least DB2 7.x, xlC/Visual Age 5, in AIX. |
|
(in OTL 3.2.11): problem 43
is fixed. No other changes. |
|
(in OTL 3.2.10): problem 42
is fixed. The following new #define is introduced: #define OTL_STL_NOSTD_NAMESPACE.
I didn't create any code samples for this. Here's how to use this new #define
with aCC and #define OTL_STL:
...
#define OTL_STL
#define OTL_STL_NOSTD_NAMESPACE |
|
(in OTL 3.2.9):
-
This release fixes problem 40, that
was introduced in OTL 3.2.8.
-
This release also fixes problem 41.
ANSI C++ standard deprecates using the keyword static as a means
of forcing the scope of a function to be the current compilation module
and it is recommended that unnamed namespaces be used instead.
|
|
(in OTL 3.2.8):
-
by requests from some users, otl_connect::
auto_commit_on() and otl_connect::
auto_commit_off() are back. These functions used to be in the old OTL
(1.x, 2.x) and were removed in OTL 3.0. I've put them back for partial
backward compatibility. However, I do NOT encourage anybody to use them
because it's a bad practice.
-
new template class otl_value. It integrates
the scalar value container and the NULL indicator functionality in one
template class. For more detail, see examples 97,
98,
99,
100.
-
Problems 36, 37,
38
are fixed in this release of OTL.
|
|
(in OTL 3.2.7). A new database backend is supported:
DB2
with its native Call Level Interface (CLI) in Windows and Unix platforms.
Basically, a new OTL-adaptor (OTL/DB2-CLI) was developed for DB2-CLI.
Respectively, a new #define was introduced for the new OTL-adaptor: #define
OTL_DB2_CLI.
OTL/DB2-CLI uses both DB2-CLI's native header files and DB2-CLI's native
object libaries.
Besides the OTL_DB2_CLI macro definition, another #define was introduced:
OTL_EXPLICIT_NAMESPACES
. It allows to overide OTL's default namespace generation: if one OTL-adaptor
is enabled than no namespaces are generated, more than one -- namespaces
are generated (oracle::, odbc::, db2::).
Under OTL_EXPLICIT_NAMESPACES, the namespaces always get generated.
Two new datatypes for declaring bind variables were introduced: db2time,
db2date.
They are required when a DB2 DATE or DB2 TIME column is used, respectively.
db2time/db2date should be used with both OTL/DB2-CLI and OTL/ODBC for DB2.
This is the only thing that makes DB2 different from other ODBC data
sources (e.g. MS SQL Server, Sybase, Oracle, MySQL). |
The question is: Why OTL/DB2-CLI is released as OTL 3.2.7, rather than
OTL 3.3.0?
On the one hand, acquiring a new database / writing a new OTL-adaptors
has become a routine procedure. On the other hand, the fact that DB2's
Call Level Interface (CLI) is based on the ODBC 3.0 specification plus
extentions, made the task easy, and, OTL/DB2-CLI is not much different
from OTL/ODBC.
In the core, it's still the same OTL-adaptor, with a couple of things,
controlled by conditional compilation.
Bottom line: the OTL header file has grown only a few more kilobytes
bigger, but it now supports such a new major player database as DB2.
For more detail, see examples
for DB2 Call Level Interface (CLI) |
In OTL 3.2.6, a couple of fixes have been made. |
See problems #34, #
35 for more detail. |
(in OTL 3.2.5): STL vector
based containers for PL/SQL tables (OCIx). The containers relax all
possible requirements on sizes/dimensions. Instead of C-style null terminated
character arrays, vectors of std::strings are supported, as well
as vectors of otl_datetime,
and a number of numeric vectors.
Briefly, OTL 3.2.5 is an evolutionary step toward a better handling
of PL/SQL tables from C++. The interface is pretty much the same as the
static or dynamic containers for PL/SQL tables, with the exception of being
STL-vector based. |
For more detail, see examples 85, 86,
87,
88. |
(in OTL 3.2.4): OTL/ODBC supports MySQL (the Open
Source SQL database server) via [the new] #define OTL_ODBC_MYSQL
in the Windows platforms. Also, combined with #define OTL_ODBC_UNIX and
the Open Source library, called UnixODBC, OTL/ODBC for MySQL can be used
in the Linux platform. |
MySQL as a new supported [by OTL] SQL database extends the series of
databases, covered by the OTL umbrella.
This makes it possible to write even more [than ever before] portable
code, without any significant degradation in performance and readability.
For more detail, see MyODBC for MySQL |
(in OTL 3.2.3): OTL compiles clean (without annoying
compiler warnings) with the KAI C++ compiler. |
I was told that KAI C++ is a more solid, better, bug free C++ compiler
than many others. |
(in OTL 3.2.2): "Default user"/"extrenal" authentication
now works correctly in OTL/OCI8: db.rlogon("/") gets parsed as a special
case and works okay with OTL/OCI8 |
I missed the fact that in OCI8 "default user" authentication is done
in a different way compared to OCI7. The assumption was that it was backward
compatible at the level of OCI. |
(in OTL 3.2.1):
-
New #define OTL_ODBC_UNIX.
It allows OTL/ODBC to be used with ODBC bridges in Unix.
-
OTL/ODBC: in order to get the row processed count, calls to SQLGetDiagField()
were replaced with calls to SQLRowCount().
-
OTL/ODBC: in SQLSetConnectAttr(..., SQL_ATTR_AUTOCOMMIT, ..., SQL_NTS),
SQL_NTSwasreplaced
with SQL_IS_POINTER.
-
OTL/OCI7: in calls to oparse(), the enforcement of strict compliance with
Oracle 6 was relaxed.
|
-
I didn't create any new examples on this. OTL/ODBC examples can be used.
-
This was done to streamline the use of ODBC functions. At least, it allowed
to extend the list of ODBC drivers which OTL/ODBC doesn't crash.
-
This doesn't crash any ODBC drivers, that were known to be working with
OTL/ODBC before, but this change allows the list of ODBC drivers that don't
crash under OTL/ODBC to be extended , e.g. the ODBC driver for MS Access
works fine. I've not identified the versions of MS Access ODBC drivers
which OTL/ODBC fails.
-
It's about time, isn't it? I mean that Oracle 6 has been history for a
long time and Oracle 7 is going down the same path (will be discontinued
relatively soon).
This relaxation in the OCI7 bevahior allows OCI7 calls to be linked
and successfully used with OCI8 libraries.
|
(in OTL 3.2.0):
-
Support of the STL reading/writing
std::string's from/to otl_stream's. This feature can be turned on with
#define OTL_STL.
-
STL-compliant OTL stream iterators : otl_input_iterator,
otl_output_iterators.
The iterators are supposed to work with all versions of the STL, which
are commercially or freely available for a variety of C++ compilers. This
feature can be turned on with #define OTL_STL.
-
ANSI C++ typecasts are supported. This feature can be turned on with #define
OTL_ANSI_CPP.
|
-
For more detail on std::string's, see also example 72,
73,
74
-
For more detail on the OTL/STL iterators, see also example 75,
76,
77
-
For more detail on #define OTL_ANSI_CPP, see also example 72,
73,74,
75,
76,
77.
|