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', '
[...]