@@ -3684,11 +3684,16 @@ impl<'a> Parser<'a> {
36843684 }
36853685
36863686 let mut key_values: Vec < SetVariableKeyValue > = vec ! [ ] ;
3687- loop {
3687+
3688+ if dialect_of ! ( self is PostgreSqlDialect | RedshiftSqlDialect ) {
36883689 let variable = self . parse_identifier ( ) ?;
36893690 let mut values = vec ! [ ] ;
36903691
3691- if self . consume_token ( & Token :: Eq ) || self . parse_keyword ( Keyword :: TO ) {
3692+ if !self . consume_token ( & Token :: Eq ) && !self . parse_keyword ( Keyword :: TO ) {
3693+ return self . expected ( "equals sign or TO" , self . peek_token ( ) ) ;
3694+ }
3695+
3696+ loop {
36923697 let value = if let Ok ( expr) = self . parse_expr ( ) {
36933698 expr
36943699 } else {
@@ -3697,22 +3702,50 @@ impl<'a> Parser<'a> {
36973702
36983703 values. push ( value) ;
36993704
3700- key_values. push ( SetVariableKeyValue {
3701- key : variable,
3702- value : values,
3703- local : modifier == Some ( Keyword :: LOCAL ) ,
3704- hivevar : false ,
3705- } ) ;
3706-
3707- if self . consume_token ( & Token :: Comma ) {
3708- continue ;
3705+ if !self . consume_token ( & Token :: Comma ) {
3706+ break ;
37093707 }
3708+ }
37103709
3711- return Ok ( Statement :: SetVariable { key_values } ) ;
3712- } else {
3710+ key_values. push ( SetVariableKeyValue {
3711+ key : variable,
3712+ value : values,
3713+ local : modifier == Some ( Keyword :: LOCAL ) ,
3714+ hivevar : false ,
3715+ } ) ;
3716+
3717+ return Ok ( Statement :: SetVariable { key_values } ) ;
3718+ }
3719+
3720+ loop {
3721+ let variable = self . parse_identifier ( ) ?;
3722+ let mut values = vec ! [ ] ;
3723+
3724+ if !self . consume_token ( & Token :: Eq ) && !self . parse_keyword ( Keyword :: TO ) {
37133725 return self . expected ( "equals sign or TO" , self . peek_token ( ) ) ;
37143726 }
3727+
3728+ let value = if let Ok ( expr) = self . parse_expr ( ) {
3729+ expr
3730+ } else {
3731+ self . expected ( "variable value" , self . peek_token ( ) ) ?
3732+ } ;
3733+
3734+ values. push ( value) ;
3735+
3736+ key_values. push ( SetVariableKeyValue {
3737+ key : variable,
3738+ value : values,
3739+ local : modifier == Some ( Keyword :: LOCAL ) ,
3740+ hivevar : false ,
3741+ } ) ;
3742+
3743+ if !self . consume_token ( & Token :: Comma ) {
3744+ break ;
3745+ }
37153746 }
3747+
3748+ Ok ( Statement :: SetVariable { key_values } )
37163749 }
37173750
37183751 pub fn parse_show ( & mut self ) -> Result < Statement , ParserError > {
0 commit comments