This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 76db20af98a adapt SQLBuilder.toSQL for SubstitutableColumnNameToken 
(#18573)
76db20af98a is described below

commit 76db20af98a82ea195b86e5e911332b65ab14c81
Author: cheese8 <[email protected]>
AuthorDate: Sat Jun 25 00:48:51 2022 +0800

    adapt SQLBuilder.toSQL for SubstitutableColumnNameToken (#18573)
    
    * adaptor for SQLBuilder.toSQL for SubstitutableColumnNameToken
    
    * fix CI bugs
    
    * Update AbstractSQLBuilder.java
---
 .../infra/rewrite/sql/impl/AbstractSQLBuilder.java           | 12 +++++++++++-
 .../infra/rewrite/sql/impl/DefaultSQLBuilder.java            |  2 +-
 .../infra/rewrite/sql/impl/RouteSQLBuilder.java              |  2 +-
 .../sql/token/pojo/generic/SubstitutableColumnNameToken.java | 10 +++++++++-
 .../case/query-with-cipher/dml/insert/insert-column.xml      |  5 +++++
 5 files changed, 27 insertions(+), 4 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/AbstractSQLBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/AbstractSQLBuilder.java
index 74b0206d02e..dc517cca1fd 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/AbstractSQLBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/AbstractSQLBuilder.java
@@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.rewrite.sql.SQLBuilder;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.Substitutable;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.ComposableSQLToken;
+import 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
 
 import java.util.Collections;
 
@@ -34,6 +36,8 @@ public abstract class AbstractSQLBuilder implements 
SQLBuilder {
     
     private final SQLRewriteContext context;
     
+    private final RouteUnit routeUnit;
+    
     @Override
     public final String toSQL() {
         if (context.getSqlTokens().isEmpty()) {
@@ -43,7 +47,13 @@ public abstract class AbstractSQLBuilder implements 
SQLBuilder {
         StringBuilder result = new StringBuilder();
         result.append(context.getSql(), 0, 
context.getSqlTokens().get(0).getStartIndex());
         for (SQLToken each : context.getSqlTokens()) {
-            result.append(each instanceof ComposableSQLToken ? 
getComposableSQLTokenText((ComposableSQLToken) each) : getSQLTokenText(each));
+            if (each instanceof ComposableSQLToken) {
+                result.append(getComposableSQLTokenText((ComposableSQLToken) 
each));
+            } else if (each instanceof SubstitutableColumnNameToken) {
+                result.append(((SubstitutableColumnNameToken) 
each).toString(routeUnit));
+            } else {
+                result.append(getSQLTokenText(each));
+            }
             result.append(getConjunctionText(each));
         }
         return result.toString();
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/DefaultSQLBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/DefaultSQLBuilder.java
index ceaf3f180c5..d35d2220870 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/DefaultSQLBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/DefaultSQLBuilder.java
@@ -26,7 +26,7 @@ import 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 public final class DefaultSQLBuilder extends AbstractSQLBuilder {
     
     public DefaultSQLBuilder(final SQLRewriteContext context) {
-        super(context);
+        super(context, null);
     }
     
     @Override
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/RouteSQLBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/RouteSQLBuilder.java
index d3f161bd128..0f08d68e7b3 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/RouteSQLBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/impl/RouteSQLBuilder.java
@@ -30,7 +30,7 @@ public final class RouteSQLBuilder extends AbstractSQLBuilder 
{
     private final RouteUnit routeUnit;
     
     public RouteSQLBuilder(final SQLRewriteContext context, final RouteUnit 
routeUnit) {
-        super(context);
+        super(context, routeUnit);
         this.routeUnit = routeUnit;
     }
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
index 13b695e519a..4bd7d5ca214 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/pojo/generic/SubstitutableColumnNameToken.java
@@ -29,6 +29,8 @@ import 
org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
 
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -75,7 +77,10 @@ public final class SubstitutableColumnNameToken extends 
SQLToken implements Subs
     
     @Override
     public String toString(final RouteUnit routeUnit) {
-        Map<String, String> logicAndActualTables = 
getLogicAndActualTables(routeUnit);
+        Map<String, String> logicAndActualTables = new HashMap<>();
+        if (null != routeUnit) {
+            logicAndActualTables.putAll(getLogicAndActualTables(routeUnit));
+        }
         StringBuilder result = new StringBuilder();
         int count = 0;
         for (ColumnProjection each : projections) {
@@ -90,6 +95,9 @@ public final class SubstitutableColumnNameToken extends 
SQLToken implements Subs
     }
     
     private Map<String, String> getLogicAndActualTables(final RouteUnit 
routeUnit) {
+        if (null == routeUnit) {
+            return Collections.emptyMap();
+        }
         Map<String, String> result = new LinkedHashMap<>();
         for (RouteMapper each : routeUnit.getTableMappers()) {
             result.put(each.getLogicName(), each.getActualName());
diff --git 
a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
 
b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
index 1b21e7d6e50..6e6beef3c2a 100644
--- 
a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
+++ 
b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
@@ -22,6 +22,11 @@
         <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, cipher_password, 
assisted_query_password, cipher_amount, status) VALUES (?, ?, ?, ?, ?, ?, ?), 
(2, 'encrypt_222X', 'assisted_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'encrypt_2000', 'OK'), (?, ?, ?, ?, ?, ?, ?), (4, 'encrypt_444X', 
'assisted_query_444X', 'encrypt_ddd', 'assisted_query_ddd', 'encrypt_4000', 
'OK')" parameters="1, encrypt_111X, assisted_query_111X, e [...]
     </rewrite-assertion>
 
+    <rewrite-assertion 
id="insert_values_with_columns_for_parameters_with_plain_column" 
db-types="PostgreSQL">
+        <input sql="INSERT INTO t_account_bak(account_id, certificate_number, 
password, amount, status) VALUES (?, ?, ?, ?, ?)" parameters="1, 111X, aaa, 
1000, OK" />
+        <output sql="INSERT INTO t_account_bak(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
plain_certificate_number, cipher_password, assisted_query_password, 
plain_password, cipher_amount, plain_amount, status) VALUES (?, ?, ?, ?, ?, ?, 
?, ?, ?, ?)" parameters="1, encrypt_111X, assisted_query_111X, 111X, 
encrypt_aaa, assisted_query_aaa, aaa, encrypt_1000, 1000, OK" />
+    </rewrite-assertion>
+
     <rewrite-assertion id="insert_values_with_columns_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account(account_id, certificate_number, 
password, amount, status) VALUES (1, '111X', 'aaa', 1000, 'OK'), (2, '222X', 
'bbb', 2000, 'OK'), (3, '333X', 'ccc', 3000, 'OK'), (4, '444X', 'ddd', 4000, 
'OK')" />
         <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, cipher_password, 
assisted_query_password, cipher_amount, status) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'encrypt_aaa', 'assisted_query_aaa', 'encrypt_1000', 
'OK'), (2, 'encrypt_222X', 'assisted_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'encrypt_2000', 'OK'), (3, 'encrypt_333X', 
'assisted_query_333X', 'encrypt_ccc', 'assisted_query_ccc', 'encrypt_3000', ' 
[...]

Reply via email to