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 2d0133d  move remaining sql node convert unit test to parameterized 
unit test (#12991)
2d0133d is described below

commit 2d0133d304ad78edc2aa26280c44770bd1c8e845
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Oct 11 20:29:53 2021 +0800

    move remaining sql node convert unit test to parameterized unit test 
(#12991)
    
    * move remaining sql node convert unit test to parameterized unit test
    
    * refactor convert
---
 .../impl/BinaryOperationExpressionConverter.java   |   6 +
 .../impl/ExpressionProjectionConverter.java        |   7 +-
 .../statement/SelectStatementConverter.java        |  30 ++--
 .../statement/SelectStatementConverterTest.java    | 187 ---------------------
 .../test/resources/converter/supported/select.xml  |  20 ++-
 5 files changed, 39 insertions(+), 211 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
index 41f72a2..7590bc4 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
@@ -41,11 +41,17 @@ public final class BinaryOperationExpressionConverter 
implements SQLSegmentConve
     
     static {
         register(SqlStdOperatorTable.EQUALS);
+        register(SqlStdOperatorTable.NOT_EQUALS);
         register(SqlStdOperatorTable.GREATER_THAN);
         register(SqlStdOperatorTable.GREATER_THAN_OR_EQUAL);
         register(SqlStdOperatorTable.LESS_THAN);
         register(SqlStdOperatorTable.LESS_THAN_OR_EQUAL);
+        register(SqlStdOperatorTable.OR);
         register(SqlStdOperatorTable.AND);
+        register(SqlStdOperatorTable.PLUS);
+        register(SqlStdOperatorTable.MINUS);
+        register(SqlStdOperatorTable.MULTIPLY);
+        register(SqlStdOperatorTable.DIVIDE);
     }
     
     private static void register(final SqlBinaryOperator sqlBinaryOperator) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
index 3c986ab..ddd768d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/segment/projection/impl/ExpressionProjectionConverter.java
@@ -17,10 +17,9 @@
 
 package 
org.apache.shardingsphere.infra.optimize.converter.segment.projection.impl;
 
-import org.apache.calcite.sql.SqlCharStringLiteral;
 import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.infra.optimize.converter.segment.SQLSegmentConverter;
+import 
org.apache.shardingsphere.infra.optimize.converter.segment.expression.ExpressionConverter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
 
 import java.util.Optional;
@@ -32,8 +31,6 @@ public final class ExpressionProjectionConverter implements 
SQLSegmentConverter<
     
     @Override
     public Optional<SqlNode> convert(final ExpressionProjectionSegment 
segment) {
-        // TODO expression has not been parsed now.
-        String expression = segment.getText();
-        return Optional.of(SqlCharStringLiteral.createCharString(expression, 
SqlParserPos.ZERO));
+        return null == segment ? Optional.empty() : new 
ExpressionConverter().convert(segment.getExpr());
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
index 51253d7..799974f 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverter.java
@@ -17,9 +17,9 @@
 
 package org.apache.shardingsphere.infra.optimize.converter.statement;
 
-import com.google.common.base.Preconditions;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
+import org.apache.calcite.sql.SqlOrderBy;
 import org.apache.calcite.sql.SqlSelect;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.infra.optimize.converter.segment.from.TableConverter;
@@ -44,18 +44,22 @@ public final class SelectStatementConverter implements 
SQLStatementConverter<Sel
     
     @Override
     public SqlNode convert(final SelectStatement selectStatement) {
-        Optional<SqlNodeList> distinct = new 
DistinctConverter().convert(selectStatement.getProjections());
-        Optional<SqlNodeList> projections = new 
ProjectionsConverter().convert(selectStatement.getProjections());
-        Preconditions.checkState(projections.isPresent());
-        Optional<SqlNode> from = new 
TableConverter().convert(selectStatement.getFrom());
-        Optional<SqlNode> where = new 
WhereConverter().convert(selectStatement.getWhere().orElse(null));
-        Optional<SqlNodeList> groupBy = new 
GroupByConverter().convert(selectStatement.getGroupBy().orElse(null));
-        Optional<SqlNode> having = new 
HavingConverter().convert(selectStatement.getHaving().orElse(null));
-        Optional<SqlNodeList> orderBy = new 
OrderByConverter().convert(selectStatement.getOrderBy().orElse(null));
+        SqlNodeList distinct = new 
DistinctConverter().convert(selectStatement.getProjections()).orElse(null);
+        SqlNodeList projection = new 
ProjectionsConverter().convert(selectStatement.getProjections()).orElseThrow(IllegalStateException::new);
+        SqlNode from = new 
TableConverter().convert(selectStatement.getFrom()).orElse(null);
+        SqlNode where = selectStatement.getWhere().flatMap(optional -> new 
WhereConverter().convert(optional)).orElse(null);
+        SqlNodeList groupBy = selectStatement.getGroupBy().flatMap(optional -> 
new GroupByConverter().convert(optional)).orElse(null);
+        SqlNode having = selectStatement.getHaving().flatMap(optional -> new 
HavingConverter().convert(optional)).orElse(null);
+        SqlNodeList orderBy = selectStatement.getOrderBy().flatMap(optional -> 
new OrderByConverter().convert(optional)).orElse(SqlNodeList.EMPTY);
         Optional<LimitSegment> limit = 
SelectStatementHandler.getLimitSegment(selectStatement);
-        Optional<SqlNode> offset = new 
OffsetConverter().convert(limit.orElse(null));
-        Optional<SqlNode> rowCount = new 
RowCountConverter().convert(limit.orElse(null));
-        return new SqlSelect(SqlParserPos.ZERO, distinct.orElse(null), 
projections.get(), from.orElse(null), where.orElse(null), groupBy.orElse(null),
-                having.orElse(null), SqlNodeList.EMPTY, orderBy.orElse(null), 
offset.orElse(null), rowCount.orElse(null), SqlNodeList.EMPTY);
+        SqlNode offset = limit.flatMap(optional -> new 
OffsetConverter().convert(optional)).orElse(null);
+        SqlNode rowCount = limit.flatMap(optional -> new 
RowCountConverter().convert(optional)).orElse(null);
+        SqlSelect sqlSelect = new SqlSelect(SqlParserPos.ZERO, distinct, 
projection, from,
+                where, groupBy, having, SqlNodeList.EMPTY, null, null, null, 
SqlNodeList.EMPTY);
+        return containsOrderBy(orderBy, offset, rowCount) ? new 
SqlOrderBy(SqlParserPos.ZERO, sqlSelect, orderBy, offset, rowCount) : sqlSelect;
+    }
+    
+    private boolean containsOrderBy(final SqlNodeList orderBy, final SqlNode 
offset, final SqlNode rowCount) {
+        return (null != orderBy && !orderBy.isEmpty()) || null != offset || 
null != rowCount;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
deleted file mode 100644
index 2f915a6..0000000
--- 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/java/org/apache/shardingsphere/infra/optimize/converter/statement/SelectStatementConverterTest.java
+++ /dev/null
@@ -1,187 +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.optimize.converter.statement;
-
-import lombok.SneakyThrows;
-import org.apache.calcite.config.Lex;
-import org.apache.calcite.sql.SqlJoin;
-import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlSelect;
-import org.apache.calcite.sql.parser.SqlParseException;
-import org.apache.calcite.sql.parser.SqlParser;
-import org.apache.calcite.sql.parser.SqlParser.Config;
-import org.apache.calcite.sql.validate.SqlConformanceEnum;
-import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.optimize.converter.SQLNodeConvertEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-
-public final class SelectStatementConverterTest {
-    
-    private ShardingSphereSQLParserEngine sqlStatementParserEngine;
-    
-    @Before
-    public void init() {
-        sqlStatementParserEngine = new 
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new 
MySQLDatabaseType()), new ConfigurationProperties(new Properties()));
-    }
-    
-    @Test
-    public void assertConvertSimpleSelect() {
-        String sql = "select order_id, user_id from t_order";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNull(sqlSelect.getWhere());
-        assertNull(sqlSelect.getOffset());
-        assertNull(sqlSelect.getFetch());
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertLimit() {
-        String sql = "select order_id, user_id from t_order limit 1, 2";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNull(sqlSelect.getWhere());
-        assertNotNull(sqlSelect.getOffset());
-        assertNotNull(sqlSelect.getFetch());
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertLimitWithRowCountOnly() {
-        String sql = "select order_id, user_id from t_order limit 2";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNull(sqlSelect.getWhere());
-        assertNull(sqlSelect.getOffset());
-        assertNotNull(sqlSelect.getFetch());
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertWhere() {
-        String sql = "select order_id, user_id from t_order where order_id = 
10";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNotNull(sqlSelect.getWhere());
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertWhereAndGroupBy() {
-        String sql = "select order_id, user_id from t_order where order_id = 
10 group by order_id";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNotNull(sqlSelect.getWhere());
-        assertThat(sqlSelect.getGroup().size(), is(1));
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertWhereAndOrderBy() {
-        String sql = "select order_id, user_id from t_order where user_id = 10 
order by order_id desc";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getSelectList().size(), is(2));
-        assertNotNull(sqlSelect.getWhere());
-        assertThat(sqlSelect.getOrderList().size(), is(1));
-        SqlNode calciteSqlNode = parse(sql, new MySQLDatabaseType());
-        assertNotNull(calciteSqlNode);
-        assertThat(sqlNode.toString(), is(calciteSqlNode.toString()));
-    }
-    
-    @Test
-    public void assertConvertInnerJoin() {
-        String sql = "select 10 + 30, o1.order_id + 10, o1.order_id, 
o1.user_id, o2.status from t_order o1 join t_order_item o2 on "
-                + "o1.order_id = o2.order_id where o1.status='FINISHED' and 
o2.order_item_id > 1024 and 1=1 order by "
-                + "o1.order_id desc";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        assertThat(((JoinTableSegment) ((MySQLSelectStatement) 
sqlStatement).getFrom()).getJoinType(), is("INNER"));
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        SqlSelect sqlSelect = (SqlSelect) sqlNode;
-        assertThat(sqlSelect.getFrom(), instanceOf(SqlJoin.class));
-        assertThat(sqlSelect.getOrderList().size(), is(1));
-    }
-    
-    @Test
-    public void assertConvertLeftOuterJoin() {
-        String sql = "select 10 + 30, o1.order_id + 10, o1.order_id, 
o1.user_id, o2.status from t_order o1 left outer join t_order_item o2 on "
-                + "o1.order_id = o2.order_id where o1.status='FINISHED' and 
o2.order_item_id > 1024 and 1=1 order by "
-                + "o1.order_id desc";
-        SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
-        SqlNode sqlNode = SQLNodeConvertEngine.convert(sqlStatement);
-        assertThat(sqlNode, instanceOf(SqlSelect.class));
-        // TODO outer join is not supported by parser of ShardingSphere 
-    }
-    
-    @SneakyThrows(SqlParseException.class)
-    private SqlNode parse(final String sql, final DatabaseType databaseType) {
-        return SqlParser.create(sql, 
Config.DEFAULT.withConformance(getSQLConformance(databaseType)).withLex(getLex(databaseType))).parseQuery();
-    }
-    
-    private Lex getLex(final DatabaseType databaseType) {
-        return databaseType instanceof MySQLDatabaseType ? Lex.MYSQL : 
Lex.ORACLE;
-    }
-    
-    private SqlConformanceEnum getSQLConformance(final DatabaseType 
databaseType) {
-        return databaseType instanceof MySQLDatabaseType ? 
SqlConformanceEnum.MYSQL_5 : SqlConformanceEnum.DEFAULT;
-    }
-}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/converter/supported/select.xml
 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/converter/supported/select.xml
index f7787ab..365fa25 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/converter/supported/select.xml
+++ 
b/shardingsphere-infra/shardingsphere-infra-optimize/src/test/resources/converter/supported/select.xml
@@ -17,10 +17,18 @@
   -->
 
 <sql-cases>
-    <sql-case id="select_with_join_table_subquery" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id, u.user_id FROM 
t_order_federate, (SELECT * FROM t_user_info) as u WHERE 
t_order_federate.user_id = u.user_id" db-types="MySQL"/>
-    <sql-case id="select_with_projection_subquery" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id, (SELECT COUNT(*) FROM 
t_user_info) FROM t_order_federate" db-types="MySQL"/>
-    <sql-case id="select_with_in_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
user_id IN (SELECT * FROM t_user_info)" db-types="MySQL"/>
-    <sql-case id="select_with_between_and_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
user_id BETWEEN (SELECT user_id FROM t_user_info WHERE information = 'before') 
AND (SELECT user_id FROM t_user_info WHERE information = 'after')" 
db-types="MySQL"/>
-    <sql-case id="select_with_exist_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id = 
t_user_info.user_id)" db-types="MySQL"/>
-    <sql-case id="select_with_not_exist_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
NOT EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id = 
t_user_info.user_id)" db-types="MySQL"/>
+    <sql-case id="select_with_join_table_subquery" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id, u.user_id FROM 
t_order_federate, (SELECT * FROM t_user_info) as u WHERE 
t_order_federate.user_id = u.user_id" db-types="MySQL" />
+    <sql-case id="select_with_projection_subquery" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id, (SELECT COUNT(*) FROM 
t_user_info) FROM t_order_federate" db-types="MySQL" />
+    <sql-case id="select_with_in_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
user_id IN (SELECT * FROM t_user_info)" db-types="MySQL" />
+    <sql-case id="select_with_between_and_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
user_id BETWEEN (SELECT user_id FROM t_user_info WHERE information = 'before') 
AND (SELECT user_id FROM t_user_info WHERE information = 'after')" 
db-types="MySQL" />
+    <sql-case id="select_with_exist_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id = 
t_user_info.user_id)" db-types="MySQL" />
+    <sql-case id="select_with_not_exist_subquery_condition" value="SELECT 
t_order_federate.order_id, t_order_federate.user_id FROM t_order_federate WHERE 
NOT EXISTS (SELECT * FROM t_user_info WHERE t_order_federate.user_id = 
t_user_info.user_id)" db-types="MySQL" />
+    <sql-case id="select_with_simple_table" value="SELECT order_id, user_id 
FROM t_order" db-types="MySQL" />
+    <sql-case id="select_with_limit_offset_and_row_count" value="SELECT 
order_id, user_id FROM t_order LIMIT 1, 2" db-types="MySQL" />
+    <sql-case id="select_with_limit_row_count" value="SELECT order_id, user_id 
FROM t_order LIMIT 2" db-types="MySQL" />
+    <sql-case id="select_with_where_condition" value="SELECT order_id, user_id 
FROM t_order WHERE order_id = 10" db-types="MySQL" />
+    <sql-case id="select_with_where_condition_and_group_by" value="SELECT 
order_id, user_id FROM t_order WHERE order_id = 10 GROUP BY order_id" 
db-types="MySQL" />
+    <sql-case id="select_with_where_condition_and_order_by" value="SELECT 
order_id, user_id FROM t_order WHERE user_id = 10 ORDER BY order_id DESC" 
db-types="MySQL" />
+    <sql-case id="select_with_inner_join_and_order_by" value="SELECT 10 + 30, 
o1.order_id + 10, o1.order_id, o1.user_id, o2.status FROM t_order o1 JOIN 
t_order_item o2 ON o1.order_id = o2.order_id WHERE o1.status='FINISHED' AND 
o2.order_item_id > 1024 AND 1=1 ORDER BY o1.order_id DESC" db-types="MySQL" />
+    <sql-case id="select_with_left_outer_join_and_order_by" value="SELECT 10 + 
30, o1.order_id + 10, o1.order_id, o1.user_id, o2.status FROM t_order o1 LEFT 
OUTER JOIN t_order_item o2 ON o1.order_id = o2.order_id WHERE 
o1.status='FINISHED' AND o2.order_item_id > 1024 AND 1=1 ORDER BY o1.order_id 
DESC" db-types="MySQL" />
 </sql-cases>

Reply via email to