Skip to content

Commit 3e18d11

Browse files
committed
Added support of GRANT/REVOKE keywords
1 parent 23fbaf5 commit 3e18d11

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,10 @@ public String parseSQL() throws SQLException {
254254
// Detect scheme expression - starts with ALTER, DROP, CREATE
255255
if (parseAlterKeyword(chars, keywordStart, keywordLength)
256256
|| parseCreateKeyword(chars, keywordStart, keywordLength)
257-
|| parseDropKeyword(chars, keywordStart, keywordLength)) {
257+
|| parseDropKeyword(chars, keywordStart, keywordLength)
258+
|| parseGrantKeyword(chars, keywordStart, keywordLength)
259+
|| parseRevokeKeyword(chars, keywordStart, keywordLength)
260+
) {
258261
statement = new QueryStatement(type, QueryType.SCHEME_QUERY, QueryCmd.CREATE_ALTER_DROP);
259262
batcher.readIdentifier(chars, keywordStart, keywordLength);
260263
}
@@ -576,6 +579,30 @@ private static boolean parseDropKeyword(char[] query, int offset, int length) {
576579
&& (query[offset + 3] | 32) == 'p';
577580
}
578581

582+
private static boolean parseGrantKeyword(char[] query, int offset, int length) {
583+
if (length != 5) {
584+
return false;
585+
}
586+
587+
return (query[offset] | 32) == 'g'
588+
&& (query[offset + 1] | 32) == 'r'
589+
&& (query[offset + 2] | 32) == 'a'
590+
&& (query[offset + 3] | 32) == 'n'
591+
&& (query[offset + 4] | 32) == 't';
592+
}
593+
594+
private static boolean parseRevokeKeyword(char[] query, int offset, int length) {
595+
if (length != 6) {
596+
return false;
597+
}
598+
599+
return (query[offset] | 32) == 'r'
600+
&& (query[offset + 1] | 32) == 'e'
601+
&& (query[offset + 2] | 32) == 'v'
602+
&& (query[offset + 3] | 32) == 'o'
603+
&& (query[offset + 4] | 32) == 'k'
604+
&& (query[offset + 5] | 32) == 'e';
605+
}
579606
private static boolean parseScanKeyword(char[] query, int offset, int length) {
580607
if (length != 4) {
581608
return false;

jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public void explainQueryTest(String query, String prepared, String cmd) throws S
6868
" Alter table set;",
6969
"Alter--comment\ntable set;",
7070
"drOp table 'test'",
71+
"Revoke--comment\npermission;",
72+
"GRant table 'test'",
7173
"-- comment \nCreate;",
7274
})
7375
public void schemeQueryTest(String query) throws SQLException {

0 commit comments

Comments
 (0)