shardingsphere-operator/pkg/distsql/visitor/shadow_rdl.go (225 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package visitor import ( "fmt" "github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/distsql/ast" parser "github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/distsql/visitor_parser/shadow" ) type ShadowVisitor struct { parser.BaseRDLStatementVisitor } func (v *ShadowVisitor) VisitCreateShadowRule(ctx *parser.CreateShadowRuleContext) *ast.CreateShadowRule { stmt := &ast.CreateShadowRule{} if ctx.IfNotExists() != nil { stmt.IfNotExists = v.VisitIfNotExists(ctx.IfNotExists().(*parser.IfNotExistsContext)) } if ctx.AllShadowRuleDefinition() != nil { for _, r := range ctx.AllShadowRuleDefinition() { stmt.AllShadowRuleDefinition = append(stmt.AllShadowRuleDefinition, v.VisitShadowRuleDefinition(r.(*parser.ShadowRuleDefinitionContext))) } } return stmt } func (v *ShadowVisitor) VisitAlterShadowRule(ctx *parser.AlterShadowRuleContext) *ast.AlterShadowRule { stmt := &ast.AlterShadowRule{} if ctx.AllShadowRuleDefinition() != nil { for _, r := range ctx.AllShadowRuleDefinition() { stmt.AllShadowRuleDefinition = append(stmt.AllShadowRuleDefinition, v.VisitShadowRuleDefinition(r.(*parser.ShadowRuleDefinitionContext))) } } return stmt } func (v *ShadowVisitor) VisitDropShadowRule(ctx *parser.DropShadowRuleContext) *ast.DropShadowRule { stmt := &ast.DropShadowRule{} if ctx.IfExists() != nil { stmt.IfExists = v.VisitIfExists(ctx.IfExists().(*parser.IfExistsContext)) } if ctx.AllRuleName() != nil { for _, rn := range ctx.AllRuleName() { stmt.AllRuleName = append(stmt.AllRuleName, v.VisitRuleName(rn.(*parser.RuleNameContext))) } } return stmt } func (v *ShadowVisitor) VisitDropShadowAlgorithm(ctx *parser.DropShadowAlgorithmContext) *ast.DropShadowAlgorithm { stmt := &ast.DropShadowAlgorithm{} if ctx.IfExists() != nil { stmt.IfExists = v.VisitIfExists(ctx.IfExists().(*parser.IfExistsContext)) } if ctx.AllAlgorithmName() != nil { for _, algorithm := range ctx.AllAlgorithmName() { stmt.AllAlgorithmName = append(stmt.AllAlgorithmName, v.VisitAlgorithmName(algorithm.(*parser.AlgorithmNameContext))) } } return stmt } func (v *ShadowVisitor) VisitCreateDefaultShadowAlgorithm(ctx *parser.CreateDefaultShadowAlgorithmContext) *ast.CreateDefaultShadowAlgorithm { stmt := &ast.CreateDefaultShadowAlgorithm{} if ctx.IfNotExists() != nil { stmt.IfNotExists = v.VisitIfNotExists(ctx.IfNotExists().(*parser.IfNotExistsContext)) } if ctx.AlgorithmDefinition() != nil { stmt.AlgorithmDefinition = v.VisitAlgorithmDefinition(ctx.AlgorithmDefinition().(*parser.AlgorithmDefinitionContext)) } return stmt } func (v *ShadowVisitor) VisitDropDefaultShadowAlgorithm(ctx *parser.DropDefaultShadowAlgorithmContext) *ast.DropDefaultShadowAlgorithm { stmt := &ast.DropDefaultShadowAlgorithm{} if ctx.IfExists() != nil { stmt.IfExists = v.VisitIfExists(ctx.IfExists().(*parser.IfExistsContext)) } return stmt } func (v *ShadowVisitor) VisitAlterDefaultShadowAlgorithm(ctx *parser.AlterDefaultShadowAlgorithmContext) *ast.AlterDefaultShadowAlgorithm { stmt := &ast.AlterDefaultShadowAlgorithm{} if ctx.AlgorithmDefinition() != nil { stmt.AlgorithmDefinition = v.VisitAlgorithmDefinition(ctx.AlgorithmDefinition().(*parser.AlgorithmDefinitionContext)) } return stmt } func (v *ShadowVisitor) VisitShadowRuleDefinition(ctx *parser.ShadowRuleDefinitionContext) *ast.ShadowRuleDefinition { stmt := &ast.ShadowRuleDefinition{} if ctx.RuleName() != nil { stmt.RuleName = v.VisitRuleName(ctx.RuleName().(*parser.RuleNameContext)) } if ctx.Source() != nil { stmt.Source = v.VisitSource(ctx.Source().(*parser.SourceContext)) } if ctx.SHADOW() != nil { stmt.Shadow = v.VisitShadow(ctx.Shadow().(*parser.ShadowContext)) } if ctx.AllShadowTableRule() != nil { for _, r := range ctx.AllShadowTableRule() { stmt.AllShadowTableRule = append(stmt.AllShadowTableRule, v.VisitShadowTableRule(r.(*parser.ShadowTableRuleContext))) } } return stmt } func (v *ShadowVisitor) VisitShadowTableRule(ctx *parser.ShadowTableRuleContext) *ast.ShadowTableRule { stmt := &ast.ShadowTableRule{} if ctx.TableName() != nil { stmt.TableName = v.VisitTableName(ctx.TableName().(*parser.TableNameContext)) } if ctx.AllAlgorithmDefinition() != nil { for _, algorithm := range ctx.AllAlgorithmDefinition() { stmt.AllAlgorithmDefinition = append(stmt.AllAlgorithmDefinition, v.VisitAlgorithmDefinition(algorithm.(*parser.AlgorithmDefinitionContext))) } } return stmt } func (v *ShadowVisitor) VisitSource(ctx *parser.SourceContext) *ast.CommonIdentifier { stmt := &ast.CommonIdentifier{} if ctx.IDENTIFIER_() != nil { stmt.Identifier = ctx.IDENTIFIER_().GetText() } return stmt } func (v *ShadowVisitor) VisitShadow(ctx *parser.ShadowContext) *ast.CommonIdentifier { stmt := &ast.CommonIdentifier{} if ctx.IDENTIFIER_() != nil { stmt.Identifier = ctx.IDENTIFIER_().GetText() } return stmt } func (v *ShadowVisitor) VisitTableName(ctx *parser.TableNameContext) *ast.CommonIdentifier { stmt := &ast.CommonIdentifier{} if ctx.IDENTIFIER_() != nil { stmt.Identifier = ctx.IDENTIFIER_().GetText() } return stmt } func (v *ShadowVisitor) VisitAlgorithmName(ctx *parser.AlgorithmNameContext) *ast.CommonIdentifier { stmt := &ast.CommonIdentifier{} if ctx.IDENTIFIER_() != nil { stmt.Identifier = ctx.IDENTIFIER_().GetText() } return stmt } func (v *ShadowVisitor) VisitIfExists(ctx *parser.IfExistsContext) *ast.IfExists { return &ast.IfExists{ IfExists: fmt.Sprintf("%s %s", ctx.IF().GetText(), ctx.EXISTS().GetText()), } } func (v *ShadowVisitor) VisitIfNotExists(ctx *parser.IfNotExistsContext) *ast.IfNotExists { return &ast.IfNotExists{ IfNotExists: fmt.Sprintf("%s %s %s", ctx.IF().GetText(), ctx.NOT().GetText(), ctx.EXISTS().GetText()), } } // nolint func (v *ShadowVisitor) VisitLiteral(ctx *parser.LiteralContext) *ast.Literal { stmt := &ast.Literal{} switch { case ctx.STRING_() != nil: stmt.Literal = ctx.STRING_().GetText() case ctx.MINUS_() != nil: stmt.Literal = ctx.MINUS_().GetText() case ctx.INT_() != nil: stmt.Literal = ctx.INT_().GetText() case ctx.TRUE() != nil: stmt.Literal = ctx.TRUE().GetText() case ctx.FALSE() != nil: stmt.Literal = ctx.FALSE().GetText() } return stmt } func (v *ShadowVisitor) VisitAlgorithmDefinition(ctx *parser.AlgorithmDefinitionContext) *ast.AlgorithmDefinition { stmt := &ast.AlgorithmDefinition{} if ctx.AlgorithmTypeName() != nil { stmt.AlgorithmTypeName = v.VisitAlgorithmTypeName(ctx.AlgorithmTypeName().(*parser.AlgorithmTypeNameContext)) } if ctx.PropertiesDefinition() != nil { stmt.PropertiesDefinition = v.VisitPropertiesDefinition(ctx.PropertiesDefinition().(*parser.PropertiesDefinitionContext)) } return stmt } func (v *ShadowVisitor) VisitAlgorithmTypeName(ctx *parser.AlgorithmTypeNameContext) *ast.AlgorithmTypeName { stmt := &ast.AlgorithmTypeName{} switch { case ctx.STRING_() != nil: stmt.String = ctx.STRING_().GetText() case ctx.BuildInShadowAlgorithmType() != nil: stmt.BuildinAlgorithmTypeName = v.VisitBuildInShadowAlgorithmType(ctx.BuildInShadowAlgorithmType().(*parser.BuildInShadowAlgorithmTypeContext)) } return stmt } // nolint func (v *ShadowVisitor) VisitBuildInShadowAlgorithmType(ctx *parser.BuildInShadowAlgorithmTypeContext) *ast.BuildinAlgorithmTypeName { stmt := &ast.BuildinAlgorithmTypeName{} switch { case ctx.VALUE_MATCH() != nil: stmt.AlgorithmTypeName = ctx.VALUE_MATCH().GetText() case ctx.REGEX_MATCH() != nil: stmt.AlgorithmTypeName = ctx.REGEX_MATCH().GetText() case ctx.SQL_HINT() != nil: stmt.AlgorithmTypeName = ctx.SQL_HINT().GetText() } return stmt } func (v *ShadowVisitor) VisitPropertiesDefinition(ctx *parser.PropertiesDefinitionContext) *ast.PropertiesDefinition { stmt := &ast.PropertiesDefinition{} if ctx.Properties() != nil { stmt.Properties = v.VisitProperties(ctx.Properties().(*parser.PropertiesContext)) } return stmt } func (v *ShadowVisitor) VisitProperties(ctx *parser.PropertiesContext) *ast.Properties { stmt := &ast.Properties{} for _, p := range ctx.AllProperty() { stmt.Properties = append(stmt.Properties, v.VisitProperty(p.(*parser.PropertyContext))) } return stmt } func (v *ShadowVisitor) VisitProperty(ctx *parser.PropertyContext) *ast.Property { stmt := &ast.Property{} if ctx.STRING_() != nil { stmt.Key = ctx.STRING_().GetText() } if ctx.Literal() != nil { stmt.Literal = v.VisitLiteral(ctx.Literal().(*parser.LiteralContext)) } return stmt } func (v *ShadowVisitor) VisitRuleName(ctx *parser.RuleNameContext) *ast.CommonIdentifier { stmt := &ast.CommonIdentifier{} if ctx.IDENTIFIER_() != nil { stmt.Identifier = ctx.IDENTIFIER_().GetText() } return stmt }