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 970959d96ee support parse index hint. (#29314)
970959d96ee is described below
commit 970959d96eeecf0a544993c380830ca2601ab860
Author: Chuxin Chen <[email protected]>
AuthorDate: Thu Dec 7 18:44:45 2023 +0800
support parse index hint. (#29314)
* support parse index hint.
* support parse index hint.
---
.../visitor/statement/MySQLStatementVisitor.java | 8 +++--
.../statement/type/MySQLDMLStatementVisitor.java | 32 ++++++++++++++++++++
.../segment/generic/table/IndexHintSegment.java | 31 ++++++++++++-------
.../segment/generic/table/SimpleTableSegment.java | 4 +++
.../asserts/segment/table/TableAssert.java | 35 ++++++++++++++++++++--
...SimpleTable.java => ExpectedHintIndexName.java} | 17 ++---------
...ctedSimpleTable.java => ExpectedIndexHint.java} | 16 +++++-----
.../segment/impl/table/ExpectedSimpleTable.java | 5 ++++
.../parser/src/main/resources/case/dml/select.xml | 6 +++-
9 files changed, 116 insertions(+), 38 deletions(-)
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 821b8c117dc..de19a3cb4d0 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
@@ -177,7 +177,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
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.dialect.segment.mysql.match.MatchAgainstExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.RowExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.UnaryOperationExpression;
@@ -217,13 +216,14 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseS
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WindowSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.IndexHintSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
import
org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
@@ -233,6 +233,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.Number
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.OtherLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.StringLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.parametermarker.ParameterMarkerValue;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.mysql.match.MatchAgainstExpression;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLDeleteStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
@@ -1852,6 +1853,9 @@ public abstract class MySQLStatementVisitor extends
MySQLStatementBaseVisitor<AS
if (null != ctx.alias()) {
result.setAlias((AliasSegment) visit(ctx.alias()));
}
+ if (null != ctx.indexHintList()) {
+ ctx.indexHintList().indexHint().forEach(each ->
result.getIndexHintSegments().add((IndexHintSegment) visit(each)));
+ }
return result;
}
return visit(ctx.tableReferences());
diff --git
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
index 010d3228a48..189e2b515ea 100644
---
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
+++
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
@@ -23,11 +23,13 @@ import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CallCon
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DoStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.HandlerStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ImportStatementContext;
+import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IndexHintContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LoadDataStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LoadStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LoadXmlStatementContext;
import
org.apache.shardingsphere.sql.parser.mysql.visitor.statement.MySQLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.IndexHintSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLCallStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLDoStatement;
@@ -37,6 +39,8 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQ
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLLoadXMLStatement;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.List;
/**
@@ -82,4 +86,32 @@ public final class MySQLDMLStatementVisitor extends
MySQLStatementVisitor implem
public ASTNode visitLoadXmlStatement(final LoadXmlStatementContext ctx) {
return new MySQLLoadXMLStatement((SimpleTableSegment)
visit(ctx.tableName()));
}
+
+ @Override
+ public ASTNode visitIndexHint(final IndexHintContext ctx) {
+ Collection<String> indexNames = new LinkedList<>();
+ ctx.indexName().forEach(each -> indexNames.add(each.getText()));
+ String useType;
+ if (null != ctx.USE()) {
+ useType = ctx.USE().getText();
+ } else if (null != ctx.IGNORE()) {
+ useType = ctx.IGNORE().getText();
+ } else {
+ useType = ctx.FORCE().getText();
+ }
+ IndexHintSegment result = new
IndexHintSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(),
indexNames, useType,
+ null == ctx.INDEX() ? ctx.KEY().getText() :
ctx.INDEX().getText(), getOriginalText(ctx));
+ if (null != ctx.FOR()) {
+ String hintScope;
+ if (null != ctx.JOIN()) {
+ hintScope = "JOIN";
+ } else if (null != ctx.ORDER()) {
+ hintScope = "ORDER BY";
+ } else {
+ hintScope = "GROUP BY";
+ }
+ result.setHintScope(hintScope);
+ }
+ return result;
+ }
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/IndexHintSegment.java
similarity index 58%
copy from
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
copy to
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/IndexHintSegment.java
index 6446c6e1a59..053b6a991d0 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/IndexHintSegment.java
@@ -15,25 +15,34 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table;
+package org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
/**
- * Expected simple table.
+ * Index hint segment.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public final class ExpectedSimpleTable extends
AbstractExpectedIdentifierSQLSegment {
+public final class IndexHintSegment implements SQLSegment {
- @XmlAttribute
- private String alias;
+ private final int startIndex;
- @XmlElement
- private ExpectedOwner owner;
+ private final int stopIndex;
+
+ private final Collection<String> indexNames;
+
+ private final String useType;
+
+ private final String indexType;
+
+ @Setter
+ private String hintScope;
+
+ private final String originText;
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
index fa16925e53e..1d540884b8f 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/table/SimpleTableSegment.java
@@ -26,6 +26,8 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegm
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.PivotSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.Optional;
/**
@@ -43,6 +45,8 @@ public final class SimpleTableSegment implements
TableSegment, OwnerAvailable {
@Setter
private AliasSegment alias;
+ private final Collection<IndexHintSegment> indexHintSegments = new
LinkedList<>();
+
@Setter
private PivotSegment pivot;
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/table/TableAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/table/TableAssert.java
index 9040d2ee9ee..5a414a5f231 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/table/TableAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/table/TableAssert.java
@@ -22,13 +22,14 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTableFunctionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.CollectionTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.FunctionTableSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.IndexHintSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTableFunctionSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
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;
@@ -39,13 +40,16 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.d
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedTableFunction;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedCollectionTable;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedFunctionTable;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedHintIndexName;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedIndexHint;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedJoinTable;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSubqueryTable;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedTable;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedFunctionTable;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
@@ -124,9 +128,36 @@ public final class TableAssert {
assertTrue(actual.getOwner().isPresent(),
assertContext.getText("Actual owner should exist."));
OwnerAssert.assertIs(assertContext, actual.getOwner().get(),
expected.getOwner());
}
+ if (!expected.getIndexHints().isEmpty()) {
+ assertFalse(actual.getIndexHintSegments().isEmpty());
+ assertIs(assertContext, actual.getIndexHintSegments(),
expected.getIndexHints());
+ }
SQLSegmentAssert.assertIs(assertContext, actual, expected);
}
+ private static void assertIs(final SQLCaseAssertContext assertContext,
final Collection<IndexHintSegment> actual, final Collection<ExpectedIndexHint>
expected) {
+ assertThat(expected.size(), is(actual.size()));
+ Iterator<ExpectedIndexHint> expectedIndexHintIterator =
expected.iterator();
+ Iterator<IndexHintSegment> actualIndexHintIterator = actual.iterator();
+ while (expectedIndexHintIterator.hasNext()) {
+ ExpectedIndexHint expectedIndexHint =
expectedIndexHintIterator.next();
+ IndexHintSegment actualIndexHint = actualIndexHintIterator.next();
+ assertIs(assertContext, actualIndexHint, expectedIndexHint);
+ }
+ }
+
+ private static void assertIs(final SQLCaseAssertContext assertContext,
final IndexHintSegment actual, final ExpectedIndexHint expected) {
+ assertThat(expected.getHintIndexNames().size(),
is(actual.getIndexNames().size()));
+ Iterator<ExpectedHintIndexName> expectedIndexNameIterator =
expected.getHintIndexNames().iterator();
+ Iterator<String> actualIndexNameIterator =
actual.getIndexNames().iterator();
+ while (expectedIndexNameIterator.hasNext()) {
+ ExpectedHintIndexName expectedIndexName =
expectedIndexNameIterator.next();
+ String actualIndexName = actualIndexNameIterator.next();
+ assertThat(assertContext.getText("Index hint name assertion error:
"), actualIndexName, is(expectedIndexName.getName()));
+ }
+ assertThat(assertContext.getText("Index hint origin text assertion
error: "), actual.getOriginText(), is(expected.getOriginText()));
+ }
+
/**
* Assert subquery expression.
*
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedHintIndexName.java
similarity index 73%
copy from
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
copy to
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedHintIndexName.java
index 6446c6e1a59..62d709f2e82 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedHintIndexName.java
@@ -17,23 +17,10 @@
package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table;
-import lombok.Getter;
-import lombok.Setter;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-
/**
- * Expected simple table.
+ * Expected hint index name.
*/
-@Getter
-@Setter
-public final class ExpectedSimpleTable extends
AbstractExpectedIdentifierSQLSegment {
-
- @XmlAttribute
- private String alias;
-
- @XmlElement
- private ExpectedOwner owner;
+public final class ExpectedHintIndexName extends
AbstractExpectedIdentifierSQLSegment {
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedIndexHint.java
similarity index 72%
copy from
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
copy to
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedIndexHint.java
index 6446c6e1a59..5d2d810226d 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedIndexHint.java
@@ -19,21 +19,23 @@ package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
import lombok.Getter;
import lombok.Setter;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedDelimiterSQLSegment;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
+import java.util.LinkedList;
/**
- * Expected simple table.
+ * Expected index hint.
*/
@Getter
@Setter
-public final class ExpectedSimpleTable extends
AbstractExpectedIdentifierSQLSegment {
+public final class ExpectedIndexHint extends
AbstractExpectedDelimiterSQLSegment {
- @XmlAttribute
- private String alias;
+ @XmlElement(name = "hint-index-name")
+ private final Collection<ExpectedHintIndexName> hintIndexNames = new
LinkedList<>();
- @XmlElement
- private ExpectedOwner owner;
+ @XmlAttribute(name = "origin-text")
+ private String originText;
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
index 6446c6e1a59..7354ce47e0d 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/table/ExpectedSimpleTable.java
@@ -23,6 +23,8 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
+import java.util.Collection;
+import java.util.LinkedList;
/**
* Expected simple table.
@@ -36,4 +38,7 @@ public final class ExpectedSimpleTable extends
AbstractExpectedIdentifierSQLSegm
@XmlElement
private ExpectedOwner owner;
+
+ @XmlElement(name = "index-hint")
+ private final Collection<ExpectedIndexHint> indexHints = new
LinkedList<>();
}
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml
b/test/it/parser/src/main/resources/case/dml/select.xml
index 2e4c1d956f7..4068b52514b 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -2521,7 +2521,11 @@
<from>
<join-table join-type="INNER">
<left>
- <simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
+ <simple-table name="t_order" alias="o" start-index="16"
stop-index="24">
+ <index-hint origin-text="FORCE INDEX(order_index)"
start-index="26" stop-index="49">
+ <hint-index-name name="order_index"
start-index="38" stop-index="48"/>
+ </index-hint>
+ </simple-table>
</left>
<right>
<simple-table name="t_order_item" alias="i"
start-index="56" stop-index="69" />