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

wuweijie 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 8a8fbebb382 Fix values statement ClassCastException (#26686)
8a8fbebb382 is described below

commit 8a8fbebb382a152bc11bc6f84c20b0c31d1c7062
Author: niu niu <[email protected]>
AuthorDate: Thu Jul 6 21:33:40 2023 +0800

    Fix values statement ClassCastException (#26686)
    
    * Fix values statement ClassCastException
    
    * Fix code
    
    * Add values statement E2E
    
    * Add parse values statement
    
    * Add test sql
    
    * Add values statement e2e comment
    
    * Fix comment
---
 .../visitor/statement/MySQLStatementVisitor.java   |  23 ++++
 .../common/segment/dml/expr/ValuesExpression.java  |  39 +++++++
 .../dql/dql-integration-select-expression.xml      |  10 ++
 .../segment/expression/ExpressionAssert.java       |  21 ++++
 .../jaxb/segment/impl/expr/ExpectedExpression.java |   3 +
 .../impl/expr/ExpectedValuesExpression.java        |  36 ++++++
 .../parser/src/main/resources/case/dml/values.xml  | 123 +++++++++++++++++++++
 .../main/resources/sql/supported/dml/values.xml    |  23 ++++
 8 files changed, 278 insertions(+)

diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index 3c7ca700856..8fe5fcd4f2b 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -103,10 +103,12 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.QueryEx
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.QueryExpressionParensContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.QueryPrimaryContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.QuerySpecificationContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TableValueConstructorContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.RegularFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ReplaceContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ReplaceSelectClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ReplaceValuesClauseContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.RowConstructorListContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SchemaNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SelectContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SelectSpecificationContext;
@@ -171,6 +173,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Function
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ValuesExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
@@ -782,6 +785,26 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
         return result;
     }
     
+    @Override
+    public ASTNode visitTableValueConstructor(final 
TableValueConstructorContext ctx) {
+        MySQLSelectStatement result = new MySQLSelectStatement();
+        int startIndex = ctx.getStart().getStartIndex();
+        int stopIndex = ctx.getStop().getStopIndex();
+        ValuesExpression valuesExpression = new ValuesExpression(startIndex, 
stopIndex);
+        
valuesExpression.getRowConstructorList().addAll(createRowConstructorList(ctx.rowConstructorList()));
+        result.setProjections(new ProjectionsSegment(startIndex, stopIndex));
+        result.getProjections().getProjections().add(new 
ExpressionProjectionSegment(startIndex, stopIndex, getOriginalText(ctx), 
valuesExpression));
+        return result;
+    }
+    
+    private Collection<InsertValuesSegment> createRowConstructorList(final 
RowConstructorListContext ctx) {
+        Collection<InsertValuesSegment> result = new LinkedList<>();
+        for (AssignmentValuesContext each : ctx.assignmentValues()) {
+            result.add((InsertValuesSegment) visit(each));
+        }
+        return result;
+    }
+    
     @Override
     public ASTNode visitTableStatement(final TableStatementContext ctx) {
         MySQLSelectStatement result = new MySQLSelectStatement();
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
new file mode 100644
index 00000000000..5d9b7aeb51a
--- /dev/null
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/ValuesExpression.java
@@ -0,0 +1,39 @@
+/*
+ * 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.sql.parser.sql.common.segment.dml.expr;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+/**
+ * Values expression.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class ValuesExpression implements ExpressionSegment {
+    
+    private final int startIndex;
+    
+    private final int stopIndex;
+    
+    private final Collection<InsertValuesSegment> rowConstructorList = new 
LinkedList<>();
+}
diff --git 
a/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select-expression.xml
 
b/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select-expression.xml
index fd532489b0a..75c81459493 100644
--- 
a/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select-expression.xml
+++ 
b/test/e2e/sql/src/test/resources/cases/dql/dql-integration-select-expression.xml
@@ -117,4 +117,14 @@
     <test-case sql="SELECT n.nspname as &quot;Schema&quot;, c.relname as 
&quot;Name&quot;, CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' 
WHEN 'i' THEN 'index' WHEN 'I' THEN 'global partition index' WHEN 'S' THEN 
'sequence' WHEN 'L' THEN 'large sequence' WHEN 'f' THEN 'foreign table' WHEN 
'm' THEN 'materialized view'  WHEN 'e' THEN 'stream' WHEN 'o' THEN 'contview' 
END as &quot;Type&quot;, pg_catalog.pg_get_userbyid(c.relowner) as 
&quot;Owner&quot;, c.reloptions as &quot;Stora [...]
         <assertion expected-data-file="select_sys_data_for_og.xml" />
     </test-case>
+
+    <!-- // TODO Until test cases support enabling for specific database 
version. -->
+    <!--    <test-case sql="VALUES ROW(1,1)" db-types="MySQL" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,readwrite_splitting">-->
+    <!--        <assertion />-->
+    <!--    </test-case>-->
+
+    <!-- // TODO Until test cases support enabling for specific database 
version. -->
+    <!--    <test-case sql="VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER 
BY column_1 desc, column_0 desc limit ?" db-types="MySQL" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,readwrite_splitting">-->
+    <!--        <assertion parameters="10:int" />-->
+    <!--    </test-case>-->
 </integration-test-cases>
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
index a956b7918da..10fa5f77655 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpres
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.TypeCastExpression;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ValuesExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
@@ -45,6 +46,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAsse
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.generic.DataTypeAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.insert.InsertValuesClauseAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.owner.OwnerAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.projection.ProjectionAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.SelectStatementAssert;
@@ -59,6 +61,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedNotExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedTypeCastExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedVariableSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedValuesExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.complex.ExpectedCommonExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.simple.ExpectedLiteralExpression;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.simple.ExpectedParameterMarkerExpression;
@@ -70,8 +73,10 @@ import java.util.Iterator;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *  Expression assert.
@@ -372,6 +377,20 @@ public final class ExpressionAssert {
         assertThat(assertContext.getText("Actual variable is different with 
expected variable."), actual.getVariable(), is(expected.getVariable()));
     }
     
+    private static void assertValuesExpression(final SQLCaseAssertContext 
assertContext, final ValuesExpression actual, final ExpectedValuesExpression 
expected) {
+        if (null == expected) {
+            assertNull(actual, assertContext.getText("Variable segment should 
not exist."));
+            return;
+        }
+        assertNotNull(actual, assertContext.getText("Variable segment should 
exist."));
+        if (null == expected.getInsertValuesClause()) {
+            assertTrue(actual.getRowConstructorList().isEmpty(), "Values 
expression should not exist.");
+        } else {
+            assertFalse(actual.getRowConstructorList().isEmpty(), 
assertContext.getText("Values expression should exist."));
+            InsertValuesClauseAssert.assertIs(assertContext, 
actual.getRowConstructorList(), expected.getInsertValuesClause());
+        }
+    }
+    
     /**
      * Assert expression by actual expression segment class type.
      *
@@ -425,6 +444,8 @@ public final class ExpressionAssert {
             assertTypeCastExpression(assertContext, (TypeCastExpression) 
actual, expected.getTypeCastExpression());
         } else if (actual instanceof VariableSegment) {
             assertVariableSegment(assertContext, (VariableSegment) actual, 
expected.getVariableSegment());
+        } else if (actual instanceof ValuesExpression) {
+            assertValuesExpression(assertContext, (ValuesExpression) actual, 
expected.getValuesExpression());
         } else {
             throw new UnsupportedOperationException(String.format("Unsupported 
expression: %s", actual.getClass().getName()));
         }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedExpression.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedExpression.java
index 032c17e8192..c8b4cd6bf3e 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedExpression.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedExpression.java
@@ -95,4 +95,7 @@ public final class ExpectedExpression extends 
AbstractExpectedSQLSegment {
     
     @XmlElement(name = "variable-segment")
     private ExpectedVariableSegment variableSegment;
+    
+    @XmlElement(name = "values-expression")
+    private ExpectedValuesExpression valuesExpression;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedValuesExpression.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedValuesExpression.java
new file mode 100644
index 00000000000..7fbced828d6
--- /dev/null
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedValuesExpression.java
@@ -0,0 +1,36 @@
+/*
+ * 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.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr;
+
+import lombok.Getter;
+import lombok.Setter;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertValuesClause;
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Expected values expression.
+ */
+@Getter
+@Setter
+public final class ExpectedValuesExpression extends AbstractExpectedSQLSegment 
{
+    
+    @XmlElement(name = "values")
+    private ExpectedInsertValuesClause insertValuesClause;
+}
diff --git a/test/it/parser/src/main/resources/case/dml/values.xml 
b/test/it/parser/src/main/resources/case/dml/values.xml
new file mode 100644
index 00000000000..0d7b2e5d1cc
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/dml/values.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+
+<sql-parser-test-cases>
+    <select sql-case-id="values_with_row">
+        <projections start-index="0" stop-index="14">
+            <expression-projection text="values ROW(1,2)" start-index="0" 
stop-index="14">
+                <expr>
+                    <values-expression>
+                        <values>
+                            <value>
+                                <assignment-value>
+                                    <literal-expression value="1" 
start-index="11" stop-index="11" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="2" 
start-index="13" stop-index="13" />
+                                </assignment-value>
+                            </value>
+                        </values>
+                    </values-expression>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+
+    <select sql-case-id="values_with_order_limit">
+        <projections start-index="0" stop-index="41">
+            <expression-projection text="VALUES ROW(1,-2,3), ROW(5,7,9), 
ROW(4,6,8)" start-index="0" stop-index="41">
+                <expr>
+                    <values-expression>
+                        <values>
+                            <value>
+                                <assignment-value>
+                                    <literal-expression value="1" 
start-index="11" stop-index="11" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="-2" 
start-index="13" stop-index="14" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="3" 
start-index="16" stop-index="16" />
+                                </assignment-value>
+                            </value>
+                            <value>
+                                <assignment-value>
+                                    <literal-expression value="5" 
start-index="24" stop-index="24" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="7" 
start-index="26" stop-index="26" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="9" 
start-index="28" stop-index="28" />
+                                </assignment-value>
+                            </value>
+                            <value>
+                                <assignment-value>
+                                    <literal-expression value="4" 
start-index="36" stop-index="36" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="6" 
start-index="38" stop-index="38" />
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="8" 
start-index="40" stop-index="40" />
+                                </assignment-value>
+                            </value>
+                        </values>
+                    </values-expression>
+                </expr>
+            </expression-projection>
+        </projections>
+        <order-by>
+            <column-item name="column_1" order-direction="DESC" 
start-index="52" stop-index="59" />
+            <column-item name="column_0" order-direction="DESC" 
start-index="68" stop-index="75" />
+        </order-by>
+        <limit start-index="82" stop-index="89">
+            <row-count value="10" start-index="88" stop-index="89" />
+        </limit>
+    </select>
+
+    <select sql-case-id="values_with_select">
+        <projections start-index="0" stop-index="24">
+            <expression-projection text="values row((select 1), 2)" 
start-index="0" stop-index="24">
+                <expr>
+                    <values-expression>
+                        <values>
+                            <value>
+                                <assignment-value>
+                                    <subquery start-index="11" stop-index="20">
+                                        <select>
+                                            <projections start-index="19" 
stop-index="19">
+                                                <expression-projection 
text="1" start-index="19" stop-index="19">
+                                                    <literal-expression 
value="1" start-index="19" stop-index="19" />
+                                                </expression-projection>
+                                            </projections>
+                                        </select>
+                                    </subquery>
+                                </assignment-value>
+                                <assignment-value>
+                                    <literal-expression value="2" 
start-index="23" stop-index="23" />
+                                </assignment-value>
+                            </value>
+                        </values>
+                    </values-expression>
+                </expr>
+            </expression-projection>
+        </projections>
+    </select>
+</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/values.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/values.xml
new file mode 100644
index 00000000000..bb31b244693
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/dml/values.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<sql-cases>
+    <sql-case id="values_with_row" value="values ROW(1,2)" db-types="MySQL" />
+    <sql-case id="values_with_order_limit" value="VALUES ROW(1,-2,3), 
ROW(5,7,9), ROW(4,6,8) ORDER BY column_1 desc , column_0 desc limit 10" 
db-types="MySQL" />
+    <sql-case id="values_with_select" value="values row((select 1), 2)" 
db-types="MySQL" />
+</sql-cases>

Reply via email to