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

duanzhengqiang 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 71be1435c6a Remove useless with statement binder logic (#32122)
71be1435c6a is described below

commit 71be1435c6aeda3f331e7ead7267d885ef47e950
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Tue Jul 16 10:31:05 2024 +0800

    Remove useless with statement binder logic (#32122)
    
    * Remove useless with statement binder logic
    
    * remove useless unit test
    
    * remove useless unit test
---
 .../with/CommonTableExpressionSegmentBinder.java   |  52 ----------
 .../engine/segment/with/WithSegmentBinder.java     |  58 -----------
 .../statement/dml/SelectStatementBinder.java       |   4 +-
 .../expression/type/SubquerySegmentBinderTest.java |  55 -----------
 .../statement/SelectStatementBinderTest.java       | 107 ---------------------
 5 files changed, 1 insertion(+), 275 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/CommonTableExpressionSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/CommonTableExpressionSegmentBinder.java
deleted file mode 100644
index ef5652109f0..00000000000
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/CommonTableExpressionSegmentBinder.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.infra.binder.engine.segment.with;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.expression.type.SubquerySegmentBinder;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.TableSegmentBinderContext;
-import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonTableExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
-
-import java.util.Map;
-
-/**
- * Common table expression segment binder.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class CommonTableExpressionSegmentBinder {
-    
-    /**
-     * Bind common table expression segment.
-     *
-     * @param segment common table expression segment
-     * @param binderContext SQL statement binder context
-     * @param tableBinderContexts table binder contexts
-     * @return bound common table expression segment
-     */
-    public static CommonTableExpressionSegment bind(final 
CommonTableExpressionSegment segment, final SQLStatementBinderContext 
binderContext,
-                                                    final Map<String, 
TableSegmentBinderContext> tableBinderContexts) {
-        SubquerySegment boundSubquerySegment = 
SubquerySegmentBinder.bind(segment.getSubquery(), binderContext, 
tableBinderContexts);
-        CommonTableExpressionSegment result = new 
CommonTableExpressionSegment(segment.getStartIndex(), segment.getStopIndex(), 
segment.getAliasSegment(), boundSubquerySegment);
-        // TODO bind with columns
-        result.getColumns().addAll(segment.getColumns());
-        return result;
-    }
-}
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/WithSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/WithSegmentBinder.java
deleted file mode 100644
index 48b1d06d549..00000000000
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/with/WithSegmentBinder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.infra.binder.engine.segment.with;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.type.SimpleTableSegmentBinderContext;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.TableSegmentBinderContext;
-import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonTableExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.WithSegment;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Map;
-
-/**
- * With segment binder.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class WithSegmentBinder {
-    
-    /**
-     * Bind with segment.
-     *
-     * @param segment with segment
-     * @param binderContext SQL statement binder context
-     * @param tableBinderContexts table binder contexts
-     * @param externalTableBinderContexts external table binder contexts
-     * @return bound with segment
-     */
-    public static WithSegment bind(final WithSegment segment, final 
SQLStatementBinderContext binderContext, final Map<String, 
TableSegmentBinderContext> tableBinderContexts,
-                                   final Map<String, 
TableSegmentBinderContext> externalTableBinderContexts) {
-        Collection<CommonTableExpressionSegment> boundCommonTableExpressions = 
new LinkedList<>();
-        for (CommonTableExpressionSegment each : 
segment.getCommonTableExpressions()) {
-            CommonTableExpressionSegment boundCommonTableExpression = 
CommonTableExpressionSegmentBinder.bind(each, binderContext, 
tableBinderContexts);
-            boundCommonTableExpressions.add(boundCommonTableExpression);
-            each.getAliasName().ifPresent(aliasName -> 
externalTableBinderContexts.put(aliasName,
-                    new 
SimpleTableSegmentBinderContext(boundCommonTableExpression.getSubquery().getSelect().getProjections().getProjections())));
-        }
-        return new WithSegment(segment.getStartIndex(), 
segment.getStopIndex(), boundCommonTableExpressions);
-    }
-}
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
index 0e9d3bac0d1..b2cff322e1f 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/SelectStatementBinder.java
@@ -25,7 +25,6 @@ import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.TableS
 import 
