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 ebcc6ddceea Add encryption rewrite test of the SQLServer delete
statement (#30574)
ebcc6ddceea is described below
commit ebcc6ddceea61dc614278f4b9604bb07fdaf2895
Author: yydeng626 <[email protected]>
AuthorDate: Fri Mar 22 09:10:02 2024 +0800
Add encryption rewrite test of the SQLServer delete statement (#30574)
* Add encryption rewrite test of the SQLServer delete statement
* remove schema test case
* optimize the database name value logic
add encrypt with database and schema test case
---
.../test/it/rewrite/engine/SQLRewriterIT.java | 12 ++++++------
.../case/query-with-cipher/dml/delete/delete.xml | 20 ++++++++++++++++++++
.../resources/scenario/sharding/case/dml/select.xml | 2 +-
3 files changed, 27 insertions(+), 7 deletions(-)
diff --git
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index 5aeadcb6728..e154914c23d 100644
---
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -133,18 +133,18 @@ public abstract class SQLRewriterIT {
SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
Collection<ShardingSphereRule> databaseRules =
createDatabaseRules(databaseConfig, schemaName, sqlStatement, databaseType);
RuleMetaData databaseRuleMetaData = new RuleMetaData(databaseRules);
- ShardingSphereDatabase database = new
ShardingSphereDatabase(schemaName, databaseType, resourceMetaData,
databaseRuleMetaData, mockSchemas(schemaName));
+ ShardingSphereDatabase database = new
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, databaseType,
resourceMetaData, databaseRuleMetaData, mockSchemas(schemaName));
Map<String, ShardingSphereDatabase> databases = new HashMap<>(2, 1F);
- databases.put(schemaName, database);
+ databases.put(database.getName(), database);
RuleMetaData globalRuleMetaData = new
RuleMetaData(createGlobalRules());
ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, mock(ResourceMetaData.class),
globalRuleMetaData, mock(ConfigurationProperties.class));
HintValueContext hintValueContext =
SQLHintUtils.extractHint(testParams.getInputSQL());
- SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData,
schemaName, hintValueContext).bind(sqlStatement, Collections.emptyList());
+ SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData,
database.getName(), hintValueContext).bind(sqlStatement,
Collections.emptyList());
if (sqlStatementContext instanceof ParameterAware) {
((ParameterAware)
sqlStatementContext).setUpParameters(testParams.getInputParameters());
}
if (sqlStatementContext instanceof CursorDefinitionAware) {
- ((CursorDefinitionAware)
sqlStatementContext).setUpCursorDefinition(createCursorDefinition(schemaName,
metaData, sqlStatementParserEngine));
+ ((CursorDefinitionAware)
sqlStatementContext).setUpCursorDefinition(createCursorDefinition(database.getName(),
metaData, sqlStatementParserEngine));
}
QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
testParams.getInputParameters(), hintValueContext);
ConfigurationProperties props = new
ConfigurationProperties(rootConfig.getProps());
@@ -174,9 +174,9 @@ public abstract class SQLRewriterIT {
return result;
}
- private CursorStatementContext createCursorDefinition(final String
schemaName, final ShardingSphereMetaData metaData, final
SQLStatementParserEngine sqlStatementParserEngine) {
+ private CursorStatementContext createCursorDefinition(final String
databaseName, final ShardingSphereMetaData metaData, final
SQLStatementParserEngine sqlStatementParserEngine) {
SQLStatement sqlStatement = sqlStatementParserEngine.parse("CURSOR
t_account_cursor FOR SELECT * FROM t_account WHERE account_id = 100", false);
- return (CursorStatementContext) new SQLBindEngine(metaData,
schemaName, new HintValueContext()).bind(sqlStatement, Collections.emptyList());
+ return (CursorStatementContext) new SQLBindEngine(metaData,
databaseName, new HintValueContext()).bind(sqlStatement,
Collections.emptyList());
}
protected abstract void mockDataSource(Map<String, DataSource>
dataSources) throws SQLException;
diff --git
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/delete/delete.xml
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/delete/delete.xml
index 99ef9e65388..657d388372f 100644
---
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/delete/delete.xml
+++
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/delete/delete.xml
@@ -46,4 +46,24 @@
<input sql="DELETE t FROM t_account t WHERE t.account_id = 1 AND
t.password = 'aaa' AND t.password like 'aaa' AND t.amount = 1000 AND t.status =
'OK'" />
<output sql="DELETE t FROM t_account t WHERE t.account_id = 1 AND
t.assisted_query_password = 'assisted_query_aaa' AND t.like_query_password like
'like_query_aaa' AND t.cipher_amount = 'encrypt_1000' AND t.status = 'OK'" />
</rewrite-assertion>
+
+ <rewrite-assertion id="delete_user_for_parameters" db-types="SQLServer">
+ <input sql="DELETE FROM t_user WHERE user_id = ? and user_name = ? and
user_name like ? and password = ? and email = ?" parameters="1, test_user,
test_%, admin123, [email protected]" />
+ <output sql="DELETE FROM t_user WHERE user_id = ? and user_name_cipher
= ? and user_name_like like ? and password_cipher = ? and email_cipher = ?"
parameters="1, o07WOpLlazifLKU747nd8w==, udtu_%, beO6rTHBW9jmVeSPPb62QA==,
zclI1Wk2uaVYHyNckTRYzA==" />
+ </rewrite-assertion>
+
+ <rewrite-assertion id="delete_user_for_literals" db-types="SQLServer">
+ <input sql="DELETE FROM t_user WHERE user_id = 2 and user_name =
'test_user' and user_name like 'test_%' and password = 'admin123' and email =
'[email protected]'" />
+ <output sql="DELETE FROM t_user WHERE user_id = 2 and user_name_cipher
= 'o07WOpLlazifLKU747nd8w==' and user_name_like like 'udtu_%' and
password_cipher = 'beO6rTHBW9jmVeSPPb62QA==' and email_cipher =
'zclI1Wk2uaVYHyNckTRYzA=='" />
+ </rewrite-assertion>
+
+ <rewrite-assertion id="delete_user_with_alias_for_literals"
db-types="SQLServer">
+ <input sql="DELETE t FROM t_user as t WHERE t.user_id = 3 and
t.user_name = 'test_user' and t.user_name like 'test_%' and t.password =
'admin123' and t.email = '[email protected]'" />
+ <output sql="DELETE t FROM t_user as t WHERE t.user_id = 3 and
t.user_name_cipher = 'o07WOpLlazifLKU747nd8w==' and t.user_name_like like
'udtu_%' and t.password_cipher = 'beO6rTHBW9jmVeSPPb62QA==' and t.email_cipher
= 'zclI1Wk2uaVYHyNckTRYzA=='" />
+ </rewrite-assertion>
+
+ <rewrite-assertion
id="delete_user_with_database_and_schema_and_alias_for_literals"
db-types="SQLServer">
+ <input sql="DELETE t FROM logic_db.dbo.t_user as t WHERE t.user_id = 4
and t.user_name = 'test_user' and t.user_name like 'test_%' and t.password =
'admin123' and t.email = '[email protected]'" />
+ <output sql="DELETE t FROM dbo.t_user as t WHERE t.user_id = 4 and
t.user_name_cipher = 'o07WOpLlazifLKU747nd8w==' and t.user_name_like like
'udtu_%' and t.password_cipher = 'beO6rTHBW9jmVeSPPb62QA==' and t.email_cipher
= 'zclI1Wk2uaVYHyNckTRYzA=='" />
+ </rewrite-assertion>
</rewrite-assertions>
diff --git
a/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
b/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
index d72d7f1503e..1ec3880f2e9 100644
--- a/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
+++ b/test/it/rewriter/src/test/resources/scenario/sharding/case/dml/select.xml
@@ -543,7 +543,7 @@
</rewrite-assertion>
<rewrite-assertion id="select_with_database_name_and_schema_name_in_table"
db-types="PostgreSQL,openGauss">
- <input sql="SELECT account_id FROM public.public.t_account WHERE
account_id = ?" parameters="100" />
+ <input sql="SELECT account_id FROM logic_db.public.t_account WHERE
account_id = ?" parameters="100" />
<output sql="SELECT account_id FROM public.t_account_0 WHERE
account_id = ?" parameters="100" />
</rewrite-assertion>