[ 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)