From 6adaf8d0aaae594180f45241093edbd6c252a27c Mon Sep 17 00:00:00 2001 From: oh2024 Date: Tue, 28 May 2024 18:05:56 +0800 Subject: [PATCH] feat: add flush privileges support --- zetasql/parser/bison_parser.y | 11 ++++++ zetasql/parser/flex_tokenizer.l | 1 + zetasql/parser/keywords.cc | 1 + zetasql/parser/testdata/flush_privileges.test | 35 +++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 zetasql/parser/testdata/flush_privileges.test diff --git a/zetasql/parser/bison_parser.y b/zetasql/parser/bison_parser.y index f55cdd67a..5a3a07700 100644 --- a/zetasql/parser/bison_parser.y +++ b/zetasql/parser/bison_parser.y @@ -920,6 +920,7 @@ using zetasql::ASTDropStatement; %token KW_SECURITY "SECURITY" %token KW_SESSION "SESSION" %token KW_SHOW "SHOW" +%token KW_FLUSH "FLUSH" %token KW_SIMPLE "SIMPLE" %token KW_SOURCE "SOURCE" %token KW_SQL "SQL" @@ -1302,6 +1303,7 @@ using zetasql::ASTDropStatement; %type select_list %type select_list_prefix %type show_statement +%type flush_statement %type target_name %type show_target %type show_with_name_target @@ -1621,6 +1623,7 @@ sql_statement_body: | show_statement | drop_all_row_access_policies_statement | drop_statement + | flush_statement | call_statement | import_statement | module_statement @@ -3721,6 +3724,14 @@ show_statement: } ; +flush_statement: + "FLUSH" "PRIVILEGES" + { + $$ = MAKE_NODE(ASTFlushStatement, @$, {"PRIVILEGES"}); + } + ; + + show_target: "MATERIALIZED" "VIEWS" { diff --git a/zetasql/parser/flex_tokenizer.l b/zetasql/parser/flex_tokenizer.l index 47115ac44..63bcaa4d1 100644 --- a/zetasql/parser/flex_tokenizer.l +++ b/zetasql/parser/flex_tokenizer.l @@ -464,6 +464,7 @@ fill { return BisonParserImpl::token::KW_FILL; } filter { return BisonParserImpl::token::KW_FILTER; } filter_fields { return BisonParserImpl::token::KW_FILTER_FIELDS; } first { return BisonParserImpl::token::KW_FIRST; } +flush { return BisonParserImpl::token::KW_FLUSH; } following { return BisonParserImpl::token::KW_FOLLOWING; } for { return BisonParserImpl::token::KW_FOR; } foreign { return BisonParserImpl::token::KW_FOREIGN; } diff --git a/zetasql/parser/keywords.cc b/zetasql/parser/keywords.cc index 9e87c74bd..8bf9e184f 100644 --- a/zetasql/parser/keywords.cc +++ b/zetasql/parser/keywords.cc @@ -141,6 +141,7 @@ constexpr KeywordInfoPOD kAllKeywords[] = { {"filter_fields", KW_FILTER_FIELDS}, {"fill", KW_FILL}, {"first", KW_FIRST}, + {"flush", KW_FLUSH}, {"following", KW_FOLLOWING, KeywordInfo::kReserved}, {"for", KW_FOR, KeywordInfo::kReserved}, {"foreign", KW_FOREIGN}, diff --git a/zetasql/parser/testdata/flush_privileges.test b/zetasql/parser/testdata/flush_privileges.test new file mode 100644 index 000000000..2fa2cb5c5 --- /dev/null +++ b/zetasql/parser/testdata/flush_privileges.test @@ -0,0 +1,35 @@ +flush privileges; +-- +FlushStatement [0-16] + Keyword(`PRIVILEGES`) [6-16] +-- +FLUSH PRIVILEGES +== + +flush privileges with extra; +-- +ERROR: Syntax error: Expected end of input but got identifier "with" [at 1:19] +flush privileges with extra; + ^ +== + +flush privileges like; +-- +ERROR: Syntax error: Expected end of input but got identifier "like" [at 1:18] +flush privileges like; + ^ +== + +flush; +-- +ERROR: Syntax error: Expected "PRIVILEGES" but got ";" [at 1:6] +flush; + ^ +== + +flush something else; +-- +ERROR: Syntax error: Expected "PRIVILEGES" but got "something" [at 1:7] +flush something else; + ^ +==