=================================
RELEASE NOTES
FOR
INFORMIX-Client SDK 2.20.UC1 PRODUCT RELEASE
DATE: 22 Dec 1998
=================================
Release notes for client products available as part of the INFORMIX-
Client SDK 2.2 are in the following files:
CLIREL_2.8 INFORMIX-CLI Release Notes
CPPREL_2.6 C++ Object Interface Release Notes
ESQLCREL_9.2 INFORMIX-ESQL/C Release Notes
GLSAPIREL_3.0 INFORMIX-GLS Release Notes
ODBCREL_3.1 INTERSOLV DataDirect ODBC Driver Release Notes
The following is a quick summary of the Client SDK installation process
including new changes in this release. For a complete description of
all command line options of all installation scripts, please refer to
your Installation Guide and the DOCUMENTATION NOTES for Informix Client
Products Installation Guide for UNIX, Version 2.20.
TABLE OF CONTENTS:
I. Message file name change in the Client SDK 2.01 and later
II. Using ESQL/C Libraries
III. Version Checking
IV. Using ODBC Products
V. Introducing Informix ODBC Driver 3.30
VI. Client SDK File Size Increase
VII. Client-Server Testing
I. Message file name change in the Client SDK 2.01 and later
The term "old client APIs" in the text below means pre-2.01
versions of Client SDK and Connect and all versions of the
separate ESQL/C, ESQL/COBOL and CLI products; the term
"new client APIs" means 2.01 and later versions of
Client SDK and Connect.
After the installation of versions 2.01 or greater of Client SDK
or Connect on either Win32 or UNIX platforms, a category of
already-compiled applications may exhibit an error.
The shared and static libraries in both the old and new
client APIs refer to message files in the directory %INFORMIXDIR%\msg.
As a result of fixing another bug, the names of several message
files were changed in the new client APIs to avoid conflict with
the server versions of those files. For example, old client APIs
distributed the message file sqli.iem and the libraries in the
old client APIs referred to sqli.iem. Now the new client APIs
distribute that same message file under the name of csqli.iem
and the libraries in the new client APIs refer to csqli.iem.
All of the following circumstances must occur in order for
this error to manifest itself:
1. An application was linked with the static libraries of an
old client API, and
2. A new client API is installed in a different directory than
the one containing the old client API, and
3. The INFORMIXDIR used by the application is changed to point
to the directory containing just the new client API
If all of these conditions apply, then the application will
continue to look for message files by their old name,
for example, sqli.iem. However, the directory containing just the
new client API will have those files by their new name,
for example, csqli.iem. Therefore, an error message will be given.
You can use any one of the following workarounds to avoid the error:
1. Link the application with the shared libraries from the old
client API, or
2. Install the new client API in the same directory that you
installed the old client API and don't change INFORMIXDIR, or
3. Install the old client API in the same directory that you
will install the new client API; install the old client API first, or
4. Re-link your application with the static libraries from the
new client API, or
5. For all message sub-directories within the directory that contains
just the new client APIs, make copies of each of the following files
and give the copies new names as indicated below. Do this in each
message sub-directory. This includes, at least, the US English
sub-directory: %INFORMIXDIR%\msg\en_us\04e4. If there are message
sub-directories for other languages you installed, you should do
the same copying for them too; for example, %INFORMIXDIR%\msg\fr_fr\04e4.
als.iem -> cals.iem
cals.iem -> ccals.iem
csm.iem -> ccsm.iem
css.iem -> ccss.iem
eami.iem -> ceami.iem
isam.iem -> cisam.iem
miapi.iem -> cmiapi.iem
nals.iem -> cnals.iem
nerm.iem -> cnerm.iem
net.iem -> cnet.iem
netsrv.iem -> cnetsrv.iem
rds.iem -> crds.iem
security.iem -> csecure.iem
shell.iem -> cshell.iem
sql.iem -> csql.iem
sqli.iem -> csqli.iem
util.iem -> cutil.iem
xopen.iem -> cxopen.iem
xps.iem -> cxps.iem
itoxmsg.pam -> citoxmsg.pam
optical.iem -> coptical.iem
errnmsg.txt -> cerrmsg.txt
Versions 2.30 and later of the Client SDK and Connect on both Win32
and UNIX platforms will fix this problem. The install process of these
products will first look to see if the message files already exist by
their "old" name in the target installation directory. If they already
exist, nothing special will be done. If they do not already exist, a
link (on UNIX) or a copy (on Win32) of each message file whose name
changed will be made so that both files, like sqli.iem and csqli.iem,
will always be guaranteed to exist. This fix will remain in the
installation of Client SDK and Connect in all future releases of those
products.
II. Using ESQL/C Libraries
In the following notes, I-CONNECT 2.20 refers to the conn tar file in
the Client SDK 2.20 bundle, and ClientSDK 2.20 refers to the
clientsdk tar file in the Client SDK 2.20 bundle.
(1) If I-CONNECT 2.20 is NOT installed on top of an existing
7.2x ESQL/C installation,
(a) both "installconn" and "installconn -u" will install 2.20
I-CONNECT exactly the same as the current I-CONNECT
"installconn";
(Note, the -u option is only available in UNIX. NT ESQL/C
does not need this option.)
(b) any existing 7.2x UNIX ESQL/C (and 7.23 NT ESQL/C) applications
can use this installed I-CONNECT without relinking or
recompilation. If recompilation is not performed, only 7.2x level
functionality and some bug fixes will be available.
To recompile and get new functionality, you need
the development version of the product (ClientSDK 2.20 tar file).
(2) If I-CONNECT 2.20 is installed on top of an existing 7.2x
ESQL/C installation,
(a) "installconn" will install 9.2 ESQL/C shared libraries,
and either KEEP the 7.2x shared libraries or REPLACE them
with the 9.2 ones. The script "installconn" will ask
you whether you want to overwrite the existing shared
libraries or not. If the existing shared libraries are
chosen NOT to be overwritten, then
(a.1) existing 7.2x applications will continue to use
the existing 7.2x shared libraries,
(a.2) existing 9.1x applications can use the 9.2 shared
libraries.
If the existing shared libraries are overwritten, then
the effect is the same as (b)(a.1) below.
(b) "installconn -u" will install 9.2 UNIX ESQL/C shared libraries,
and REPLACE 7.2x shared libraries with the 9.2 ones.
(Actually, only the links are updated.)
(a.1) Both existing 7.2x (and 9.1x) applications will then use
the 9.2 shared libraries, and they should all work
correctly. (The 7.2x shared libraries will
not be accessible by the ESQL/C preprocessor.)
No relinking or recompilation is required.
However, only 7.2x level functionality and
some bug fixes will be available if an 7.2x application
is not recompiled.
(3) Installing ClientSDK 2.20 with ESQL/C Libraries
(a) If ClientSDK 2.20 is installed on top of an existing
7.2x ESQL/C installation, it will always REPLACE 7.2x
shared libraries with the 9.2 ones. If you intend to
continue using the 7.2x ESQL/C preprocessor or shared
libraries, ClientSDK 2.20 should be installed in a
separate directory.
(b) Regardless of whether ClientSDK 2.20 is installed on top of
an existing 7.2x ESQL/C or not, an existing 7.2x application
CAN use the 9.2 ESQL/C shared libraries in this installation
without relinking or recompilation.
(4) In order to recompile 7.2x applications with 9.2 ESQL/C, customers
need to install ClientSDK 2.20. The command "installclientsdk"
is used to install clientsdk product that contains 9.2 ESQL/C
(and other client products). Like the current "installesql",
"installclientsdk" will overwrite all files in an existing
7.2x ESQL/C installation. There is no -u option for installclientsdk.
III. Version Checking
For information on version checking, see the
DOCUMENTATION NOTES FOR Informix Client Products Installation
Guide for UNIX, Version 2.20.
IV. Using ODBC Products
Client SDK provides the following ODBC products:
INFORMIX-CLI, Version 2.8
--------------------------
This product provides a seamless upgrade for INFORMIX-CLI 2.7
customers. It provides the following advantages:
* ODBC 2.5 feature compliance.
* Support for INFORMIX-Dynamic Server with the Universal
Data Option extended data types.
* Support for Microsoft Transaction Service (MTS), Windows only.
Platforms Tested:
* Windows NT 4.0 SP3
* Windows 95 and Windows 98
* Sun SPARC Solaris 2.6
INTERSOLV DataDirect ODBC Driver, Version 3.11
----------------------------------------------
This product provides a seamless upgrade for INFORMIX-CLI 2.5
customers. It provides the following advantages:
* ODBC 3.0 feature compliance.
* Many known issues with the INFORMIX-CLI 2.5 product have
been resolved in this version of the INTERSOLV DataDirect
ODBC Driver.
IMPORTANT: If you are upgrading to the Client SDK 2.20 from an
earlier version of the Client SDK, and you already use
INTERSOLV DataDirect ODBC Driver, Version 3.01 or 3.10, then
the new
version of the INTERSOLV DataDirect ODBC Driver will be
installed in addition to, not as a replacement for, the 3.01/3.1
0
version. Therefore, you do not need to use the new version; it
is an option. If you choose to use the new version, refer to
the release notes for the INTERSOLV DataDirect ODBC Driver
for instructions on upgrading DSNs.
V. Introducing Informix ODBC Driver 3.30
In the 2nd Quarter 1999, Informix will be introducing our
Informix ODBC Driver version 3.30. Not only will this Informix
developed driver be compliant with the ODBC 3.0 level 1+
specification, it will be our upgrade and maintenance path
from the INFORMIX-CLI 2.8/2.9 driver, which currently
supports UDO server extensions and Microsoft Transaction Service (MTS).
Once the Informix ODBC driver is available, Informix will phase in this
driver as our primary ODBC driver offering. Informix will continue to
redistribute and support the Intersolv Data Direct ODBC Driver version 3.1
as long as Intersolv supports and maintains it. Informix will continue to
redistribute the Intersolv Driver Manager on UNIX, and the Microsoft Driver
Manager on Windows.
VI. Client SDK File Size Increase
Due to the addition of several new Locale files, the size of the
2.20 Client SDK and I-Connect unix products have increased. For
instructions on removing unwanted locale files from the GLS Library,
please reference the Informix Guide to GLS Functionality, Version 9.1,
Appendix A, Managing GLS Files. This guide is available in the
Answers
On Line CD-ROM, and on the web at Answers On Line.
VII. Client-Server Testing
The Client SDK 2.20 products have been tested with the following
database servers:
- Informix Dynamic Server, Version 7.3x
VII. Client-Server Testing
The Client SDK 2.20 products have been tested with the following
database servers:
- Informix Dynamic Server, Version 7.3x
- Informix Dynamic Server, Workgroup Edition, Version 7.3x
- Informix Dynamic Server with Advanced Decision Support and Extended
Parallel Options, Version 8.2x
- Informix Dynamic Server with Universal Data Option, Version
9.14
===============================
=====================================
RELEASE NOTES
FOR
INFORMIX-ESQL/C 9.20.UC1 PRODUCT RELEASE
DATE: 22 Dec 1998
=====================================
TABLE OF CONTENTS
I. ESQL/C AND DATABASE SERVER CONFIGURATIONS
II. MAJOR NEW FEATURES
III. FIXED CUSTOMER-REPORTED PROBLEMS
IV. KNOWN PRODUCT DEFICIENCIES
V. RUNNING SETNET32 WITH SILENT OPTION (Windows Only)
=====================================
I. ESQL/C AND DATABASE SERVER CONFIGURATIONS
ESQL/C has been tested with the following database server
configurations:
- Informix Dynamic Server, Version 7.3x
- Informix Dynamic Server, Workgroup Edition, Version 7.3x
- Informix Dynamic Server with Advanced Decision Support and
Extended Parallel Options, Version 8.2x
- Informix Dynamic Server with Universal Data Option, Version
9.14.UCx (UNIX) and 9.14.TCx (Windows NT)
=====================================
II. MAJOR NEW FEATURES
1. NEW SQL FOR THE 7.31 DATABASE SERVER
ESQL/C 9.2 supports the following new SQL statements for
the 7.31 database server. For more information about these
statements, refer to the Informix Guide to SQL:Syntax for
release 7.31
For outer join:
SELECT ... FROM tab_exp LEFT [OUTER] JOIN tab_exp ON ...
WHERE ...
To rename an index:
RENAME INDEX objname TO string_id
To create non-logging tables in a logging db:
CREATE [STANDARD|RAW] TABLE ...
ALTER TABLE ... {STANDARD|RAW] ...
2. NEW SQL FOR THE 8.3 DATABASE SERVER
ESQL/C 9.2 supports the following new SQL statements for
the 8.3 database server. For more information about these
statements, refer to the Informix Guide to SQL:Syntax for
release 8.3.
*************
The SELECT statement now can contain a WITH UPDATE clause:
*************
CREATE INDEX now accepts a USING clause
CREATE INDEX also accepts a simplied SELECT statement in the body.
CREATE INDEX add coarse grain locking option
*************
ALTER INDEX now accepts a coarse grain locking option
*************
The SELECT statement now allows:
FIRST in select list
SAMPLES & LOCAL in the FROM clause
type of temp table for SELECT ... INTO TEMP
MIDDLE in select list
*************
When defining a "slice" in a hybrid table, we now allow the
following syntax in addition to and
( [ , ... ] )
That is, a list of dbspaces enclosed in parens
can be supplied. Example showing all three
variants for defining a hybrid "slice":
create table t (a int)
fragment by hybrid(a) expression
a < 2 in rootdbs.1, -- one dbspace
a = 2 in (db1, db2, db3), -- dbspace list (new for 8.30)
remainder in dbsl; -- dbslice
Note that this syntax is also used in the ALTER...INIT statement.
*************
New COPY TABLE and DELETE COPY commands for local table
replication
COPY TABLE IN [ , ... ]
DELETE COPY OF TABLE ALL
*************
New syntax has been added to CREATE TABLE and CREATE INDEX to
support range fragmentation and clustering.
The fragmentation-method can take the following general form
FRAGMENT BY ROUND ROBIN or
FRAGMENT BY HASH ...
FRAGMENT BY HYBRID ...
Informix also supports a new fragmentation method called
FRAGMENT BY RANGE, which has 4 variations: Linear range,
Hybrid range, Hybrid Column Major, and Hybrid Row Major
For CREATE INDEX, the fragmentation method MUST NOT specify
the FRAGMENT BY RANGE syntax.
The CREATE INDEX statement supports the following additional
syntax. In this case, the CLUSTER keyword is required, RANGE
BY is required and FRAGMENT BY cannot be specified.
Additional Syntax:
create [ UNIQUE ] CLUSTER ...
[ FILLFACTOR ]
RANGE BY ( )
[ LOCK MODE ... ]
III. FIXED CUSTOMER-REPORTED PROBLEMS
PTS # Description
----- -----------
43233 Should change code to use more efficient string/memory
routines to improve performance.
92103 With array fetch enabled, frontend doesn't recover from
-451 error bug returns -439 for all subsequent
operations.
97036 An XA client fails to reconnect if the online is bounced
(onmode -ky) unless xa_close() is called.
97191 File descriptors used up by multithread ESQL/C program.
97572 ESQL program is setting errno to 2 when no error exists.
97955 Decimal to double conversion with maximum number of
digits causes crashing.
98305 ESQL host variables of type string are not filled
according to the documentation when the value comes from
a varchar column.
98416 ifx_var_getdata fails after an empty string read on a
column of type html.
98620 Data corruption occurs on table with blob field.
98949 Segv is possible in applications using sqlda structure
to insert character strings into ANSI database if
sqlidata is not initialized.
99892 ESQL/C preprocessor ignores code following comment if a
reference to a defined variable precedes the comment.
100055 When performing an esql -e, some sql statements get
lost.
100355 Bus error when host variable of type character is larger
than max unsigned short.
100398 Segmentation violation using a structure in the
diagnostic area of the get diagnostics statement.
100566 Frontend core at disconnect.
100862 Prepared update/select/delete/insert execution is
extremely slow. Significant performance loss up
to a factor of 100.
101708 Describe statement leaks memory in the call from
_iqdescribe to _iqnormdesc.
103262 Using #ident in declare section causes #line number
to be blank (""), which causes assertion failure
/core dumping during C Compilation.
Windows Only*Windows Only*Windows Only*Windows Only*Windows Only*Windows
96033 CAN'T LINK CLIENT PROGRAM FOR
TIMESERIES ON NT. GLS_ENV IS NOT RESOLVED.
97244 ESQL/C FAILED TO COMPILE
/VOBS/QA_TRISTAR/NETWORK/DML/BUG19101.JOB
WITH ERROR C2026: STRING TOO BIG, TRAILING CHARACTERS
TRUNCATED.
97450 LONGID NAMES DO NOT WORK FOR SERVERNAME, HOSTNAME,
SERVICENAME,PROTOCOLNAME ETC
98588 /VOBS/TRISTARM/SQLI/IQDIAG.C : COMPILATION FAILS.
PROTOTYPE IS REQUIRED. PLEASE SEE THE LONG DESCRIPTION.
99883 IF YOU ATTEMP TO CONNECT TO A SERVER WITH DB LOCALE
JA_JP.03A4, YOU GET A -406 ERROR, WHEREAS PROBLEM IS
MISSING LOCALE/CONVERSION FILES.
97450 LONGID NAMES DO NOT WORK FOR SERVERNAME, HOSTNAME,
SERVICENAME,PROTOCOLNAME ETC
98459 SQLVAR_STRUCT.SQLLEN IS DEFINED AS A LONG. USED TO
BE A SHORT. MANUAL SAYS IT SHOULD BE A SHORT.
98620 DATA CORRUPTION OCCURS ON TABLE WITH BLOB FIELD ON
USING SDK 2.01
*End Windows Only*End Windows Only*End Windows Only*End Windows Only*
==========================
IV. KNOWN PRODUCT DEFICIENCIES
1. Warning regarding mapped data types
-----------------------------------
We would like to notify our customers that the mapped data
types
int4, int2, int1, mint, mlong, MSHORT and MCHAR
that are defined in the proposed new ifxtypes.h (scheduled
for 2.30) will be reserved by Informix and hence should NOT
be used by the customers in "typedef and/or "" statements. In
case the customers are using the above mapped data types
(int4, int2 etc), and they want to recompile their applications,
they would be required to modify their applications to use some
other mapping instead, which do not clash with the above mapping
s
(eg: INT4, INT2, INT1 etc).
2. Varchar Host Variables
----------------------
A NULL varchar host variable and an empty varchar host variable
have the same representation: '\0'. For fetching into a varchar
host variable, an indicator variable must be used to distinguish
between the two. If the value is '\0' and the indicator variable
is -1, then the host variable is a NULL varchar. If the value is
'\0' and the indicator variable is not -1, then the host variable
is an empty varchar.
Same thing applies to insert. If the varchar host variable has
value '\0' and the indicator variable is set to -1, then NULL
will be inserted. On the other hand, if the indicator variable
is set to some value greater than or equal to 0, then an empty
string is inserted.
The risnull() function cannot tell the difference between an
empty varchar host variable and a NULL host variable.
3. Use of Untyped Collection Host Variable with Stored Procedures
----------------------------------------------------------------
There is a known problem using untyped collection host variable
with stored procedure against the 9.12 and prior releases of
Informix Dynamic Server. When inserting an untyped collection
host variable which value is the return value of a stored
procedure, error -9628 will be raised. Note that this is
applicable ONLY when the esql application is run against Informix
Dynamic Server release 9.12 or earlier (in all platforms).
The problem is fixed in Informix Dynamic Server release 9.13
or later.
EXAMPLE:
========
$collection untyped;
$execute function spl() into :untyped;
(where spl() returns a collection)
$insert into mytab values (:untyped);
Work around is to use typed or named collection host variables.
4. Use of LVARCHAR pointers and Client Collections
-----------------------------------------------
There is a known problem with UPDATE or INSERT of client
collections or rows when using an lvarchar pointer host
variable and the lvarchar APIs. However, SELECT/FETCH work
correctly with client collections and rows.
Note that the lvarchar pointer and the lvarchar APIs work
correctly for all other statements that do not pertain to
client collections and rows.
EXAMPLE OF UPDATE :
===================
exec sql begin declare section;
lvarchar *lvar;
row (lv lvarchar(20)) r1;
exec sql end declare section;
exec sql allocate row :r1;
ifx_var_flag (&lvar, 0); /* User does allocation */
ifx_var_alloc(&lvar, 20);
ifx_var_setdata(&lvar, "xxxxx", 6);
exec sql update table (:r1) set lv = :lvar; /* doesn't work */
The work around is to use lvarchar arrays for the time being.
EXAMPLE OF WORKAROUND FOR ABOVE PROBLEM:
========================================
exec sql begin declare section;
row (lv lvarchar(20)) r1;
lvarchar lvar[20];
lvarchar lvarret[20];
exec sql end declare section;
exec sql allocate row :r1;
strcpy(lvar, "xxxxx");
exec sql update table(:r1) set lv = :lvar;
exec sql select * into :lvarret from table(:r1);
printf("data is %s\n", lvarret);
EXAMPLE OF SELECT WITH LVARCHAR API AND ROW HOST VARIABLES:
==========================================================
exec sql begin declare section;
row r1;
lvarchar *lvar;
char *s;
exec sql end declare section;
exec sql allocate row :r1;
exec sql create database xx;
exec sql create row type dbrow(r1 lvarchar);
exec sql create table tabrow(col dbrow);
exec sql insert into tabrow values (row("abcdef")::dbrow);
exec sql select * into :r1 from tabrow;
ifx_var_flag(&lvar, 1); /* Have SQLI do the allocation */
/**
* This WILL WORK without any problems
*/
exec sql select * into :lvar from table(:r1);
s = (char *) ifx_var_getdata(&lvar);
printf("data is %s\n",s);
V. RUNNING SETNET32 WITH SILENT OPTION (Windows only)
SETNET32 program can be run silently in the background without
bringing up it's Windows graphical interface. This is done by
loading the configuration file from a previously stored
.nfx file. The format to load from a DOS command line is as
follows:
setnet32 -l savedcfg.nfx
To create a .nfx file, run setnet32 and make the required
changes to the configuration file. From the main environment
tab, choose the "Save to File" option. This will create or
allow you to save the configuration information to a file
at a location of your choice with the extension *.nfx. You
can, of course, choose the filename for the configuration to
be saved. This is the same .nfx file that you can
load silently through the setnet32 silent interface, as
noted above.
--------------------------------------------------------------------------------
=================================
RELEASE NOTES
FOR
INFORMIX-CLI 2.80.0008.UC1 PRODUCT RELEASE
DATE: 18 Dec 1998
=================================
TABLE OF CONTENTS
I. Database Servers Tested
II. System Requirements
III. Driver Managers
IV. Files Installed
V. Major Features in INFORMIX-CLI 2.8
VI. Changes to infxcli.h file
VII. Troubleshooting INFORMIX-CLI for Windows
VIII. Known Product Deficiencies
IX. 8.3 SELECT with UPDATE not yet supported by CLI driver
X. Client Functions Not Support ***UD ONLY ***
XI. CLI 2.8 and CLI 2.5 Differences
XII. MTS *** WINDOWS-ONLY ***
XIII. Fixed Customer Reported Problems
XIV. Set and Get default UDT (User Defined Type) fetch type.
XV. Arrays of Parameter support and Insert Cursor support
===============================
I. DATABASE SERVERS TESTED
INFORMIX-CLI 2.8 has been tested for the following Informix
database servers:
- Informix Dynamic Server, Version 7.3x
- Informix Dynamic Server, Workgroup Edition, Version 7.3x
- Informix Dynamic Server with Advanced Decision Support and Extended
Parallel Options, Version 8.2x
- Informix Dynamic Server with Universal Data Option, Version
9.14.
===============================
II. SYSTEM REQUIREMENTS
Windows Requirements
--------------------
The system requirements for running INFORMIX-CLI in a Windows NT or
Windows 95 environment are the following:
* Windows NT version 3.51 or later, Windows 95, or Windows 98.
* 16 megabytes of available RAM, more is preferable.
* 8.5 megabytes of hard-disk space available before installation.
* Any TCP/IP protocol that is Windows Sockets 1.1-compliant.
* Microsoft Visual C++ compiler version 2.0 or later. INFORMIX-CLI
does not support any other C compiler.
===============================
III. DRIVER MANAGERS
Windows Driver Managers
-----------------------
Version Shipped
---------------
INFORMIX-CLI for Windows ships with the Microsoft Driver Manager
Version 3.5.
Problems when Using Version 3.0
-------------------------------
If other programs that you are using require
you to use Microsoft Driver Manager Version 3.0, a buffer-size
problem might occur with some of your INFORMIX-CLI applications.
The problem can occur when Microsoft Driver Manager Version 3.0
doubles the total number of bytes available to return. The following
steps provide an example of this problem:
1. A column name that you are retrieving consists of 15 characters
(but you do not know this).
2. You call SQLDescribeCol() with cbColNameMax set to 10.
3. SQLDescribeCol() returns a value of 30 for pcbColName.
SQLDescribeCol() should have returned a value of 15 for pcbColName.
However, Microsoft Driver Manager Version 3.0 doubled pcbColName
because it doubles the total number of bytes available to return
when the output buffer is not large enough to hold all the data.
4. You reallocate the szColName buffer for 30 bytes.
5. You call SQLDescribeCol() with cbColNameMax set to 30.
6. SQLDescribeCol() returns a value of 15 for pcbColName.
Microsoft Driver Manager 3.0 does not double the total number of
bytes available to return when the output buffer is large enough
to hold all the data.
7. If you do not compare the first pcbColName value to the second
pcbColName value, then you do not have a problem. However, if you
compare the two values and expect them to be the same, you will
conclude that an error has occurred when, in fact, an error has not
occurred.
For information about how to install the correct version of Microsoft
Driver Manager, see the README file for the Windows version of
INFORMIX-CLI.
UNIX Driver Manager
-------------------
INFORMIX-CLI for UNIX ships with the INTERSOLV Driver Manager
Version 3.0.
===============================
IV. FILES INSTALLED
Files on Windows
----------------
In the Windows environment, the installation procedure installs files
into the following directories:
Directory Description
--------- -----------
INFORMIXDIR\bin finderr.exe and DLLs
INFORMIXDIR\demo\clidemo Samples
INFOMRIXDIR\gls\cm3 GLS charmap files and registry
files
INFORMIXDIR\gls\cv9 GLS code set conversion files
INFORMIXDIR\gls\lc11 GLS locale files
INFORMIXDIR\incl\cli Header files: infxcli.h, sql.h,
sqlext.h
INFORMIXDIR\lib Libraries
INFORMIXDIR\msg clixmsg.pam
INFORMIXDIR\msg\en_us\04e4 Message files and errmess.hlp
INFORMIXDIR\release\en_us\04e4 Document notes and release notes
WINDOWSSYSTEMDIR Common DLLs and files for the
Microsoft Driver Manager
Files on UNIX
-------------
On UNIX, in addition to common ClientSDK distribution, the installation
procedure installs files into the following directories:
Directory Description
--------- -----------
INFORMIXDIR/demo/cli Demos
INFORMIXDIR/incl/cli Header files: infxcli.h,
infxsql.h
INFORMIXDIR/lib/cli Libraries for INFORMIX-CLI and
for the INTERSOLV Driver
Manager
INFORMIXDIR/lib/esql Libraries for INFORMIX-CLI and
INFORMIX-ESQL/C
INFORMIXDIR/msg clixmsg.pam
INFORMIXDIR/msg/en_us/0333 Message files for INFORMIX-CLI
INFORMIXDIR/release/en_us/0333 Document notes, release notes, and
machine notes
Library Names on Windows
------------------------
On Windows, the installation procedure installs the following libraries
into INFORMIXDIR\lib:
iclit09a.lib
iregt07b.lib
Library Names on UNIX
---------------------
On UNIX, the installation procedure installs the following libraries into
INFORMIXDIR/lib/cli. In each Data Source specification section in the
.odbc.ini file, set the Driver value to one of these library filenames:
Filename Description
-------- -----------
libifcli.a or libcli.a Static version for single threaded
library (non-threaded)
libifcli.so or iclis09a.so Shared version for single (non-threaded)
library
libthcli.a Static version for multi-threaded library
libthcli.so or iclit09a.so Shared version for multi-threaded library
===============================
V. MAJOR FEATURES IN INFORMIX-CLI 2.8
Multithreading Support
----------------------
For a multithreaded application, INFORMIX-CLI latches an external handle
(such as ENV, DBC, and STMT) while a thread is using the handle. If a
concurrent thread tries to access an external handle that is already in
use, the concurrent thread waits until the owning thread releases the
handle. INFORMIX-CLI latches an external handle at the lowest possible
level in the handle tree to achieve the greatest concurrency.
Multiple Connection Support in Threads
--------------------------------------
INFORMIX-CLI supports multiple database connections in the same or
different threads. Connections are always explicit and are
simultaneously active. Each connection operates within its own scope
and does not interact with any other connection. Any thread can access
handles that any other thread created. Any thread can support multiple
connections simultaneously.
SQLCancel() Support
-------------------
INFORMIX-CLI supports SQLCancel() for multithreaded applications. For
example, if you are executing a statement with hstmt1 in thread one,
you can call SQLCancel() for hstmt1 from thread two to cancel the
statement execution.
Server-Only Connection
----------------------
INFORMIX-CLI supports a server-only connection option which lets you
create a new database or drop an existing database.
Named Pipes
-----------
INFORMIX-CLI supports named pipes.
Exclusive Use of a Database
---------------------------
INFORMIX-CLI supports a connection option that lets you use a database
exclusively. By default, INFORMIX-CLI allows shared use of a database.
Row ID of the Last Inserted Row as a Statement Option
-----------------------------------------------------
The row ID of the last inserted row is visible and retrievable as a
statement option.
DBCENTURY Environment Variable Support
--------------------------------------
INFORMIX-CLI supports the DBCENTURY environment variable, which
controls the setting of year values. DBCENTURY affects a CLI program
only when a user issues a statement that contains a date or datetime
string like the following one:
insert into datetable ( datecol ) values ("01/01/01");
Depending on the value to which DBCENTURY is set on the client, the
database server stores the date specified in this statement as either
01-01-1901 or 01-01-2001.
On a Windows NT platform, you can set DBCENTURY directly
into the registry under the following key:
\HKEY_CURRENT_USER\Software\Informix\Environment\DBCENTURY
Or a Windows NT, Windows 95, or Windows 98, you can set the value of
the DBCENTURY environment variable through Setnet32, which Informix
ships as part of the product.
On a UNIX platform, you can simply set the DBCENTURY environment
variable.
For information on how to set DBCENTURY, see the Informix Guide to
SQL: Reference.
===============================
VI. CHANGES TO infxcli.h
The following defines were added to infxcli.h:
* New SQL data types
* New InfoType values for SQLGetInfo()
* Access mode flags to use when creating or opening a smart
large object
* Create-time flags to use in the smart large object
specification structure
* Values for the whence argument that identifies the position
from which to start a seek
===============================
VII. TROUBLESHOOTING INFORMIX-CLI for Windows
Buy Microsoft ODBC SDK version 2.5 (or 3.0) or Dr. Deebee ODBC Tool
kits to help you troubleshoot your application.
===============================
VIII. KNOWN PRODUCT DEFICIENCIES
The following defects are known to exist in the current release of
INFORMIX-CLI 2.8. The defects are listed by PTS (Problem Tracking
System) number followed by a brief description. Technical support
will be provided with patches and maintenance releases to fix these
defects.
PTS # Description
----- -----------
82205 When it receives a PROCESS_DETACH message, CLI should clean
up all active threads, but it does not because CLI may not get a
THREAD_DETACH message for each active thread.
84697 CLI 2.8 crashes an Access client when it tries to fetch data from
a row data type, whereas CLI 2.7 fails with error -11064. CLI 2.8
either cannot determine the return types of a query or the return
types are inconsistent.
88735 When using the GLS QA_QA locale, a client can't fetch from table
names with embedded spaces.
92681 PowerBuilder 4x applications may not run properly outside
the PowerBuilder environment with CLI 2.80.
PowerBuilder 4x applications may not run properly outside the
PB because of different msvcrt40.dll used from the path. The
msvcrt40.dll that comes along with MSVC5.x is not redistributable.
Since Informix-CLI is compiled with MSVC 5.x and uses msvcrt.dll,
the PB 4 applications running outside the PowerBuilder may pickup
MSVC 4.x version of msvcrt40.dll which is not the same.
If MSVC 5.0 is installed, the PowerBuilder application will run
fine inside as well as outside the PowerBuilder.
94633 Columns created as decimal(8) and decimal(16) gets described as
real and double respectively instead of decimal.
This happens when client and server are running on dissimilar
hardware platforms - this can cause different floating point
formats to be used (IEEI and IEEM) on two platforms. In such
case float and smallfloat data will be transferred in decimal
format. Decimal(8) columns gets descscibed in the same way as
a smallfloat column does. and Decimal(16) columns gets described
the same way as float column does. If possible create columns
with explicit scale - like decimal(8,5) or decimal(8,2).
95281 SQLCancel() does not work correctly with ODS 7.3 for Windows NT 4.0.
A protocol error occurs. To work around this problem, install
NT Service Pack 3 and then install the Tear Patch 2 from Microsoft.
Tear Patch 2 is available at:
ftp://ftp.microsoft.com/bussys/winnt/winnt-public
/fixes/usa/nt40/hotfixes-postSP3/teardrop2-fix
98950 The SQL_LEN_DATA_AT_EXEC(length) macro wraps around to a positive
value if the length specified is the maximum size of the data type.
This problem occurs due to overflow.
99509 CLOBs do not get null-terminated when they are retrieved. Therefore,
any attempt to display the CLOB causes junk characters to be displayed
at the end. To work around this problem, determine the size of the
CLOB and add the null-termination character.
100570 CLI 2.8 does not allow the user to do an insertion of a literal string
into a text column with SQLEXECDIRECT.
===============================
----------- IDS-AD/XP ONLY -------------------
IX. 8.3 SELECT with UPDATE not yet supported by CLI driver
The 8.3 syntax SELECT with UPDATE clause is not supported by the CLI driver
yet.
Workaround:
Set the SQL_ATTR_NOSCAN statement attribute to SQL_NOSCAN_OFF prior to
executing these statements. Note that due to this there cannot be any
native escape sequences in the statement.
----------- IDS-AD/XP ONLY -------------------
===============================
----------- UD-ONLY -------------------
X. Client Functions Not Support
INFORMIX-CLI does not support the following client functions:
* ifx_lo_copy_to_file()
* ifx_lo_copy_to_lo()
* ifx_lo_filename()
* ifx_lo_spec_free()
* ifx_lo_stat_free()
----------- UD-ONLY -------------------
===============================
XI. CLI 2.8 and CLI 2.5 Differences
The following features are supported by INFORMIX-CLI 2.5 but are not
supported by INFORMIX-CLI 2.7 and later.
Support for ODBC SQLSetStmtOption options:
SQLRESERVED_WORDS
SQLPSUEDO_COLUMNS
SQLFROM_RESERVED_WORDS
SQLWHERE_CLAUSE_TERMINATORS
SQLCOLUMN_FIRST_CHARS
SQLTABLE_MIDDLE_CHARS
SQLFAST_SPECIAL_MIDDLE_COLUMNS
SQLACCESS_CONFLICTS
SQLLOCKING_DURATION
SQLRECORD_OPTIONS
SQLQUALIFIER_SYNTAX
SQLLOCKING_SYNTAX
Support for the INSERT statement for text data:
With INFORMIX-CLI 2.5, TEXT data can be inserted as a
string literal.
INFORMIX-CLI 2.7 and 2.8 do not support this syntax.
INTERVAL data type
In INFORMIX-CLI 2.5, an INTERVAL data type is mapped to SQL_CHAR.
INFORMIX-CLI 2.7 and later does not support the INTERVAL data type.
===============================
----------- WINDOWS-ONLY ------------ WINDOWS-ONLY -------------------
XII. MTS
System Requirements
-------------------
In addition to the Windows system requirements described
earlier in these Release Notes, the MTS feature has the
following requirements:
* MTS 2.0 on Windows NT 4.0, Windows 95, or Windows 98.
* An Informix server that supports the TP/XA protocol.
* Windows NT version 4.0 with Service Pack 3 or Windows 95 or Windows 98.
* Microsoft Visual C++ compiler version 4.2 or later.
The MTS feature does not support any other C compiler.
Major Features
--------------
The INFORMIX-CLI implementation of MTS provides the
following major features:
- Supports distributed transactions in a Distributed
Database Environment.
- Supports connection pooling.
Product Deficiencies
--------------------
The INFORMIX-CLI implementation of MTS has the following
deficiencies:
- An inherited transaction may have a problem in joining other
transactions.
This problem can be represented as follows.
The two transactions (Inherited and Parent) will get
two different XIDs from the DTC; they will not share
the same lock space. They will be treated as two
different transactions by the server.
This may create a dead lock if they want the same resource.
This will not happen in an XA Transaction because both
the transactions get the same XID and share the lock space.
WorkAround: Try to isolate the resources
as much as possible (by using lock mode (row), indexing etc.).
- The last thread of a multi-threaded application may
hang if you are running
MTS using the library package option.
WorkAround: If you are running a multi-
threaded application, select the Server package option.
- User cannot spawn a thread within MTS component.
----------- WINDOWS-ONLY ------------ WINDOWS-ONLY -------------------
===============================
XIII. FIXED CUSTOMER-REPORTED PROBLEMS
The following defects were reported by customers and fixed. The
defects are listed by PTS (Problem Tracking System) number followed
by a brief description.
PTS # DESCRIPTION
----- -----------
73132 INFORMIX-CLI 2.50.TD2: The ODBC driver IVINF709.DLL is not
recognizing the unique index in a table and, therefore, no
updates are allowed from VB or MS-Access.
97613 USING ODBC DRIVERS, A VARCHAR FIELD WILL HAVE
TRAILING SPACES TRUNCATED.
This is still the default beahavior.
However for the users who wants the trailing
spaces in a VARCHAR field to be preserved,
a connection option SQL_INFX_ATTR_LEAVE_TRAILING_SPACES is
added. User can set this option to SQL_TRUE or SQL_FALSE. To
set and get this option value use ODBC functions
SQLSetConnectOption and SQLGetConnectOption. The default value
for this option is SQL_FALSE. This option is defined in
infxcli.h file.
98934 SQLPutData fails to convert data from SQL_C_CHAR to SQL
types other than SQL_CHAR and SQL_BINARY, i.e. conversion
of SQL_C_CHAR data provided using SQLPutData call to SQL
type, say SQL_DECIMAL fails.
The application sending data (rgbValue) for a
parameter to the driver at statement execution
time can send any character or binary data
values in parts to a column with any SQL data
type. The length of character data should be less than or
equal to 64 for data types other than BYTE, CHAR, VARCHAR,
TEXT, LVARCHAR, SQLUDTFIXED, SQLUDTCHAR.
Driver will return warning for "Data Truncation"
if the length is greater than 64.
98947 CLI 2.80 does not support SQL_CURSOR_COMMIT_BEHAVIOUR
SQL_CB_PRESERVE
CLI 2.80 now supports cursor commit behavior:
SQL_CB_PRESERVE.
On Win32 platforms:
Application can set cursor behavior using
CLI 2.80 DSN config
dialog box. Default cursor behavior is SQL_CB_CLOSE.
On UNIX platforms:
User needs to add flag 'CursorBehavior' to the
appropriate DSN entry in the .odbc.ini file.
When the flag is set to 0, i.e.
entry CursorBehavior=0 is added to the appropriate
DSN cursor behavior will be SQL_CB_CLOSE.
when CursorBehavior=1, cursor behavior will
be SQL_CB_PRESERVE.
When CursorBehavior flag is not set, or when it
is set to any value other than 0 or 1 - default
cursor behavior of Close
(SQL_CB_CLOSE) will be asumed.
101112 SYNTAX ERROR ON NESTED SELECT STATMENT WITH
INFORMIX CLI DRIVER.
Example: "select fname, (select customer_num from customer where
customer_num=101) from customer where customer_num=101",
used to get -201 syntax error
101327 SQLPREPARE() GIVES SYNTAX ERRORS WHEN THE SQL CREATING A STORED
PROCEDURE INCLUDES A BEGIN WORK STATEMENT
For instance if you try to prepare the following it used to give
a -11060 error (Syntax error)
CREATE PROCEDURE tst()
BEGIN WORK;
END PROCEDURE;
101977 CLI 2.8 does not handle DSN LESS connection.
If you did not create a DSN and tried to connect through the
SQLDriverConnect with the following syntax,
you got an error -11060
insufficient connection information.
The syntax of the connection string is:
connection-string ::= empty-string[;] | attribute[;] | attribute;
connection-string
empty-string ::=
attribute ::= attribute-keyword=attribute-value |
DRIVER=[{]attribute-value[}]
attribute-keyword ::= DSN | UID | PWD
| driver-defined-attribute-keyword
attribute-value ::= character-string
driver-defined-attribute-keyword ::= identifier
For Informix CLI Driver User has to use two additional key words
CLIENT_LOCALE and DB_LOCALE. User has to set it to default
locale even if he/she does not have a LOCALE set.
The default is en_US.CP1252.
The call to SQLDriverConnect looks like
rc = SQLDriverConnect(hdbc, NULL,"DRIVER=INFORMIX 2.80 32 BIT;
DATABASE= ovs;HOST=clipper;SERVICE=turbo;SERVER=ol_clipper;PROTOCOL=onsoctcp
;UID=odbc;PWD=odbc;CLIENT_LOCALE=en_US.CP1252;DB_LOCALE=en_US.CP1252;",
SQL_NTS, szerrormessage, 256, pcberrormessage, SQL_DRIVER_NOPROMPT);
102448 LOCALE CONVERSION CHANGES WHEN SPECIFY TRANSLATION LIBRARY WITH
IN DATA SOURCE. The default conversion of locales did not use
any translation library and used to work with default English
locales only. The default translation library is now set to
"igo4n304.dll", if no translation library is specified in DSN.
103715 CLI 2.80 DOES NOT WORK WITH SE VERSION 7.2X COMES BACK WITH 554
SYNTAX DISALLOWED. The driver fixes the generation of catalog
queries with tablename qualifier like 'database:owner.tablename'
which is not allowed per SE syntax.
104520 WHEN YOU CREATE A DSN FOR A PARTICULAR SERVER USING ODBCAD32,
THE OPTIONS SETTING FOR THE SERVER SET IN SETNET32 IS LOST.
This is a WIN32 platform specific bug.
Currently CLI DSN create dialog box does not allow user to set
the options field in the sqlhosts file (stored in the windows
registry).
Workaround is as follows:
To set the options field (say when you are using CSM encry-
ption), you will have to use setnet32 utility.
When you create a CLI DSN - it creates an entry for the given
Informix server in the Windows registry. Use setnet32 once you
have created an entry for the given CLI DSN. Edit the sqlhosts
entry for the given server and set the options field. If you
edit the CLI DSN after the options field is set using setnet32,
you will need to rerun setnet32 to set the options field.
===============================
---------- IDS UDO ONLY --------------
XIV. Set and Get default UDT (User Defined Type) fetch type.
When UDTs are fetched by the Informix CLI driver, the CLI driver needs to
inform the server about what format the data should be sent back to the
client. The formats allowed are Character and Binary.
Earlier behavior of the CLI driver was:
. If user bind a UDT column with C type SQL_C_CHAR, CLI will request the
server to send back the UDT data in character format.
. If user binds the same column with C type SQL_C_BINARY, CLI will request
server to send back UDT data in Binary format.
. If user does not bind the UDT column - default was taken as SQL_C_BINARY.
User is now allowed to change the default behavior.
User can set a connection option SQL_INFX_ATTR_DEFAULT_UDT_FETCH_TYPE to
either SQL_C_CHAR or SQL_C_BINARY. Default fetch type is SQL_C_BINARY,
this will maintain backward compatibility. This option is defined in
infxcli.h file.
To set and get this option value use ODBC functions SQLSetConnectOption
and SQLGetConnectOption. Also user can manully add a value for the given
DSN in the Windows registry as:
SQL_INFX_ATTR_DEFAULT_UDT_FETCH_TYPE=SQL_C_CHAR
or this value can be set to SQL_C_BINARY.
Above is true for WIN32 platforms only, for UNIX platform user will need
to update .odbc.ini.
---------- IDS UDO ONLY --------------
===============================
XV. Arrays of Parameter support and Insert Cursor support
These two features are added to allow user to do fast bulk inserts.
Arrays of Parameter allows user to specify an array of parameter and
execute a statement. The statement will be executed for each row in
the given array of parameters. In its current implementation, the
statement specified by the user can only be an Insert statement.
To specify an array of parameter user will need to use SQLBindParam
calls along with call to function SQLParamOptions. SQLParamOptions
allows user to set the count of the rows in the array of parameters.
An Insert statement executed after the above mentioned calls will
get executed for each row of the array.
Above support speeds up the data insert process considerably and
simplifies the ODBC application for the user.
To further speed up the data insert process - insert cursor support
is added. When user sets statement option SQL_ENABLE_INSERT_CURSOR,
along with the array of parameters specified, CLI does not make a
round trip to the server for each row to be inserted. CLI opens
an insert cursor, buffers up the insert requests on the client end
and when the buffer gets full (size of the buffer is currently
set to 4K and user cannot change it), CLI sends across this buffer
to the server. Depending on the size of the data each insert
reuqest carries with it, number of network round trips between
client and server can reduce manifold with the insert cursors.
Option SQL_ENABLE_INSERT_CURSOR is defined in infxcli.h file.
Support for insert cursors is completely transparent to the user.
User need not make any additional calls to open and close an insert
cursor.
Since insert cursor buffers up the insert requests on the client
side with a limitaion that each set of data must occupy same space
- data types whose size can be variable are not supported by the
insert cursors. These types are TEXT, BYTE, UDTs, CLOB, BLOB and
LVARCHAR.
Attached is a sample program that demonstrates the use of Arrays of
Parameter and Insert Cursors.
#include
#include
#include
#include "infxcli.h"
#include "odbcqa.h"
void main(int argc, char *argv[])
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
UCHAR create[MAX_NAME_LEN + 1];
UCHAR insert[MAX_NAME_LEN + 1];
DWORD iRow;
int i;
short c1[5];
long c2[5];
char c3[5][10];
char c4[5][11];
char c5[5][10];
float c6[5];
double c7[5];
DATE_STRUCT c8[5];
TIMESTAMP_STRUCT c9[5];
DWORD c1ind[5];
DWORD c2ind[5];
DWORD c3ind[5];
DWORD c4ind[5];
DWORD c5ind[5];
DWORD c6ind[5];
DWORD c7ind[5];
DWORD c8ind[5];
DWORD c9ind[5];
if ( argc != 4 )
{
printf("Usage: insert_cursor datasourcename userid passwd\n");
assert(0);
}
rc = SQLAllocEnv(&henv);
assert(rc!=SQL_ERROR);
rc = SQLAllocConnect(henv, &hdbc);
ASSERT(henv, NULL, NULL);
rc = SQLConnect(hdbc, argv[1], SQL_NTS, argv[2], SQL_NTS, argv[3], SQL_NTS);
ASSERT(NULL, hdbc, NULL);
rc = SQLAllocStmt(hdbc, &hstmt);
ASSERT(NULL, hdbc, NULL);
rc = SQLExecDirect(hstmt, "DROP TABLE test", SQL_NTS);
strcpy(create, "CREATE TABLE test (a smallint, b int, c decimal( 6,2 ), d char(10), e varchar(10), f smallfloat, g float, h date, i datetime year to
fraction(5) )");
rc = SQLExecDirect(hstmt, create, SQL_NTS);
ASSERT(NULL, NULL, hstmt);
/*
** remove following call if you just want to use array of parameter,
without
** insert cursor feature.
*/
/* Set the statement option to enable insert cursors */
rc = SQLSetStmtOption(hstmt,SQL_ENABLE_INSERT_CURSOR,1);
ASSERT(NULL, NULL, hstmt);
rc = SQLParamOptions(hstmt, 5, &iRow);
ASSERT(NULL, NULL, hstmt);
/* Bind param 1 */
rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT,
SQL_SMALLINT, (SWORD)NULL, 0,
c1, 0, c1ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 2 */
rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG,
SQL_INTEGER, (SWORD)NULL, 0,
c2, 0, c2ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 3 */
rc = SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,
SQL_DECIMAL, 6, 2,
c3, 10, c3ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 4 */
rc = SQLBindParameter( hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
8, 0,
c4, 11, c4ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 5 */
rc = SQLBindParameter( hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
10, 0,
c5, 10, c5ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 6 */
rc = SQLBindParameter( hstmt, 6, SQL_PARAM_INPUT, SQL_C_FLOAT,
SQL_REAL, (SWORD)NULL, 0,
c6, 0, c6ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 7 */
rc = SQLBindParameter( hstmt, 7, SQL_PARAM_INPUT, SQL_C_DOUBLE,
SQL_DOUBLE, (SWORD)NULL, 0,
c7, 0, c7ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 8 */
rc = SQLBindParameter( hstmt, 8, SQL_PARAM_INPUT, SQL_C_DATE, SQL_DATE,
(SWORD)NULL, 0,
c8, 0, c8ind );
ASSERT(NULL, NULL, hstmt);
/* Bind param 9 */
rc = SQLBindParameter( hstmt, 9, SQL_PARAM_INPUT, SQL_C_TIMESTAMP,
SQL_TIMESTAMP, 24, 4,
c9, 0, c9ind );
ASSERT(NULL, NULL, hstmt);
/* Fill up the data array */
for( i = 0; i < 5; i++ )
{
c1[i] = i+3;
c2[i] = 110;
strcpy( c3[i], "1230.45" );
strcpy( c4[i], "char" );
strcpy( c5[i], "varchar" );
c6[i] = ( float )1.1e+03;
c7[i] = ( double )1.1e+05;
c8[i].year = 2000;
c8[i].month = 2;
c8[i].day = 29;
c9[i].year = 1996;
c9[i].month = 7;
c9[i].day = 4;
c9[i].hour = 12;
c9[i].minute = 30;
c9[i].second = 30;
c9[i].fraction = 2000;
c1ind[i] = 0;
c2ind[i] = 0;
c3ind[i] = SQL_NTS;
c4ind[i] = 8;
c5ind[i] = SQL_NTS;
c6ind[i] = 0;
c7ind[i] = 0;
c8ind[i] = 0;
c9ind[i] = 0;
}
/* make all columns for third row NULL */
c1ind[2] = SQL_NULL_DATA;
c2ind[2] = SQL_NULL_DATA;
c3ind[2] = SQL_NULL_DATA;
c4ind[2] = SQL_NULL_DATA;
c5ind[2] = SQL_NULL_DATA;
c6ind[2] = SQL_NULL_DATA;
c7ind[2] = SQL_NULL_DATA;
c8ind[2] = SQL_NULL_DATA;
c9ind[2] = SQL_NULL_DATA;
strcpy(insert, "INSERT INTO test VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
rc = SQLExecDirect(hstmt, insert, SQL_NTS);
ASSERT(NULL, NULL, hstmt);
rc = SQLFreeStmt(hstmt, SQL_DROP);
ASSERT(NULL, NULL, hstmt);
rc = SQLDisconnect(hdbc);
ASSERT(NULL, hdbc, NULL);
rc = SQLFreeConnect(hdbc);
ASSERT(NULL, hdbc, NULL);
rc = SQLFreeEnv(henv);
ASSERT(henv, NULL, NULL);
/*
** Use tool like Microsoft ODBC Test or another ODBC program to
** verify that data has been properly inserted into the table 'test'
*/
}
===============================
==============================================
RELEASE NOTES
FOR
INFORMIX-OBJECT INTERFACE FOR C++ VERSION 2.60
DATE: 12/18/98
==============================================
TABLE OF CONTENTS
I. OVERVIEW OF RELEASE NOTES
II. INFORMIX DATABASE SERVER COMPATIBILITY
III. INSTALLING OBJECT INTERFACE FOR C++
IV. NEW FEATURES
V. C++ COMPILER INTERPRETATION OF LONG DOUBLES
VI. KNOWN PROBLEMS
VII. FIXED PROBLEMS
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I. OVERVIEW OF RELEASE NOTES
=============================
The purpose of these release notes is to make you aware of special actions
that are required to install, configure, and use INFORMIX-Object Interface
for C++ on your computer. This file also describes new features and feature
differences from earlier versions of this product and other Informix
products and how these differences affect current products. In addition,
this file contains information about known bugs and their workarounds.
This release notes document is not intended to be all-inclusive; it should
be used as an addendum to the "INFORMIX-Object Interface for C++
Programmer's Guide," which provides comprehensive information about product
features and product behavior.
This release notes document is for system administrators who install Object
Interface for C++ and for developers who use Object Interface for C++ to
create client applications.
II. INFORMIX DATABASE SERVER COMPATIBILITY
===========================================
Informix has simplified its product offerings. References to previous
product names apply equally to the new configurations, as indicated in the
following table.
--------------------------------------------------------------------------
| Previous Product Offering | New Product Offering/Configuration |
|-------------------------------------------------------------------------|
| INFORMIX-OnLine Dynamic Server | Informix Dynamic Server |
|-------------------------------------------------------------------------|
| INFORMIX-Universal Server | Informix Dynamic Server with |
| | Universal Data Option |
|-------------------------------------------------------------------------|
| INFORMIX-OnLine Extended | Informix Dynamic Server with |
| Parallel Server | Advanced Decision Support and |
| | Extended Parallel Options |
|-------------------------------------------------------------------------|
| INFORMIX-OnLine Workgroup Server | Informix Dynamic Server, Workgroup |
| | Edition |
|-------------------------------------------------------------------------|
| INFORMIX-OnLine Workstation | Informix Dynamic Server, Developer |
| | Edition |
---------------------------------------------------------------------------
Version 2.60 of Object Interface for C++ has been tested with the following
database server configurations:
- Informix Dynamic Server, Version 7.3x
- Informix Dynamic Server, Workgroup Edition, Version 7.3x
- Informix Dynamic Server with Advanced Decision Support and Extended
Parallel Options, Version 8.2x
- Informix Dynamic Server with Universal Data Option, Version
9.14.UCx (UNIX) and 9.14.TCx (Windows NT)
III. INSTALLING OBJECT INTERFACE FOR C++
=========================================
Object Interface for C++ is provided as a component of Informix Client
Software Developer's Kit Version 2.20. Refer to the "Informix Client
Products Installation Guide" for instructions for installing the Client
SDK.
IV. NEW FEATURES
=================
There are no new features supported in this release.
V. C++ COMPILER INTERPRETATION OF LONG DOUBLES
===============================================
LIBC++ provides data type conversion functions in the value interface
ITConversions to enable conversion of C++ type long double. The intent is
to permit fetching floating point values into C++ long double variables.
However, the Client SDK does not currently allow for conversion of long
double values into Informix decimal or float types.
Thus, LIBC++ applications should always ensure that any floating literal
passed to ITConversions::ConvertFrom(long double val) is within the double
range. Otherwise, ConvertFrom(long double val) will return FALSE for value
objects that contain SQL MONEY, FLOAT and SMALLFLOAT values.
Object Interface for C++ is written with the assumption that a floating
literal without the ANSI C++ specified suffixes l or L (example: 12.988
instead of 12.988L) assigned to a long double variable will be treated by
the C++ compiler as a long double. This assumption agrees with the ANSI C++
Draft Standard (Doc No: X3J16/94-0027, WG21/N0414, 25 January 1994), which
states that the type of a floating literal is double unless explicitly
specified by a suffix. The suffixes f and F specify float; the suffixes l
and L specify long double. Thus, the suffix l or L must be applied to a
floating literal in order for it to be interpreted by the C++ compiler as a
long double value.
Different versions of the Sun C++ compiler applied the ANSI C++
standard as it existed at the time of the compiler development and release.
For example, Sun C++ 4.1 conforms to the ANSI standard described above,
whereas pre-4.1 Sun C++ compilers always treated all floating literals,
with or without the l and L suffixes, as long double values if they were
assigned to a long double variable.
The following C++ code example demonstrates assignment of a floating
literal to a long double variable, casting to a double, and comparison
between the double and long double:
long double d = 12.988;
double dasd = (double) d;
if( dasd == d )
return 0;
else return 1;
The following table compares support for the ANSI C++ draft standard
referenced above among several versions of Sun C++ compilers. The table
shows how the different compiler versions evaluated the expression (dasd ==
d). If the expression evaluatates to FALSE, the values are not equal.
Sun C++ compiler versions Evaluation of (dasd == d )
--------------------------------------------------------
Sun C++ 4.0 (Dec 1993) FALSE (values are not equal)
Sun C++ 4.0.1 (Jul 1994) FALSE (values are not equal)
Sun C++ 4.1 (Oct 1995) TRUE (values are equal)
VI. KNOWN PROBLEMS
===================
This section describes the known problems with this release of Object
Interface for C++.
Bug 83547
Platform: Microsoft Windows NT
Compiler: Microsoft Visual C++ 4.2
Executing ITInt8 may generate ERROR C2593: 'OPERATOR <<'IS AMBIGUOUS.
This results from a known compiler bug in Microsoft Visual C++ 4.2, which
does not support 64-bit I/O.
---------------------------------------------------------------------------
Bug 83761
Platform: all
Compiler: all
The Object Interface for C++ fails to returns a set of UDTs when using
ITRoutineManager. This is a duplicate of bug 95487.
---------------------------------------------------------------------------
Bug 88350
Platform: all
Compiler: all
Running $INFORMIXDIR/DEMO/C++/CURSTST gives error
MY_ERROR_HANDLER: ERRORLEVEL=5 SQLSTATE=IX000 XIX000:-7420:ARGUMENT
(CLIENT LIBRARY ERROR) is invalid.
This is a duplicate of DataBlade API bug 92959.
---------------------------------------------------------------------------
Bug 101347
Platform: all
Compiler: all
For CSDK220 the test Value/LargeObj/LargeObj01 for LIBC++ fails when run
with UNIX as client and UNIX 914 server. Output is not as expected.
---------------------------------------------------------------------------
Bug 101671
Platform: all
Compiler: all
Wrong results are returned by the ConverDate() method.
---------------------------------------------------------------------------
Bug 101676
Platform: all
Compiler: all
Interface call ConvertDatetime() fails, returning incorrect results.
---------------------------------------------------------------------------
Bug 102234
Platform: all
Compiler: all
The ITLargeObject::Seek() returns a wrong result. This method is designed
to return a long value, but the function returns multiple spaces and a
control character at the end.
---------------------------------------------------------------------------
Bug 102364
Platform: all
Compiler: all
/client/c++if/test/makefile causes misleading error messages on some
platforms through use of timeseries library.
---------------------------------------------------------------------------
Bug 103530
Platform: all
Compiler: all
ITValue::FromPrintable("ROW(NULL)::.
ITDBInfo::CreateDatabase() no longer gives a segment violation error.
This bug is a duplicate of client-side DataBlade API bug 82255
which has been fixed.
---------------------------------------------------------------------------
Bug 83360
Platform: Microsoft Windows NT 4.0
Compiler: all
The LIBCPP component of the Client Software Developer's Kit installation
no longer creates an invalid directory structure. This bug is a duplicate
of the BladePack installation bug 85847, which has been fixed.
---------------------------------------------------------------------------
Bug 91310
Platform: all
Compiler: all
A memory leak in ITLocale was fixed.
---------------------------------------------------------------------------
Bug 91312
Platform: all
Compiler: all
This is a duplicate of bug 91310.
---------------------------------------------------------------------------
Bug 91313
Platform: all
Compiler: all
This is a duplicate of bug 91310.
---------------------------------------------------------------------------
Bug 91443
Platform: all
Compiler: all
If you do not execute ITQuery::NextRow() until all rows have been
retrieved, LIBC++ no longer aborts with an access violation on Win32
platforms and no longer aborts with a segmentation violation and core dump
on Unix platforms.
---------------------------------------------------------------------------
Bug 94854
Platform: all
Compiler: all
Numeric and string value objects can now be converted to C++ integral
type "bool" on those platforms where the C++ compiler supports integral
type "bool".
---------------------------------------------------------------------------
Bug 98489
Platform: UNIX
Compiler: all
LIBC++ platform-independent product makefile now works on porting
platforms. It had failed on some porting platforms because the make utility
on those platforms did not support a specific form of symbol substitution.
---------------------------------------------------------------------------
Bug 95380
Platform: all
Compiler: all
ITCURSOR: ITPOSITIONLAST no longer gives the first row instead of the last
row when called once. The last row is now fetched correctly.
This bug is a duplicate of ESQL/C SQL bug 98169, which has been fixed.
---------------------------------------------------------------------------
Bug 95383
Platform: all
Compiler: all
ITCURSOR: ITPOSITIONNEXT when called after ITPOSITIONLAST no longer gives a
duplicate row if a cursor is created for select from view.
This bug is a duplicate of ESQL/C SQL bug 98169, which has been fixed.
---------------------------------------------------------------------------
Bug 95438
Platform: all
Compiler: all
ITCURSOR: ITPOSITIONNEXT, when called in a loop, no longer gives
unpredictable results when a cursor is created for select from view.
This bug is a duplicate of ESQL/C SQL bug 98169, which has been fixed.
---------------------------------------------------------------------------
Bug 95442
Platform: all
Compiler: all
ITCURSOR: ITPOSITIONABSOLUTE no longer gives wrong results if a cursor is
opened for select from view.
This bug is a duplicate of ESQL/C SQL bug 98169, which has been fixed.
---------------------------------------------------------------------------
Bug 95444
Platform: all
Compiler: all
ITCURSOR: ITPOSITIONPRIOR no longer gives unpredictable results when a
cursor is created for select from view.
This bug is a duplicate of ESQL/C SQL bug 98169, which has been fixed.
---------------------------------------------------------------------------
Bug 100947
Platform: UNIX
Compiler: all
Global instances of LIBC++ classes are not created prior to calling the
main function on UNIX platforms Data General Intel and Sequent. The bug for
the UNIX environment has been closed, but the bug is open for the
environments UNIX: Data General Intel and UNIX: SEQUENT.
---------------------------------------------------------------------------
Bug 100968
Platform: UNIX
Compiler: all
ITRawData::Printable access violation in ITQuery::NextRow loop after
ITQuery::ExecForIteration on SELECT of OPAQUE type without ITValue
interface.
---------------------------------------------------------------------------
Bug 101395
Platform: UNIX
Compiler: all
ITLOCALE::CONVERT[DATE|DATETIME|NUMBER|MONEY] and
FORMAT[DATE|DATETIME|NUMBER|MONEY] now reset GLS error code.
---------------------------------------------------------------------------
Bug 101712
Platform: UNIX
Compiler: all
This bug is a duplicate of bug 101395.
---------------------------------------------------------------------------
Bug 101817
Platform: UNIX
Compiler: all
This bug could not be reproduced.
---------------------------------------------------------------------------
Bug 102234
Platform: all
Compiler: all
In the operation class ITInt8, the overloaded output insertion operator
ostream& operator<<( ostream &, const ITInt8 &)
now inserts into the output stream a null-terminated string without
trailing white space characters.
---------------------------------------------------------------------------
======================================
RELEASE NOTES
FOR
INFORMIX-GLS 3.08.UC1 PRODUCT RELEASE
DATE: 22 Dec 1998
======================================
TABLE OF CONTENTS
I. MAJOR FEATURES IN INFORMIX-GLS 3.0
II. CAVEATS
III. KNOWN PRODUCT DEFICIENCIES
IV. FIXED CUSTOMER-REPORTED PROBLEMS
I. MAJOR FEATURES IN INFORMIX-GLS 3.0
INFORMIX-GLS is an application-programming interface (API)
that provides functions and macros for the implementation of
internationalized applications that are compatible with
Informix GLS internationalization. This API allows
applications to access information in Informix locale files.
INFORMIX-GLS 3.0 contains the following major features:
- Processing single-byte, multibyte, and wide characters and
strings, including character classification, case conversion,
code-set conversion, string traversal, and string comparison
- Converting date, time, money, and number strings from and to
binary values
Previous versions of the INFORMIX-GLS product were called the
Informix GLS API. Use of the name GLS API is discontinued in
the documentation.
II. CAVEATS
INFORMIX-ESQL/C
===============
Include the ifxgls.h header file in any source code that
references an INFORMIX-GLS function.
The ESQL/C preprocessor automatically includes the INFORMIX-GLS
library. For information on how to build ESQL/C applications,
refer to the "INFORMIX-ESQL/C Programmer's Guide."
Client LIBMI Applications
==========================
Include the ifxgls.h header file in any source code that
references an INFORMIX-GLS function.
You can use the ESQL/C preprocessor to automatically include
the INFORMIX-GLS library in your client LIBMI application.
Otherwise, you must explicitly list the library at link time.
For information on how to build client LIBMI applications that
use INFORMIX-GLS, refer to the "INFORMIX-GLS Programmer's Manual."
DataBlade Server Routines
=========================
Include the ifxgls.h header file in any source code that
references an INFORMIX-GLS function.
The INFORMIX-GLS library is already linked into the
Informix Dynamic Server with Universal Data Option. Therefore,
you do not need to take special link steps to use INFORMIX-GLS
in a server routine.
III. KNOWN PRODUCT DEFICIENCIES
The following defects are known to exist in the current release of
INFORMIX-GLS 3.0. The defects are listed by PTS (Problem Tracking
System) number followed by a brief description. Technical support
will be provided with patches and maintenance releases to fix these
defects.
PTS # Description
----- -----------
- 88673 GLS numeric conversion routines ignore the minimum width
with the %e specifier.
- 94713 gl_mbsprintf of a very large negative number, with %e
prints 'inf' instead of '-inf'.
IV. FIXED CUSTOMER-REPORTED PROBLEMS
The ifx_gl_format_datetime() function supports all the formats
as documented in:
$INFORMIXDIR/doc/gls_api/en_us/0333/ifx_gl_convert_datetime.htm
The ifx_gl_format_date() function returns day of the year with
'%j' format when a full date is given.
The ifx_gl_convert_number() returns -1 and the ifx_gl_lc_errno()
function returns IFX_GL_PARAMERR when a data type mismatch
occurs between input data and conversion specifier.
---------------------------------------------------
======================================
RELEASE NOTES
FOR
INTERSOLV DataDirect ODBC Driver 3.11 PRODUCT RELEASE
DATE: 18 Dec 1998
======================================
TABLE OF CONTENTS
I. What's New in Version 3.11
II. System Requirements
III. Supported Informix Database Servers
IV. Files Installed
V. Migrating
VI. Driver Options
VII. Microsoft Access and Visual Basic Users (Windows-only)
VIII. Notes and Known Problems
===============================
I. What's New in Version 3.11
Version Numbers
---------------
* The new version on UNIX and NT is 3.11
* Supports TIMESTAMPADD and TIMESTAMPDIFF scalar functions for
interval types SQL_TSI_DAY and SQL_TSI_MONTH.
New Features
------------
* INTERSOLV DataDirect ODBC Driver provides the following DLL:
ivinf913.dll, which supports ODBC 3.5 core components and
the Informix extended data types:
Smart large objects, Distinct, BOOLEAN, INT8, SERIAL8, and LVARCHAR.
* INTERSOLV DataDirect ODBC no longer provides the JDBC-ODBC bridge. You
can buy a JDBC-ODBC bridge from a JDK vendor.
Additional Documentation
------------------------
You may want to look at some of the documentation notes for manuals
that are distributed with your Informix database server. These notes
include information about the following products and features which
might affect your client application:
* DataBlade API
* Error messages
* GLS functionality
* SQL
To see these documentation notes, look in one of the following
database server directories. If you need information about these
directories, contact your DBA.
Platform Directory for Documentation Notes
-------- ---------------------------------
UNIX INFORMIXDIR/release/en_us/0333
Windows INFORMIXDIR\release\en_us\04e4
===============================
II. System Requirements
Windows
-------
Disk space: 15 megabytes on the disk drive where Windows 95/98/NT
is installed.
Memory: Windows 95: 16 megabytes (minimum)
Windows 98: 16 megabytes (minimum)
Windows NT: 24 megabytes (minimum)
UNIX
----
Disk space: 25 megabytes on the disk drive where UNIX
is installed.
Memory: 16 megabytes (minimum)
Remote Informix Databases Accessed from Windows
-----------------------------------------------
To access remote Informix databases, you need to install INFORMIX-Connect.
INTERSOLV DataDirect ODBC Driver for Windows does not work with versions
of INFORMIX-Connect earlier than Client SDK 2.0.
Use the SETNET32.EXE utility supplied with INFORMIX-Connect to define
database servers and the location of the INFORMIX directory. Use
ILOGIN.EXE to test your connection to the Informix database server.
The INFORMIX-Connect package includes ISQLT09A.DLL. The path to this DLL
must be in your PATH environment variable. If it is not and you attempt
to configure a data source, a message similar to the following one appears:
The setup routines for the INTERSOLV 3.11 32-BIT ODBC driver
could not be loaded due to system error code 126.
When you click OK, the following message appears:
Could not load the setup or translator library.
Remote Informix Databases Accessed from UNIX
--------------------------------------------
Set the INFORMIXDIR environment variable to the directory where
you installed your client application. Set the INFORMIXSERVER environment
variable to the name of the Informix database server as defined in
sqlhosts.
===============================
III. Supported Informix Database Servers
ivinf913.dll support the following Informix database servers via
INFORMIX-Connect 9.13:
7.x
9.x
===============================
IV. Files Installed
The following INTERSOLV DataDirect ODBC Driver files are installed,
along with the INFORMIX-CLI 2.8 and the other client product files:
Files Installed on UNIX
-----------------------
"xx" is "so" on Solaris, "sl" on HP-UX, or "a" on AIX.
In the Intersolv directory:
Driver
Driver Manager
Installer
Libraries
License file
In INFORMIXDIR/help:
Help text for the Informix SQLDriverConnect dialog
In INFORMIXDIR/headers:
Header files
In INFORMIXDIR/locale/en_US/LC_MESSAGES:
GLS message files
In /messages/default:
ODBC driver manager message file
Files Installed on Windows
--------------------------
In your system directory (by default, the Windows SYSTEM32 directory
for Windows NT or SYSTEM for Windows 95 and Windows 98):
Visual C and Microsoft ODBC libraries
In your system directory for a custom install for which you
selected the ODBC Driver Manager:
Microsoft ODBC Driver Manager files
In the Informix translation directory:
Translation library
In your driver directory (by default, the Windows SYSTEM32 directory
for Windows NT or SYSTEM for Windows 95 and Windows 98):
INTERSOLV drivers
INTERSOLV help files
INTERSOLV libraries
In the Informix headers directory:
Header files
===============================
V. Migrating
Migrating from 3.02/3.10 to 3.11
--------------------------------
The Informix installation procedure does not remove the old version when it
installs the new version. Therefore, you can continue to use the old version
without making any changes to your DSNs or applications. To use the new
version, you must update the driver reference for each DSN.
Migrating from 3.02 to 3.11 on UNIX
-----------------------------------
Your DSN configuration should be in the .odbc.ini file or in your
application code. Find the DSN configuration and change the Driver
value to ivinf913.dll.
Migrating from 3.10 to 3.11 on Windows
--------------------------------------
* If your DSN configuration is in the registry, use regedit to
change the following values:
- Change the "driver" value of the following key:
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"dsn_name"
From:
WINSYSDIR \IVIF7912.DLL
To:
WINSYSDIR \IVINF913.DLL
Where WINSYSDIR is \WINNT\System 32 on Windows NT and
\WINDOWS\System
on Windows 95 and Windows 98.
- Change the "dsn_name" value of the following key:
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources
From:
INTERSOLV 3.10 32-BIT INFORMIX
To:
INTERSOLV 3.11 32-BIT INFORMIX
or
INTERSOLV 3.11 32-BIT INFORMIX 9
* If your DSN configuration is in your application code, change the
Driver value to ivinf913.dll.
Migrating from 2.x to 3.11
--------------------------
The TranslationDLL connection string option has been changed to
TranslationSharedLibrary.
The ODBC_INI enviroment variable has been replaced by the ODBCINI
environment variable.
If you are using an existing 2.5 DSN you must modify the library
or dll name in either the registry or in the odbc.ini file.
The name must be changed from ivinif12.xx to ivif7912.xx.
Migrating from 2.x to 3.11 on HP-UX (UNIX)
------------------------------------------
For HP-UX 10.20 (aCC++), the ODBC driver manager has been rebuilt
using the HP aC++ compiler. Because aC++ libraries are not
backwardly compatible with cfront-compiled libraries, C++
applications are required to recompile their main with the HP aC++
compiler, C applications are required to re-link the application
with the HP aC++ linker. An error such as the following is a
symptom of not following these steps:
/usr/dld.sl: Unresolved Symbol:
__shlimit from /opt/odbclibodbc.sl
Migrating from 2.x to 3.11 on Solaris (UNIX)
--------------------------------------------
For Solaris, the ODBC Driver Manager is not linked with libnsl.so.
Most ODBC drivers require that this library be initialized before
the drivers are invoked. To insure maximum ODBC compatibility,
applications should link to libnsl.so.
===============================
VI. Driver Options
The driver has non-standard options that let you take
advantage of packaged ODBC-enabled applications requiring
non-standard or extended behavior. To use these options, we recommend
that you create a separate data source for each application.
On UNIX, use a text editor to open the .odbc.ini file. In the
section for the data source you created, add the WorkArounds key with
a value of n (e.g., WorkArounds=n). The value n is the cumulative
value of all options added together.
In the Windows environment, use the registry editor (regedit on Windows
95, Windows 98, or Windows NT 4.0, or regedt32 on Windows NT 3.5x), to
open the ODBC.INI section in the registry. In the section for the data
source you created, add the key WorkArounds with a value of n (e.g.,
WorkArounds=n). The value n is the cumulative value of all options
added together.
Key and Value Description
------------- -----------
WorkArounds=1 If an ODBC driver reports that its
SQL_CURSOR_COMMIT_BEHAVIOR or
SQL_CURSOR_ROLLBACK_BEHAVIOR is 0,
then return 1 instead and force statements to
be prepared again by the driver.
WorkArounds=2 Some applications cannot handle database
qualifiers. If this option is on, the driver
reports that qualifiers are not supported.
WorkArounds=4 Some applications require two connections to
an Informix database. Since Informix databases
support only one connection, the second connection
attempt fails. Turning this option on causes the
driver to detect this condition and have the
two ODBC connections share a single physical
connection to the database.
WorkArounds=8 If the driver cannot deduce the number of rows
affected by an INSERT, UPDATE, or DELETE, it may
return -1 in SQLRowCount. Some applications may
not be able handle this. Turning this
option on causes the driver to return 1 instead.
WorkArounds=16 For SQLStatistics, if the driver reports
an INDEX_QUALIFIER that contains a period, some
applications raise a "tablename is not a valid name"
error. Turning this option on causes the driver to
return no INDEX_QUALIFIER.
WorkArounds=64 This option results in a column name of
C where is the ordinal position
in the result set. For example, "SELECT col1,
col2+col3 FROM table1" produces the column names "col1"
and C2. SQLColAttributes/SQL_COLUMN_NAME returns
for result columns that are expressions.
Use this option for applications that cannot handle
column names.
WorkArounds=256 Forces SQLGetInfo/SQL_ACTIVE_CONNECTIONS to be
returned as 1.
WorkArounds=512 To prevent ROWID results, this option forces the
SQLSpecialColumns function to return a unique index as
returned from SQLStatistics.
WorkArounds=65536 This option strips trailing zeros from decimal results.
WorkArounds=131072 This option turns all occurrences of the
double quote character ("") into the grave
character (`).
Some applications always quote identifiers with double
quotes. Double quoting causes problems for data sources
that do not return SQLGetInfo/SQL_IDENTIFIER_QUOTE_CHAR
= .
WorkArounds=1048576 Some applications incorrectly specify a
precision of 0 for character types when the value will
be SQL_NULL_DATA. This option overrides the specified
precision and sets the precision to 256.
WorkArounds=2097152 Some applications incorrectly specify a
precision of -1 for character types. This option
overrides the specified precision and sets the precision
to 2000.
WorkArounds=4194304 For PowerBuilder users, this option converts all
catalog function arguments to upper case unless they are
quoted.
WorkArounds=536870912 This option allows for re-binding
parameters after calling SQLExecute for prepared
statements.
WorkArounds2=2 Some applications incorrectly specify the ColumnSize/
DecimalDigits when binding timestamp parameters. This
workaround causes the driver to ignore the ColumnSize/
DecimalDigits specified by the application and use the
database defaults instead.
===============================
VII. Microsoft Access and Visual Basic Users (Windows-only)
We recommend that users of Microsoft Access and Visual Basic
add the value pair WorkArounds=25 (1+8+16) for each data source
they use with Access and Visual Basic. For data sources that
support a single connection, add the line WorkArounds=29 (1+4+8+16).
===============================
VIII. Notes and Known Problems
SQLColAttribute(s)
------------------
The column attributes 1001 and 1002, which were assigned as
INTERSOLV specific attributes, were inadvertently used as system
attributes by the Microsoft 3.0 ODBC implementation.
Applications using those attributes should now use 1901 and 1902
respectively.
SQL_C_NUMERIC
-------------
Because of inconsistencies in the ODBC specification, users
attempting to use SQL_C_NUMERIC parameters should set the
precision and scale values of the corresponding structure, and
the descriptor fields in the APD.
Error Messages
------------------
Restriction: Some INFORMIX error messages may contain more than
one error. It is unclear whether all errors displayed will be valid.
Additional Notes and Known Problems on UNIX
-------------------------------------------
ODBC Driver Manager (UNIX-only)
-------------------------------
If you want to use a driver manager, the driver requires the 3.0
version of the ODBC Driver Manager (libodbc.xx). You can buy the
Driver Manager from a third party vendor who develops ODBC Driver
Manager for the required UNIX platform.
ODBC Driver Manager On Solaris (UNIX-only)
------------------------------------------
For Solaris, the ODBC Driver Manager is not linked with libnsl.so.
Most ODBC drivers require that this library be initialized before
the drivers are invoked. To insure maximum ODBC compatibility,
applications should link to libnsl.so.
SQLDriverConnect (UNIX-only)
----------------------------
SQLDriverConnect using options other than SQL_DRIVER_NOPROMPT is
supported only on systems that include the Motif library.
Additional Notes and Known Problems on Windows
----------------------------------------------
ODBC Driver Manager (Windows-only)
----------------------------------
ODBC 3.x drivers require the 3.0 or 3.5 version of the ODBC Driver
Manager (ODBC32.DLL and ODBCCP32.DLL). The INFORMIX-Client Software
Developer's Kit provides Microsoft ODBC Driver Manager 3.5.
Because the ODBC 3.0 Driver Manager is compatible with 2.x compliant
drivers, all 2.x versions of the Driver Manager should be removed
from your access path to ensure application stability. Failing to
remove older versions of the Driver Manager may result in application
errors and abnormal terminations.
ODBC Driver Manager Bugs (Windows-only)
---------------------------------------
Please review the release notes file included with the Client SDK
for all known ODBC Driver Manager bugs. In addition to the bug
list included in the RELNOTES.WRI file, the following problem
exists: Calling SQLRowCount after receiving a SQL_NO_DATA return
from an executed statement results in a HY010 Function Sequence
Error. This error should not occur.
Microsoft Query and INTERVAL (Windows-only)
-------------------------------------------
Attempting to use Microsoft Query '95 with the Informix
driver will result in a protection fault from Query. This is
because Query does not recognize the INTERVAL data types supplied
by the driver. Users will need to obtain Microsoft Query '97 to
obtain the fix.