@@ -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 ;
0 commit comments