Informix
Informix Online Documentation

RELEASE NOTES FOR

Informix ODBC Driver

Date: 10/15/99

Version: 3.31


Table of Contents

I. Overview of Release Notes 1
II. Database Server Names and Versions 2
III. New Attributes 2
A. Utilization and Optimization 2
B. Support for Compatibility with Third Party Applications 2
C. Description of new Attributes 3
IV. Known Problems 4
A. Bugs 4
B. Migrating The Driver Manager From 2.x to 3.11 on Solaris (UNIX) 6
V. Fixed Problems 6
VI. New Finder Messages 9
VII. Smart Large Object Automation 18


I. Overview of Release Notes

The purpose of these release notes is to make you aware of any special actions required to configure and use the Informix ODBC Driver on your computer. This file also 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 ODBC Driver, which provides thorough information about product features and behavior.

These release notes are written for the following audience:

Version 3.31of Informix ODBC Driver has been tested with the following database server configurations:


II. Database Server Names and Versions

This manual might not reflect the latest names of Informix database servers. The following table lists the database server versions and their corresponding names.


Database Server Version Numbers Database Server Names
5.x <vk>INFORMIX-OnLine and <vk>INFORMIX-<vk>SE
7.1x, 7.2x <vk>INFORMIX-OnLine Dynamic Server and <vk>INFORMIX-<vk>SE
7.3x Informix Dynamic Server
8.1x <vk>INFORMIX-OnLine <vk>XPS
8.2x Informix Dynamic Server with Advanced Decision Support and Extended Parallel Options
8.3 Informix Extended Parallel Server (XPS) or Informix Enterprise Decision Server
9.01, 9.1 through 9.13 <vk>INFORMIX-Universal Server
9.14 Informix Dynamic Server with Universal Data Option
9.2 Informix Dynamic Server 2000


III. New Attributes

A. Utilization and Optimization

Informix ODBC3.31 driver shows the following utilization and optimization improvements:

B. Support for Compatibility with Third Party Applications

ODBC 3.31 driver supports existing applications, which support standard ODBC Data types only. A new DSN option "Report Standard ODBC Types" should be checked ON to expect this behavior. Example applications: Powerbuilder, MS-Access, VisualBasic etc.

When an application sets this option, the driver sets the following behavior:

However, each of the above behavior can be controlled alone as a connection or a statement level options. Informix ODBC 3.31 driver supports three new connection and statement level attributes:

Applications can use SQLSetConnectAttr, SQLSetStmtAttr to set/unset these values. (ODBC 2.x applications can use SQLSetConnectOptions, SQLSetStmtOptions equivalently).

1. DSN settings for Report Standard ODBC Data types:

The following table shows how the INFORMIX 9 data types map to the standard ODBC data types. These types are in addition to the INFORMIX data types.

INFORMIX 9 ODBC
Blob SQL_LONGVARBINARY
Boolean SQL_BIT
Clob SQL_LONGVARCHAR
Int8 SQL_BIGINT
Lvarchar SQL_VARCHAR
Serial8 SQL_BIGINT
Multiset SQL_C_CHAR/SQL_C_BINARY
Set SQL_C_CHAR/SQL_C_BINARY
List SQL_C_CHAR/SQL_C_BINARY
Row SQL_C_CHAR/SQL_C_BINARY

Note: for Multiset, Set, Row and List data types, the data type is mapped to the defaultUDTFetchType attribute set i.e. SQL_C_CHAR or SQL_C_BINARY.

C. Description of new Attributes

2. SQL_INFX_ATTR_ODBC_TYPES_ONLY

Applications can set this attribute to value SQL_TRUE or SQL_FALSE. This attribute can be set/unset at connection and statement level. All the statements allocated under same connection will inherit this value. Alternatively each statement can change this attribute also. By default this attribute is set to SQL_FALSE.

An application can change the value of this attribute using the SQLSetConnectAttr and SQLSetStmtAttr (SQLSetConnectOption and SQLSetStmtOption in ODBC 2.x). Applications can retrieve the values set using SQLGetConnectAttr and SQLGetStmtAttr (SQLGetConnectOption and SQLGetStmtOption in ODBC 2.x)

NOTE: The connection/statement attribute SQL_INFX_ATTR_ODBC_TYPES_ONLY cannot be set to SQL_TRUE when SQL_INFX_ATTR_LO_AUTOMATIC is set SQL_FALSE.

Error reported: Attribute Cannot be set. LoAutomatic should be ON to set this value

Application should first set the SQL_INFX_ATTR_LO_AUTOMATIC attribute to SQL_TRUE and then set the attribute SQL_INFX_ATTR_ODBC_TYPES_ONLY to SQL_TRUE.

3. SQL_INFX_ATTR_LO_AUTOMATIC

