Skip to content

Commit 1ca07a7

Browse files
authored
Clean empty lines in sql query (#2277)
* Clean empty lines in sql query * Adding a few more tests cases like remarks
1 parent 935e491 commit 1ca07a7

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

jdbc-v2/src/main/java/com/clickhouse/jdbc/StatementImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ protected static String parseJdbcEscapeSyntax(String sql) {
134134
// Handle outer escape syntax
135135
//sql = sql.replaceAll("\\{escape '([^']*)'\\}", "'$1'");
136136

137+
// Clean new empty lines in sql
138+
sql = sql.replaceAll("(?m)^\\s*$\\n?", "");
137139
// Add more replacements as needed for other JDBC escape sequences
138140
LOG.trace("Parsed SQL: {}", sql);
139141
return sql;

jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,4 +573,68 @@ public void testSwitchDatabase() throws Exception {
573573
}
574574
}
575575
}
576+
577+
@Test(groups = { "integration" })
578+
public void testNewLineSQLParsing() throws Exception {
579+
try (Connection conn = getJdbcConnection()) {
580+
String sqlCreate = "CREATE TABLE balance ( `id` UUID, `currency` String, `amount` Decimal(64, 18), `create_time` DateTime64(6), `_version` UInt64, `_sign` UInt8 ) ENGINE = ReplacingMergeTree PRIMARY KEY id ORDER BY id;";
581+
try (Statement stmt = conn.createStatement()) {
582+
int r = stmt.executeUpdate(sqlCreate);
583+
assertEquals(r, 0);
584+
}
585+
try (Statement stmt = conn.createStatement()) {
586+
String sqlInsert = "INSERT INTO balance VALUES (generateUUIDv4(), 'EUR', '42.42', now(), 144, 255);";
587+
int r = stmt.executeUpdate(sqlInsert);
588+
assertEquals(r, 1);
589+
}
590+
try (Statement stmt = conn.createStatement()) {
591+
String sqlSelect = new StringBuilder("-- SELECT amount FROM balance FINAL;\n")
592+
.append("SELECT amount FROM balance FINAL;").toString();
593+
ResultSet rs = stmt.executeQuery(sqlSelect);
594+
assertTrue(rs.next());
595+
}
596+
try (Statement stmt = conn.createStatement()) {
597+
String sqlSelect = new StringBuilder("-- SELECT * FROM balance\n")
598+
.append("\n")
599+
.append("WITH balance_cte AS (\n")
600+
.append("SELECT\n")
601+
.append("id, currency, amount\n")
602+
.append("FROM balance\n")
603+
.append("LIMIT 10\n")
604+
.append(")\n")
605+
.append("SELECT * FROM balance_cte;").toString();
606+
ResultSet rs = stmt.executeQuery(sqlSelect);
607+
assertTrue(rs.next());
608+
assertFalse(rs.next());
609+
}
610+
try (Statement stmt = conn.createStatement()) {
611+
String sqlSelect = new StringBuilder("-- SELECT amount FROM balance FINAL;\n")
612+
.append("\n")
613+
.append("SELECT amount FROM balance FINAL;").toString();
614+
ResultSet rs = stmt.executeQuery(sqlSelect);
615+
assertTrue(rs.next());
616+
}
617+
try (Statement stmt = conn.createStatement()) {
618+
String sqlSelect = new StringBuilder("-- SELECT amount FROM balance FINAL;\n")
619+
.append("\n")
620+
.append("SELECT amount /* test */FROM balance FINAL;").toString();
621+
ResultSet rs = stmt.executeQuery(sqlSelect);
622+
assertTrue(rs.next());
623+
}
624+
try (Statement stmt = conn.createStatement()) {
625+
String sqlSelect = new StringBuilder("-- SELECT amount FROM balance FINAL;\n")
626+
.append("\n")
627+
.append("SELECT amount FROM balance FINAL; /* test */").toString();
628+
ResultSet rs = stmt.executeQuery(sqlSelect);
629+
assertTrue(rs.next());
630+
}
631+
try (Statement stmt = conn.createStatement()) {
632+
String sqlSelect = new StringBuilder("-- SELECT amount FROM balance FINAL;\n")
633+
.append("\n")
634+
.append("SELECT amount FROM balance FINAL; /* test */ -- SELECT 1").toString();
635+
ResultSet rs = stmt.executeQuery(sqlSelect);
636+
assertTrue(rs.next());
637+
}
638+
}
639+
}
576640
}

0 commit comments

Comments
 (0)