@@ -4833,25 +4833,22 @@ func (p *Parser) parseCreateMaterializedViewStatement() (*ast.CreateViewStatemen
48334833 p .nextToken ()
48344834
48354835 if optionName == "DISTRIBUTION" {
4836- // Parse DISTRIBUTION = HASH(col1, col2, ...)
4836+ // Parse DISTRIBUTION = HASH(col1, col2, ...) or DISTRIBUTION = ROUND_ROBIN
48374837 if p .curTok .Type == TokenEquals {
48384838 p .nextToken ()
48394839 }
48404840 if strings .ToUpper (p .curTok .Literal ) == "HASH" {
48414841 p .nextToken ()
48424842 if p .curTok .Type == TokenLParen {
48434843 p .nextToken ()
4844- distOpt := & ast.ViewDistributionOption {
4845- OptionKind : "Distribution" ,
4846- Value : & ast.ViewHashDistributionPolicy {},
4847- }
4844+ hashPolicy := & ast.ViewHashDistributionPolicy {}
48484845 // Parse column list
48494846 for p .curTok .Type != TokenRParen && p .curTok .Type != TokenEOF {
48504847 col := p .parseIdentifier ()
4851- if distOpt . Value .DistributionColumn == nil {
4852- distOpt . Value .DistributionColumn = col
4848+ if hashPolicy .DistributionColumn == nil {
4849+ hashPolicy .DistributionColumn = col
48534850 }
4854- distOpt . Value . DistributionColumns = append (distOpt . Value .DistributionColumns , col )
4851+ hashPolicy . DistributionColumns = append (hashPolicy .DistributionColumns , col )
48554852 if p .curTok .Type == TokenComma {
48564853 p .nextToken ()
48574854 } else {
@@ -4861,8 +4858,17 @@ func (p *Parser) parseCreateMaterializedViewStatement() (*ast.CreateViewStatemen
48614858 if p .curTok .Type == TokenRParen {
48624859 p .nextToken ()
48634860 }
4864- stmt .ViewOptions = append (stmt .ViewOptions , distOpt )
4861+ stmt .ViewOptions = append (stmt .ViewOptions , & ast.ViewDistributionOption {
4862+ OptionKind : "Distribution" ,
4863+ Value : hashPolicy ,
4864+ })
48654865 }
4866+ } else if strings .ToUpper (p .curTok .Literal ) == "ROUND_ROBIN" {
4867+ p .nextToken () // consume ROUND_ROBIN
4868+ stmt .ViewOptions = append (stmt .ViewOptions , & ast.ViewDistributionOption {
4869+ OptionKind : "Distribution" ,
4870+ Value : & ast.ViewRoundRobinDistributionPolicy {},
4871+ })
48664872 }
48674873 } else if optionName == "FOR_APPEND" {
48684874 stmt .ViewOptions = append (stmt .ViewOptions , & ast.ViewForAppendOption {
@@ -4900,6 +4906,40 @@ func (p *Parser) parseCreateMaterializedViewStatement() (*ast.CreateViewStatemen
49004906 return stmt , nil
49014907}
49024908
4909+ func (p * Parser ) parseAlterMaterializedViewStatement () (* ast.AlterViewStatement , error ) {
4910+ // Consume MATERIALIZED
4911+ p .nextToken ()
4912+
4913+ // Expect VIEW
4914+ if p .curTok .Type != TokenView {
4915+ return nil , fmt .Errorf ("expected VIEW after MATERIALIZED, got %s" , p .curTok .Literal )
4916+ }
4917+ p .nextToken ()
4918+
4919+ stmt := & ast.AlterViewStatement {
4920+ IsMaterialized : true ,
4921+ }
4922+
4923+ // Parse view name
4924+ son , err := p .parseSchemaObjectName ()
4925+ if err != nil {
4926+ return nil , err
4927+ }
4928+ stmt .SchemaObjectName = son
4929+
4930+ // Parse REBUILD or DISABLE
4931+ switch strings .ToUpper (p .curTok .Literal ) {
4932+ case "REBUILD" :
4933+ stmt .IsRebuild = true
4934+ p .nextToken ()
4935+ case "DISABLE" :
4936+ stmt .IsDisable = true
4937+ p .nextToken ()
4938+ }
4939+
4940+ return stmt , nil
4941+ }
4942+
49034943func (p * Parser ) parseCreateSchemaStatement () (* ast.CreateSchemaStatement , error ) {
49044944 // Consume SCHEMA
49054945 p .nextToken ()
0 commit comments