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

panjuan 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 9621d0d9e79 Improve ParseDistSQLHandler & add parse test case for 
PostgreSQL. (#19451)
9621d0d9e79 is described below

commit 9621d0d9e793c97c4787bb1dbc8b142f93961b36
Author: Raigor <[email protected]>
AuthorDate: Fri Jul 22 10:31:56 2022 +0800

    Improve ParseDistSQLHandler & add parse test case for PostgreSQL. (#19451)
---
 .../distsql/ral/advanced/ParseDistSQLHandler.java    | 13 ++-----------
 .../distsql/ral/advance/ParseDistSQLHandlerTest.java | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
index 246b0636e18..756255b6674 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
@@ -17,14 +17,11 @@
 
 package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
 
-import com.google.common.base.Strings;
 import com.google.gson.Gson;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.QueryableRALBackendHandler;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -55,17 +52,11 @@ public final class ParseDistSQLHandler extends 
QueryableRALBackendHandler<ParseS
     
     private SQLStatement parseSQL(final ContextManager contextManager) {
         SQLParserRule sqlParserRule = 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
+        String databaseType = 
getConnectionSession().getDatabaseType().getType();
         try {
-            return 
sqlParserRule.getSQLParserEngine(getStorageType().getType()).parse(getSqlStatement().getSql(),
 false);
+            return 
sqlParserRule.getSQLParserEngine(databaseType).parse(getSqlStatement().getSql(),
 false);
         } catch (final SQLParsingException ex) {
             throw new SQLParsingException("You have a syntax error in your 
parsed statement");
         }
     }
-    
-    private DatabaseType getStorageType() {
-        String databaseName = getConnectionSession().getDatabaseName();
-        return Strings.isNullOrEmpty(databaseName) || 
!ProxyContext.getInstance().databaseExists(databaseName)
-                ? getConnectionSession().getDatabaseType()
-                : 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName).getResource().getDatabaseType();
-    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
index 168e603caf1..5567ed78f39 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advance;
 import com.google.gson.Gson;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import 
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -61,13 +62,13 @@ public final class ParseDistSQLHandlerTest extends 
ProxyContextRestorer {
         ShardingSphereRuleMetaData globalRuleMetaData = 
mock(ShardingSphereRuleMetaData.class);
         
when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         
when(globalRuleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(sqlParserRule);
-        when(connectionSession.getDatabaseType()).thenReturn(new 
MySQLDatabaseType());
         ProxyContext.init(contextManager);
     }
     
     @Test
-    public void assertGetRowData() throws SQLException {
+    public void assertGetRowDataForMySQL() throws SQLException {
         String sql = "select * from t_order";
+        when(connectionSession.getDatabaseType()).thenReturn(new 
MySQLDatabaseType());
         ParseStatement parseStatement = new ParseStatement(sql);
         ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
         parseDistSQLHandler.init(parseStatement, connectionSession);
@@ -78,9 +79,24 @@ public final class ParseDistSQLHandlerTest extends 
ProxyContextRestorer {
         assertThat(new 
LinkedList<>(parseDistSQLHandler.getRowData().getData()).getLast(), is(new 
Gson().toJson(statement)));
     }
     
+    @Test
+    public void assertGetRowDataForPostgreSQL() throws SQLException {
+        String sql = "select * from t_order";
+        when(connectionSession.getDatabaseType()).thenReturn(new 
PostgreSQLDatabaseType());
+        ParseStatement parseStatement = new ParseStatement(sql);
+        ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
+        parseDistSQLHandler.init(parseStatement, connectionSession);
+        parseDistSQLHandler.execute();
+        parseDistSQLHandler.next();
+        SQLStatement statement = 
sqlParserRule.getSQLParserEngine("PostgreSQL").parse(sql, false);
+        assertThat(new 
LinkedList<>(parseDistSQLHandler.getRowData().getData()).getFirst(), 
is("PostgreSQLSelectStatement"));
+        assertThat(new 
LinkedList<>(parseDistSQLHandler.getRowData().getData()).getLast(), is(new 
Gson().toJson(statement)));
+    }
+    
     @Test(expected = SQLParsingException.class)
     public void assertExecute() throws SQLException {
         String sql = "wrong sql";
+        when(connectionSession.getDatabaseType()).thenReturn(new 
MySQLDatabaseType());
         ParseStatement parseStatement = new ParseStatement(sql);
         ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
         parseDistSQLHandler.init(parseStatement, connectionSession);

Reply via email to