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));
}
}