[ 
http://issues.apache.org/jira/browse/DERBY-1130?page=comments#action_12420626 ] 

Deepa Remesh commented on DERBY-1130:
-------------------------------------

For Kathey's question:  What is the exception for embedded if create=true is 
not specified? e.g. ds.setConnectionAttributes("databaseName=wombat") 
Exception for embedded is: XJ004 - Database '' not found.

I think we do not have the same SQL state in the client for the above 
exception. The corresponding SQLState is "08004 - The connection was refused 
because the database {0} was not found."

As the SQLStates do not match, I was thinking it would be okay to catch the 
exception at client itself and throw "08001 - Required property databaseName 
not set. " if database name is not set using setDatabaseName on the client data 
source. In case the database name is set using setDatabaseName and we try to 
over-ride it using "databaseName" property in setConnectionAttributes, the 
over-riding will fail. Only the database name set using setDatabaseName will be 
used. This was the behaviour in the patch I was working on.

However, if the above exception is confusing, I'll try to set a dummy database 
name on the client and send it to server to get back "08004 - The connection 
was refused because the database {0} was not found.". Please share your 
thoughts on this.

> Client should not allow databaseName to be set with setConnectionAttributes
> ---------------------------------------------------------------------------
>
>          Key: DERBY-1130
>          URL: http://issues.apache.org/jira/browse/DERBY-1130
>      Project: Derby
>         Type: Bug

>   Components: Network Client
>     Versions: 10.1.1.0, 10.1.1.1, 10.1.1.2, 10.1.2.0, 10.1.2.1, 10.1.2.2, 
> 10.1.2.3, 10.2.0.0, 10.1.3.0, 10.1.2.4
>     Reporter: Kathey Marsden
>     Assignee: Deepa Remesh

>
> Per this thread,  setConnectionAttributes should not set databaseName. 
> http://www.nabble.com/double-check-on-checkDataSource-t1187602.html#a3128621
> Currently this is allowed for client but should be disabled.  I think it is 
> OK to change because we have documented that client will be changed to match 
> embedded for implementation defined behaviour.   Hopefully its use is rare as 
> most folks would use the standard setDatabaseName.  Still there should be a 
> release not when the change is made and it would be better to change it 
> sooner than later:
> Below is the repro. 
> Here is the output with Client
> D>java DatabaseNameWithSetConnAttr
> ds.setConnectionAttributes(databaseName=wombat;create=true)
> ds.getDatabaseName() = null (should be null)
> FAIL: Should not have been able to set databaseName with connection attributes
> Also look for tests  disabled with this bug number in the test 
> checkDataSource30.java
> import java.sql.*;
> import java.lang.reflect.Method;
> public class DatabaseNameWithSetConnAttr{
>       public static void main(String[] args) {
>               try {
>               
>                       String attributes = "databaseName=wombat;create=true";
>                       org.apache.derby.jdbc.ClientDataSource ds = new
>                       org.apache.derby.jdbc.ClientDataSource();
>                       //org.apache.derby.jdbc.EmbeddedDataSource ds = new
>                       //org.apache.derby.jdbc.EmbeddedDataSource();
>                       System.out.println("ds.setConnectionAttributes(" + 
> attributes + ")");
>                       ds.setConnectionAttributes(attributes);
>                       System.out.println("ds.getDatabaseName() = " +
>                                                          ds.getDatabaseName() 
> + " (should be null)" );
>                       Connection conn  = ds.getConnection();
>                       } catch (SQLException e) {
>                               String sqlState = e.getSQLState();
>                               if (sqlState != null && 
> sqlState.equals("XJ041"))
>                               {
>                               System.out.println("PASS: An exception was 
> thrown trying to get a connetion from a datasource after setting databaseName 
> with setConnectionAttributes");
>                               System.out.println("EXPECTED EXCEPTION: " + 
> e.getSQLState() 
>                                                                          + " 
> - " + e.getMessage());
>                               return;
>                               }
>                               while (e != null)
>                               {
>                                       System.out.println("FAIL - UNEXPECTED 
> EXCEPTION: " + e.getSQLState());
>                                       e.printStackTrace();
>                                       e = e.getNextException();
>                               }
>                               return;
>                       }
>               System.out.println("FAIL: Should not have been able to set 
> databaseName with connection attributes");
>       }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to