Issue Details (XML | Word | Printable)

Key: DERBY-33
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Unassigned
Reporter: Daniel John Debrunner
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Derby

Connection.setTypeMap throws unimplemented exception with empty map

Created: 06/Oct/04 08:47 PM   Updated: 08/Jul/06 10:04 AM
Return to search
Component/s: JDBC
Affects Version/s: 10.0.2.0
Fix Version/s: 10.1.1.0

Time Tracking:
Not Specified

Resolution Date: 28/Nov/04 05:04 AM


 Description  « Hide
With some other unimplemented methods Derby accepts a default value or value that is in effect a no-op. In this case an empty map should be accepted. May want to apply the same logi to other JDBC methods that take a type map.

Original bug discovered by Edward Rayl

http://nagoya.apache.org/eyebrowse/ReadMsg?listName=derby-user@db.apache.org&msgNo=43


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Shreyas Kaushik added a comment - 18/Nov/04 02:18 PM
I wrote a sample program using JdbcRowSet and found it to working perfectly with Derby. I am attaching the sample program here.

It *did not* throw up the error

JdbcRowSet (setTypeMap) : null.

This error appears becaus eof the fix suggested in the link that causes a NPE if the map is null ( map.isEmpty()) causes a NPE that appears as this problem.

My suggested fix to handle this problem is :

if((map != null)) {
            if(!(map.isEmpty()))
throw Util.notImplemented();
}

I also did not get the error when the connection is actually closed. The right way to clean up things when using the JdbcRowSet is to call close() method in the JdbcRowSet and then call the close method on the connection.

Please have a look at this and let me know.

thanks
Shreyas

Shreyas Kaushik added a comment - 18/Nov/04 02:19 PM
I wrote a sample program using JdbcRowSet and found it to working perfectly with Derby. I am attaching the sample program here.

It *did not* throw up the error

JdbcRowSet (setTypeMap) : null.

This error appears becaus eof the fix suggested in the link that causes a NPE if the map is null ( map.isEmpty()) causes a NPE that appears as this problem.

My suggested fix to handle this problem is :

if((map != null)) {
            if(!(map.isEmpty()))
throw Util.notImplemented();
}

I also did not get the error when the connection is actually closed. The right way to clean up things when using the JdbcRowSet is to call close() method in the JdbcRowSet and then call the close method on the connection.

Please have a look at this and let me know.

PS: Please see below for the attached sample program

thanks
Shreyas

---------------------Sample Program begins----------------------------------

import java.sql.*;
import javax.sql.rowset.*;
import com.sun.rowset.*;

public class updateNull{

   public static void main(String [] args) {
   
      String strUrl = "jdbc:derby:;databaseName=testdb;create=true";
      try {
         Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
         Connection con = DriverManager.getConnection(strUrl);
         
         Statement stmt = con.createStatement();
         try {
            stmt.executeUpdate("drop table test");
         } catch(SQLException ex) {
            // Do nothing.
         }
         con.commit();
         
         Statement stmt1 = con.createStatement();
         stmt1.executeUpdate("create table test(i_val integer, s_val varchar(10))");
         stmt1.executeUpdate("insert into test values(1,'shreyas')");
         con.commit();
         
JdbcRowSet jrs = new JdbcRowSetImpl(con);
jrs.setCommand("select * from test");
jrs.execute();
jrs.close();

con.close();
                  
      } catch(ClassNotFoundException cnfe) {
         System.out.println("Class not found: "+cnfe.getMessage());
      } catch(SQLException sqle) {
         System.out.println("SQL:Caught: "+sqle.getMessage());
         sqle.printStackTrace();
      } catch(Exception e) {
          
      }
      
   }
}

--------------------Sample Program Ends----------------------------------------


Daniel John Debrunner added a comment - 28/Nov/04 05:04 AM
Sending java\engine\org\apache\derby\iapi\reference\SQLState.java
Sending java\engine\org\apache\derby\impl\jdbc\EmbedCallableStatement20.java
Sending java\engine\org\apache\derby\impl\jdbc\EmbedConnection20.java
Sending java\engine\org\apache\derby\impl\jdbc\EmbedResultSet20.java
Sending java\engine\org\apache\derby\loc\messages_en.properties
Transmitting file data .....
Committed revision 106787.

Fix for Derby-33 - not implemented exception when passing in empty type map to JBDC calls.

Handling the map conditions the following way

  null Map --> throw a SQLException
  empty Map --> no-op
  non-empty Map --> throw notImplemented.

Patch contributed by Shreyas Kaushik (Shreyas.Kaushik@Sun.COM)

Kristian Waagan added a comment - 23/Jan/06 11:25 PM
Verified fix by quick code inspection and minimalistic JDBC testing.
Closing the issue.