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

menghaoran 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 94894ca0605 Add OptimizationSQLNodeConvertException (#20430)
94894ca0605 is described below

commit 94894ca0605d599542106d2ec879ac03700b2539
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Aug 23 03:24:02 2022 +0800

    Add OptimizationSQLNodeConvertException (#20430)
---
 .../content/user-manual/error-code/sql-error-code.cn.md  |  3 ++-
 .../content/user-manual/error-code/sql-error-code.en.md  |  3 ++-
 .../UnsupportedActualDataNodeStructureException.java     |  2 +-
 .../federation/optimizer/ShardingSphereOptimizer.java    | 13 ++++---------
 .../optimizer/converter/SQLNodeConverterEngine.java      |  3 ++-
 .../exception/OptimizationSQLNodeConvertException.java}  | 16 +++++++---------
 6 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md 
b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index 04bd7537c0c..60b667a72fc 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -10,11 +10,12 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 | --------- | ----------- | ------ |
 | 01000     | 10000       | Circuit break open, the request has been ignored |
 | 08000     | 10001       | The URL \`%s\` is not recognized, please refer to 
the pattern \`%s\` |
+| 42000     | 10002       | Can not support 3-tier structure for actual data 
node \`%s\` with JDBC \`%s\` |
+| 42000     | 10003       | Unsupported SQL node conversion for SQL statement 
\`%s\` |
 | 42000     | 11000       | You have an error in your SQL syntax: %s |
 | 42000     | 11001       | configuration error |
 | 42000     | 11002       | Resource does not exist |
 | 42000     | 11003       | Rule does not exist |
-| 42000     | 11004       | Can not support 3-tier structure for actual data 
node \`%s\` with JDBC \`%s\` |
 | 42000     | 12000       | Unsupported command: %s |
 | 44000     | 13000       | SQL check failed, error message: %s |
 | HY000     | 14000       | The table \`%s\` of schema \`%s\` is locked |
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md 
b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index 8bd060fd926..bfcb7340732 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -10,11 +10,12 @@ SQL error codes provide by standard `SQL State`, `Vendor 
Code` and `Reason`, whi
 | --------- | ----------- | ------ |
 | 01000     | 10000       | Circuit break open, the request has been ignored |
 | 08000     | 10001       | The URL \`%s\` is not recognized, please refer to 
the pattern \`%s\` |
+| 42000     | 10002       | Can not support 3-tier structure for actual data 
node \`%s\` with JDBC \`%s\` |
+| 42000     | 10003       | Unsupported SQL node conversion for SQL statement 
\`%s\` |
 | 42000     | 11000       | You have an error in your SQL syntax: %s |
 | 42000     | 11001       | configuration error |
 | 42000     | 11002       | Resource does not exist |
 | 42000     | 11003       | Rule does not exist |
-| 42000     | 11004       | Can not support 3-tier structure for actual data 
node \`%s\` with JDBC \`%s\` |
 | 42000     | 12000       | Unsupported command: %s |
 | 44000     | 13000       | SQL check failed, error message: %s |
 | HY000     | 14000       | The table \`%s\` of schema \`%s\` is locked |
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
index b80118fa3a5..aa0781c51f1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
@@ -31,6 +31,6 @@ public final class 
UnsupportedActualDataNodeStructureException extends ShardingS
     private static final long serialVersionUID = -8921823916974492519L;
     
     public UnsupportedActualDataNodeStructureException(final DataNode 
dataNode, final Collection<String> jdbcUrlPrefixes) {
-        super(XOpenSQLState.SYNTAX_ERROR, 11004, "Can not support 3-tier 
structure for actual data node `%s` with JDBC `%s`", dataNode.format(), 
jdbcUrlPrefixes.toString());
+        super(XOpenSQLState.SYNTAX_ERROR, 10002, "Can not support 3-tier 
structure for actual data node `%s` with JDBC `%s`", dataNode.format(), 
jdbcUrlPrefixes.toString());
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
index faec5782398..32eac8cb870 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
@@ -23,7 +23,6 @@ import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
-import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import 
org.apache.shardingsphere.infra.federation.optimizer.converter.SQLNodeConverterEngine;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -44,14 +43,10 @@ public final class ShardingSphereOptimizer {
      * @return optimized relational node
      */
     public RelNode optimize(final SQLStatement sqlStatement) {
-        try {
-            SqlNode sqlNode = SQLNodeConverterEngine.convert(sqlStatement);
-            RelNode logicPlan = converter.convertQuery(sqlNode, true, 
true).rel;
-            RelNode bestPlan = optimizeWithRBO(logicPlan, hepPlanner);
-            return optimizeWithCBO(bestPlan, converter);
-        } catch (final UnsupportedOperationException ex) {
-            throw new ShardingSphereException(ex);
-        }
+        SqlNode sqlNode = SQLNodeConverterEngine.convert(sqlStatement);
+        RelNode logicPlan = converter.convertQuery(sqlNode, true, true).rel;
+        RelNode bestPlan = optimizeWithRBO(logicPlan, hepPlanner);
+        return optimizeWithCBO(bestPlan, converter);
     }
     
     private static RelNode optimizeWithRBO(final RelNode logicPlan, final 
RelOptPlanner hepPlanner) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
index 2b7f3fceb00..050f0899391 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/SQLNodeConverterEngine.java
@@ -22,6 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.calcite.sql.SqlBasicCall;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParserPos;
+import 
org.apache.shardingsphere.infra.federation.optimizer.converter.exception.OptimizationSQLNodeConvertException;
 import 
org.apache.shardingsphere.infra.federation.optimizer.converter.statement.select.SelectStatementConverter;
 import 
org.apache.shardingsphere.infra.federation.optimizer.converter.type.CombineOperatorConverter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment;
@@ -51,6 +52,6 @@ public final class SQLNodeConverterEngine {
             }
             return sqlNode;
         }
-        throw new UnsupportedOperationException("Unsupported SQL node 
conversion.");
+        throw new OptimizationSQLNodeConvertException(statement);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/exception/OptimizationSQLNodeConvertException.java
similarity index 59%
copy from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
copy to 
shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/exception/OptimizationSQLNodeConvertException.java
index b80118fa3a5..688152c8274 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/exception/UnsupportedActualDataNodeStructureException.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/exception/OptimizationSQLNodeConvertException.java
@@ -15,22 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.database.schema.exception;
+package 
org.apache.shardingsphere.infra.federation.optimizer.converter.exception;
 
-import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.util.exception.sql.ShardingSphereSQLException;
 import 
org.apache.shardingsphere.infra.util.exception.sql.sqlstate.XOpenSQLState;
-
-import java.util.Collection;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 /**
- * Unsupported actual data node structure exception.
+ * Optimization SQL node convert exception.
  */
-public final class UnsupportedActualDataNodeStructureException extends 
ShardingSphereSQLException {
+public final class OptimizationSQLNodeConvertException extends 
ShardingSphereSQLException {
     
-    private static final long serialVersionUID = -8921823916974492519L;
+    private static final long serialVersionUID = -5486229929620713984L;
     
-    public UnsupportedActualDataNodeStructureException(final DataNode 
dataNode, final Collection<String> jdbcUrlPrefixes) {
-        super(XOpenSQLState.SYNTAX_ERROR, 11004, "Can not support 3-tier 
structure for actual data node `%s` with JDBC `%s`", dataNode.format(), 
jdbcUrlPrefixes.toString());
+    public OptimizationSQLNodeConvertException(final SQLStatement statement) {
+        super(XOpenSQLState.SYNTAX_ERROR, 10003, "Unsupported SQL node 
conversion for SQL statement `%s`", statement.toString());
     }
 }

Reply via email to