From derby-dev-return-2145-apmail-db-derby-dev-archive=db.apache.org@db.apache.org Fri Feb 11 16:20:58 2005 Return-Path: Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: (qmail 8527 invoked from network); 11 Feb 2005 16:20:57 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 11 Feb 2005 16:20:57 -0000 Received: (qmail 1734 invoked by uid 500); 11 Feb 2005 16:20:56 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 1683 invoked by uid 500); 11 Feb 2005 16:20:56 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: List-Id: Reply-To: "Derby Development" Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 1652 invoked by uid 99); 11 Feb 2005 16:20:55 -0000 X-ASF-Spam-Status: No, hits=2.7 required=10.0 tests=DNS_FROM_RFC_ABUSE,DNS_FROM_RFC_POST,UPPERCASE_50_75 X-Spam-Check-By: apache.org Received-SPF: neutral (hermes.apache.org: local policy) Received: from e35.co.us.ibm.com (HELO e35.co.us.ibm.com) (32.97.110.133) by apache.org (qpsmtpd/0.28) with ESMTP; Fri, 11 Feb 2005 08:20:54 -0800 Received: from westrelay03.boulder.ibm.com (westrelay03.boulder.ibm.com [9.17.195.12]) by e35.co.us.ibm.com (8.12.10/8.12.9) with ESMTP id j1BGKo6L438104 for ; Fri, 11 Feb 2005 11:20:50 -0500 Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by westrelay03.boulder.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id j1BGKorY358628 for ; Fri, 11 Feb 2005 09:20:50 -0700 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.12.11/8.12.11) with ESMTP id j1BGKo86015484 for ; Fri, 11 Feb 2005 09:20:50 -0700 Received: from [127.0.0.1] (Abrown.svl.ibm.com [9.30.40.113]) by d03av03.boulder.ibm.com (8.12.11/8.12.11) with ESMTP id j1BGKmHn015323 for ; Fri, 11 Feb 2005 09:20:49 -0700 Message-ID: <420CDB70.3040307@sbcglobal.net> Date: Fri, 11 Feb 2005 08:21:04 -0800 From: Army User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.1) Gecko/20040707 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Derby Development Subject: [PATCH] Derby-107, Phase II Content-Type: multipart/mixed; boundary="------------090801010708030101050307" X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N This is a multi-part message in MIME format. --------------090801010708030101050307 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit For background on this patch and for the "Phase I" patch that precedes this one, please see the email: http://mail-archives.eu.apache.org/mod_mbox/db-derby-dev/200502.mbox/%3c4202699E.3000009@golux.com%3e *** NOTE TO COMMITTERS: *** This patch is BASED ON THE PHASE I PATCH as a starting point. Therefore, please do NOT commit this patch until _after_ the Phase I patch has been committed. I posted the Phase I patch to derby-dev last week (Feb 3rd); it can be referenced at the link given above. I have run the derbyall test suite with these changes, using Windows with Sun JDK 1.4.2, and have included the relevant master updates as part of the patch. ---- Attached is a patch for Phase II of my proposal for fixing Derby-107: "Phase II) Where it is SAFE to do, modify the values of non-numeric rows in the metadata result sets to be NULL when the columns in question don't apply. For example, "SCALE/DECIMAL_DIGITS" and "NUM_PREC_RADIX" are two columns that wouldn't apply to a row that is for CHAR, and thus the values in those two columns (for that specific row) would be NULL." -- Pasted from my first email referenced above. The JDBC specification for some metadata result set columns doesn't state what value should be returned if a given column doesn't apply to a given row. For example, the JDBC 3.0 API has the following brief descriptions for the DatabaseMetaData.getColumns() API: 5. DATA_TYPE int => SQL type from java.sql.Types ... 9. DECIMAL_DIGITS int => the number of fractional digits 10. NUM_PREC_RADIX int => Radix (typically either 10 or 2) The API doesn't dictate what the values for DECIMAL_DIGITS and NUM_PREC_RADIX should be with rows for which the value of DATA_TYPE is a _non-numeric_ type. Or at least, I can't find that information stated anywhere. Thus, my own conclusion here is that a database which returns NULL for these values when they don't apply is still compliant with the JDBC standard, since the standard doesn't say otherwise. If anyone can prove that this is the wrong conclusion, please feel free to say so. That said, the ODBC specification for "SQLColumns", which is the ODBC equivalent of "getColumns", _does_ state that certain values, like DECIMAL_DIGITS and NUM_PREC_RADIX, _should_ be NULL if they do not apply to the row in question and/or if the row is non-numeric. Therefore, this patch (Phase II for Derby-107) changes the existing Derby metadata so that values which are only defined for numeric columns, like DECIMAL_DIGITS and NUM_PREC_RADIX, will return NULL for non-numeric columns and for numeric columns to which they do not apply. This change allows us to use the same result sets to satisfy both JDBC and ODBC (via Network Server) metadata requests in regards to this particular issue. Details of the patch: This patch changes the following result set columns (by altering the org/apache/derby/impl/jdbc/metadata.properties file): 1. SCALE/DECIMAL_DIGITS => Changed to return NULL for non-numeric columns and for columns having non-exact numeric types (meaning java.sql.DOUBLE, java.sql.FLOAT, and java.sql.REAL). Derby currently returns "0" for these columns. This change applies to the following metadata methods: getProcedureColumns, getColumns, getBestRowIdentifier. 2. MINIMUM_SCALE, MAXIMUM_SCALE => Changed to return NULL for non-numeric columns and for columns having non-exact numeric types (meaning java.sql.DOUBLE, java.sql.FLOAT, and java.sql.REAL). Derby currently returns "0" for these columns. This change applies to the following metadata methods: getTypeInfo. 3. RADIX/NUM_PREC_RADIX => Changed to return NULL for non-numeric columns. Derby currently returns "10" for these columns. This change applies to the following metadata methods: getProcedureColumns, getColumns, getTypeInfo. ---- Once again, just to reiterate: ** This patch was created with respect to the Phase I patch, and thus should not be committed until after the Phase I patch has been committed. ** I have run the derbyall test suite with these changes, using Windows with Sun JDK 1.4.2, and have included the relevant master updates as part of the patch. Thanks, Army --------------090801010708030101050307 Content-Type: text/plain; name="derby-107.II.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="derby-107.II.patch" Index: java/engine/org/apache/derby/impl/jdbc/metadata.properties =================================================================== --- java/engine/org/apache/derby/impl/jdbc/metadata.properties (revision 153297) +++ java/engine/org/apache/derby/impl/jdbc/metadata.properties (working copy) @@ -112,8 +112,21 @@ V."TYPE_NAME" AS TYPE_NAME, \ V."PRECISION" AS PRECISION, \ V."LENGTH" AS LENGTH, \ - V."SCALE" AS SCALE, \ - V."RADIX" AS RADIX, \ + CASE WHEN (V."DATA_TYPE" IN (java.sql.Types::DECIMAL, \ + java.sql.Types::NUMERIC, java.sql.Types::INTEGER, \ + java.sql.Types::SMALLINT, java.sql.Types::TINYINT, \ + java.sql.Types::BIGINT)) \ + THEN V."SCALE" \ + ELSE CAST (NULL AS SMALLINT) END \ + AS SCALE, \ + CASE WHEN (V."DATA_TYPE" IN (java.sql.Types::DECIMAL, \ + java.sql.Types::NUMERIC, java.sql.Types::INTEGER, \ + java.sql.Types::SMALLINT, java.sql.Types::TINYINT, \ + java.sql.Types::BIGINT, java.sql.Types::DOUBLE, \ + java.sql.Types::FLOAT, java.sql.Types::REAL)) \ + THEN V."RADIX" \ + ELSE CAST (NULL AS SMALLINT) END \ + AS RADIX, \ V."NULLABLE" AS NULLABLE, \ V."REMARKS" AS REMARKS, \ V."METHOD_ID" AS METHOD_ID, \ @@ -171,13 +184,21 @@ C.COLUMNDATATYPE.getMaximumWidth() END AS COLUMN_SIZE, \ CAST( NULL AS INT) AS BUFFER_LENGTH, \ CASE WHEN (C.COLUMNDATATYPE.getJDBCTypeId() IN (java.sql.Types::DECIMAL, \ - java.sql.Types::NUMERIC)) THEN \ - C.COLUMNDATATYPE.getScale() ELSE \ - CAST(NULL AS INT) END \ + java.sql.Types::NUMERIC, java.sql.Types::INTEGER, \ + java.sql.Types::SMALLINT, java.sql.Types::TINYINT, \ + java.sql.Types::BIGINT)) \ + THEN C.COLUMNDATATYPE.getScale() \ + ELSE CAST(NULL AS INT) END \ AS DECIMAL_DIGITS, \ CASE WHEN (C.COLUMNDATATYPE.getJDBCTypeId() IN (java.sql.Types::REAL, \ - java.sql.Types::DOUBLE, \ - java.sql.Types::FLOAT)) THEN 2 ELSE 10 END \ + java.sql.Types::DOUBLE, java.sql.Types::FLOAT)) \ + THEN 2 \ + ELSE (CASE WHEN (C.COLUMNDATATYPE.getJDBCTypeId() IN ( \ + java.sql.Types::INTEGER, java.sql.Types::SMALLINT, \ + java.sql.Types::TINYINT, java.sql.Types::BIGINT, \ + java.sql.Types::DECIMAL, java.sql.Types::NUMERIC)) \ + THEN 10 \ + ELSE CAST (NULL AS INTEGER) END) END \ AS NUM_PREC_RADIX, \ CASE WHEN C.COLUMNDATATYPE.isNullable() THEN \ java.sql.DatabaseMetaData::columnNullable ELSE \ @@ -504,37 +525,85 @@ PK_NAME, \ KEY_SEQ -getTypeInfo=SELECT CAST (RTRIM(CAST (T1 AS CHAR(128))) AS VARCHAR(128)) AS TYPE_NAME, CAST (T2 AS SMALLINT) AS DATA_TYPE, \ -T3 AS PRECISION, CAST (RTRIM(CAST(T4 AS CHAR(10))) AS VARCHAR(10)) AS LITERAL_PREFIX,CAST (RTRIM(T5) AS VARCHAR(10)) AS LITERAL_SUFFIX, \ -CAST (RTRIM(CAST(T6 AS CHAR(20))) AS VARCHAR(20)) AS CREATE_PARAMS,T7 AS NULLABLE, T8 AS CASE_SENSITIVE, \ -T9 AS SEARCHABLE,T10 AS UNSIGNED_ATTRIBUTE,T11 AS FIXED_PREC_SCALE, \ -T12 AS AUTO_INCREMENT,CAST (RTRIM(CAST(T1 AS CHAR(128))) AS VARCHAR(128)) AS LOCAL_TYPE_NAME, \ -T14 AS MINIMUM_SCALE,T15 AS MAXIMUM_SCALE,CAST (NULL AS INT) AS SQL_DATA_TYPE, \ -CAST (NULL AS INT) AS SQL_DATETIME_SUB,T18 AS NUM_PREC_RADIX \ -FROM ( VALUES \ -('BIGINT',-5,19,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR),1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ -('LONG VARCHAR FOR BIT DATA',-4,32700,'X''','''',CAST (NULL AS CHAR),1,FALSE,2,TRUE,FALSE,FALSE,0,0,0),\ -('VARCHAR () FOR BIT DATA',-3,32762,'X''','''','length',1,FALSE,2,TRUE,FALSE,FALSE,0,0,2),\ -('CHAR () FOR BIT DATA',-2,254,'X''','''','length',1,FALSE,2,TRUE,FALSE,FALSE,0,0,2),\ -('LONG VARCHAR',-1,32700,'''','''',CAST (NULL AS CHAR),1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('LONG NVARCHAR',-1,32700,'''','''',CAST (NULL AS CHAR),1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('CHAR',1,254,'''','''','length',1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('NATIONAL CHAR',1,2147483647,'''','''','length',1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('NUMERIC',2,31,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision,scale',1,FALSE,2,FALSE,TRUE,FALSE,0,32767,10),\ -('DECIMAL',3,31,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision,scale',1,FALSE,2,FALSE,TRUE,FALSE,0,32767,10),\ -('INTEGER',4,10,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR),1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ -('SMALLINT',5,5,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR),1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ -('FLOAT',6,52,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision',1,FALSE,2,FALSE,FALSE,FALSE,0,0,2),\ -('REAL',7,23,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR),1,FALSE,2,FALSE,FALSE,FALSE,0,0,2),\ -('DOUBLE',8,52,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR),1,FALSE,2,FALSE,FALSE,FALSE,0,0,2),\ -('VARCHAR',12,32672,'''','''','length',1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('NATIONAL CHAR VARYING',12,2147483647,'''','''','length',1,TRUE,3,TRUE,FALSE,FALSE,0,0,0),\ -('DATE',91,10,'DATE''','''',CAST (NULL AS CHAR),1,FALSE,2,TRUE,FALSE,FALSE,0,0,0),\ -('TIME',92,0,'TIME''','''',CAST (NULL AS CHAR),1,FALSE,2,TRUE,FALSE,FALSE,0,0,0),\ -('TIMESTAMP',93,0,'TIMESTAMP''','''',CAST (NULL AS CHAR),1,FALSE,2,TRUE,FALSE,FALSE,0,0,0),\ -('BLOB',2004,2147483647,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'length',1,FALSE,1,CAST (NULL AS BOOLEAN),FALSE,CAST (NULL AS BOOLEAN),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER)),\ -('CLOB',2005,2147483647,'''','''','length',1,TRUE,1,CAST (NULL AS BOOLEAN),FALSE,CAST (NULL AS BOOLEAN),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER))\ -) AS TYPEINFO(T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T14,T15,T18) +getTypeInfo=\ + SELECT CAST (RTRIM(CAST (T1 AS CHAR(128))) AS VARCHAR(128)) AS TYPE_NAME, \ + CAST (T2 AS SMALLINT) AS DATA_TYPE, \ + T3 AS PRECISION, \ + CAST (RTRIM(CAST(T4 AS CHAR(10))) AS VARCHAR(10)) AS LITERAL_PREFIX, \ + CAST (RTRIM(T5) AS VARCHAR(10)) AS LITERAL_SUFFIX, \ + CAST (RTRIM(CAST(T6 AS CHAR(20))) AS VARCHAR(20)) AS CREATE_PARAMS, \ + T7 AS NULLABLE, \ + T8 AS CASE_SENSITIVE, \ + T9 AS SEARCHABLE, \ + T10 AS UNSIGNED_ATTRIBUTE, \ + T11 AS FIXED_PREC_SCALE, \ + T12 AS AUTO_INCREMENT, \ + CAST (RTRIM(CAST(T1 AS CHAR(128))) AS VARCHAR(128)) AS LOCAL_TYPE_NAME, \ + T14 AS MINIMUM_SCALE, \ + T15 AS MAXIMUM_SCALE, \ + CAST (NULL AS INT) AS SQL_DATA_TYPE, \ + CAST (NULL AS INT) AS SQL_DATETIME_SUB, \ + T18 AS NUM_PREC_RADIX \ + FROM ( VALUES \ + ('BIGINT',-5,19,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR), \ + 1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ + ('LONG VARCHAR FOR BIT DATA',-4,32700,'X''','''',CAST (NULL AS CHAR), \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('VARCHAR () FOR BIT DATA',-3,32762,'X''','''','length', \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('CHAR () FOR BIT DATA',-2,254,'X''','''','length', \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('LONG VARCHAR',-1,32700,'''','''',CAST (NULL AS CHAR), \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('LONG NVARCHAR',-1,32700,'''','''',CAST (NULL AS CHAR), \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('CHAR',1,254,'''','''','length', \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('NATIONAL CHAR',1,2147483647,'''','''','length', \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('NUMERIC',2,31,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision,scale', \ + 1,FALSE,2,FALSE,TRUE,FALSE,0,32767,10),\ + ('DECIMAL',3,31,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision,scale', \ + 1,FALSE,2,FALSE,TRUE,FALSE,0,32767,10),\ + ('INTEGER',4,10,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR), \ + 1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ + ('SMALLINT',5,5,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR), \ + 1,FALSE,2,FALSE,FALSE,TRUE,0,0,10),\ + ('FLOAT',6,52,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'precision', \ + 1,FALSE,2,FALSE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),2),\ + ('REAL',7,23,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR), \ + 1,FALSE,2,FALSE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),2),\ + ('DOUBLE',8,52,CAST (NULL AS CHAR),CAST (NULL AS CHAR),CAST (NULL AS CHAR), \ + 1,FALSE,2,FALSE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),2),\ + ('VARCHAR',12,32672,'''','''','length', \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('NATIONAL CHAR VARYING',12,2147483647,'''','''','length', \ + 1,TRUE,3,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('DATE',91,10,'DATE''','''',CAST (NULL AS CHAR), \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('TIME',92,0,'TIME''','''',CAST (NULL AS CHAR), \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('TIMESTAMP',93,0,'TIMESTAMP''','''',CAST (NULL AS CHAR), \ + 1,FALSE,2,TRUE,FALSE,FALSE,CAST (NULL AS INTEGER),CAST (NULL AS INTEGER), \ + CAST (NULL AS INTEGER)), \ + ('BLOB',2004,2147483647,CAST (NULL AS CHAR),CAST (NULL AS CHAR),'length', \ + 1,FALSE,1,CAST (NULL AS BOOLEAN),FALSE,CAST (NULL AS BOOLEAN), \ + CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER)),\ + ('CLOB',2005,2147483647,'''','''','length', \ + 1,TRUE,1,CAST (NULL AS BOOLEAN),FALSE,CAST (NULL AS BOOLEAN), \ + CAST (NULL AS INTEGER),CAST (NULL AS INTEGER),CAST (NULL AS INTEGER)) \ + ) AS TYPEINFO(T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T14,T15,T18) # parameter 1 = pattern for catalog name @@ -631,7 +700,13 @@ CAST (COLS.COLUMNDATATYPE.getTypeName() AS VARCHAR(128)) AS TYPE_NAME, \ COLS.COLUMNDATATYPE.getMaximumWidth() AS COLUMN_SIZE, \ CAST (NULL AS INT) AS BUFFER_LENGTH, \ - CAST (COLS.COLUMNDATATYPE.getPrecision() AS SMALLINT) AS DECIMAL_DIGITS, \ + CAST ((CASE WHEN (COLS.COLUMNDATATYPE.getJDBCTypeId() IN ( \ + java.sql.Types::DECIMAL, java.sql.Types::NUMERIC, \ + java.sql.Types::INTEGER, java.sql.Types::SMALLINT, \ + java.sql.Types::TINYINT, java.sql.Types::BIGINT)) \ + THEN COLS.COLUMNDATATYPE.getPrecision() \ + ELSE CAST (NULL AS SMALLINT) END) AS SMALLINT) \ + AS DECIMAL_DIGITS, \ CAST (java.sql.DatabaseMetaData::bestRowNotPseudo AS SMALLINT) AS PSEUDO_COLUMN \ FROM SYS.SYSSCHEMAS SCHEMAS, SYS.SYSTABLES TABS, \ SYS.SYSCONSTRAINTS cons, SYS.SYSKEYS keys, \ @@ -685,7 +760,13 @@ CAST (COLS.COLUMNDATATYPE.getTypeName() AS VARCHAR(128)) AS TYPE_NAME, \ COLS.COLUMNDATATYPE.getMaximumWidth() AS COLUMN_SIZE, \ CAST (NULL AS INT) AS BUFFER_LENGTH, \ - CAST (COLS.COLUMNDATATYPE.getPrecision() AS SMALLINT) AS DECIMAL_DIGITS, \ + CAST ((CASE WHEN (COLS.COLUMNDATATYPE.getJDBCTypeId() IN ( \ + java.sql.Types::DECIMAL, java.sql.Types::NUMERIC, \ + java.sql.Types::INTEGER, java.sql.Types::SMALLINT, \ + java.sql.Types::TINYINT, java.sql.Types::BIGINT)) \ + THEN COLS.COLUMNDATATYPE.getPrecision() \ + ELSE CAST (NULL AS SMALLINT) END) AS SMALLINT) \ + AS DECIMAL_DIGITS, \ CAST (java.sql.DatabaseMetaData::bestRowNotPseudo AS SMALLINT) AS PSEUDO_COLUMN \ FROM SYS.SYSSCHEMAS SCHEMAS, SYS.SYSTABLES TABS, \ SYS.SYSCONSTRAINTS cons, SYS.SYSKEYS keys, \ @@ -738,7 +819,13 @@ CAST (COLS.COLUMNDATATYPE.getTypeName() AS VARCHAR(128)) AS TYPE_NAME, \ COLS.COLUMNDATATYPE.getMaximumWidth() AS COLUMN_SIZE, \ CAST (NULL AS INT) AS BUFFER_LENGTH, \ - CAST (COLS.COLUMNDATATYPE.getPrecision() AS SMALLINT) AS DECIMAL_DIGITS, \ + CAST ((CASE WHEN (COLS.COLUMNDATATYPE.getJDBCTypeId() IN ( \ + java.sql.Types::DECIMAL, java.sql.Types::NUMERIC, \ + java.sql.Types::INTEGER, java.sql.Types::SMALLINT, \ + java.sql.Types::TINYINT, java.sql.Types::BIGINT)) \ + THEN COLS.COLUMNDATATYPE.getPrecision() \ + ELSE CAST (NULL AS SMALLINT) END) AS SMALLINT) \ + AS DECIMAL_DIGITS, \ CAST (java.sql.DatabaseMetaData::bestRowNotPseudo AS SMALLINT) AS PSEUDO_COLUMN \ FROM SYS.SYSSCHEMAS SCHEMAS, SYS.SYSTABLES TABS, \ SYS.SYSCONGLOMERATES IDX, SYS.SYSCOLUMNS COLS \ @@ -768,7 +855,13 @@ CAST (COLS.COLUMNDATATYPE.getTypeName() AS VARCHAR(128)) AS TYPE_NAME, \ COLS.COLUMNDATATYPE.getMaximumWidth() AS COLUMN_SIZE, \ CAST (NULL AS INT) AS BUFFER_LENGTH, \ - CAST (COLS.COLUMNDATATYPE.getPrecision() AS SMALLINT) AS DECIMAL_DIGITS, \ + CAST ((CASE WHEN (COLS.COLUMNDATATYPE.getJDBCTypeId() IN ( \ + java.sql.Types::DECIMAL, java.sql.Types::NUMERIC, \ + java.sql.Types::INTEGER, java.sql.Types::SMALLINT, \ + java.sql.Types::TINYINT, java.sql.Types::BIGINT)) \ + THEN COLS.COLUMNDATATYPE.getPrecision() \ + ELSE CAST (NULL AS SMALLINT) END) AS SMALLINT) \ + AS DECIMAL_DIGITS, \ CAST (java.sql.DatabaseMetaData::bestRowNotPseudo AS SMALLINT) AS PSEUDO_COLUMN \ FROM SYS.SYSSCHEMAS SCHEMAS, SYS.SYSTABLES TABS, \ SYS.SYSCOLUMNS COLS \ Index: java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/xaSimplePositive.sql =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/xaSimplePositive.sql (revision 153297) +++ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/xaSimplePositive.sql (working copy) @@ -65,6 +65,20 @@ -- both transactions should be prepared select * from APP.global_xactTable where gxid is not null order by gxid; +-- NOTE: The following call to "xa_recover xa_startrscan" is apt to +-- return the result set rows in reverse order when changes to +-- the Derby engine affect the number of transactions that it takes +-- to create a database. The transactions are stored in a hash table +-- based on a global and local id, and when the number of transactions +-- changes, the (internal) local id can change, which may lead to a +-- change in the result set order. This order is determined by the +-- JVM's hashing algorithm. Examples of changes to the engine that +-- can affect this include ones that cause more commits or that +-- change the amount of data being stored, such as changes to the +-- metadata statements (which is what prompted this explanation in +-- the first place). Ultimately, the problem is that there is no +-- way to order the return values from "xa_recover" since it is an +-- ij internal statement, not SQL... xa_recover xa_startrscan; xa_recover xa_noflags; Index: java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out (revision 153297) +++ java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out (working copy) @@ -154,24 +154,24 @@ getConnection(): same connection getProcedureColumns(): PROCEDURE_CAT[VARCHAR],PROCEDURE_SCHEM[VARCHAR],PROCEDURE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],COLUMN_TYPE[SMALLINT],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],PRECISION[INTEGER],LENGTH[INTEGER],SCALE[SMALLINT],RADIX[SMALLINT],NULLABLE[SMALLINT],REMARKS[VARCHAR],METHOD_ID[SMALLINT],PARAMETER_ID[SMALLINT] -null,APP,GETPCTEST1,OUTB,4,12,VARCHAR,3,3,0,10,1,null,12,0 -null,APP,GETPCTEST1,A,1,12,VARCHAR,3,3,0,10,1,null,12,1 +null,APP,GETPCTEST1,OUTB,4,12,VARCHAR,3,3,null,null,1,null,12,0 +null,APP,GETPCTEST1,A,1,12,VARCHAR,3,3,null,null,1,null,12,1 null,APP,GETPCTEST1,B,1,2,NUMERIC,5,6,0,10,1,null,12,2 null,APP,GETPCTEST1,C,1,5,SMALLINT,5,2,0,10,1,null,12,3 null,APP,GETPCTEST1,E,1,5,SMALLINT,5,2,0,10,1,null,12,4 null,APP,GETPCTEST1,F,1,4,INTEGER,10,4,0,10,1,null,12,5 null,APP,GETPCTEST1,G,1,-5,BIGINT,19,8,0,10,1,null,12,6 -null,APP,GETPCTEST1,H,1,8,DOUBLE,52,8,0,2,1,null,12,7 -null,APP,GETPCTEST1,I,1,8,DOUBLE,52,8,0,2,1,null,12,8 -null,APP,GETPCTEST1,K,1,91,DATE,10,-1,0,10,1,null,12,9 -null,APP,GETPCTEST1,L,1,92,TIME,8,-1,0,10,1,null,12,10 -null,APP,GETPCTEST1,T,1,93,TIMESTAMP,26,-1,0,10,1,null,12,11 +null,APP,GETPCTEST1,H,1,8,DOUBLE,52,8,null,2,1,null,12,7 +null,APP,GETPCTEST1,I,1,8,DOUBLE,52,8,null,2,1,null,12,8 +null,APP,GETPCTEST1,K,1,91,DATE,10,-1,null,null,1,null,12,9 +null,APP,GETPCTEST1,L,1,92,TIME,8,-1,null,null,1,null,12,10 +null,APP,GETPCTEST1,T,1,93,TIMESTAMP,26,-1,null,null,1,null,12,11 null,APP,GETPCTEST2,PA,1,4,INTEGER,10,4,0,10,1,null,2,0 null,APP,GETPCTEST2,PB,1,-5,BIGINT,19,8,0,10,1,null,2,1 -null,APP,GETPCTEST3A,STRING1,1,12,VARCHAR,5,5,0,10,1,null,2,0 -null,APP,GETPCTEST3A,STRING2,4,12,VARCHAR,5,5,0,10,1,null,2,1 -null,APP,GETPCTEST3B,STRING3,1,12,VARCHAR,5,5,0,10,1,null,2,0 -null,APP,GETPCTEST3B,STRING4,2,12,VARCHAR,5,5,0,10,1,null,2,1 +null,APP,GETPCTEST3A,STRING1,1,12,VARCHAR,5,5,null,null,1,null,2,0 +null,APP,GETPCTEST3A,STRING2,4,12,VARCHAR,5,5,null,null,1,null,2,1 +null,APP,GETPCTEST3B,STRING3,1,12,VARCHAR,5,5,null,null,1,null,2,0 +null,APP,GETPCTEST3B,STRING4,2,12,VARCHAR,5,5,null,null,1,null,2,1 null,APP,GETPCTEST4BX,RETPARAM,4,4,INTEGER,10,4,0,10,1,null,1,0 getTables() with TABLE_TYPE in ('SYSTEM TABLE') : TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],TABLE_TYPE[VARCHAR],REMARKS[VARCHAR] @@ -234,43 +234,43 @@ TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] getColumns('SYSTABLES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,10,0,,null,null,null,72,1,NO -,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,10,0,,null,null,null,256,2,NO -,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,10,0,,null,null,null,2,3,NO -,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,10,0,,null,null,null,72,4,NO -,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,10,0,,null,null,null,2,5,NO +,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,null,0,,null,null,null,72,1,NO +,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,null,0,,null,null,null,256,2,NO +,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,null,0,,null,null,null,2,3,NO +,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,null,0,,null,null,null,72,4,NO +,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,null,0,,null,null,null,2,5,NO getColumns('ALLTYPES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,ALLTYPES,SMALLINTCOL,5,SMALLINT,5,null,null,10,1,,null,null,null,null,1,YES -,APP,ALLTYPES,INTCOL,4,INTEGER,10,null,null,10,1,,20,null,null,null,2,YES -,APP,ALLTYPES,BIGINTCOL,-5,BIGINT,19,null,null,10,1,,null,null,null,null,3,YES +,APP,ALLTYPES,SMALLINTCOL,5,SMALLINT,5,null,0,10,1,,null,null,null,null,1,YES +,APP,ALLTYPES,INTCOL,4,INTEGER,10,null,0,10,1,,20,null,null,null,2,YES +,APP,ALLTYPES,BIGINTCOL,-5,BIGINT,19,null,0,10,1,,null,null,null,null,3,YES ,APP,ALLTYPES,REALCOL,7,REAL,23,null,null,2,1,,null,null,null,null,4,YES ,APP,ALLTYPES,DOUBLEPRECCOL,8,DOUBLE,52,null,null,2,1,,10,null,null,null,5,YES ,APP,ALLTYPES,DECIMALCOL10P4S,3,DECIMAL,10,null,4,10,1,,null,null,null,null,6,YES ,APP,ALLTYPES,NUMERICCOL20P2S,2,NUMERIC,20,null,2,10,1,,null,null,null,null,7,YES -,APP,ALLTYPES,CHAR8COL___,1,CHAR,8,null,null,10,1,,null,null,null,16,8,YES -,APP,ALLTYPES,VARCHAR9COL,12,VARCHAR,9,null,null,10,1,,null,null,null,18,9,YES -,APP,ALLTYPES,LONGVARCHARCOL,-1,LONG VARCHAR,32700,null,null,10,1,,null,null,null,null,10,YES -,APP,ALLTYPES,BLOBCOL,2004,BLOB,3072,null,null,10,1,,null,null,null,null,11,YES +,APP,ALLTYPES,CHAR8COL___,1,CHAR,8,null,null,null,1,,null,null,null,16,8,YES +,APP,ALLTYPES,VARCHAR9COL,12,VARCHAR,9,null,null,null,1,,null,null,null,18,9,YES +,APP,ALLTYPES,LONGVARCHARCOL,-1,LONG VARCHAR,32700,null,null,null,1,,null,null,null,null,10,YES +,APP,ALLTYPES,BLOBCOL,2004,BLOB,3072,null,null,null,1,,null,null,null,null,11,YES getColumns('LOUIE'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,LOUIE,I,4,INTEGER,10,null,null,10,0,,10,null,null,null,1,NO -,APP,LOUIE,S,5,SMALLINT,5,null,null,10,0,,null,null,null,null,2,NO -,APP,LOUIE,C30,1,CHAR,30,null,null,10,0,,null,null,null,60,3,NO -,APP,LOUIE,VC10,12,VARCHAR,10,null,null,10,0,,'asdf',null,null,20,4,NO -,APP,LOUIE,AI,-5,BIGINT,19,null,null,10,0,,AUTOINCREMENT: start -10 increment 2001,null,null,null,5,NO +,APP,LOUIE,I,4,INTEGER,10,null,0,10,0,,10,null,null,null,1,NO +,APP,LOUIE,S,5,SMALLINT,5,null,0,10,0,,null,null,null,null,2,NO +,APP,LOUIE,C30,1,CHAR,30,null,null,null,0,,null,null,null,60,3,NO +,APP,LOUIE,VC10,12,VARCHAR,10,null,null,null,0,,'asdf',null,null,20,4,NO +,APP,LOUIE,AI,-5,BIGINT,19,null,0,10,0,,AUTOINCREMENT: start -10 increment 2001,null,null,null,5,NO getColumns('INFLIGHT'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,INFLIGHT,FLT_NUM,1,CHAR,20,null,null,10,0,,null,null,null,40,1,NO -,APP,INFLIGHT,FLT_ORIGIN,1,CHAR,6,null,null,10,1,,null,null,null,12,2,YES -,APP,INFLIGHT,FLT_DEST,1,CHAR,6,null,null,10,1,,null,null,null,12,3,YES -,APP,INFLIGHT,FLT_AIRCRAFT,1,CHAR,20,null,null,10,1,,null,null,null,40,4,YES -,APP,INFLIGHT,FLT_FLYING_TIME,12,VARCHAR,22,null,null,10,1,,null,null,null,44,5,YES -,APP,INFLIGHT,FLT_DEPT_TIME,1,CHAR,8,null,null,10,1,,null,null,null,16,6,YES -,APP,INFLIGHT,FLT_ARR_TIME,1,CHAR,8,null,null,10,1,,null,null,null,16,7,YES -,APP,INFLIGHT,FLT_NOTES,12,VARCHAR,510,null,null,10,1,,null,null,null,1020,8,YES -,APP,INFLIGHT,FLT_DAYS_OF_WK,1,CHAR,14,null,null,10,1,,null,null,null,28,9,YES -,APP,INFLIGHT,FLT_CRAFT_PIC,12,VARCHAR,32672,null,null,10,1,,null,null,null,65344,10,YES +,APP,INFLIGHT,FLT_NUM,1,CHAR,20,null,null,null,0,,null,null,null,40,1,NO +,APP,INFLIGHT,FLT_ORIGIN,1,CHAR,6,null,null,null,1,,null,null,null,12,2,YES +,APP,INFLIGHT,FLT_DEST,1,CHAR,6,null,null,null,1,,null,null,null,12,3,YES +,APP,INFLIGHT,FLT_AIRCRAFT,1,CHAR,20,null,null,null,1,,null,null,null,40,4,YES +,APP,INFLIGHT,FLT_FLYING_TIME,12,VARCHAR,22,null,null,null,1,,null,null,null,44,5,YES +,APP,INFLIGHT,FLT_DEPT_TIME,1,CHAR,8,null,null,null,1,,null,null,null,16,6,YES +,APP,INFLIGHT,FLT_ARR_TIME,1,CHAR,8,null,null,null,1,,null,null,null,16,7,YES +,APP,INFLIGHT,FLT_NOTES,12,VARCHAR,510,null,null,null,1,,null,null,null,1020,8,YES +,APP,INFLIGHT,FLT_DAYS_OF_WK,1,CHAR,14,null,null,null,1,,null,null,null,28,9,YES +,APP,INFLIGHT,FLT_CRAFT_PIC,12,VARCHAR,32672,null,null,null,1,,null,null,null,65344,10,YES getColumnPrivileges(): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],GRANTOR[VARCHAR],GRANTEE[VARCHAR],PRIVILEGE[VARCHAR],IS_GRANTABLE[VARCHAR] getTablePrivileges(): @@ -278,10 +278,10 @@ getBestRowIdentifier("",null,"LOUIE"): SCOPE[SMALLINT],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[SMALLINT],PSEUDO_COLUMN[SMALLINT] 2,I,4,INTEGER,4,null,10,1 -2,VC10,12,VARCHAR,10,null,0,1 +2,VC10,12,VARCHAR,10,null,null,1 getBestRowIdentifier("","SYS","SYSTABLES"): SCOPE[SMALLINT],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[SMALLINT],PSEUDO_COLUMN[SMALLINT] -2,TABLEID,1,CHAR,36,null,0,1 +2,TABLEID,1,CHAR,36,null,null,1 getVersionColumns(): SCOPE[INTEGER],COLUMN_NAME[VARCHAR],DATA_TYPE[INTEGER],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],PSEUDO_COLUMN[INTEGER] getPrimaryKeys(): @@ -369,25 +369,25 @@ getTypeInfo(): TYPE_NAME[VARCHAR],DATA_TYPE[SMALLINT],PRECISION[INTEGER],LITERAL_PREFIX[VARCHAR],LITERAL_SUFFIX[VARCHAR],CREATE_PARAMS[VARCHAR],NULLABLE[INTEGER],CASE_SENSITIVE[SMALLINT],SEARCHABLE[INTEGER],UNSIGNED_ATTRIBUTE[SMALLINT],FIXED_PREC_SCALE[SMALLINT],AUTO_INCREMENT[SMALLINT],LOCAL_TYPE_NAME[VARCHAR],MINIMUM_SCALE[INTEGER],MAXIMUM_SCALE[INTEGER],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],NUM_PREC_RADIX[INTEGER] BIGINT,-5,19,null,null,null,1,0,2,0,0,1,BIGINT,0,0,null,null,10 -LONG VARCHAR FOR BIT DATA,-4,32700,X',',null,1,0,2,1,0,0,LONG VARCHAR FOR BIT DATA,0,0,null,null,0 -VARCHAR () FOR BIT DATA,-3,32762,X',',length,1,0,2,1,0,0,VARCHAR () FOR BIT DATA,0,0,null,null,2 -CHAR () FOR BIT DATA,-2,254,X',',length,1,0,2,1,0,0,CHAR () FOR BIT DATA,0,0,null,null,2 -LONG VARCHAR,-1,32700,',',null,1,1,3,1,0,0,LONG VARCHAR,0,0,null,null,0 -LONG NVARCHAR,-1,32700,',',null,1,1,3,1,0,0,LONG NVARCHAR,0,0,null,null,0 -CHAR,1,254,',',length,1,1,3,1,0,0,CHAR,0,0,null,null,0 -NATIONAL CHAR,1,2147483647,',',length,1,1,3,1,0,0,NATIONAL CHAR,0,0,null,null,0 +LONG VARCHAR FOR BIT DATA,-4,32700,X',',null,1,0,2,1,0,0,LONG VARCHAR FOR BIT DATA,null,null,null,null,null +VARCHAR () FOR BIT DATA,-3,32762,X',',length,1,0,2,1,0,0,VARCHAR () FOR BIT DATA,null,null,null,null,null +CHAR () FOR BIT DATA,-2,254,X',',length,1,0,2,1,0,0,CHAR () FOR BIT DATA,null,null,null,null,null +LONG VARCHAR,-1,32700,',',null,1,1,3,1,0,0,LONG VARCHAR,null,null,null,null,null +LONG NVARCHAR,-1,32700,',',null,1,1,3,1,0,0,LONG NVARCHAR,null,null,null,null,null +CHAR,1,254,',',length,1,1,3,1,0,0,CHAR,null,null,null,null,null +NATIONAL CHAR,1,2147483647,',',length,1,1,3,1,0,0,NATIONAL CHAR,null,null,null,null,null NUMERIC,2,31,null,null,precision,scale,1,0,2,0,1,0,NUMERIC,0,32767,null,null,10 DECIMAL,3,31,null,null,precision,scale,1,0,2,0,1,0,DECIMAL,0,32767,null,null,10 INTEGER,4,10,null,null,null,1,0,2,0,0,1,INTEGER,0,0,null,null,10 SMALLINT,5,5,null,null,null,1,0,2,0,0,1,SMALLINT,0,0,null,null,10 -FLOAT,6,52,null,null,precision,1,0,2,0,0,0,FLOAT,0,0,null,null,2 -REAL,7,23,null,null,null,1,0,2,0,0,0,REAL,0,0,null,null,2 -DOUBLE,8,52,null,null,null,1,0,2,0,0,0,DOUBLE,0,0,null,null,2 -VARCHAR,12,32672,',',length,1,1,3,1,0,0,VARCHAR,0,0,null,null,0 -NATIONAL CHAR VARYING,12,2147483647,',',length,1,1,3,1,0,0,NATIONAL CHAR VARYING,0,0,null,null,0 -DATE,91,10,DATE',',null,1,0,2,1,0,0,DATE,0,0,null,null,0 -TIME,92,0,TIME',',null,1,0,2,1,0,0,TIME,0,0,null,null,0 -TIMESTAMP,93,0,TIMESTAMP',',null,1,0,2,1,0,0,TIMESTAMP,0,0,null,null,0 +FLOAT,6,52,null,null,precision,1,0,2,0,0,0,FLOAT,null,null,null,null,2 +REAL,7,23,null,null,null,1,0,2,0,0,0,REAL,null,null,null,null,2 +DOUBLE,8,52,null,null,null,1,0,2,0,0,0,DOUBLE,null,null,null,null,2 +VARCHAR,12,32672,',',length,1,1,3,1,0,0,VARCHAR,null,null,null,null,null +NATIONAL CHAR VARYING,12,2147483647,',',length,1,1,3,1,0,0,NATIONAL CHAR VARYING,null,null,null,null,null +DATE,91,10,DATE',',null,1,0,2,1,0,0,DATE,null,null,null,null,null +TIME,92,0,TIME',',null,1,0,2,1,0,0,TIME,null,null,null,null,null +TIMESTAMP,93,0,TIMESTAMP',',null,1,0,2,1,0,0,TIMESTAMP,null,null,null,null,null BLOB,2004,2147483647,null,null,length,1,0,1,null,0,null,BLOB,null,null,null,null,null CLOB,2005,2147483647,',',length,1,1,1,null,0,null,CLOB,null,null,null,null,null getIndexInfo(): @@ -406,11 +406,11 @@ ,SYS,SYSTABLES,0,,SYSTABLES_INDEX2,3,1,TABLEID,A,null,null,null getColumns('SYSTABLES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,10,0,,null,null,null,72,1,NO -,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,10,0,,null,null,null,256,2,NO -,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,10,0,,null,null,null,2,3,NO -,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,10,0,,null,null,null,72,4,NO -,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,10,0,,null,null,null,2,5,NO +,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,null,0,,null,null,null,72,1,NO +,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,null,0,,null,null,null,256,2,NO +,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,null,0,,null,null,null,2,3,NO +,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,null,0,,null,null,null,72,4,NO +,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,null,0,,null,null,null,2,5,NO ----- Referential action values RESTRICT = 1 Index: java/testing/org/apache/derbyTesting/functionTests/master/forbitdata.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/forbitdata.out (revision 153297) +++ java/testing/org/apache/derbyTesting/functionTests/master/forbitdata.out (working copy) @@ -17,14 +17,14 @@ CREATE TABLE FBDOK.T006 (C006 VARCHAR(100) FOR BIT DATA) CREATE TABLE FBDOK.T007 (C007 VARCHAR(32672) FOR BIT DATA) CREATE TABLE FBDOK.T008 (C008 LONG VARCHAR FOR BIT DATA) -FBDOK,T001,C001,-2,CHAR () FOR BIT DATA,1,null,10,1,null,null,1,YES -FBDOK,T002,C002,-2,CHAR () FOR BIT DATA,1,null,10,1,null,null,1,YES -FBDOK,T003,C003,-2,CHAR () FOR BIT DATA,10,null,10,1,null,null,1,YES -FBDOK,T004,C004,-2,CHAR () FOR BIT DATA,254,null,10,1,null,null,1,YES -FBDOK,T005,C005,-3,VARCHAR () FOR BIT DATA,1,null,10,1,null,null,1,YES -FBDOK,T006,C006,-3,VARCHAR () FOR BIT DATA,100,null,10,1,null,null,1,YES -FBDOK,T007,C007,-3,VARCHAR () FOR BIT DATA,32672,null,10,1,null,null,1,YES -FBDOK,T008,C008,-4,LONG VARCHAR FOR BIT DATA,32700,null,10,1,null,null,1,YES +FBDOK,T001,C001,-2,CHAR () FOR BIT DATA,1,null,null,1,null,null,1,YES +FBDOK,T002,C002,-2,CHAR () FOR BIT DATA,1,null,null,1,null,null,1,YES +FBDOK,T003,C003,-2,CHAR () FOR BIT DATA,10,null,null,1,null,null,1,YES +FBDOK,T004,C004,-2,CHAR () FOR BIT DATA,254,null,null,1,null,null,1,YES +FBDOK,T005,C005,-3,VARCHAR () FOR BIT DATA,1,null,null,1,null,null,1,YES +FBDOK,T006,C006,-3,VARCHAR () FOR BIT DATA,100,null,null,1,null,null,1,YES +FBDOK,T007,C007,-3,VARCHAR () FOR BIT DATA,32672,null,null,1,null,null,1,YES +FBDOK,T008,C008,-4,LONG VARCHAR FOR BIT DATA,32700,null,null,1,null,null,1,YES TABLE FBDOK.T001 C001 CHAR () FOR BIT DATA precision 1 TABLE FBDOK.T002 Index: java/testing/org/apache/derbyTesting/functionTests/master/xaSimplePositive.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/xaSimplePositive.out (revision 153297) +++ java/testing/org/apache/derbyTesting/functionTests/master/xaSimplePositive.out (working copy) @@ -90,7 +90,21 @@ ------------------------------------------------------------- (1 |PREPARED|false|SKU |UserTransaction (2 |PREPARED|false|SKU |UserTransaction -ij(XA)> xa_recover xa_startrscan; +ij(XA)> -- NOTE: The following call to "xa_recover xa_startrscan" is apt to +-- return the result set rows in reverse order when changes to +-- the Derby engine affect the number of transactions that it takes +-- to create a database. The transactions are stored in a hash table +-- based on a global and local id, and when the number of transactions +-- changes, the (internal) local id can change, which may lead to a +-- change in the result set order. This order is determined by the +-- JVM's hashing algorithm. Examples of changes to the engine that +-- can affect this include ones that cause more commits or that +-- change the amount of data being stored, such as changes to the +-- metadata statements (which is what prompted this explanation in +-- the first place). Ultimately, the problem is that there is no +-- way to order the return values from "xa_recover" since it is an +-- ij internal statement, not SQL... +xa_recover xa_startrscan; Recovered 2 in doubt transactions Transaction 1 : (2,FILTERED,FILTERED) Transaction 2 : (1,FILTERED,FILTERED) Index: java/testing/org/apache/derbyTesting/functionTests/master/metadata.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/metadata.out (revision 153297) +++ java/testing/org/apache/derbyTesting/functionTests/master/metadata.out (working copy) @@ -154,24 +154,24 @@ getConnection(): same connection getProcedureColumns(): PROCEDURE_CAT[VARCHAR],PROCEDURE_SCHEM[VARCHAR],PROCEDURE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],COLUMN_TYPE[SMALLINT],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],PRECISION[INTEGER],LENGTH[INTEGER],SCALE[SMALLINT],RADIX[SMALLINT],NULLABLE[SMALLINT],REMARKS[VARCHAR],METHOD_ID[SMALLINT],PARAMETER_ID[SMALLINT] -null,APP,GETPCTEST1,OUTB,4,12,VARCHAR,3,3,0,10,1,null,12,0 -null,APP,GETPCTEST1,A,1,12,VARCHAR,3,3,0,10,1,null,12,1 +null,APP,GETPCTEST1,OUTB,4,12,VARCHAR,3,3,null,null,1,null,12,0 +null,APP,GETPCTEST1,A,1,12,VARCHAR,3,3,null,null,1,null,12,1 null,APP,GETPCTEST1,B,1,2,NUMERIC,5,6,0,10,1,null,12,2 null,APP,GETPCTEST1,C,1,5,SMALLINT,5,2,0,10,1,null,12,3 null,APP,GETPCTEST1,E,1,5,SMALLINT,5,2,0,10,1,null,12,4 null,APP,GETPCTEST1,F,1,4,INTEGER,10,4,0,10,1,null,12,5 null,APP,GETPCTEST1,G,1,-5,BIGINT,19,8,0,10,1,null,12,6 -null,APP,GETPCTEST1,H,1,8,DOUBLE,52,8,0,2,1,null,12,7 -null,APP,GETPCTEST1,I,1,8,DOUBLE,52,8,0,2,1,null,12,8 -null,APP,GETPCTEST1,K,1,91,DATE,10,-1,0,10,1,null,12,9 -null,APP,GETPCTEST1,L,1,92,TIME,8,-1,0,10,1,null,12,10 -null,APP,GETPCTEST1,T,1,93,TIMESTAMP,26,-1,0,10,1,null,12,11 +null,APP,GETPCTEST1,H,1,8,DOUBLE,52,8,null,2,1,null,12,7 +null,APP,GETPCTEST1,I,1,8,DOUBLE,52,8,null,2,1,null,12,8 +null,APP,GETPCTEST1,K,1,91,DATE,10,-1,null,null,1,null,12,9 +null,APP,GETPCTEST1,L,1,92,TIME,8,-1,null,null,1,null,12,10 +null,APP,GETPCTEST1,T,1,93,TIMESTAMP,26,-1,null,null,1,null,12,11 null,APP,GETPCTEST2,PA,1,4,INTEGER,10,4,0,10,1,null,2,0 null,APP,GETPCTEST2,PB,1,-5,BIGINT,19,8,0,10,1,null,2,1 -null,APP,GETPCTEST3A,STRING1,1,12,VARCHAR,5,5,0,10,1,null,2,0 -null,APP,GETPCTEST3A,STRING2,4,12,VARCHAR,5,5,0,10,1,null,2,1 -null,APP,GETPCTEST3B,STRING3,1,12,VARCHAR,5,5,0,10,1,null,2,0 -null,APP,GETPCTEST3B,STRING4,2,12,VARCHAR,5,5,0,10,1,null,2,1 +null,APP,GETPCTEST3A,STRING1,1,12,VARCHAR,5,5,null,null,1,null,2,0 +null,APP,GETPCTEST3A,STRING2,4,12,VARCHAR,5,5,null,null,1,null,2,1 +null,APP,GETPCTEST3B,STRING3,1,12,VARCHAR,5,5,null,null,1,null,2,0 +null,APP,GETPCTEST3B,STRING4,2,12,VARCHAR,5,5,null,null,1,null,2,1 null,APP,GETPCTEST4BX,RETPARAM,4,4,INTEGER,10,4,0,10,1,null,1,0 getTables() with TABLE_TYPE in ('SYSTEM TABLE') : TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],TABLE_TYPE[VARCHAR],REMARKS[VARCHAR] @@ -234,43 +234,43 @@ TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] getColumns('SYSTABLES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,10,0,,null,null,null,72,1,NO -,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,10,0,,null,null,null,256,2,NO -,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,10,0,,null,null,null,2,3,NO -,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,10,0,,null,null,null,72,4,NO -,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,10,0,,null,null,null,2,5,NO +,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,null,0,,null,null,null,72,1,NO +,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,null,0,,null,null,null,256,2,NO +,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,null,0,,null,null,null,2,3,NO +,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,null,0,,null,null,null,72,4,NO +,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,null,0,,null,null,null,2,5,NO getColumns('ALLTYPES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,ALLTYPES,SMALLINTCOL,5,SMALLINT,5,null,null,10,1,,null,null,null,null,1,YES -,APP,ALLTYPES,INTCOL,4,INTEGER,10,null,null,10,1,,20,null,null,null,2,YES -,APP,ALLTYPES,BIGINTCOL,-5,BIGINT,19,null,null,10,1,,null,null,null,null,3,YES +,APP,ALLTYPES,SMALLINTCOL,5,SMALLINT,5,null,0,10,1,,null,null,null,null,1,YES +,APP,ALLTYPES,INTCOL,4,INTEGER,10,null,0,10,1,,20,null,null,null,2,YES +,APP,ALLTYPES,BIGINTCOL,-5,BIGINT,19,null,0,10,1,,null,null,null,null,3,YES ,APP,ALLTYPES,REALCOL,7,REAL,23,null,null,2,1,,null,null,null,null,4,YES ,APP,ALLTYPES,DOUBLEPRECCOL,8,DOUBLE,52,null,null,2,1,,10,null,null,null,5,YES ,APP,ALLTYPES,DECIMALCOL10P4S,3,DECIMAL,10,null,4,10,1,,null,null,null,null,6,YES ,APP,ALLTYPES,NUMERICCOL20P2S,2,NUMERIC,20,null,2,10,1,,null,null,null,null,7,YES -,APP,ALLTYPES,CHAR8COL___,1,CHAR,8,null,null,10,1,,null,null,null,16,8,YES -,APP,ALLTYPES,VARCHAR9COL,12,VARCHAR,9,null,null,10,1,,null,null,null,18,9,YES -,APP,ALLTYPES,LONGVARCHARCOL,-1,LONG VARCHAR,32700,null,null,10,1,,null,null,null,null,10,YES -,APP,ALLTYPES,BLOBCOL,2004,BLOB,3072,null,null,10,1,,null,null,null,null,11,YES +,APP,ALLTYPES,CHAR8COL___,1,CHAR,8,null,null,null,1,,null,null,null,16,8,YES +,APP,ALLTYPES,VARCHAR9COL,12,VARCHAR,9,null,null,null,1,,null,null,null,18,9,YES +,APP,ALLTYPES,LONGVARCHARCOL,-1,LONG VARCHAR,32700,null,null,null,1,,null,null,null,null,10,YES +,APP,ALLTYPES,BLOBCOL,2004,BLOB,3072,null,null,null,1,,null,null,null,null,11,YES getColumns('LOUIE'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,LOUIE,I,4,INTEGER,10,null,null,10,0,,10,null,null,null,1,NO -,APP,LOUIE,S,5,SMALLINT,5,null,null,10,0,,null,null,null,null,2,NO -,APP,LOUIE,C30,1,CHAR,30,null,null,10,0,,null,null,null,60,3,NO -,APP,LOUIE,VC10,12,VARCHAR,10,null,null,10,0,,'asdf',null,null,20,4,NO -,APP,LOUIE,AI,-5,BIGINT,19,null,null,10,0,,AUTOINCREMENT: start -10 increment 2001,null,null,null,5,NO +,APP,LOUIE,I,4,INTEGER,10,null,0,10,0,,10,null,null,null,1,NO +,APP,LOUIE,S,5,SMALLINT,5,null,0,10,0,,null,null,null,null,2,NO +,APP,LOUIE,C30,1,CHAR,30,null,null,null,0,,null,null,null,60,3,NO +,APP,LOUIE,VC10,12,VARCHAR,10,null,null,null,0,,'asdf',null,null,20,4,NO +,APP,LOUIE,AI,-5,BIGINT,19,null,0,10,0,,AUTOINCREMENT: start -10 increment 2001,null,null,null,5,NO getColumns('INFLIGHT'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,APP,INFLIGHT,FLT_NUM,1,CHAR,20,null,null,10,0,,null,null,null,40,1,NO -,APP,INFLIGHT,FLT_ORIGIN,1,CHAR,6,null,null,10,1,,null,null,null,12,2,YES -,APP,INFLIGHT,FLT_DEST,1,CHAR,6,null,null,10,1,,null,null,null,12,3,YES -,APP,INFLIGHT,FLT_AIRCRAFT,1,CHAR,20,null,null,10,1,,null,null,null,40,4,YES -,APP,INFLIGHT,FLT_FLYING_TIME,12,VARCHAR,22,null,null,10,1,,null,null,null,44,5,YES -,APP,INFLIGHT,FLT_DEPT_TIME,1,CHAR,8,null,null,10,1,,null,null,null,16,6,YES -,APP,INFLIGHT,FLT_ARR_TIME,1,CHAR,8,null,null,10,1,,null,null,null,16,7,YES -,APP,INFLIGHT,FLT_NOTES,12,VARCHAR,510,null,null,10,1,,null,null,null,1020,8,YES -,APP,INFLIGHT,FLT_DAYS_OF_WK,1,CHAR,14,null,null,10,1,,null,null,null,28,9,YES -,APP,INFLIGHT,FLT_CRAFT_PIC,12,VARCHAR,32672,null,null,10,1,,null,null,null,65344,10,YES +,APP,INFLIGHT,FLT_NUM,1,CHAR,20,null,null,null,0,,null,null,null,40,1,NO +,APP,INFLIGHT,FLT_ORIGIN,1,CHAR,6,null,null,null,1,,null,null,null,12,2,YES +,APP,INFLIGHT,FLT_DEST,1,CHAR,6,null,null,null,1,,null,null,null,12,3,YES +,APP,INFLIGHT,FLT_AIRCRAFT,1,CHAR,20,null,null,null,1,,null,null,null,40,4,YES +,APP,INFLIGHT,FLT_FLYING_TIME,12,VARCHAR,22,null,null,null,1,,null,null,null,44,5,YES +,APP,INFLIGHT,FLT_DEPT_TIME,1,CHAR,8,null,null,null,1,,null,null,null,16,6,YES +,APP,INFLIGHT,FLT_ARR_TIME,1,CHAR,8,null,null,null,1,,null,null,null,16,7,YES +,APP,INFLIGHT,FLT_NOTES,12,VARCHAR,510,null,null,null,1,,null,null,null,1020,8,YES +,APP,INFLIGHT,FLT_DAYS_OF_WK,1,CHAR,14,null,null,null,1,,null,null,null,28,9,YES +,APP,INFLIGHT,FLT_CRAFT_PIC,12,VARCHAR,32672,null,null,null,1,,null,null,null,65344,10,YES getColumnPrivileges(): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],GRANTOR[VARCHAR],GRANTEE[VARCHAR],PRIVILEGE[VARCHAR],IS_GRANTABLE[VARCHAR] getTablePrivileges(): @@ -278,10 +278,10 @@ getBestRowIdentifier("",null,"LOUIE"): SCOPE[SMALLINT],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[SMALLINT],PSEUDO_COLUMN[SMALLINT] 2,I,4,INTEGER,4,null,10,1 -2,VC10,12,VARCHAR,10,null,0,1 +2,VC10,12,VARCHAR,10,null,null,1 getBestRowIdentifier("","SYS","SYSTABLES"): SCOPE[SMALLINT],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[SMALLINT],PSEUDO_COLUMN[SMALLINT] -2,TABLEID,1,CHAR,36,null,0,1 +2,TABLEID,1,CHAR,36,null,null,1 getVersionColumns(): SCOPE[INTEGER],COLUMN_NAME[VARCHAR],DATA_TYPE[INTEGER],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],PSEUDO_COLUMN[INTEGER] getPrimaryKeys(): @@ -369,25 +369,25 @@ getTypeInfo(): TYPE_NAME[VARCHAR],DATA_TYPE[SMALLINT],PRECISION[INTEGER],LITERAL_PREFIX[VARCHAR],LITERAL_SUFFIX[VARCHAR],CREATE_PARAMS[VARCHAR],NULLABLE[INTEGER],CASE_SENSITIVE[BOOLEAN],SEARCHABLE[INTEGER],UNSIGNED_ATTRIBUTE[BOOLEAN],FIXED_PREC_SCALE[BOOLEAN],AUTO_INCREMENT[BOOLEAN],LOCAL_TYPE_NAME[VARCHAR],MINIMUM_SCALE[INTEGER],MAXIMUM_SCALE[INTEGER],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],NUM_PREC_RADIX[INTEGER] BIGINT,-5,19,null,null,null,1,false,2,false,false,true,BIGINT,0,0,null,null,10 -LONG VARCHAR FOR BIT DATA,-4,32700,X',',null,1,false,2,true,false,false,LONG VARCHAR FOR BIT DATA,0,0,null,null,0 -VARCHAR () FOR BIT DATA,-3,32762,X',',length,1,false,2,true,false,false,VARCHAR () FOR BIT DATA,0,0,null,null,2 -CHAR () FOR BIT DATA,-2,254,X',',length,1,false,2,true,false,false,CHAR () FOR BIT DATA,0,0,null,null,2 -LONG VARCHAR,-1,32700,',',null,1,true,3,true,false,false,LONG VARCHAR,0,0,null,null,0 -LONG NVARCHAR,-1,32700,',',null,1,true,3,true,false,false,LONG NVARCHAR,0,0,null,null,0 -CHAR,1,254,',',length,1,true,3,true,false,false,CHAR,0,0,null,null,0 -NATIONAL CHAR,1,2147483647,',',length,1,true,3,true,false,false,NATIONAL CHAR,0,0,null,null,0 +LONG VARCHAR FOR BIT DATA,-4,32700,X',',null,1,false,2,true,false,false,LONG VARCHAR FOR BIT DATA,null,null,null,null,null +VARCHAR () FOR BIT DATA,-3,32762,X',',length,1,false,2,true,false,false,VARCHAR () FOR BIT DATA,null,null,null,null,null +CHAR () FOR BIT DATA,-2,254,X',',length,1,false,2,true,false,false,CHAR () FOR BIT DATA,null,null,null,null,null +LONG VARCHAR,-1,32700,',',null,1,true,3,true,false,false,LONG VARCHAR,null,null,null,null,null +LONG NVARCHAR,-1,32700,',',null,1,true,3,true,false,false,LONG NVARCHAR,null,null,null,null,null +CHAR,1,254,',',length,1,true,3,true,false,false,CHAR,null,null,null,null,null +NATIONAL CHAR,1,2147483647,',',length,1,true,3,true,false,false,NATIONAL CHAR,null,null,null,null,null NUMERIC,2,31,null,null,precision,scale,1,false,2,false,true,false,NUMERIC,0,32767,null,null,10 DECIMAL,3,31,null,null,precision,scale,1,false,2,false,true,false,DECIMAL,0,32767,null,null,10 INTEGER,4,10,null,null,null,1,false,2,false,false,true,INTEGER,0,0,null,null,10 SMALLINT,5,5,null,null,null,1,false,2,false,false,true,SMALLINT,0,0,null,null,10 -FLOAT,6,52,null,null,precision,1,false,2,false,false,false,FLOAT,0,0,null,null,2 -REAL,7,23,null,null,null,1,false,2,false,false,false,REAL,0,0,null,null,2 -DOUBLE,8,52,null,null,null,1,false,2,false,false,false,DOUBLE,0,0,null,null,2 -VARCHAR,12,32672,',',length,1,true,3,true,false,false,VARCHAR,0,0,null,null,0 -NATIONAL CHAR VARYING,12,2147483647,',',length,1,true,3,true,false,false,NATIONAL CHAR VARYING,0,0,null,null,0 -DATE,91,10,DATE',',null,1,false,2,true,false,false,DATE,0,0,null,null,0 -TIME,92,0,TIME',',null,1,false,2,true,false,false,TIME,0,0,null,null,0 -TIMESTAMP,93,0,TIMESTAMP',',null,1,false,2,true,false,false,TIMESTAMP,0,0,null,null,0 +FLOAT,6,52,null,null,precision,1,false,2,false,false,false,FLOAT,null,null,null,null,2 +REAL,7,23,null,null,null,1,false,2,false,false,false,REAL,null,null,null,null,2 +DOUBLE,8,52,null,null,null,1,false,2,false,false,false,DOUBLE,null,null,null,null,2 +VARCHAR,12,32672,',',length,1,true,3,true,false,false,VARCHAR,null,null,null,null,null +NATIONAL CHAR VARYING,12,2147483647,',',length,1,true,3,true,false,false,NATIONAL CHAR VARYING,null,null,null,null,null +DATE,91,10,DATE',',null,1,false,2,true,false,false,DATE,null,null,null,null,null +TIME,92,0,TIME',',null,1,false,2,true,false,false,TIME,null,null,null,null,null +TIMESTAMP,93,0,TIMESTAMP',',null,1,false,2,true,false,false,TIMESTAMP,null,null,null,null,null BLOB,2004,2147483647,null,null,length,1,false,1,null,false,null,BLOB,null,null,null,null,null CLOB,2005,2147483647,',',length,1,true,1,null,false,null,CLOB,null,null,null,null,null getIndexInfo(): @@ -406,11 +406,11 @@ ,SYS,SYSTABLES,false,,SYSTABLES_INDEX2,3,1,TABLEID,A,null,null,null getColumns('SYSTABLES'): TABLE_CAT[VARCHAR],TABLE_SCHEM[VARCHAR],TABLE_NAME[VARCHAR],COLUMN_NAME[VARCHAR],DATA_TYPE[SMALLINT],TYPE_NAME[VARCHAR],COLUMN_SIZE[INTEGER],BUFFER_LENGTH[INTEGER],DECIMAL_DIGITS[INTEGER],NUM_PREC_RADIX[INTEGER],NULLABLE[INTEGER],REMARKS[VARCHAR],COLUMN_DEF[VARCHAR],SQL_DATA_TYPE[INTEGER],SQL_DATETIME_SUB[INTEGER],CHAR_OCTET_LENGTH[INTEGER],ORDINAL_POSITION[INTEGER],IS_NULLABLE[VARCHAR] -,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,10,0,,null,null,null,72,1,NO -,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,10,0,,null,null,null,256,2,NO -,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,10,0,,null,null,null,2,3,NO -,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,10,0,,null,null,null,72,4,NO -,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,10,0,,null,null,null,2,5,NO +,SYS,SYSTABLES,TABLEID,1,CHAR,36,null,null,null,0,,null,null,null,72,1,NO +,SYS,SYSTABLES,TABLENAME,12,VARCHAR,128,null,null,null,0,,null,null,null,256,2,NO +,SYS,SYSTABLES,TABLETYPE,1,CHAR,1,null,null,null,0,,null,null,null,2,3,NO +,SYS,SYSTABLES,SCHEMAID,1,CHAR,36,null,null,null,0,,null,null,null,72,4,NO +,SYS,SYSTABLES,LOCKGRANULARITY,1,CHAR,1,null,null,null,0,,null,null,null,2,5,NO --------------------------------------- Referential action values RESTRICT = 1 --------------090801010708030101050307--