================================= RELEASE NOTES FOR INFORMIX-CLI 2.80.UC1 PRODUCT RELEASE DATE: 09 Feb 1998 ================================= TABLE OF CONTENTS I. Architecture and Platforms II. Windows Requirements III. Driver Managers IV. Files Installed V. Major Features in INFORMIX-CLI 2.8 VI. Troubleshooting INFORMIX-CLI for Windows VII. Known Product Deficiencies VIII. Fixed Customer-Reported Problems =============================== I. ARCHITECTURE AND PLATFORMS INFORMIX-CLI uses a two-process architecture that is suitable for client/server networks. An INFORMIX-CLI application runs as one process on a PC or UNIX workstation and communicates across a network with an Informix database server that is on a host computer. =============================== II. 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 or Windows 95 * 16 megabytes of available RAM, more is preferable * 6 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 ----------------------- INFORMIX-CLI for Windows ships with the Microsoft Driver Manager Versions 2.5 and 3.0. Informix recommends that you use Microsoft Driver Manager Version 2.5 because INFORMIX-CLI is completely compatible with it. 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 Visigenics 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: iclit09a.lib, iregt07b.lib %INFORMIXDIR%\msg clixmsg.pam %INFORMIXDIR%\msg\en_us\04e4 Message files and errmess.hlp %INFORMIXDIR%\release\en_us\04e4 Document Notes: clidoc28.txt Release Notes: clirel28.txt %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 Visigenics Driver Manager $INFORMIXDIR/lib/esql Libraries $INFORMIXDIR/msg/en_us/0333 Message files for INFORMIX-CLI $INFORMIXDIR/release/en_us/0333 Document Notes: CLIDOC_2.8 Machine Notes: CLI_2.8 Release Notes: CLIREL_2.8 =============================== V. MAJOR FEATURES IN INFORMIX-CLI 2.8 Multithreading Support for UNIX ------------------------------- INFORMIX-CLI supports multithreading on UNIX. 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, the user user can set DBCENTURY directly into the registry under the following key: \HKEY_CURRENT_USER\Software\Informix\Environment\DBCENTURY Or a Windows NT or Windows 95 user can set the value of the DBCENTURY environment variable through Setnet32, which Informix ships as part of the I-Connect product. On a UNIX platform, the user can simply set the DBCENTURY environment variable. For information on how to set DBCENTURY, see the Informix Guide to SQL: Reference. =============================== VI. 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. =============================== VII. 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 ----- ----------- 82848 If an Informix database server sends an ISAM error code when an error occurs, INFORMIX-CLI does not pass the ISAM error code to the application. 88735 The SQL statement parser does not correctly recognize all multi-byte table or column names. This problem exists only with locales that have embedded spaces and periods in some of its multi-byte characters. 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. These defects will not have patches or maintenance releases to fix them. Instead, use the suggested workarounds. PTS # Description ----- ----------- 78574 In the Windows environment, the pointer to ggetenv() may become invalid under the following conditions: * When an application uses both INFORMIX-CLI and ESQL/C. * When an application uses both INFORMIX-CLI and INTERSOLV DataDirect ODBC Driver. This problem occurs for the following reason: 1. ESQL/C and INTERSOLV DataDirect ODBC Driver use the SQLI DLL. 2. Both the INFORMIX-CLI DLL and the SQLI DLL export ggetenv() to the GLS DLL. For example, the following sequence of events causes the pointer to ggetenv() to become invalid: 1. You load the SQLI DLL or establish an ESQL/C connection, and the SQLI DLL exports ggetenv() to the GLS DLL. The pointer to ggetenv() points to the SQLI DLL version of the function. 2. You establish an INFORMIX-CLI connection and the INFORMIX-CLI DLL exports ggetenv() to the GLS DLL. The pointer to ggetenv() points to the INFORMIX-CLI DLL version of the function. 3. You close the INFORMIX-CLI connection. In this example, this is the only INFORMIX-CLI connection. Therefore, Microsoft Driver Manager unloads the INFORMIX-CLI DLL which unloads the INFORMIX-CLI DLL version of ggetenv(). 4. INFORMIX-CLI does not unload the GLS DLL because the SQLI DLL is still using it. Thus, the pointer to ggetenv() that the GLS DLL has stored is invalid. This problem does not have a straightforward workaround. You need to understand the effects of loading and unloading the INFORMIX-CLI and SQLI DLLs. One possible way of handling the problem is to do the following: 1. Statically link to the SQLI DLL. 2. Use a driver manager for INFORMIX-CLI. Note: Steps 1 and 2 cause the application to load the SQLI DLL before it loads the INFORMIX-CLI DLL. 3. To keep the INFORMIX-CLI DLL loaded for the life of the application, do the following: a. Get the name of the INFORMIX-CLI DLL from the driver manager. b. Call LoadLibrary() for the INFORMIX-CLI DLL. c. Do not call FreeLibrary() for the INFORMIX-CLI DLL. d. Let INFORMIX-CLI unload the DLL when the application terminates. 75620 Executing a function fails to update values in the backend. Note: This description refers to UDFs, which are a feature only of Informix Dynamic Server with Universal Data Option. If the stored procedure or UDF does not return a value, you can use one of the following function formats to execute it: SQLExecDirect(hstmt, "execute procedure proc_name(...)", SQL_NTS); SQLExecDirect(hstmt, "{call proc_name(...)}", SQL_NTS); If the stored procedure or UDF returns a value, you can use one of the following methods to execute it: Method #1 --------- * Call SQLExecDirect(hstmt, "{? = call proc_name(...)}", SQL_NTS); Note: INFORMIX-CLI ignores the parameter that you bound for the return value. Method #2 --------- 1. Call SQLExecDirect(hstmt, "execute procedure proc_name(...)", SQL_NTS); or call SQLExecDirect(hstmt, "{call proc_name(...)}", SQL_NTS); 2. Call SQLBindCol() and SQLFetch() to get the return value. Note: When you call SQLExecDirect() to call a stored procedure that returns a value, INFORMIX-CLI opens a cursor for the stored procedure but does not execute the stored procedure until you call SQLFetch(). Code Example: /* Create a UDF. */ SQLExecDirect(hstmt, "create table ius_check(ius_int8 int8, ius_char char(30));", SQL_NTS); SQLExecDirect(hstmt, "insert into ius_check values (1111, 'INFORMIX UNIV');", SQL_NTS); SQLExecDirect(hstmt, "create function update_ius_check() returning char(20); define no_val int8; update ius_check set ius_int8='-9223372036854775807' where ius_char='INFORMIX UNIV'; select ius_int8 into no_val from ius_check where ius_char='INFORMIX UNIV'; return no_val; end function;", SQL_NTS); /* Execute the UDF. */ SQLExecDirect(hstmt, "execute function update_ius_check()", SQL_NTS); SQLBindCol(hstmt, 1, SQL_C_CHAR, int8char, 30, &int8charlen); SQLFetch(hstmt); /* The value in int8char after the call to SQLFetch() should be -9223372036854775807. */ /* The next call to SQLFetch() should return SQL_NO_DATA_FOUND. */ =============================== VIII. 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.