org.apache.shardingsphere.infra.binder.engine.segment.lock.LockSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.projection.ProjectionsSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.where.WhereSegmentBinder;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.with.WithSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableSegment;
@@ -52,8 +51,6 @@ public final class SelectStatementBinder implements 
SQLStatementBinder<SelectSta
     public SelectStatement bind(final SelectStatement sqlStatement, final 
SQLStatementBinderContext binderContext) {
         SelectStatement result = copy(sqlStatement);
         Map<String, TableSegmentBinderContext> tableBinderContexts = new 
LinkedHashMap<>();
-        sqlStatement.getWithSegment()
-                .ifPresent(optional -> 
result.setWithSegment(WithSegmentBinder.bind(optional, binderContext, 
tableBinderContexts, binderContext.getExternalTableBinderContexts())));
         Optional<TableSegment> boundTableSegment = 
sqlStatement.getFrom().map(optional -> TableSegmentBinder.bind(optional, 
binderContext, tableBinderContexts, outerTableBinderContexts));
         boundTableSegment.ifPresent(result::setFrom);
         
result.setProjections(ProjectionsSegmentBinder.bind(sqlStatement.getProjections(),
 binderContext, boundTableSegment.orElse(null), tableBinderContexts, 
outerTableBinderContexts));
@@ -73,6 +70,7 @@ public final class SelectStatementBinder implements 
SQLStatementBinder<SelectSta
         sqlStatement.getLimit().ifPresent(result::setLimit);
         sqlStatement.getWindow().ifPresent(result::setWindow);
         sqlStatement.getModelSegment().ifPresent(result::setModelSegment);
+        sqlStatement.getWithSegment().ifPresent(result::setWithSegment);
         
result.addParameterMarkerSegments(sqlStatement.getParameterMarkerSegments());
         result.getCommentSegments().addAll(sqlStatement.getCommentSegments());
         return result;
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/SubquerySegmentBinderTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/SubquerySegmentBinderTest.java
index 18699ea8fdb..c08d85da16f 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/SubquerySegmentBinderTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/SubquerySegmentBinderTest.java
@@ -28,20 +28,16 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.complex.CommonTableExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.AliasSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.WithSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLSelectStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.oracle.dml.OracleSelectStatement;
 import org.junit.jupiter.api.Test;
 
 import java.sql.Types;
@@ -104,57 +100,6 @@ class SubquerySegmentBinderTest {
         assertThat(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo().getOriginalDatabase().getValue(), 
is(DefaultDatabase.LOGIC_NAME));
     }
     
-    @Test
-    void assertBindUseWithClause() {
-        ColumnSegment columnSegment = new ColumnSegment(29, 36, new 
IdentifierValue("order_id"));
-        ProjectionsSegment projectionsSegment = new ProjectionsSegment(29, 36);
-        projectionsSegment.getProjections().add(new 
ColumnProjectionSegment(columnSegment));
-        OracleSelectStatement oracleSubquerySelectStatement = new 
OracleSelectStatement();
-        oracleSubquerySelectStatement.setProjections(projectionsSegment);
-        oracleSubquerySelectStatement.setFrom(new SimpleTableSegment(new 
TableNameSegment(43, 49, new IdentifierValue("t_order"))));
-        ExpressionSegment whereExpressionSegment = new ColumnSegment(57, 62, 
new IdentifierValue("status"));
-        oracleSubquerySelectStatement.setWhere(new WhereSegment(51, 73, 
whereExpressionSegment));
-        CommonTableExpressionSegment commonTableExpressionSegment = new 
CommonTableExpressionSegment(0, 1, new AliasSegment(0, 1, new 
IdentifierValue("submit_order")),
-                new SubquerySegment(22, 73, oracleSubquerySelectStatement, 
"SELECT order_id FROM t_order WHERE status = 'SUBMIT'"));
-        WithSegment withSegment = new WithSegment(0, 74, 
Collections.singleton(commonTableExpressionSegment));
-        OracleSelectStatement oracleSelectStatement = new 
OracleSelectStatement();
-        oracleSelectStatement.setWithSegment(withSegment);
-        oracleSelectStatement.setProjections(new ProjectionsSegment(0, 0));
-        SubquerySegment subquerySegment = new SubquerySegment(0, 74, 
oracleSelectStatement, "WITH submit_order AS (SELECT order_id FROM t_order 
WHERE status = 'SUBMIT')");
-        SQLStatementBinderContext sqlStatementBinderContext = new 
SQLStatementBinderContext(
-                createMetaData(), DefaultDatabase.LOGIC_NAME, 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), 
Collections.emptySet());
-        Map<String, TableSegmentBinderContext> outerTableBinderContexts = new 
LinkedHashMap<>();
-        SubquerySegment actual = SubquerySegmentBinder.bind(subquerySegment, 
sqlStatementBinderContext, outerTableBinderContexts);
-        assertNotNull(actual.getSelect());
-        assertInstanceOf(OracleSelectStatement.class, actual.getSelect());
-        assertTrue(actual.getSelect().getWithSegment().isPresent());
-        
assertNotNull(actual.getSelect().getWithSegment().get().getCommonTableExpressions());
-        
assertThat(actual.getSelect().getWithSegment().get().getCommonTableExpressions().size(),
 is(1));
-        CommonTableExpressionSegment expressionSegment = 
actual.getSelect().getWithSegment().get().getCommonTableExpressions().iterator().next();
-        assertNotNull(expressionSegment.getSubquery().getSelect());
-        assertInstanceOf(OracleSelectStatement.class, 
expressionSegment.getSubquery().getSelect());
-        
assertTrue(expressionSegment.getSubquery().getSelect().getFrom().isPresent());
-        assertInstanceOf(SimpleTableSegment.class, 
expressionSegment.getSubquery().getSelect().getFrom().get());
-        assertThat(((SimpleTableSegment) 
expressionSegment.getSubquery().getSelect().getFrom().get()).getTableName().getIdentifier().getValue(),
 is("t_order"));
-        
assertNotNull(expressionSegment.getSubquery().getSelect().getProjections());
-        
assertNotNull(expressionSegment.getSubquery().getSelect().getProjections().getProjections());
-        
assertThat(expressionSegment.getSubquery().getSelect().getProjections().getProjections().size(),
 is(1));
-        ProjectionSegment column = 
expressionSegment.getSubquery().getSelect().getProjections().getProjections().iterator().next();
-        assertInstanceOf(ColumnProjectionSegment.class, column);
-        assertThat(((ColumnProjectionSegment) 
column).getColumn().getIdentifier().getValue(), is("order_id"));
-        assertNotNull(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo());
-        assertThat(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo().getOriginalColumn().getValue(), 
is("order_id"));
-        assertThat(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo().getOriginalTable().getValue(), 
is("t_order"));
-        assertThat(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo().getOriginalSchema().getValue(), 
is(DefaultDatabase.LOGIC_NAME));
-        assertThat(((ColumnProjectionSegment) 
column).getColumn().getColumnBoundInfo().getOriginalDatabase().getValue(), 
is(DefaultDatabase.LOGIC_NAME));
-        
assertTrue(expressionSegment.getSubquery().getSelect().getWhere().isPresent());
-        assertNotNull(((ColumnSegment) 
expressionSegment.getSubquery().getSelect().getWhere().get().getExpr()).getColumnBoundInfo());
-        assertThat(((ColumnSegment) 
expressionSegment.getSubquery().getSelect().getWhere().get().getExpr()).getColumnBoundInfo().getOriginalColumn().getValue(),
 is("status"));
-        assertThat(((ColumnSegment) 
expressionSegment.getSubquery().getSelect().getWhere().get().getExpr()).getColumnBoundInfo().getOriginalTable().getValue(),
 is("t_order"));
-        assertThat(((ColumnSegment) 
expressionSegment.getSubquery().getSelect().getWhere().get().getExpr()).getColumnBoundInfo().getOriginalSchema().getValue(),
 is(DefaultDatabase.LOGIC_NAME));
-        assertThat(((ColumnSegment) 
expressionSegment.getSubquery().getSelect().getWhere().get().getExpr()).getColumnBoundInfo().getOriginalDatabase().getValue(),
 is(DefaultDatabase.LOGIC_NAME));
-    }
-    
     private ShardingSphereMetaData createMetaData() {
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class, 
RETURNS_DEEP_STUBS);
         