Applications can set this attribute to value SQL_TRUE or SQL_FALSE. This attribute can be set/unset at connection and statement level. All the statements allocated under same connection will inherit this value. Alternatively each statement can change this attribute also. By default this attribute is set to SQL_FALSE.

An application can change the value of this attribute using the SQLSetConnectAttr and SQLSetStmtAttr (SQLSetConnectOption and SQLSetStmtOption in ODBC 2.x). Applications can retrieve the values set using SQLGetConnectAttr and SQLGetStmtAttr (SQLGetConnectOption and SQLGetStmtOption in ODBC 2.x)

NOTE: The connection/statement attribute SQL_INFX_ATTR_LO_AUTOMATIC cannot be set to SQL_FALSE when SQL_INFX_ATTR_ODBC_TYPES_ONLY is set SQL_TRUE.

Error reported: Attribute Cannot be set. ODBC types only should be OFF to set this value

Application should first set the attribute SQL_INFX_ODBC_TYPES_ONLY to SQL_FALSE and then set the attribute SQL_INFX_ATTR_LO_AUTOMATIC to SQL_FALSE.

4. SQL_INFX_ATTR_DEFAULT_UDT_FETCH_TYPE

Application can set this attribute to SQL_C_CHAR or SQL_C_BINARY to set the default fetch type for UDTs. The default value of this attribute is set depending on following conditions.

If the DSN setting for "Report ODBC Types only" is ON, the value of DefaultUDTFetchType is set to SQL_C_CHAR.

If the DSN setting for "Report ODBC Types only" is OFF, the value of DefaultUDTFetch is set to SQL_C_BINARY.

If a user has set a registry key (feature added in ODBC 3.30), the value of DefaultUDTFetchType is set to the value in registry provided "Report ODBC Types Only" is not set.

An application can change the value of this attribute using the SQLSetConnectAttr and SQLSetStmtAttr (SQLSetConnectOption and SQLSetStmtOption in ODBC 2.x). Applications can retrieve the values set using SQLGetConnectAttr and SQLGetStmtAttr (SQLGetConnectOption and SQLGetStmtOption in ODBC 2.x)

NOTE: Setting the "Report ODBC Types only" to ON, will always override the DefaultUDTFetchType to SQL_C_CHAR.


IV. Known Problems

This section describes the known problems with this release of the Informix ODBC Driver and, if possible, shows how to work around these problems.

A. Bugs

  1. Bug 116726

SQLGetData puts the wrong value in the length or indicator pointer when selecting an interval day to hour into an SQL_C_CHAR.

Actually the described problem is fixed, however, the application (MS ACCESS) still fails, the Interval day to hour data displays as #DELETED. We believe it to be a problem with the way that MS Access handles Intervals. We are working with Microsoft on this.

  1. Bug 117207

XA close connection should check for return state while closing any active statements - some statements might still be executing (_odbc_s8).

This will happen only when the application is not using a Driver manager. The workaround is to be sure that all statements are closed before calling SQLDisconnect on XA connections.

  1. Bug 117331

If the procedure name has an '_' then the ODBC driver will send the wrong procedure name to the data source. For example: when doing following statement through dbaccess: execute procedure info8@ergms 1:"sdu".rp 1(1);

The ODBC driver will send the following SQL statement to server:

"execute procedure "sdu".rp _1(1)"

The procedure name has an added space between rp and _1. No workaround.

  1. Bug 117380

Use the decode function on a UNIX server through odbc connection and you get error 800. The decode function is as simple as:

select decode(count(*),0,1,count(*)) from state;

The same works fine if the engine is on NT.

  1. Bug 117465

When executing a stored procedure with a return value through ADO 2.0/2.1 via the recordset.open() method, the ODBC driver treats the call as a cursor, performing an SQLExecDirect followed later by an SQLExtendedFetch. If an error occurs inside the stored procedure, per the fix to bug 109768 and its duplicate 111703, the error is now returned successfully to the ODBC driver against the SQLExtendedFetch. The problem with this is that when ADO executes a statement via the recordset.open() method, ADO ONLY looks to SQLExecDirect for a return code. Therefore, using a Visual Basic front-end application, the error is never reported to the application, and therefore the operation appears to complete successfully.

Some stored procedure errors can not be returned until the stored procedure is executed and the data is fetched. ADO is ignoring any error returned by SQLExtendedFetch. We are working with Microsoft on this problem.

  1. Bug 117497

No rows will be returned on Visual Basic, if the query is an outer join and one of the columns contains null values

  1. Bug 118407

When using MSAccess97 or MSquery to link to a table through the Informix 3.30 ODBC drivers on NT4.0, certain table names such as those containing 18 characters which are made up of two or more underscores cause:

Invalid string of buffer length.

