That probably meant new name was OK.... :-) If you can submit your
patch with your new suggestion, I will work to get this committed.
Satheesh
Shreyas Kaushik wrote:
> I sent out a mail having a changed name and did not receive any
> response, hence thought the existing name was ok.
>
> ~Shreyas
>
> Satheesh Bandaram wrote:
>
>> I thought there was a comment to rename the test to more generic name?
>> Or was it for another patch?
>>
>> Satheesh
>>
>> Shreyas Kaushik wrote:
>>
>>
>>
>>> Mamta Satoor wrote:
>>>
>>>
>>>
>>>> Hi Shreyas,
>>>>
>>>> Thanks for taking care of the earlier review comments. I think
>>>> existing test jdbcapi/resultset.java could have been used to add new
>>>> tests for this bug. resultset.java tests various other JDBC apis on
>>>> ResultSet object.
>>>>
>>>>
>>>>
>>>
>>> This is a slightly different case, hence I wanted to keep this
>>> seperate.
>>>
>>>
>>>
>>>> Besides that, I wondered how this test runs in Network Server mode. It
>>>> will be nice to have these generic JDBC tests to be run in both
>>>> embedded and Network Server mode to cover both the Derby offerings.
>>>>
>>>>
>>>>
>>>
>>> I added this test to run with the jdbcapi test suite, anything else I
>>> need to do ?
>>>
>>> If there are no other major comments I guess this can be committed,
>>> can someone do this ?
>>>
>>> ~ Shreyas
>>>
>>>
>>>
>>>> Other than that, the patch and the comments look good to me,
>>>> Mamta
>>>>
>>>> On 5/4/05, Shreyas Kaushik <[EMAIL PROTECTED]> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>> Attached is the new patch taking care of your comments. See inline
>>>>> for
>>>>> answers.
>>>>>
>>>>> ~ Shreyas
>>>>>
>>>>> Satheesh Bandaram wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> Thanks for the patch. Couple of comments:
>>>>>>
>>>>>> 1. New test caseInsensitiveColumn is not part of any testsuite. So,
>>>>>> the test will not get run. You would need to add this to an
>>>>>> existing suite.
>>>>>>
>>>>>>
>>>>>
>>>>> Taken care , will run as a part of the jdbcapi suite.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> 1. Also, you should consider enhancing an existing test script when
>>>>>> adding a new test, rather than creating a new test everytime.
>>>>>> This increases number of tests in a suite, taking it longer to
>>>>>> run them. Instead, updating an existing test is better.
>>>>>>
>>>>>>
>>>>>
>>>>> There was no test case testing this feature, since this is a new
>>>>> feature
>>>>> I added a speprate test. For Derby-203 for adding test cases I am
>>>>> working on building from the existing test cases.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> 1. The patch needs to be generated from the trunk directory, so
>>>>>> your directory path wouldn't show in the patch.
>>>>>> (/drivers/derby/trunk)
>>>>>>
>>>>>>
>>>>>
>>>>> Done.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> Satheesh
>>>>>>
>>>>>> Shreyas Kaushik wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> This is the latest patch.
>>>>>>> I have taken care of comments from Mamta and Dan. Please let me
>>>>>>> know
>>>>>>> if I have missed anything.
>>>>>>>
>>>>>>> ~ Shreyas
>>>>>>>
>>>>>>> ------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Index:
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>>>
>>>>>>>
>>>>>>> ===================================================================
>>>>>>> ---
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>>> (revision 0)
>>>>>>> +++
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>>> (revision 0)
>>>>>>> @@ -0,0 +1,9 @@
>>>>>>> +Test caseInsensitiveColumn starting
>>>>>>> +Before updation...
>>>>>>> +ResultSet is: 1
>>>>>>> +ResultSet is: 346
>>>>>>> +After update...
>>>>>>> +Column Number 1: 900
>>>>>>> +Column Number 2: 346
>>>>>>> +Col COL1: 900
>>>>>>> +Col col1: 900
>>>>>>> Index: java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>>>> ===================================================================
>>>>>>> ---
>>>>>>> java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>>>> (revision 165091)
>>>>>>> +++
>>>>>>> java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>>>> (working copy)
>>>>>>> @@ -3591,8 +3591,14 @@
>>>>>>> ResultDescription rd = resultDescription;
>>>>>>>
>>>>>>> // 1 or 0 based? assume 1 (probably wrong)
>>>>>>> - for (int i=rd.getColumnCount(); i>=1; i--) {
>>>>>>> + // Changing the order in which columns are found from 1
>>>>>>> till column count.
>>>>>>> + // This is necessary in cases where the column names are
>>>>>>> the same but are in different cases.
>>>>>>> + // This is because in updateXXX and getXXX methods column
>>>>>>> names are case insensitive
>>>>>>> + // and in that case the first column should be returned.
>>>>>>> +
>>>>>>> + int columnCount = rd.getColumnCount();
>>>>>>>
>>>>>>> + for(int i = 1 ; i<= columnCount;i++) {
>>>>>>> String name = rd.getColumnDescriptor(i).getName();
>>>>>>> if (StringUtil.SQLEqualsIgnoreCase(columnName, name)) {
>>>>>>> return i;
>>>>>>> Index:
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>>>
>>>>>>>
>>>>>>> ===================================================================
>>>>>>> ---
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>>> (revision 0)
>>>>>>> +++
>>>>>>> /drivers/derby/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>>> (revision 0)
>>>>>>> @@ -0,0 +1,97 @@
>>>>>>> +package org.apache.derbyTesting.functionTests.tests.jdbcapi;
>>>>>>> +
>>>>>>> +
>>>>>>> +import java.sql.*;
>>>>>>> +
>>>>>>> +import org.apache.derby.tools.ij;
>>>>>>> +import org.apache.derby.tools.JDBCDisplayUtil;
>>>>>>> +
>>>>>>> +public class caseInsensitiveColumn {
>>>>>>> +
>>>>>>> + public static void main(String[] args) {
>>>>>>> + test1(args);
>>>>>>> + }
>>>>>>> +
>>>>>>> + public static void test1(String []args) {
>>>>>>> + Connection con;
>>>>>>> + ResultSet rs;
>>>>>>> + Statement stmt = null;
>>>>>>> + PreparedStatement stmt1 = null;
>>>>>>> +
>>>>>>> + System.out.println("Test caseInsensitiveColumn
>>>>>>> starting");
>>>>>>> +
>>>>>>> + try
>>>>>>> + {
>>>>>>> + // use the ij utility to read the
>>>>>>> property file and
>>>>>>> + // make the initial connection.
>>>>>>> + ij.getPropertyArg(args);
>>>>>>> + con = ij.startJBMS();
>>>>>>> +
>>>>>>> + con.setAutoCommit(false);
>>>>>>> +
>>>>>>> + stmt = con.createStatement();
>>>>>>> +
>>>>>>> + // create a table with two columns, their
>>>>>>> names differ in they being in different cases.
>>>>>>> + stmt.executeUpdate("create table
>>>>>>> caseiscol(COL1 int ,\"col1\" int)");
>>>>>>> +
>>>>>>> + con.commit();
>>>>>>> +
>>>>>>> + stmt.executeUpdate("insert into caseiscol
>>>>>>> values (1,346)");
>>>>>>> +
>>>>>>> + con.commit();
>>>>>>> +
>>>>>>> + // select data from this table for
>>>>>>> updating
>>>>>>> + stmt1 = con.prepareStatement("select COL1,
>>>>>>> \"col1\" from caseiscol FOR UPDATE",ResultSet.TYPE_FORWARD_ONLY,
>>>>>>> ResultSet.CONCUR_UPDATABLE);
>>>>>>> + rs = stmt1.executeQuery();
>>>>>>> +
>>>>>>> + // Get the data and disply it before
>>>>>>> updating.
>>>>>>> + System.out.println("Before updation...");
>>>>>>> + while(rs.next()) {
>>>>>>> + System.out.println("ResultSet is:
>>>>>>> "+rs.getObject(1));
>>>>>>> + System.out.println("ResultSet is:
>>>>>>> "+rs.getObject(2));
>>>>>>> + }
>>>>>>> + rs.close();
>>>>>>> + rs = stmt1.executeQuery();
>>>>>>> + while(rs.next()) {
>>>>>>> + // Update the two columns with different
>>>>>>> data.
>>>>>>> + // Since update is case insensitive only
>>>>>>> the first column should get updated in both cases.
>>>>>>> + rs.updateInt("col1",100);
>>>>>>> + rs.updateInt("COL1",900);
>>>>>>> + rs.updateRow();
>>>>>>> + }
>>>>>>> + rs.close();
>>>>>>> +
>>>>>>> + System.out.println("After update...");
>>>>>>> + rs = stmt1.executeQuery();
>>>>>>> +
>>>>>>> + // Display the data after updating. Only the
>>>>>>> first column should have the updated value.
>>>>>>> + while(rs.next()) {
>>>>>>> + System.out.println("Column Number 1:
>>>>>>> "+rs.getInt(1));
>>>>>>> + System.out.println("Column Number 2:
>>>>>>> "+rs.getInt(2));
>>>>>>> + }
>>>>>>> + rs.close();
>>>>>>> + rs = stmt1.executeQuery();
>>>>>>> + while(rs.next()) {
>>>>>>> + // Again checking for case insensitive
>>>>>>> behaviour here, should display the data in the first column.
>>>>>>> + System.out.println("Col COL1:
>>>>>>> "+rs.getInt("COL1"));
>>>>>>> + System.out.println("Col col1:
>>>>>>> "+rs.getInt("col1"));
>>>>>>> + }
>>>>>>> + rs.close();
>>>>>>> + } catch(SQLException sqle) {
>>>>>>> + dumpSQLExceptions(sqle);
>>>>>>> + sqle.printStackTrace();
>>>>>>> + } catch(Throwable e) {
>>>>>>> + System.out.println("FAIL -- unexpected exception:
>>>>>>> "+e);
>>>>>>> + e.printStackTrace();
>>>>>>> +
>>>>>>> + }
>>>>>>> + }
>>>>>>> +
>>>>>>> + static private void dumpSQLExceptions (SQLException se) {
>>>>>>> + System.out.println("FAIL -- unexpected
>>>>>>> exception");
>>>>>>> + while (se != null) {
>>>>>>> +
>>>>>>> System.out.println("SQLSTATE("+se.getSQLState()+"): "+se);
>>>>>>> + se = se.getNextException();
>>>>>>> + }
>>>>>>> + }
>>>>>>> +}
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>> Index: java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>> ===================================================================
>>>>> --- java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>> (revision 167869)
>>>>> +++ java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
>>>>> (working copy)
>>>>> @@ -3591,8 +3591,14 @@
>>>>> ResultDescription rd = resultDescription;
>>>>>
>>>>> // 1 or 0 based? assume 1 (probably wrong)
>>>>> - for (int i=rd.getColumnCount(); i>=1; i--) {
>>>>> + // Changing the order in which columns are found from 1
>>>>> till column count.
>>>>> + // This is necessary in cases where the column names are
>>>>> the same but are in different cases.
>>>>> + // This is because in updateXXX and getXXX methods column
>>>>> names are case insensitive
>>>>> + // and in that case the first column should be returned.
>>>>> +
>>>>> + int columnCount = rd.getColumnCount();
>>>>>
>>>>> + for(int i = 1 ; i<= columnCount;i++) {
>>>>> String name = rd.getColumnDescriptor(i).getName();
>>>>> if (StringUtil.SQLEqualsIgnoreCase(columnName, name)) {
>>>>> return i;
>>>>> Index:
>>>>> java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>
>>>>> (revision 0)
>>>>> +++
>>>>> java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/caseInsensitiveColumn.java
>>>>>
>>>>> (revision 0)
>>>>> @@ -0,0 +1,97 @@
>>>>> +package org.apache.derbyTesting.functionTests.tests.jdbcapi;
>>>>> +
>>>>> +
>>>>> +import java.sql.*;
>>>>> +
>>>>> +import org.apache.derby.tools.ij;
>>>>> +import org.apache.derby.tools.JDBCDisplayUtil;
>>>>> +
>>>>> +public class caseInsensitiveColumn {
>>>>> +
>>>>> + public static void main(String[] args) {
>>>>> + test1(args);
>>>>> + }
>>>>> +
>>>>> + public static void test1(String []args) {
>>>>> + Connection con;
>>>>> + ResultSet rs;
>>>>> + Statement stmt = null;
>>>>> + PreparedStatement stmt1 = null;
>>>>> +
>>>>> + System.out.println("Test caseInsensitiveColumn
>>>>> starting");
>>>>> +
>>>>> + try
>>>>> + {
>>>>> + // use the ij utility to read the property
>>>>> file and
>>>>> + // make the initial connection.
>>>>> + ij.getPropertyArg(args);
>>>>> + con = ij.startJBMS();
>>>>> +
>>>>> + con.setAutoCommit(false);
>>>>> +
>>>>> + stmt = con.createStatement();
>>>>> +
>>>>> + // create a table with two columns, their
>>>>> names differ in they being in different cases.
>>>>> + stmt.executeUpdate("create table
>>>>> caseiscol(COL1 int ,\"col1\" int)");
>>>>> +
>>>>> + con.commit();
>>>>> +
>>>>> + stmt.executeUpdate("insert into caseiscol
>>>>> values (1,346)");
>>>>> +
>>>>> + con.commit();
>>>>> +
>>>>> + // select data from this table for updating
>>>>> + stmt1 = con.prepareStatement("select COL1,
>>>>> \"col1\" from caseiscol FOR UPDATE",ResultSet.TYPE_FORWARD_ONLY,
>>>>> ResultSet.CONCUR_UPDATABLE);
>>>>> + rs = stmt1.executeQuery();
>>>>> +
>>>>> + // Get the data and disply it before
>>>>> updating.
>>>>> + System.out.println("Before updation...");
>>>>> + while(rs.next()) {
>>>>> + System.out.println("ResultSet is:
>>>>> "+rs.getObject(1));
>>>>> + System.out.println("ResultSet is:
>>>>> "+rs.getObject(2));
>>>>> + }
>>>>> + rs.close();
>>>>> + rs = stmt1.executeQuery();
>>>>> + while(rs.next()) {
>>>>> + // Update the two columns with different
>>>>> data.
>>>>> + // Since update is case insensitive only
>>>>> the first column should get updated in both cases.
>>>>> + rs.updateInt("col1",100);
>>>>> + rs.updateInt("COL1",900);
>>>>> + rs.updateRow();
>>>>> + }
>>>>> + rs.close();
>>>>> +
>>>>> + System.out.println("After update...");
>>>>> + rs = stmt1.executeQuery();
>>>>> +
>>>>> + // Display the data after updating. Only the
>>>>> first column should have the updated value.
>>>>> + while(rs.next()) {
>>>>> + System.out.println("Column Number 1:
>>>>> "+rs.getInt(1));
>>>>> + System.out.println("Column Number 2:
>>>>> "+rs.getInt(2));
>>>>> + }
>>>>> + rs.close();
>>>>> + rs = stmt1.executeQuery();
>>>>> + while(rs.next()) {
>>>>> + // Again checking for case insensitive
>>>>> behaviour here, should display the data in the first column.
>>>>> + System.out.println("Col COL1:
>>>>> "+rs.getInt("COL1"));
>>>>> + System.out.println("Col col1:
>>>>> "+rs.getInt("col1"));
>>>>> + }
>>>>> + rs.close();
>>>>> + } catch(SQLException sqle) {
>>>>> + dumpSQLExceptions(sqle);
>>>>> + sqle.printStackTrace();
>>>>> + } catch(Throwable e) {
>>>>> + System.out.println("FAIL -- unexpected exception:
>>>>> "+e.getMessage());
>>>>> + e.printStackTrace();
>>>>> +
>>>>> + }
>>>>> + }
>>>>> +
>>>>> + static private void dumpSQLExceptions (SQLException se) {
>>>>> + System.out.println("FAIL -- unexpected exception");
>>>>> + while (se != null) {
>>>>> +
>>>>> System.out.println("SQLSTATE("+se.getSQLState()+"):
>>>>> "+se.getMessage());
>>>>> + se = se.getNextException();
>>>>> + }
>>>>> + }
>>>>> +}
>>>>> Index:
>>>>> java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>
>>>>> (revision 0)
>>>>> +++
>>>>> java/testing/org/apache/derbyTesting/functionTests/master/caseInsensitiveColumn.out
>>>>>
>>>>> (revision 0)
>>>>> @@ -0,0 +1,9 @@
>>>>> +Test caseInsensitiveColumn starting
>>>>> +Before updation...
>>>>> +ResultSet is: 1
>>>>> +ResultSet is: 346
>>>>> +After update...
>>>>> +Column Number 1: 900
>>>>> +Column Number 2: 346
>>>>> +Col COL1: 900
>>>>> +Col col1: 900
>>>>> Index:
>>>>> java/testing/org/apache/derbyTesting/functionTests/suites/jdbcapi.runall
>>>>>
>>>>>
>>>>> ===================================================================
>>>>> ---
>>>>> java/testing/org/apache/derbyTesting/functionTests/suites/jdbcapi.runall
>>>>> (revision 167869)
>>>>> +++
>>>>> java/testing/org/apache/derbyTesting/functionTests/suites/jdbcapi.runall
>>>>> (working copy)
>>>>> @@ -15,4 +15,4 @@
>>>>> jdbcapi/setTransactionIsolation.java
>>>>> jdbcapi/prepStmtNull.java
>>>>> jdbcapi/testRelative.java
>>>>> -
>>>>> +jdbcapi/caseInsensitiveColumn.java
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
>