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

Proposed by Massimo Siani
Status: Merged
Merged at revision: 551
Proposed branch: lp:~massimo-siani/mariadb-java-client/CONJ-126
Merge into: lp:mariadb-java-client
Diff against target: 66 lines (+38/-1)
2 files modified
src/main/java/org/mariadb/jdbc/internal/common/Utils.java (+9/-1)
src/test/java/org/mariadb/jdbc/PreparedStatementTest.java (+29/-0)
To merge this branch: bzr merge lp:~massimo-siani/mariadb-java-client/CONJ-126
Reviewer Review Type Date Requested Status
Maria-captains Pending
Review via email: mp+244262@code.launchpad.net

Description of the change

Fix for CONJ-126:

PreparedStatement.setObject() returns IllegalParameterException: No '?' on that position

Added parsing for backticks in prepared statements.

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/internal/common/Utils.java'
2--- src/main/java/org/mariadb/jdbc/internal/common/Utils.java 2014-11-26 09:47:35 +0000
3+++ src/main/java/org/mariadb/jdbc/internal/common/Utils.java 2014-12-10 09:31:23 +0000
4@@ -68,7 +68,8 @@
5 SlashStarComment, /* inside slash-star comment */
6 Escape, /* found backslash */
7 Parameter, /* parameter placeholder found */
8- EOLComment /* # comment, or // comment, or -- comment */
9+ EOLComment, /* # comment, or // comment, or -- comment */
10+ Backtick /* found backtick */
11 };
12
13
14@@ -149,6 +150,13 @@
15 if (state == LexState.Normal)
16 isParam = true;
17 break;
18+ case '`':
19+ if (state == LexState.Backtick) {
20+ state = LexState.Normal;
21+ } else if (state == LexState.Normal) {
22+ state = LexState.Backtick;
23+ }
24+ break;
25 }
26 lastChar = c;
27 if (isParam) {
28
29=== modified file 'src/test/java/org/mariadb/jdbc/PreparedStatementTest.java'
30--- src/test/java/org/mariadb/jdbc/PreparedStatementTest.java 2014-12-02 09:09:53 +0000
31+++ src/test/java/org/mariadb/jdbc/PreparedStatementTest.java 2014-12-10 09:31:23 +0000
32@@ -77,5 +77,34 @@
33 assertEquals(0, rs.getBigDecimal(1).toBigInteger().compareTo(bigT));
34 st.execute("DROP TABLE IF EXISTS `testBigintTable`");
35 }
36+
37+ @Test
38+ public void testPreparedStatementsWithQuotes() throws SQLException {
39+ connection.createStatement().execute("DROP TABLE IF EXISTS backTicksPreparedStatements");
40+ connection.createStatement().execute(
41+ "CREATE TABLE IF NOT EXISTS `backTicksPreparedStatements` ("
42+ + "`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"
43+ + "`SLIndex#orBV#` text,"
44+ + "`isM&M'sTasty?` bit(1) DEFAULT NULL,"
45+ + "`Seems:LikeParam?` bit(1) DEFAULT NULL,"
46+ + "`Webinar10-TM/ProjComp` text"
47+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8");
48+
49+ String query = "INSERT INTO backTicksPreparedStatements (`SLIndex#orBV#`,`Seems:LikeParam?`,`Webinar10-TM/ProjComp`,`isM&M'sTasty?`)"
50+ + " VALUES (?,?,?,?)";
51+ PreparedStatement ps = connection.prepareStatement(query);
52+ ps.setString(1, "slIndex");
53+ ps.setBoolean(2, false);
54+ ps.setString(3, "webinar10");
55+ ps.setBoolean(4, true);
56+ ps.execute();
57+ ResultSet rs = connection.createStatement().executeQuery("SELECT `SLIndex#orBV#`,`Seems:LikeParam?`,`Webinar10-TM/ProjComp`,`isM&M'sTasty?` FROM backTicksPreparedStatements");
58+ assertTrue(rs.next());
59+ assertEquals("slIndex", rs.getString(1));
60+ assertEquals(false, rs.getBoolean(2));
61+ assertEquals("webinar10", rs.getString(3));
62+ assertEquals(true, rs.getBoolean(4));
63+ connection.createStatement().execute("DROP TABLE IF EXISTS backTicksPreparedStatements");
64+ }
65
66 }

Subscribers

People subscribed via source and target branches