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

xiaoyu 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 c3a6d46  Skip schema check when select without table (#8533)
c3a6d46 is described below

commit c3a6d46235d708b786bb6429d1e5c7c917429f13
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Dec 8 18:23:26 2020 +0800

    Skip schema check when select without table (#8533)
---
 .../text/data/DatabaseBackendHandlerFactory.java   |  5 ++--
 .../data/DatabaseBackendHandlerFactoryTest.java    | 33 +++++++++++++---------
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactory.java
index 8f380a3..77f2f9b 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactory.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.proxy.backend.text.data.impl.UnicastDatabaseBac
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 
 /**
  * Database backend handler factory.
@@ -45,9 +46,9 @@ public final class DatabaseBackendHandlerFactory {
         if (sqlStatement instanceof SetStatement) {
             return new BroadcastDatabaseBackendHandler(sqlStatement, sql, 
backendConnection);
         }
-        if (sqlStatement instanceof DALStatement) {
+        if (sqlStatement instanceof DALStatement || (sqlStatement instanceof 
SelectStatement && null == ((SelectStatement) sqlStatement).getFrom())) {
             return new UnicastDatabaseBackendHandler(sqlStatement, sql, 
backendConnection);
         }
-        return new SchemaAssignedDatabaseBackendHandler(sqlStatement, sql, 
backendConnection); 
+        return new SchemaAssignedDatabaseBackendHandler(sqlStatement, sql, 
backendConnection);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactoryTest.java
index 1bd52a1..ed0b508 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/DatabaseBackendHandlerFactoryTest.java
@@ -24,35 +24,40 @@ import 
org.apache.shardingsphere.proxy.backend.text.data.impl.UnicastDatabaseBac
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.junit.Test;
-import org.mockito.Mock;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 
 public final class DatabaseBackendHandlerFactoryTest {
-
-    @Mock
-    private BackendConnection backendConnection;
-
+    
     @Test
     public void assertNewInstanceReturnedBroadcastDatabaseBackendHandler() {
-        String sql = "SELECT 1 FROM user WHERE id BETWEEN 1001 AND 3001";
-        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(SetStatement.class), sql, 
backendConnection);
+        String sql = "SET a=1";
+        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(SetStatement.class), sql, 
mock(BackendConnection.class));
         assertThat(actual, instanceOf(BroadcastDatabaseBackendHandler.class));
     }
-
+    
     @Test
-    public void assertNewInstanceReturnedUnicastDatabaseBackendHandler() {
-        String sql = "SELECT 1 FROM user WHERE id = 1";
-        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(DALStatement.class), sql, 
backendConnection);
+    public void 
assertNewInstanceReturnedUnicastDatabaseBackendHandlerWithDAL() {
+        String sql = "DESC tbl";
+        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(DALStatement.class), sql, 
mock(BackendConnection.class));
         assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
     }
-
+    
+    @Test
+    public void 
assertNewInstanceReturnedUnicastDatabaseBackendHandlerWithQueryWithoutFrom() {
+        String sql = "SELECT 1";
+        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(SelectStatement.class), sql, 
mock(BackendConnection.class));
+        assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
+    }
+    
     @Test
     public void 
assertNewInstanceReturnedSchemaAssignedDatabaseBackendHandler() {
-        String sql = "USE test";
-        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(SQLStatement.class), sql, 
backendConnection);
+        String sql = "SELECT 1 FROM user WHERE id = 1";
+        DatabaseBackendHandler actual = 
DatabaseBackendHandlerFactory.newInstance(mock(SQLStatement.class), sql, 
mock(BackendConnection.class));
         assertThat(actual, 
instanceOf(SchemaAssignedDatabaseBackendHandler.class));
     }
 }

Reply via email to