(#-11071) error to occur, and the table can not be accessed.

  1. Bug 118533

Incorrect information reported from SQLColumns on a DATETIME year to second.

  1. Bug 118594

Select of a interval column returns error - 2147217887 (80040e21) from a Visual Basic application that uses ODBC 3.30 to do the connection.

  1. Bug 118743

When executing a query (create view) through DAO (database.execute), it sometimes comes back with a "can not reference memory" error.

B. Migrating The Driver Manager From 2.x to 3.11 on Solaris (UNIX)

On Solaris platforms, the ODBC Driver Manager is not linked to the libnsl.so network service library. You must initialize this library before you invoke the ODBC driver.

To ensure maximum ODBC compatibility, link the libnsl.so library to your application.


V. Fixed Problems

The following problems have been fixed since the 3.30.TC1 release of Informix ODBC Driver in ClientSDK 2.30:

5. Bug 108697

Informix ODBC Driver fails to populate ROWCOUNT property of RDORESULTSET object in a Visual Basic program unless a MOVELAST method is explicitly executed.

6. Bug 109794

This bug causes ODBC Error S1000: [Informix][Informix ODBC Driver] An illegal character has been found in the statement.

Informix Servers can not accept literal strings that contain the newline (NL) character.

Informix Servers can not insert a literal string into TEXT simple BLOBs.

7. Bug 109912

UNIX, linking with both the DMR (Informix Driver manager replacement) and the threading library statically is not threadsafe with trace on.

8. Bug 109919

Insert Cursor support does not work with 9.x servers.

9. Bug 110120

Using connectdatabase=no and creating a new database will fail to get database information, which will cause problems with setting options.

10. Bug 110138

Insert cursors don't work in non-ansi logging database with auto-commit.

11. Bug 110797

On Windows NT platforms, when using the DSN setup utility, the test connection button does not take the latest modified value that you enter for 'SERVICE'. For example, if you create a new data source name using a valid server name, host name, service, etc., and then click the 'Test Connection' button, the message 'Test Connection was successful' appears. However, if you subsequently edit the data source name by clicking the 'Configure' button, select the Connection tab and modify the value of 'SERVICE' to one that does not exist for the server name, then click 'Test Connection', you will still receive the 'Test Connection was successful' message.

12. Bug 110836

When autocommit mode is turned on, the driver should not issue commit messages when trying to do an explicit BEGIN WORK.

When using a non-ANSI, logging database with autocommit mode, the driver gives the following error when the BEGIN WORK command is commented out:

-524: Lock table can only be used within a transaction.

13. Bug 110864

The ifx_rc_count function, which is supposed to the return either the number of fields for a row type, or the cardinality of a collection, currently returns the correct value multiplied by 256.

14. Bug 110895

In the ODBC data source setup, the OptimizeAutocommit check box should be set ON (checked) by default. This is a Windows only problem, as for UNIX, this value is set on by default.

15. Bug 110929

In homogeneous environments, where the server and the client both have the same floating point format, the conversion from float to SQL_NUMERIC will fail when fetching floats from the server. On heterogeneous environments (such as between an Intel and a Sparc,) the conversion works, as data is converted by the server to a normalized decimal before being sent across the network.

16. Bug 111088

When using batched insert cursors, having some rows marked as SQL_DATA_AT_EXEC and some not will cause the application to hang, waiting on the pipe for the server. This happens on UNIX & Windows.

17. Bug 111168

In SQLBrowseConnect if user give an incomplete string like "DRIVER=Informix 3.30 32 BIT" and "DSN=infd33nt73nt". The response in OutConnect string is also the same what user has sent in InConnString.

18. Bug 111190

SQLDescribeCol for byte column returns column size of 0.

19. Bug 111304

I f you use Informix ODBC Driver against a Metacube decision support system that contains synonyms, columns from synonym tables are not visible from within the Data Warehouse Manager. Specifically, if you upgrade to tables in another database from a Metacube 4.0 DSS system that contains synonyms, Informix ODBC Driver cannot see the columns in those synonym tables from within the Data Warehouse Manager.

This problem existed on all Informix servers. Informix ODBC 3.30 could only process synonyms that were within the same database. Informix ODBC 3.31 now processes synonyms that are within different databases on the same or different server.

20. Bug 111483

On Windows platforms, an insert or an update of a row or collection element that is a VARCHAR type results in a crash. Inserting into or updating a varchar field within a row or a collection will overwrite one byte before the start of an internally allocated buffer, resulting in an inconsistent memory buffer header. This eventually results in a crash, at a later point in the free() C library function.

21. Bug 111505

Querying dates from a table with a column defined as datetime year to month. A date entered as 1998-11 through dbaccess is translated to 10/31/98 in Microsoft Access or Microstrategy.

22. Bug 112041

ODBC Driver gives error on disconnect when:

1) OptimizeAutoCommit option in the DSN is not checked and

2) The application has set the SQL_ATTR_AUTOCOMMIT connection flag to OFF and

