shardingsphere-operator/pkg/distsql/ast/encrypt_rdl_ast.go (338 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 Create Encrypt Rule AST type CreateEncryptRule struct { IfNotExists *IfNotExists EncryptRuleDefinition *EncryptRuleDefinition AllEncryptRuleDefinition []*EncryptRuleDefinition } func (createEncryptRule *CreateEncryptRule) ToString() string { var ifNotExists string var allEncryptRuleDefinitionList []string if createEncryptRule.IfNotExists != nil { ifNotExists = createEncryptRule.IfNotExists.ToString() } if createEncryptRule.AllEncryptRuleDefinition != nil { for _, encryptRuleDefinition := range createEncryptRule.AllEncryptRuleDefinition { if encryptRuleDefinition != nil { allEncryptRuleDefinitionList = append(allEncryptRuleDefinitionList, encryptRuleDefinition.ToString()) } } } return fmt.Sprintf("CREATE ENCRYPT RULE%s %s;", ifNotExists, strings.Join(allEncryptRuleDefinitionList, ",")) } type AlterEncryptRule struct { EncryptRuleDefinition *EncryptRuleDefinition AllEncryptRuleDefinitionList []*EncryptRuleDefinition } func (alterEncryptRule *AlterEncryptRule) ToString() string { var encryptRuleDefinition string var encryptRuleDefinitionList []string if alterEncryptRule.EncryptRuleDefinition != nil { encryptRuleDefinition = alterEncryptRule.EncryptRuleDefinition.ToString() } if alterEncryptRule.AllEncryptRuleDefinitionList != nil { for _, encryptRuleDefinition := range alterEncryptRule.AllEncryptRuleDefinitionList { encryptRuleDefinitionList = append(encryptRuleDefinitionList, encryptRuleDefinition.ToString()) } } return fmt.Sprintf("ALTER ENCRYPT RULE %s %s;", encryptRuleDefinition, strings.Join(encryptRuleDefinitionList, ",")) } type DropEncryptRule struct { IfExists *IfExists AllTableName []*CommonIdentifier } func (dropEncryptRule *DropEncryptRule) ToString() string { var ( ifExists string allTableName []string ) if dropEncryptRule.IfExists != nil { ifExists = dropEncryptRule.IfExists.ToString() } if dropEncryptRule.AllTableName != nil { for _, tableName := range dropEncryptRule.AllTableName { allTableName = append(allTableName, tableName.ToString()) } } return fmt.Sprintf("DROP ENCRYPT RULE %s %s;", ifExists, strings.Join(allTableName, ",")) } type IfExists struct { IfExists string } func (ifExists *IfExists) ToString() string { return ifExists.IfExists } type EncryptRuleDefinition struct { TableName *CommonIdentifier ResourceDefinition *ResourceDefinition EncryptColumnDefinition *EncryptColumnDefinition AllEncryptColumnDefinition []*EncryptColumnDefinition QueryWithCipherColumn *QueryWithCipherColumn } func (encryptRuleDefinition *EncryptRuleDefinition) ToString() string { var ( tableName string resourceDefinition string queryWithCipherColumn string encryptColumnDefinition string allEncryptColumnDefinition []string ) if encryptRuleDefinition.TableName != nil { tableName = encryptRuleDefinition.TableName.ToString() } if encryptRuleDefinition.ResourceDefinition != nil { resourceDefinition = encryptRuleDefinition.ResourceDefinition.ToString() } if encryptRuleDefinition.EncryptColumnDefinition != nil { encryptColumnDefinition = encryptRuleDefinition.EncryptColumnDefinition.ToString() } if encryptRuleDefinition.AllEncryptColumnDefinition != nil { for _, rd := range encryptRuleDefinition.AllEncryptColumnDefinition { allEncryptColumnDefinition = append(allEncryptColumnDefinition, rd.ToString()) } } if encryptRuleDefinition.QueryWithCipherColumn != nil { queryWithCipherColumn = fmt.Sprintf(",QUERY_WITH_CIPHER_COLUMN=%s", encryptRuleDefinition.QueryWithCipherColumn.ToString()) } return fmt.Sprintf("%s (%sCOLUMNS(%s%s)%s)", tableName, resourceDefinition, encryptColumnDefinition, strings.Join(allEncryptColumnDefinition, ","), queryWithCipherColumn) } type IfNotExists struct { IfNotExists string } func (ifNotExists IfNotExists) ToString() string { return ifNotExists.IfNotExists } type ResourceDefinition struct { ResourceName *CommonIdentifier } func (resourceDefinition *ResourceDefinition) ToString() string { if resourceDefinition.ResourceName != nil { return fmt.Sprintf("RESOURCE=%s", resourceDefinition.ResourceName.ToString()) } return "" } type EncryptColumnDefinition struct { ColumnDefinition *ColumnDefinition PlainColumnDefinition *PlainColumnDefinition CipherColumnDefinition *CipherColumnDefinition AssistedQueryColumnDefinition *AssistedQueryColumnDefinition LikeQueryColumnDefinition *LikeQueryColumnDefinition EncryptAlgorithm *EncryptAlgorithm AssistedQueryAlgorithm *AssistedQueryAlgorithm LikeQueryAlgorithm *LikeQueryAlgorithm QueryWithCipherColumn *QueryWithCipherColumn } func (encryptColumnDefinition *EncryptColumnDefinition) ToString() string { var ( plainColumnDefinition string cipherColumnDefinition string assistedQueryColumnDefinition string likeQueryColumnDefinition string assistedQueryAlgorithm string likeQueryAlgorithm string queryWithCipherColumn string ) if encryptColumnDefinition.PlainColumnDefinition != nil { plainColumnDefinition = fmt.Sprintf(",%s", encryptColumnDefinition.PlainColumnDefinition.ToString()) } if encryptColumnDefinition.CipherColumnDefinition != nil { cipherColumnDefinition = encryptColumnDefinition.CipherColumnDefinition.ToString() } if encryptColumnDefinition.AssistedQueryColumnDefinition != nil { assistedQueryColumnDefinition = fmt.Sprintf(",%s", encryptColumnDefinition.AssistedQueryColumnDefinition.ToString()) } if encryptColumnDefinition.LikeQueryAlgorithm != nil { likeQueryColumnDefinition = fmt.Sprintf(",%s", encryptColumnDefinition.LikeQueryAlgorithm.ToString()) } if encryptColumnDefinition.AssistedQueryAlgorithm != nil { assistedQueryAlgorithm = fmt.Sprintf(",%s", encryptColumnDefinition.AssistedQueryAlgorithm.ToString()) } if encryptColumnDefinition.LikeQueryAlgorithm != nil { likeQueryAlgorithm = fmt.Sprintf(",%s", encryptColumnDefinition.LikeQueryAlgorithm.ToString()) } if encryptColumnDefinition.QueryWithCipherColumn != nil { queryWithCipherColumn = fmt.Sprintf(",QUERY_WITH_CIPHER_COLUMN=%s", encryptColumnDefinition.QueryWithCipherColumn.ToString()) } return fmt.Sprintf("(%s%s,%s%s%s,%s%s%s%s)", encryptColumnDefinition.ColumnDefinition.ToString(), plainColumnDefinition, cipherColumnDefinition, assistedQueryColumnDefinition, likeQueryColumnDefinition, encryptColumnDefinition.EncryptAlgorithm.ToString(), assistedQueryAlgorithm, likeQueryAlgorithm, queryWithCipherColumn) } type ColumnDefinition struct { ColumnName *CommonIdentifier DataType *DataType } func (columnDefinition *ColumnDefinition) ToString() string { var dataType string if columnDefinition.DataType != nil { dataType = fmt.Sprintf(",DATA_TYP=%s", columnDefinition.DataType.ToString()) } return fmt.Sprintf("NAME=%s%s", columnDefinition.ColumnName.ToString(), dataType) } type PlainColumnDefinition struct { PlainColumnName *CommonIdentifier DataType *DataType } func (plainColumnDefinition *PlainColumnDefinition) ToString() string { var ( plainColumnName string dataType string ) if plainColumnDefinition.PlainColumnName != nil { plainColumnName = fmt.Sprintf("PLAIN=%s", plainColumnDefinition.PlainColumnName.ToString()) } if plainColumnDefinition.DataType != nil { dataType = plainColumnDefinition.DataType.ToString() } return fmt.Sprintf("PLAIN = %s, PLAIN_DATA_TYPE = %s", plainColumnName, dataType) } type CipherColumnDefinition struct { CipherColumnName *CommonIdentifier DataType *DataType } func (cipherColumnDefinition *CipherColumnDefinition) ToString() string { var dataType string if cipherColumnDefinition.DataType != nil { dataType = fmt.Sprintf(",CIPHER_DATA_TYPE=%s", dataType) } return fmt.Sprintf("CIPHER=%s%s", cipherColumnDefinition.CipherColumnName.ToString(), dataType) } type AssistedQueryColumnDefinition struct { AssistedQueryColumnName *CommonIdentifier DataType *DataType } func (assistedQueryColumnDefinition *AssistedQueryColumnDefinition) ToString() string { var dataType string if assistedQueryColumnDefinition.DataType != nil { dataType = fmt.Sprintf(",ASSISTED_QUERY_DATA_TYPE=%s", assistedQueryColumnDefinition.DataType.ToString()) } return fmt.Sprintf("ASSISTED_QUERY_COLUMN=%s%s", assistedQueryColumnDefinition.AssistedQueryColumnName.ToString(), dataType) } type LikeQueryColumnDefinition struct { LikeQueryColumnName *CommonIdentifier DataType *DataType } func (likeQueryColumnDefinition *LikeQueryColumnDefinition) ToString() string { var dataType string if likeQueryColumnDefinition.DataType != nil { dataType = fmt.Sprintf(", LIKE_QUERY_DATA_TYPE=%s", likeQueryColumnDefinition.DataType.ToString()) } return fmt.Sprintf("LIKE_QUERY_COLUMN=%s%s", likeQueryColumnDefinition.LikeQueryColumnName.ToString(), dataType) } type EncryptAlgorithm struct { AlgorithmDefinition *AlgorithmDefinition } func (encryptAlgorithm *EncryptAlgorithm) ToString() string { return fmt.Sprintf("ENCRYPT_ALGORITHM(%s)", encryptAlgorithm.AlgorithmDefinition.ToString()) } type AssistedQueryAlgorithm struct { AlgorithmDefinition *AlgorithmDefinition } func (assistedQueryAlgorithm *AssistedQueryAlgorithm) ToString() string { return assistedQueryAlgorithm.AlgorithmDefinition.ToString() } type AlgorithmDefinition struct { AlgorithmTypeName *AlgorithmTypeName PropertiesDefinition *PropertiesDefinition } func (algorithmDefinition AlgorithmDefinition) ToString() string { var propertiesDefinition string if algorithmDefinition.PropertiesDefinition != nil { propertiesDefinition = fmt.Sprintf(",%s", algorithmDefinition.PropertiesDefinition.ToString()) } return fmt.Sprintf("TYPE(NAME=%s%s)", algorithmDefinition.AlgorithmTypeName.ToString(), propertiesDefinition) } type PropertiesDefinition struct { Properties *Properties } func (propertiesDefinition *PropertiesDefinition) ToString() string { if propertiesDefinition.Properties != nil { return fmt.Sprintf("PROPERTIES(%s)", propertiesDefinition.Properties.ToString()) } return "" } type Properties struct { Properties []*Property } func (properties *Properties) ToString() (sql string) { for _, property := range properties.Properties { sql += property.ToString() } return } type LikeQueryAlgorithm struct { AlgorithmDefinition *AlgorithmDefinition } func (likeQueryAlgorithm *LikeQueryAlgorithm) ToString() (sql string) { if likeQueryAlgorithm.AlgorithmDefinition != nil { sql += likeQueryAlgorithm.ToString() } return } type QueryWithCipherColumn struct { QueryWithCipherColumn string } func (queryWithAlgorithm *QueryWithCipherColumn) ToString() string { return queryWithAlgorithm.QueryWithCipherColumn } type CommonIdentifier struct { Identifier string } func (commonIdentifier *CommonIdentifier) ToString() string { return commonIdentifier.Identifier } type Property struct { Key string Literal *Literal } func (property *Property) ToString() string { if property.Literal != nil { return fmt.Sprintf("%s=%s", property.Key, property.Literal.ToString()) } return "" } type Literal struct { Literal string } func (literal *Literal) ToString() string { return literal.Literal } type BuildinAlgorithmTypeName struct { AlgorithmTypeName string } func (buildinAlgorithmTypeName *BuildinAlgorithmTypeName) ToString() string { return buildinAlgorithmTypeName.AlgorithmTypeName } type DataType struct { String string } func (dataType *DataType) ToString() string { return dataType.String } type AlgorithmTypeName struct { BuildinAlgorithmTypeName *BuildinAlgorithmTypeName String string } func (algorithmTypeName *AlgorithmTypeName) ToString() string { switch { case algorithmTypeName.BuildinAlgorithmTypeName != nil: return algorithmTypeName.BuildinAlgorithmTypeName.ToString() case algorithmTypeName.String != "": return algorithmTypeName.String } return "" }