db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Satheesh Bandaram <sathe...@Sourcery.Org>
Subject Re: [PATCH]Derby-229
Date Wed, 18 May 2005 01:44:04 GMT
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 <Shreyas.Kaushik@sun.com> 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
>>>
>>>
>>>
>>>   
>>
>
>
>


Mime
View raw message