when(schema.getTable("t_order").getColumnValues()).thenReturn(Arrays.asList(
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SelectStatementBinderTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SelectStatementBinderTest.java
index 461cb717d45..b18d7f05a09 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SelectStatementBinderTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SelectStatementBinderTest.java
@@ -18,19 +18,10 @@
 package org.apache.shardingsphere.infra.binder.engine.statement;
 
 import 
org.apache.shardingsphere.infra.binder.engine.statement.dml.SelectStatementBinder;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
@@ -44,17 +35,12 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLSelectStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.oracle.dml.OracleSelectStatement;
 import org.junit.jupiter.api.Test;
 
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -131,97 +117,4 @@ class SelectStatementBinderTest {
         
when(result.getDatabase(DefaultDatabase.LOGIC_NAME).getSchema(DefaultDatabase.LOGIC_NAME).containsTable("t_order")).thenReturn(true);
         return result;
     }
-    
-    @Test
-    void assertBindOracleWithClause() {
-        String sql = "WITH user_temp AS (SELECT t.id, t.user_id, t.user_sn, 
t.user_no FROM t_user t), "
-                + "product1_temp AS (SELECT * FROM (SELECT t.name, t.detail 
FROM t_order_product1 t, user_temp WHERE t.user_sn = user_temp.user_sn) WHERE 
ROWNUM = 1), "
-                + "product2_temp AS (SELECT * FROM (SELECT t.sub_product_url 
FROM t_order_product2 t, user_temp WHERE t.user_no = user_temp.user_no) WHERE 
ROWNUM = 1), "
-                + "item_temp AS (SELECT COUNT(item.id) n FROM t_order_item 
item, user_temp WHERE item.user_id = user_temp.user_id), "
-                + "item_ext_temp AS (SELECT * FROM (SELECT c.item_order_url 
FROM t_order_item_ext c, t_store r, user_temp WHERE c.item_no = r.item_no AND 
c.status = 1 "
-                + "OR ((SELECT * FROM item_temp) >= 1) AND r.user_rn = 
user_temp.id AND r.store_no = 's1234') WHERE ROWNUM = 1) "
-                + "SELECT product1_temp.name, product1_temp.detail, 
product2_temp.sub_product_url, item_ext_temp.item_order_url FROM product1_temp, 
product2_temp, item_ext_temp";
-        ResourceMetaData resourceMetaData = new 
ResourceMetaData(Collections.emptyMap());
-        RuleMetaData ruleMetaData = new RuleMetaData(Collections.emptyList());
-        DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "Oracle");
-        ShardingSphereDatabase database = new 
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, databaseType, 
resourceMetaData, ruleMetaData, buildSchemas());
-        SQLStatementParserEngine parserEngine = new 
SQLStatementParserEngine(databaseType, new CacheOption(2000, 65535L), new 
CacheOption(128, 1024L));
-        ShardingSphereMetaData metaData =
-                new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
database), resourceMetaData, ruleMetaData, new ConfigurationProperties(new 
Properties()));
-        SelectStatement selectStatement = (SelectStatement) 
parserEngine.parse(sql, false);
-        SelectStatement actual = new 
SelectStatementBinder().bind(selectStatement, new 
SQLStatementBinderContext(selectStatement, metaData, 
DefaultDatabase.LOGIC_NAME));
-        assertThat(actual, not(selectStatement));
-        assertThat(actual, instanceOf(OracleSelectStatement.class));
-        assertTrue(actual.getWithSegment().isPresent());
-        
assertThat(actual.getWithSegment().get().getCommonTableExpressions().size(), 
is(5));
-    }
-    
-    @Test
-    void assertBindOracleWithClauseWhenSelectContainsUnionAll() {
-        String sql = "WITH cte AS \n"
-                + "    (SELECT * FROM t_order o LEFT JOIN t_order_item i ON 
o.order_id = i.order_id\n"
-                + "    WHERE o.order_id = ?\n"
-                + "    UNION ALL \n"
-                + "    SELECT * FROM \n"
-                + "        (SELECT *\n"
-                + "        FROM t_order o\n"
-                + "        INNER JOIN t_order_item i ON o.order_id = 
i.order_id\n"
-                + "        ) tt\n"
-                + "        WHERE ROWNUM = 1)\n"
-                + "SELECT * FROM cte\n"
-                + "UNION ALL SELECT * FROM cte\n"
-                + "UNION ALL SELECT * FROM cte WHERE cte.order_id = ?";
-        ResourceMetaData resourceMetaData = new 
ResourceMetaData(Collections.emptyMap());
-        RuleMetaData ruleMetaData = new RuleMetaData(Collections.emptyList());
-        DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "Oracle");
-        ShardingSphereDatabase database = new 
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, databaseType, 
resourceMetaData, ruleMetaData, buildSchemas());
-        SQLStatementParserEngine parserEngine = new 
SQLStatementParserEngine(databaseType, new CacheOption(2000, 65535L), new 
CacheOption(128, 1024L));
-        ShardingSphereMetaData metaData =
-                new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
database), resourceMetaData, ruleMetaData, new ConfigurationProperties(new 
Properties()));
-        SelectStatement selectStatement = (SelectStatement) 
parserEngine.parse(sql, false);
-        SelectStatement actual = new 
SelectStatementBinder().bind(selectStatement, new 
SQLStatementBinderContext(selectStatement, metaData, 
DefaultDatabase.LOGIC_NAME));
-        assertThat(actual, not(selectStatement));
-        assertThat(actual, instanceOf(OracleSelectStatement.class));
-        assertTrue(actual.getWithSegment().isPresent());
-        
assertThat(actual.getWithSegment().get().getCommonTableExpressions().size(), 
is(1));
-    }
-    
-    private Map<String, ShardingSphereSchema> buildSchemas() {
-        Map<String, ShardingSphereTable> tables = new HashMap<>(6, 1F);
-        tables.put("t_order", new ShardingSphereTable("t_order", Arrays.asList(
-                new ShardingSphereColumn("order_id", Types.INTEGER, true, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("status", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("merchant_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("remark", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("creation_date", Types.DATE, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_order_item", new ShardingSphereTable("t_order_item", 
Arrays.asList(
-                new ShardingSphereColumn("item_id", Types.BIGINT, true, false, 
false, true, false, false),
-                new ShardingSphereColumn("order_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("product_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("quantity", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("creation_date", Types.DATE, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_user", new ShardingSphereTable("t_user", Arrays.asList(
-                new ShardingSphereColumn("id", Types.INTEGER, true, false, 
false, true, false, false),
-                new ShardingSphereColumn("user_id", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_sn", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_no", Types.VARCHAR, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_order_product1", new 
ShardingSphereTable("t_order_product1", Arrays.asList(
-                new ShardingSphereColumn("name", Types.VARCHAR, false, false, 
false, true, false, false),
-                new ShardingSphereColumn("detail", Types.INTEGER, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_sn", Types.INTEGER, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_order_product2", new 
ShardingSphereTable("t_order_product2", Arrays.asList(
-                new ShardingSphereColumn("user_no", Types.VARCHAR, true, 
false, false, true, false, false),
-                new ShardingSphereColumn("sub_product_url", Types.VARCHAR, 
true, false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_order_item_ext", new 
ShardingSphereTable("t_order_item_ext", Arrays.asList(
-                new ShardingSphereColumn("item_order_url", Types.VARCHAR, 
false, false, false, true, false, false),
-                new ShardingSphereColumn("item_no", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("status", Types.INTEGER, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        tables.put("t_store", new ShardingSphereTable("t_store", Arrays.asList(
-                new ShardingSphereColumn("item_no", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("user_rn", Types.VARCHAR, false, 
false, false, true, false, false),
-                new ShardingSphereColumn("store_no", Types.VARCHAR, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        return Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new 
ShardingSphereSchema(tables, Collections.emptyMap()));
-    }
 }

Reply via email to