You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/02/19 14:23:36 UTC

[shardingsphere] branch master updated: Use default to handle DefaultSaneQueryResultEngine (#24248)

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

zhonghongsheng 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 651c7decd4a Use default to handle DefaultSaneQueryResultEngine (#24248)
651c7decd4a is described below

commit 651c7decd4aa1a6d4ec3758b2dc1004befe7bdea
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Feb 19 22:23:28 2023 +0800

    Use default to handle DefaultSaneQueryResultEngine (#24248)
    
    * Use default to handle DefaultSaneQueryResultEngine
    
    * Use default to handle DefaultSaneQueryResultEngine
---
 .../proxy/backend/connector/ProxySQLExecutor.java      |  5 ++---
 .../executor/callback/ProxyJDBCExecutorCallback.java   |  5 ++---
 .../connector/sane/DefaultSaneQueryResultEngine.java   |  5 +++++
 ....proxy.backend.connector.sane.SaneQueryResultEngine | 18 ++++++++++++++++++
 .../sane/DefaultSaneQueryResultEngineTest.java         |  7 ++++---
 5 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index c598ddf8beb..6d1d55e7509 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -30,8 +30,6 @@ import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
-import org.apache.shardingsphere.proxy.backend.connector.sane.DefaultSaneQueryResultEngine;
-import org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.raw.RawExecutor;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.raw.RawSQLExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.raw.callback.RawSQLExecutorCallback;
@@ -45,6 +43,7 @@ import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.proxy.backend.connector.jdbc.executor.ProxyJDBCExecutor;
 import org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
 import org.apache.shardingsphere.proxy.backend.connector.jdbc.transaction.BackendTransactionManager;
+import org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine;
 import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
@@ -224,7 +223,7 @@ public final class ProxySQLExecutor {
     
     private List<ExecuteResult> getSaneExecuteResults(final ExecutionContext executionContext, final SQLException originalException) throws SQLException {
         DatabaseType databaseType = ProxyContext.getInstance().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getProtocolType();
-        Optional<ExecuteResult> executeResult = TypedSPILoader.findService(SaneQueryResultEngine.class, databaseType.getType()).orElseGet(DefaultSaneQueryResultEngine::new)
+        Optional<ExecuteResult> executeResult = TypedSPILoader.getService(SaneQueryResultEngine.class, databaseType.getType())
                 .getSaneQueryResult(executionContext.getSqlStatementContext().getSqlStatement(), originalException);
         if (executeResult.isPresent()) {
             return Collections.singletonList(executeResult.get());
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
index 709ff34b153..f776efa9a74 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
@@ -22,8 +22,6 @@ import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
-import org.apache.shardingsphere.proxy.backend.connector.sane.DefaultSaneQueryResultEngine;
-import org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.JDBCMemoryQueryResult;
@@ -31,6 +29,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.dr
 import org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector;
+import org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -106,7 +105,7 @@ public abstract class ProxyJDBCExecutorCallback extends JDBCExecutorCallback<Exe
     
     @Override
     protected final Optional<ExecuteResult> getSaneResult(final SQLStatement sqlStatement, final SQLException ex) {
-        return TypedSPILoader.findService(SaneQueryResultEngine.class, getProtocolTypeType().getType()).orElseGet(DefaultSaneQueryResultEngine::new).getSaneQueryResult(sqlStatement, ex);
+        return TypedSPILoader.getService(SaneQueryResultEngine.class, getProtocolTypeType().getType()).getSaneQueryResult(sqlStatement, ex);
     }
     
     private DatabaseType getProtocolTypeType() {
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngine.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngine.java
index 3ccd6430c83..7497403d599 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngine.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngine.java
@@ -46,4 +46,9 @@ public final class DefaultSaneQueryResultEngine implements SaneQueryResultEngine
         MemoryQueryResultDataRow resultDataRow = new MemoryQueryResultDataRow(Collections.singletonList("1"));
         return new RawMemoryQueryResult(new RawQueryResultMetaData(Collections.singletonList(queryResultColumnMetaData)), Collections.singletonList(resultDataRow));
     }
+    
+    @Override
+    public boolean isDefault() {
+        return true;
+    }
 }
diff --git a/proxy/backend/core/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine b/proxy/backend/core/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine
new file mode 100644
index 00000000000..72216cc83bf
--- /dev/null
+++ b/proxy/backend/core/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.connector.sane.SaneQueryResultEngine
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.proxy.backend.connector.sane.DefaultSaneQueryResultEngine
diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngineTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngineTest.java
index 4814ff5fd74..4bd43c1a443 100644
--- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngineTest.java
+++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/sane/DefaultSaneQueryResultEngineTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.connector.sane;
 
 import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.raw.type.RawMemoryQueryResult;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.junit.Test;
 
@@ -26,20 +27,20 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public final class DefaultSaneQueryResultEngineTest {
     
     @Test
     public void assertGetSaneQueryResultForOtherStatement() {
-        assertThat(new DefaultSaneQueryResultEngine().getSaneQueryResult(() -> 0, null), is(Optional.empty()));
+        assertThat(TypedSPILoader.getService(SaneQueryResultEngine.class, null).getSaneQueryResult(() -> 0, null), is(Optional.empty()));
     }
     
     @Test
     public void assertGetSaneQueryResultForSelectStatement() {
-        Optional<ExecuteResult> actual = new DefaultSaneQueryResultEngine().getSaneQueryResult(new SelectStatement() {
+        Optional<ExecuteResult> actual = TypedSPILoader.getService(SaneQueryResultEngine.class, null).getSaneQueryResult(new SelectStatement() {
         }, null);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), instanceOf(RawMemoryQueryResult.class));