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 <yydeng...@gmail.com> 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, ad...@gmail.com" /> + <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 = 'ad...@gmail.com'" /> + <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 = 'ad...@gmail.com'" /> + <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 = 'ad...@gmail.com'" /> + <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>