Return-Path: Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: (qmail 73855 invoked from network); 20 May 2005 08:29:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 20 May 2005 08:29:30 -0000 Received: (qmail 62601 invoked by uid 500); 20 May 2005 08:29:28 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 62555 invoked by uid 500); 20 May 2005 08:29:27 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Reply-To: "Derby Development" Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 62541 invoked by uid 99); 20 May 2005 08:29:27 -0000 X-ASF-Spam-Status: No, hits=0.4 required=10.0 tests=SPF_HELO_FAIL X-Spam-Check-By: apache.org Received-SPF: neutral (hermes.apache.org: local policy) Received: from e6.ny.us.ibm.com (HELO e6.ny.us.ibm.com) (32.97.182.146) by apache.org (qpsmtpd/0.28) with ESMTP; Fri, 20 May 2005 01:29:26 -0700 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by e6.ny.us.ibm.com (8.12.11/8.12.11) with ESMTP id j4K8TDEV030988 for ; Fri, 20 May 2005 04:29:13 -0400 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay04.pok.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id j4K8SwW5045066 for ; Fri, 20 May 2005 04:29:13 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.12.11/8.13.3) with ESMTP id j4K8Sm3e010853 for ; Fri, 20 May 2005 04:28:48 -0400 Received: from [127.0.0.1] (sig-9-48-126-228.mts.ibm.com [9.48.126.228]) by d01av02.pok.ibm.com (8.12.11/8.12.11) with ESMTP id j4K8SkpU010660 for ; Fri, 20 May 2005 04:28:48 -0400 Message-ID: <428D9F8F.4050508@Sourcery.Org> Date: Fri, 20 May 2005 01:27:59 -0700 From: Satheesh Bandaram User-Agent: Mozilla Thunderbird 0.7.3 (Windows/20040803) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Derby Development Subject: Re: [PATCH]Derby-229 References: <4275C507.1030708@Sun.com> <42781A6C.6050802@Sourcery.Org> <4278ACC9.3060300@Sun.com> <4289C2A3.5060908@Sun.com> <428A9DE4.2080801@Sourcery.Org> <428AC996.7050800@Sun.com> In-Reply-To: <428AC996.7050800@Sun.com> X-Enigmail-Version: 0.85.0.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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 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 >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>> >>> >> >> >> >> > > >