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, 24 May 2005 08:51:26 GMT
Here is the latest patch with the name changed.

Output of svn stat:
-------------------

M      java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
A      
java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/rsgetXXXcolumnNames.java
A      
java/testing/org/apache/derbyTesting/functionTests/master/rsgetXXXcolumnNames.out
M      
java/testing/org/apache/derbyTesting/functionTests/suites/jdbcapi.runall

~ Shreyas

Satheesh Bandaram wrote:

>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 <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