Merge lp:~massimo-siani/mariadb-java-client/CONJ-127 into lp:mariadb-java-client

Proposed by Massimo Siani
Status: Merged
Merged at revision: 552
Proposed branch: lp:~massimo-siani/mariadb-java-client/CONJ-127
Merge into: lp:mariadb-java-client
Diff against target: 122 lines (+44/-3)
5 files modified
src/main/java/org/mariadb/jdbc/JDBCUrl.java (+33/-1)
src/main/java/org/mariadb/jdbc/MySQLDataSource.java (+6/-0)
src/test/java/org/mariadb/jdbc/CatalogTest.java (+1/-0)
src/test/java/org/mariadb/jdbc/DataSourceTest.java (+1/-1)
src/test/java/org/mariadb/jdbc/DriverTest.java (+3/-1)
To merge this branch: bzr merge lp:~massimo-siani/mariadb-java-client/CONJ-127
Reviewer Review Type Date Requested Status
Maria-captains Pending
Review via email: mp+244583@code.launchpad.net

Description of the change

CONJ-127:

JDBCUrl.parseConnectorJUrl ignores username and password in url parameters

The problem highlighted by the user is the DataSource not getting the username and password. I believe that the problem may be solved by the changes in the MySQLDataSource alone, but we should have a more complete solution this way.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/main/java/org/mariadb/jdbc/JDBCUrl.java'
2--- src/main/java/org/mariadb/jdbc/JDBCUrl.java 2013-01-06 00:22:56 +0000
3+++ src/main/java/org/mariadb/jdbc/JDBCUrl.java 2014-12-12 13:35:28 +0000
4@@ -78,10 +78,42 @@
5 url = url.substring(13);
6 String hostname;
7 String database;
8+ String user;
9+ String password;
10 String[] tokens = url.split("/");
11 hostname=tokens[0];
12 database=(tokens.length > 1)?tokens[1]:null;
13- return new JDBCUrl("", "", database, HostAddress.parse(hostname));
14+ if (database == null) {
15+ return new JDBCUrl("", "", database, HostAddress.parse(hostname));
16+ }
17+ int start = tokens[1].indexOf("user=");
18+ int end = tokens[1].indexOf("&", start);
19+ if (start == -1) {
20+ user = "";
21+ } else {
22+ if (end == -1) {
23+ user = tokens[1].substring(start + 5);
24+ } else {
25+ user = tokens[1].substring(start + 5, end);
26+ }
27+ database = database.replaceFirst("user=" + user, "");
28+ }
29+ start = tokens[1].indexOf("password=");
30+ end = tokens[1].indexOf("&", start);
31+ if (start == -1) {
32+ password = "";
33+ } else {
34+ if (end == -1) {
35+ password = tokens[1].substring(start + 9);
36+ } else {
37+ password = tokens[1].substring(start + 9, end);
38+ }
39+ database = database.replaceFirst("password=" + password, "");
40+ }
41+ if (database.lastIndexOf("?") == database.length()-1) {
42+ database = database.substring(0, database.length()-1);
43+ }
44+ return new JDBCUrl(user, password, database, HostAddress.parse(hostname));
45 }
46
47 static boolean acceptsURL(String url) {
48
49=== modified file 'src/main/java/org/mariadb/jdbc/MySQLDataSource.java'
50--- src/main/java/org/mariadb/jdbc/MySQLDataSource.java 2014-11-26 09:47:35 +0000
51+++ src/main/java/org/mariadb/jdbc/MySQLDataSource.java 2014-12-12 13:35:28 +0000
52@@ -247,10 +247,16 @@
53 this.hostname = tmpStr;
54 }
55 tmpStr = url.getUsername();
56+ if (tmpStr.equals("")) {
57+ tmpStr = this.info.getProperty("user", "");
58+ }
59 if (!tmpStr.equals("")) {
60 this.username = tmpStr;
61 }
62 tmpStr = url.getPassword();
63+ if (tmpStr.equals("")) {
64+ tmpStr = this.info.getProperty("password", "");
65+ }
66 if (!tmpStr.equals("")) {
67 this.password = tmpStr;
68 }
69
70=== modified file 'src/test/java/org/mariadb/jdbc/CatalogTest.java'
71--- src/test/java/org/mariadb/jdbc/CatalogTest.java 2013-07-15 17:39:41 +0000
72+++ src/test/java/org/mariadb/jdbc/CatalogTest.java 2014-12-12 13:35:28 +0000
73@@ -22,6 +22,7 @@
74 stmt.executeUpdate("create database cattest1");
75 connection.setCatalog("cattest1");
76 assertEquals("cattest1", connection.getCatalog());
77+ stmt.executeUpdate("drop database if exists cattest1");
78 }
79
80 @Test(expected = SQLException.class)
81
82=== modified file 'src/test/java/org/mariadb/jdbc/DataSourceTest.java'
83--- src/test/java/org/mariadb/jdbc/DataSourceTest.java 2014-11-26 09:47:35 +0000
84+++ src/test/java/org/mariadb/jdbc/DataSourceTest.java 2014-12-12 13:35:28 +0000
85@@ -88,7 +88,7 @@
86 assertTrue(rs.next());
87 assertEquals("PIPES_AS_CONCAT", rs.getString(1));
88 ds.setUrl(connURI + "&sessionVariables=sql_mode='ALLOW_INVALID_DATES'");
89- connection = ds.getConnection(mUsername, mPassword);
90+ connection = ds.getConnection();
91 rs = connection.createStatement().executeQuery("SELECT @@sql_mode");
92 assertTrue(rs.next());
93 assertEquals("ALLOW_INVALID_DATES", rs.getString(1));
94
95=== modified file 'src/test/java/org/mariadb/jdbc/DriverTest.java'
96--- src/test/java/org/mariadb/jdbc/DriverTest.java 2014-10-21 15:21:12 +0000
97+++ src/test/java/org/mariadb/jdbc/DriverTest.java 2014-12-12 13:35:28 +0000
98@@ -1127,6 +1127,7 @@
99 assertTrue(foundDb);
100 setDatabase(oldDb);
101 setParameters(oldParams);
102+ connection.createStatement().executeUpdate("drop database test_testdrop");
103 }
104
105 @Test
106@@ -1603,8 +1604,8 @@
107 @Test
108 public void createDbWithSpacesTest() throws SQLException {
109 String oldDb = mDatabase;
110+ setParameters("&createDB=true");
111 setDatabase("test with spaces");
112- setConnection("&createDB=true");
113 DatabaseMetaData dbmd = connection.getMetaData();
114 ResultSet rs = dbmd.getCatalogs();
115 boolean foundDb = false;
116@@ -1613,5 +1614,6 @@
117 }
118 assertTrue(foundDb);
119 setDatabase(oldDb);
120+ connection.createStatement().execute("drop database `test with spaces`");
121 }
122 }

Subscribers

People subscribed via source and target branches