db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shreyas Kaushik <Shreyas.Kaus...@Sun.COM>
Subject Re: [PATCH]Derby-229
Date Tue, 17 May 2005 10:08:35 GMT


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