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