diff --git a/docs/generated/sql/bnf/stmt_block.bnf b/docs/generated/sql/bnf/stmt_block.bnf index db0d1896fed7..d4f531e7dde6 100644 --- a/docs/generated/sql/bnf/stmt_block.bnf +++ b/docs/generated/sql/bnf/stmt_block.bnf @@ -1515,6 +1515,7 @@ session_var ::= | 'ALL' | 'DATABASE' | 'NAMES' + | 'ROLE' | 'SESSION_USER' | 'TIME' 'ZONE' diff --git a/pkg/sql/logictest/testdata/logic_test/user b/pkg/sql/logictest/testdata/logic_test/user index 0351355f0128..fa0cad8f5258 100644 --- a/pkg/sql/logictest/testdata/logic_test/user +++ b/pkg/sql/logictest/testdata/logic_test/user @@ -184,3 +184,14 @@ ALTER USER userlongpassword WITH PASSWORD '987654321021' statement ok DROP USER userlongpassword + +subtest set_role + +statement error unimplemented +SET ROLE = 'testuser' + +statement error unimplemented +SET ROLE testuser + +statement error unimplemented +RESET ROLE diff --git a/pkg/sql/parser/sql.y b/pkg/sql/parser/sql.y index 07b3dbbad6d8..d41803092a21 100644 --- a/pkg/sql/parser/sql.y +++ b/pkg/sql/parser/sql.y @@ -4618,6 +4618,11 @@ set_rest: /* SKIP DOC */ $$.val = &tree.SetVar{Name: "search_path", Values: tree.Exprs{$2.expr()}} } +| ROLE var_value + { + /* SKIP DOC */ + $$.val = &tree.SetVar{Name: "role", Values: tree.Exprs{$2.expr()}} + } set_rest_more: // SET syntaxes supported as a clause of other statements: @@ -4874,6 +4879,7 @@ session_var: // SET NAMES is standard SQL for SET client_encoding. // See https://www.postgresql.org/docs/9.6/static/multibyte.html#AEN39236 | NAMES { $$ = "client_encoding" } +| ROLE | SESSION_USER // TIME ZONE is special: it is two tokens, but is really the identifier "TIME ZONE". | TIME ZONE { $$ = "timezone" }