3) Last call to SQLExecDirect for a non result generating SQL statement fails

23. Bug 112784

Catalog functions crash, they try to modify string constants passed as arguments. String constants can be read only as passed by the application (found with applications compiled with /ZF option on NT, or using Solaris SC5.0 compiler). Driver should make copies of strings passed before modifying them.

24. Bug 114054

Linking an Informix table with UDT column via ODBC to MSAccess or querying on a UDT column in VB raises error -11013.(Errorcode "-11013 Restricted data type attribute violation")A similar query executed via an ASP page (also using the 3.3 driver) executes correctly.

A new DSN option on the "Advanced" tab, "Report Standard ODBC Types Only" enables emulation of all extended types as ODBC standard types. This may also be set as Connection and Statement attributes (See New Features section).

25. Bug 114393

Synonyms within the database do not work correctly.

26. Bug 114516

SQLColAttributes (SQL_COLUMN_TYPE) returns incorrect type for columns of type DATE, TIME, and TIMESTAMP. Correct values returned by CLI 2.8 and Intersolv 3.x drivers.

27. Bug 114736

When doing a SELECT SQL on a table which contains Informix UDT rowtype, from dbaccess and sqleditor is fine but using Informix ODBC 3.30 fails with "out of range" error -11064. It looks like our odbc driver can't map/bind UDO types to be displayed in a application such as MS Access and Msquery.

28. Bug 115016

ADO returns an Error when retrieving a Datetime Hour to Minute through Informix ODBC driver. ADO returns 11/11/1200 with proper Hour to Minute values when using the Intersolv driver.

29. Bug 115960

ODBC does not detect DELIMIDENT in order to determine whether to search for the exact upper and lowercase characters in a table/column name etc. It simply ignores DELIMIDENT and searches for the table/column in lowercase. (see New Features section above).

30. Bug 116296

MS-ACCESS can not link to an IUS table which has clob or blob column, an ODBC error (S1C00 Driver not capable) is returned.

31. Bug 116612

Fetching an opaque type, which has an implicit cast to integer, into abound integer host variable will fail with state HY004: SQL data type out of range. Instead, the fetch should work if a cast is allowed between the types. This problem exists for all opaque types which are to be fetched into types other than SQL_C_BINARY or SQL_C_CHAR. The output buffers must be bound using SQLBindCol, before the fetch, and not using SQLGetData, after the fetch, or else the server side cast functions can not be employed. A related problem occurs when fetching complex types, such as collections, into char buffers. (See bug # 114736.)

32. Bug 116760

The driver does not generate cursor names according to the ODBC standard. This results in sometimes getting the error 'invalid cursor name'

33. Bug 116847

Setting the "ODBC Cursor Behavior=preserve" using the ODBC Administrator doesn't set the behavior to "preserve" it is still set to "close"

34. Bug 117690

Fetching distinct columns without binding columns return incorrect results. Send RET_TYPE to server for distinct types. Otherwise the server sends the data in ASCII format with UDT headers.

35. Bug 118207

With preserve/hold cursors enabled (cursorbehavior=1) commit work now incorrectly closes cursor

36. Bug 118266

Selecting any data from a new Informix server will always hang the client. This will happen with ODBC 3.30 against a version 9.3 server (aka "Informix Dynamic Server 2000") or later version.

37. Bug 118641

SQLColumns does not return the default values and NOT NULL properties of columns.

38. Bug 118673

NEEDODBCTYPESONLY has replaced DefaultUDTFetchType, however, for 3.30 applications DSNs we still need to process it correctly. 3.30 customers had to insert it via regedit.exe. If present in the registry or the connection string it should be handled correctly by setting the correct flag in the connection structure.


VI. New Finder Messages

Informix ODBC Driver has the following new Finder messages. The error-message number appears above the error-message text.


VII. Smart Large Object Automation

The smart large object automation refers to the usage of accessing smart large objects using standard ODBC API. Earlier the smart large objects were accessed by the application executing the ifx_lo

Functions that were not the standard way of accessing a data type in an ODBC application. With the large object automation support the application will be able to use standard OBDC way as well as the existing way of accessing large objects.

Operations supported with this automation on smart large objects will include selection, insertion, updating and deletion. This feature will be applicable only to the smart large objects CLOB and BLOB but not to BYTE and TEXT

For inserting/updating/deleting a CLOB data type the application will bind the CLOB data type using SQLBindParameter with C type as SQL_C_CHAR and SQL type as SQL_LONGVARCHAR. Where as BLOB data type will be bound with C type as SQL_C_BINARY and SQL type as SQL_LONGVARBINARY.

Driver performs insertion of the smart large objects in the following steps.


Informix ODBC Driver
Version 3.31 , 10/15/99
Copyright © 1999, Informix Software, Inc. All rights reserved