@@ -254,7 +254,10 @@ public String parseSQL() throws SQLException {
254
254
// Detect scheme expression - starts with ALTER, DROP, CREATE
255
255
if (parseAlterKeyword (chars , keywordStart , keywordLength )
256
256
|| 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
+ ) {
258
261
statement = new QueryStatement (type , QueryType .SCHEME_QUERY , QueryCmd .CREATE_ALTER_DROP );
259
262
batcher .readIdentifier (chars , keywordStart , keywordLength );
260
263
}
@@ -576,6 +579,30 @@ private static boolean parseDropKeyword(char[] query, int offset, int length) {
576
579
&& (query [offset + 3 ] | 32 ) == 'p' ;
577
580
}
578
581
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
+ }
579
606
private static boolean parseScanKeyword (char [] query , int offset , int length ) {
580
607
if (length != 4 ) {
581
608
return false ;
0 commit comments