shardingsphere-operator/pkg/distsql/ast/read_write_splitting_ast.go (131 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"
)
// define read write splitting ast
type CreateReadwriteSplittingRule struct {
IfNotExists *IfNotExists
AllReadwriteSplittingRuleDefinition []*ReadWriteSplittingRuleDefinition
}
func (createReadwriteSplittingRule *CreateReadwriteSplittingRule) ToString() string {
var (
ifNotExists string
readwriteSplittingRuleDefinition []string
)
if createReadwriteSplittingRule.IfNotExists != nil {
ifNotExists = createReadwriteSplittingRule.IfNotExists.ToString()
}
if createReadwriteSplittingRule.AllReadwriteSplittingRuleDefinition != nil {
for _, r := range createReadwriteSplittingRule.AllReadwriteSplittingRuleDefinition {
readwriteSplittingRuleDefinition = append(readwriteSplittingRuleDefinition, r.ToString())
}
}
return fmt.Sprintf("CREATE READWRITE_SPLITTING RULE %s %s", ifNotExists, strings.Join(readwriteSplittingRuleDefinition, ","))
}
type ReadWriteSplittingRuleDefinition struct {
RuleName *CommonIdentifier
DataSourceDefinition *DataSourceDefinition
TransactionalReadQueryStrategy *TransactionalReadQueryStrategy
AlgorithmDefinition *AlgorithmDefinition
}
func (readWriteSplittingRuleDefinition *ReadWriteSplittingRuleDefinition) ToString() string {
var (
ruleName string
dataSourceDefinition string
transactionalReadQueryStrategy string
algorithmDefinition string
)
if readWriteSplittingRuleDefinition.RuleName != nil {
ruleName = readWriteSplittingRuleDefinition.RuleName.ToString()
}
if readWriteSplittingRuleDefinition.DataSourceDefinition != nil {
dataSourceDefinition = readWriteSplittingRuleDefinition.DataSourceDefinition.ToString()
}
if readWriteSplittingRuleDefinition.TransactionalReadQueryStrategy != nil {
transactionalReadQueryStrategy = readWriteSplittingRuleDefinition.TransactionalReadQueryStrategy.ToString()
}
if readWriteSplittingRuleDefinition.AlgorithmDefinition != nil {
algorithmDefinition = readWriteSplittingRuleDefinition.AlgorithmDefinition.ToString()
}
return fmt.Sprintf("%s (%s %s %s)", ruleName, dataSourceDefinition, transactionalReadQueryStrategy, algorithmDefinition)
}
type DataSourceDefinition struct {
WriteStorageUnit *WriteStorageUnit
ReadStorageUnits *ReadStorageUnits
}
func (dataSourceDefinition DataSourceDefinition) ToString() string {
return fmt.Sprintf("%s, %s", dataSourceDefinition.WriteStorageUnit.ToString(), dataSourceDefinition.ReadStorageUnits.ToString())
}
type WriteStorageUnit struct {
WriteStorageUnitName *WriteStorageUnitName
}
func (writeStorageUnit *WriteStorageUnit) ToString() string {
return fmt.Sprintf("WRITE_STORAGE_UNIT = %s", writeStorageUnit.WriteStorageUnitName.ToString())
}
type WriteStorageUnitName struct {
StorageUnitName *CommonIdentifier
}
func (writeStorageUnitName *WriteStorageUnitName) ToString() string {
return writeStorageUnitName.StorageUnitName.ToString()
}
type ReadStorageUnits struct {
ReadStorageUnitsNames *ReadStorageUnitsNames
}
func (readStorageUnits *ReadStorageUnits) ToString() string {
return fmt.Sprintf("READ_STORAGE_UNITS (%s)", readStorageUnits.ReadStorageUnitsNames.ToString())
}
type ReadStorageUnitsNames struct {
AllStorageUnitName []*CommonIdentifier
}
func (readStorageUnitsNames *ReadStorageUnitsNames) ToString() string {
var (
storageUnitNames []string
)
for _, s := range readStorageUnitsNames.AllStorageUnitName {
storageUnitNames = append(storageUnitNames, s.ToString())
}
return strings.Join(storageUnitNames, ",")
}
type TransactionalReadQueryStrategy struct {
TransactionalReadQueryStrategyName *TransactionalReadQueryStrategyName
}
func (transactionalReadQueryStrategy *TransactionalReadQueryStrategy) ToString() string {
return transactionalReadQueryStrategy.TransactionalReadQueryStrategyName.ToString()
}
type AlterReadwriteSplittingRule struct {
AllReadwriteSplittingRuleDefinition []*ReadWriteSplittingRuleDefinition
}
func (alterReadwriteSplittingRule *AlterReadwriteSplittingRule) ToString() string {
var (
allReadwriteSplittingRuleDefinition []string
)
for _, r := range alterReadwriteSplittingRule.AllReadwriteSplittingRuleDefinition {
allReadwriteSplittingRuleDefinition = append(allReadwriteSplittingRuleDefinition, r.ToString())
}
return fmt.Sprintf("ALTER READWRITE_SPLITTING RULE %s", strings.Join(allReadwriteSplittingRuleDefinition, ","))
}
type DropReadwriteSplittingRule struct {
IfExists *IfExists
AllRuleName []*CommonIdentifier
}
func (dropReadwriteSplittingRule *DropReadwriteSplittingRule) ToString() string {
var (
ifExists string
allRuleName []string
)
if dropReadwriteSplittingRule.IfExists != nil {
ifExists = dropReadwriteSplittingRule.IfExists.ToString()
}
if dropReadwriteSplittingRule.AllRuleName != nil {
for _, r := range dropReadwriteSplittingRule.AllRuleName {
allRuleName = append(allRuleName, r.ToString())
}
}
return fmt.Sprintf("DROP READWRITE_SPLITTING RULE %s %s", ifExists, strings.Join(allRuleName, ","))
}
type TransactionalReadQueryStrategyName struct {
String string
}
func (transactionalReadQueryStrategyName *TransactionalReadQueryStrategyName) ToString() string {
return transactionalReadQueryStrategyName.String
}