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

zhaojinchao 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 f7d7ce2cbb2 Refactor SQLAuditEngine (#31529)
f7d7ce2cbb2 is described below

commit f7d7ce2cbb2988ff4879dde1230581e1a0b30df4
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 2 20:32:39 2024 +0800

    Refactor SQLAuditEngine (#31529)
    
    * Refactor ShardingSphereStatement
    
    * Rename DriverExecutor.getResultSet()
    
    * Refactor SQLAuditEngine
    
    * Refactor SQLAuditEngine
---
 .../shardingsphere/sharding/auditor/ShardingSQLAuditor.java | 12 +++++-------
 .../sharding/auditor/ShardingSQLAuditorTest.java            |  9 +++++----
 .../shardingsphere/infra/executor/audit/SQLAuditEngine.java | 13 ++++---------
 .../shardingsphere/infra/executor/audit/SQLAuditor.java     | 12 +++---------
 .../shardingsphere/driver/executor/DriverExecutor.java      |  2 +-
 .../core/statement/ShardingSpherePreparedStatement.java     |  7 +++----
 .../proxy/backend/handler/ProxyBackendHandlerFactory.java   |  3 +--
 .../query/text/query/MySQLMultiStatementsHandler.java       |  2 +-
 .../query/extended/PostgreSQLBatchedStatementsExecutor.java |  2 +-
 9 files changed, 24 insertions(+), 38 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditor.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditor.java
index 3e99f844669..2ea20303b2a 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditor.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditor.java
@@ -19,17 +19,16 @@ package org.apache.shardingsphere.sharding.auditor;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.executor.audit.SQLAuditor;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 
 /**
  * Sharding SQL auditor.
@@ -37,17 +36,16 @@ import java.util.List;
 public final class ShardingSQLAuditor implements SQLAuditor<ShardingRule> {
     
     @Override
-    public void audit(final SQLStatementContext sqlStatementContext, final 
List<Object> params, final Grantee grantee, final RuleMetaData 
globalRuleMetaData,
-                      final ShardingSphereDatabase database, final 
ShardingRule rule, final HintValueContext hintValueContext) {
-        Collection<ShardingAuditStrategyConfiguration> auditStrategies = 
getShardingAuditStrategies(sqlStatementContext, rule);
+    public void audit(final QueryContext queryContext, final Grantee grantee, 
final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, 
final ShardingRule rule) {
+        Collection<ShardingAuditStrategyConfiguration> auditStrategies = 
getShardingAuditStrategies(queryContext.getSqlStatementContext(), rule);
         if (auditStrategies.isEmpty()) {
             return;
         }
-        Collection<String> disableAuditNames = 
hintValueContext.getDisableAuditNames();
+        Collection<String> disableAuditNames = 
queryContext.getHintValueContext().getDisableAuditNames();
         for (ShardingAuditStrategyConfiguration auditStrategy : 
auditStrategies) {
             for (String auditorName : auditStrategy.getAuditorNames()) {
                 if (!auditStrategy.isAllowHintDisable() || 
!disableAuditNames.contains(auditorName.toLowerCase())) {
-                    
rule.getAuditors().get(auditorName).check(sqlStatementContext, params, grantee, 
globalRuleMetaData, database);
+                    
rule.getAuditors().get(auditorName).check(queryContext.getSqlStatementContext(),
 queryContext.getParameters(), grantee, globalRuleMetaData, database);
                 }
             }
         }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java
index bbb550440f6..f3b268e7a2b 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.auditor;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.audit.DMLWithoutShardingKeyException;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -81,7 +82,7 @@ class ShardingSQLAuditorTest {
     @Test
     void assertCheckSuccess() {
         RuleMetaData globalRuleMetaData = mock(RuleMetaData.class);
-        new ShardingSQLAuditor().audit(sqlStatementContext, 
Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"), 
rule, hintValueContext);
+        new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, 
"", Collections.emptyList(), hintValueContext), grantee, globalRuleMetaData, 
databases.get("foo_db"), rule);
         verify(rule.getAuditors().get("auditor_1")).check(sqlStatementContext, 
Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"));
     }
     
@@ -89,7 +90,7 @@ class ShardingSQLAuditorTest {
     void assertCheckSuccessByDisableAuditNames() {
         when(auditStrategy.isAllowHintDisable()).thenReturn(true);
         RuleMetaData globalRuleMetaData = mock(RuleMetaData.class);
-        new ShardingSQLAuditor().audit(sqlStatementContext, 
Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"), 
rule, hintValueContext);
+        new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, 
"", Collections.emptyList(), hintValueContext), grantee, globalRuleMetaData, 
databases.get("foo_db"), rule);
         verify(rule.getAuditors().get("auditor_1"), 
times(0)).check(sqlStatementContext, Collections.emptyList(), grantee, 
globalRuleMetaData, databases.get("foo_db"));
     }
     
@@ -98,8 +99,8 @@ class ShardingSQLAuditorTest {
         ShardingAuditAlgorithm auditAlgorithm = 
rule.getAuditors().get("auditor_1");
         RuleMetaData globalRuleMetaData = mock(RuleMetaData.class);
         doThrow(new 
DMLWithoutShardingKeyException()).when(auditAlgorithm).check(sqlStatementContext,
 Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"));
-        DMLWithoutShardingKeyException ex = 
assertThrows(DMLWithoutShardingKeyException.class,
-                () -> new ShardingSQLAuditor().audit(sqlStatementContext, 
Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"), 
rule, hintValueContext));
+        DMLWithoutShardingKeyException ex = 
assertThrows(DMLWithoutShardingKeyException.class, () -> new 
ShardingSQLAuditor().audit(
+                new QueryContext(sqlStatementContext, "", 
Collections.emptyList(), hintValueContext), grantee, globalRuleMetaData, 
databases.get("foo_db"), rule));
         assertThat(ex.getMessage(), is("Not allow DML operation without 
sharding conditions."));
         verify(rule.getAuditors().get("auditor_1")).check(sqlStatementContext, 
Collections.emptyList(), grantee, globalRuleMetaData, databases.get("foo_db"));
     }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditEngine.java
index 102cf44833c..388b51478ff 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditEngine.java
@@ -19,17 +19,15 @@ package org.apache.shardingsphere.infra.executor.audit;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 
 import java.util.Collection;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Map.Entry;
 
 /**
@@ -41,22 +39,19 @@ public final class SQLAuditEngine {
     /**
      * Audit SQL.
      *
-     * @param sqlStatementContext SQL statement context
-     * @param params SQL parameters
+     * @param queryContext query context
      * @param globalRuleMetaData global rule meta data
      * @param database database
      * @param grantee grantee
-     * @param hintValueContext hint value context
      */
     @SuppressWarnings({"rawtypes", "unchecked"})
-    public static void audit(final SQLStatementContext sqlStatementContext, 
final List<Object> params,
-                             final RuleMetaData globalRuleMetaData, final 
ShardingSphereDatabase database, final Grantee grantee, final HintValueContext 
hintValueContext) {
+    public static void audit(final QueryContext queryContext, final 
RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final 
Grantee grantee) {
         Collection<ShardingSphereRule> rules = new 
LinkedList<>(globalRuleMetaData.getRules());
         if (null != database) {
             rules.addAll(database.getRuleMetaData().getRules());
         }
         for (Entry<ShardingSphereRule, SQLAuditor> entry : 
OrderedSPILoader.getServices(SQLAuditor.class, rules).entrySet()) {
-            entry.getValue().audit(sqlStatementContext, params, grantee, 
globalRuleMetaData, database, entry.getKey(), hintValueContext);
+            entry.getValue().audit(queryContext, grantee, globalRuleMetaData, 
database, entry.getKey());
         }
     }
 }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditor.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditor.java
index a239ba02698..d9c1605565a 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditor.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/audit/SQLAuditor.java
@@ -17,17 +17,14 @@
 
 package org.apache.shardingsphere.infra.executor.audit;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPI;
 
-import java.util.List;
-
 /**
  * SQL auditor.
  * 
@@ -39,14 +36,11 @@ public interface SQLAuditor<T extends ShardingSphereRule> 
extends OrderedSPI<T>
     /**
      * Audit SQL.
      * 
-     * @param sqlStatementContext SQL statement context
-     * @param params SQL parameters
+     * @param queryContext query context
      * @param grantee grantee
      * @param globalRuleMetaData global rule meta data
      * @param database current database
      * @param rule rule
-     * @param hintValueContext hint value context
      */
-    void audit(SQLStatementContext sqlStatementContext, List<Object> params, 
Grantee grantee, RuleMetaData globalRuleMetaData,
-               ShardingSphereDatabase database, T rule, HintValueContext 
hintValueContext);
+    void audit(QueryContext queryContext, Grantee grantee, RuleMetaData 
globalRuleMetaData, ShardingSphereDatabase database, T rule);
 }
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index 1686c79b264..7d9a6c2fd71 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -219,7 +219,7 @@ public final class DriverExecutor implements AutoCloseable {
     private ExecutionContext createExecutionContext(final 
ShardingSphereDatabase database, final QueryContext queryContext) throws 
SQLException {
         clearStatements();
         RuleMetaData globalRuleMetaData = metaData.getGlobalRuleMetaData();
-        SQLAuditEngine.audit(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), globalRuleMetaData, database, null, 
queryContext.getHintValueContext());
+        SQLAuditEngine.audit(queryContext, globalRuleMetaData, database, null);
         return kernelProcessor.generateExecutionContext(queryContext, 
database, globalRuleMetaData, metaData.getProps(), 
connection.getDatabaseConnectionManager().getConnectionContext());
     }
     
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index f45c8e8f58e..7fa3aea8e89 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -163,9 +163,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         this(connection, sql, resultSetType, resultSetConcurrency, 
resultSetHoldability, false, null);
     }
     
