This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new c0240a47109 Fixes #27587, add default data type for encrypt columns.
(#27605)
c0240a47109 is described below
commit c0240a471091a9d813181c29b3050c031d471975
Author: Raigor <[email protected]>
AuthorDate: Tue Aug 1 14:43:26 2023 +0800
Fixes #27587, add default data type for encrypt columns. (#27605)
---
.../encrypt/constant/EncryptColumnDataType.java | 30 ++++++++++++
.../generator/EncryptAlterTableTokenGenerator.java | 32 +++++++------
.../EncryptCreateTableTokenGenerator.java | 30 ++++--------
.../rewrite/token/pojo/EncryptColumnToken.java | 54 ++++++++++++++++++++++
.../EncryptAlterTableTokenGeneratorTest.java | 22 ++++-----
.../EncryptCreateTableTokenGeneratorTest.java | 21 ++++-----
.../query-with-cipher/ddl/alter/alter-table.xml | 4 +-
.../query-with-cipher/ddl/create/create-table.xml | 4 +-
.../query-with-cipher/ddl/create/create-table.xml | 16 +++----
9 files changed, 145 insertions(+), 68 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptColumnDataType.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptColumnDataType.java
new file mode 100644
index 00000000000..cec75942ee1
--- /dev/null
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptColumnDataType.java
@@ -0,0 +1,30 @@
+/*
+ * 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 org.apache.shardingsphere.encrypt.constant;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Encrypt column data type.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class EncryptColumnDataType {
+
+ public static final String DEFAULT_DATA_TYPE = "VARCHAR(4000)";
+}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
index 86fecbc6039..33e07a8cbca 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
@@ -19,9 +19,11 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator;
import lombok.Setter;
import
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
+import org.apache.shardingsphere.encrypt.constant.EncryptColumnDataType;
import
org.apache.shardingsphere.encrypt.exception.metadata.EncryptColumnAlterException;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptAlterTableToken;
+import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
@@ -104,13 +106,13 @@ public final class EncryptAlterTableTokenGenerator
implements CollectionSQLToken
private Collection<SQLToken> getAddColumnTokens(final EncryptColumn
encryptColumn,
final
AddColumnDefinitionSegment addColumnDefinitionSegment, final
ColumnDefinitionSegment columnDefinitionSegment) {
Collection<SQLToken> result = new LinkedList<>();
- result.add(new RemoveToken(columnDefinitionSegment.getStartIndex(),
columnDefinitionSegment.getColumnName().getStopIndex()));
- result.add(new
EncryptAlterTableToken(columnDefinitionSegment.getColumnName().getStopIndex() +
1, columnDefinitionSegment.getColumnName().getStopIndex(),
- encryptColumn.getCipher().getName(), null));
- encryptColumn.getAssistedQuery().map(optional -> new
EncryptAlterTableToken(
- addColumnDefinitionSegment.getStopIndex() + 1,
columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ",
ADD COLUMN")).ifPresent(result::add);
- encryptColumn.getLikeQuery().map(optional -> new
EncryptAlterTableToken(
- addColumnDefinitionSegment.getStopIndex() + 1,
columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ",
ADD COLUMN")).ifPresent(result::add);
+ result.add(new RemoveToken(columnDefinitionSegment.getStartIndex(),
columnDefinitionSegment.getStopIndex()));
+ result.add(new
EncryptColumnToken(columnDefinitionSegment.getStopIndex() + 1,
columnDefinitionSegment.getStopIndex(),
+ encryptColumn.getCipher().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE));
+ encryptColumn.getAssistedQuery().map(optional -> new
EncryptColumnToken(addColumnDefinitionSegment.getStopIndex() + 1,
+ addColumnDefinitionSegment.getStopIndex(), ", ADD COLUMN " +
optional.getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE)).ifPresent(result::add);
+ encryptColumn.getLikeQuery().map(optional -> new
EncryptColumnToken(addColumnDefinitionSegment.getStopIndex() + 1,
+ addColumnDefinitionSegment.getStopIndex(), ", ADD COLUMN " +
optional.getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE)).ifPresent(result::add);
return result;
}
@@ -204,13 +206,15 @@ public final class EncryptAlterTableTokenGenerator
implements CollectionSQLToken
private Collection<SQLToken> getColumnTokens(final EncryptColumn
previousEncryptColumn, final EncryptColumn encryptColumn, final
ChangeColumnDefinitionSegment segment) {
Collection<SQLToken> result = new LinkedList<>();
- result.add(new
RemoveToken(segment.getColumnDefinition().getColumnName().getStartIndex(),
segment.getColumnDefinition().getColumnName().getStopIndex()));
- result.add(new
EncryptAlterTableToken(segment.getColumnDefinition().getColumnName().getStopIndex()
+ 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
- encryptColumn.getCipher().getName(), null));
- previousEncryptColumn.getAssistedQuery().map(optional -> new
EncryptAlterTableToken(segment.getStopIndex() + 1,
segment.getColumnDefinition().getColumnName().getStopIndex(),
-
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
", CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
- previousEncryptColumn.getLikeQuery().map(optional -> new
EncryptAlterTableToken(segment.getStopIndex() + 1,
segment.getColumnDefinition().getColumnName().getStopIndex(),
-
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ",
CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
+ result.add(new
RemoveToken(segment.getColumnDefinition().getColumnName().getStartIndex(),
segment.getColumnDefinition().getStopIndex()));
+ result.add(new
EncryptColumnToken(segment.getColumnDefinition().getStopIndex() + 1,
segment.getColumnDefinition().getStopIndex(),
+ encryptColumn.getCipher().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE));
+ previousEncryptColumn.getAssistedQuery().map(optional -> new
EncryptColumnToken(segment.getStopIndex() + 1, segment.getStopIndex(),
+ ", CHANGE COLUMN " + optional.getName() + " " +
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
+
EncryptColumnDataType.DEFAULT_DATA_TYPE)).ifPresent(result::add);
+ previousEncryptColumn.getLikeQuery().map(optional -> new
EncryptColumnToken(segment.getStopIndex() + 1, segment.getStopIndex(),
+ ", CHANGE COLUMN " + optional.getName() + " " +
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""),
+
EncryptColumnDataType.DEFAULT_DATA_TYPE)).ifPresent(result::add);
return result;
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
index 0015592875c..173b6497516 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
@@ -18,26 +18,22 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseTypeAware;
+import org.apache.shardingsphere.encrypt.constant.EncryptColumnDataType;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
+import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
-import
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
-import
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
+import org.apache.shardingsphere.encrypt.rule.column.item.CipherColumnItem;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.RemoveToken;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.ColumnDefinitionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -46,12 +42,10 @@ import java.util.Optional;
* Create table token generator for encrypt.
*/
@Setter
-public final class EncryptCreateTableTokenGenerator implements
CollectionSQLTokenGenerator<CreateTableStatementContext>, EncryptRuleAware,
DatabaseTypeAware {
+public final class EncryptCreateTableTokenGenerator implements
CollectionSQLTokenGenerator<CreateTableStatementContext>, EncryptRuleAware {
private EncryptRule encryptRule;
- private DatabaseType databaseType;
-
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
return sqlStatementContext instanceof CreateTableStatementContext &&
!(((CreateTableStatementContext)
sqlStatementContext).getSqlStatement()).getColumnDefinitions().isEmpty();
@@ -85,21 +79,17 @@ public final class EncryptCreateTableTokenGenerator
implements CollectionSQLToke
}
private SQLToken getCipherColumnToken(final EncryptColumn encryptColumn,
final ColumnDefinitionSegment column, final int stopIndex) {
- return new SubstitutableColumnNameToken(stopIndex + 1,
column.getColumnName().getStopIndex(),
- getColumnProjections(new
IdentifierValue(encryptColumn.getCipher().getName(),
column.getColumnName().getIdentifier().getQuoteCharacter())));
+ CipherColumnItem cipherColumnItem = encryptColumn.getCipher();
+ return new EncryptColumnToken(stopIndex + 1, column.getStopIndex(),
cipherColumnItem.getName(), EncryptColumnDataType.DEFAULT_DATA_TYPE);
}
private Optional<? extends SQLToken> getAssistedQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int
stopIndex, final boolean lastColumn) {
- return encryptColumn.getAssistedQuery().map(optional -> new
SubstitutableColumnNameToken(stopIndex + 1,
column.getColumnName().getStopIndex(),
- getColumnProjections(new IdentifierValue(optional.getName(),
column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
+ return encryptColumn.getAssistedQuery()
+ .map(optional -> new EncryptColumnToken(stopIndex + 1,
column.getStopIndex(), encryptColumn.getAssistedQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, lastColumn));
}
private Optional<? extends SQLToken> getLikeQueryColumnToken(final
EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int
stopIndex, final boolean lastColumn) {
- return encryptColumn.getLikeQuery().map(optional -> new
SubstitutableColumnNameToken(stopIndex + 1,
column.getColumnName().getStopIndex(),
- getColumnProjections(new IdentifierValue(optional.getName(),
column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
- }
-
- private Collection<Projection> getColumnProjections(final IdentifierValue
columnIdentifier) {
- return Collections.singleton(new ColumnProjection(null,
columnIdentifier, null, databaseType));
+ return encryptColumn.getLikeQuery()
+ .map(optional -> new EncryptColumnToken(stopIndex + 1,
column.getStopIndex(), encryptColumn.getLikeQuery().get().getName(),
EncryptColumnDataType.DEFAULT_DATA_TYPE, lastColumn));
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptColumnToken.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptColumnToken.java
new file mode 100644
index 00000000000..28671833028
--- /dev/null
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptColumnToken.java
@@ -0,0 +1,54 @@
+/*
+ * 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 org.apache.shardingsphere.encrypt.rewrite.token.pojo;
+
+import lombok.Getter;
+import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
+import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.Substitutable;
+
+/**
+ * Column token for encrypt.
+ */
+@Getter
+public final class EncryptColumnToken extends SQLToken implements
Substitutable {
+
+ private final int stopIndex;
+
+ private final String columnName;
+
+ private final String dataType;
+
+ private final boolean lastColumn;
+
+ public EncryptColumnToken(final int startIndex, final int stopIndex, final
String columnName, final String dataType) {
+ this(startIndex, stopIndex, columnName, dataType, false);
+ }
+
+ public EncryptColumnToken(final int startIndex, final int stopIndex, final
String columnName, final String dataType, final boolean lastColumn) {
+ super(startIndex);
+ this.stopIndex = stopIndex;
+ this.columnName = columnName;
+ this.dataType = dataType;
+ this.lastColumn = lastColumn;
+ }
+
+ @Override
+ public String toString() {
+ return lastColumn ? String.format(", %s %s", columnName, dataType) :
String.format("%s %s", columnName, dataType);
+ }
+}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
index 3fd6368c6fe..60bccb82679 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
@@ -20,7 +20,7 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator;
import
org.apache.shardingsphere.encrypt.api.encrypt.assisted.AssistedEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
import
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
-import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptAlterTableToken;
+import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
@@ -99,18 +99,18 @@ class EncryptAlterTableTokenGeneratorTest {
assertThat(actual.size(), is(4));
Iterator<SQLToken> actualIterator = actual.iterator();
assertThat(actualIterator.next(), instanceOf(RemoveToken.class));
- EncryptAlterTableToken cipherToken = (EncryptAlterTableToken)
actualIterator.next();
- assertThat(cipherToken.toString(), is("cipher_certificate_number"));
- assertThat(cipherToken.getStartIndex(), is(51));
- assertThat(cipherToken.getStopIndex(), is(50));
- EncryptAlterTableToken assistedToken = (EncryptAlterTableToken)
actualIterator.next();
- assertThat(assistedToken.toString(), is(", ADD COLUMN
assisted_certificate_number"));
+ EncryptColumnToken cipherToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(cipherToken.toString(), is("cipher_certificate_number
VARCHAR(4000)"));
+ assertThat(cipherToken.getStartIndex(), is(68));
+ assertThat(cipherToken.getStopIndex(), is(67));
+ EncryptColumnToken assistedToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(assistedToken.toString(), is(", ADD COLUMN
assisted_certificate_number VARCHAR(4000)"));
assertThat(assistedToken.getStartIndex(), is(68));
- assertThat(assistedToken.getStopIndex(), is(50));
- EncryptAlterTableToken likeToken = (EncryptAlterTableToken)
actualIterator.next();
- assertThat(likeToken.toString(), is(", ADD COLUMN
like_certificate_number"));
+ assertThat(assistedToken.getStopIndex(), is(67));
+ EncryptColumnToken likeToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(likeToken.toString(), is(", ADD COLUMN
like_certificate_number VARCHAR(4000)"));
assertThat(likeToken.getStartIndex(), is(68));
- assertThat(likeToken.getStopIndex(), is(50));
+ assertThat(likeToken.getStopIndex(), is(67));
}
private AlterTableStatementContext mockAddColumnStatementContext() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
index 9d67c70283f..60b83bf41d9 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator;
import
org.apache.shardingsphere.encrypt.api.encrypt.assisted.AssistedEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
import
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
+import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptColumnToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
@@ -29,8 +30,6 @@ import
org.apache.shardingsphere.encrypt.rule.column.item.LikeQueryColumnItem;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.RemoveToken;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DataTypeSegment;
@@ -86,18 +85,18 @@ class EncryptCreateTableTokenGeneratorTest {
assertThat(actual.size(), is(4));
Iterator<SQLToken> actualIterator = actual.iterator();
assertThat(actualIterator.next(), instanceOf(RemoveToken.class));
- SubstitutableColumnNameToken cipherToken =
(SubstitutableColumnNameToken) actualIterator.next();
- assertThat(cipherToken.toString(mock(RouteUnit.class)),
is("cipher_certificate_number"));
+ EncryptColumnToken cipherToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(cipherToken.toString(), is("cipher_certificate_number
VARCHAR(4000)"));
assertThat(cipherToken.getStartIndex(), is(79));
- assertThat(cipherToken.getStopIndex(), is(42));
- SubstitutableColumnNameToken assistedToken =
(SubstitutableColumnNameToken) actualIterator.next();
- assertThat(assistedToken.toString(mock(RouteUnit.class)), is(",
assisted_certificate_number"));
+ assertThat(cipherToken.getStopIndex(), is(78));
+ EncryptColumnToken assistedToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(assistedToken.toString(), is(", assisted_certificate_number
VARCHAR(4000)"));
assertThat(assistedToken.getStartIndex(), is(79));
- assertThat(assistedToken.getStopIndex(), is(42));
- SubstitutableColumnNameToken likeToken =
(SubstitutableColumnNameToken) actualIterator.next();
- assertThat(likeToken.toString(mock(RouteUnit.class)), is(",
like_certificate_number"));
+ assertThat(assistedToken.getStopIndex(), is(78));
+ EncryptColumnToken likeToken = (EncryptColumnToken)
actualIterator.next();
+ assertThat(likeToken.toString(), is(", like_certificate_number
VARCHAR(4000)"));
assertThat(likeToken.getStartIndex(), is(79));
- assertThat(likeToken.getStopIndex(), is(42));
+ assertThat(likeToken.getStopIndex(), is(78));
}
private CreateTableStatementContext mockCreateTableStatementContext() {
diff --git
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/alter/alter-table.xml
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/alter/alter-table.xml
index ea4701f39e5..221759f0291 100644
---
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/alter/alter-table.xml
+++
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/alter/alter-table.xml
@@ -29,12 +29,12 @@
<rewrite-assertion id="alter_table_add_column_with_cipher"
db-types="MySQL">
<input sql="ALTER TABLE t_account ADD COLUMN amount INT" />
- <output sql="ALTER TABLE t_account ADD COLUMN cipher_amount INT" />
+ <output sql="ALTER TABLE t_account ADD COLUMN cipher_amount
VARCHAR(4000)" />
</rewrite-assertion>
<rewrite-assertion id="alter_table_add_column_for_cipher" db-types="MySQL">
<input sql="ALTER TABLE t_account_bak ADD COLUMN id int not null, ADD
COLUMN password varchar(255) not null default ''" />
- <output sql="ALTER TABLE t_account_bak ADD COLUMN id int not null, ADD
COLUMN cipher_password varchar(255) not null default '', ADD COLUMN
assisted_query_password varchar(255) not null default '', ADD COLUMN
like_query_password varchar(255) not null default ''" />
+ <output sql="ALTER TABLE t_account_bak ADD COLUMN id int not null, ADD
COLUMN cipher_password VARCHAR(4000), ADD COLUMN assisted_query_password
VARCHAR(4000), ADD COLUMN like_query_password VARCHAR(4000)" />
</rewrite-assertion>
<rewrite-assertion id="alter_table_add_index_for_cipher" db-types="MySQL">
diff --git
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/create/create-table.xml
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/create/create-table.xml
index ad17866fc0b..efad1b9e6d2 100644
---
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/create/create-table.xml
+++
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/ddl/create/create-table.xml
@@ -19,11 +19,11 @@
<rewrite-assertions yaml-rule="scenario/encrypt/config/query-with-cipher.yaml">
<rewrite-assertion id="create_table_for_cipher" db-types="MySQL">
<input sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', password VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`))" />
- <output sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', cipher_password VARCHAR(255) NOT NULL DEFAULT
'', assisted_query_password VARCHAR(255) NOT NULL DEFAULT '',
like_query_password VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`))" />
+ <output sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', cipher_password VARCHAR(4000),
assisted_query_password VARCHAR(4000), like_query_password VARCHAR(4000),
PRIMARY KEY (`id`))" />
</rewrite-assertion>
<rewrite-assertion id="create_table_with_index_for_cipher"
db-types="MySQL">
<input sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', password VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`), KEY `t_account_bak_amount_idx` (`amount`))" />
- <output sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', cipher_password VARCHAR(255) NOT NULL DEFAULT
'', assisted_query_password VARCHAR(255) NOT NULL DEFAULT '',
like_query_password VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY
`t_account_bak_amount_idx` (`cipher_amount`))" />
+ <output sql="CREATE TABLE t_account_bak (id INT NOT NULL, name
VARCHAR(100) NOT NULL DEFAULT '', cipher_password VARCHAR(4000),
assisted_query_password VARCHAR(4000), like_query_password VARCHAR(4000),
PRIMARY KEY (`id`), KEY `t_account_bak_amount_idx` (`cipher_amount`))" />
</rewrite-assertion>
</rewrite-assertions>
diff --git
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
index b1b86154753..c2fc464fea8 100644
---
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
+++
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/ddl/create/create-table.xml
@@ -19,25 +19,25 @@
<rewrite-assertions yaml-rule="scenario/mix/config/query-with-cipher.yaml">
<rewrite-assertion id="create_table_with_single_cipher_column"
db-types="MySQL">
<input sql="CREATE TABLE t_account_detail_new(account_id INT, password
VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_0(account_id INT,
cipher_password VARCHAR(100), assisted_query_password VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_1(account_id INT,
cipher_password VARCHAR(100), assisted_query_password VARCHAR(100));" />
+ <output sql="CREATE TABLE t_account_detail_new_0(account_id INT,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000));" />
+ <output sql="CREATE TABLE t_account_detail_new_1(account_id INT,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000));" />
</rewrite-assertion>
<rewrite-assertion id="create_table_with_multi_cipher_column"
db-types="MySQL">
<input sql="CREATE TABLE t_account_detail_new(account_id INT, password
VARCHAR(100), amount VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_0(account_id INT,
cipher_password VARCHAR(100), assisted_query_password VARCHAR(100),
cipher_amount VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_1(account_id INT,
cipher_password VARCHAR(100), assisted_query_password VARCHAR(100),
cipher_amount VARCHAR(100));" />
+ <output sql="CREATE TABLE t_account_detail_new_0(account_id INT,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000),
cipher_amount VARCHAR(4000));" />
+ <output sql="CREATE TABLE t_account_detail_new_1(account_id INT,
cipher_password VARCHAR(4000), assisted_query_password VARCHAR(4000),
cipher_amount VARCHAR(4000));" />
</rewrite-assertion>
<rewrite-assertion id="create_table_with_all_cipher_column"
db-types="MySQL">
<input sql="CREATE TABLE t_account_detail_new(password VARCHAR(100),
amount VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_0(cipher_password
VARCHAR(100), assisted_query_password VARCHAR(100), cipher_amount
VARCHAR(100));" />
- <output sql="CREATE TABLE t_account_detail_new_1(cipher_password
VARCHAR(100), assisted_query_password VARCHAR(100), cipher_amount
VARCHAR(100));" />
+ <output sql="CREATE TABLE t_account_detail_new_0(cipher_password
VARCHAR(4000), assisted_query_password VARCHAR(4000), cipher_amount
VARCHAR(4000));" />
+ <output sql="CREATE TABLE t_account_detail_new_1(cipher_password
VARCHAR(4000), assisted_query_password VARCHAR(4000), cipher_amount
VARCHAR(4000));" />
</rewrite-assertion>
<rewrite-assertion id="create_table_with_random_blank_cipher_column"
db-types="MySQL">
<input sql="CREATE TABLE t_account_detail_new( account_id INT ,
password VARCHAR(100) , amount VARCHAR(100)); " />
- <output sql="CREATE TABLE t_account_detail_new_0( account_id INT ,
cipher_password VARCHAR(100) , assisted_query_password VARCHAR(100) ,
cipher_amount VARCHAR(100)); " />
- <output sql="CREATE TABLE t_account_detail_new_1( account_id INT ,
cipher_password VARCHAR(100) , assisted_query_password VARCHAR(100) ,
cipher_amount VARCHAR(100)); " />
+ <output sql="CREATE TABLE t_account_detail_new_0( account_id INT ,
cipher_password VARCHAR(4000) , assisted_query_password VARCHAR(4000) ,
cipher_amount VARCHAR(4000)); " />
+ <output sql="CREATE TABLE t_account_detail_new_1( account_id INT ,
cipher_password VARCHAR(4000) , assisted_query_password VARCHAR(4000) ,
cipher_amount VARCHAR(4000)); " />
</rewrite-assertion>
</rewrite-assertions>