=================================
RELEASE NOTES
FOR
Informix JDBC Driver 2.2
DATE: 11//2000
=================================
TABLE OF CONTENTS

   I.OVERVIEW OF RELEASE NOTES
  II.INFORMIX-UNIVERSAL SERVER COMPATIBILITY
 III.CONFIGURATION
  IV.INSTALLATION ON SOLARIS MACHINES
   V.INSTALLATION ON HP MACHINES
  VI.INSTALLATION ON WINDOWS
 VII.UNINSTALLATION ON WINDOWS
VIII.QUOTING THE URL STRING
  IX.NEW FEATURES
   X.UDT/UDR MANAGER
  XI.WHERE CLAUSE BEHAVIOR CHANGE
 XII.DATABASE CONNECTIONS IN THE EXAMPLES
XIII.GENERAL INFORMIX JDBC DRIVER LIMITATIONS
 XIV.ERROR MESSAGES
  XV.KNOWN PROBLEMS
 XVI.FIXED PROBLEMS
XVII.ACKNOWLEDGMENTS
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


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 JDBC Driver 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 JDBC Driver Programmer's Guide,
Version 2.2," which provides thorough information about product features
and behavior.

These release notes are written for Java programmers who use the JDBC API
to connect to Informix databases via the Informix JDBC Driver.


II.INFORMIX-UNIVERSAL SERVER COMPATIBILITY
============================================

Informix JDBC Driver 2.2 is compatible with the following server versions:

  o Informix Dynamic Server, Version 7.x

  o Informix Dynamic Server, Workgroup and Developer Editions, Version 7.x

  o Informix Dynamic Server with Advanced Decision Support and Extended
    parallel Options, Version 8.x

  o Informix Dynamic Server with Universal Data Option, Version 9.x

  o Informix Dynamic Server 2000, Version 9.2x

  o INFORMIX-OnLine, Version 5.x

  o INFORMIX-SE, Version 5.x

  o INFORMIX-SE, Version 7.x


III.CONFIGURATION
==================

To use the Informix JDBC Driver directly, you must have a JDK 1.2 (or
later) package on your platform. Please refer to
http://splash.javasoft.com/jdbc/ for details.


IV.INSTALLATION ON SOLARIS MACHINES
=====================================

Before installing Informix JDBC Driver Version 2.2 on Solaris machines,
make sure that the DISPLAY environment variable is set.


V.INSTALLATION ON HP MACHINES
================================

