You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Danoja Dias (JIRA)" <ji...@apache.org> on 2016/05/03 07:32:12 UTC
[jira] [Commented] (DERBY-3181) isNullable on ResultSetMetaData
from DatabaseMetaData.getBestRowIdentifier values are opposite when there
is no rows in ResultSet vs. when there is a row.
[ https://issues.apache.org/jira/browse/DERBY-3181?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15268140#comment-15268140 ]
Danoja Dias commented on DERBY-3181:
------------------------------------
the argument scope of getBestRowIdentifier(String catalog,String schema,String table,int scope,boolean nullable) method must be 0 or 1 or 2. If not it is not a valid argument and It returns an empty resultset.
In the latter part of repro.java, scope is 3 and it execute the following prepared query in metadata.properties file.
getBestRowIdentifierEmpty=\
SELECT SCOPE, COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, \
BUFFER_LENGTH, DECIMAL_DIGITS, PSEUDO_COLUMN \
FROM (VALUES \
(CAST (2 AS SMALLINT), \
CAST ('' AS VARCHAR(128)), \
0, \
CAST ('INT' AS VARCHAR(128)), \
0, \
0, \
CAST (0 AS SMALLINT), \
CAST (0 AS SMALLINT)) \
) AS BESTROWIDENTIFIER( \
SCOPE, COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH, \
DECIMAL_DIGITS, PSEUDO_COLUMN) \
WHERE (1=0)
I think the bug occurs according to the resultset thst returns here.
> 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
> 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)