shardingsphere-operator/pkg/distsql/ast/sharding_rdl_ast.go (574 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 ast import ( "fmt" "strings" ) type CreateShardingTableRule struct { IfNotExists *IfNotExists AllShardingTableRuleDefinition []*ShardingTableRuleDefinition } func (createShardingTableRule *CreateShardingTableRule) ToString() string { var ( ifNotExists string allShardingTableRuleDefinition []string ) if createShardingTableRule.IfNotExists != nil { ifNotExists = createShardingTableRule.IfNotExists.ToString() } if createShardingTableRule.AllShardingTableRuleDefinition != nil { for _, r := range createShardingTableRule.AllShardingTableRuleDefinition { allShardingTableRuleDefinition = append(allShardingTableRuleDefinition, r.ToString()) } } return fmt.Sprintf("CREATE SHARDING TABLE RULE %s %s", ifNotExists, strings.Join(allShardingTableRuleDefinition, ",")) } type ShardingTableRuleDefinition struct { ShardingAutoTableRule *ShardingAutoTableRule ShardingTableRule *ShardingTableRule } func (shardingTableRuleDefinition *ShardingTableRuleDefinition) ToString() string { switch { case shardingTableRuleDefinition.ShardingAutoTableRule != nil: return shardingTableRuleDefinition.ShardingAutoTableRule.ToString() case shardingTableRuleDefinition.ShardingTableRule != nil: return shardingTableRuleDefinition.ShardingTableRule.ToString() } return "" } type CreateShardingTableReferenceRule struct { IfNotExists *IfNotExists AllTableReferenceRuleDefinition []*TableReferenceRuleDefinition } func (createShardingTableReferenceRule *CreateShardingTableReferenceRule) ToString() string { var ( ifNotExists string allTableReferenceRuleDefinition []string ) if createShardingTableReferenceRule.IfNotExists != nil { ifNotExists = createShardingTableReferenceRule.IfNotExists.ToString() } if createShardingTableReferenceRule.AllTableReferenceRuleDefinition != nil { for _, r := range createShardingTableReferenceRule.AllTableReferenceRuleDefinition { allTableReferenceRuleDefinition = append(allTableReferenceRuleDefinition, r.ToString()) } } return fmt.Sprintf("CREATE SHARDING TABLE REFERENCE RULE %s %s", ifNotExists, strings.Join(allTableReferenceRuleDefinition, ",")) } type TableReferenceRuleDefinition struct { RuleName *CommonIdentifier AllTableName []*CommonIdentifier } func (tableReferenceRuleDefinition *TableReferenceRuleDefinition) ToString() string { var ( ruleName string allTableName []string ) if tableReferenceRuleDefinition.RuleName != nil { ruleName = tableReferenceRuleDefinition.RuleName.ToString() } if tableReferenceRuleDefinition.AllTableName != nil { for _, t := range tableReferenceRuleDefinition.AllTableName { allTableName = append(allTableName, t.ToString()) } } return fmt.Sprintf("%s (%s)", ruleName, strings.Join(allTableName, ",")) } type ShardingAutoTableRule struct { TableName *CommonIdentifier StorageUnits *StorageUnits AutoShardingColumnDefinition *AutoShardingColumnDefinition AlgorithmDefinition *ShardingAlgorithmDefinition KeyGenerateDefinition *KeyGenerateDefinition AuditDefinition *AuditDefinition } // nolint func (shardingAutoTableRule *ShardingAutoTableRule) ToString() string { var ( tableName string storageUnits string autoShardingColumnDefinition string algorithmDefinition string keyGenerateDefinition string auditDefinition string ) if shardingAutoTableRule.TableName != nil { tableName = shardingAutoTableRule.TableName.ToString() } if shardingAutoTableRule.StorageUnits != nil { storageUnits = shardingAutoTableRule.StorageUnits.ToString() } if shardingAutoTableRule.AutoShardingColumnDefinition != nil { autoShardingColumnDefinition = shardingAutoTableRule.AutoShardingColumnDefinition.ToString() } if shardingAutoTableRule.AlgorithmDefinition != nil { algorithmDefinition = shardingAutoTableRule.AlgorithmDefinition.ToString() } if shardingAutoTableRule.KeyGenerateDefinition != nil { keyGenerateDefinition = shardingAutoTableRule.KeyGenerateDefinition.ToString() } if shardingAutoTableRule.AuditDefinition != nil { auditDefinition = shardingAutoTableRule.AuditDefinition.ToString() } return fmt.Sprintf("%s (%s,%s,%s,%s,%s)", tableName, storageUnits, autoShardingColumnDefinition, algorithmDefinition, keyGenerateDefinition, auditDefinition) } type StorageUnits struct { AllStorageUnit []*StorageUnit } func (storageUnits *StorageUnits) ToString() string { var ( allStorageUnit []string ) if storageUnits.AllStorageUnit != nil { for _, s := range storageUnits.AllStorageUnit { allStorageUnit = append(allStorageUnit, s.ToString()) } } return fmt.Sprintf("STORAGE_UNITS (%s)", strings.Join(allStorageUnit, ",")) } type StorageUnit struct { String string Identifier string } func (storageUnit *StorageUnit) ToString() string { switch { case storageUnit.String != "": return storageUnit.String case storageUnit.Identifier != "": return storageUnit.Identifier } return "" } type AutoShardingColumnDefinition struct { ShardingColumn *ShardingColumn } func (autoShardingColumnDefinition *AutoShardingColumnDefinition) ToString() string { return autoShardingColumnDefinition.ShardingColumn.ToString() } type ShardingColumn struct { ColumnName *CommonIdentifier } func (shardingColumn *ShardingColumn) ToString() string { return fmt.Sprintf("SHARDING_COLUMN EQ_ %s", shardingColumn.ColumnName.ToString()) } type KeyGenerateDefinition struct { ColumnName *CommonIdentifier AlgorithmDefinition *ShardingAlgorithmDefinition } func (keyGenerateDefinition *KeyGenerateDefinition) ToString() string { var ( columnName string algorithmDefinition string ) if keyGenerateDefinition.ColumnName != nil { columnName = keyGenerateDefinition.ColumnName.ToString() } if keyGenerateDefinition.AlgorithmDefinition != nil { algorithmDefinition = keyGenerateDefinition.AlgorithmDefinition.ToString() } return fmt.Sprintf("KEY_GENERATE_STRATEGY (COLUMN = %s, %s)", columnName, algorithmDefinition) } type AuditDefinition struct { MultiAuditDefinition *MultiAuditDefinition AuditAllowHintDisable *AuditAllowHintDisable } func (auditDefinition *AuditDefinition) ToString() string { return fmt.Sprintf("AUDIT_STRATEGY (%s, ALLOW_HINT_DISABLE = %s)", auditDefinition.MultiAuditDefinition.ToString(), auditDefinition.AuditAllowHintDisable.ToString()) } type MultiAuditDefinition struct { AllSingleAuditDefinition []*SingleAuditDefinition } func (multiAuditDefinition *MultiAuditDefinition) ToString() string { var allSingleAuditDefinition []string for _, d := range multiAuditDefinition.AllSingleAuditDefinition { allSingleAuditDefinition = append(allSingleAuditDefinition, d.ToString()) } return strings.Join(allSingleAuditDefinition, ",") } type SingleAuditDefinition struct { AlgorithmDefinition *ShardingAlgorithmDefinition } func (singleAuditDefinition *SingleAuditDefinition) ToString() string { return singleAuditDefinition.AlgorithmDefinition.ToString() } type AuditAllowHintDisable struct { AuditAllowHintDisable string } func (auditAllowHintDisable *AuditAllowHintDisable) ToString() string { return auditAllowHintDisable.AuditAllowHintDisable } type ShardingTableRule struct { TableName *CommonIdentifier DataNodes *DataNodes DatabaseStrategy *DatabaseStrategy TableStrategy *TableStrategy KeyGenerateDefinition *KeyGenerateDefinition AuditDefinition *AuditDefinition } // nolint func (shardingTableRule *ShardingTableRule) ToString() string { var ( tableName string datanodes string databaseStrategy string tableStrategy string keyGenerateDefinition string auditDefinition string ) if shardingTableRule.TableName != nil { tableName = shardingTableRule.TableName.ToString() } if shardingTableRule.DataNodes != nil { datanodes = shardingTableRule.DataNodes.ToString() } if shardingTableRule.DatabaseStrategy != nil { databaseStrategy = shardingTableRule.DatabaseStrategy.ToString() } if shardingTableRule.TableStrategy != nil { tableStrategy = shardingTableRule.TableStrategy.ToString() } if shardingTableRule.KeyGenerateDefinition != nil { keyGenerateDefinition = shardingTableRule.KeyGenerateDefinition.ToString() } if shardingTableRule.AuditDefinition != nil { auditDefinition = shardingTableRule.AuditDefinition.ToString() } return fmt.Sprintf("%s(%s,%s,%s,%s,%s)", tableName, datanodes, databaseStrategy, tableStrategy, keyGenerateDefinition, auditDefinition) } type DataNode struct { String string } func (dataNode *DataNode) ToString() string { return dataNode.String } type DatabaseStrategy struct { ShardingStrategy *ShardingStrategy } func (databaseStrategy *DatabaseStrategy) ToString() string { return fmt.Sprintf("DATABASE_STRATEGY (%s)", databaseStrategy.ShardingStrategy.ToString()) } type TableStrategy struct { ShardingStrategy *ShardingStrategy } func (tableStrategy *TableStrategy) ToString() string { return fmt.Sprintf("TABLE_STRATEGY (%s)", tableStrategy.ShardingStrategy.ToString()) } type ShardingStrategy struct { StrategyType *StrategyType ShardingColumnDefinition *ShardingColumnDefinition ShardingAlgorithm *ShardingAlgorithm } func (shardingStrategy *ShardingStrategy) ToString() string { var ( strategyType string shardingColumnDefinition string shardingAlgorithm string ) if shardingStrategy.StrategyType != nil { strategyType = shardingStrategy.StrategyType.ToString() } if shardingStrategy.ShardingColumnDefinition != nil { shardingColumnDefinition = shardingStrategy.ShardingColumnDefinition.ToString() } if shardingStrategy.ShardingAlgorithm != nil { shardingAlgorithm = shardingStrategy.ShardingAlgorithm.ToString() } return fmt.Sprintf("TYPE = %s,%s,%s", strategyType, shardingColumnDefinition, shardingAlgorithm) } type StrategyType struct { BuildInStrategyType *BuildInStrategyType String string } func (strategyType *StrategyType) ToString() string { switch { case strategyType.String != "": return strategyType.String case strategyType.BuildInStrategyType != nil: return strategyType.BuildInStrategyType.ToString() } return "" } type ShardingColumnDefinition struct { ShardingColumn *ShardingColumn ShardingColumns *ShardingColumns } func (shardingColumnDefinition *ShardingColumnDefinition) ToString() string { switch { case shardingColumnDefinition.ShardingColumn != nil: return shardingColumnDefinition.ShardingColumn.ToString() case shardingColumnDefinition.ShardingColumns != nil: return shardingColumnDefinition.ShardingColumns.ToString() } return "" } type ShardingColumns struct { ColumnName *CommonIdentifier AllColumnName []*CommonIdentifier } func (shardingColumns *ShardingColumns) ToString() string { var ( columnName string allColumnName []string ) if shardingColumns.ColumnName != nil { columnName = shardingColumns.ColumnName.ToString() } if shardingColumns.AllColumnName != nil { for _, n := range shardingColumns.AllColumnName { allColumnName = append(allColumnName, n.ToString()) } } return fmt.Sprintf("SHARDING_COLUMNS = %s,%s", columnName, strings.Join(allColumnName, ",")) } type ShardingAlgorithm struct { AlgorithmDefinition *ShardingAlgorithmDefinition } func (shardingAlgorithm *ShardingAlgorithm) ToString() string { return fmt.Sprintf("SHARDING_ALGORITHM (%s)", shardingAlgorithm.AlgorithmDefinition.ToString()) } type AlterShardingTableRule struct { AllShardingTableRuleDefinition []*ShardingTableRuleDefinition } func (alterShardingTableRule *AlterShardingTableRule) ToString() string { var allRule []string for _, r := range alterShardingTableRule.AllShardingTableRuleDefinition { allRule = append(allRule, r.ToString()) } return fmt.Sprintf("ALTER SHARDING TABLE RULE %s", strings.Join(allRule, ",")) } type AlterShardingTableReferenceRule struct { AllTableReferenceRuleDefinition []*TableReferenceRuleDefinition } func (alterShardingTableReferenceRule *AlterShardingTableReferenceRule) ToString() string { var allRule []string for _, r := range alterShardingTableReferenceRule.AllTableReferenceRuleDefinition { allRule = append(allRule, r.ToString()) } return fmt.Sprintf("ALTER SHARDING TABLE REFERENCE RULE %s", strings.Join(allRule, ",")) } type DropShardingTableReferenceRule struct { IfExists *IfExists AllRuleNames []*CommonIdentifier } func (dropShardingTableReferenceRule *DropShardingTableReferenceRule) ToString() string { var ( ifExists string allRule []string ) if dropShardingTableReferenceRule.IfExists != nil { ifExists = dropShardingTableReferenceRule.IfExists.ToString() } if dropShardingTableReferenceRule.AllRuleNames != nil { for _, r := range dropShardingTableReferenceRule.AllRuleNames { allRule = append(allRule, r.ToString()) } } return fmt.Sprintf("DROP SHARDING TABLE REFERENCE RULE %s %s", ifExists, strings.Join(allRule, ",")) } type DropShardingTableRule struct { IfExists *IfExists AllTableName []*CommonIdentifier } func (dropShardingTableRule *DropShardingTableRule) ToString() string { var ( ifExists string allTableName []string ) if dropShardingTableRule.IfExists != nil { ifExists = dropShardingTableRule.IfExists.ToString() } if dropShardingTableRule.AllTableName != nil { for _, t := range dropShardingTableRule.AllTableName { allTableName = append(allTableName, t.ToString()) } } return fmt.Sprintf("DROP SHARDING TABLE RULE %s %s", ifExists, strings.Join(allTableName, ",")) } type CreateBroadcastTableRule struct { IfNotExists *IfNotExists AllTableName []*CommonIdentifier } func (createBroadcastTableRule *CreateBroadcastTableRule) ToString() string { var ( ifNotExists string allTableName []string ) if createBroadcastTableRule.IfNotExists != nil { ifNotExists = createBroadcastTableRule.IfNotExists.ToString() } if createBroadcastTableRule.AllTableName != nil { for _, t := range createBroadcastTableRule.AllTableName { allTableName = append(allTableName, t.ToString()) } } return fmt.Sprintf("CREATE BROADCAST TABLE RULE %s %s", ifNotExists, strings.Join(allTableName, ",")) } type DropBroadcastTableRule struct { IfExists *IfExists AllTableName []*CommonIdentifier } func (dropBroadcastTableRule *DropBroadcastTableRule) ToString() string { var ( ifExists string allTable []string ) if dropBroadcastTableRule.IfExists != nil { ifExists = dropBroadcastTableRule.IfExists.ToString() } if dropBroadcastTableRule.AllTableName != nil { for _, t := range dropBroadcastTableRule.AllTableName { allTable = append(allTable, t.ToString()) } } return fmt.Sprintf("DROP BROADCAST TABLE RULE %s %s", ifExists, strings.Join(allTable, ",")) } type DropShardingAlgorithm struct { IfExists *IfExists AllShardingAlgorithmName []*CommonIdentifier } func (dropShardingAlgorithm DropShardingAlgorithm) ToString() string { var ( ifExists string allAlgo []string ) if dropShardingAlgorithm.IfExists != nil { ifExists = dropShardingAlgorithm.IfExists.ToString() } if dropShardingAlgorithm.AllShardingAlgorithmName != nil { for _, t := range dropShardingAlgorithm.AllShardingAlgorithmName { allAlgo = append(allAlgo, t.ToString()) } } return fmt.Sprintf("DROP BROADCAST TABLE RULE %s %s", ifExists, strings.Join(allAlgo, ",")) } type CreateDefaultShardingStrategy struct { IfNotExists *IfNotExists ShardingStrategy *ShardingStrategy } func (createDefaultShardingStrategy *CreateDefaultShardingStrategy) ToString() string { var ( ifNotExists string shardingStrategy string ) if createDefaultShardingStrategy.IfNotExists != nil { ifNotExists = createDefaultShardingStrategy.IfNotExists.ToString() } if createDefaultShardingStrategy.ShardingStrategy != nil { shardingStrategy = createDefaultShardingStrategy.ShardingStrategy.ToString() } return fmt.Sprintf("CREATE DEFAULT SHARDING type=(DATABASE | TABLE) STRATEGY %s(%s)", ifNotExists, shardingStrategy) } type BuildInStrategyType struct { BuildInStrategyType string } func (buildInStrategyType *BuildInStrategyType) ToString() string { return buildInStrategyType.BuildInStrategyType } type ShardingAlgorithmDefinition struct { ShardingAlgorithmTypeName *ShardingAlgorithmTypeName PropertiesDefinition *PropertiesDefinition } func (shardingAlgorithmDefinition *ShardingAlgorithmDefinition) ToString() string { var ( shardingAlgorithmTypeName string propertiesDefinition string ) if shardingAlgorithmDefinition.ShardingAlgorithmTypeName != nil { shardingAlgorithmTypeName = shardingAlgorithmDefinition.ShardingAlgorithmTypeName.ToString() } if shardingAlgorithmDefinition.PropertiesDefinition != nil { propertiesDefinition = shardingAlgorithmDefinition.PropertiesDefinition.ToString() } return fmt.Sprintf("TYPE ( NAME = %s ,%s)", shardingAlgorithmTypeName, propertiesDefinition) } type ShardingAlgorithmTypeName struct { String string BuildInShardingAlgorithmType *BuildInCommon BuildInKeyGenerateAlgorithmType *BuildInCommon BuildInShardingAuditAlgorithmType *BuildInCommon } func (shardingAlgorithmTypeName *ShardingAlgorithmTypeName) ToString() string { switch { case shardingAlgorithmTypeName.String != "": return shardingAlgorithmTypeName.String case shardingAlgorithmTypeName.BuildInShardingAlgorithmType != nil: return shardingAlgorithmTypeName.BuildInShardingAlgorithmType.ToString() case shardingAlgorithmTypeName.BuildInKeyGenerateAlgorithmType != nil: return shardingAlgorithmTypeName.BuildInKeyGenerateAlgorithmType.ToString() case shardingAlgorithmTypeName.BuildInShardingAuditAlgorithmType != nil: return shardingAlgorithmTypeName.BuildInShardingAuditAlgorithmType.ToString() } return "" } type BuildInCommon struct { String string } func (buildInCommon *BuildInCommon) ToString() string { return buildInCommon.String } type DropDefaultShardingStrategy struct { IfExists *IfExists } func (dropDefaultShardingStrategy *DropDefaultShardingStrategy) ToString() string { return fmt.Sprintf("DROP DEFAULT SHARDING type=(DATABASE | TABLE) STRATEGY %s", dropDefaultShardingStrategy.IfExists.ToString()) } type DropShardingKeyGenerator struct { IfExists *IfExists AllKeyGeneratorName []*CommonIdentifier } func (dropShardingKeyGenerator *DropShardingKeyGenerator) ToString() string { var ( ifExists string allKey []string ) if dropShardingKeyGenerator.IfExists != nil { ifExists = dropShardingKeyGenerator.IfExists.ToString() } if dropShardingKeyGenerator.AllKeyGeneratorName != nil { for _, k := range dropShardingKeyGenerator.AllKeyGeneratorName { allKey = append(allKey, k.ToString()) } } return fmt.Sprintf("DROP SHARDING KEY GENERATOR %s %s", ifExists, strings.Join(allKey, ",")) } type DropShardingAuditor struct { IfExists *IfExists AllAuditorName []*CommonIdentifier } func (dropShardingAuditor *DropShardingAuditor) ToString() string { var ( ifExists string allName []string ) if dropShardingAuditor.IfExists != nil { ifExists = dropShardingAuditor.IfExists.ToString() } if dropShardingAuditor.AllAuditorName != nil { for _, r := range dropShardingAuditor.AllAuditorName { allName = append(allName, r.ToString()) } } return fmt.Sprintf("DROP SHARDING AUDITOR %s %s", ifExists, strings.Join(allName, ",")) } type DataNodes struct { AllDataNode []*CommonIdentifier } func (dataNodes *DataNodes) ToString() string { var allDataNode []string for _, d := range dataNodes.AllDataNode { allDataNode = append(allDataNode, d.ToString()) } return fmt.Sprintf("DATANODES(%s)", strings.Join(allDataNode, ",")) } type AlterDefaultShardingStrategy struct { ShardingStrategy *ShardingStrategy } func (alterDefaultShardingStrategy *AlterDefaultShardingStrategy) ToString() string { return fmt.Sprintf("ALTER DEFAULT SHARDING type=(DATABASE | TABLE) STRATEGY (%s)", alterDefaultShardingStrategy.ShardingStrategy.ToString()) } type AuditorDefinition struct { AuditorName *CommonIdentifier AlgorithmDefinition *ShardingAlgorithmDefinition } func (auditorDefinition *AuditorDefinition) ToString() string { return fmt.Sprintf("%s (%s)", auditorDefinition.AuditorName.ToString(), auditorDefinition.AlgorithmDefinition.ToString()) }