You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/03/10 02:09:35 UTC
[shardingsphere] branch master updated: matched the PredicateColumnToken and PredicateRightValueToken (#15952)
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 e5cb762 matched the PredicateColumnToken and PredicateRightValueToken (#15952)
e5cb762 is described below
commit e5cb7628ebcda4b5c78cadcf97be61c8ccc3c407
Author: cheese8 <yi...@163.com>
AuthorDate: Thu Mar 10 10:08:12 2022 +0800
matched the PredicateColumnToken and PredicateRightValueToken (#15952)
---
.../generator/EncryptPredicateRightValueTokenGenerator.java | 9 ++++++++-
.../case/query-with-plain/dml/select/select_projection.xml | 5 +++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
index a7849a6..69c68c6 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
@@ -33,6 +33,7 @@ import org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.Paramet
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import java.util.Collection;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -93,7 +94,13 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio
private SQLToken generateSQLTokenForQueryWithoutCipherColumn(final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
int stopIndex = encryptCondition.getStopIndex();
- Map<Integer, Object> indexValues = getPositionValues(encryptCondition.getPositionValueMap().keySet(), originalValues);
+ Map<Integer, Object> indexValues = new HashMap<>();
+ Optional<String> plainColumn = encryptRule.findPlainColumn(encryptCondition.getTableName(), encryptCondition.getColumnName());
+ if (plainColumn.isPresent()) {
+ indexValues.putAll(getPositionValues(encryptCondition.getPositionValueMap().keySet(), originalValues));
+ } else {
+ indexValues.putAll(getPositionValues(encryptCondition.getPositionValueMap().keySet(), getEncryptedValues(schemaName, encryptCondition, originalValues)));
+ }
Collection<Integer> parameterMarkerIndexes = encryptCondition.getPositionIndexMap().keySet();
return encryptCondition instanceof EncryptInCondition
? new EncryptPredicateInRightValueToken(startIndex, stopIndex, indexValues, parameterMarkerIndexes)
diff --git a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-plain/dml/select/select_projection.xml b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-plain/dml/select/select_projection.xml
index 6a94e8a..e8ca98c 100644
--- a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-plain/dml/select/select_projection.xml
+++ b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-plain/dml/select/select_projection.xml
@@ -51,4 +51,9 @@
<input sql="SELECT * FROM t_order WHERE content = ?" parameters="TEST" />
<output sql="SELECT `t_order`.`order_id`, `t_order`.`user_id`, `t_order`.`plain_content` AS `content` FROM t_order WHERE plain_content = ?" parameters="TEST" />
</rewrite-assertion>
+
+ <rewrite-assertion id="select_for_predicate_and_right_value_should_be_matched" db-types="MySQL">
+ <input sql="SELECT account_id, password, amount AS a, status AS s FROM t_account WHERE account_id = 1 AND password = 'aaa' AND amount = 1000 AND status = 'OK'" />
+ <output sql="SELECT account_id, cipher_password AS password, cipher_amount AS a, status AS s FROM t_account WHERE account_id = 1 AND assisted_query_password = 'assisted_query_aaa' AND cipher_amount = 'encrypt_1000' AND status = 'OK'" />
+ </rewrite-assertion>
</rewrite-assertions>