-    private ShardingSpherePreparedStatement(final ShardingSphereConnection 
connection, final String sql,
-                                            final int resultSetType, final int 
resultSetConcurrency, final int resultSetHoldability, final boolean 
returnGeneratedKeys,
-                                            final String[] columns) throws 
SQLException {
+    private ShardingSpherePreparedStatement(final ShardingSphereConnection 
connection, final String sql, final int resultSetType,
+                                            final int resultSetConcurrency, 
final int resultSetHoldability, final boolean returnGeneratedKeys, final 
String[] columns) throws SQLException {
         ShardingSpherePreconditions.checkNotEmpty(sql, () -> new 
EmptySQLException().toSQLException());
         this.connection = connection;
         metaData = 
connection.getContextManager().getMetaDataContexts().getMetaData();
@@ -351,7 +350,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private ExecutionContext createExecutionContext(final QueryContext 
queryContext) {
         RuleMetaData globalRuleMetaData = metaData.getGlobalRuleMetaData();
         ShardingSphereDatabase currentDatabase = 
metaData.getDatabase(databaseName);
-        SQLAuditEngine.audit(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), globalRuleMetaData, currentDatabase, null, 
queryContext.getHintValueContext());
+        SQLAuditEngine.audit(queryContext, globalRuleMetaData, 
currentDatabase, null);
         ExecutionContext result = kernelProcessor.generateExecutionContext(
                 queryContext, currentDatabase, globalRuleMetaData, 
metaData.getProps(), 
connection.getDatabaseConnectionManager().getConnectionContext());
         findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index f428d090667..12e6c6e42ec 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -147,8 +147,7 @@ public final class ProxyBackendHandlerFactory {
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName);
         ShardingSpherePreconditions.checkState(new 
AuthorityChecker(authorityRule, 
connectionSession.getGrantee()).isAuthorized(databaseName),
                 () -> new UnknownDatabaseException(databaseName));
-        SQLAuditEngine.audit(sqlStatementContext, 
queryContext.getParameters(), 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
-                database, connectionSession.getGrantee(), 
queryContext.getHintValueContext());
+        SQLAuditEngine.audit(queryContext, 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
 database, connectionSession.getGrantee());
         backendHandler = 
DatabaseAdminBackendHandlerFactory.newInstance(databaseType, 
sqlStatementContext, connectionSession);
         return backendHandler.orElseGet(() -> 
DatabaseBackendHandlerFactory.newInstance(queryContext, connectionSession, 
preferPreparedStatement));
     }
diff --git 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 46f6081fc3e..9d9e874fc9c 100644
--- 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -167,7 +167,7 @@ public final class MySQLMultiStatementsHandler implements 
ProxyBackendHandler {
     private ExecutionContext createExecutionContext(final QueryContext 
queryContext) {
         RuleMetaData globalRuleMetaData = 
metaDataContexts.getMetaData().getGlobalRuleMetaData();
         ShardingSphereDatabase currentDatabase = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName());
-        SQLAuditEngine.audit(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), globalRuleMetaData, currentDatabase, null, 
queryContext.getHintValueContext());
+        SQLAuditEngine.audit(queryContext, globalRuleMetaData, 
currentDatabase, null);
         return kernelProcessor.generateExecutionContext(queryContext, 
currentDatabase, globalRuleMetaData, metaDataContexts.getMetaData().getProps(), 
connectionSession.getConnectionContext());
     }
     
diff --git 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index ea0ef544920..a4f0ba848bb 100644
--- 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -130,7 +130,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
     private ExecutionContext createExecutionContext(final QueryContext 
queryContext) {
         RuleMetaData globalRuleMetaData = 
metaDataContexts.getMetaData().getGlobalRuleMetaData();
         ShardingSphereDatabase currentDatabase = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName());
-        SQLAuditEngine.audit(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), globalRuleMetaData, currentDatabase, null, 
queryContext.getHintValueContext());
+        SQLAuditEngine.audit(queryContext, globalRuleMetaData, 
currentDatabase, null);
         return kernelProcessor.generateExecutionContext(queryContext, 
currentDatabase, globalRuleMetaData, metaDataContexts.getMetaData().getProps(), 
connectionSession.getConnectionContext());
     }
     

Reply via email to