Committed this patch.

Satheesh

Sending        java\engine\org\apache\derby\impl\jdbc\EmbedResultSet.java      
Adding    java\testing\org\apache\derbyTesting\functionTests\master\rsgetXXXcolumnNames.out                                                              Sending java\testing\org\apache\derbyTesting\functionTests\suites\jdbcapi.runall                                                                         Adding     java\testing\org\apache\derbyTesting\functionTests\tests\jdbcapi\rsgetXXXcolumnNames.java                                                        Transmitting file data ....
Committed revision 178257.                                                     

Shreyas Kaushik wrote:
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 <[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




               
 
      


    

  

 


Index: java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java =================================================================== --- java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java (revision 178137) +++ java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java (working copy) @@ -3601,8 +3601,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/rsgetXXXcolumnNames.java =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/rsgetXXXcolumnNames.java (revision 0) +++ java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/rsgetXXXcolumnNames.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 rsgetXXXcolumnNames { + + 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 rsgetXXXcolumnNames 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/rsgetXXXcolumnNames.out =================================================================== --- java/testing/org/apache/derbyTesting/functionTests/master/rsgetXXXcolumnNames.out (revision 0) +++ java/testing/org/apache/derbyTesting/functionTests/master/rsgetXXXcolumnNames.out (revision 0) @@ -0,0 +1,9 @@ +Test rsgetXXXcolumnNames 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 178137) +++ java/testing/org/apache/derbyTesting/functionTests/suites/jdbcapi.runall (working copy) @@ -15,4 +15,5 @@ jdbcapi/setTransactionIsolation.java jdbcapi/prepStmtNull.java jdbcapi/testRelative.java +jdbcapi/rsgetXXXcolumnNames.java



Reply via email to