[
https://issues.apache.org/jira/browse/DERBY-3181?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15295090#comment-15295090
]
Bryan Pendleton commented on DERBY-3181:
----------------------------------------
Hi Danoja, it is great to hear that the tests are working better now in your
environment.
I think that, to move ahead with this change, we need to improve our patch
slightly
so that we use a real Derby message for this error, rather than the hard-coded
"Invalid scope" string in the experimental patch we've been testing.
This is a good chance to learn how we add a new error message to Derby.
So this means:
1) Modify java/shared/org/apache/derby/shared/common/reference/SQLState.java
to define a new SQL state value for this error condition. I think you can
just
follow the pattern that is already in that file; try going to around line
950 in
that file, pick a new unused SQLState code (e.g., 42XAT, perhaps?), and give
it a friendly name, like LANG_INVALID_ROWID_SCOPE
2) Modify java/engine/org/apache/derby/loc/messages.xml to add your message
text.
Just go to the corresponding location in that file (that is, where your
SQLState
lines up with the other SQLStates in its range), and add a XML text block
that
provides a message about the invalid scope value.
I think that our error message should take the scope value as an argument, so
something like: "Invalid row identifier scope: {0}"
3) Then, we want our test code in DatabaseMetaDataTest.java to do more than
just catch-and-ignore the SQLException for invalid scope; we want it to check
that it got the right message in this case, so we need the catch block to say
assertSQLState( ...), like we do elsewhere in those tests (see around lines
3585, say)
After I add a new message, I always do a complete rebuild by doing
ant clobber cleanjars
ant all
Once you think you've got your proposed patch all tidied up, and you've checked
that the tests are still passing, please post your proposed final patch for
review.
Thanks!
> 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: Derby-3181.diff, repro.java, testChange.diff
>
>
> 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)