Skip to content

Commit b930ca2

Browse files
committed
Fixed javaCC for set roles statements and getting correct table name
1 parent 4f45dc8 commit b930ca2

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ public enum DriverProperties {
6666
* <li>JAVACC - parser extracts required information but PreparedStatement parameters parsed separately.</li>
6767
* </ul>
6868
*/
69-
SQL_PARSER("jdbc_sql_parser", "JAVACC", List.of("ANTLR4", "ANTLR4_PARAMS_PARSER", "JAVACC")),
69+
// SQL_PARSER("jdbc_sql_parser", "JAVACC", List.of("ANTLR4", "ANTLR4_PARAMS_PARSER", "JAVACC")),
70+
SQL_PARSER("jdbc_sql_parser", "ANTLR4", List.of("ANTLR4", "ANTLR4_PARAMS_PARSER", "JAVACC")),
7071
;
7172

7273

jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/SqlParserFacade.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,25 @@ public ParsedStatement parsedStatement(String sql) {
4242
if (parsedStmt.getStatementType() == StatementType.USE) {
4343
stmt.setUseDatabase(parsedStmt.getDatabase());
4444
}
45-
// TODO: set roles
45+
46+
String rolesCount = parsedStmt.getSettings().get("_ROLES_COUNT");
47+
if (rolesCount != null) {
48+
int rolesCountInt = Integer.parseInt(rolesCount);
49+
ArrayList<String> roles = new ArrayList<>(rolesCountInt);
50+
boolean resetRoles = false;
51+
for (int i = 0; i < rolesCountInt; i++) {
52+
String role = parsedStmt.getSettings().get("_ROLE_" + i);
53+
if (role.equalsIgnoreCase("NONE")) {
54+
resetRoles = true;
55+
}
56+
roles.add(parsedStmt.getSettings().get("_ROLE_" + i));
57+
}
58+
if (resetRoles) {
59+
roles.clear();
60+
}
61+
stmt.setRoles(roles);
62+
}
63+
4664
stmt.setInsert(parsedStmt.getStatementType() == StatementType.INSERT);
4765
stmt.setHasErrors(parsedStmt.getStatementType() == StatementType.UNKNOWN);
4866
stmt.setHasResultSet(isStmtWithResultSet(parsedStmt));
@@ -66,7 +84,11 @@ public ParsedPreparedStatement parsePreparedStatement(String sql) {
6684
stmt.setInsert(parsedStmt.getStatementType() == StatementType.INSERT);
6785
stmt.setHasErrors(parsedStmt.getStatementType() == StatementType.UNKNOWN);
6886
stmt.setHasResultSet(isStmtWithResultSet(parsedStmt));
69-
stmt.setTable(parsedStmt.getTable());
87+
String tableName = parsedStmt.getTable();
88+
if (parsedStmt.getDatabase() != null && parsedStmt.getTable() != null) {
89+
tableName = String.format("%s.%s", parsedStmt.getDatabase(), parsedStmt.getTable());
90+
}
91+
stmt.setTable(tableName);
7092
stmt.setInsertWithSelect(parsedStmt.containsKeyword("SELECT") && (parsedStmt.getStatementType() == StatementType.INSERT));
7193
stmt.setAssignValuesGroups(parsedStmt.getValueGroups());
7294

jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlStatement.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public class ClickHouseSqlStatement {
2727
public static final String KEYWORD_VALUES_START = "ValuesStart";
2828
public static final String KEYWORD_VALUES_END = "ValuesEnd";
2929

30+
public static final String ROLES_COUNT_SETTINGS_KEY = "_ROLES_COUNT";
31+
public static final String ROLES_PREFIX_SETTINGS_KEY = "_ROLE_";
32+
3033
private final String sql;
3134
private final StatementType stmtType;
3235
private final String cluster;

0 commit comments

Comments
 (0)