You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/05/05 23:39:33 UTC

[02/22] incubator-trafodion git commit: JDBCT$ Programmer's Reference Guide

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c2116c2b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_data.adoc
----------------------------------------------------------------------
diff --git a/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_data.adoc b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_data.adoc
new file mode 100644
index 0000000..332f351
--- /dev/null
+++ b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_data.adoc
@@ -0,0 +1,553 @@
+////
+/**
+ *@@@ START COPYRIGHT @@@
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * @@@ END COPYRIGHT @@@
+ */
+////
+
+[[working-with-blob-and-clob-data]]
+= Working with BLOB and CLOB Data
+
+This chapter describes working with BLOB and CLOB data in JDBC
+applications. You can use the standard interface described in the JDBC
+3.0 API specification to access BLOB and CLOB data in a {project-name}
+database with support provided by the Type 4 driver.
+
+BLOB and CLOB are not native data types in a {project-name} database.
+But, database administrators can create and manage {project-name}
+database tables that have BLOB and CLOB columns by using the Type 4
+driver or other tools as described in
+<<managing-the-sql-tables-for-blob-and-clob-data, Managing the SQL Tables for BLOB and CLOB Data>>.
+
+For management purposes, CLOB and BLOB data is referred to as large
+object (LOB) data, which can represent either data type.
+
+[[architecture-for-lob-support]]
+== Architecture for LOB Support
+
+The tables that support LOB data are:
+
+*LOB Architecture: Tables for LOB Data Support*
+[cols="15%,85%",options="header" ]
+|===
+| Table | Description
+| *Base table* | Referenced by JDBC applications to insert, store, read, and update BLOB and CLOB data.
+In the base table, the Type 4 driver maps the BLOB and CLOB columns into a data-locator column. The data-locator column points to
+the actual LOB data that is stored in a separate user table called the LOB table.
+| *LOB table* | Actually contains the BLOB and CLOB data in chunks. A CLOB or BLOB object is identified by a data locator. LOB tables have two
+formats: LOB table for BLOB data and a LOB table for CLOB data.
+|===
+
+image:{images}/lob_tables.jpg[LOB table layout]
+
+[[setting-properties-for-the-lob-table]]
+== Setting Properties for the LOB Table
+
+Before running the JDBC application that uses BLOB and CLOB data through
+the JDBC API, the database administrator must create the LOB tables. For
+information on creating LOB tables, see
+<<managing-lob-data-by-using-the-lob-admin-utility, Managing LOB Data by Using the Lob Admin Utility>>.
+
+The JDBC applications that access BLOB or CLOB data must specify the
+associated LOB table names and, optionally, configure the
+`reserveDataLocators` property.
+
+[[specifying-the-lob-table]]
+=== Specifying the LOB Table
+
+At run time, a user JDBC application notifies the Type 4 driver of the
+name or names of the LOB tables associated with the CLOB or BLOB columns
+of the base tables being accessed by the application. One LOB table or
+separate tables can be used for BLOB and CLOB data.
+
+The JDBC application specifies a LOB table name either through a system
+parameter or through a Java Property object by using one of the
+following properties, depending on the LOB column type:
+
+For more information about using these properties, see
+<<lob-table-name-properties, LOB Table Name Properties>>.
+
+[[reserving-data-locators]]
+=== Reserving Data Locators
+
+A data locator is the reference pointer value (SQL `LARGEINT` data type)
+that is substituted for the BLOB or CLOB column in the base table
+definition. Each object stored into the LOB table is assigned a unique
+data locator value. Because the LOB table is a shared resource among all
+accessors that use the particular LOB table, reserving data locators
+reduces contention for getting the next value. The default setting is
+100 reserved data locators; therefore, each JVM instance can insert 100
+large objects (not chunks) before needing a new allocation.
+
+Specify the number of data locators (n) to reserve for your application
+by using the Type 4 driver property `hpt4jdbc.reserveDataLocators`. For
+information about specifying this property, see
+<<reserveDataLocators, reserveDataLocators Property>>.
+
+
+[[storing-clob-data]]
+== Storing CLOB Data
+
+[[inserting-clob-columns-by-using-the-clob-interface]]
+=== Inserting CLOB Columns by Using the Clob Interface
+
+When you insert a row containing a CLOB data type, and before the column
+can be updated with real CLOB data, you can insert a row that has an
+empty CLOB value. To insert an empty CLOB value in a {project-name}
+database, specify the `EMPTY_CLOB()` function for the CLOB column in the
+insert statement.
+
+* The `EMPTY_CLOB()` function is an {project-name} database software-specific
+function and might not work on other databases.
+
+* Do not use the `EMPTY_CLOB()` function when using the `PreparedStatement` interface.
+
+The Type 4 driver scans the SQL string for the `EMPTY_CLOB()` function and
+substitutes the next-available data locator.
+
+Then, obtain the handle to the empty CLOB column by selecting the CLOB
+column for update. The following code illustrates how to obtain the
+handle to an empty CLOB column:
+
+[source, java]
+----
+Clob myClob = null ;
+
+Statement s = conn.createStatement() ;
+ResultSet rs =
+   s.executeQuery( "SELECT myclobcolumn FROM mytable WHERE ... FOR UPDATE" ) ;
+if ( rs.next() )
+   myCLOB = rs.getClob( 1 ) ;
+----
+
+You can now write data to the CLOB column. See
+<<writing-ascii-or-mbcs-data-to-a-clob-column, Writing ASCII or MBCS Data to a CLOB Column>>.
+
+NOTE: *Limitation*: Do not rename the CLOB column in the select query.
+
+[[writing-ascii-or-mbcs-data-to-a-clob-column]]
+=== Writing ASCII or MBCS Data to a CLOB Column
+
+You can write ASCII or MBCS data to a CLOB column.
+
+NOTE: Multi-byte Character Set (MBCS) data and ASCII data are handled the same way.
+
+[[ascii-data]]
+==== ASCII Data
+
+To write ASCII or MBCS data to the CLOB column, use the Clob interface.
+The following code illustrates using the `setAsciiStream` method of the
+Clob interface to write CLOB data.
+
+[source, java]
+----
+// stream begins at position: 1
+long pos = 1;
+
+// String containing the ASCII data
+String s ;
+
+// Obtain the output stream to write Clob data
+OutputStream os = myClob.setAsciiStream( pos ) ;
+
+// write Clob data using OutputStream
+byte[] myClobData = s.getBytes() ;
+os.write( myClobData ) ;
+----
+
+The Type 4 driver splits the output stream into chunks and stores the
+chunks in the LOB table.
+
+
+[[inserting-clob-data-by-using-the-preparedstatement-interface]]
+=== Inserting CLOB Data by Using the PreparedStatement Interface
+
+You can use the `PreparedStatement` interface to insert a CLOB column
+using ASCII or MBCS data.
+
+[[ascii-data]]
+==== ASCII Data
+
+To insert a CLOB column using ASCII or MBCS data from an `InputStream`,
+use the `PreparedStatement` interface to insert the CLOB column.
+
+[source, java]
+----
+InputStream inputAsciiStream ;
+
+PreparedStatement ps =
+   conn.prepareStatement( "INSERT INTO mytable (myclobcolumn) VALUES (?)" ) ;
+
+ps.setAsciiStream( 1, inputAsciiStream, length_of_data ) ;
+ps.executeUpdate() ;
+----
+
+The Type 4 driver reads the data from `InputStream` and writes the data to
+the LOB table. The Type 4 driver substitutes the next-available data
+locator for the parameter of the CLOB column in the table.
+
+[[inserting-a-clob-object-by-using-the-setclob-method]]
+=== Inserting a Clob Object by Using the setClob Method
+
+Your JDBC application cannot directly instantiate a `Clob` object. To
+perform an equivalent operation:
+
+1.  Obtain a `Clob` object by using the `getClob` method of the `ResultSet` interface.
+2.  Insert the `Clob` object into another row by using the `setClob` method
+of the `PreparedStatement` interface.
+
+In this situation, the Type 4 driver generates a new data locator and,
+when the `PreparedStatement` is executed, copies the contents of the source `Clob`
+into the new `Clob` object.
+
+[[reading-clob-data]]
+== Reading CLOB Data
+
+[[reading-ascii-data-from-a-clob-column]]
+=== Reading ASCII Data from a CLOB Column
+
+To read ASCII or MBCS data from a CLOB column, use the `Clob` interface or `InputStream`.
+
+Using the Clob interface:
+
+[source, java]
+----
+// Obtain the Clob from ResultSet
+Clob myClob = rs.getClob( "myClobColumn" ) ;
+
+// Obtain the input stream to read Clob data
+InputStream is = myClob.getAsciiStream() ;
+
+// read Clob data using the InputStream
+byte[] myClobData ;
+myClobData = new byte[ length ] ;
+
+is.read( myClobData, offset, length ) ;
+----
+
+To read ASCII or MBCS data from the CLOB column by using `InputStream`:
+
+[source, java]
+----
+// obtain the InputStream from ResultSet
+InputStream is = rs.getAsciiStream( "myClobColumn" ) ;
+
+// read Clob data using the InputStream
+byte[] myClobData ;
+myClobData = new byte[length] ;
+
+is.read( myClobData, offset, length ) ;
+----
+
+[[updating-clob-data]]
+== Updating CLOB Data
+
+To update CLOB data, use the methods in the `Clob` interface or use the
+`updateClob` method of the `ResultSet` interface. The Type 4 driver makes
+changes directly to the CLOB data. Therefore, the Type 4 driver returns
+`false` to the `locatorsUpdateCopy` method of the `DatabaseMetaData` interface.
+Applications do not need to issue a separate update statement to update the CLOB data.
+
+[[updating-clob-objects-with-the-updateclob-method]]
+=== Updating Clob Objects with the updateClob Method
+
+Unlike some LOB support implementations, the Type 4 driver updates the
+CLOB data directly in the database. So, when the `Clob` object is same in
+the `updateClob` method as the `Clob` object obtained using `getClob`, the
+`updateRow` method of the `ResultSet` interface does nothing with the `Clob`
+object.
+
+When the `Clob` objects differ, then the `Clob` object in the `updateClob` method
+behaves as if the `setClob` method was issued. See
+<<inserting-a-clob-object-by-using-the-setclob-method, Inserting a Clob Object by Using the setClob Method>>.
+
+[[replacing-clob-objects]]
+=== Replacing Clob Objects
+
+You can replace Clob objects in the following ways:
+
+* Use the `EMPTY_CLOB()` function to replace the `Clob` object with the
+empty `Clob` object, then insert new data as described under
+<<inserting-clob-columns-by-using-the-clob-interface, Inserting CLOB Columns by Using the Clob Interface>>.
+* Use the `PreparedStatement.setAsciiStream()` or `setCharacterStream()`
+method to replace the existing `Clob` object with new CLOB data.
+* Use the `setClob` or `updateClob` method to replace the existing CLOB
+objects as explained under
+<<inserting-a-clob-object-by-using-the-setclob-method, Inserting a Clob Object by Using the setClob Method>> and
+<<updating-clob-objects-with-the-updateclob-method, Updating Clob Objects with the updateClob Method>>.
+
+[[deleting-clob-data]]
+== Deleting CLOB Data
+
+To delete CLOB data, the JDBC application uses the `SQL DELETE` statement
+to delete the row in the base table.
+
+When the row containing the CLOB column is deleted by the JDBC
+application, the corresponding CLOB data is automatically deleted, too.
+
+See also
+<<null-and-empty-blob-or-empty-clob-value, NULL and Empty BLOB or Empty CLOB Value>>.
+
+[[storing-blob-data]]
+== Storing BLOB Data
+
+Perform operations on BLOB columns that are similar to those operations
+used on CLOB columns.
+
+* Use the `EMPTY_BLOB()` function in the insert statement to create an
+empty BLOB column in the database.
+* Use the `setBinaryStream` method of the `Blob` interface to obtain the
+`InputStream` to read BLOB data.
+* Use the `getBinaryStream` method of the `Blob` interface to obtain the
+`OutputStream` to write BLOB data.
+* Use the `setBinaryStream` of the `PreparedStatement` interface to write the
+data to the BLOB column.
+
+[[inserting-a-blob-column-by-using-the-blob-interface]]
+=== Inserting a BLOB Column by Using the Blob Interface
+
+When you insert a row containing a BLOB data type, you can insert the
+row using an empty BLOB value before the column can be updated with real
+BLOB data. To insert an empty BLOB value in a {project-name} database,
+specify `EMPTY_BLOB()` function for the BLOB column in the insert
+statement.
+
+The Type 4 driver scans the SQL string for the `EMPTY_BLOB()` function and
+substitutes the next-available data locator.
+
+NOTE: The `EMPTY_BLOB()` function is an {project-name} database software
+specific function and might not work on other databases. Do not use the `EMPTY_BLOB()` function when using the `PreparedStatement`
+interface.
+
+Then, obtain the handle to the empty BLOB column by selecting the BLOB
+column for update. The following code illustrates how to obtain the
+handle to an empty BLOB column:
+
+[source, java]
+----
+Blob myBlob = null ;
+
+Statement s = conn.createStatement() ;
+ResultSet rs =
+   s.executeQuery("SELECT myblobcolumn FROM mytable WHERE ... FOR UPDATE" ) ;
+
+if ( rs.next() )
+   myBlob = rs.getBlob( 1 ) ;
+----
+
+You can now write data to the BLOB column. See
+<<writing-binary-data-to-a-blob-column, Writing Binary Data to a BLOB Column>>.
+
+NOTE: *Limitation:* Do not rename the BLOB column in the select query.
+
+[[writing-binary-data-to-a-blob-column]]
+=== Writing Binary Data to a BLOB Column
+
+To write data to the BLOB column, use the `Blob` interface. The following
+code illustrates using the `setBinaryStream` method of the `Blob` interface
+to write BLOB data:
+
+[source, java]
+----
+// Stream begins at position: 1
+long pos = 1 ;
+
+// String containing the binary data
+String s ;
+
+// Obtain the output stream to write Blob data
+OutputStream os = myBlob.setBinaryStream( pos ) ;
+
+// write Blob data using OutputStream
+byte[] myBlobData = s.getBytes() ;
+os.write( myBlobData ) ;
+----
+
+The Type 4 driver splits the output stream into chunks and stores the chunks in the LOB table.
+
+[[inserting-a-blob-column-by-using-the-preparedstatement-interface]]
+=== Inserting a BLOB Column by Using the PreparedStatement Interface
+
+To insert a BLOB column that has binary data from an `InputStream`, use
+the `PreparedStatement` interface:
+
+[source, java]
+----
+InputStream inputBinary ;
+
+PreparedStatement ps =
+   conn.prepareStatement( "INSERT INTO mytable (myblobcolumn) VALUES (?)" ) ;
+
+ps.setBinaryStream( 1, inputBinary, length_of_data ) ;
+ps.executeUpdate() ;
+----
+
+The Type 4 driver reads the data from `InputStream` and writes the data to
+the LOB table. The Type 4 driver substitutes the next-available data
+locator for the parameter of the BLOB column in the table.
+
+[[inserting-a-blob-object-by-using-the-setblob-method]]
+=== Inserting a Blob Object by Using the setBlob Method
+
+Your JDBC application cannot directly instantiate a `Blob` object. To
+perform an equivalent operation:
+
+1.  Obtain a `Blob` object by using the `getBlob` method of the `ResultSet` interface.
+2.  Insert the `Blob` object into another row by using the `setBlob` method
+of the `PreparedStatement` interface.
+
+In this situation, the Type 4 driver generates a new data locator and
+copies the contents of the source `Blob` into the new `Blob` object when the
+application issues the `setBlob` method of the `PreparedStatement` interface.
+
+
+[[reading-binary-data-from-a-blob-column]]
+== Reading Binary Data from a BLOB Column
+
+To read binary data from the BLOB column, use the `Blob` interface or `InputStream`.
+
+Using the Blob interface:
+
+[source, java]
+----
+// Obtain the Blob from ResultSet
+Blob myBlob = rs.getBlob( "myBlobColumn" ) ;
+
+// Obtain the input stream to read Blob data
+InputStream is = myBlob.getBinaryStream() ;
+
+// read Blob data using the InputStream
+byte[] myBlobData ;
+myBlobData = new byte[ length ] ;
+
+is.read( myBlobData, offset, length ) ;
+----
+
+Using InputStream:
+
+[source, java]
+----
+// obtain the InputStream from ResultSet
+InputStream is = rs.getBinaryStream( "myBlobColumn" ) ;
+
+// read Blob data using the InputStream
+byte[] myBlobData ;
+myBlobData = new byte[ length ] ;
+
+is.read( myBlobData, offset, length ) ;
+----
+
+[[updating-blob-data]]
+== Updating BLOB Data
+
+To update BLOB data, use the methods in the `Blob` interface or use the
+`updateBlob` method of the `ResultSet` interface. The Type 4 driver makes
+changes to the BLOB data directly. Therefore, the Type 4 driver returns
+`false` to the `locatorsUpdateCopy` method of the
+`DatabaseMetaData` interface. Applications do not need to issue a separate
+update statement to update the BLOB data.
+
+[[updating-blob-objects-by-using-the-updateblob-method]]
+=== Updating Blob Objects by Using the updateBlob Method
+
+Unlike some LOB support implementations, the Type 4 driver updates the
+BLOB data directly in the database. So, when the Blob object is same in
+the `updateBlob` method as the object obtained using `getBlob`, the
+`updateRow` method of the `ResultSet` interface does nothing with the `Blob`
+object.
+
+When the `Blob` objects differ, the `Blob` object in the `updateBlob` method
+behaves as if the `setBlob` method was issued. See
+<<inserting-a-blob-object-by-using-the-setblob-method, Inserting a Blob Object by Using the setBlob Method>>.
+
+[[replacing-blob-objects]]
+=== Replacing Blob Objects
+
+You can replace Blob objects in the following ways:
+
+* Use the `EMPTY_BLOB()` function to replace the `Blob` object with the
+empty `Blob` object.
+* Replace an existing `Blob` object in a row by inserting the `Blob` with
+new data as described under
+<<inserting-a-blob-column-by-using-the-blob-interface, Inserting a BLOB Column by Using the Blob Interface>>.
+* Use the `setBinaryStream()` method to of the `PreparedStatement` interface
+to replace the existing `Blob` object with new BLOB data.
+* Use the `setBlob` or `updateBlob` methods to replace the existing BLOB
+objects as explained under
+<<inserting-a-blob-object-by-using-the-setblob-method, Inserting a Blob Object by Using the setBlob Method>> and
+<<updating-blob-objects-by-using-the-updateblob-method, Updating Blob Objects by Using the updateBlob Method>>.
+
+[[deleting-blob-data]]
+== Deleting BLOB Data
+
+To delete BLOB data, the JDBC application uses the `SQL DELETE` statement
+to delete the row in the base table.
+
+When the row containing the BLOB column is deleted by the application,
+the corresponding BLOB data is automatically deleted.
+
+See also
+<<null-and-empty-blob-or-empty-clob-value, NULL and Empty BLOB or Empty CLOB Value>>.
+
+[[null-and-empty-blob-or-empty-clob-value]]
+== NULL and Empty BLOB or Empty CLOB Value
+
+The data locator can have a `NULL` value if the BLOB or CLOB column is
+omitted in the insert statement. The Type 4 driver returns `NULL` when the
+application retrieves the value for such a column.
+
+When the application uses the `EMPTY_BLOB()` function or the `EMPTY_CLOB()`
+function to insert empty BLOB or CLOB data into the BLOB or CLOB column,
+the Type 4 driver returns the `Blob` or `Clob` object with no data.
+
+[[transactions-involving-blob-and-clob-access]]
+== Transactions Involving Blob and Clob Access
+
+You must ensure that your JDBC applications control the transactions
+when the BLOB columns or CLOB columns are accessed or modified. To
+control the transaction, set the connection to autocommit OFF mode.
+
+All LOB data access or modification is done under the application's
+transaction. When the autocommit mode is ON and LOB data is accessed or
+modified, the Type 4 driver throws the SQLException, Autocommit is on
+and LOB objects are involved.
+
+[[access-considerations-for-clob-and-blob-objects]]
+== Access Considerations for Clob and Blob Objects
+
+The Type 4 driver allows all the valid operations on the current `Clob`
+object or `Blob` object, called a "LOB object." LOB objects are current as
+long as the row that contains these LOB objects is the current row. The
+Type 4 driver throws an SQLException, issuing the following message,
+when the application attempts to perform operations on a LOB object that
+is not current:
+
+```
+Lob object {object-id} is not current
+```
+
+Only one `InputStream` or `Reader` and one `OutputStream` or `Writer` can be
+associated with the current LOB object.
+
+* When the application obtains the `InputStream` or `Reader` from the LOB
+object, the Type 4 driver closes the `InputStream` or `Reader` that is
+already associated with the LOB object.
+* Similarly, when the application obtains the `OutputStream` or `Writer`
+from the LOB object, the Type 4 driver closes the `OutputStream` or `Writer`
+that is already associated with the LOB object.
+

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c2116c2b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_management.adoc
----------------------------------------------------------------------
diff --git a/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_management.adoc b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_management.adoc
new file mode 100644
index 0000000..7fd5794
--- /dev/null
+++ b/docs/jdbct4ref_guide/src/asciidoc/_chapters/lob_management.adoc
@@ -0,0 +1,288 @@
+////
+/**
+ *@@@ START COPYRIGHT @@@
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * @@@ END COPYRIGHT @@@
+ */
+////
+
+[[managing-the-sql-tables-for-blob-and-clob-data]]
+= Managing the SQL Tables for BLOB and CLOB Data
+
+This chapter describes for database administrators the creation and
+management of the tables required to support LOB data.
+
+NOTE: BLOB and CLOB are not native data types in a {project-name}
+database. But database administrators can create SQL base tables that
+have BLOB and CLOB columns by using either the Type 4 driver or special
+SQL syntax in as described in this chapter.
+
+For management purposes, CLOB and BLOB data is referred to as large
+object (LOB) data, which can represent either data type.
+
+[[before-you-begin-managing-lob-data]]
+== Before You Begin Managing LOB Data
+
+Before reading this chapter, also read
+<<Architecture for LOB Support, Architecture for LOB Support>>,
+which describes the files for the tables that contain LOB data.
+
+[creating-base-tables-that-have-lob-columns]]
+== Creating Base Tables that Have LOB Columns
+
+You can use trafci or write JDBC programs to create base tables that have LOB columns.
+
+[[data-types-for-lob-columns]]
+=== Data Types for LOB Columns
+
+The data types for the LOB columns are:
+
+* `CLOB`: Character large object data
+* `BLOB`: Binary large object data
+
+NOTE: The CLOB and BLOB data type specification is special syntax that
+is allowed for use in base tables accessed by the Type 4 driver as
+described in this manual.
+
+[[using-trafci-to-create-base-tables-that-have-lob-columns]]
+=== Using trafci To Create Base Tables that Have LOB Columns
+
+To create a base table that has LOB columns using trafci:
+
+1.  Type this special commands in to enable creating tables that have LOB columns:
++
+```
+CONTROL QUERY DEFAULT TRAF_BLOB_AS_VARCHAR 'OFF' ; 
+CONTROL QUERY DEFAULT TRAF_CLOB_AS_VARCHAR 'OFF' ; 
+```
+
+2.  Type the CREATE TABLE statement; for example, you might use the
+following simple form of the statement:
++
+```
+CREATE TABLE table1
+( c1 INTEGER NOT NULL
+, c2 CLOB
+, c3 BLOB
+, PRIMARY KEY( c1 )
+)
+;
+```
++
+* `table1`: The name of the base table.
++
+NOTE: If different LOB tables are used for storing BLOB or CLOB data,
+the base table name for a table with BLOB or CLOB columns must be unique
+across all catalogs and schemas. Otherwise, the driver will give
+incorrect data to the application in cases where the LOB tables used get
+erroneously switched or changed.
+* `c1 Column 1`: Defined as the INTEGER data type with the NOT NULL constraint.
+* `c2 Column 2`: Defined as the CLOB data type.
+* `c3 Column 3`: Defined as the BLOB data type.
+* `PRIMARY KEY`: Specifies `c1` as the primary key.
+
+Use this example as the archetype for creating base tables. For
+information about valid names for tables (`table1`) and
+columns (`c1`, `c2`, and `c3`) and for information about the CREATE TABLE statement, see the
+{docs-url}/sql_reference/index.html[{project-name} SQL Reference Manual].
+
+[[using-jdbc-programs-to-create-base-tables-that-have-lob-columns]]
+=== Using JDBC Programs To Create Base Tables that Have LOB Columns
+
+When using a JDBC Program to create base tables that have LOB columns,
+put the CREATE TABLE statements in the program as you would any other
+SQL statement. For an example of the CREATE TABLE statement, see the discussion
+<<using-trafci-to-create-base-tables-that-have-lob-columns, Using trafci To Create Base Tables that Have LOB Columns>> .
+
+[[managing-lob-data-by-using-the-lob-admin-utility]]
+== Managing LOB Data by Using the Lob Admin Utility
+
+Use the Lob Admin Utility (T4LobAdmin) for the following tasks:
+
+* Creating the LOB table (a table that holds LOB data).
+* Creating the SQL triggers for the LOB columns in the base tables to ensure that orphan LOB data does not occur in a LOB table.
+
+NOTE: If you are creating triggers, ensure that the base table that
+contains the CLOB column or BLOB column has already been created.
+
+Information about using the Lob Admin Utility is described under these topics.
+
+[[running-the-lob-admin-utility]]
+=== Running the Lob Admin Utility
+
+Run the T4LobAdmin utility from the workstation. The format of the
+command is:
+
+```
+java [java_options] org.trafodion.t4jdbc.T4LobAdmin [prog_options] [table_name]
+```
+
+[[java-options]]
+==== java_options
+
+The `java_options` should specify the Type 4 driver properties in a
+properties file on the java command line in the `-D` option.
+
+```
+-Dhpt4jdbc.properties=<properties file name>
+```
+
+where the properties file should include the following Type 4 driver properties, as applicable:
+
+[cols="25%,75%",options="header" ]
+|===
+| Property        | Description
+| `blobtablename` | Specifies LOB table for BLOB columns. Required if BLOB columns are involved. See <<lob-table-name-properties, LOB Table Name Properties>>.
+| `clobTableName` | Specifies the LOB table for CLOB columns. Required if CLOB columns are involved. See <<lob-table-name-properties, LOB Table Name Properties>>.
+| `url`           | URL for the Type 4 driver connection. See <<url,url Property>>.
+| `usr`           | User name for the Type 4 driver connection. See <<user, user Property>>.
+| `password`      | Password associated with the user. See <<password, password Property>>.
+|===
+
+[[program-options]]
+==== program_options
+
+[cols="25%,75%",options="header" ]
+|===
+| prog_option        | Description
+| `-help`            | Displays help information
+| `-exec`            | Runs the SQL statements that are generated.
+| `-create`          | Generates SQL statements to create LOB tables. These statements describe the architecture of the tables and, therefore, provide a description of the LOB tables.
+|===
+
+[[table-name]]
+==== table_name
+
+The *table_name* represents a base table that contains LOB columns. The
+*table_name* is of the form:
+
+```
+[catalogName.][schemaName.]baseTableName
+```
+
+For information about catalog, schema, and table names, see the
+{docs-url}/sql_reference/index.html[{project-name} SQL Reference Manual].
+
+[[help-listing-from-the-type-4-lob-admin-utility]]
+=== Help Listing From the Type 4 Lob Admin Utility
+
+To display help for the Type 4 Lob Admin Utility, type:
+
+```
+java org.trafodion.t4jdbc.T4LobAdmin -help
+```
+
+*Example*
+
+```
+Apache Trafodion T4 Lob Admin Utility 1.0 (c) Copyright 2015-2016
+org.trafodion.t4jdbc.T4LobAdmin [<prog_options>] [<table_name>]
+
+<java_options> is:
+     [-Dhpt4jdbc.properties=<properties file>]
+where <properties file> has values for the following:
+     clobTableName - CLOB table name
+     blobTableName - BLOB table name
+     url - URL used for the Type 4 connection
+     user - User name for the Type 4 connection
+     password - Password for associated with the user
+
+<prog_options> is:
+    [-exec] [-create] [-trigger] [-help] [-drop] [-out <filename>]
+where -help    - Display this information.
+      -exec    - Execute the SQL statements that are generated.
+      -create  - Generate SQL statements to create LOB tables.
+      -trigger - Generate SQL statements to create triggers for <table_name>.
+      -drop    - Generate SQL statements to drop triggers for <table_name>.
+      -out     - Write the SQL statements to <filename>.
+
+<clobTableName> | <blobTableName> is:
+    <catalogName>.<schemaName>.<lobTableName>
+
+<table_name> is:
+    [<catalogName>.][<schemaName>.]<baseTableName>
+
+<baseTableName> is the table that contains LOB column(s). TableName> is the
+table that contains the LOB data.
+```
+
+[[creating-lob-tables]]
+=== Creating LOB Tables
+
+Except as noted below, use the `-create` and `-execute` options of the Lob
+Admin Utility to create LOB tables.
+
+NOTE: Partitioned LOB tables must be manually created. You cannot use
+the Lob Admin Utility if your site needs partitioned LOB tables. Do not
+use the -execute option of the Lob Admin Utility. Follow these steps to
+manually create partitioned LOB tables:
+
+1.  Use the `-create` and `-out` options of the Lob Admin Utility to have SQL statements written to a file.
+2.  Modify the generated SQL statements as needed for your partitioning requirements.
+3.  Add the modified SQL statements to a trafci obey file.
+4.  Run the script file from trafci by using obey command.
+
+[[using-sql-triggers-to-delete-lob-data]]
+=== Using SQL Triggers to Delete LOB Data
+
+Use the Type 4 Lob Admin Utility to generate triggers on SQL tables that
+delete LOB data from the LOB table when the base row is deleted. These
+triggers ensure that orphan LOB data does not occur in the LOB table. To
+manage the triggers, use these Type 4 Lob Admin Utility options:
+
+* `-trigger`: Generates SQL statements to create triggers.
+* `-drop`: Generates SQL statements to drop triggers.
+* `-exec`: Executes the SQL statements that are generated.
+
+For example, the following command generates the SQL statements to
+create the triggers for the base table `sales.paris.pictures`, which
+contains a BLOB column, and executes those statements.
+
+```
+java -Dhpt4jdbc.blobTableName=sales.paris.lobTable4pictures /
+org.trafodion.t4jdbc.T4LobAdmin -trigger -exec sales.paris.pictures
+```
+
+[[limitations-of-lob-data-clob-and-blob-data-types]]
+=== Limitations of LOB Data (CLOB and BLOB Data Types)
+
+Limitations of the CLOB and BLOB data types, collectively referred to as LOB data, are:
+
+* LOB columns can only be in the target column list of these SQL statements:
+
+** INSERT statement.
+
+** Select list of a SELECT statement.
+
+** Column name in the SET clause of an UPDATE statement.
+
+* LOB columns cannot be referenced in the SQL functions and expressions.
+
+* LOB data is not deleted from the LOB table when the base row is deleted unless a trigger is established. For information about triggers,
+see <<using-sql-triggers-to-delete-lob-data, Using SQL Triggers to Delete LOB Data>>
+
+* LOB data is not accessible if the base table name is changed.
+
+* The name of a base table that has CLOB or BLOB columns must be unique across all catalogs and schemas when more than one of these base tables
+share a single LOB table.
++
+NOTE: Adding a trigger can affect up to three schemas. For each schema, you must either own the schema or be the super ID. +
+ +
+* The schema where the trigger is created.
+* The schema where the subject table (LOB table) exists.
+* The schema where the referenced table (base table) exists.
+

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c2116c2b/docs/jdbct4ref_guide/src/asciidoc/_chapters/messages.adoc
----------------------------------------------------------------------
diff --git a/docs/jdbct4ref_guide/src/asciidoc/_chapters/messages.adoc b/docs/jdbct4ref_guide/src/asciidoc/_chapters/messages.adoc
new file mode 100644
index 0000000..7fc168f
--- /dev/null
+++ b/docs/jdbct4ref_guide/src/asciidoc/_chapters/messages.adoc
@@ -0,0 +1,1943 @@
+////
+/**
+ *@@@ START COPYRIGHT @@@
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * @@@ END COPYRIGHT @@@
+ */
+////
+
+[[messages]]
+= Messages
+
+[[about-the-message-format]]
+== About the Message Format
+
+Messages are listed in numerical SQLCODE order. Descriptions include:
+
+```
+SQLCODE SQLSTATE message-text
+
+Cause    [ What occurred to trigger the message.]
+Effect   [ What is the result when this occurs. ]
+Recovery [ How to diagnose and fix the problem. ]
+```
+
+[[getting-help]]
+== Getting Help
+
+Some messages have no recovery information. Please contact {project-support} for assistance.
+
+[[type-4-driver-error-messages]]
+== Type 4 Driver Error Messages
+
+=== 01032 08S01
+
+```
+01032 08S01 Communication link failure. The server timed out or disappeared.
+```
+
+*Cause*: The connection timed out.
+
+*Effect*: Operation fails.
+
+*Recovery*: Reconnect. Set the connection timeout to an appropriate value.
+
+=== 01056 25000
+
+```
+01056 25000 Invalid transaction state.
+```
+
+*Cause*: Transaction state is incorrect.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Retry.
+
+=== 01118 S1008
+
+```
+01118 S1008 Operation canceled.
+```
+
+*Cause*: The operation was canceled.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Retry operation.
+
+=== 08001 HY000
+
+```
+08001 HY000 Retry attempts to connect to the datasource failed. May be
+ODBC server not able to register to the ODBC service process.
+```
+
+*Cause*: A server error.
+
+*Effect*:  Operation fails.
+
+
+*Recovery*: Contact {project-support} to check logs for server errors and
+to analyze accompanying errors and warnings.
+
+=== 08004 HY000
+
+```
+08004 HY000 Data source rejected establishment of connection since the
+ODBC server is connected to a different client now
+```
+
+*Cause*: Connection with server has been lost. Server is now connected to a different connection.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Reconnect.
+
+<<<
+=== 29001 HYC00
+
+```
+HYC00 Unsupported feature - {0}
+```
+
+*Cause*: The feature listed is not supported by the JDBC driver.
+
+*Effect*:  An unsupported exception is thrown, and a NULL `resultSet` is returned.
+
+*Recovery*: Remove the feature functionality from the program.
+
+=== 29002 08003
+
+```
+29002 08003 Connection does not exist
+```
+
+*Cause*: An action was attempted when the connection to the database was closed.
+
+*Effect*:  The database is inaccessible.
+
+*Recovery*: Retry the action after the connection to the database is established.
+
+=== 29003 HY000
+
+```
+29003 HY000 Statement does not exist
+```
+
+*Cause*: A validation attempt was made on the getter or exec invocation on a closed statement.
+
+*Effect*:  The getter or exec invocation validation fails.
+
+*Recovery*: Issue `validateGetInvocation()` or `validateExecDirectInvocation` when the statement is open.
+
+<<<
+=== 29004 HY024
+
+```
+29004 HY024 Invalid transaction isolation value.
+```
+
+*Cause*: An attempt was made to set the transaction isolation level to an invalid value.
+
+*Effect*: `HPT4Connection.setTransactionIsolation` does not set the transaction isolation value.
+
+*Recovery*: Valid isolation values are:
+`SQL_TXN_READ_COMMITTED`,
+`SQL_TXN_READ_UNCOMMITTED`,
+`SQL_TXN_REPEATABLE_READ`, and
+`SQL_TXN_SERIALIZABLE`.
+If no isolation value is specified, the default is `SQL_TXN_READ_COMMITTED`.
+
+=== 29005 HY024
+
+```
+29005 HY024 Invalid ResultSet type
+```
+
+*Cause*: An attempt was made to set an invalid `ResultSet` Type value.
+
+*Effect*:  The SQL Statement call with the `resultSetType` parameter fails.
+
+*Recovery*: Valid ResultSet types are:
+`TYPE_FORWARD_ONLY`,
+`TYPE_SCROLL_INSENSITIVE`, and
+`TYPE_SCROLL_SENSITIVE`.
+
+=== 29006 HY000
+
+```
+29006 HY000 Invalid Result Set concurrency
+```
+
+*Cause*: An attempt was made to set an invalid result-set concurrency value.
+
+*Effect*: The `HPT4Statement` call with `resultSetConcurrency` fails.
+
+*Recovery*: Valid resultSetConcurrency values are: CONCUR_READ_ONLY and
+CONCUR_UPDATABLE.
+
+<<<
+=== 29007 07009
+
+```
+29007 07009 Invalid descriptor index
+```
+
+*Cause*: A `ResultSetMetadata` column parameter or a `ParameterMetaData` param
+parameter is outside of the descriptor range.
+
+*Effect*:  The `ResultSetMetadata` or `ParameterMetaData` method data is not returned as expected.
+
+*Recovery*: Validate the column or parameter that is supplied to the method.
+
+=== 29008 24000
+
+```
+29008 24000 Invalid cursor state
+```
+
+*Cause*: The `ResultSet` method was called when the connection was closed.
+
+*Effect*:  The method call does not succeed.
+
+*Recovery*: Make sure the connection is open before making the `ResultSet` method call.
+
+=== 29009 HY109
+
+```
+29009 HY109 Invalid cursor position
+```
+
+*Cause*: An attempt was made to perform a `deleteRow()` method or `updateRow()`
+method or `cancelRowUpdates` method when the `ResultSet` row cursor was on
+the insert row. Or, an attempt was made to perform the `insertRow()` method
+when the `ResultSet` row cursor was not on the insert row.
+
+*Effect*:  The row changes and cursor manipulation do not succeed.
+
+*Recovery*: To insert a row, move the cursor to the insert row. To delete, cancel, or update a row, move the cursor from the insert row.
+
+<<<
+=== 29010 07009
+
+```
+29010 07009 Invalid column name
+```
+
+*Cause*: A column search does not contain `columnName` string.
+
+*Effect*:  The column comparison or searches do not succeed.
+
+*Recovery*: Supply a valid columnName string to the `findColumn()`,
+`validateGetInvocation()`, and `validateUpdInvocation()` methods.
+
+=== 29011 07009
+
+```
+29011 07009 Invalid column index or descriptor index
+```
+
+*Cause*: A `ResultSet` method was issued that has a column parameter that is
+outside of the valid range.
+
+*Effect*:  The `ResultSet` method data is not returned as expected.
+
+*Recovery*: Make sure to validate the column that is supplied to the method.
+
+=== 29012 07006
+
+```
+29012 07006 Restricted data type attribute violation.
+```
+
+*Cause*: An attempt was made to execute a method either while an invalid
+data type was set or the data type did not match the SQL column type.
+
+*Effect*:  The interface method is not executed.
+
+*Recovery*: Make sure the correct method and Java data type is used for the column type.
+
+<<<
+=== 29013 HY024
+
+```
+29013 HY024 Fetch size is less than 0.
+```
+
+*Cause*: The size set for ResultSet.setFetchSize rows to fetch is less than zero.
+
+*Effect*:  The number of rows that need to be fetched from the database when
+more rows are needed for a ResultSet object is not set.
+
+*Recovery*: Set the `setFetchSize()` method rows parameter to a value greater
+than zero.
+
+=== 29015 HY024
+
+```
+29015 HY024 Invalid fetch direction
+```
+
+*Cause*: The `setFetchDirection()` method direction parameter is set to an invalid value.
+
+*Effect*:  The direction in which the rows in this `ResultSet` object are processed is not set.
+
+*Recovery*: Valid fetch directions are: `ResultSet.FETCH_FORWARD`,
+`ResultSet.FETCH_REVERSE`, and `ResultSet.FETCH_UNKNOWN`.
+
+=== 29017 HY004
+
+```
+29017 HY004 SQL data type not supported
+```
+
+*Cause*: An unsupported `getBytes()` or `setBytes()` JDBC method call was
+issued using a `BINARY`, `VARBINARY`, or `LONGVARBINARY` data type.
+
+*Effect*: `BINARY`, `VARBINARY`, and `LONGVARBINARY` data types are not supported.
+
+*Recovery*: Informational message only; no corrective action is needed.
+
+<<<
+=== 29018 22018
+
+```
+29018 2018 Invalid character value in cast specification
+```
+
+*Cause*: An attempt was made to convert a string to a numeric type but the
+string does not have the appropriate format.
+
+*Effect*:  Strings that are obtained through a getter method cannot be cast
+to the method type.
+
+*Recovery*: Validate the string in the database to make sure it is a
+compatible type.
+
+=== 29019 07002
+
+```
+29019 07002 Parameter {0, number, integer} for {1, number, integer} set
+of parameters is not set.
+```
+
+*Cause*: An input descriptor contains a parameter that does not have a value set.
+
+*Effect*:  The method `checkIfAllParamsSet()` reports the parameter that is not set.
+
+*Recovery*: Set a value for the listed parameter.
+
+=== 29020 07009
+
+```
+29020 07009 Invalid parameter index.
+```
+
+*Cause*: A getter or setter method parameter count index is outside of the
+valid input-descriptor range, or the input-descriptor range is null.
+
+*Effect*:  The getter and setter method invocation validation fails.
+
+*Recovery*: Change the getter or setter parameter index to a valid parameter value.
+
+<<<
+=== 29021 HY004
+
+```
+29021 HY004 Object type not supported
+```
+
+*Cause*: A `PreparedStatement.setObject()` method call contains an unsupported Object Type.
+
+*Effect*:  The `setObject()` method does not set a value for the designated parameter.
+
+*Recovery*: Informational message only; no corrective action is needed.
+Valid Object Types are: `null`, `BigDecimal`, `Date`, `Time`, `Timestamp`, `Double`,
+`Float`, `Long`, `Short`, `Byte`, `Boolean`, `String`, and `byte[]`, `Blob`, and `Clob`.
+
+=== 29022 HY010
+
+```
+29022 HY010 Function sequence error.
+```
+
+*Cause*: The `PreparedStatement.execute()` method does not support the use of
+the `PreparedStatement.addBatch()` method.
+
+*Effect*:  An exception is reported; the operation is not completed.
+
+*Recovery*: Use the `PreparedStatement.executeBatch()` method.
+
+=== 29026 HY000
+
+```
+29026 HY000 Transaction can't be committed or rolled back when AutoCommitmode is on.
+```
+
+*Cause*: An attempt was made to commit a transaction while AutoCommit mode is enabled.
+
+*Effect*:  The transaction is not committed.
+
+*Recovery*: Disable AutoCommit. Use the method only when the AutoCommit mode is disabled.
+
+<<<
+=== 29027 HY011
+
+```
+29027 HY011 SetAutoCommit not possible, since a transaction is active.
+```
+
+*Cause*: An attempt was made to call the `setAutoCommit()` mode while a transaction was active.
+
+*Effect*:  The current AutoCommit mode is not modified.
+
+*Recovery*: Complete the transaction, then attempt to set the AutoCommit mode.
+
+=== 29029 HY011
+
+```
+29029 HY011 SetTransactionIsolation not possible, since a transaction is active.
+```
+
+*Cause*: An attempt was made to set transaction isolation level while a
+transaction was active.
+
+*Effect*:  Attempts to change the transaction isolation level for this
+Connection object fail.
+
+*Recovery*: Complete the transaction, then attempt to set the transaction
+isolation level.
+
+=== 29031 HY000
+
+```
+29031 HY000 SQL SELECT statement in batch is illegal
+```
+
+*Cause*: A `SELECT SQL` statement was used in the `executeBatch()` method.
+
+*Effect*:  An exception is reported; the `SELECT SQL` query cannot be used in batch queries.
+
+*Recovery*: Use the `executeQuery()` method to issue the `SELECT SQL` statement.
+
+<<<
+=== 29032 23000
+
+```
+29032 23000 Row has been modified since it is last read.
+```
+
+*Cause*: An attempt was made to update or delete a `ResultSet` object row while the cursor was on the insert row.
+
+*Effect*:  The `ResultSet` row modification does not succeed.
+
+*Recovery*: Move the `ResultSet` object cursor away from the row before updating or deleting the row.
+
+=== 29033 23000
+
+```
+29033 23000 Primary key column value can't be updated.
+```
+
+*Cause*: An attempt was made to update the primary-key column in a table.
+
+*Effect*:  The column is not updated.
+
+*Recovery*: Columns in the primary-key definition cannot be updated and
+cannot contain null values, even if you omit the NOT NULL clause in the
+column definition.
+
+=== 29035 HY000
+
+```
+29035 HY000IO Exception occurred {0}
+
+message_text
+```
+
+*Cause*: An ASCII or Binary or Character stream setter or an updater method
+resulted in a `java.io.IOException`.
+
+*Effect*:  The designated setter or updater method does not modify the ASCII
+or Binary or Character stream.
+
+*Recovery*: Informational message only; no corrective action is needed.
+
+<<<
+=== 29036 HY000
+
+```
+29036 HY000 Unsupported encoding {0}
+```
+
+*Cause*: The character encoding is not supported.
+
+*Effect*:  An exception is thrown when the requested character encoding is not supported.
+
+*Recovery*: `ASCII (ISO88591)`, `KANJI`, `KSC5601`, and `UCS2` are the only
+supported character encodings. 
+
+=== 29037 HY106
+
+```
+29037 HY106 ResultSet type is TYPE_FORWARD_ONLY.
+```
+
+*Cause*: An attempt was made to point a `ResultSet` cursor to a previous row
+when the object type is set as `TYPE_FORWARD_ONLY`.
+
+*Effect*:  The ResultSet object cursor manipulation does not occur.
+
+*Recovery*: `TYPE_FORWARD_ONLYResultSet` object type cursors can move forward
+only. `TYPE_SCROLL_SENSITIVE` and `TYPE_SCROLL_INSENSITIVE` types are
+scrollable.
+
+=== 29038 HY107
+
+```
+29038 HY107 Row number is not valid.
+```
+
+*Cause*: A `ResultSet` `absolute()` method was called when the row number was set to 0.
+
+*Effect*:  The cursor is not moved to the specified row number.
+
+*Recovery*: Supply a positive row number (specifying the row number
+counting from the beginning of the result set), or supply a negative row
+number (specifying the row number counting from the end of the result set).
+
+<<<
+=== 29039 HY092
+
+```
+29039 HY092 Concurrency mode of the ResultSet is CONCUR_READ_ONLY.
+```
+
+*Cause*: An action was attempted on a `ResultSet` object that cannot be
+updated because the concurrency is set to `CONCUR_READ_ONLY`.
+
+*Effect*:  The `ResultSet` object is not modified.
+
+*Recovery*: For updates, you must set the `ResultSet` object concurrency to `CONCUR_UPDATABLE`.
+
+=== 29040 HY000
+
+```
+29040 HY000 Operation invalid. Current row is the insert row.
+```
+
+*Cause*: An attempt was made to retrieve update, delete, or insert information on the current insert row.
+
+*Effect*:  The `ResultSet` row information retrieval does not succeed.
+
+*Recovery*: To retrieve row information, move the `ResultSet` object cursor away from the insert row.
+
+=== 29041 HY000
+
+```
+29041 HY000 Operation invalid. No primary key for the table.
+```
+
+*Cause*: The `getKeyColumns()` method failed on a table that was created without a primary-key column defined.
+
+*Effect*:  No primary-key data is returned for the table.
+
+*Recovery*: Change the table to include a primary-key column.
+
+<<<
+=== 29042 HY000
+
+```
+29042 HY000 Fetch size value is not valid.
+```
+
+*Cause*: An attempt was made to set the fetch-row size to a value that is less than 0.
+
+*Effect*:  The number of rows that are fetched from the database when more rows are needed is not set.
+
+*Recovery*: For the `setFetchSize()` method, supply a valid row value that is greater than or equal to 0.
+
+=== 29043 HY000
+
+```
+29043 HY000 Max rows value is not valid.
+```
+
+*Cause*: An attempt was made to set a limit of less than 0 for the maximum
+number of rows that any `ResultSet` object can contain.
+
+*Effect*:  The limit for the maximum number of rows is not set.
+
+*Recovery*: For the `setMaxRows()` method, use a valid value that is greater than or equal to 0.
+
+=== 29044 HY000
+
+```
+29044 HY000 Query timeout value is not valid.
+```
+
+*Cause*: An attempt was made to set a value of less than 0 for the number
+of seconds the driver waits for a Statement object to execute.
+
+*Effect*:  The query timeout limit is not set.
+
+*Recovery*: For the `setQueryTimeout()` method, supply a valid value that is
+greater than or equal to 0.
+
+<<<
+=== 29045 01S07
+
+```
+29045 01S07 Fractional truncation.
+```
+
+*Cause*: The data retrieved by the `ResultSet` getter method has been truncated.
+
+*Effect*:  The data retrieved is truncated.
+
+*Recovery*: Make sure that the data to be retrieved is within a valid data-type range.
+
+=== 29046 22003
+
+```
+29046 22003 Numeric value out of range.
+```
+
+*Cause*: A value retrieved from the ResultSet getter method is outside the range for the data type.
+
+*Effect*:  The ResultSet getter method does not retrieve the data.
+
+*Recovery*: Make sure the data to be retrieved is within a valid data-type range.
+
+=== 29047 HY000
+
+```
+29047 HY000 Batch update failed. See next exception for details.
+```
+
+*Cause*: One of the commands in a batch update failed to execute properly.
+
+*Effect*:  Not all the batch-update commands succeed. See the subsequent
+exception for more information.
+
+*Recovery*: View the subsequent exception for possible recovery actions.
+
+<<<
+=== 29048 HY009
+
+```
+29048 HY009 Invalid use of null.
+```
+
+*Cause*: A parameter that has an expected table name is set to null.
+
+*Effect*:  The `DatabaseMetadata` method does not report any results.
+
+*Recovery*: For the `DatabaseMetaData` method, supply a valid table name that is not null.
+
+=== 29049 25000
+
+```
+29049 25000 Invalid transaction state.
+```
+
+*Cause*: The `begintransaction()` method was called when a transaction was in progress.
+
+*Effect*:  A new transaction is not started.
+
+*Recovery*: Before calling the `begintransaction()` method, validate whether
+other transactions are currently started.
+
+=== 29050 HY107
+
+```
+29050 HY107 Row value out of range.
+```
+
+*Cause*: A call to `getCurrentRow` retrieved is outside the first and last row range.
+
+*Effect*:  The current row is not retrieved.
+
+*Recovery*: It is an informational message only; no recovery is needed.
+Contact {project-support} and report the entire message.
+
+<<<
+=== 29051 01S02
+
+```
+29051 01S02 ResultSet type changed to TYPE_SCROLL_INSENSITIVE.
+```
+*Cause*: The Result Set Type was changed.
+
+*Effect*:  None.
+
+*Recovery*: This message is reported as an SQL Warning. It is an informational message only; no recovery is needed.
+
+=== 29053 HY000
+
+```
+29053 HY000 SQL SELECT statement is invalid in executeUpdate() methodCause.
+```
+
+*Cause*: A select SQL statement was used in the `executeUpdate()` method.
+
+*Effect*:  The SQL query not performed exception is reported.
+
+*Recovery*: Use the `executeQuery()` method to issue the select SQL statement.
+
+=== 29054 HY000
+
+```
+29054 HY000 Only SQL SELECT statements are valid in executeQuery() method.
+```
+
+*Cause*: A non-select SQL statement was used in the `executeQuery()` method.
+
+*Effect*:  The exception reported is "SQL query not performed".
+
+*Recovery*: Use the `executeUpdate()` method to issue the non-select SQL statement.
+
+<<<
+=== 29056 HY000
+
+```
+29056 HY000 Statement is already closed.
+```
+
+*Cause*: A `validateSetInvocation()` or `validateExecuteInvocation` method was used on a closed statement.
+
+*Effect*:  The validation on the statement fails and returns an exception.
+
+*Recovery*: Use the `validateSetInvocation()` or `validateExecuteInvocation` method prior to the statement close.
+
+
+=== 29057 HY000
+
+```
+29057 HY000 Auto generated keys not supported.
+```
+
+*Cause*: An attempt was made to use the Auto-generated keys feature.
+
+*Effect*:  The attempt does not succeed.
+
+*Recovery*: The Auto-generated keys feature is not supported.
+
+=== 29058 HY000
+
+```
+29058 HY000 Connection is not associated with a PooledConnection object.
+```
+
+*Cause*: The `getPooledConnection()` method was invoked before the `PooledConnection` object was established.
+
+*Effect*:  A connection from the pool cannot be retrieved.
+
+*Recovery*: Make sure a `PooledConnection` object is established before using
+the `getPooledConnection()` method.
+
+<<<
+=== 29059 HY000
+
+```
+29059 HY000 'blobTableName' property is not set or set to null value or set to invalid value.
+```
+
+*Cause*: Attempted to access a BLOB column without setting the property
+`hpt4jdbc.blobTableName`, or the property is set to an invalid value.
+
+*Effect*:  The application cannot access BLOB columns.
+
+*Recovery*: Set the `hpt4jdbc.blobTableName` property to a valid LOB table
+name. The LOB table name is of format `catalog.schema.lobTableName`.
+
+=== 29060 HY000
+
+```
+29060 HY000 'hpt4jdbc.clobTableName' property is not set or set to null value or set to invalid value.
+```
+
+*Cause*: Attempted to access a CLOB column without setting the
+`propertyhpt4jdbc.clobTableName` property, or the property is set to null
+value or set to an invalid value.
+
+*Effect*:  The application cannot access CLOB columns.
+
+*Recovery*: Set the `hpt4jdbc.clobTableName` property to a valid LOB table
+name. The LOB table name is of format `catalog.schema.lobTableName`.
+
+=== 29061 HY00
+
+```
+29061 HY00 Lob object {0} is not current.
+```
+
+*Cause*: Attempted to access LOB column data after the cursor moved or the
+result set from which the LOB data was obtained had been closed.
+
+*Effect*:  The application cannot access LOB data.
+
+*Recovery*: Read the LOB data before moving the cursor or closing the result-set object.
+
+<<<
+=== 29063 HY00
+
+```
+29063 HY00 Transaction error {0} - {1} while obtaining start data locator.
+```
+
+*Cause*: A transaction error occurred when the Type 4 driver attempted to
+reserve the data locators for the given process while inserting or
+updating a LOB column.
+
+*Effect*:  The application cannot insert or update the LOB columns.
+
+*Recovery*: Check the file-system error in the message and take recovery action accordingly.
+
+=== 29067 07009
+
+```
+2067 07009 Invalid input value in the method {0}.
+```
+
+*Cause*: One or more input values in the given method is invalid.
+
+*Effect*:  The given input method failed.
+
+*Recovery*: Check the input values for the given method.
+
+=== 29068 07009
+
+```
+29068 07009 The value for position can be any value between 1 and one more than the length of the LOB data.
+```
+
+*Cause*: The position input value in `Blob.setBinaryStream`,
+`Clob.setCharacterStream`, or `Clob.setAsciiStream` can be between 1 and one
+more than the length of the LOB data.
+
+*Effect*:  The application cannot write the LOB data at the specified position.
+
+*Recovery*: Correct the position input value.
+
+<<<
+=== 29069 HY000
+
+```
+29069 HY000 Autocommit is on and LOB objects are involved.
+```
+
+*Cause*: An attempt was made to access a LOB column when autocommit made is enabled.
+
+*Effect*:  The application cannot access LOB columns.
+
+*Recovery*: Disable the autocommit mode.
+
+=== 29100 HY000
+
+```
+29100 HY000 An internal error occurred.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+=== 29101 HY000
+
+```
+29101 HY000 Contact your service provider.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} (the service provider) and report the entire message.
+
+<<<
+=== 29102 HY000
+
+```
+29101 HY000 Error while parsing address <address>.
+```
+*Cause*: The address format was not recognized.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Refer to <<url, url Property>> for the valid address format.
+
+=== 29103 HY000
+
+```
+29103 HY000 Address is null.
+```
+
+*Cause*: The address was empty.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Refer to <<url, url Property>> for the valid address format.
+
+=== 29104 HY000
+
+```
+29104 HY000 Expected suffix: <suffix>.
+```
+
+*Cause*: The address suffix was incorrect or missing.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Refer to <<url, url Property>> for the valid address format.
+
+<<<
+===  29105 HY000
+
+```
+29105 HY000 Unknown prefix for address.
+```
+
+*Cause*: The address prefix was incorrect or missing.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Refer to <<url, url Property>> for the valid address format.
+
+=== 29106 HY000
+
+```
+29016 HY000 Expected address format: jdbc:subprotocol::subname.
+```
+
+*Cause*: Not applicable.
+
+*Effect*:  Not applicable.
+
+*Recovery*: This is an informational message.
+Refer to <<url, url Property>> for the valid address format.
+
+=== 29107 HY000
+
+```
+29107 HY000 Address not long enough to be a valid address.
+```
+
+*Cause*: The address length was too short to be a valid address.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Refer to <<url, url Property>> for the valid address format.
+
+<<<
+=== 29108 HY000
+
+```
+29108 HY000 Expecting \\<machine-name><process-name>/<port-number>.
+```
+
+*Cause*: The DCS address format was invalid.
+
+*Effect*:  Operation fails.
+
+*Recovery*: The address returned by the {project-name} platform was not in
+the expected format. Contact {project-support} and report the entire message.
+
+=== 29109 HY000
+
+```
+29109 HY000 //<{IP Address|Machine Name}[:port]/database name>
+```
+
+*Cause*: Informational message.
+
+*Effect*:  Not applicable.
+
+*Recovery*: Not applicable.
+
+=== 29110 HY000
+
+```
+29110 HY000 Address is missing an IP address or machine name.
+```
+
+*Cause*: An IP address or machine name is required, but missing.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Include a valid IP address or machine name.
+Refer to <<url, url Property>> for the valid address format.
+
+<<<
+=== 29111 HY000
+
+```
+29111 HY000 Unable to evaluate address <address> Cause: <cause>.
+```
+*Cause*: The driver could not determine the IP address for a host.
+
+*Effect*:  The operation fails.
+
+*Recovery*: The address or machine name may not be properly qualified or
+there my exist a security restriction. See the documentation for the
+`getAllByName` method in the `java.net.InetAddress` class. Include a valid
+IP address or machine name. Refer to <<url, url Property>> for the
+valid address format.
+
+
+=== 29112 HY000
+
+```
+29112 HY000 Missing ']'.
+```
+
+*Cause*: The driver could not determine the IP address for a host.
+
+*Effect*:  The operation fails.
+
+*Recovery*: The address or machine name may not be properly formatted.
+Refer to <<url, url Property>> for the valid address format.
+
+===  29113 HY000
+
+```
+29113 HY000 Error while opening socket. Cause: <cause>.
+```
+
+*Cause*: Socket error.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Use the `getCause` method on the `Exception` to determine the
+appropriate recovery action.
+
+<<<
+=== 29114 HY000
+
+```
+29114 HY000 Error while writing to socket.
+```
+
+*Cause*: Socket write error.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Use the `getCause` method on the `Exception` to determine the
+appropriate recovery action.
+
+
+
+=== 29115 HY000
+
+```
+29115 HY000 Error while reading from socket. Cause: <cause>.
+```
+
+*Cause*: Socket read error.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Use the `getCause` method on the `Exception` to determine the
+appropriate recovery action.
+
+=== 29116 HY000
+
+```
+29116 HY000 Socket is closed.
+```
+
+*Cause*: Socket close error.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29117 HY000
+
+```
+29117 HY000 Error while closing session. Cause: <cause>.
+```
+
+*Cause*: An error was encountered while closing a session.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29118 HY000
+
+```
+29118 HY000 A write to a bad map pointer occurred.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+=== 29119 HY000
+
+```
+29119 HY000 A write to a bad par pointer occurred.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+<<<
+=== 29120 HY000
+
+```
+29120 HY000 An association server connect message error occurred.
+```
+
+*Cause*: Unable to connect to the DCS association server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29121 HY000
+
+```
+29121 HY000 A close message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29122 HY000
+
+```
+29122 HY000 An end transaction message error occurred.
+```
+
+*Cause*: Unable to perform the operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29123 HY000
+
+```
+29123 HY000 An execute call message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29124 HY000
+
+```
+29124 HY000 An execute direct message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29125 HY000
+
+```
+29125 HY000 An execute direct rowset message error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+<<<
+=== 29126 HY000
+
+```
+29126 HY000 An execute N message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+
+=== 29127 HY000
+
+```
+29127 HY000 An execute rowset message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29128 HY000
+
+```
+29128 HY000 A fetch perf message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29129 HY000
+
+```
+29129 HY000 A fetch rowset message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29130 HY000
+
+```
+29130 HY000 A get sql catalogs message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29131 HY000
+
+```
+29131 HY000 An initialize dialogue message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+<<<
+=== 29132 HY000
+
+```
+29132 HY000 A prepare message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29133 HY000
+
+```
+29133 HY000 A prepare rowset message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29134 HY000
+
+```
+29134 HY000 A set connection option message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29135 HY000
+
+```
+29135 HY000 A terminate dialogue message error occurred. Cause: <cause>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+
+=== 29136 HY000
+
+```
+29136 HY000 An association server connect reply occurred.
+Exception: <exception> Exception detail: <exception_detail>
+Error text/code: <error text or code>.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate any error or error detail information accompanying
+this message and contact {project-support} to check logs for server
+({project-name} platform) errors and to analyze accompanying errors and
+warnings.
+
+=== 29137 HY000
+
+```
+29137 HY000 A close reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29138 HY000
+
+```
+29138 HY000 An end transaction reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29139 HY000
+
+```
+29139 HY000 An execute call reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29140 HY000
+
+```
+29140 HY000 An execute direct reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29141 HY000
+
+```
+29141 HY000 An execute direct rowset reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29142 HY000
+
+```
+29142 HY000 An execute N reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29143 HY000
+
+```
+29143 HY000 An execute rowset reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29144 HY000
+
+```
+29144 HY000 A fetch perf reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29145 HY000
+
+```
+29145 HY000 A fetch rowset reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29146  HY000
+
+```
+29146 HY000 A get sql catalogs reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29147 HY000
+
+```
+29147 HY000 An initialize dialogue reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29148 HY000
+
+```
+29148 HY000 A prepare reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29149 HY000
+
+```
+29149 HY000 A prepare rowset reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29150 HY000
+
+```
+29150 HY000 A set connection option reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+
+=== 29151 HY000
+
+```
+29151 HY000 A terminate dialogue reply error occurred.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate the returned value from the `getCause` method on the
+`Exception` to determine the appropriate recovery action.
+
+=== 29152 HY000
+
+```
+29152 HY000 No more ports available to start ODBC servers.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors. Evaluate the returned value from the `getCause` method
+on the `Exception` to determine the appropriate recovery action.
+
+<<<
+=== 29153 HY000
+
+```
+29153 HY000 Invalid authorization specification.
+```
+
+*Cause*: Incorrect user name and/or password.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Retry with correct user name and/or password.
+
+
+=== 29154 HY000
+
+```
+29154 HY000 Timeout expired.
+```
+
+*Cause*: Unable to perform this operation.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Retry and/or change the timeout value for the operation.
+
+===  29155 HY000
+
+```
+29155 HY000 Unknown message type.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze errors and warnings.
+
+<<<
+=== 29156 HY000
+
+```
+29156 HY000 An error was returned from the server. Error: <error>
+Error detail: <error_detail>.
+```
+
+*Cause*: The server reported an error.
+
+*Effect*:  Operation fails.
+
+
+*Recovery*: Evaluate any error or error detail information accompanying the
+message. Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze accompanying errors and warnings.
+
+
+=== 29157 HY000
+
+```
+29157 HY000 There was a problem reading from the server.
+```
+
+*Cause*: The server reported an error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate any error or error detail information accompanying the
+message. Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze accompanying errors and warnings.
+
+=== 29158 HY000
+
+```
+29158 HY000 The message header contained the wrong version.
+Expected: <expected_version> Actual: <actual_version>.
+```
+
+*Cause*: The server's version differs from the expected version.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate any error or error detail information accompanying the
+message. Install compatible versions of the driver and HP connectivity
+server.
+
+<<<
+=== 29159 HY000
+
+```
+29159 HY000 The message header contained the wrong signature.
+Expected: <expected_signature> Actual: <actual_signature>.
+```
+
+*Cause*: The server's signature differs from the expected version.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Evaluate any error or error detail information accompanying the
+message. Install compatible versions of the driver and HP connectivity
+server.
+
+
+=== 29160 HY000
+
+```
+29160 HY000 The message header was not long enough.
+```
+
+*Cause*: The message returned by the server was too short to be a valid message.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+=== 29161 S1000
+
+```
+29161 S1000 Unable to authenticate the user because of an NT error: {0}
+```
+
+*Cause*: A message returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+<<<
+=== 29162 S1000
+
+```
+29162 S1000 Unexpected programming exception has been found: <exception>.
+```
+
+Check the server event log on node _node_ for details.
+
+*Cause*: A message returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze accompanying errors and warnings.
+
+
+=== 29163 08001
+
+```
+29163 08001 ODBC Services not yet available: <server>.
+```
+
+*Cause*: A message returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Retry and/or wait for a server to become available. Configure
+server-side data source with more servers.
+
+=== 29164 08001
+
+```
+29164 08001 DataSource not yet available or not found: <error>.
+```
+
+*Cause*: A message returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Create server data source and/or configure server data source
+with more servers.
+
+<<<
+=== 29165 HY000
+
+```
+29165 HY000 Unknown connect reply error: <error>.
+```
+
+*Cause*: A message returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze accompanying errors and warnings.
+
+
+=== 29166 HY000
+
+```
+29166 HY000 This method is not implemented.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+=== 29167 HY000
+
+```
+29167 HY000 Internal error. An internal index failed consistency check.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+<<<
+=== 29168 HY000
+
+```
+29168 HY000 Unknown reply message error: <error> error detail: <error_detail>.
+```
+
+*Cause*: Server returned an error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors and to analyze accompanying errors and warnings.
+
+
+=== 29169 HY000
+
+```
+29169 HY000 Invalid connection property setting
+```
+
+*Cause*: The message returned by the server was too short to be a valid message.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+=== 29170 HY000
+
+```
+29170 HY000 Invalid parameter value.
+```
+
+*Cause*: Internal error.
+
+*Effect*:  Operation fails.
+
+*Recovery*: None. Contact {project-support} and report the entire message.
+
+<<<
+=== 29172 HY000
+
+```
+29172 HY000 Translation of parameter to {0} failed.
+```
+
+*Cause*: Translation errors occurred when translating the parameter into
+the target character set reported in the {0} replacement variable.
+
+*Effect*:  The method fails.
+
+*Recovery*: Set the parameter to use characters within the appropriate
+character set. You can also turn off translation validation by setting
+the `translationVerification` property to FALSE.
+
+
+=== 29173 HY000
+
+```
+29173 HY000 Translation of SQL statement {0} failed.
+```
+
+*Cause*: Translation errors occurred when translating the SQL statement
+into the target character set reported in the {0} replacement
+variable.
+
+*Effect*:  The method fails.
+
+*Recovery*: Edit the SQL statement to use characters within the appropriate
+character set. You can also turn off translation validation by setting
+the `translationVerification` property to FALSE.
+
+=== 29174 HY000
+
+```
+29174 HY000 Autocommit is on and updateRow was called on the ResultSetobject.
+```
+
+*Cause*: The `ResultSet.updateRow()` method is called when autocommit is set on.
+
+*Effect*:  Warning is thrown. Subsequent `ResultSet.next()` calls will fail
+because all the `ResultSet(cursors)` are closed.
+
+*Recovery*: Call the `ResultSet.updateRow()` method with autocommit set to off.
+
+<<<
+=== 29175 HY000
+
+```
+29175 HY000 Unknown Error {0}.
+```
+
+*Cause*: An unknown error occurred during connection {0}.
+
+*Effect*:  The connection fails.
+
+*Recovery*: Retry the connection.
+
+
+=== 29177 HY000
+
+```
+29177 HY000 Data cannot be null.
+```
+
+*Cause*: Attempted to get column value data in String format, but passed a null input value.
+
+*Effect*:  The operation fails.
+
+*Recovery*: Contact {project-support} to check logs for server ({project-name}
+platform) errors regarding the DCS server.
+
+=== 29178 HY000
+
+```
+29178 HY000 No column value has been inserted.
+```
+
+*Cause*: The value for a required column was not specified.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Ensure that all required column values are specified, and retry
+the operation.
+
+<<<
+=== 29182 HY000
+
+```
+29182 HY000 General warning. Connected to the default data source:
+TDM_Default_DataSource
+```
+
+*Cause*: The user application specified a data source that does not exist
+on the server side, the {project-name} platform.
+
+*Effect*:  The connection uses the {project-name} platform default data
+source `TDM_Default_DataSource`.
+
+*Recovery*: Ignore the warning or contact your {project-name} database
+administrator to add the server-side data source that the application
+specified.
+
+
+=== S1000 HY000
+
+```
+S1000 HY000 A TIP transaction error <error> has been detected. Check the
+server event log on Node <segment> for Transaction Error details.
+```
+
+*Cause*: A message was returned by the server.
+
+*Effect*:  Operation fails.
+
+*Recovery*: Contact {project-support} to check for errors in the server event log
+on the reported segment.
+