You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by yx...@apache.org on 2022/11/13 02:48:51 UTC
[shardingsphere] branch master updated: Fix wrong column result when config encrypt like column (#22131)
This is an automated email from the ASF dual-hosted git repository.
yx9o 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 063722d7aed Fix wrong column result when config encrypt like column (#22131)
063722d7aed is described below
commit 063722d7aed0b4318c381bde054f3f55eaba367c
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Sun Nov 13 10:48:43 2022 +0800
Fix wrong column result when config encrypt like column (#22131)
---
.../dal/show/EncryptShowColumnsMergedResult.java | 3 +-
.../metadata/EncryptSchemaMetaDataDecorator.java | 3 +-
...ecoratedEncryptShowColumnsMergedResultTest.java | 112 +++++++++++++++++----
.../MergedEncryptShowColumnsMergedResultTest.java | 60 ++++++++---
.../dal/show/fixture/TestStatementContext.java | 59 -----------
.../EncryptSchemaMetaDataDecoratorTest.java | 9 +-
6 files changed, 149 insertions(+), 97 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
index 69fc107771a..7f4734822bb 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
@@ -58,7 +58,8 @@ public abstract class EncryptShowColumnsMergedResult implements MergedResult {
return false;
}
String columnName = getOriginalValue(COLUMN_FIELD_INDEX, String.class).toString();
- while (encryptTable.get().getAssistedQueryColumns().contains(columnName) || encryptTable.get().getPlainColumns().contains(columnName)) {
+ while (encryptTable.get().getAssistedQueryColumns().contains(columnName) || encryptTable.get().getLikeQueryColumns().contains(columnName)
+ || encryptTable.get().getPlainColumns().contains(columnName)) {
hasNext = nextValue();
if (!hasNext) {
return false;
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
index 6cccf488784..6f29360e680 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
@@ -60,6 +60,7 @@ public final class EncryptSchemaMetaDataDecorator implements RuleBasedSchemaMeta
Collection<ColumnMetaData> result = new LinkedHashSet<>();
Collection<String> plainColumns = encryptTable.getPlainColumns();
Collection<String> assistedQueryColumns = encryptTable.getAssistedQueryColumns();
+ Collection<String> likeQueryColumns = encryptTable.getLikeQueryColumns();
for (ColumnMetaData each : originalColumnMetaDataList) {
String columnName = each.getName();
if (plainColumns.contains(columnName)) {
@@ -70,7 +71,7 @@ public final class EncryptSchemaMetaDataDecorator implements RuleBasedSchemaMeta
result.add(createColumnMetaData(encryptTable.getLogicColumnByCipherColumn(columnName), each));
continue;
}
- if (!assistedQueryColumns.contains(columnName)) {
+ if (!assistedQueryColumns.contains(columnName) && !likeQueryColumns.contains(columnName)) {
result.add(each);
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/DecoratedEncryptShowColumnsMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/DecoratedEncryptShowColumnsMergedResultTest.java
index 49fd7ae3110..8b06e443cbf 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/DecoratedEncryptShowColumnsMergedResultTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/DecoratedEncryptShowColumnsMergedResultTest.java
@@ -17,42 +17,120 @@
package org.apache.shardingsphere.encrypt.merge.dal.show;
-import org.apache.shardingsphere.encrypt.merge.dal.show.fixture.TestStatementContext;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.infra.binder.statement.dal.ShowColumnsStatementContext;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.Calendar;
import java.util.Collections;
+import java.util.Date;
+import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+@RunWith(MockitoJUnitRunner.class)
public final class DecoratedEncryptShowColumnsMergedResultTest {
+ @Mock
+ private MergedResult mergedResult;
+
@Test
- public void assertNewValidResult() throws SQLException {
- TestStatementContext testStatementContext = mock(TestStatementContext.class);
- SimpleTableSegment simpleTableSegment = mock(SimpleTableSegment.class);
- IdentifierValue identifierValue = mock(IdentifierValue.class);
- when(identifierValue.getValue()).thenReturn("value");
- TableNameSegment tableNameSegment = new TableNameSegment(0, 1, identifierValue);
- when(simpleTableSegment.getTableName()).thenReturn(tableNameSegment);
- when(testStatementContext.getAllTables()).thenReturn(Collections.singletonList(simpleTableSegment));
- MergedResult mergedResult = mock(MergedResult.class);
+ public void assertNextWithNotHasNext() throws SQLException {
+ assertFalse(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).next());
+ }
+
+ @Test
+ public void assertNextWithHasNext() throws SQLException {
when(mergedResult.next()).thenReturn(true);
- when(mergedResult.wasNull()).thenReturn(false);
- when(mergedResult.getValue(1, getClass())).thenReturn("test");
- DecoratedEncryptShowColumnsMergedResult actual = new DecoratedEncryptShowColumnsMergedResult(mergedResult, testStatementContext, mock(EncryptRule.class));
- assertTrue(actual.nextValue());
- assertFalse(actual.wasNull());
- assertThat(actual.getOriginalValue(1, getClass()), is("test"));
+ assertTrue(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).next());
+ }
+
+ @Test
+ public void assertNextWithAssistedQuery() throws SQLException {
+ when(mergedResult.next()).thenReturn(true).thenReturn(false);
+ when(mergedResult.getValue(1, String.class)).thenReturn("user_id_assisted");
+ assertFalse(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mockEncryptRule()).next());
+ }
+
+ @Test
+ public void assertNextWithLikeQuery() throws SQLException {
+ when(mergedResult.next()).thenReturn(true).thenReturn(false);
+ when(mergedResult.getValue(1, String.class)).thenReturn("user_id_like");
+ assertFalse(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mockEncryptRule()).next());
+ }
+
+ @Test
+ public void assertNextWithLikeQueryAndMultiColumns() throws SQLException {
+ when(mergedResult.next()).thenReturn(true, true, true, false);
+ when(mergedResult.getValue(1, String.class)).thenReturn("user_id_like", "order_id", "content");
+ DecoratedEncryptShowColumnsMergedResult actual = createDecoratedEncryptShowColumnsMergedResult(mergedResult, mockEncryptRule());
+ assertTrue(actual.next());
+ assertTrue(actual.next());
+ assertFalse(actual.next());
+ }
+
+ @Test
+ public void assertGetValueWithCipherColumn() throws SQLException {
+ when(mergedResult.getValue(1, String.class)).thenReturn("user_id_cipher");
+ assertThat(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mockEncryptRule()).getValue(1, String.class), is("user_id"));
+ }
+
+ private EncryptRule mockEncryptRule() {
+ EncryptRule result = mock(EncryptRule.class);
+ EncryptTable encryptTable = mock(EncryptTable.class);
+ when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+ when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.singleton("user_id_assisted"));
+ when(encryptTable.getLikeQueryColumns()).thenReturn(Collections.singleton("user_id_like"));
+ when(encryptTable.isCipherColumn("user_id_cipher")).thenReturn(true);
+ when(encryptTable.getLogicColumnByCipherColumn("user_id_cipher")).thenReturn("user_id");
+ return result;
+ }
+
+ @Test
+ public void assertGetValueWithOtherColumn() throws SQLException {
+ when(mergedResult.getValue(1, String.class)).thenReturn("user_id_assisted");
+ assertThat(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).getValue(1, String.class), is("user_id_assisted"));
+ }
+
+ @Test
+ public void assertGetValueWithOtherIndex() throws SQLException {
+ when(mergedResult.getValue(2, String.class)).thenReturn("order_id");
+ assertThat(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).getValue(2, String.class), is("order_id"));
+ }
+
+ @Test
+ public void assertWasNull() throws SQLException {
+ assertFalse(createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).wasNull());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void assertGetCalendarValue() throws SQLException {
+ createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).getCalendarValue(1, Date.class, Calendar.getInstance());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void assertGetInputStream() throws SQLException {
+ createDecoratedEncryptShowColumnsMergedResult(mergedResult, mock(EncryptRule.class)).getInputStream(1, "asc");
+ }
+
+ private DecoratedEncryptShowColumnsMergedResult createDecoratedEncryptShowColumnsMergedResult(final MergedResult mergedResult, final EncryptRule encryptRule) {
+ ShowColumnsStatementContext showColumnsStatementContext = mock(ShowColumnsStatementContext.class);
+ when(showColumnsStatementContext.getAllTables()).thenReturn(Collections.singletonList(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("t_encrypt")))));
+ return new DecoratedEncryptShowColumnsMergedResult(mergedResult, showColumnsStatementContext, encryptRule);
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/MergedEncryptShowColumnsMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/MergedEncryptShowColumnsMergedResultTest.java
index 940a448ca62..9bfcae6da2a 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/MergedEncryptShowColumnsMergedResultTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/MergedEncryptShowColumnsMergedResultTest.java
@@ -30,12 +30,15 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.Calendar;
import java.util.Collections;
+import java.util.Date;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -60,36 +63,54 @@ public final class MergedEncryptShowColumnsMergedResultTest {
@Test
public void assertNextWithAssistedQuery() throws SQLException {
when(queryResult.next()).thenReturn(true).thenReturn(false);
- when(queryResult.getValue(1, String.class)).thenReturn("assistedQuery");
+ when(queryResult.getValue(1, String.class)).thenReturn("user_id_assisted");
+ assertFalse(createMergedEncryptColumnsMergedResult(queryResult, mockEncryptRule()).next());
+ }
+
+ @Test
+ public void assertNextWithLikeQuery() throws SQLException {
+ when(queryResult.next()).thenReturn(true).thenReturn(false);
+ when(queryResult.getValue(1, String.class)).thenReturn("user_id_like");
assertFalse(createMergedEncryptColumnsMergedResult(queryResult, mockEncryptRule()).next());
}
+ @Test
+ public void assertNextWithLikeQueryAndMultiColumns() throws SQLException {
+ when(queryResult.next()).thenReturn(true, true, true, false);
+ when(queryResult.getValue(1, String.class)).thenReturn("user_id_like", "order_id", "content");
+ MergedEncryptShowColumnsMergedResult actual = createMergedEncryptColumnsMergedResult(queryResult, mockEncryptRule());
+ assertTrue(actual.next());
+ assertTrue(actual.next());
+ assertFalse(actual.next());
+ }
+
@Test
public void assertGetValueWithCipherColumn() throws SQLException {
- when(queryResult.getValue(1, String.class)).thenReturn("cipher");
- assertThat(createMergedEncryptColumnsMergedResult(queryResult, mockEncryptRule()).getValue(1, String.class), is("id"));
+ when(queryResult.getValue(1, String.class)).thenReturn("user_id_cipher");
+ assertThat(createMergedEncryptColumnsMergedResult(queryResult, mockEncryptRule()).getValue(1, String.class), is("user_id"));
}
private EncryptRule mockEncryptRule() {
EncryptRule result = mock(EncryptRule.class);
EncryptTable encryptTable = mock(EncryptTable.class);
- when(result.findEncryptTable("test")).thenReturn(Optional.of(encryptTable));
- when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.singleton("assistedQuery"));
- when(encryptTable.isCipherColumn("cipher")).thenReturn(true);
- when(encryptTable.getLogicColumnByCipherColumn("cipher")).thenReturn("id");
+ when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+ when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.singleton("user_id_assisted"));
+ when(encryptTable.getLikeQueryColumns()).thenReturn(Collections.singleton("user_id_like"));
+ when(encryptTable.isCipherColumn("user_id_cipher")).thenReturn(true);
+ when(encryptTable.getLogicColumnByCipherColumn("user_id_cipher")).thenReturn("user_id");
return result;
}
@Test
public void assertGetValueWithOtherColumn() throws SQLException {
- when(queryResult.getValue(1, String.class)).thenReturn("assistedQuery");
- assertThat(createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getValue(1, String.class), is("assistedQuery"));
+ when(queryResult.getValue(1, String.class)).thenReturn("user_id_assisted");
+ assertThat(createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getValue(1, String.class), is("user_id_assisted"));
}
@Test
public void assertGetValueWithOtherIndex() throws SQLException {
- when(queryResult.getValue(2, String.class)).thenReturn("id");
- assertThat(createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getValue(2, String.class), is("id"));
+ when(queryResult.getValue(2, String.class)).thenReturn("user_id");
+ assertThat(createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getValue(2, String.class), is("user_id"));
}
@Test
@@ -97,12 +118,19 @@ public final class MergedEncryptShowColumnsMergedResultTest {
assertFalse(createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).wasNull());
}
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void assertGetCalendarValue() throws SQLException {
+ createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getCalendarValue(1, Date.class, Calendar.getInstance());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void assertGetInputStream() throws SQLException {
+ createMergedEncryptColumnsMergedResult(queryResult, mock(EncryptRule.class)).getInputStream(1, "asc");
+ }
+
private MergedEncryptShowColumnsMergedResult createMergedEncryptColumnsMergedResult(final QueryResult queryResult, final EncryptRule encryptRule) {
SelectStatementContext sqlStatementContext = mock(SelectStatementContext.class);
- IdentifierValue identifierValue = new IdentifierValue("test");
- TableNameSegment tableNameSegment = new TableNameSegment(1, 4, identifierValue);
- SimpleTableSegment simpleTableSegment = new SimpleTableSegment(tableNameSegment);
- when(sqlStatementContext.getAllTables()).thenReturn(Collections.singletonList(simpleTableSegment));
+ when(sqlStatementContext.getAllTables()).thenReturn(Collections.singletonList(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("t_encrypt")))));
return new MergedEncryptShowColumnsMergedResult(queryResult, sqlStatementContext, encryptRule);
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/fixture/TestStatementContext.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/fixture/TestStatementContext.java
deleted file mode 100644
index 399a6903c7a..00000000000
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/fixture/TestStatementContext.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.merge.dal.show.fixture;
-
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-import java.util.Collection;
-
-@RequiredArgsConstructor
-public final class TestStatementContext implements SQLStatementContext<SQLStatement>, TableAvailable {
-
- private final SQLStatement sqlStatement;
-
- private final Collection<SimpleTableSegment> allTables;
-
- private final TablesContext tablesContext;
-
- @Override
- public SQLStatement getSqlStatement() {
- return sqlStatement;
- }
-
- @Override
- public Collection<SimpleTableSegment> getAllTables() {
- return allTables;
- }
-
- @Override
- public TablesContext getTablesContext() {
- return tablesContext;
- }
-
- @Override
- public DatabaseType getDatabaseType() {
- return DatabaseTypeEngine.getDatabaseType("MySQL");
- }
-}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
index 64b18a7e3b1..58bbab1993f 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.encrypt.metadata;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecoratorFactory;
import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
@@ -50,8 +51,8 @@ public final class EncryptSchemaMetaDataDecoratorTest {
EncryptSchemaMetaDataDecorator loader = getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
tableMetaDataList.add(createTableMetaData());
- TableMetaData actual = loader.decorate(Collections.singletonMap("logic_db",
- new SchemaMetaData("logic_db", tableMetaDataList)), rule, mock(GenericSchemaBuilderMaterial.class)).get("logic_db").getTables().iterator().next();
+ TableMetaData actual = loader.decorate(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
+ new SchemaMetaData(DefaultDatabase.LOGIC_NAME, tableMetaDataList)), rule, mock(GenericSchemaBuilderMaterial.class)).get(DefaultDatabase.LOGIC_NAME).getTables().iterator().next();
assertThat(actual.getColumns().size(), is(2));
Iterator<ColumnMetaData> columnsIterator = actual.getColumns().iterator();
assertThat(columnsIterator.next().getName(), is("id"));
@@ -63,6 +64,7 @@ public final class EncryptSchemaMetaDataDecoratorTest {
EncryptTable encryptTable = mock(EncryptTable.class);
when(result.findEncryptTable(TABLE_NAME)).thenReturn(Optional.of(encryptTable));
when(encryptTable.getAssistedQueryColumns()).thenReturn(Collections.emptyList());
+ when(encryptTable.getLikeQueryColumns()).thenReturn(Collections.singletonList("pwd_like"));
when(encryptTable.getPlainColumns()).thenReturn(Collections.singleton("pwd_plain"));
when(encryptTable.isCipherColumn("pwd_cipher")).thenReturn(true);
when(encryptTable.getLogicColumnByCipherColumn("pwd_cipher")).thenReturn("pwd");
@@ -73,7 +75,8 @@ public final class EncryptSchemaMetaDataDecoratorTest {
private TableMetaData createTableMetaData() {
Collection<ColumnMetaData> columns = Arrays.asList(new ColumnMetaData("id", Types.INTEGER, true, true, true, true, false),
new ColumnMetaData("pwd_cipher", Types.VARCHAR, false, false, true, true, false),
- new ColumnMetaData("pwd_plain", Types.VARCHAR, false, false, true, true, false));
+ new ColumnMetaData("pwd_plain", Types.VARCHAR, false, false, true, true, false),
+ new ColumnMetaData("pwd_like", Types.VARCHAR, false, false, true, true, false));
return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(), Collections.emptyList());
}