Installation of Informix JDBC Driver Version 2.2 fails on HP machines,
Versions 10.20 and 11.00, because of a bug in the HP 1.2 beta version of
JDK. The problem has been reported to HP. Because of this problem,
Informix JDBC Driver has not been tested with HP JDK Version 1.2. (This is
Bug #118048.)


VI.INSTALLATION ON WINDOWS
============================

To install Informix JDBC Driver Version 2.2 on Windows, you must have
administrator privileges. The following error occurs if you do not have
administrator privileges: "Unable to create an entry for this application
in the control panel Add/Remove property list."


VII.UNINSTALLATION ON WINDOWS
==============================

If JDK 1.2.2 is installed and you uninstall Informix JDBC Driver on
Windows NT, InstallShield displays the following message:

    ifxjdbc.jar has changed since it was created. Delete anyway?

The same message appears for ifxjdbc-g.jar. Even if your response is 'yes'
to remove the files, the lib directory remains with the JAR files under
it. You must manually remove the lib directory.


VIII.QUOTING THE URL STRING
============================

When running demo programs on a UNIX machine, you can quote the URL string
using single quotes, double quotes, or no quotes. The following example
shows single quotes  (a URL must be on one line):

     java demo1 'jdbc:informix-sqli://mymachine:1526:INFORMIXSERVER=myserver;
          user=myname;password=mypasswd'

When running demo programs on an NT machine, you can use double quotes or
no quotes, as in the following example (a URL must be on one line):

     java demo1 jdbc:informix-sqli://mymachine:1526:INFORMIXSERVER=myserver;
          user=myname;password=mypasswd

If you quote the URL string using single quotes on an NT machine, you see
the following messages:

     ERROR: failed to connect!
     MSG: No suitable driver


IX.NEW FEATURES
=================

The new features for release 2.2 of the Informix JDBC Driver are as follows:

  o XML utility methods: New methods have been added that facilitate
    storage and retrieval of XML data in database columns by assisting in
    the parsing and conversion of the XML data, to verify that well-formed
    and/or valid XML data is stored, and that invalid XML data is rejected.

  o Connection Pool Manager: This feature manages a pool of unused Database
    connections on behalf of the Connection Pooled DataSource (CPDS). Client
    that uses connections from a Datasource will automatically inherit this
    feature.  (See JDBC API on registering/deploying a CPDS).

  o UDT Manager: A tool to simplify the creation of Java user-defined types
    (JUDTs) on the server from a JDBC client application.

  o UDR Manager: A tool to simplify the creation Java user-defined routines
    (JUDRs) on the server from a JDBC client application.

  o HTTP proxy enhancement: Added LDAP and sqlhost file lookup capability to
    the HTTP proxy as alternate resources for supplying a clients target
    database connection information.

  o New methods for the IfxSmartBlob (Informix Extension): IfxLoLock(),
    IfxLoUnLock(), IfxLoAlter(), IfxLoFromFile(), IfxLoToFile(). Note that
    these new methods only work the 9.21 and higher release of our
    database servers.


X.UDT/UDR MANAGER
====================

Test execution requirements:

1. Refer to "Creating UDRs in Java" manual to configure the database
   server for Java, a server requirement.

2. Bring up Informix database servers, Version 9.21 or above.

3. Create a default sbspace in the database server.

4. Put /ifxtools.jar or /ifxtools-g.jar in the CLASSPATH
   to use the UDT/UDR Manager feature.

5. Make sure the /tmp (on Unix) or C:\TEMP (on NT) directory exists
   when default JAR temporary path is used.

Problem Solving:

A. If you see the following error occurring with sqlj.setUDTExtName()
   while running PlayWithCircle for example,

	SQLCODE -9431
	SQLErrm '/vobs/tristarm/nb_sqldist/extend/krakatoa/jre/lib/sparc/classic/libjvm.so'

   and you definitely have something in
   /extend/krakatoa/jre/lib/sparc/classic/libjvm.so.

   Then you should run setjdk as follows, this only happened on certain
   versions of the OS :

        bring down the server
        % cd $INFORMIXDIR/extend/krakatoa
	as root, do the setjdk command from krakatoa directory as follow:
        % setjdk jdk12 $INFORMIXDIR   -- it creates links from all the
                                                .so files to /usr/lib.

B. If you see error "-668 System command cannot be executed." during
   createUDT() or createUDRs(), then:

   - make sure you have the chmod/attrib command available on your platform
   - make sure you have /usr/informix directory with owner and group as user
     "informix" and with permission 777.
   - make sure you have an entry "informix:::" in
     /etc/group file.

Limitations & Known problems:

1. The UDT/UDR Manager feature does not work for legacy Informix database
   servers that do not support Java.

2. The generic java method provided by the server for use as support
   functions of the opaque types do not work properly against Informix
   database server, Version 9.21 due to a Java UDT bug 131982 on that server.

3. Creating Java UDR for C-UDT with UDR Manager is not supported.


XI.WHERE CLAUSE BEHAVIOR CHANGE
=================================

You may see some differences in the behavior of WHERE clauses that used to
work with JDBC Versions 1.x and 2.0 but fail with Version 2.2. The server
does not send WHERE column type data back to the driver for WHERE clauses,
so in cases of ambiguity (BOOLEAN, LVARCHAR, TEXT, BYTE, BLOB and CLOB
types) the driver cannot determine what type of data to send to the
server. For example, suppose you use the following statement:

    select a, b from tab where a = ? and b = ?

The 1.x or 2.0 driver would incorrectly assume that the first '?' matched
the 1st column (a) in the project list and the second '?' matched the 2nd
column (b) in the project list. This was an incorrect assumption, because
the statement could have been as follows:

    select a, b from tab where c = ? and d = ?

This bug has been fixed in Version 2.2. In cases of ambiguity, use the
PreparedStatement extensions to explicitly tell the driver what the WHERE
column data types is. These extensions are described in Chapter 3 of the
"Informix JDBC Driver Programmer's Guide, Version 2.2."


XII.DATABASE CONNECTIONS IN THE EXAMPLES
=========================================

Except for the pickaseat demo, the examples listed in the "Informix JDBC
Driver Programmer's Guide, Version 2.2" use the
DriverManager.getConnection() method to get a database connection.  Sun
Microsystems recommends using a DataSource object instead.  For more
information, refer to Sun's documentation and to the README.TXT file in
the /demo/pickaseat directory.


XIII.GENERAL INFORMIX JDBC DRIVER LIMITATIONS
==============================================

Please refer to the "Informix JDBC Driver Programmer's Guide, Version 2.2"
for a complete list of unsupported methods in Informix JDBC driver.
Additional general limitations are as follows:

  o The Ref type is not supported.

  o The same Statement or ResultSet instance cannot be accessed
    concurrently across threads. You can, however, share a Connection
    object between multiple threads.

    For example, if one thread executes the "Statement.executeQuery()"
    method on a Statement object, and another thread executes the
    "Statement.executeUpdate()" method on the same Statement object, the
    results of both methods are unexpected and depend on which method was
    executed last.

    Similarly, if one thread executes the method ResultSet.next() and
    another thread executes the same method on the same ResultSet object,
    the results of both methods are unexpected and depend on which method
    was executed last.

  o All FLOAT and DOUBLE data types are transported as decimals if run
    against Informix database servers, Versions 9.1 and below, on Windows
    NT.

  o The JDBC driver maps java.sql.Timestamp to the Informix type DATETIME
    YEAR TO FRACTION(5) and java.sql.Time to the Informix type DATETIME
    HOUR TO SECOND. Informix DATETIME types are very restrictive and are
    not interchangeable. If you attempt to bind java.sql.Time to DATETIME
    YEAR TO FRACTION(5) or java.sql.Timestamp to DATETIME HOUR TO SECOND,
    you might get an error from the Informix database server. Any other
    DATETIME qualifiers are NOT supported.

  o The applet viewer utility in the JDK 1.2 Beta 4 version has a bug
    that causes the class loader not to consider the default (generic)
    resource bundle after a localized resource bundle cannot be located.
    This bug prevents an applet from running in the applet viewer if it
    downloads the Informix JDBC driver.

  o For best results, always call resultset.close() and statement.close()
    methods to indicate to the driver that you are done with the
    statement/resultset. Otherwise, your program might not release all
    its resources on the database server.

  o If you use an expression within an SQL statement, for example,
    "select mytype::lvarchar from mytab", you might not be able to use
    ResultSet.getXXX(columnName) to retrieve the value. You can use
    ResultSet.getXXX(columnIndex) to retrieve the value instead.

  o The following code sets have not been verified: eucJP, cp949, KS5601,
    ksc, gb, GB2312-80 and cp936. If a character mismatch occurs, please
    report it to Informix Technical Support.

  o GL_DATE conversion modifier "O", which indicates use of alternative
    digits for alternative date formats, is not currently supported.

  o GL_DATE optional date format qualifiers for field specifications (for
    example, %4m to display a month as a decimal number with a maximum
    field width of 4) are not currently supported.

  o The JDBC 2.2 Driver does not support ALS 6.0, 5.0, or 4.0 era-based
    formats in the DBDATE environment variable.

  o DB_LOCALE, CLIENT_LOCALE, and GL_DATE are supported only if the
    server supports the Informix GLS feature. If these environment
    variables are set and your application connects to a non-GLS server
    (server versions earlier than 7.2), a connection exception occurs.

    If you connect to a non-GLS server, the behavior is the same as the
    JDBC driver 1.22 version.

  o When using the syntax "database dbname@newserver", the new server
    must have the same locale as the locale of the server in the current
    connection. If a new locale needs to be established, the connection
    must be closed and reopened with the correct locale information.

  o Batch update fails if you attempt to insert rows with TEXT or BYTE
    columns unless the IFX_USEPUT environment variable is set to 1.

  o You cannot call the setTransactionIsolation method of the
    java.sql.Connection class in the middle of a transaction.

  o If you use the IfxJDBCProxy servlet with a browser that uses version
    1.0.1 of the JSDK, such as Netscape Enterprise Server 3.6 or Apache
    1.3, you get an error if you turn debugging on.  A free plugin, JRun,
    eliminates this error by allowing a browser to run with the latest
    JSDK version.


XIV.ERROR MESSAGES
===================

A.   RSAM ERROR MESSAGES
------------------------

RSAM messages are chained to SQLCODE messages. For example, if an SQLCODE
message says that a table cannot be created, the RSAM message states the
reason, which might be insufficient disk space.

You can use the SQLException.getNextException() method to catch RSAM error
messages. For an example of how to catch these messages, see the
ErrorHandling.java file in the /demo/basic directory.


B.   STANDARD INFORMIX ERROR MESSAGES
-------------------------------------

-79700 Method not supported

Informix JDBC Driver does not support this JDBC method.

-79702 Can't create new object

The software could not allocate memory for a new String object.

-79703 Row/column index out of range

The row or column index is out of range. Compare the index to the number
of rows and columns expected from the query to ensure that it is within
range.

-79704 Can't load driver

Informix JDBC Driver could not create an instance of itself and register
it in the DriverManager class. The rest of the SQLException text describes
what failed.

-79705 Incorrect URL format

The database URL you have submitted is invalid. Informix JDBC Driver does
not recognize the syntax. Check the syntax and try again.

-79706 Incomplete input

An invalid character was found during conversion of a String value to an
IntervalDF or IntervalYM object. Check the "Informix JDBC Driver
Programmer's Guide" for correct values.

-79707 Invalid qualifier

An error was found during construction of an Interval qualifier from
atomic elements: length, start, or end values. Check the length, start,
and end values to verify that they are correct. See the "Informix JDBC
Driver Programmer's Guide" for correct values.

-79708 Can't take null input

The string you have provided is null. Informix JDBC Driver does not
understand null input in this case. Check the input string to ensure that
it has the proper value.

-79709 Error in date format

The expected input is a valid date string in the following format: yyyy-mm-
dd. Check the date and verify that it has a four-digit year, followed by a
valid two-digit month and two-digit day. The delimiter must be a hyphen (-).

-79710 Syntax error in SQL escape clause

Invalid syntax was passed to a jdbc escape clause. Valid JDBC escape
clause syntax is demarcated by curly braces and a keyword: for example,
{keyword syntax}. Check the JDBC 2.0 documentation from Sun Microsystems
for a list of valid escape clause keywords and syntax.

-79711 Error in time format

An invalid time format was passed to a JDBC escape clause. The escape
clause syntax for time literal has the following format: {t 'hh:mm:ss'}.

-79712 Error in timestamp format

An invalid timestamp format was passed to a JDBC escape clause. The escape
clause syntax for timestamp literal has the following format: {ts 'yyyy-
mm-dd hh:mm:ss.f...'}.

-79713 Incorrect number of arguments

An incorrect number of arguments was passed to the scalar function escape
syntax. The correct syntax is {fn function(arguments)}. Verify that the
correct number of arguments was passed to the function.

-79714 Type not supported

You have specified a data type that is not supported by Informix JDBC
Driver. Check your program to make sure the data type used is among those
supported by the driver.

-79715 Syntax error

Invalid syntax was passed to a jdbc escape clause. Valid JDBC escape
clause syntax is demarcated by curly braces and a keyword: {keyword
syntax}. Check the JDBC 2.0 documentation from Sun Microsystems for a list
of valid escape clause keywords and syntax.

-79716 System or internal error

An operating or runtime system error or a driver internal error occurred.
The accompanying message describes the problem.

-79717 Invalid qualifier length

The length value for an Interval object is incorrect. See the "Informix
JDBC Driver Programmer's Guide" for correct values.

-79718 Invalid qualifier start code

The start value for an Interval object is incorrect. See the "Informix
JDBC Driver Programmer's Guide" for correct values.

-79719 Invalid qualifier end code

The end value for an Interval object is incorrect. See the "Informix JDBC
Driver Programmer's Guide" for correct values.

-79720 Invalid qualifier start or end code

The start or end value for an Interval object is incorrect. See the
"Informix JDBC Driver Programmer's Guide" for correct values.

-79721 Invalid interval string

An error occurred during conversion of a String value to an IntervalDF or
IntervalYM object. Check the "Informix JDBC Driver Programmer's Guide" for
the correct format.

-79722 Numeric character(s) expected

An error occurred during conversion of a String value to an IntervalDF or
IntervalYM object. A numeric value was expected and not found. Check the
"Informix JDBC Driver Programmer's Guide" for the correct format.

-79723 Delimiter character(s) expected

An error occurred during conversion of a String value to an IntervalDF or
IntervalYM object. A delimiter was expected and not found. Check the
"Informix JDBC Driver Programmer's Guide" for the correct format.

-79724 Character(s) expected

An error occurred during conversion of a String value to an IntervalDF or
IntervalYM object. End of string was encountered before conversion was
complete. Check the "Informix JDBC Driver Programmer's Guide" for the
correct format.

-79725 Extra character(s) found

An error occurred during conversion of a String value to an IntervalDF or
IntervalYM object. End of string was expected, but there were more
characters in the string. Check the "Informix JDBC Driver Programmer's
Guide" for the correct format.

-79726 Null SQL statement

The SQL statement passed in was null. Check the SQL statement string of
your program to make sure it contains a valid statement.

-79727 Statement was not prepared

The SQL statement was not prepared properly. If you use host variables
(for example, insert into mytab values (?, ?);) in your SQL statement, you
must use connection.prepareStatement() to prepare the SQL statement before
you can execute it.

-79728 Unknown object type

If this is a null opaque type, the type is unknown and cannot be
processed. If this is a complex type, the data in the collection or array
are of an unknown type and cannot be mapped to an Informix type. If this
is a row, one of the elements in the row cannot be mapped to an Informix
type. Verify the customized type mapping or data type of the object.

-79729 Method cannot take argument

The method does not take an argument. Refer to your Java API specification
or the appropriate section of this guide to make sure you are using the
method properly.

-79730 Connection not established

A connection was not established. You must obtain the connection by
calling the DriverManager.getConnection() method first.

-79731 MaxRows out of range

You have specified an out-of-range maxRow value. Make sure you specify a
value between 0 and Integer.MAX_VALUE.

-79732 Illegal cursor name

The cursor name specified is not valid. Make sure the string passed in is
not null or empty.

-79733 No active result

The statement does not contain an active result. Check your program logic
to make sure you have called the executeXXX() method before you attempt to
refer to the result.

-79734 INFORMIXSERVER has to be specified

INFORMIXSERVER is a property required for connecting to an Informix
database. You can specify it in the database URL or as part of a
Properties object that is passed to the connect() method.

-79735 Can't instantiate protocol

An internal error occurred during a connection attempt. Call Informix
technical support.

-79736 No connection/statement establish yet

There is no current connection or statement. Check your program to make
sure a connection was properly established or a statement was created.

-79737 No meta data

There is no metadata available for this SQL statement. Make sure the
statement generates a result set before you attempt to use it.

-79738 No such column name

The column name specified does not exist. Make sure the column name is
correct.

-79739 No current row

The cursor is not properly positioned. You must first position the cursor
within the result set by using a method such as resultset.next(),
resultset.beforefirst(), resultset.first(), or resultset.absolute().

-79740 No statement created

There is no current statement. Make sure the statement was properly created.

-79741 Can't convert to

There is no data conversion possible from the column data type to the one
specified. The actual data type is appended to the end of this message.
Review your program logic to make sure that the conversion you have asked
for is supported. Refer to the "Informix JDBC Driver Programmer's Guide"
for the data mapping matrix.

-79742 Can't convert from

No data conversion is possible from the data type you specified to the
column data type. The actual data type is appended to the end of this
message. Check your program logic to make sure that the conversion you
have asked for is supported. Refer to the "Informix JDBC Driver
Programmer's Guide" for the data mapping matrix.

-79744 Transactions not supported

The user has tried to call commit() or rollback() on a database that does
not support transactions or has tried to set autoCommit to false on a non-
logging database. Verify that the current database has the correct logging
mode and review the program logic.

-79745 Read only mode not supported

Informix does not support read-only mode.

-79746 No Transaction Isolation on non-logging db's

Informix does not support setting the transaction isolation level on non-
logging databases.

-79747 Invalid transaction isolation level

If the database server could not complete the rollback, this error occurs.
See the rest of the SQLException message for more details about why the
rollback failed.

This error also occurs if an invalid transaction level is passed to
setTransactionIsolation(). The valid values are:

  o TRANSACTION_READ_UNCOMMITTED

  o TRANSACTION_READ_COMMITTED

  o TRANSACTION_REPEATABLE_READ

  o TRANSACTION_SERIALIZABLE

-79748 Can't lock the connection

Informix JDBC Driver normally locks the connection object just before
beginning the data exchange with the database server. The driver could not
obtain the lock. Only one thread at a time should use the connection object.

-79749 Number of input values does not match number of question marks

The number of variables that you set using the PreparedStatement.setXXX()
methods in this statement does not match the number of ? placeholders that
you wrote into the statement. Locate the text of the statement and verify
the number of placeholders and then check the calls to
PreparedStatement.setXXX().

-79750 Method only for queries

The Statement.executeQuery(String) and PreparedStatement.executeQuery()
methods should only be used if the statement is a SELECT statement. For
other statements, use the Statement.execute(String),
Statement.executeBatch(), Statement.executeUpdate(String),
Statement.getUpdateCount(), Statement.getResultSet(), or
PreparedStatement.executeUpdate() method.

-79751 Forward fetch only. [in JDBC 1.2]

The result set is not set to FETCH_FORWARD. Call
Resultset.setFetchDirection(ResultSet.FETCH_FORWARD) to reset the direction.

-79755 Object is null.

The object passed in is null. Check your program logic to make sure your
object reference is valid.

-79756 must start with 'jdbc'

The first token of the database URL must be the keyword jdbc (case
insensitive), as in the following example:

    jdbc:informix-sqli://mymachine:1234/mydatabase:user=me:password=secret

-79757 Invalid sub-protocol

The current valid subprotocol supported by Informix is informix-sqli.

-79758 Invalid ip address

When you connect to an Informix database server via an ip address, the ip
address must be valid. A valid ip address is set of four numbers between 0
and 255, separated by dots (.): for example, 127.0.0.1.

-79759 Invalid port number

The port number must be a valid four-digit number, as follows:

    jdbc:informix-sqli://mymachine:1234/mydatabase:user=me:password=secret

In this example, 1234 is the port number.

-79760 Invalid database name

This statement contains the name of a database in some invalid format.

The maximum length for database names and cursor names depends on the
version of the database server. In 7.x, 8.x, and 9.1x versions of the
Informix database server, the maximum length is 18 characters.

For INFORMIX-SE, database names should be no longer than 10 characters
(fewer in some host operating systems).

Both database and cursor names must begin with a letter and contain only
letters, numbers, and underscore characters. In the 6.0 and later versions
of the database server, database and cursor names can begin with an
underscore.

In MS-DOS systems, filenames can be a maximum of eight characters plus a
three-character extension.

-79761 Invalid Property format

The database URL accepts property values in key=value pairs. For example,
user=informix:password=informix adds the key=value pairs to the list of
properties that are passed to the connection object. Check the syntax of
the key=value pair for syntax errors. Make sure there is only one = sign;
that there are no spaces separating the key, value, or =; and that
key=value pairs are separated by one colon(:), again with no spaces.

-79762 Attempt to connect to a non 5.x server

When connecting to a Version 5.x database server, the user must set the
database URL property USEV5SERVER to any non-null value. If a connection is
then made to a Version 6.0 or later database server, this exception is
thrown. Verify that the version of the database server is correct and
modify the database URL as needed.

-79764 Invalid Fetch Direction value

An invalid fetch direction was passed as an argument to the
Statement.setFetchDirection() or ResultSet.setFetchDirection() method.
Valid values are FETCH_FORWARD, FETCH_REVERSE, and FETCH_UNKNOWN.

-79765 ResultSet Type is TYPE_FETCH_FORWARD, direction can only be
FETCH_FORWARD

The result set type has been set to TYPE_FORWARD_ONLY, but the
setFetchDirection() method has been called with a value other than
FETCH_FORWARD. The direction specified must be consistent with the result
type specified.

-79766 Incorrect Fetch Size value

The Statement.setFetchSize() method has been called with an invalid value.
Verify that the value passed in is greater than 0. If the setMaxRows
method has been called, the fetch size must not exceed that value.

-79767 ResultSet Type is TYPE_FORWARD_ONLY

A method such as ResultSet.beforeFirst(), ResultSet.afterLast(),
ResultSet.first(), ResultSet.last(), ResultSet.absolute(),
ResultSet.relative(), ResultSet.current(), or ResultSet.previous() has
been called, but the result set type is TYPE_FORWARD_ONLY. Call only the
ResultSet.next() method if the result set type is TYPE_FORWARD_ONLY.

-79768 Incorrect row value

The ResultSet.absolute(int) method has been called with a value of 0. The
parameter must be greater than 0.

-79769 A customized type map is required for this data type

You must register a customized type map to use any opaque types.

-79770 Cannot find the SQLTypeName specified in the SQLData or Struct

The SQLTypename object you specified in the SQLData or Struct class does
not exist in the database. Make sure that the type name is valid.

-79771 Input value is not valid

The input value is not accepted for this data type. Make sure this is a
valid input for this data type.

-79772 No more data to read. Verify your SQLdata class or getSQLTypeName()

You have asked for more data than is available. Check your SQLData class
to make sure it matches what is in the database schema. The SQLTypeName
object might also be incorrect.

-79774 Unable to create local file

Large object data read from the database server can be stored either in
memory or in a local file. If the LOBCACHE value is 0 or the large object
size is greater than the LOBCACHE value, the large object data from the
database server is always stored in a file. In this case, if a security
exception occurs, Informix JDBC Driver makes no attempt to store the large
object into memory and throws this exception.

-79775 Only TYPE_SCROLL_INSENSITIVE and TYPE_FORWARD_ONLY are supported.

Informix JDBC Driver only supports a result set type of
TYPE_SCROLL_INSENSITIVE and TYPE_FORWARD_ONLY. Only these values should be
used.

-79776 Type requested (%s) does not match row type information (%s) type

Row type information was acquired either through the system catalogs or
through the supplied row definition. The row data provided does not match
this row element type. The type information must be modified, or the data
must be provided.

-79777 readObject/writeObject() only supports UDT's, Distincts and complex
types

The SQLData.writeObject() method was called for an object that is not a
user-defined, distinct, or complex type. Verify that you have provided
customized type-mapping information.

-79778 Type mapping class must be a java.util.Collection implementation

You provided a type mapping to override the default for a set, list, or
multiset data type, but the class does not implement the
java.util.Collection interface.

-79780 Data within a collection must all be the same Java class and length.

Verify that all the objects in the collection are of the same class.

-79781 Index/Count out of range

Array.getArray() or Array.getResultSet() was called with index and count
values. Either the index is out of range or the count is too big. Verify
that the number of elements in the array is sufficient for the index and
count values.

-79782 Method can be called only once

Make sure methods like Statement.getUpdateCount() and
Statement.getResultSet() are called only once per result.

-79783 Encoding or code set not supported

The encoding or code set entered in the DB_LOCALE or CLIENT_LOCALE
variable is not valid. Check the "Informix JDBC Driver Programmer's Guide"
for valid code sets.

-79784 Locale not supported

The locale entered in the DB_LOCALE or CLIENT_LOCALE variable is not
valid. Check the "Informix JDBC Driver Programmer's Guide" for valid
locales.

-79785 Unable to convert JDBC escape format date string to localized date
string

The JDBC escape format for date values must be specified in the format {d
'yyyy-mm-dd'}. Verify that the JDBC escape date format specified is
correct. Verify the DBDATE and GL_DATE settings for the correct date
string format if either of these was set to a value in the connection
database URL string or property list.

-79786 Unable to build a Date object based on localized date string
representation

The localized date string representation specified in a char, varchar, or
lvarchar column is not correct, and a date object cannot be built based on
the year, month, and day values. Verify that the date string
representation conforms to the DBDATE or GL_DATE date formats if either
one of these is specified in a connection database URL string or property
list. If neither DBDATE or GL_DATE is specified but a CLIENT_LOCALE or
DB_LOCALE is explicitly set in a connection database URL string or
property list, verify that the date string representation conforms to the
JDK short default format (DateFormat.SHORT).

-79788 User name must be specified

The user name is required to establish a connection with Informix JDBC
Driver. Make sure you pass in user=your_user_name as part of the database
URL or one of the properties.

-79789 Server does not support GLS variables DB_LOCALE, CLIENT_LOCALE or
GL_DATE

These variables can only be used if the database server supports GLS.
Check the documentation for your database server version and omit these
variables if they are not supported.

-79790 Invalid complex type definition string

The value returned by the getSQLtypeName() method is either null or
invalid. Check the string to verify that it is either a valid named-row
name or a valid row type definition.

-79792 Row must contain data

The Array.getAttributes() or Array.getAttributes(Map) method has returned
0 elements. These methods must return a nonzero number.

-79793 Data in array does not match getBaseType() value

The Array.getArray() or Array.getArray(Map) method returns an array where
the element type does not match the JDBC base type.

-79794 Row length provided (%s) doesn't match row type information (%s)

Data in the row does not match the length in the row type information. You
do not have to pad string lengths to match what is in the row definition,
but lengths for other data types should match.

-79795 Row extended id provided (%s) doesn't match row type information (%s)

The extended ID of the object in the row does not match the extended ID as
defined in row type information. Either update the row information (if you
are providing the row definition) or check the type mapping information.

-79796 Cannot find UDT, distinct or named row (%s) in database

The getSQLTypeName() method has returned a name that can not be found in
the database. Verify that the Struct or SQLData object returns the correct
information.

-79797 DBDATE setting must be at least 4 characters and no longer than 6
characters.

This error occurs because the DBDATE format string that is passed to the
database server either has too few characters or too many. To fix the
problem, verify the DBDATE format string with the user documentation and
make sure that the correct year, month, day, and possibly era parts of the
DBDATE format string are correctly identified.

-79798 A numerical year expansion is required after 'Y' character in
DBDATE string.

This error occurs because the DBDATE format string has a year designation
(specified by the character Y), but there is no character following the
year designation to denote the numerical year expansion (2 or 4). To fix
the problem, modify the DBDATE format string to include the numerical year
expansion value after the Y character.

-79799 An invalid character is found in the DBDATE string after the 'Y'
character.

This error occurs because the DBDATE format string has a year designation
(specified by the character Y), but the character following the year
designation is not a 2 or 4 (for two-digit years and four-digit years,
respectively). To fix the problem, modify the DBDATE format string to
include the required numerical year expansion value after the Y character.
Only a 2 or 4 character should immediately follow the Y character
designation.

-79800 No 'Y' character is specified before the numerical year expansion
value.

This error occurs because the DBDATE format string has a numerical year
expansion (2 or 4 to denote two-digit years or four-digit years,
respectively), but the year designation character (Y) was not found
immediately before the numerical year expansion character specified. To
fix the problem, modify the DBDATE format string to include the required Y
character immediately before the numerical year expansion value requested.

-79801 An invalid character is found in DBDATE format string.

This error occurs because the DBDATE format string has a character that is
not allowed. To fix the problem, modify the DBDATE format string to only
include the correct date part designations: year (Y), numerical year
expansion value (2 or 4), month (M), and day (D). Optionally, you can
include an era designation (E) and a default separator character (hyphen,
dot, or slash), which is specified at the end of the DBDATE format string.
Refer to the user documentation for further information on correct DBDATE
format string character designations.

-79802 Not enough tokens are specified in the string representation of a
date value.

This error occurs because the date string specified does not have the
minimum number of tokens or separators needed to form a valid date value
(composed of year, month, and day numerical parts). For example, 12/15/98
is a valid date string representation with the slash character as the
separator or token. But 12/1598 is not a valid date string representation,
because there are not enough separators or tokens. To fix the problem,
modify the date string representation to include a valid format for
separating the day, month, and year parts of a date value.

-79803 Date string index out of bounds during date format parsing to build
Date object.

This error occurs because there is not a one-to-one correspondence between
the date string format required by DBDATE or GL_DATE and the actual date
string representation you defined. For example, if GL_DATE is set to %b %D
%y and you specify a character string of Oct, there is a definite mismatch
between the format required by GL_DATE and the actual date string. To fix
the problem, modify the date string representation of the DBDATE or
GL_DATE setting so that the date format specified matches one-to-one with
the required date string representation.

-79804 No more tokens are found in DBDATE string representation of a date
value.

This error occurs because the date string specified does not have any more
tokens or separators needed to form a valid date value (composed of year,
month, and day numerical parts) based on the DBDATE format string. For
example, 12/15/98 is a valid date string representation when DBDATE is set
to MDY2/. But 12/1598 is not a valid date string representation, because
there are not enough separators or tokens. To fix the problem, modify the
date string representation to include a valid format for separating the
day, month, and year parts of a date value based on the DBDATE format
string setting.

-79805 No era designation found in DBDATE/GL_DATE string representation of
date value.

This error occurs because the date string specified does not have a valid
era designation as required by the DBDATE or GL_DATE format string
setting. For example, if DBDATE is set to Y2MDE-, but the date string
representation specified by the user is 98-12-15, this is an error because
there is no era designation at the end of the date string value. To fix
the problem, modify the date string representation to include a valid era
designation based on the DBDATE or GL_DATE format string setting. In this
example, a date string representation of 98-12-15 AD would probably
suffice, depending on the locale.

-79806 Numerical day value can not be determined from date string based on
DBDATE.

This error occurs because the date string specified does not have a valid
numerical day designation as required by the DBDATE format string setting.
For example, if DBDATE is set to Y2MD-, but the date string representation
you specify is 98-12-blah, this is an error, because blah is not a valid
numerical day representation. To fix the problem, modify the date string
representation to include a valid numerical day designation (1-31) based
on the DBDATE format string setting.

-79807 Numerical month value can not be determined from date string based
on DBDATE.

This error occurs because the date string specified does not have a valid
numerical month designation as required by the DBDATE format string
setting. For example, if DBDATE is set to Y2MD-, but the date string
representation you specify is 98-blah-15, this is an error, because blah
is not a valid numerical month representation. To fix the problem, modify
the date string representation to include a valid numerical month
designation (1-12) based on the DBDATE format string setting.

-79808 Not enough tokens specified in %D directive representation of date
string.

This error occurs because the date string specified does not have the
correct number of tokens or separators needed to form a valid date value
based on the GL_DATE %D directive (mm/dd/yy format). For example, 12/15/98
is a valid date string representation based on the GL_DATE %D directive,
but 12/1598 is not a valid date string representation, because there are
not enough separators or tokens. To fix the problem, modify the date
string representation to include a valid format for the GL_DATE %D
directive.

-79809 Not enough tokens specified in %x directive representation of date
string.

This error occurs because the date string specified does not have the
correct number of tokens or separators needed to form a valid date value
based on the GL_DATE %x directive (format required is based on day, month,
and year parts, and the ordering of these parts is determined by the
specified locale). For example, 12/15/98 is a valid date string
representation based on the GL_DATE %x directive for the U.S. English
locale, but 12/1598 is not a valid date string representation, because
there are not enough separators or tokens. To fix the problem, modify the
date string representation to include a valid format for the GL_DATE %x
directive based on the locale.

-79810 This release of JDBC requires to be run with JDK 1.2+.

Informix JDBC Driver Version 2.x requires a JDK version of 1.2 or greater.

-79811 Connection without user/password not supported.

You called the getConnection() method for the DataSource object, and the
user name or the password is null. Use the user name and password
arguments of the getConnection() method or set these values in the
DataSource object.

-79812 user/Password does not match with datasource.

You called the getConnection(user, passwd) method for the DataSource, and
the values you supplied did not match the values already found in the data
source.

-79814 Blob/Clob object is either closed or invalid.

If you retrieve a smart large object using the ResultSet.getBlob() or
ResultSet.getClob() method, or create one using the IfxBlob() or
IfxCblob() constructor, a smart large object is opened. You can then read
from or write to the smart large object. After you execute the
IfxBlob.close() method, do not use the smart large object handle for
further read/write operations, or this exception is thrown.

-79815 Not in Insert mode. Need to call moveToInsertRow() first.

You tried to use the insertRow() method, but the mode is not set to
Insert. Call the moveToInsertRow() method before calling insertRow().

-79816 Cannot determine the table name.

The table name in the query is either incorrect or refers to a table that
does not exist.

-79817 No serial, rowid, or primary key specified in the statement.

The updatable scrollable feature works only for tables that have a SERIAL
column, a primary key, or a ROWID specified in the query. If the table
does not have any of the above, an updatable scrollable cursor cannot be
created.

-79818 Statement concurrency type is not set to CONCUR_UPDATABLE.

You tried to call the insertRow(), updateRow(), or deleteRow() method for
a statement that has not been created with the CONCUR_UPDATABLE
concurrency type. Recreate the statement with this type set for the
concurrency attribute.

-79819 Still in Insert mode. Call moveToCurrentRow() first.

You cannot call the updateRow() or deleteRow() method while still in
Insert mode. Call the moveToCurrentRow() method first.

-79820 Function contains an output parameter

You have passed in a statement that contains an OUT parameter, but you
have not used the driver's CallableStatement.registerOutParameter() and
getXXX() methods to process the OUT parameter.

-79821 Name unnecessary for this data type.

If you have a data type that requires a name (an opaque type or complex
type) you must call a method that has a parameter for the name, such as
the following methods:

     public void IfxSetNull(int i, int ifxType, String name)

     public void registerOutParameter(int parameterIndex, int sqlType,
          java.lang.String name);

     public void IfxRegisterOutParameter(int parameterIndex, int ifxType,
          java.lang.String name);

The data type you have specified does not require a name. Use another
method that does not have a type parameter.

-79822 OUT parameter has not been registered.

The function specified using the CallableStatement interface has an OUT
parameter that has not been registered. Call one of the
registerOutParmeter() or IfxRegisterOutParemeter() methods to register the
OUT parameter type before calling the executeQuery() method.

-79823 IN parameter has not been set.

The function specified using the CallableStatement interface has an IN
parameter that has not been set. Call the setNull() or IfxSetNull() method
if you want to set a null IN parameter. Otherwise, call one of the set
methods inherited from the PreparedStatement interface.

-79824 OUT parameter has not been set.

The function specified using the CallableStatement interface has an OUT
parameterthat has not been set. Call the setNull() or IfxSetNull() method
if you want to set a null OUT parameter. Otherwise, call one of the set
methods inherited from the PreparedStatement interface.

-79825 Type name is required for this data type.

This data type is an opaque type, distinct type, or complex type, and it
requires a name. Use set methods for IN parameters and register methods
for OUT parameters that take a type name as a parameter.

-79826 Ambiguous java.sql.Type, use IfxRegisterOutParameter().

The SQL type specified either has no mapping to an Informix data type or
has more than one mapping. Use one of the IfxRegisterOutParameter()
methods to specify the Informix data type.

-79827 Function doesn't have an output parameter.

This function does not have an OUT parameter, or this function has an OUT
parameter whose value the server version does not return. None of the
methods in the CallableStatement interface apply. Use the inherited
methods from the PreparedStatement interface.

-79828 Function parameter specified isn't an OUT parameter.

Informix functions can have only one OUT parameter, and it is always the
last parameter.

-79829 Invalid directive used for the GL_DATE environment variable.

One or more of the directives specified by the GL_DATE environment
variable is not allowed. Refer to the "Informix JDBC Driver Programmer's
Guide," Version 2.2, for a list of the valid directives for a GL_DATE
format.

-79830 Insufficient information given for building a Time or Timestamp
Java object.

To perform string to binary conversions correctly for building a
java.sql.Timestamp or java.sql.Time object, all the DATETIME fields must
be specified for the chosen date string representation. For
java.sql.Timestamp objects, the year, month, day, hour, minute, and second
parts must be specified in the string representation. For java.sql.Time
objects, the hour, minute, and second parts must be specified in the
string representation.

-79831 Exceeded maximum no. of connections configured for Connection Pool
Manager.

If you repeatedly connect to a database using a DataSource object without
closing the connection, connections accumulate. When the total number of
connections for the DataSource object exceeds the maximum limit, 100, this
error is thrown.

-79834 Distributed transactions (XA) not supported by this server.

XPS does not support distributed transactions (XA). This error is caught
when the user calls the method XAConnection.getConnection() against the XPS
server.

-79838 Cannot execute change permission command (chmod/attrib).

The driver is unable to change the permissions on the client JAR
file. This could happen if your client platform does not support
the chmod or attrib command, or if the user running the JDBC
application does not have the authority to change access permis-
sions on the client JAR file.

Make sure the chmod or attrib command is available for your
platform, and that the user running the application has the
authority to change access permissions on the client JAR file.

-79839 Same Jar SQL name already exists in the system catalog.

The JAR filename specified when your application called
UDTManager.createJar() has already been registered in the
database server. Use UDTMetaData.setJarFileSQLName() to
specify a different SQL name for the JAR file.

-79840 Unable to copy jar file from client to server.

This error occurs when the pathname set using setJarTmpPath()
is not writable by user informix or the user specified in the JDBC
connection.  Make sure the pathname is readable and writable by
any user.

-79842 No UDR information was set in UDRMetaData.

Your application called the UDRManager.createUDRs() method
without specifying any UDRs for the database server to register.

Specify UDRs for the database server to register by calling the
UDRMetaData.setUDR() method before calling the
UDRManager.createUDRs() method.

-79843 SQL name of the jar file was not set in UDR/UDT MetaData.

Your application called either the UDTManager.createUDT() or the
UDRManager.createUDRs() method without specifying an SQL name for
the JAR file containing the opaque types or UDRs for the database server to
register.

Specify a SQL name of a JAR file by calling the
UDTMetaData.setJarFileSQLName() or UDRMetaData.setJarFileSQLName()
method before calling the UDTManager.createUDT() or
UDRManager.createUDRs() method.

-79844 Can't create/remove UDT/UDR as no database is specified in the
connection.

Your application created a connection without specifying a database. The
following example establishes a connection and opens a database named
"test":

url = "jdbc:informix-sqli:myhost:1533/test:" +

"informixserver=myserver;user=rdtest;password=test";

conn = DriverManager.getConnection(url);

The following example establishes a connection with no database open:

url = "jdbc:informix-sqli:myhost:1533:" +

"informixserver=myserver;user=rdtest;password=test";

conn = DriverManager.getConnection(url);

To resolve this problem, use the following SQL statements after the
connection is established and before calling the createUDT() or
createUDRs() methods:

Statement stmt = conn.createStatement();

stmt.executeUpdate("create database test ...");

Alternatively, use the following code:

stmt.executeUpdate("database test");

-79845 JAR file on the client does not exist or can't be read.

This error occurs for one of the following reasons:

  o  You failed to create a client JAR file

  o  You specified an incorrect pathname for the client JAR file.

  o  The user running the JDBC application or the user specified in the
     connection does not have permission to open or read the client JAR
     file.

-79846 Invalid JAR file name.

The client JAR file specified in the 2nd parameter of
UDTManager.createUDT() or UDRManager.createUDRs() must end with
the .jar extension.

-79847 The 'javac' or 'jar' command failed.

The driver encountered compilation errors in one of the following cases:

  o  Compiling .class files into .jar files, using the jar command, in
     response to a createJar() command from the JDBC application

  o  Compiling .java files into .class files and .jar files, using the javac
     and jar commands, in response to a UDTManager.createUDT-
     Class() method call from the JDBC application.

-79848
Same UDT SQL name already exists in the system catalog.

Your application called UDTMetaData.setSQLName() and specified a name
that is already in the database server.

-79849 UDT SQL name was not set in UDTMetaData.

Your application failed to call UDTMetaData.setSQLName() to specify an
SQL name for the opaque type.

-79850 UDT field count was not set in UDTMetaData.

Your application called UDTManager.createUDTClass() without first specifying
the number of fields in the internal data structure that defines the opaque
type. Specify the number of fields by calling UDTMetaData.setFieldCount().

-79851 UDT length was not set in UDTMetaData.

Your application called UDTManager.createUDTClass() without first specifying a
length for the opaque type. Specify the total length for the opaque type by
calling UDTMetaData.setLength().

-79852 UDT field name or field type was not set in UDTMetaData.

Your application called UDTManager.createUDTClass() without first specifying a
field name and data type for each field in the data structure that defines the
opaque type. Specify the field name by calling
UDTMetaData.setFieldName(); specify a data type by calling
UDTMetaData.setFieldType()

-79853 No class files to be put into the jar.

Your application called the createJar() method and passed a zero-length
string for the classnames parameter. The method signature is as follows:

createJar(UDTMetaData mdata, String[] classnames)

-79854 UDT java class must implement java.sql.SQLData interface.

Your application called UDTManager.createUDT() to create an opaque type
whose class definition does not implement the java.sql.SQLData interface.
UDTManager cannot create an opaque type from a class that does not
implement this interface.

-79855 Specified UDT java class is not found.

Your application called the UDTManager.createUDT() method but the
driver could not find a class with the name you specified in the
third parameter.

-79856 Specified UDT does not exists in the database.

Your application called UDTManager.removeUDT(String sqlname) to
remove an opaque type named sqlname from the database, but the opaque
type with that name does not exists in the database.

-79857 Invalid support function type.

This error occurs only if your application called the
UDTMetaData.setSupportUDR() method and passed an integer other than
0 through 7 for the type parameter.

Use the constants defined for the support UDR types. For more infor-
mation, see "Using setSupportUDR()" on page 5-106.

-79858 The command to remove file on the client failed.

If UDTMetaData.keepJavaFile() is not called or is set to FALSE, the driver
removes the generated .java file when the UDTManager.createUDTClass()
method executes. This error results if the driver was unable to remove the
.java file.

-79859 Invalid UDT field number.

Your application called UDTMetaData.setXXX() or UDTMetaData.getXXX() method
and specified a field number that was less than 0 or greater than
the value set through the UDTMetaData.setFieldCount() method.

-79860 Ambiguous java type(s) - can't use Object/SQLData as method argument(s).

One or more parameters of the method to be registered as a UDR is of type
java.lang.Object or java.sql.SQLData.  These Java data types can be mapped
to more than one Informix data type, so the driver is unable to choose a type.

Avoid using java.lang.Object or java.sql.SQLData as method arguments.

-79861 Specified UDT field type has no Java type match.

Your application called UDTMetaData.setFieldType() and specified a data
type that has no 100% match in Java. The following data types are in this
category:

IfxTypes.IFX_TYPE_BYTE

IfxTypes.IFX_TYPE_TEXT

IfxTypes.IFX_TYPE_VARCHAR

IfxTypes.IFX_TYPE_NVCHAR

IfxTypes.IFX_TYPE_LVARCHAR

Use IFX_TYPE_CHAR or IFX_TYPE_NCHAR instead; these data types map to
java.lang.String.

-79862 Invalid UDT field type.

Your application called UDTMetaData.setFieldType() and specified an
unsupported data type for the opaque type. For supported data types, see
"Mapping for Field Types" on page C-31.

-79863 UDT field length was not set in UDTMetaData.

Your application specified a field of character, date-time, or interval type by
calling UDTMetaData.setFieldType(), but failed to specify a field length.
Call UDTMetaData.setFieldLength() to set a field length.

-79864 Statement length exceeds maximum.

This error is caught when the user tries to execute the SQL string
which is more than 65535 (2 ** 16) bytes long.

XV.KNOWN PROBLEMS
==================

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

Bug #103756

Collections and rows are not supported in opaque types.

Bug #101669

Informix JDBC driver 1.4 does not support code set conversion of CLOB or
TEXT types. A workaround for TEXT types is described in the section, "Code
Set Conversion for TEXT Data Types."

Bug #113595

Informix JDBC Driver does not support the Statement.cancel() method.

Bug #116246

Silent install requires the DISPLAY environment variable to be set on Unix
machines.

Bug #118048

A core dump occurs when you attempt to install Informix JDBC Driver
Version 2.20.JC1A on an HP 11.00 machine that has JDK 1.21 already installed.


XVI.FIXED PROBLEMS
===================

The following problems have been fixed since the JDBC Version 1.22 release:

Bug #105652

The stores7 demo does not work for all servers.

Bug #103767

The error message is misleading when the setTransactionIsolation method()
is executed on a connection before a database has been selected.

Bug #106210

RMI server database connections fail when you use a JDBC application with
Sun's JDK version 1.2.

Bug #106343

The browse dialog for selecting the target directory does not work
properly for the NT or UNIX installation of Informix JDBC Driver.

Bug #106643

When you retrieve values into an IntervaLDF (day-to-fraction) object,
sometimes you get a NegativeArraySizeException error.

Bug #107696

The DatabaseMetaData.getTable() method does not return the correct owner
information.

Bug #107732

Subtracting two DATETIME values within an SQL statement returns an
INTERVAL value, but the driver gives the null ix000 internal error or
error -79716.

Bug #107771

Selecting a DATE column does not return correct era year when the DBDATE
or GL_DATE variable is set to display era years.

Bug #104831

The database server converts row type names to lower case, but Informix
JDBC driver and the map.put() and map.get() methods do not, so map.put()
with a non-lowercase name fails.

Bug #105286

The DatabaseMetaData.getCatalogs() method needs to support selecting
database names even if the server does not have the sysmaster database.
Servers prior to 6.0 do not support the sysmaster database.

Bug #105447

If you use the ResultSet.getstring method on a MONEY column, two trailing
zeros and a decimal place are absent for even dollar amounts (for example,
you get 5 instead of 5.00).

Bug #104640

The server name is missing from the message text when you attempt to
connect to an instance that is down.

Bug #101575

A distinct of an opaque type and a distinct of a complex type are not
supported as complex type elements.

Bug #95375

The executeUpdate() method raises an exception (sq_err=100) for a DELETE
FROM TABLE statement if the table is empty.

Bug #106323

The GLS Japanese codeset ja_jp.EUC_JP is not supported in JDBC.

Bug #106611

The driver does not work with the Netscape browser when applets are not
signed.

Bug #104220

The code set "GB" returns the exception "iso2022cn_gb" when you retrieve
data.

Bug #101172

Clob and Blob types are not supported in complex types.

Bug #103468

A distinct type is sometimes cast to a DATETIME MONTH TO DAY type.

Bug #103620

The com.informix.jdbc.ifxdriver.acceptsURL() method returns true or throws
an exception when the correct result should be false for an invalid URL.

Bug #101948

If Resultset.getDate() calls a char or varchar date string representation
of the DBDATE setting, this causes SQLException -79716 if the string has a
1-digit month or day.

Bug #99333

The DatabaseMetaData.getDatabaseProductVersion() method returns an error
instead of the product version.

Bug #99323

If all the columns of a table have a particular table-level privilege,
such as UPDATE, the DatabaseMetaData.getColumnPrivileges() method returns
no rows when executed on the table. If, however, only some of the columns
have a particular privilege, then those columns are returned by the
method.  This is true for all table-level privileges.

Bug #99180

When an SQLException is thrown after a database access error, the
SQLException object contains the error message and error code, but not the
ISAM code.

Bug #98905

The following Informix JDBC Driver error messages do not contain the name
of the method that caused the error:

     -79700    Method not supported
     -79729    Method can not take argument
     -79750    Method only for queries

Bug #105092

On UNIX platforms, Informix JDBC driver installation sets directory
permissions readable by group but not by all.

Bug #104540

If a CHAR column has spaces at the beginning of the string, these spaces
are lost when you select this value into a Java string.

Bug #103963

Temporary tables created by the databaseMetaData class methods are not
dropped when the associated result set object is closed or goes out of
scope.

Bug #103755

ResultSet.getByte() returns 0 and getShort() returns error 23552 on a
decimal value when the value overflows a byte and short value.

Bug #102885

A call to driverManager.getConnection() with a URL that does not include
the user and password gives error 25563.

Bug #102567

The DatabaseMetaData.getImportedKeys() and getExportedKeys() methods
return only the 1st element of a composite foreign key.

Bug #102467

DatabaseMetaData temporary table data types do not take long id servers
into  consideration.

Bug #102194

Database warnigs are not propagated up to the Connection object on a 5.x
server.

Bug #101921

Missing keywords in the URL cause the client to crash with
classCastException.

Bug #101881

You cannot connect using a non-password login account.

Bug #101175

Informix JDBC driver always maps a DATETIME column to YEAR TO FRACTION(5)
and TIMESTAMP. If the column is HOUR TO SEC, the driver should map this to
a TIME column.

Bug #100189

Informix JDBC driver memory leak - repeated calls to the Java API
executeQuery() method after calling createStatement() cause the session
size to grow on the server.

Bug #99684

ResultSet becomes null in a large application.

Bug #99513

A Type-4 driver crashes a 7.30.FC4 IDS server while querying a TEXT data
type.

Bug #99442

When multiple threads are executing as a result of a getBestRowIdentifier
call, a single connection error is returned.

Bug #99440

The "Cannot read network user authorization file" error occurs when
multiple threads are sharing a connection.

Bug #102916

If a projection list in a SELECT statement includes an NCHAR column, all
columns after the NCHAR column contain corrupted data.

Bug #102213

In the ResultSet.getBytes() and ResultSet.getBlob() methods, the first
postion of a Blob object starts at 0 instead of 1 as the JavaSoft
documentation specifies.

Bug #102221

Interval data is not suported in complex types.

Bug #102285

The ClassGenerator utility always maps a DATETIME column to a Timestamp
object, when it should map to a Time object.

Bug #102292

If you  use a SELECT * FROM TAB statement, where TAB is a multibyte
japanese table with mb japanese columns, you get a "system or internal
error" exception.

Bug #102816

If you set SETFETCHSIZE to 10 or any number, an incorrect fetch size
exception is given.

Bug #102817

Calling the ResultSet.previous() method after calling the
ResultSet.afterLast() method does not move the pointer to the previous
record even when the record is present.

Bug #101177

Inserting CHAR or VARCHAR strings in nested collections results in garbled
data if strings are of variable length.

Bug #102028

The ResultSetMetaData.getColumns() method returns 2000 as the column type
for a BLOB or CLOB column instead of 2004 for BLOB and 2005 for CLOB
(types.blob and types.clob).

Bug #103235

It is not possible to create a BLOB or CLOB column in a non-default dbspace.

Bug #103275

An MI_INTERVAL object is not supported for opaque types.

Bug #103288

When the IfxSmartBlob.IfxLoSeek() method is called, an exception is thrown
with a null message and error -7532.

Bug #103491

The Array.getArray(long, int) method behaves as if the index starts with
0. According to the lastest documentation, it is supposed to start with 1.


Bug #103505

The IfxLoRead and IfxLoSeek methods return invalid errors if you seek
within a BLOB object beyond the available size and try to read the data.

Bug #104024

Fetching a distinct of an opaque column returns the java.sql.sqlexception
"can't convert to: int".

Bug #105312

The DatabaseMetaData.getUserName() method should return a username to the
connection instead of null when a trusted client is used.

Bug #106131

The DatabaseMetaData.getColumns() method fails with "(colmin) not found"
when Informix JDBC Driver is connected to an INFORMIX-SE database.

Bug #106209

The ResultSet.getString() method does not fully support INTERVAL data
types when the INTERVAL qualifier is not YEAR TO MONTH or DAY TO SECOND.
For example, YEAR TO YEAR is not supported.

Bug #106344

Performing an uninstall in NT does not clean up the lib directory.

Bug #106348

When you uninstall Informix JDBC Driver in UNIX, the Delete/Confirm dialog
box is not shown proportionately. It is shown as a vertical and narrow box.

Bug #106698

Several DatabaseMetaData methods return the wrong values. The
supportsANSI92IntermediateSQL(), supportsANSI92FullSQL(),
supportsOrderByUnrelated(), and supportsOpenCursorsAcrossCommit() methods
should all return false. The usesLocalFilePerTable() and usesLocalFiles()
methods should return true for an INFORMIX-SE server.

Bug #106750

The ClassGenerator utility does not generate the correct code for nested
rows.

Bug #106904

If the ResultSet.afterLast() method returns ROWID 9, executing the
ResultSet.previous() method should return ROWID 7.  It should be ROWID 8.

Bug #106940

The ResultSet.isBeforeFirst() and isAfterLast() methods are not working
correctly.

Bug #107011

An NT client and server both transport floating point values as decimals.

Bug #108780

The databasemetadata methods usesLocalFiles() and usesLocalFilePerTable()
return true if you are using a 5.x online server. They should return false.

Bug #108526

The getCatalogs() method returns a null pointer exception for the
databasemetadata class.

Bug #107932

If you call the databasemetadata getTables() method and provide a specific
table or schema, the owner and name qualified by getTables() returns
incorrect information.

Bug #105570

The message class that gives the full text of an error message, which is
similar to the finderr utility, does not work for positive values such as
+100.

Bug #107892

When doing string to DATE, TIMESTAMP, or DATETIME conversion, the driver
does not take the DBCENTURY setting into account if the year is less then
3 digits.

Bug #112494

Updating a CLOB variable results in the following error: Failed:
java.sql.SQLException:No cast from byte to clob. BLOB type columns can be
updated without errors.

Bug #105632

Trying to select a multiset(decimal(15)) element from a row results in a
stringindexoutofboundsexception:string index out of range:-9 error.

Bug #95082

The ResultsetMetaData.getTableName() method returns an empty string when
called. It should return a table name.

Bug #106354

Unsupported methods throw exceptions that cause some applications running
on hetrogenous database servers to prematurely abort.

Bug #108019

Batch update fails if you attempt to insert rows with TEXT or BYTE columns.

Bug #108234

If the SECURITY=PASSWORD option is not included in the URL when you
connect to a CSM enabled server, the application hangs and no error is
given.

Bug #108295

The setCharacterStream() and getCharacterStream() methods are not supported.

Bug #108496

If the Connection.setTransactionIsolation() method is called in the middle
of a transaction, it should trigger the commit call, but instead it
returns an error.

Bug #108497

An OUTOFMEMORYERROR or NEGATIVEARRAYSIZEEXCEPTION error occurs because the
stream.readObject() method returns a null instead of returning an error
that this is the wrong method to call. Since this is a named row, you
should call the getClob() or getBlob() method instead.

Bug #117614

A user implementation of the SQLData interface that calls the readString()
method when reading an LVARCHAR field in a named row returns error -79716.

Bug #116652

The DatabaseMetaData.supportsTransactionIsolationLevel(level) method
always returns TRUE, even if the value for level is invalid.

Bug #116596

When you attempt to insert data into an IfxDocDesc UDT column defined by
the Text Datablade, you get error -937 or -7402.

Bug #115578

If you open one connection for an INSERT, read smart large object data via
a second connection, and then try to read data via the first connection,
locks remain on rows even after you close the result set and statement
objects.

Bug #115082

Bulk insert in JDBC 1.5 doesn't work with 7.31 server. It hangs while
executing PreparedStatement.executeBatch() when IFX_USEPUT = 1 is set.

Bug #113453

The DatabaseMetaData.getSchemaTerm() method returns "database", but it
should return "user".

Bug #113231

Executing the SQL statement "DATABASE " does not set the database
name in the connection object, so the Connection.getCatalog() method
returns NULL even if a current database exists.

Bug #112681

The driver gives a syntax error when curly brackets, {}, appear in an SQL
string. For example, in the statement "insert into x values ('This inserts
 { characters }')", the syntax is correct but generates an error.

Bug #112621

Complex type error returned: "Type requested (unknown) doesn't match row
type information (unknown) type." The type information should be completed
and not "unknown".

Bug #112514

The IfmxComplexOutput.writeObject() method does not support fixed length
opaque types.

Bug #111604

JDBC 2.0 does not work with JDK 1.2.x with a HotSpot VM plug-in.

Bug #111207

The CallableStatement interface's methods are not supported, so there is
no way to retrieve OUT parameters.

Bug #111098

When the driver queries the server for opaque, distinct, or complex type
information based on a name, it uses the current user's name. A type
created by the user "informix" is not found.

Bug #110910

The DatabaseMetaData.getPrimaryKeys() method returns NULL for 9.14
servers, but works for 9.20 servers.

Bug #110888

ISAM errors cannot be retrieved.

Bug #110342

The Connection.prepareCall("{ ? = myfunc(?) }") method is translated to
"execute procedure" syntax, but should be translated to "execute function"
syntax instead.

Bug #101735

All messages are only displayed in English, regardless of the
CLIENT_LOCALE setting.

Bug #116367

The driver is unable to connect to the standard engine unless the database
resides in the connecting user's home directory or a subdirectory.

Bug #117983

When the SECURITY property has been set to CONFIDENTIALITY and the server
does not support CSM, the driver throws a "debug/tracejava not found"
exception even when tracing is not turned on.

Bug #118150

Informix JDBC Driver may give erroneous results if the year, month, and
day values are not given for DATETIME values that use YEAR, MONTH and DAY
qualifiers.

Bug #118260

If an OUT parameter is not initialized by a setXXX() method before
execution, an internal error is issued or the driver hangs. An error
should be issued by the driver before execution.

Bug #118290

The following methods need to be updated to allow non-ANSI representations
for situations where only HOUR TO SECOND formats are specified:

  o IfxDateTime: toString(), fromString(), and isTime(TRUE)

  o IfxChar: toTime(), fromTime()

  o IfxVarchar: toTime(), fromTime()

Bug #118333

Using the ResultSet.updateString() method on a UDT in a scrollable
updatable cursor gives the exception "Can't convert from string."

Bug #118537

Selection of VARCHAR columns gives an ArrayIndexOutOfBounds exception if
the project list also includes variable length opaque or complex type
fields.

Bug #118868

Informix JDBC Driver allocates memory for each column on a fetch for
serialized data before translating data to Java objects. The driver should
be using a tuple  buffer instead of allocating new memory for each column,
except when fetching complex types. Allocation for complex types is
required because materialization can be is delayed.

Bug #119017

GLS internationalization Java error messages get garbled and do not print
correctly for Japanese locales.

Bug #119054

The IfxDatabaseMetaData.getProcedureColumns() method always returns null.

Bug #119529

The ResultSet.insertRow() method causes a syntax error if the SQL
statement has a semicolon (;) at the end.

Bug #120252

The DatabaseMetaData.GetCrossReference() method returns only one ResultSet
with multiple keys.

Bug #120573

Closing a ResultSet may cause a "column sizes too large" error for a
prepared statement being executed with different bind variables. This
occurs when the ResultSet is closed after each iteration of a
PreparedStatement loop.

Bug #120618

If the setObject() method is called using the SQLData interface for a
named row, and the SQLData object is in a java.util.Collection object,
error -9628 occurs.

Bug #122429

Blob insert performance increases using the TCP_NODELAY option for the sockets.

Bug #123043

When launching a JDBC applet in a web browser, the http connection
searches the ifxjdbc.jar for some of the classes and properties
that does not exist that results in slowing down the connection time to
database.

Bug #124400

DBMetadata.getCatalog returns column not found when doing
resultSet.getString("TABLE_CAT"), but works when doing
resultSet.getString(1)

Bug #126861

java.io.StreamCorruptedException reported when reading serialized
java objects from BLOB fields.

Bug #128365

JDBC driver always return ANSI syntax mesages in SQLWarning method.

Bug #130428

IfxDatabaseMetadata.getSchemas() generates selects that have string
constants delimited by double quotes. This causes 201
if DELIMIDENT is set.

Bug #131571

IfxLobInputStream does not correctly use the offset parameter to
read(byte[] b, int off, int len) used as a BLOB offset instead of buffer.

Bug #132721

There are performance issues with IfxPreparedStatement.SetXXXX() methods.

Bug #132882

JDBC driver is not correctly parsing JDBC-standardized left outer join
syntax to a syntax understandable by the engine.

Bug #134051

When using the getcolumns method of a databaseMetadata object the
information of the default column is never retrieved it is always null.

Bug #134414

Insert '2000-02' into a year to month datetime field, the fetch
returns 2000-01-21 00:0:00:0 for a timestamp type.

Bug #134686

JDBC 2.11 Message class returns null for all error numbers when
using the Ifxjdbc.jar. It works fine with Ifxjdbc-g.jar

Bug #134724

Calling CallableStatement.ifxSetNull(1, IfxTypes.IFX_TYPE_INTERVAL)
returns ClassNotFoundException:com.informix.jdbc.IfxInterval

Bug #119054

Call to the DatabaseMetadata.getProcedureColumns method always return null.

Bug #124017

Unable to connect to database because en_gb locale is not supported

Bug #124089, 124090

When trying to get type information from the database for a timeseries
type the driver raises an exception.

Bug #124372

DatabaseMetadata.getCrossReference method does not return proper
KEY_SEQ for foreign key.

Bug #128097

Statement.execute(String sql) returns false if sql is a Select query and it
returns zero rows.

Bug #128462

When selecting 0.00 or any other decimal point number which equals 0
as a constant with or without a virtual column, it gives an exception.

Bug #144018

Filenames for the temporary blob files generated are not always unique
between threads.

XVII.ACKNOWLEDGMENTS
=====================

This product includes software developed by the Apache
Software Foundation (http://apache.org/). The Apache
software includes xerces.jar. The Apache copyright notice
follows in its entirety.

  The Apache Software License, Version 1.1

   Copyright (c) 1999 The Apache Software Foundation.  All rights
   reserved.

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:

   1. Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.

   2. Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in
      the documentation and/or other materials provided with the
      distribution.

   3. The end-user documentation included with the redistribution,
      if any, must include the following acknowledgment:
         "This product includes software developed by the
          Apache Software Foundation (http://www.apache.org/)."
      Alternately, this acknowledgment may appear in the software itself,
      if and wherever such third-party acknowledgments normally appear.

   4. The names "Xerces" and "Apache Software Foundation" must
      not be used to endorse or promote products derived from this
      software without prior written permission. For written
      permission, please contact apache@apache.org.

   5. Products derived from this software may not be called "Apache",
      nor may "Apache" appear in their name, without prior written
      permission of the Apache Software Foundation.

   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   SUCH DAMAGE.
   ====================================================================

   This software consists of voluntary contributions made by many
   individuals on behalf of the Apache Software Foundation and was
   originally based on software copyright (c) 1999, International
   Business Machines, Inc., http://www.ibm.com.  For more
   information on the Apache Software Foundation, please see
   .