[ 
https://issues.apache.org/jira/browse/DERBY-3181?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15270231#comment-15270231
 ] 

Danoja Dias commented on DERBY-3181:
------------------------------------

In the first case of repro.java 
it runs following query for getBestRowIdentifier method,
getBestRowIdentifierAllColumns=\
        SELECT \
                CAST (java.sql.DatabaseMetaData::bestRowSession AS SMALLINT) AS 
SCOPE, \
                COLS.COLUMNNAME AS COLUMN_NAME, \
                COLS.COLUMNDATATYPE.getJDBCTypeId() AS DATA_TYPE, \
                CAST (COLS.COLUMNDATATYPE.getTypeName() AS VARCHAR(128)) AS 
TYPE_NAME, \
                COLS.COLUMNDATATYPE.getMaximumWidth() AS COLUMN_SIZE, \
                CAST (NULL AS INT) AS BUFFER_LENGTH, \
                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, \
                        java.sql.Types::DATE, java.sql.Types::TIME, \
                        java.sql.Types::TIMESTAMP)) \
                                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  \
        WHERE COLS.REFERENCEID = TABS.TABLEID  \
          AND TABS.SCHEMAID = SCHEMAS.SCHEMAID  \
          AND ((1=1) OR % IS NOT NULL)  \
          AND (SCHEMAS.SCHEMANAME LIKE APP)  \
          AND (TABS.TABLENAME=a) \
          AND 1 BETWEEN 0 AND 2  \
          AND (1<>0 OR NOT COLS.COLUMNDATATYPE.isNullable())

> isNullable on ResultSetMetaData from DatabaseMetaData.getBestRowIdentifier 
> values are opposite when there is no rows in ResultSet vs. when there is a 
> row.
> ----------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3181
>                 URL: https://issues.apache.org/jira/browse/DERBY-3181
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.4.1.3
>            Reporter: Myrna van Lunteren
>            Assignee: Danoja Dias
>            Priority: Trivial
>              Labels: derby_triage10_5_2
>         Attachments: repro.java
>
>
> With code like the following: 
>            DatabaseMetaData dmd = conn.getMetaData(); 
>             ResultSet rs = dmd.getBestRowIdentifier(null,"APP","a",3,true);
>             ResultSetMetaData rsmd = rs.getMetaData(); 
>             int actualCols = rsmd.getColumnCount(); 
>             for (int i = 0; i < actualCols; i++) 
>             { 
>                  System.out.print("getColumnName: " + rsmd.getColumnName(i+1) 
> + ", isNullable: "); 
>                  System.out.println(rsmd.isNullable(i+1)); 
>             } 
> The printed values for isNullable returned are opposite of what they are when 
> the getBestRowIdentifier call looks like this:
>             ResultSet rs = dmd.getBestRowIdentifier(null,"APP","a",1,true);
> In the latter case, the values are:
> getColumnName: SCOPE, isNullable: 0
> getColumnName: COLUMN_NAME, isNullable: 1
> getColumnName: DATA_TYPE, isNullable: 0
> getColumnName: TYPE_NAME, isNullable: 1
> getColumnName: COLUMN_SIZE, isNullable: 0
> getColumnName: BUFFER_LENGTH, isNullable: 0
> getColumnName: DECIMAL_DIGITS, isNullable: 0
> getColumnName: PSEUDO_COLUMN, isNullable: 0
> In the first case, the values are:
> getColumnName: SCOPE, isNullable: 1
> getColumnName: COLUMN_NAME, isNullable: 0
> getColumnName: DATA_TYPE, isNullable: 1
> getColumnName: TYPE_NAME, isNullable: 1
> getColumnName: COLUMN_SIZE, isNullable: 1
> getColumnName: BUFFER_LENGTH, isNullable: 1
> getColumnName: DECIMAL_DIGITS, isNullable: 1
> getColumnName: PSEUDO_COLUMN, isNullable: 1
> The isNullable value should be stable. 
> It's probably worthwhile verifying what the value *should* be in the first 
> place.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to