diff --git a/jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java b/jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java index 626fed6..86d8c64 100644 --- a/jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java +++ b/jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java @@ -254,7 +254,10 @@ public String parseSQL() throws SQLException { // Detect scheme expression - starts with ALTER, DROP, CREATE if (parseAlterKeyword(chars, keywordStart, keywordLength) || parseCreateKeyword(chars, keywordStart, keywordLength) - || parseDropKeyword(chars, keywordStart, keywordLength)) { + || parseDropKeyword(chars, keywordStart, keywordLength) + || parseGrantKeyword(chars, keywordStart, keywordLength) + || parseRevokeKeyword(chars, keywordStart, keywordLength) + ) { statement = new QueryStatement(type, QueryType.SCHEME_QUERY, QueryCmd.CREATE_ALTER_DROP); batcher.readIdentifier(chars, keywordStart, keywordLength); } @@ -576,6 +579,30 @@ private static boolean parseDropKeyword(char[] query, int offset, int length) { && (query[offset + 3] | 32) == 'p'; } + private static boolean parseGrantKeyword(char[] query, int offset, int length) { + if (length != 5) { + return false; + } + + return (query[offset] | 32) == 'g' + && (query[offset + 1] | 32) == 'r' + && (query[offset + 2] | 32) == 'a' + && (query[offset + 3] | 32) == 'n' + && (query[offset + 4] | 32) == 't'; + } + + private static boolean parseRevokeKeyword(char[] query, int offset, int length) { + if (length != 6) { + return false; + } + + return (query[offset] | 32) == 'r' + && (query[offset + 1] | 32) == 'e' + && (query[offset + 2] | 32) == 'v' + && (query[offset + 3] | 32) == 'o' + && (query[offset + 4] | 32) == 'k' + && (query[offset + 5] | 32) == 'e'; + } private static boolean parseScanKeyword(char[] query, int offset, int length) { if (length != 4) { return false; diff --git a/jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java b/jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java index b4b1b51..3c7bba1 100644 --- a/jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java +++ b/jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java @@ -68,6 +68,8 @@ public void explainQueryTest(String query, String prepared, String cmd) throws S " Alter table set;", "Alter--comment\ntable set;", "drOp table 'test'", + "Revoke--comment\npermission;", + "GRant table 'test'", "-- comment \nCreate;", }) public void schemeQueryTest(String query) throws SQLException {