You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Deepa Remesh (JIRA)" <de...@db.apache.org> on 2006/07/17 23:59:19 UTC

[jira] Updated: (DERBY-1130) Client should not allow databaseName to be set with setConnectionAttributes

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

Deepa Remesh updated DERBY-1130:
--------------------------------

    Attachment: derby-1130-v1.diff
                derby-1130-v1.status

Attaching a patch 'derby-1130-v1.diff' which ensures that database name set using setConnectionAttributes does not get used by client driver. Changes are:

* Appends the attributes in setConnectionAttributes method to database name only if database name has been already set on the data source. Database name is a required property and if it is not set, DataSource.getConnection method will throw the following exception:
08001 - Required property databaseName not set. 

Without the patch, if database name was not set, the code was using "null" as database name and creating a database named null if  "create=true" is specified or throwing an exception that it cannot connect to database named null.

* Adds test to jdbcapi/checkDataSource.java. Adds a new method "testClientDSConnectionAttributes". As we are testing the methods specific to Derby data sources, we cannot re-use the method used to test embedded data sources.

Ran derbynetclientmats with this patch using Sun jdk 1.4.2 on Windows XP. No failures. Also ran the modified tests jdbcapi/checkDataSource.java and jdbcapi/checkDataSource30.java in embedded mode. Please review/commit this patch. Thanks.

> Client should not allow databaseName to be set with setConnectionAttributes
> ---------------------------------------------------------------------------
>
>                 Key: DERBY-1130
>                 URL: http://issues.apache.org/jira/browse/DERBY-1130
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects 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
>         Assigned To: Deepa Remesh
>         Attachments: derby-1130-v1.diff, derby-1130-v1.status
>
>
> 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