You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/04 02:46:01 UTC

[shardingsphere] branch master updated: Rename packages of parser it test (#22633)

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

sunnianjun 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 6d465724bd0 Rename packages of parser it test (#22633)
6d465724bd0 is described below

commit 6d465724bd04e5dd34fbbdc8f8515df05e5e2d5a
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Dec 4 10:45:52 2022 +0800

    Rename packages of parser it test (#22633)
---
 .../converter/SQLNodeConverterEngineIT.java        |   12 +-
 .../mysql/external/ExternalMySQLParserIT.java      |   41 -
 .../mysql/internal/InternalMySQLParserIT.java      |   39 -
 .../internal/InternalUnsupportedMySQLParserIT.java |   39 -
 .../it/mysql/external/ExternalMySQLParserIT.java   |   41 +
 .../it/mysql/internal/InternalMySQLParserIT.java   |   39 +
 .../internal/InternalUnsupportedMySQLParserIT.java |   39 +
 .../opengauss/InternalOpenGaussParserIT.java       |   39 -
 .../InternalUnsupportedOpenGaussParserIT.java      |   39 -
 .../it/opengauss/InternalOpenGaussParserIT.java    |   39 +
 .../InternalUnsupportedOpenGaussParserIT.java      |   39 +
 .../sql/parser/oracle/InternalOracleParserIT.java  |   39 -
 .../oracle/InternalUnsupportedOracleParserIT.java  |   39 -
 .../parser/it/oracle/InternalOracleParserIT.java   |   39 +
 .../oracle/InternalUnsupportedOracleParserIT.java  |   39 +
 .../external/ExternalPostgreSQLParserIT.java       |   41 -
 .../internal/InternalPostgreSQLParserIT.java       |   39 -
 .../InternalUnsupportedPostgreSQLParserIT.java     |   39 -
 .../external/ExternalPostgreSQLParserIT.java       |   41 +
 .../internal/InternalPostgreSQLParserIT.java       |   39 +
 .../InternalUnsupportedPostgreSQLParserIT.java     |   39 +
 .../sql/parser/sql92/InternalSQL92ParserIT.java    |   39 -
 .../sql92/InternalUnsupportedSQL92ParserIT.java    |   39 -
 .../sql/parser/it/sql92/InternalSQL92ParserIT.java |   39 +
 .../it/sql92/InternalUnsupportedSQL92ParserIT.java |   39 +
 .../sqlserver/InternalSQLServerParserIT.java       |   39 -
 .../InternalUnsupportedSQLServerParserIT.java      |   39 -
 .../it/sqlserver/InternalSQLServerParserIT.java    |   39 +
 .../InternalUnsupportedSQLServerParserIT.java      |   39 +
 .../sql/parser/external/ExternalSQLParserIT.java   |   62 +
 .../external/ExternalSQLParserTestParameter.java   |   42 +
 .../env/SQLParserExternalITEnvironment.java        |   74 +
 .../ExternalSQLParserTestParameterLoader.java      |  139 ++
 .../loader/strategy/TestParameterLoadStrategy.java |   37 +
 .../impl/GitHubTestParameterLoadStrategy.java      |   85 +
 .../impl/LocalFileTestParameterLoadStrategy.java   |   47 +
 .../loader/summary/AssertableFileSummary.java      |   35 +
 .../external/loader/summary/FileSummary.java       |   33 +
 .../external/result/SQLParseResultReporter.java    |   34 +
 .../result/SQLParseResultReporterCreator.java      |   34 +
 .../SQLParseResultReporterCreatorFactory.java      |   44 +
 .../result/type/csv/CsvSQLParseResultReporter.java |   60 +
 .../type/csv/CsvSQLParseResultReporterCreator.java |   37 +
 .../result/type/log/LogSQLParseResultReporter.java |   35 +
 .../type/log/LogSQLParseResultReporterCreator.java |   37 +
 .../sql/parser/internal/InternalSQLParserIT.java   |   86 +
 .../internal/InternalSQLParserTestParameter.java   |   41 +
 .../internal/InternalUnsupportedSQLParserIT.java   |   64 +
 .../internal/asserts/SQLCaseAssertContext.java     |   79 +
 .../internal/asserts/segment/SQLSegmentAssert.java |   57 +
 .../segment/assignment/AssignmentAssert.java       |   58 +
 .../segment/assignment/AssignmentValueAssert.java  |   66 +
 .../asserts/segment/charset/CharsetAssert.java     |   56 +
 .../asserts/segment/column/ColumnAssert.java       |   76 +
 .../segment/cursor/DirectionSegmentAssert.java     |   68 +
 .../asserts/segment/database/DatabaseAssert.java   |   45 +
 .../segment/definition/ColumnDefinitionAssert.java |   51 +
 .../segment/definition/ColumnPositionAssert.java   |   64 +
 .../definition/ConstraintDefinitionAssert.java     |   80 +
 .../asserts/segment/distsql/AlgorithmAssert.java   |   53 +
 .../segment/distsql/AutoTableRuleAssert.java       |   64 +
 .../asserts/segment/distsql/DataSourceAssert.java  |   68 +
 .../asserts/segment/distsql/DatabaseAssert.java    |   44 +
 .../asserts/segment/distsql/PropertiesAssert.java  |   54 +
 .../asserts/segment/distsql/PropertyAssert.java    |   53 +
 .../asserts/segment/distsql/SQLSegmentAssert.java  |   46 +
 .../asserts/segment/distsql/TableRuleAssert.java   |   73 +
 .../segment/distsql/rdl/AuditStrategyAssert.java   |   66 +
 .../segment/distsql/rdl/EncryptColumnAssert.java   |   58 +
 .../segment/distsql/rdl/EncryptRuleAssert.java     |   75 +
 .../distsql/rdl/ReadwriteSplittingRuleAssert.java  |   63 +
 .../segment/distsql/rdl/ShadowRuleAssert.java      |   81 +
 .../segment/distsql/rdl/ShardingAuditorAssert.java |   49 +
 .../rdl/ShardingTableReferenceRuleAssert.java      |   53 +
 .../segment/expression/ExpressionAssert.java       |  406 +++++
 .../asserts/segment/generic/DataTypeAssert.java    |   50 +
 .../segment/generic/GrantLevelSegmentAssert.java   |   53 +
 .../segment/groupby/GroupByClauseAssert.java       |   43 +
 .../asserts/segment/having/HavingClauseAssert.java |   45 +
 .../segment/identifier/IdentifierValueAssert.java  |   48 +
 .../asserts/segment/index/IndexAssert.java         |   57 +
 .../asserts/segment/index/IndexTypeAssert.java     |   57 +
 .../segment/insert/InsertColumnsClauseAssert.java  |   54 +
 .../insert/InsertMultiTableElementAssert.java      |   54 +
 .../segment/insert/InsertValuesClauseAssert.java   |   64 +
 .../insert/OnDuplicateKeyColumnsAssert.java        |   56 +
 .../asserts/segment/limit/LimitClauseAssert.java   |   81 +
 .../asserts/segment/lock/LockClauseAssert.java     |   69 +
 .../asserts/segment/model/ModelClauseAssert.java   |  109 ++
 .../segment/orderby/OrderByClauseAssert.java       |   42 +
 .../asserts/segment/orderby/OrderByItemAssert.java |  118 ++
 .../asserts/segment/output/OutputClauseAssert.java |   94 ++
 .../asserts/segment/owner/OwnerAssert.java         |   54 +
 .../asserts/segment/packages/PackageAssert.java    |   57 +
 .../segment/parameter/ParameterMarkerAssert.java   |   48 +
 .../prepare/PrepareStatementQueryAssert.java       |   90 +
 .../segment/projection/ProjectionAssert.java       |  178 ++
 .../segment/returning/ReturningClauseAssert.java   |   47 +
 .../asserts/segment/set/SetClauseAssert.java       |   56 +
 .../asserts/segment/show/ShowFilterAssert.java     |   55 +
 .../asserts/segment/table/TableAssert.java         |  196 +++
 .../internal/asserts/segment/type/TypeAssert.java  |   57 +
 .../asserts/segment/where/WhereClauseAssert.java   |   45 +
 .../asserts/segment/with/WithClauseAssert.java     |   76 +
 .../asserts/statement/SQLStatementAssert.java      |   82 +
 .../asserts/statement/comment/CommentAssert.java   |   70 +
 .../asserts/statement/dal/DALStatementAssert.java  |  302 ++++
 .../dal/impl/CacheIndexStatementAssert.java        |   88 +
 .../dal/impl/CheckTableStatementAssert.java        |   43 +
 .../statement/dal/impl/CloneStatementAssert.java   |   56 +
 .../statement/dal/impl/EmptyStatementAssert.java   |   41 +
 .../statement/dal/impl/ExplainStatementAssert.java |   81 +
 .../statement/dal/impl/FlushStatementAssert.java   |   51 +
 .../dal/impl/InstallComponentStatementAssert.java  |   57 +
 .../dal/impl/InstallPluginStatementAssert.java     |   45 +
 .../statement/dal/impl/KillStatementAssert.java    |   45 +
 .../dal/impl/LoadIndexInfoStatementAssert.java     |   78 +
 .../dal/impl/ResetParameterStatementAssert.java    |   45 +
 .../statement/dal/impl/RestartStatementAssert.java |   41 +
 .../dal/impl/SetParameterStatementAssert.java      |   58 +
 .../dal/impl/ShowBinlogEventsStatementAssert.java  |   60 +
 .../dal/impl/ShowCharacterSetStatementAssert.java  |   45 +
 .../dal/impl/ShowCollationStatementAssert.java     |   45 +
 .../dal/impl/ShowColumnsStatementAssert.java       |   53 +
 .../dal/impl/ShowCreateTableStatementAssert.java   |   41 +
 .../dal/impl/ShowCreateTriggerStatementAssert.java |   47 +
 .../dal/impl/ShowCreateUserStatementAssert.java    |   47 +
 .../dal/impl/ShowDatabasesStatementAssert.java     |   45 +
 .../dal/impl/ShowEventsStatementAssert.java        |   51 +
 .../impl/ShowFunctionStatusStatementAssert.java    |   45 +
 .../dal/impl/ShowIndexStatementAssert.java         |   66 +
 .../dal/impl/ShowOpenTablesStatementAssert.java    |   51 +
 .../dal/impl/ShowProcedureCodeStatementAssert.java |   43 +
 .../impl/ShowProcedureStatusStatementAssert.java   |   45 +
 .../impl/ShowRelaylogEventsStatementAssert.java    |   48 +
 .../dal/impl/ShowReplicaStatusStatementAssert.java |   47 +
 .../dal/impl/ShowReplicasStatementAssert.java      |   41 +
 .../dal/impl/ShowSlaveHostsStatementAssert.java    |   41 +
 .../dal/impl/ShowSlaveStatusStatementAssert.java   |   47 +
 .../statement/dal/impl/ShowStatementAssert.java    |   45 +
 .../dal/impl/ShowStatusStatementAssert.java        |   45 +
 .../dal/impl/ShowTableStatusStatementAssert.java   |   51 +
 .../dal/impl/ShowTablesStatementAssert.java        |   51 +
 .../dal/impl/ShowTriggersStatementAssert.java      |   51 +
 .../dal/impl/ShowVariablesStatementAssert.java     |   45 +
 .../dal/impl/ShutdownStatementAssert.java          |   41 +
 .../impl/UninstallComponentStatementAssert.java    |   57 +
 .../dal/impl/UninstallPluginStatementAssert.java   |   45 +
 .../MySQLAlterResourceGroupStatementAssert.java    |   47 +
 .../dal/impl/mysql/MySQLBinlogStatementAssert.java |   45 +
 .../mysql/MySQLChecksumTableStatementAssert.java   |   47 +
 .../MySQLCreateResourceGroupStatementAssert.java   |   47 +
 .../impl/mysql/MySQLDelimiterStatementAssert.java  |   45 +
 .../MySQLDropResourceGroupStatementAssert.java     |   47 +
 .../mysql/MySQLOptimizeTableStatementAssert.java   |   47 +
 .../mysql/MySQLRepairTableStatementAssert.java     |   47 +
 .../mysql/MySQLResetPersistStatementAssert.java    |   48 +
 .../dal/impl/mysql/MySQLResetStatementAssert.java  |   79 +
 .../MySQLSetResourceGroupStatementAssert.java      |   47 +
 .../dal/impl/mysql/MySQLUseStatementAssert.java    |   47 +
 .../asserts/statement/dcl/DCLStatementAssert.java  |  132 ++
 .../dcl/impl/AlterLoginStatementAssert.java        |   54 +
 .../dcl/impl/AlterRoleStatementAssert.java         |   41 +
 .../dcl/impl/AlterUserStatementAssert.java         |   41 +
 .../dcl/impl/CreateLoginStatementAssert.java       |   54 +
 .../dcl/impl/CreateRoleStatementAssert.java        |   41 +
 .../dcl/impl/CreateUserStatementAssert.java        |   41 +
 .../dcl/impl/DenyUserStatementAssert.java          |   66 +
 .../dcl/impl/DropLoginStatementAssert.java         |   54 +
 .../dcl/impl/DropRoleStatementAssert.java          |   41 +
 .../dcl/impl/DropUserStatementAssert.java          |   41 +
 .../statement/dcl/impl/GrantStatementAssert.java   |   50 +
 .../dcl/impl/ReassignOwnedStatementAssert.java     |   41 +
 .../dcl/impl/RenameUserStatementAssert.java        |   41 +
 .../statement/dcl/impl/RevokeStatementAssert.java  |   50 +
 .../dcl/impl/SetDefaultRoleStatementAssert.java    |   41 +
 .../dcl/impl/SetPasswordStatementAssert.java       |   41 +
 .../statement/dcl/impl/SetRoleStatementAssert.java |   41 +
 .../dcl/impl/mysql/MySQLGrantStatementAssert.java  |   53 +
 .../dcl/impl/mysql/MySQLRevokeStatementAssert.java |   53 +
 .../sqlserver/SQLServerGrantStatementAssert.java   |   49 +
 .../sqlserver/SQLServerRevokeStatementAssert.java  |   49 +
 .../sqlserver/SQLServerSetUserStatementAssert.java |   49 +
 .../asserts/statement/ddl/DDLStatementAssert.java  |  202 +++
 .../ddl/impl/AlterIndexStatementAssert.java        |   70 +
 .../ddl/impl/AlterSessionStatementAssert.java      |   41 +
 .../ddl/impl/AlterSynonymStatementAssert.java      |   41 +
 .../ddl/impl/AlterSystemStatementAssert.java       |   41 +
 .../ddl/impl/AlterTableStatementAssert.java        |  197 +++
 .../ddl/impl/AlterViewStatementAssert.java         |   75 +
 .../statement/ddl/impl/AnalyzeStatementAssert.java |   57 +
 .../impl/AssociateStatisticsStatementAssert.java   |  127 ++
 .../statement/ddl/impl/AuditStatementAssert.java   |   41 +
 .../statement/ddl/impl/CloseStatementAssert.java   |   64 +
 .../statement/ddl/impl/ClusterStatementAssert.java |   73 +
 .../statement/ddl/impl/CommentStatementAssert.java |   81 +
 .../ddl/impl/CreateIndexStatementAssert.java       |   76 +
 .../ddl/impl/CreateTableStatementAssert.java       |  106 ++
 .../ddl/impl/CreateViewStatementAssert.java        |   74 +
 .../statement/ddl/impl/CursorStatementAssert.java  |   63 +
 .../statement/ddl/impl/DeclareStatementAssert.java |   63 +
 .../DisassociateStatisticsStatementAssert.java     |  127 ++
 .../ddl/impl/DropIndexStatementAssert.java         |   75 +
 .../ddl/impl/DropTableStatementAssert.java         |   47 +
 .../ddl/impl/DropViewStatementAssert.java          |   47 +
 .../statement/ddl/impl/FetchStatementAssert.java   |   63 +
 .../ddl/impl/FlashbackTableStatementAssert.java    |   54 +
 .../statement/ddl/impl/ListenStatementAssert.java  |   42 +
 .../statement/ddl/impl/MoveStatementAssert.java    |   63 +
 .../statement/ddl/impl/NoAuditStatementAssert.java |   41 +
 .../ddl/impl/NotifyStmtStatementAssert.java        |   38 +
 .../statement/ddl/impl/PurgeStatementAssert.java   |   57 +
 .../impl/RefreshMatViewStmtStatementAssert.java    |   41 +
 .../statement/ddl/impl/ReindexStatementAssert.java |   41 +
 .../ddl/impl/RenameTableStatementAssert.java       |   59 +
 .../ddl/impl/SecurityLabelStmtStatementAssert.java |   41 +
 .../ddl/impl/TruncateStatementAssert.java          |   47 +
 .../ddl/impl/UnlistenStatementAssert.java          |   38 +
 .../asserts/statement/dml/DMLStatementAssert.java  |   82 +
 .../statement/dml/impl/CallStatementAssert.java    |   96 ++
 .../statement/dml/impl/CopyStatementAssert.java    |   85 +
 .../statement/dml/impl/DeleteStatementAssert.java  |  140 ++
 .../statement/dml/impl/DoStatementAssert.java      |   72 +
 .../statement/dml/impl/InsertStatementAssert.java  |  180 ++
 .../statement/dml/impl/MergeStatementAssert.java   |  103 ++
 .../statement/dml/impl/SelectStatementAssert.java  |  204 +++
 .../statement/dml/impl/UpdateStatementAssert.java  |  103 ++
 .../asserts/statement/ral/RALStatementAssert.java  |   62 +
 .../statement/ral/impl/HintRALStatementAssert.java |   77 +
 .../ral/impl/QueryableRALStatementAssert.java      |  113 ++
 .../ral/impl/UpdatableRALStatementAssert.java      |  102 ++
 ...ddShardingHintDatabaseValueStatementAssert.java |   53 +
 .../AddShardingHintTableValueStatementAssert.java  |   53 +
 ...ClearReadwriteSplittingHintStatementAssert.java |   49 +
 .../SetReadwriteSplittingHintStatementAssert.java  |   52 +
 ...etShardingHintDatabaseValueStatementAssert.java |   52 +
 ...eadwriteSplittingHintStatusStatementAssert.java |   49 +
 .../ShowShardingHintStatusStatementAssert.java     |   49 +
 .../statement/ral/impl/migration/JobIdAssert.java  |   47 +
 .../QueryableScalingRALStatementAssert.java        |   68 +
 .../UpdatableScalingRALStatementAssert.java        |   95 ++
 ...howMigrationCheckAlgorithmsStatementAssert.java |   46 +
 .../ShowMigrationCheckStatusStatementAssert.java   |   48 +
 .../query/ShowMigrationListStatementAssert.java    |   46 +
 ...MigrationSourceStorageUnitsStatementAssert.java |   46 +
 .../query/ShowMigrationStatusStatementAssert.java  |   48 +
 .../update/CheckMigrationStatementAssert.java      |   64 +
 .../update/CommitMigrationStatementAssert.java     |   48 +
 .../update/DropMigrationCheckStatementAssert.java  |   48 +
 .../update/MigrateTableStatementAssert.java        |   46 +
 ...rMigrationSourceStorageUnitStatementAssert.java |   73 +
 .../update/RollbackMigrationStatementAssert.java   |   48 +
 .../update/StartMigrationCheckStatementAssert.java |   48 +
 .../update/StartMigrationStatementAssert.java      |   48 +
 .../update/StopMigrationCheckStatementAssert.java  |   48 +
 .../update/StopMigrationStatementAssert.java       |   48 +
 ...rMigrationSourceStorageUnitStatementAssert.java |   51 +
 .../ConvertYamlConfigurationStatementAssert.java   |   47 +
 ...ExportDatabaseConfigurationStatementAssert.java |   47 +
 .../ShowAuthorityRuleStatementAssert.java          |   46 +
 .../ShowComputeNodeInfoStatementAssert.java        |   46 +
 .../ShowComputeNodeModeStatementAssert.java        |   46 +
 .../queryable/ShowComputeNodesStatementAssert.java |   46 +
 .../queryable/ShowDistVariableStatementAssert.java |   49 +
 .../ShowDistVariablesStatementAssert.java          |   43 +
 .../ShowSQLParserRuleStatementAssert.java          |   46 +
 .../ShowSQLTranslatorRuleStatementAssert.java      |   46 +
 ...FromReadwriteSplittingRulesStatementAssert.java |   47 +
 .../ShowTableMetadataStatementAssert.java          |   52 +
 .../queryable/ShowTrafficRulesStatementAssert.java |   52 +
 .../ShowTransactionRuleStatementAssert.java        |   49 +
 .../updatable/AlterComputeNodeStatementAssert.java |   54 +
 ...eSplittingStorageUnitStatusStatementAssert.java |   66 +
 .../AlterSQLParserRuleStatementAssert.java         |   64 +
 .../updatable/AlterTrafficRuleStatementAssert.java |   68 +
 .../AlterTransactionRuleStatementAssert.java       |   46 +
 .../CreateTrafficRuleStatementAssert.java          |   68 +
 .../updatable/DropTrafficRuleStatementAssert.java  |   54 +
 ...ImportDatabaseConfigurationStatementAssert.java |   51 +
 .../updatable/LabelComputeNodeStatementAssert.java |   53 +
 .../RefreshTableMetadataStatementAssert.java       |   57 +
 .../updatable/SetDistVariableStatementAssert.java  |   38 +
 .../UnlabelComputeNodeStatementAssert.java         |   52 +
 .../asserts/statement/rdl/RDLStatementAssert.java  |   92 ++
 .../rdl/alter/AlterRuleStatementAssert.java        |   87 +
 .../rdl/alter/AlterStorageUnitStatementAssert.java |   72 +
 ...rDatabaseDiscoveryHeartbeatStatementAssert.java |   62 +
 .../AlterDatabaseDiscoveryRuleStatementAssert.java |   84 +
 .../AlterDatabaseDiscoveryTypeStatementAssert.java |   63 +
 ...AlterDefaultShadowAlgorithmStatementAssert.java |   58 +
 ...lterDefaultShardingStrategyStatementAssert.java |   59 +
 .../impl/AlterEncryptRuleStatementAssert.java      |   73 +
 ...AlterReadwriteSplittingRuleStatementAssert.java |   74 +
 .../alter/impl/AlterShadowRuleStatementAssert.java |   70 +
 ...ShardingTableReferenceRulesStatementAssert.java |   75 +
 .../AlterShardingTableRuleStatementAssert.java     |   98 ++
 .../rdl/create/CreateRuleStatementAssert.java      |  101 ++
 .../create/RegisterStorageUnitStatementAssert.java |   72 +
 .../CreateBroadcastTableRuleStatementAssert.java   |   52 +
 ...eDatabaseDiscoveryHeartbeatStatementAssert.java |   62 +
 ...CreateDatabaseDiscoveryRuleStatementAssert.java |   83 +
 ...CreateDatabaseDiscoveryTypeStatementAssert.java |   63 +
 ...reateDefaultShadowAlgorithmStatementAssert.java |   58 +
 ...eateDefaultShardingStrategyStatementAssert.java |   59 +
 .../impl/CreateEncryptRuleStatementAssert.java     |   75 +
 ...reateReadwriteSplittingRuleStatementAssert.java |   75 +
 .../impl/CreateShadowRuleStatementAssert.java      |   70 +
 ...eShardingTableReferenceRuleStatementAssert.java |   75 +
 .../CreateShardingTableRuleStatementAssert.java    |   98 ++
 ...faultSingleTableStorageUnitStatementAssert.java |   54 +
 .../rdl/drop/DropRuleStatementAssert.java          |  107 ++
 .../drop/UnregisterStorageUnitStatementAssert.java |   52 +
 .../DropBroadcastTableRuleStatementAssert.java     |   53 +
 ...pDatabaseDiscoveryHeartbeatStatementAssert.java |   53 +
 .../DropDatabaseDiscoveryRuleStatementAssert.java  |   52 +
 .../DropDatabaseDiscoveryTypeStatementAssert.java  |   53 +
 ...DropDefaultShardingStrategyStatementAssert.java |   53 +
 .../drop/impl/DropEncryptRuleStatementAssert.java  |   52 +
 .../DropReadwriteSplittingRuleStatementAssert.java |   53 +
 .../impl/DropShadowAlgorithmStatementAssert.java   |   53 +
 .../drop/impl/DropShadowRuleStatementAssert.java   |   53 +
 .../impl/DropShardingAlgorithmStatementAssert.java |   51 +
 .../impl/DropShardingAuditorStatementAssert.java   |   51 +
 .../DropShardingKeyGeneratorStatementAssert.java   |   51 +
 ...ShardingTableReferenceRulesStatementAssert.java |   48 +
 .../impl/DropShardingTableRuleStatementAssert.java |   56 +
 .../asserts/statement/rql/RQLStatementAssert.java  |   46 +
 .../rql/impl/ShowRulesStatementAssert.java         |   59 +
 .../asserts/statement/rul/RULStatementAssert.java  |   46 +
 .../statement/rul/impl/SQLRULStatementAssert.java  |   57 +
 .../rul/impl/sql/FormatSQLStatementAssert.java     |   49 +
 .../rul/impl/sql/ParseStatementAssert.java         |   49 +
 .../rul/impl/sql/PreviewStatementAssert.java       |   49 +
 .../asserts/statement/tcl/TCLStatementAssert.java  |   92 ++
 .../tcl/impl/BeginTransactionStatementAssert.java  |   41 +
 .../statement/tcl/impl/CommitStatementAssert.java  |   41 +
 .../statement/tcl/impl/LockStatementAssert.java    |   73 +
 .../impl/PrepareTransactionStatementAssert.java    |   41 +
 .../tcl/impl/RollbackStatementAssert.java          |   52 +
 .../tcl/impl/SavepointStatementAssert.java         |   45 +
 .../tcl/impl/SetAutoCommitStatementAssert.java     |   45 +
 .../tcl/impl/SetConstraintsStatementAssert.java    |   41 +
 .../tcl/impl/SetTransactionStatementAssert.java    |   41 +
 .../statement/tcl/impl/UnlockStatementAssert.java  |   41 +
 .../internal/cases/parser/SQLParserTestCases.java  |   44 +
 .../cases/parser/jaxb/RootSQLParserTestCases.java  | 1711 ++++++++++++++++++++
 .../cases/parser/jaxb/SQLParserTestCase.java       |   58 +
 .../AbstractExpectedDelimiterSQLSegment.java       |   37 +
 .../AbstractExpectedIdentifierSQLSegment.java      |   34 +
 .../jaxb/segment/AbstractExpectedSQLSegment.java   |   46 +
 .../jaxb/segment/ExpectedDelimiterSQLSegment.java  |   38 +
 .../jaxb/segment/ExpectedIdentifierSQLSegment.java |   31 +
 .../parser/jaxb/segment/ExpectedSQLSegment.java    |   52 +
 .../impl/assignment/ExpectedAssignment.java        |   44 +
 .../impl/assignment/ExpectedAssignmentValue.java   |   56 +
 .../impl/assignment/ExpectedValueAssign.java       |   39 +
 .../segment/impl/assignment/ExpectedVariable.java  |   38 +
 .../segment/impl/call/ExpectedCallParameter.java   |   44 +
 .../segment/impl/call/ExpectedProcedureName.java   |   35 +
 .../segment/impl/charset/ExpectedCharsetName.java  |   35 +
 .../jaxb/segment/impl/charset/ExpectedCollate.java |   35 +
 .../segment/impl/clone/ExpectedDataDirectory.java  |   35 +
 .../jaxb/segment/impl/clone/ExpectedInstance.java  |   47 +
 .../jaxb/segment/impl/column/ExpectedColumn.java   |   37 +
 .../segment/impl/comments/ExpectedComment.java     |   35 +
 .../segment/impl/component/ExpectedComponent.java  |   26 +
 .../segment/impl/cursor/ExpectedCursorName.java    |   26 +
 .../impl/cursor/ExpectedDirectionSegment.java      |   38 +
 .../segment/impl/database/ExpectedDatabase.java    |   26 +
 .../definition/ExpectedAddColumnDefinition.java    |   40 +
 .../definition/ExpectedChangeColumnDefinition.java |   42 +
 .../impl/definition/ExpectedColumnDefinition.java  |   49 +
 .../impl/definition/ExpectedColumnPosition.java    |   36 +
 .../definition/ExpectedConstraintDefinition.java   |   52 +
 .../definition/ExpectedConvertTableDefinition.java |   40 +
 .../definition/ExpectedModifyColumnDefinition.java |   38 +
 .../impl/definition/ExpectedRenameDefinition.java  |   39 +
 .../segment/impl/distsql/ExpectedAlgorithm.java    |   41 +
 .../impl/distsql/ExpectedAutoTableRule.java        |   53 +
 .../segment/impl/distsql/ExpectedCacheOption.java  |   38 +
 .../segment/impl/distsql/ExpectedDataSource.java   |   56 +
 .../segment/impl/distsql/ExpectedProperty.java     |   38 +
 .../impl/distsql/ExpectedSQLParserRule.java        |   42 +
 .../segment/impl/distsql/ExpectedTableRule.java    |   54 +
 .../impl/distsql/ral/ExpectedTrafficRule.java      |   43 +
 .../rdl/ExceptedReadwriteSplittingRule.java        |   51 +
 .../impl/distsql/rdl/ExpectedAuditStrategy.java    |   40 +
 .../ExpectedDatabaseDiscoveryDefinitionRule.java   |   50 +
 .../rdl/ExpectedDatabaseDiscoveryHeartbeat.java    |   42 +
 .../distsql/rdl/ExpectedDatabaseDiscoveryType.java |   40 +
 .../rdl/ExpectedDefaultShardingStrategy.java       |   46 +
 .../impl/distsql/rdl/ExpectedEncryptColumn.java    |   49 +
 .../impl/distsql/rdl/ExpectedEncryptRule.java      |   41 +
 .../impl/distsql/rdl/ExpectedShadowAlgorithm.java  |   40 +
 .../impl/distsql/rdl/ExpectedShadowRule.java       |   60 +
 .../impl/distsql/rdl/ExpectedShardingAuditor.java  |   40 +
 .../impl/distsql/rdl/ExpectedShardingStrategy.java |   40 +
 .../rdl/ExpectedShardingTableReferenceRule.java    |   35 +
 .../impl/dostatement/ExpectedDoParameter.java      |   44 +
 .../impl/expr/ExpectedBetweenExpression.java       |   44 +
 .../expr/ExpectedBinaryOperationExpression.java    |   41 +
 .../impl/expr/ExpectedCaseWhenExpression.java      |   46 +
 .../impl/expr/ExpectedCollateExpression.java       |   35 +
 .../segment/impl/expr/ExpectedExistsSubquery.java  |   39 +
 .../jaxb/segment/impl/expr/ExpectedExpression.java |   92 ++
 .../impl/expr/ExpectedExpressionSegment.java       |   24 +
 .../segment/impl/expr/ExpectedInExpression.java    |   41 +
 .../segment/impl/expr/ExpectedListExpression.java  |   35 +
 .../segment/impl/expr/ExpectedNotExpression.java   |   35 +
 .../impl/expr/ExpectedXmlTableFunction.java        |   38 +
 .../complex/ExpectedBaseComplexExpression.java     |   35 +
 .../expr/complex/ExpectedCommonExpression.java     |   34 +
 .../complex/ExpectedComplexExpressionSegment.java  |   33 +
 .../expr/simple/ExpectedBaseSimpleExpression.java  |   26 +
 .../expr/simple/ExpectedLiteralExpression.java     |   34 +
 .../simple/ExpectedParameterMarkerExpression.java  |   34 +
 .../simple/ExpectedSimpleExpressionSegment.java    |   26 +
 .../segment/impl/expr/simple/ExpectedSubquery.java |   35 +
 .../jaxb/segment/impl/from/ExpectedFromSchema.java |   33 +
 .../segment/impl/function/ExpectedFunction.java    |   53 +
 .../segment/impl/generic/ExpectedDataType.java     |   35 +
 .../jaxb/segment/impl/group/ExpectedGroup.java     |   26 +
 .../segment/impl/having/ExpectedHavingClause.java  |   39 +
 .../impl/index/ExpectedCacheTableIndex.java        |   41 +
 .../jaxb/segment/impl/index/ExpectedIndex.java     |   36 +
 .../jaxb/segment/impl/index/ExpectedIndexType.java |   36 +
 .../segment/impl/index/ExpectedLoadTableIndex.java |   44 +
 .../jaxb/segment/impl/index/ExpectedPartition.java |   26 +
 .../impl/index/ExpectedPartitionDefinition.java    |   41 +
 .../impl/insert/ExpectedInsertColumnsClause.java   |   36 +
 .../insert/ExpectedInsertMultiTableElement.java    |   36 +
 .../segment/impl/insert/ExpectedInsertValue.java   |   36 +
 .../impl/insert/ExpectedInsertValuesClause.java    |   35 +
 .../impl/insert/ExpectedOnDuplicateKeyColumns.java |   36 +
 .../impl/insert/ExpectedReturningClause.java       |   33 +
 .../jaxb/segment/impl/like/ExpectedLikeClause.java |   38 +
 .../segment/impl/limit/ExpectedLimitClause.java    |   38 +
 .../impl/limit/ExpectedPaginationValue.java        |   41 +
 .../jaxb/segment/impl/lock/ExpectedLockClause.java |   40 +
 .../jaxb/segment/impl/login/ExpectedLogin.java     |   26 +
 .../segment/impl/model/ExpectedModelClause.java    |   49 +
 .../impl/orderby/ExpectedOrderByClause.java        |   53 +
 .../impl/orderby/item/ExpectedOrderByItem.java     |   38 +
 .../item/impl/ExpectedColumnOrderByItem.java       |   41 +
 .../item/impl/ExpectedExpressionOrderByItem.java   |   40 +
 .../item/impl/ExpectedIndexOrderByItem.java        |   35 +
 .../segment/impl/output/ExpectedOutputClause.java  |   42 +
 .../segment/impl/output/ExpectedOutputColumn.java  |   38 +
 .../impl/output/ExpectedOutputTableColumn.java     |   38 +
 .../segment/impl/packages/ExpectedPackage.java     |   36 +
 .../jaxb/segment/impl/plugin/ExpectedPlugin.java   |   26 +
 .../impl/projection/ExpectedProjection.java        |   26 +
 .../impl/projection/ExpectedProjections.java       |   94 ++
 .../ExpectedAggregationDistinctProjection.java     |   34 +
 .../aggregation/ExpectedAggregationProjection.java |   49 +
 .../impl/column/ExpectedColumnProjection.java      |   41 +
 .../expression/ExpectedExpressionProjection.java   |   48 +
 .../shorthand/ExpectedShorthandProjection.java     |   37 +
 .../impl/subquery/ExpectedSubqueryProjection.java  |   47 +
 .../projection/impl/top/ExpectedTopProjection.java |   40 +
 .../impl/projection/impl/top/ExpectedTopValue.java |   38 +
 .../impl/query/ExpectedPrepareStatementQuery.java  |   48 +
 .../impl/reset/ExpectedResetOptionSegment.java     |   44 +
 .../jaxb/segment/impl/set/ExpectedSetClause.java   |   36 +
 .../jaxb/segment/impl/show/ExpectedShowFilter.java |   40 +
 .../jaxb/segment/impl/table/ExpectedJoinTable.java |   55 +
 .../jaxb/segment/impl/table/ExpectedOwner.java     |   35 +
 .../segment/impl/table/ExpectedSimpleTable.java    |   39 +
 .../segment/impl/table/ExpectedSubqueryTable.java  |   40 +
 .../jaxb/segment/impl/table/ExpectedTable.java     |   44 +
 .../jaxb/segment/impl/table/ExpectedXmlTable.java  |   46 +
 .../jaxb/segment/impl/trigger/ExpectedTrigger.java |   31 +
 .../jaxb/segment/impl/type/ExpectedType.java       |   36 +
 .../jaxb/segment/impl/union/ExpectedCombine.java   |   40 +
 .../jaxb/segment/impl/user/ExpectedUser.java       |   35 +
 .../segment/impl/where/ExpectedWhereClause.java    |   39 +
 .../segment/impl/window/ExpectedWindowClause.java  |   30 +
 .../with/ExpectedCommonTableExpressionClause.java  |   46 +
 .../jaxb/segment/impl/with/ExpectedWithClause.java |   35 +
 .../jaxb/statement/CommonStatementTestCase.java    |   39 +
 .../jaxb/statement/DatabaseContainedTestCase.java  |   36 +
 .../jaxb/statement/DropRuleStatementTestCase.java  |   34 +
 .../dal/AlterResourceGroupStatementTestCase.java   |   36 +
 .../statement/dal/BinlogStatementTestCase.java     |   35 +
 .../statement/dal/CacheIndexStatementTestCase.java |   46 +
 .../statement/dal/CheckTableStatementTestCase.java |   36 +
 .../dal/ChecksumTableStatementTestCase.java        |   36 +
 .../jaxb/statement/dal/CloneStatementTestCase.java |   40 +
 .../dal/CreateResourceGroupStatementTestCase.java  |   36 +
 .../statement/dal/DelimiterStatementTestCase.java  |   35 +
 .../dal/DropResourceGroupStatementTestCase.java    |   36 +
 .../jaxb/statement/dal/EmptyStatementTestCase.java |   26 +
 .../statement/dal/ExplainStatementTestCase.java    |   60 +
 .../jaxb/statement/dal/FlushStatementTestCase.java |   42 +
 .../jaxb/statement/dal/HelpStatementTestCase.java  |   35 +
 .../dal/InstallComponentStatementTestCase.java     |   36 +
 .../dal/InstallPluginStatementTestCase.java        |   36 +
 .../jaxb/statement/dal/KillStatementTestCase.java  |   35 +
 .../dal/LoadIndexInfoStatementTestCase.java        |   36 +
 .../dal/OptimizeTableStatementTestCase.java        |   36 +
 .../dal/RepairTableStatementTestCase.java          |   36 +
 .../dal/ResetParameterStatementTestCase.java       |   35 +
 .../dal/ResetPersistStatementTestCase.java         |   38 +
 .../jaxb/statement/dal/ResetStatementTestCase.java |   36 +
 .../statement/dal/RestartStatementTestCase.java    |   26 +
 .../dal/SetParameterStatementTestCase.java         |   36 +
 .../dal/SetResourceGroupStatementTestCase.java     |   36 +
 .../dal/ShowBinlogEventsStatementTestCase.java     |   40 +
 .../dal/ShowCharacterSetStatementTestCase.java     |   36 +
 .../dal/ShowCollationStatementTestCase.java        |   36 +
 .../dal/ShowColumnsStatementTestCase.java          |   44 +
 .../dal/ShowCreateTableStatementTestCase.java      |   36 +
 .../dal/ShowCreateTriggerStatementTestCase.java    |   36 +
 .../dal/ShowCreateUserStatementTestCase.java       |   36 +
 .../dal/ShowDatabasesStatementTestCase.java        |   36 +
 .../statement/dal/ShowEventsStatementTestCase.java |   40 +
 .../dal/ShowFunctionStatusStatementTestCase.java   |   36 +
 .../statement/dal/ShowIndexStatementTestCase.java  |   40 +
 .../dal/ShowOpenTablesStatementTestCase.java       |   40 +
 .../dal/ShowProcedureCodeStatementTestCase.java    |   36 +
 .../dal/ShowProcedureStatusStatementTestCase.java  |   36 +
 .../dal/ShowRelayLogEventsStatementTestCase.java   |   38 +
 .../dal/ShowReplicaStatusStatementTestCase.java    |   35 +
 .../dal/ShowReplicasStatementTestCase.java         |   26 +
 .../dal/ShowSlaveHostsStatementTestCase.java       |   26 +
 .../dal/ShowSlaveStatusStatementTestCase.java      |   35 +
 .../jaxb/statement/dal/ShowStatementTestCase.java  |   35 +
 .../statement/dal/ShowStatusStatementTestCase.java |   36 +
 .../dal/ShowTableStatusStatementTestCase.java      |   40 +
 .../statement/dal/ShowTablesStatementTestCase.java |   40 +
 .../dal/ShowTriggersStatementTestCase.java         |   40 +
 .../dal/ShowVariablesStatementTestCase.java        |   36 +
 .../statement/dal/ShutdownStatementTestCase.java   |   26 +
 .../dal/UninstallComponentStatementTestCase.java   |   36 +
 .../dal/UninstallPluginStatementTestCase.java      |   36 +
 .../jaxb/statement/dal/UseStatementTestCase.java   |   36 +
 .../statement/dcl/AlterLoginStatementTestCase.java |   36 +
 .../statement/dcl/AlterRoleStatementTestCase.java  |   26 +
 .../statement/dcl/AlterUserStatementTestCase.java  |   26 +
 .../dcl/CreateGroupStatementTestCase.java          |   26 +
 .../dcl/CreateLoginStatementTestCase.java          |   36 +
 .../statement/dcl/CreateRoleStatementTestCase.java |   26 +
 .../statement/dcl/CreateUserStatementTestCase.java |   26 +
 .../statement/dcl/DenyUserStatementTestCase.java   |   42 +
 .../statement/dcl/DropLoginStatementTestCase.java  |   36 +
 .../statement/dcl/DropRoleStatementTestCase.java   |   26 +
 .../statement/dcl/DropUserStatementTestCase.java   |   26 +
 .../jaxb/statement/dcl/GrantStatementTestCase.java |   40 +
 .../dcl/ReassignOwnedStatementTestCase.java        |   26 +
 .../statement/dcl/RenameUserStatementTestCase.java |   26 +
 .../statement/dcl/RevertStatementTestCase.java     |   26 +
 .../statement/dcl/RevokeStatementTestCase.java     |   40 +
 .../dcl/SetDefaultRoleStatementTestCase.java       |   26 +
 .../dcl/SetPasswordStatementTestCase.java          |   26 +
 .../statement/dcl/SetRoleStatementTestCase.java    |   26 +
 .../statement/dcl/SetUserStatementTestCase.java    |   33 +
 .../ddl/AlterAggregateStatementTestCase.java       |   26 +
 .../ddl/AlterAnalyticViewStatementTestCase.java    |   26 +
 .../AlterAttributeDimensionStatementTestCase.java  |   26 +
 .../ddl/AlterAuditPolicyStatementTestCase.java     |   26 +
 .../ddl/AlterClusterStatementTestCase.java         |   26 +
 .../ddl/AlterCollationStatementTestCase.java       |   26 +
 .../ddl/AlterConversionStatementTestCase.java      |   26 +
 .../AlterDatabaseDictionaryStatementTestCase.java  |   26 +
 .../ddl/AlterDatabaseLinkStatementTestCase.java    |   26 +
 .../ddl/AlterDatabaseStatementTestCase.java        |   26 +
 .../ddl/AlterDefaultPrivilegesTestCase.java        |   26 +
 .../ddl/AlterDimensionStatementTestCase.java       |   26 +
 .../ddl/AlterDirectoryStatementTestCase.java       |   26 +
 .../ddl/AlterDiskgroupStatementTestCase.java       |   26 +
 .../ddl/AlterDomainStatementTestCase.java          |   26 +
 .../ddl/AlterExtensionStatementTestCase.java       |   26 +
 .../AlterFlashbackArchiveStatementTestCase.java    |   26 +
 .../ddl/AlterForeignDataWrapperTestCase.java       |   26 +
 .../statement/ddl/AlterForeignTableTestCase.java   |   26 +
 .../ddl/AlterFunctionStatementTestCase.java        |   26 +
 .../statement/ddl/AlterGroupStatementTestCase.java |   26 +
 .../ddl/AlterHierarchyStatementTestCase.java       |   26 +
 .../statement/ddl/AlterIndexStatementTestCase.java |   40 +
 .../ddl/AlterIndexTypeStatementTestCase.java       |   26 +
 .../AlterInmemoryJoinGroupStatementTestCase.java   |   26 +
 .../statement/ddl/AlterJavaStatementTestCase.java  |   26 +
 .../ddl/AlterLanguageStatementTestCase.java        |   26 +
 .../ddl/AlterLibraryStatementTestCase.java         |   26 +
 .../ddl/AlterLockdownProfileStatementTestCase.java |   26 +
 .../AlterMaterializedViewLogStatementTestCase.java |   26 +
 .../AlterMaterializedViewStatementTestCase.java    |   26 +
 .../AlterMaterializedZonemapStatementTestCase.java |   26 +
 .../ddl/AlterOperatorStatementTestCase.java        |   26 +
 .../ddl/AlterOutlineStatementTestCase.java         |   26 +
 .../ddl/AlterPackageStatementTestCase.java         |   26 +
 .../AlterPluggableDatabaseStatementTestCase.java   |   26 +
 .../ddl/AlterPolicyStatementTestCase.java          |   26 +
 .../ddl/AlterProcedureStatementTestCase.java       |   26 +
 .../ddl/AlterPublicationStatementTestCase.java     |   26 +
 .../ddl/AlterRoutineStatementTestCase.java         |   26 +
 .../statement/ddl/AlterRuleStatementTestCase.java  |   26 +
 .../ddl/AlterSchemaStatementTestCase.java          |   26 +
 .../ddl/AlterSequenceStatementTestCase.java        |   26 +
 .../ddl/AlterServerStatementTestCase.java          |   26 +
 .../ddl/AlterServiceStatementTestCase.java         |   26 +
 .../ddl/AlterSessionStatementTestCase.java         |   26 +
 .../ddl/AlterStatisticsStatementTestCase.java      |   26 +
 .../ddl/AlterSubscriptionStatementTestCase.java    |   26 +
 .../ddl/AlterSynonymStatementTestCase.java         |   26 +
 .../ddl/AlterSystemStatementTestCase.java          |   26 +
 .../statement/ddl/AlterTableStatementTestCase.java |   65 +
 .../ddl/AlterTextSearchStatementTestCase.java      |   26 +
 .../ddl/AlterTriggerStatementTestCase.java         |   26 +
 .../statement/ddl/AlterTypeStatementTestCase.java  |   26 +
 .../statement/ddl/AlterViewStatementTestCase.java  |   47 +
 .../statement/ddl/AnalyzeStatementTestCase.java    |   40 +
 .../ddl/AssociateStatisticsStatementTestCase.java  |   62 +
 .../jaxb/statement/ddl/AuditStatementTestCase.java |   26 +
 .../jaxb/statement/ddl/CloseStatementTestCase.java |   40 +
 .../statement/ddl/ClusterStatementTestCase.java    |   40 +
 .../statement/ddl/CommentStatementTestCase.java    |   44 +
 .../ddl/CreateAccessMethodStatementTestCase.java   |   26 +
 .../ddl/CreateAggregateStatementTestCase.java      |   26 +
 .../statement/ddl/CreateCastStatementTestCase.java |   26 +
 .../ddl/CreateCollationStatementTestCase.java      |   26 +
 .../ddl/CreateContextStatementTestCase.java        |   26 +
 .../ddl/CreateControlFileStatementTestCase.java    |   26 +
 .../ddl/CreateConversionStatementTestCase.java     |   26 +
 .../ddl/CreateDatabaseLinkStatementTestCase.java   |   26 +
 .../ddl/CreateDatabaseStatementTestCase.java       |   26 +
 .../ddl/CreateDimensionStatementTestCase.java      |   26 +
 .../ddl/CreateDirectoryStatementTestCase.java      |   26 +
 .../ddl/CreateDiskgroupStatementTestCase.java      |   26 +
 .../ddl/CreateDomainStatementTestCase.java         |   26 +
 .../ddl/CreateEditionStatementTestCase.java        |   26 +
 .../ddl/CreateEventTriggerStatementTestCase.java   |   26 +
 .../ddl/CreateExtensionStatementTestCase.java      |   26 +
 .../CreateFlashbackArchiveStatementTestCase.java   |   26 +
 .../CreateForeignDataWrapperStatementTestCase.java |   26 +
 .../ddl/CreateForeignTableStatementTestCase.java   |   26 +
 .../ddl/CreateFunctionStatementTestCase.java       |   26 +
 .../ddl/CreateIndexStatementTestCase.java          |   46 +
 .../CreateInmemoryJoinGroupStatementTestCase.java  |   26 +
 .../ddl/CreateLanguageStatementTestCase.java       |   26 +
 .../CreateLockdownProfileStatementTestCase.java    |   26 +
 .../CreateMaterializedViewStatementTestCase.java   |   26 +
 .../ddl/CreateOperatorStatementTestCase.java       |   26 +
 .../ddl/CreatePFileStatementTestCase.java          |   26 +
 .../ddl/CreatePolicyStatementTestCase.java         |   26 +
 .../ddl/CreateProcedureStatementTestCase.java      |   26 +
 .../ddl/CreatePublicationStatementTestCase.java    |   26 +
 .../ddl/CreateRestorePointStatementTestCase.java   |   26 +
 .../CreateRollbackSegmentStatementTestCase.java    |   26 +
 .../statement/ddl/CreateRuleStatementTestCase.java |   26 +
 .../ddl/CreateSPFileStatementTestCase.java         |   26 +
 .../ddl/CreateSchemaStatementTestCase.java         |   26 +
 .../ddl/CreateSequenceStatementTestCase.java       |   26 +
 .../ddl/CreateServerStatementTestCase.java         |   26 +
 .../ddl/CreateServiceStatementTestCase.java        |   26 +
 .../ddl/CreateSynonymStatementTestCase.java        |   26 +
 .../ddl/CreateTableStatementTestCase.java          |   54 +
 .../ddl/CreateTablespaceStatementTestCase.java     |   26 +
 .../ddl/CreateTextSearchStatementTestCase.java     |   26 +
 .../ddl/CreateTriggerStatementTestCase.java        |   26 +
 .../statement/ddl/CreateTypeStatementTestCase.java |   26 +
 .../statement/ddl/CreateViewStatementTestCase.java |   44 +
 .../statement/ddl/CursorStatementTestCase.java     |   40 +
 .../statement/ddl/DeclareStatementTestCase.java    |   40 +
 .../DisassociateStatisticsStatementTestCase.java   |   62 +
 .../statement/ddl/DiscardStatementTestCase.java    |   26 +
 .../ddl/DropAccessMethodStatementTestCase.java     |   26 +
 .../ddl/DropAggregateStatementTestCase.java        |   26 +
 .../statement/ddl/DropCastStatementTestCase.java   |   26 +
 .../ddl/DropCollationStatementTestCase.java        |   26 +
 .../ddl/DropConversionStatementTestCase.java       |   26 +
 .../ddl/DropDatabaseLinkStatementTestCase.java     |   26 +
 .../ddl/DropDatabaseStatementTestCase.java         |   26 +
 .../ddl/DropDimensionStatementTestCase.java        |   26 +
 .../ddl/DropDirectoryStatementTestCase.java        |   26 +
 .../ddl/DropDiskgroupStatementTestCase.java        |   26 +
 .../statement/ddl/DropDomainStatementTestCase.java |   26 +
 .../ddl/DropEditionStatementTestCase.java          |   26 +
 .../ddl/DropEventTriggerStatementTestCase.java     |   26 +
 .../ddl/DropExtensionStatementTestCase.java        |   26 +
 .../ddl/DropFlashbackArchiveStatementTestCase.java |   26 +
 .../DropForeignDataWrapperStatementTestCase.java   |   26 +
 .../ddl/DropForeignTableStatementTestCase.java     |   26 +
 .../ddl/DropFunctionStatementTestCase.java         |   26 +
 .../statement/ddl/DropGroupStatementTestCase.java  |   26 +
 .../statement/ddl/DropIndexStatementTestCase.java  |   42 +
 .../ddl/DropIndexTypeStatementTestCase.java        |   26 +
 .../DropInmemoryJoinGroupStatementTestCase.java    |   26 +
 .../statement/ddl/DropJavaStatementTestCase.java   |   26 +
 .../ddl/DropLanguageStatementTestCase.java         |   26 +
 .../ddl/DropLibraryStatementTestCase.java          |   26 +
 .../ddl/DropLockdownProfileStatementTestCase.java  |   26 +
 .../DropMaterializedViewLogStatementTestCase.java  |   26 +
 .../ddl/DropMaterializedViewStatementTestCase.java |   26 +
 .../DropMaterializedZonemapStatementTestCase.java  |   26 +
 .../ddl/DropOperatorClassStatementTestCase.java    |   26 +
 .../ddl/DropOperatorFamilyStatementTestCase.java   |   26 +
 .../ddl/DropOperatorStatementTestCase.java         |   26 +
 .../ddl/DropOutlineStatementTestCase.java          |   26 +
 .../statement/ddl/DropOwnedStatementTestCase.java  |   26 +
 .../ddl/DropPackageStatementTestCase.java          |   26 +
 .../DropPluggableDatabaseStatementTestCase.java    |   26 +
 .../statement/ddl/DropPolicyStatementTestCase.java |   26 +
 .../ddl/DropProcedureStatementTestCase.java        |   26 +
 .../ddl/DropPublicationStatementTestCase.java      |   26 +
 .../ddl/DropRestorePointStatementTestCase.java     |   26 +
 .../ddl/DropRollbackSegmentStatementTestCase.java  |   26 +
 .../ddl/DropRoutineStatementTestCase.java          |   26 +
 .../statement/ddl/DropRuleStatementTestCase.java   |   26 +
 .../statement/ddl/DropSchemaStatementTestCase.java |   26 +
 .../ddl/DropSequenceStatementTestCase.java         |   26 +
 .../statement/ddl/DropServerStatementTestCase.java |   26 +
 .../ddl/DropServiceStatementTestCase.java          |   26 +
 .../ddl/DropStatisticsStatementTestCase.java       |   26 +
 .../ddl/DropSubscriptionStatementTestCase.java     |   26 +
 .../ddl/DropSynonymStatementTestCase.java          |   26 +
 .../statement/ddl/DropTableStatementTestCase.java  |   36 +
 .../ddl/DropTextSearchStatementTestCase.java       |   26 +
 .../ddl/DropTriggerStatementTestCase.java          |   26 +
 .../statement/ddl/DropTypeStatementTestCase.java   |   26 +
 .../statement/ddl/DropViewStatementTestCase.java   |   38 +
 .../jaxb/statement/ddl/FetchStatementTestCase.java |   40 +
 .../ddl/FlashbackDatabaseStatementTestCase.java    |   26 +
 .../ddl/FlashbackTableStatementTestCase.java       |   39 +
 .../statement/ddl/ListenStatementTestCase.java     |   35 +
 .../jaxb/statement/ddl/MoveStatementTestCase.java  |   40 +
 .../statement/ddl/NoAuditStatementTestCase.java    |   26 +
 .../statement/ddl/NotifyStmtStatementTestCase.java |   26 +
 .../statement/ddl/PreparedStatementTestCase.java   |   26 +
 .../jaxb/statement/ddl/PurgeStatementTestCase.java |   40 +
 .../ddl/RefreshMatViewStmtStatementTestCase.java   |   26 +
 .../statement/ddl/ReindexStatementTestCase.java    |   26 +
 .../statement/ddl/RenameStatementTestCase.java     |   26 +
 .../ddl/RenameTableStatementTestCase.java          |   36 +
 .../ddl/SecurityLabelStmtStatementTestCase.java    |   26 +
 .../statement/ddl/TruncateStatementTestCase.java   |   36 +
 .../statement/ddl/UnlistenStatementTestCase.java   |   26 +
 .../jaxb/statement/dml/CallStatementTestCase.java  |   42 +
 .../statement/dml/CheckpointStatementTestCase.java |   26 +
 .../jaxb/statement/dml/CopyStatementTestCase.java  |   46 +
 .../statement/dml/DeleteStatementTestCase.java     |   62 +
 .../jaxb/statement/dml/DoStatementTestCase.java    |   36 +
 .../statement/dml/InsertStatementTestCase.java     |   74 +
 .../statement/dml/LockTableStatementTestCase.java  |   26 +
 .../jaxb/statement/dml/MergeStatementTestCase.java |   49 +
 .../statement/dml/SelectStatementTestCase.java     |   83 +
 .../jaxb/statement/dml/TableStatementTestCase.java |   44 +
 .../statement/dml/UpdateStatementTestCase.java     |   52 +
 ...ShardingHintDatabaseValueStatementTestCase.java |   38 +
 ...AddShardingHintTableValueStatementTestCase.java |   38 +
 .../ral/AlterComputeNodeStatementTestCase.java     |   41 +
 ...AlterLocalTransactionRuleStatementTestCase.java |   26 +
 ...plittingStorageUnitStatusStatementTestCase.java |   41 +
 .../ral/AlterSQLParserRuleStatementTestCase.java   |   34 +
 .../ral/AlterTrafficRuleStatementTestCase.java     |   36 +
 .../AlterXATransactionRuleStatementTestCase.java   |   26 +
 .../ral/ApplyDistSQLStatementTestCase.java         |   26 +
 .../statement/ral/ClearHintStatementTestCase.java  |   26 +
 ...earReadwriteSplittingHintStatementTestCase.java |   26 +
 .../ral/ClearShardingHintStatementTestCase.java    |   26 +
 .../ConvertYamlConfigurationStatementTestCase.java |   35 +
 .../ral/CreateTrafficRuleStatementTestCase.java    |   36 +
 .../ral/DiscardDistSQLStatementTestCase.java       |   26 +
 .../ral/DropTrafficRuleStatementTestCase.java      |   36 +
 ...portDatabaseConfigurationStatementTestCase.java |   26 +
 ...portDatabaseConfigurationStatementTestCase.java |   35 +
 .../ral/LabelComputeNodeStatementTestCase.java     |   43 +
 .../ral/PrepareDistSQLStatementTestCase.java       |   26 +
 .../ral/RefreshTableMetadataStatementTestCase.java |   41 +
 .../ral/SetDistVariableStatementTestCase.java      |   26 +
 ...SetReadwriteSplittingHintStatementTestCase.java |   35 +
 ...ShardingHintDatabaseValueStatementTestCase.java |   35 +
 .../ral/ShowAuthorityRuleStatementTestCase.java    |   26 +
 .../ral/ShowComputeNodeInfoStatementTestCase.java  |   26 +
 .../ral/ShowComputeNodeModeStatementTestCase.java  |   26 +
 .../ral/ShowComputeNodesStatementTestCase.java     |   26 +
 .../ral/ShowDistVariableStatementTestCase.java     |   35 +
 .../ral/ShowDistVariablesStatementTestCase.java    |   26 +
 .../ral/ShowMigrationListStatementTestCase.java    |   26 +
 ...dwriteSplittingHintStatusStatementTestCase.java |   26 +
 .../ral/ShowSQLParserRuleStatementTestCase.java    |   26 +
 .../ShowSQLTranslatorRuleStatementTestCase.java    |   26 +
 .../ShowShardingHintStatusStatementTestCase.java   |   26 +
 ...omReadwriteSplittingRulesStatementTestCase.java |   26 +
 .../ral/ShowTableMetadataStatementTestCase.java    |   36 +
 .../ral/ShowTrafficRulesStatementTestCase.java     |   35 +
 .../ral/ShowTransactionRuleStatementTestCase.java  |   26 +
 .../ral/UnlabelComputeNodeStatementTestCase.java   |   40 +
 .../migration/CheckMigrationStatementTestCase.java |   41 +
 .../CommitMigrationStatementTestCase.java          |   35 +
 .../DropMigrationCheckStatementTestCase.java       |   35 +
 .../migration/MigrateTableStatementTestCase.java   |   47 +
 ...igrationSourceStorageUnitStatementTestCase.java |   36 +
 .../RollbackMigrationStatementTestCase.java        |   35 +
 ...wMigrationCheckAlgorithmsStatementTestCase.java |   26 +
 .../ShowMigrationCheckStatusStatementTestCase.java |   35 +
 ...grationSourceStorageUnitsStatementTestCase.java |   26 +
 .../ShowMigrationStatusStatementTestCase.java      |   41 +
 .../StartMigrationCheckStatementTestCase.java      |   35 +
 .../migration/StartMigrationStatementTestCase.java |   35 +
 .../StopMigrationCheckStatementTestCase.java       |   35 +
 .../migration/StopMigrationStatementTestCase.java  |   35 +
 ...igrationSourceStorageUnitStatementTestCase.java |   35 +
 .../AlterStorageUnitStatementTestCase.java         |   36 +
 .../RegisterStorageUnitStatementTestCase.java      |   36 +
 .../UnregisterStorageUnitStatementTestCase.java    |   44 +
 ...seDiscoveryDefinitionRuleStatementTestCase.java |   36 +
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   36 +
 ...lterDatabaseDiscoveryTypeStatementTestCase.java |   36 +
 ...seDiscoveryDefinitionRuleStatementTestCase.java |   36 +
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   36 +
 ...eateDatabaseDiscoveryTypeStatementTestCase.java |   36 +
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   41 +
 ...DropDatabaseDiscoveryRuleStatementTestCase.java |   41 +
 ...DropDatabaseDiscoveryTypeStatementTestCase.java |   41 +
 .../encrypt/AlterEncryptRuleStatementTestCase.java |   36 +
 .../CreateEncryptRuleStatementTestCase.java        |   36 +
 .../encrypt/DropEncryptRuleStatementTestCase.java  |   41 +
 ...terReadwriteSplittingRuleStatementTestCase.java |   36 +
 ...ateReadwriteSplittingRuleStatementTestCase.java |   36 +
 ...ropReadwriteSplittingRuleStatementTestCase.java |   35 +
 ...terDefaultShadowAlgorithmStatementTestCase.java |   36 +
 .../shadow/AlterShadowRuleStatementTestCase.java   |   36 +
 ...ateDefaultShadowAlgorithmStatementTestCase.java |   36 +
 .../shadow/CreateShadowRuleStatementTestCase.java  |   36 +
 .../DropShadowAlgorithmStatementTestCase.java      |   41 +
 .../shadow/DropShadowRuleStatementTestCase.java    |   41 +
 ...erDefaultShardingStrategyStatementTestCase.java |   36 +
 .../AlterShardingAuditorStatementTestCase.java     |   36 +
 ...lterShardingAutoTableRuleStatementTestCase.java |   36 +
 ...ardingTableReferenceRulesStatementTestCase.java |   36 +
 .../AlterShardingTableRuleStatementTestCase.java   |   36 +
 .../CreateBroadcastTableRuleStatementTestCase.java |   35 +
 ...teDefaultShardingStrategyStatementTestCase.java |   36 +
 .../CreateShardingAuditorStatementTestCase.java    |   36 +
 ...eateShardingAutoTableRuleStatementTestCase.java |   36 +
 ...hardingTableReferenceRuleStatementTestCase.java |   36 +
 .../CreateShardingTableRuleStatementTestCase.java  |   36 +
 .../DropBroadcastTableRuleStatementTestCase.java   |   35 +
 ...opDefaultShardingStrategyStatementTestCase.java |   35 +
 .../DropShardingAlgorithmStatementTestCase.java    |   35 +
 .../DropShardingAuditorStatementTestCase.java      |   35 +
 .../DropShardingKeyGeneratorStatementTestCase.java |   35 +
 ...hardingTableReferenceRuleStatementTestCase.java |   35 +
 .../DropShardingTableRuleStatementTestCase.java    |   35 +
 ...ultSingleTableStorageUnitStatementTestCase.java |   35 +
 .../ShowRulesUsedStorageUnitStatementTestCase.java |   35 +
 ...ountDatabaseDiscoveryRuleStatementTestCase.java |   26 +
 ...howDatabaseDiscoveryRulesStatementTestCase.java |   26 +
 .../encrypt/CountEncryptRuleStatementTestCase.java |   26 +
 .../encrypt/ShowEncryptRulesStatementTestCase.java |   35 +
 ...untReadwriteSplittingRuleStatementTestCase.java |   26 +
 ...owReadwriteSplittingRulesStatementTestCase.java |   26 +
 .../shadow/CountShadowRuleStatementTestCase.java   |   26 +
 ...owDefaultShadowAlgorithmsStatementTestCase.java |   26 +
 .../ShowShadowAlgorithmsStatementTestCase.java     |   26 +
 .../shadow/ShowShadowRulesStatementTestCase.java   |   35 +
 .../ShowShadowTableRulesStatementTestCase.java     |   26 +
 .../CountShardingRuleStatementTestCase.java        |   26 +
 .../ShowBroadcastTableRulesStatementTestCase.java  |   26 +
 ...owDefaultShardingStrategyStatementTestCase.java |   26 +
 .../ShowShardingAlgorithmsStatementTestCase.java   |   26 +
 .../ShowShardingAuditorsStatementTestCase.java     |   26 +
 ...ShowShardingKeyGeneratorsStatementTestCase.java |   26 +
 .../ShowShardingTableNodesStatementTestCase.java   |   35 +
 ...ardingTableReferenceRulesStatementTestCase.java |   26 +
 .../ShowShardingTableRulesStatementTestCase.java   |   35 +
 ...ngTableRulesUsedAlgorithmStatementTestCase.java |   35 +
 ...dingTableRulesUsedAuditorStatementTestCase.java |   35 +
 ...ableRulesUsedKeyGeneratorStatementTestCase.java |   35 +
 ...wUnusedShardingAlgorithmsStatementTestCase.java |   26 +
 ...howUnusedShardingAuditorsStatementTestCase.java |   26 +
 ...usedShardingKeyGeneratorsStatementTestCase.java |   26 +
 .../CountSingleTableRuleStatementTestCase.java     |   26 +
 ...ultSingleTableStorageUnitStatementTestCase.java |   30 +
 .../single/ShowSingleTableStatementTestCase.java   |   35 +
 .../statement/rul/FormatSQLStatementTestCase.java  |   35 +
 .../jaxb/statement/rul/ParseStatementTestCase.java |   35 +
 .../statement/rul/PreviewStatementTestCase.java    |   35 +
 .../tcl/BeginTransactionStatementTestCase.java     |   26 +
 .../statement/tcl/CommitStatementTestCase.java     |   26 +
 .../jaxb/statement/tcl/LockStatementTestCase.java  |   36 +
 .../statement/tcl/PrepareTransactionTestCase.java  |   26 +
 .../statement/tcl/RollbackStatementTestCase.java   |   35 +
 .../statement/tcl/SavepointStatementTestCase.java  |   35 +
 .../tcl/SetAutoCommitStatementTestCase.java        |   35 +
 .../tcl/SetConstraintsStatementTestCase.java       |   26 +
 .../tcl/SetTransactionStatementTestCase.java       |   26 +
 .../statement/tcl/UnlockStatementTestCase.java     |   26 +
 .../parser/jaxb/statement/tcl/XATestCase.java      |   26 +
 .../loader/SQLParserTestCaseLoaderCallback.java    |   75 +
 .../registry/SQLParserTestCasesRegistry.java       |   47 +
 .../it/sql/parser/internal/cases/sql/SQLCases.java |   98 ++
 .../internal/cases/sql/jaxb/RootSQLCases.java      |   36 +
 .../parser/internal/cases/sql/jaxb/SQLCase.java    |   46 +
 .../cases/sql/loader/SQLCaseLoaderCallback.java    |   65 +
 .../cases/sql/registry/SQLCasesRegistry.java       |   47 +
 .../sql/registry/UnsupportedSQLCasesRegistry.java  |   47 +
 .../cases/sql/type/CaseTypedSQLBuilder.java        |   35 +
 .../cases/sql/type/CaseTypedSQLBuilderFactory.java |   47 +
 .../internal/cases/sql/type/SQLCaseType.java       |   26 +
 .../cases/sql/type/impl/LiteralSQLBuilder.java     |   40 +
 .../cases/sql/type/impl/PlaceholderSQLBuilder.java |   33 +
 .../sql/parser/internal/loader/CaseFileLoader.java |   96 ++
 .../parser/internal/loader/CaseLoaderCallback.java |   51 +
 .../parser/internal/loader/CaseLoaderTemplate.java |   48 +
 .../sql/parser/external/ExternalSQLParserIT.java   |   62 -
 .../external/ExternalSQLParserTestParameter.java   |   42 -
 .../env/SQLParserExternalITEnvironment.java        |   74 -
 .../ExternalSQLParserTestParameterLoader.java      |  139 --
 .../loader/strategy/TestParameterLoadStrategy.java |   37 -
 .../impl/GitHubTestParameterLoadStrategy.java      |   85 -
 .../impl/LocalFileTestParameterLoadStrategy.java   |   47 -
 .../loader/summary/AssertableFileSummary.java      |   35 -
 .../external/loader/summary/FileSummary.java       |   33 -
 .../external/result/SQLParseResultReporter.java    |   34 -
 .../result/SQLParseResultReporterCreator.java      |   34 -
 .../SQLParseResultReporterCreatorFactory.java      |   44 -
 .../result/type/csv/CsvSQLParseResultReporter.java |   60 -
 .../type/csv/CsvSQLParseResultReporterCreator.java |   37 -
 .../result/type/log/LogSQLParseResultReporter.java |   35 -
 .../type/log/LogSQLParseResultReporterCreator.java |   37 -
 .../sql/parser/internal/InternalSQLParserIT.java   |   86 -
 .../internal/InternalSQLParserTestParameter.java   |   41 -
 .../internal/InternalUnsupportedSQLParserIT.java   |   64 -
 .../internal/asserts/SQLCaseAssertContext.java     |   79 -
 .../internal/asserts/segment/SQLSegmentAssert.java |   57 -
 .../segment/assignment/AssignmentAssert.java       |   58 -
 .../segment/assignment/AssignmentValueAssert.java  |   66 -
 .../asserts/segment/charset/CharsetAssert.java     |   56 -
 .../asserts/segment/column/ColumnAssert.java       |   76 -
 .../segment/cursor/DirectionSegmentAssert.java     |   68 -
 .../asserts/segment/database/DatabaseAssert.java   |   45 -
 .../segment/definition/ColumnDefinitionAssert.java |   51 -
 .../segment/definition/ColumnPositionAssert.java   |   64 -
 .../definition/ConstraintDefinitionAssert.java     |   80 -
 .../asserts/segment/distsql/AlgorithmAssert.java   |   53 -
 .../segment/distsql/AutoTableRuleAssert.java       |   64 -
 .../asserts/segment/distsql/DataSourceAssert.java  |   68 -
 .../asserts/segment/distsql/DatabaseAssert.java    |   44 -
 .../asserts/segment/distsql/PropertiesAssert.java  |   54 -
 .../asserts/segment/distsql/PropertyAssert.java    |   53 -
 .../asserts/segment/distsql/SQLSegmentAssert.java  |   46 -
 .../asserts/segment/distsql/TableRuleAssert.java   |   73 -
 .../segment/distsql/rdl/AuditStrategyAssert.java   |   66 -
 .../segment/distsql/rdl/EncryptColumnAssert.java   |   58 -
 .../segment/distsql/rdl/EncryptRuleAssert.java     |   75 -
 .../distsql/rdl/ReadwriteSplittingRuleAssert.java  |   63 -
 .../segment/distsql/rdl/ShadowRuleAssert.java      |   81 -
 .../segment/distsql/rdl/ShardingAuditorAssert.java |   49 -
 .../rdl/ShardingTableReferenceRuleAssert.java      |   53 -
 .../segment/expression/ExpressionAssert.java       |  406 -----
 .../asserts/segment/generic/DataTypeAssert.java    |   50 -
 .../segment/generic/GrantLevelSegmentAssert.java   |   53 -
 .../segment/groupby/GroupByClauseAssert.java       |   43 -
 .../asserts/segment/having/HavingClauseAssert.java |   45 -
 .../segment/identifier/IdentifierValueAssert.java  |   48 -
 .../asserts/segment/index/IndexAssert.java         |   57 -
 .../asserts/segment/index/IndexTypeAssert.java     |   57 -
 .../segment/insert/InsertColumnsClauseAssert.java  |   54 -
 .../insert/InsertMultiTableElementAssert.java      |   54 -
 .../segment/insert/InsertValuesClauseAssert.java   |   64 -
 .../insert/OnDuplicateKeyColumnsAssert.java        |   56 -
 .../asserts/segment/limit/LimitClauseAssert.java   |   81 -
 .../asserts/segment/lock/LockClauseAssert.java     |   69 -
 .../asserts/segment/model/ModelClauseAssert.java   |  109 --
 .../segment/orderby/OrderByClauseAssert.java       |   42 -
 .../asserts/segment/orderby/OrderByItemAssert.java |  118 --
 .../asserts/segment/output/OutputClauseAssert.java |   94 --
 .../asserts/segment/owner/OwnerAssert.java         |   54 -
 .../asserts/segment/packages/PackageAssert.java    |   57 -
 .../segment/parameter/ParameterMarkerAssert.java   |   48 -
 .../prepare/PrepareStatementQueryAssert.java       |   90 -
 .../segment/projection/ProjectionAssert.java       |  178 --
 .../segment/returning/ReturningClauseAssert.java   |   47 -
 .../asserts/segment/set/SetClauseAssert.java       |   56 -
 .../asserts/segment/show/ShowFilterAssert.java     |   55 -
 .../asserts/segment/table/TableAssert.java         |  196 ---
 .../internal/asserts/segment/type/TypeAssert.java  |   57 -
 .../asserts/segment/where/WhereClauseAssert.java   |   45 -
 .../asserts/segment/with/WithClauseAssert.java     |   76 -
 .../asserts/statement/SQLStatementAssert.java      |   82 -
 .../asserts/statement/comment/CommentAssert.java   |   70 -
 .../asserts/statement/dal/DALStatementAssert.java  |  302 ----
 .../dal/impl/CacheIndexStatementAssert.java        |   88 -
 .../dal/impl/CheckTableStatementAssert.java        |   43 -
 .../statement/dal/impl/CloneStatementAssert.java   |   56 -
 .../statement/dal/impl/EmptyStatementAssert.java   |   41 -
 .../statement/dal/impl/ExplainStatementAssert.java |   81 -
 .../statement/dal/impl/FlushStatementAssert.java   |   51 -
 .../dal/impl/InstallComponentStatementAssert.java  |   57 -
 .../dal/impl/InstallPluginStatementAssert.java     |   45 -
 .../statement/dal/impl/KillStatementAssert.java    |   45 -
 .../dal/impl/LoadIndexInfoStatementAssert.java     |   78 -
 .../dal/impl/ResetParameterStatementAssert.java    |   45 -
 .../statement/dal/impl/RestartStatementAssert.java |   41 -
 .../dal/impl/SetParameterStatementAssert.java      |   58 -
 .../dal/impl/ShowBinlogEventsStatementAssert.java  |   60 -
 .../dal/impl/ShowCharacterSetStatementAssert.java  |   45 -
 .../dal/impl/ShowCollationStatementAssert.java     |   45 -
 .../dal/impl/ShowColumnsStatementAssert.java       |   53 -
 .../dal/impl/ShowCreateTableStatementAssert.java   |   41 -
 .../dal/impl/ShowCreateTriggerStatementAssert.java |   47 -
 .../dal/impl/ShowCreateUserStatementAssert.java    |   47 -
 .../dal/impl/ShowDatabasesStatementAssert.java     |   45 -
 .../dal/impl/ShowEventsStatementAssert.java        |   51 -
 .../impl/ShowFunctionStatusStatementAssert.java    |   45 -
 .../dal/impl/ShowIndexStatementAssert.java         |   66 -
 .../dal/impl/ShowOpenTablesStatementAssert.java    |   51 -
 .../dal/impl/ShowProcedureCodeStatementAssert.java |   43 -
 .../impl/ShowProcedureStatusStatementAssert.java   |   45 -
 .../impl/ShowRelaylogEventsStatementAssert.java    |   48 -
 .../dal/impl/ShowReplicaStatusStatementAssert.java |   47 -
 .../dal/impl/ShowReplicasStatementAssert.java      |   41 -
 .../dal/impl/ShowSlaveHostsStatementAssert.java    |   41 -
 .../dal/impl/ShowSlaveStatusStatementAssert.java   |   47 -
 .../statement/dal/impl/ShowStatementAssert.java    |   45 -
 .../dal/impl/ShowStatusStatementAssert.java        |   45 -
 .../dal/impl/ShowTableStatusStatementAssert.java   |   51 -
 .../dal/impl/ShowTablesStatementAssert.java        |   51 -
 .../dal/impl/ShowTriggersStatementAssert.java      |   51 -
 .../dal/impl/ShowVariablesStatementAssert.java     |   45 -
 .../dal/impl/ShutdownStatementAssert.java          |   41 -
 .../impl/UninstallComponentStatementAssert.java    |   57 -
 .../dal/impl/UninstallPluginStatementAssert.java   |   45 -
 .../MySQLAlterResourceGroupStatementAssert.java    |   47 -
 .../dal/impl/mysql/MySQLBinlogStatementAssert.java |   45 -
 .../mysql/MySQLChecksumTableStatementAssert.java   |   47 -
 .../MySQLCreateResourceGroupStatementAssert.java   |   47 -
 .../impl/mysql/MySQLDelimiterStatementAssert.java  |   45 -
 .../MySQLDropResourceGroupStatementAssert.java     |   47 -
 .../mysql/MySQLOptimizeTableStatementAssert.java   |   47 -
 .../mysql/MySQLRepairTableStatementAssert.java     |   47 -
 .../mysql/MySQLResetPersistStatementAssert.java    |   48 -
 .../dal/impl/mysql/MySQLResetStatementAssert.java  |   79 -
 .../MySQLSetResourceGroupStatementAssert.java      |   47 -
 .../dal/impl/mysql/MySQLUseStatementAssert.java    |   47 -
 .../asserts/statement/dcl/DCLStatementAssert.java  |  132 --
 .../dcl/impl/AlterLoginStatementAssert.java        |   54 -
 .../dcl/impl/AlterRoleStatementAssert.java         |   41 -
 .../dcl/impl/AlterUserStatementAssert.java         |   41 -
 .../dcl/impl/CreateLoginStatementAssert.java       |   54 -
 .../dcl/impl/CreateRoleStatementAssert.java        |   41 -
 .../dcl/impl/CreateUserStatementAssert.java        |   41 -
 .../dcl/impl/DenyUserStatementAssert.java          |   66 -
 .../dcl/impl/DropLoginStatementAssert.java         |   54 -
 .../dcl/impl/DropRoleStatementAssert.java          |   41 -
 .../dcl/impl/DropUserStatementAssert.java          |   41 -
 .../statement/dcl/impl/GrantStatementAssert.java   |   50 -
 .../dcl/impl/ReassignOwnedStatementAssert.java     |   41 -
 .../dcl/impl/RenameUserStatementAssert.java        |   41 -
 .../statement/dcl/impl/RevokeStatementAssert.java  |   50 -
 .../dcl/impl/SetDefaultRoleStatementAssert.java    |   41 -
 .../dcl/impl/SetPasswordStatementAssert.java       |   41 -
 .../statement/dcl/impl/SetRoleStatementAssert.java |   41 -
 .../dcl/impl/mysql/MySQLGrantStatementAssert.java  |   53 -
 .../dcl/impl/mysql/MySQLRevokeStatementAssert.java |   53 -
 .../sqlserver/SQLServerGrantStatementAssert.java   |   49 -
 .../sqlserver/SQLServerRevokeStatementAssert.java  |   49 -
 .../sqlserver/SQLServerSetUserStatementAssert.java |   49 -
 .../asserts/statement/ddl/DDLStatementAssert.java  |  202 ---
 .../ddl/impl/AlterIndexStatementAssert.java        |   70 -
 .../ddl/impl/AlterSessionStatementAssert.java      |   41 -
 .../ddl/impl/AlterSynonymStatementAssert.java      |   41 -
 .../ddl/impl/AlterSystemStatementAssert.java       |   41 -
 .../ddl/impl/AlterTableStatementAssert.java        |  197 ---
 .../ddl/impl/AlterViewStatementAssert.java         |   75 -
 .../statement/ddl/impl/AnalyzeStatementAssert.java |   57 -
 .../impl/AssociateStatisticsStatementAssert.java   |  127 --
 .../statement/ddl/impl/AuditStatementAssert.java   |   41 -
 .../statement/ddl/impl/CloseStatementAssert.java   |   64 -
 .../statement/ddl/impl/ClusterStatementAssert.java |   73 -
 .../statement/ddl/impl/CommentStatementAssert.java |   81 -
 .../ddl/impl/CreateIndexStatementAssert.java       |   76 -
 .../ddl/impl/CreateTableStatementAssert.java       |  106 --
 .../ddl/impl/CreateViewStatementAssert.java        |   74 -
 .../statement/ddl/impl/CursorStatementAssert.java  |   63 -
 .../statement/ddl/impl/DeclareStatementAssert.java |   63 -
 .../DisassociateStatisticsStatementAssert.java     |  127 --
 .../ddl/impl/DropIndexStatementAssert.java         |   75 -
 .../ddl/impl/DropTableStatementAssert.java         |   47 -
 .../ddl/impl/DropViewStatementAssert.java          |   47 -
 .../statement/ddl/impl/FetchStatementAssert.java   |   63 -
 .../ddl/impl/FlashbackTableStatementAssert.java    |   54 -
 .../statement/ddl/impl/ListenStatementAssert.java  |   42 -
 .../statement/ddl/impl/MoveStatementAssert.java    |   63 -
 .../statement/ddl/impl/NoAuditStatementAssert.java |   41 -
 .../ddl/impl/NotifyStmtStatementAssert.java        |   38 -
 .../statement/ddl/impl/PurgeStatementAssert.java   |   57 -
 .../impl/RefreshMatViewStmtStatementAssert.java    |   41 -
 .../statement/ddl/impl/ReindexStatementAssert.java |   41 -
 .../ddl/impl/RenameTableStatementAssert.java       |   59 -
 .../ddl/impl/SecurityLabelStmtStatementAssert.java |   41 -
 .../ddl/impl/TruncateStatementAssert.java          |   47 -
 .../ddl/impl/UnlistenStatementAssert.java          |   38 -
 .../asserts/statement/dml/DMLStatementAssert.java  |   82 -
 .../statement/dml/impl/CallStatementAssert.java    |   96 --
 .../statement/dml/impl/CopyStatementAssert.java    |   85 -
 .../statement/dml/impl/DeleteStatementAssert.java  |  140 --
 .../statement/dml/impl/DoStatementAssert.java      |   72 -
 .../statement/dml/impl/InsertStatementAssert.java  |  180 --
 .../statement/dml/impl/MergeStatementAssert.java   |  103 --
 .../statement/dml/impl/SelectStatementAssert.java  |  204 ---
 .../statement/dml/impl/UpdateStatementAssert.java  |  103 --
 .../asserts/statement/ral/RALStatementAssert.java  |   62 -
 .../statement/ral/impl/HintRALStatementAssert.java |   77 -
 .../ral/impl/QueryableRALStatementAssert.java      |  113 --
 .../ral/impl/UpdatableRALStatementAssert.java      |  102 --
 ...ddShardingHintDatabaseValueStatementAssert.java |   53 -
 .../AddShardingHintTableValueStatementAssert.java  |   53 -
 ...ClearReadwriteSplittingHintStatementAssert.java |   49 -
 .../SetReadwriteSplittingHintStatementAssert.java  |   52 -
 ...etShardingHintDatabaseValueStatementAssert.java |   52 -
 ...eadwriteSplittingHintStatusStatementAssert.java |   49 -
 .../ShowShardingHintStatusStatementAssert.java     |   49 -
 .../statement/ral/impl/migration/JobIdAssert.java  |   47 -
 .../QueryableScalingRALStatementAssert.java        |   68 -
 .../UpdatableScalingRALStatementAssert.java        |   95 --
 ...howMigrationCheckAlgorithmsStatementAssert.java |   46 -
 .../ShowMigrationCheckStatusStatementAssert.java   |   48 -
 .../query/ShowMigrationListStatementAssert.java    |   46 -
 ...MigrationSourceStorageUnitsStatementAssert.java |   46 -
 .../query/ShowMigrationStatusStatementAssert.java  |   48 -
 .../update/CheckMigrationStatementAssert.java      |   64 -
 .../update/CommitMigrationStatementAssert.java     |   48 -
 .../update/DropMigrationCheckStatementAssert.java  |   48 -
 .../update/MigrateTableStatementAssert.java        |   46 -
 ...rMigrationSourceStorageUnitStatementAssert.java |   73 -
 .../update/RollbackMigrationStatementAssert.java   |   48 -
 .../update/StartMigrationCheckStatementAssert.java |   48 -
 .../update/StartMigrationStatementAssert.java      |   48 -
 .../update/StopMigrationCheckStatementAssert.java  |   48 -
 .../update/StopMigrationStatementAssert.java       |   48 -
 ...rMigrationSourceStorageUnitStatementAssert.java |   51 -
 .../ConvertYamlConfigurationStatementAssert.java   |   47 -
 ...ExportDatabaseConfigurationStatementAssert.java |   47 -
 .../ShowAuthorityRuleStatementAssert.java          |   46 -
 .../ShowComputeNodeInfoStatementAssert.java        |   46 -
 .../ShowComputeNodeModeStatementAssert.java        |   46 -
 .../queryable/ShowComputeNodesStatementAssert.java |   46 -
 .../queryable/ShowDistVariableStatementAssert.java |   49 -
 .../ShowDistVariablesStatementAssert.java          |   43 -
 .../ShowSQLParserRuleStatementAssert.java          |   46 -
 .../ShowSQLTranslatorRuleStatementAssert.java      |   46 -
 ...FromReadwriteSplittingRulesStatementAssert.java |   47 -
 .../ShowTableMetadataStatementAssert.java          |   52 -
 .../queryable/ShowTrafficRulesStatementAssert.java |   52 -
 .../ShowTransactionRuleStatementAssert.java        |   49 -
 .../updatable/AlterComputeNodeStatementAssert.java |   54 -
 ...eSplittingStorageUnitStatusStatementAssert.java |   66 -
 .../AlterSQLParserRuleStatementAssert.java         |   64 -
 .../updatable/AlterTrafficRuleStatementAssert.java |   68 -
 .../AlterTransactionRuleStatementAssert.java       |   46 -
 .../CreateTrafficRuleStatementAssert.java          |   68 -
 .../updatable/DropTrafficRuleStatementAssert.java  |   54 -
 ...ImportDatabaseConfigurationStatementAssert.java |   51 -
 .../updatable/LabelComputeNodeStatementAssert.java |   53 -
 .../RefreshTableMetadataStatementAssert.java       |   57 -
 .../updatable/SetDistVariableStatementAssert.java  |   38 -
 .../UnlabelComputeNodeStatementAssert.java         |   52 -
 .../asserts/statement/rdl/RDLStatementAssert.java  |   92 --
 .../rdl/alter/AlterRuleStatementAssert.java        |   87 -
 .../rdl/alter/AlterStorageUnitStatementAssert.java |   72 -
 ...rDatabaseDiscoveryHeartbeatStatementAssert.java |   62 -
 .../AlterDatabaseDiscoveryRuleStatementAssert.java |   84 -
 .../AlterDatabaseDiscoveryTypeStatementAssert.java |   63 -
 ...AlterDefaultShadowAlgorithmStatementAssert.java |   58 -
 ...lterDefaultShardingStrategyStatementAssert.java |   59 -
 .../impl/AlterEncryptRuleStatementAssert.java      |   73 -
 ...AlterReadwriteSplittingRuleStatementAssert.java |   74 -
 .../alter/impl/AlterShadowRuleStatementAssert.java |   70 -
 ...ShardingTableReferenceRulesStatementAssert.java |   75 -
 .../AlterShardingTableRuleStatementAssert.java     |   98 --
 .../rdl/create/CreateRuleStatementAssert.java      |  101 --
 .../create/RegisterStorageUnitStatementAssert.java |   72 -
 .../CreateBroadcastTableRuleStatementAssert.java   |   52 -
 ...eDatabaseDiscoveryHeartbeatStatementAssert.java |   62 -
 ...CreateDatabaseDiscoveryRuleStatementAssert.java |   83 -
 ...CreateDatabaseDiscoveryTypeStatementAssert.java |   63 -
 ...reateDefaultShadowAlgorithmStatementAssert.java |   58 -
 ...eateDefaultShardingStrategyStatementAssert.java |   59 -
 .../impl/CreateEncryptRuleStatementAssert.java     |   75 -
 ...reateReadwriteSplittingRuleStatementAssert.java |   75 -
 .../impl/CreateShadowRuleStatementAssert.java      |   70 -
 ...eShardingTableReferenceRuleStatementAssert.java |   75 -
 .../CreateShardingTableRuleStatementAssert.java    |   98 --
 ...faultSingleTableStorageUnitStatementAssert.java |   54 -
 .../rdl/drop/DropRuleStatementAssert.java          |  107 --
 .../drop/UnregisterStorageUnitStatementAssert.java |   52 -
 .../DropBroadcastTableRuleStatementAssert.java     |   53 -
 ...pDatabaseDiscoveryHeartbeatStatementAssert.java |   53 -
 .../DropDatabaseDiscoveryRuleStatementAssert.java  |   52 -
 .../DropDatabaseDiscoveryTypeStatementAssert.java  |   53 -
 ...DropDefaultShardingStrategyStatementAssert.java |   53 -
 .../drop/impl/DropEncryptRuleStatementAssert.java  |   52 -
 .../DropReadwriteSplittingRuleStatementAssert.java |   53 -
 .../impl/DropShadowAlgorithmStatementAssert.java   |   53 -
 .../drop/impl/DropShadowRuleStatementAssert.java   |   53 -
 .../impl/DropShardingAlgorithmStatementAssert.java |   51 -
 .../impl/DropShardingAuditorStatementAssert.java   |   51 -
 .../DropShardingKeyGeneratorStatementAssert.java   |   51 -
 ...ShardingTableReferenceRulesStatementAssert.java |   48 -
 .../impl/DropShardingTableRuleStatementAssert.java |   56 -
 .../asserts/statement/rql/RQLStatementAssert.java  |   46 -
 .../rql/impl/ShowRulesStatementAssert.java         |   59 -
 .../asserts/statement/rul/RULStatementAssert.java  |   46 -
 .../statement/rul/impl/SQLRULStatementAssert.java  |   57 -
 .../rul/impl/sql/FormatSQLStatementAssert.java     |   49 -
 .../rul/impl/sql/ParseStatementAssert.java         |   49 -
 .../rul/impl/sql/PreviewStatementAssert.java       |   49 -
 .../asserts/statement/tcl/TCLStatementAssert.java  |   92 --
 .../tcl/impl/BeginTransactionStatementAssert.java  |   41 -
 .../statement/tcl/impl/CommitStatementAssert.java  |   41 -
 .../statement/tcl/impl/LockStatementAssert.java    |   73 -
 .../impl/PrepareTransactionStatementAssert.java    |   41 -
 .../tcl/impl/RollbackStatementAssert.java          |   52 -
 .../tcl/impl/SavepointStatementAssert.java         |   45 -
 .../tcl/impl/SetAutoCommitStatementAssert.java     |   45 -
 .../tcl/impl/SetConstraintsStatementAssert.java    |   41 -
 .../tcl/impl/SetTransactionStatementAssert.java    |   41 -
 .../statement/tcl/impl/UnlockStatementAssert.java  |   41 -
 .../internal/cases/parser/SQLParserTestCases.java  |   44 -
 .../cases/parser/jaxb/RootSQLParserTestCases.java  | 1711 --------------------
 .../cases/parser/jaxb/SQLParserTestCase.java       |   58 -
 .../AbstractExpectedDelimiterSQLSegment.java       |   37 -
 .../AbstractExpectedIdentifierSQLSegment.java      |   34 -
 .../jaxb/segment/AbstractExpectedSQLSegment.java   |   46 -
 .../jaxb/segment/ExpectedDelimiterSQLSegment.java  |   38 -
 .../jaxb/segment/ExpectedIdentifierSQLSegment.java |   31 -
 .../parser/jaxb/segment/ExpectedSQLSegment.java    |   52 -
 .../impl/assignment/ExpectedAssignment.java        |   44 -
 .../impl/assignment/ExpectedAssignmentValue.java   |   56 -
 .../impl/assignment/ExpectedValueAssign.java       |   39 -
 .../segment/impl/assignment/ExpectedVariable.java  |   38 -
 .../segment/impl/call/ExpectedCallParameter.java   |   44 -
 .../segment/impl/call/ExpectedProcedureName.java   |   35 -
 .../segment/impl/charset/ExpectedCharsetName.java  |   35 -
 .../jaxb/segment/impl/charset/ExpectedCollate.java |   35 -
 .../segment/impl/clone/ExpectedDataDirectory.java  |   35 -
 .../jaxb/segment/impl/clone/ExpectedInstance.java  |   47 -
 .../jaxb/segment/impl/column/ExpectedColumn.java   |   37 -
 .../segment/impl/comments/ExpectedComment.java     |   35 -
 .../segment/impl/component/ExpectedComponent.java  |   26 -
 .../segment/impl/cursor/ExpectedCursorName.java    |   26 -
 .../impl/cursor/ExpectedDirectionSegment.java      |   38 -
 .../segment/impl/database/ExpectedDatabase.java    |   26 -
 .../definition/ExpectedAddColumnDefinition.java    |   40 -
 .../definition/ExpectedChangeColumnDefinition.java |   42 -
 .../impl/definition/ExpectedColumnDefinition.java  |   49 -
 .../impl/definition/ExpectedColumnPosition.java    |   36 -
 .../definition/ExpectedConstraintDefinition.java   |   52 -
 .../definition/ExpectedConvertTableDefinition.java |   40 -
 .../definition/ExpectedModifyColumnDefinition.java |   38 -
 .../impl/definition/ExpectedRenameDefinition.java  |   39 -
 .../segment/impl/distsql/ExpectedAlgorithm.java    |   41 -
 .../impl/distsql/ExpectedAutoTableRule.java        |   53 -
 .../segment/impl/distsql/ExpectedCacheOption.java  |   38 -
 .../segment/impl/distsql/ExpectedDataSource.java   |   56 -
 .../segment/impl/distsql/ExpectedProperty.java     |   38 -
 .../impl/distsql/ExpectedSQLParserRule.java        |   42 -
 .../segment/impl/distsql/ExpectedTableRule.java    |   54 -
 .../impl/distsql/ral/ExpectedTrafficRule.java      |   43 -
 .../rdl/ExceptedReadwriteSplittingRule.java        |   51 -
 .../impl/distsql/rdl/ExpectedAuditStrategy.java    |   40 -
 .../ExpectedDatabaseDiscoveryDefinitionRule.java   |   50 -
 .../rdl/ExpectedDatabaseDiscoveryHeartbeat.java    |   42 -
 .../distsql/rdl/ExpectedDatabaseDiscoveryType.java |   40 -
 .../rdl/ExpectedDefaultShardingStrategy.java       |   46 -
 .../impl/distsql/rdl/ExpectedEncryptColumn.java    |   49 -
 .../impl/distsql/rdl/ExpectedEncryptRule.java      |   41 -
 .../impl/distsql/rdl/ExpectedShadowAlgorithm.java  |   40 -
 .../impl/distsql/rdl/ExpectedShadowRule.java       |   60 -
 .../impl/distsql/rdl/ExpectedShardingAuditor.java  |   40 -
 .../impl/distsql/rdl/ExpectedShardingStrategy.java |   40 -
 .../rdl/ExpectedShardingTableReferenceRule.java    |   35 -
 .../impl/dostatement/ExpectedDoParameter.java      |   44 -
 .../impl/expr/ExpectedBetweenExpression.java       |   44 -
 .../expr/ExpectedBinaryOperationExpression.java    |   41 -
 .../impl/expr/ExpectedCaseWhenExpression.java      |   46 -
 .../impl/expr/ExpectedCollateExpression.java       |   35 -
 .../segment/impl/expr/ExpectedExistsSubquery.java  |   39 -
 .../jaxb/segment/impl/expr/ExpectedExpression.java |   92 --
 .../impl/expr/ExpectedExpressionSegment.java       |   24 -
 .../segment/impl/expr/ExpectedInExpression.java    |   41 -
 .../segment/impl/expr/ExpectedListExpression.java  |   35 -
 .../segment/impl/expr/ExpectedNotExpression.java   |   35 -
 .../impl/expr/ExpectedXmlTableFunction.java        |   38 -
 .../complex/ExpectedBaseComplexExpression.java     |   35 -
 .../expr/complex/ExpectedCommonExpression.java     |   34 -
 .../complex/ExpectedComplexExpressionSegment.java  |   33 -
 .../expr/simple/ExpectedBaseSimpleExpression.java  |   26 -
 .../expr/simple/ExpectedLiteralExpression.java     |   34 -
 .../simple/ExpectedParameterMarkerExpression.java  |   34 -
 .../simple/ExpectedSimpleExpressionSegment.java    |   26 -
 .../segment/impl/expr/simple/ExpectedSubquery.java |   35 -
 .../jaxb/segment/impl/from/ExpectedFromSchema.java |   33 -
 .../segment/impl/function/ExpectedFunction.java    |   53 -
 .../segment/impl/generic/ExpectedDataType.java     |   35 -
 .../jaxb/segment/impl/group/ExpectedGroup.java     |   26 -
 .../segment/impl/having/ExpectedHavingClause.java  |   39 -
 .../impl/index/ExpectedCacheTableIndex.java        |   41 -
 .../jaxb/segment/impl/index/ExpectedIndex.java     |   36 -
 .../jaxb/segment/impl/index/ExpectedIndexType.java |   36 -
 .../segment/impl/index/ExpectedLoadTableIndex.java |   44 -
 .../jaxb/segment/impl/index/ExpectedPartition.java |   26 -
 .../impl/index/ExpectedPartitionDefinition.java    |   41 -
 .../impl/insert/ExpectedInsertColumnsClause.java   |   36 -
 .../insert/ExpectedInsertMultiTableElement.java    |   36 -
 .../segment/impl/insert/ExpectedInsertValue.java   |   36 -
 .../impl/insert/ExpectedInsertValuesClause.java    |   35 -
 .../impl/insert/ExpectedOnDuplicateKeyColumns.java |   36 -
 .../impl/insert/ExpectedReturningClause.java       |   33 -
 .../jaxb/segment/impl/like/ExpectedLikeClause.java |   38 -
 .../segment/impl/limit/ExpectedLimitClause.java    |   38 -
 .../impl/limit/ExpectedPaginationValue.java        |   41 -
 .../jaxb/segment/impl/lock/ExpectedLockClause.java |   40 -
 .../jaxb/segment/impl/login/ExpectedLogin.java     |   26 -
 .../segment/impl/model/ExpectedModelClause.java    |   49 -
 .../impl/orderby/ExpectedOrderByClause.java        |   53 -
 .../impl/orderby/item/ExpectedOrderByItem.java     |   38 -
 .../item/impl/ExpectedColumnOrderByItem.java       |   41 -
 .../item/impl/ExpectedExpressionOrderByItem.java   |   40 -
 .../item/impl/ExpectedIndexOrderByItem.java        |   35 -
 .../segment/impl/output/ExpectedOutputClause.java  |   42 -
 .../segment/impl/output/ExpectedOutputColumn.java  |   38 -
 .../impl/output/ExpectedOutputTableColumn.java     |   38 -
 .../segment/impl/packages/ExpectedPackage.java     |   36 -
 .../jaxb/segment/impl/plugin/ExpectedPlugin.java   |   26 -
 .../impl/projection/ExpectedProjection.java        |   26 -
 .../impl/projection/ExpectedProjections.java       |   94 --
 .../ExpectedAggregationDistinctProjection.java     |   34 -
 .../aggregation/ExpectedAggregationProjection.java |   49 -
 .../impl/column/ExpectedColumnProjection.java      |   41 -
 .../expression/ExpectedExpressionProjection.java   |   48 -
 .../shorthand/ExpectedShorthandProjection.java     |   37 -
 .../impl/subquery/ExpectedSubqueryProjection.java  |   47 -
 .../projection/impl/top/ExpectedTopProjection.java |   40 -
 .../impl/projection/impl/top/ExpectedTopValue.java |   38 -
 .../impl/query/ExpectedPrepareStatementQuery.java  |   48 -
 .../impl/reset/ExpectedResetOptionSegment.java     |   44 -
 .../jaxb/segment/impl/set/ExpectedSetClause.java   |   36 -
 .../jaxb/segment/impl/show/ExpectedShowFilter.java |   40 -
 .../jaxb/segment/impl/table/ExpectedJoinTable.java |   55 -
 .../jaxb/segment/impl/table/ExpectedOwner.java     |   35 -
 .../segment/impl/table/ExpectedSimpleTable.java    |   39 -
 .../segment/impl/table/ExpectedSubqueryTable.java  |   40 -
 .../jaxb/segment/impl/table/ExpectedTable.java     |   44 -
 .../jaxb/segment/impl/table/ExpectedXmlTable.java  |   46 -
 .../jaxb/segment/impl/trigger/ExpectedTrigger.java |   31 -
 .../jaxb/segment/impl/type/ExpectedType.java       |   36 -
 .../jaxb/segment/impl/union/ExpectedCombine.java   |   40 -
 .../jaxb/segment/impl/user/ExpectedUser.java       |   35 -
 .../segment/impl/where/ExpectedWhereClause.java    |   39 -
 .../segment/impl/window/ExpectedWindowClause.java  |   30 -
 .../with/ExpectedCommonTableExpressionClause.java  |   46 -
 .../jaxb/segment/impl/with/ExpectedWithClause.java |   35 -
 .../jaxb/statement/CommonStatementTestCase.java    |   39 -
 .../jaxb/statement/DatabaseContainedTestCase.java  |   36 -
 .../jaxb/statement/DropRuleStatementTestCase.java  |   34 -
 .../dal/AlterResourceGroupStatementTestCase.java   |   36 -
 .../statement/dal/BinlogStatementTestCase.java     |   35 -
 .../statement/dal/CacheIndexStatementTestCase.java |   46 -
 .../statement/dal/CheckTableStatementTestCase.java |   36 -
 .../dal/ChecksumTableStatementTestCase.java        |   36 -
 .../jaxb/statement/dal/CloneStatementTestCase.java |   40 -
 .../dal/CreateResourceGroupStatementTestCase.java  |   36 -
 .../statement/dal/DelimiterStatementTestCase.java  |   35 -
 .../dal/DropResourceGroupStatementTestCase.java    |   36 -
 .../jaxb/statement/dal/EmptyStatementTestCase.java |   26 -
 .../statement/dal/ExplainStatementTestCase.java    |   60 -
 .../jaxb/statement/dal/FlushStatementTestCase.java |   42 -
 .../jaxb/statement/dal/HelpStatementTestCase.java  |   35 -
 .../dal/InstallComponentStatementTestCase.java     |   36 -
 .../dal/InstallPluginStatementTestCase.java        |   36 -
 .../jaxb/statement/dal/KillStatementTestCase.java  |   35 -
 .../dal/LoadIndexInfoStatementTestCase.java        |   36 -
 .../dal/OptimizeTableStatementTestCase.java        |   36 -
 .../dal/RepairTableStatementTestCase.java          |   36 -
 .../dal/ResetParameterStatementTestCase.java       |   35 -
 .../dal/ResetPersistStatementTestCase.java         |   38 -
 .../jaxb/statement/dal/ResetStatementTestCase.java |   36 -
 .../statement/dal/RestartStatementTestCase.java    |   26 -
 .../dal/SetParameterStatementTestCase.java         |   36 -
 .../dal/SetResourceGroupStatementTestCase.java     |   36 -
 .../dal/ShowBinlogEventsStatementTestCase.java     |   40 -
 .../dal/ShowCharacterSetStatementTestCase.java     |   36 -
 .../dal/ShowCollationStatementTestCase.java        |   36 -
 .../dal/ShowColumnsStatementTestCase.java          |   44 -
 .../dal/ShowCreateTableStatementTestCase.java      |   36 -
 .../dal/ShowCreateTriggerStatementTestCase.java    |   36 -
 .../dal/ShowCreateUserStatementTestCase.java       |   36 -
 .../dal/ShowDatabasesStatementTestCase.java        |   36 -
 .../statement/dal/ShowEventsStatementTestCase.java |   40 -
 .../dal/ShowFunctionStatusStatementTestCase.java   |   36 -
 .../statement/dal/ShowIndexStatementTestCase.java  |   40 -
 .../dal/ShowOpenTablesStatementTestCase.java       |   40 -
 .../dal/ShowProcedureCodeStatementTestCase.java    |   36 -
 .../dal/ShowProcedureStatusStatementTestCase.java  |   36 -
 .../dal/ShowRelayLogEventsStatementTestCase.java   |   38 -
 .../dal/ShowReplicaStatusStatementTestCase.java    |   35 -
 .../dal/ShowReplicasStatementTestCase.java         |   26 -
 .../dal/ShowSlaveHostsStatementTestCase.java       |   26 -
 .../dal/ShowSlaveStatusStatementTestCase.java      |   35 -
 .../jaxb/statement/dal/ShowStatementTestCase.java  |   35 -
 .../statement/dal/ShowStatusStatementTestCase.java |   36 -
 .../dal/ShowTableStatusStatementTestCase.java      |   40 -
 .../statement/dal/ShowTablesStatementTestCase.java |   40 -
 .../dal/ShowTriggersStatementTestCase.java         |   40 -
 .../dal/ShowVariablesStatementTestCase.java        |   36 -
 .../statement/dal/ShutdownStatementTestCase.java   |   26 -
 .../dal/UninstallComponentStatementTestCase.java   |   36 -
 .../dal/UninstallPluginStatementTestCase.java      |   36 -
 .../jaxb/statement/dal/UseStatementTestCase.java   |   36 -
 .../statement/dcl/AlterLoginStatementTestCase.java |   36 -
 .../statement/dcl/AlterRoleStatementTestCase.java  |   26 -
 .../statement/dcl/AlterUserStatementTestCase.java  |   26 -
 .../dcl/CreateGroupStatementTestCase.java          |   26 -
 .../dcl/CreateLoginStatementTestCase.java          |   36 -
 .../statement/dcl/CreateRoleStatementTestCase.java |   26 -
 .../statement/dcl/CreateUserStatementTestCase.java |   26 -
 .../statement/dcl/DenyUserStatementTestCase.java   |   42 -
 .../statement/dcl/DropLoginStatementTestCase.java  |   36 -
 .../statement/dcl/DropRoleStatementTestCase.java   |   26 -
 .../statement/dcl/DropUserStatementTestCase.java   |   26 -
 .../jaxb/statement/dcl/GrantStatementTestCase.java |   40 -
 .../dcl/ReassignOwnedStatementTestCase.java        |   26 -
 .../statement/dcl/RenameUserStatementTestCase.java |   26 -
 .../statement/dcl/RevertStatementTestCase.java     |   26 -
 .../statement/dcl/RevokeStatementTestCase.java     |   40 -
 .../dcl/SetDefaultRoleStatementTestCase.java       |   26 -
 .../dcl/SetPasswordStatementTestCase.java          |   26 -
 .../statement/dcl/SetRoleStatementTestCase.java    |   26 -
 .../statement/dcl/SetUserStatementTestCase.java    |   33 -
 .../ddl/AlterAggregateStatementTestCase.java       |   26 -
 .../ddl/AlterAnalyticViewStatementTestCase.java    |   26 -
 .../AlterAttributeDimensionStatementTestCase.java  |   26 -
 .../ddl/AlterAuditPolicyStatementTestCase.java     |   26 -
 .../ddl/AlterClusterStatementTestCase.java         |   26 -
 .../ddl/AlterCollationStatementTestCase.java       |   26 -
 .../ddl/AlterConversionStatementTestCase.java      |   26 -
 .../AlterDatabaseDictionaryStatementTestCase.java  |   26 -
 .../ddl/AlterDatabaseLinkStatementTestCase.java    |   26 -
 .../ddl/AlterDatabaseStatementTestCase.java        |   26 -
 .../ddl/AlterDefaultPrivilegesTestCase.java        |   26 -
 .../ddl/AlterDimensionStatementTestCase.java       |   26 -
 .../ddl/AlterDirectoryStatementTestCase.java       |   26 -
 .../ddl/AlterDiskgroupStatementTestCase.java       |   26 -
 .../ddl/AlterDomainStatementTestCase.java          |   26 -
 .../ddl/AlterExtensionStatementTestCase.java       |   26 -
 .../AlterFlashbackArchiveStatementTestCase.java    |   26 -
 .../ddl/AlterForeignDataWrapperTestCase.java       |   26 -
 .../statement/ddl/AlterForeignTableTestCase.java   |   26 -
 .../ddl/AlterFunctionStatementTestCase.java        |   26 -
 .../statement/ddl/AlterGroupStatementTestCase.java |   26 -
 .../ddl/AlterHierarchyStatementTestCase.java       |   26 -
 .../statement/ddl/AlterIndexStatementTestCase.java |   40 -
 .../ddl/AlterIndexTypeStatementTestCase.java       |   26 -
 .../AlterInmemoryJoinGroupStatementTestCase.java   |   26 -
 .../statement/ddl/AlterJavaStatementTestCase.java  |   26 -
 .../ddl/AlterLanguageStatementTestCase.java        |   26 -
 .../ddl/AlterLibraryStatementTestCase.java         |   26 -
 .../ddl/AlterLockdownProfileStatementTestCase.java |   26 -
 .../AlterMaterializedViewLogStatementTestCase.java |   26 -
 .../AlterMaterializedViewStatementTestCase.java    |   26 -
 .../AlterMaterializedZonemapStatementTestCase.java |   26 -
 .../ddl/AlterOperatorStatementTestCase.java        |   26 -
 .../ddl/AlterOutlineStatementTestCase.java         |   26 -
 .../ddl/AlterPackageStatementTestCase.java         |   26 -
 .../AlterPluggableDatabaseStatementTestCase.java   |   26 -
 .../ddl/AlterPolicyStatementTestCase.java          |   26 -
 .../ddl/AlterProcedureStatementTestCase.java       |   26 -
 .../ddl/AlterPublicationStatementTestCase.java     |   26 -
 .../ddl/AlterRoutineStatementTestCase.java         |   26 -
 .../statement/ddl/AlterRuleStatementTestCase.java  |   26 -
 .../ddl/AlterSchemaStatementTestCase.java          |   26 -
 .../ddl/AlterSequenceStatementTestCase.java        |   26 -
 .../ddl/AlterServerStatementTestCase.java          |   26 -
 .../ddl/AlterServiceStatementTestCase.java         |   26 -
 .../ddl/AlterSessionStatementTestCase.java         |   26 -
 .../ddl/AlterStatisticsStatementTestCase.java      |   26 -
 .../ddl/AlterSubscriptionStatementTestCase.java    |   26 -
 .../ddl/AlterSynonymStatementTestCase.java         |   26 -
 .../ddl/AlterSystemStatementTestCase.java          |   26 -
 .../statement/ddl/AlterTableStatementTestCase.java |   65 -
 .../ddl/AlterTextSearchStatementTestCase.java      |   26 -
 .../ddl/AlterTriggerStatementTestCase.java         |   26 -
 .../statement/ddl/AlterTypeStatementTestCase.java  |   26 -
 .../statement/ddl/AlterViewStatementTestCase.java  |   47 -
 .../statement/ddl/AnalyzeStatementTestCase.java    |   40 -
 .../ddl/AssociateStatisticsStatementTestCase.java  |   62 -
 .../jaxb/statement/ddl/AuditStatementTestCase.java |   26 -
 .../jaxb/statement/ddl/CloseStatementTestCase.java |   40 -
 .../statement/ddl/ClusterStatementTestCase.java    |   40 -
 .../statement/ddl/CommentStatementTestCase.java    |   44 -
 .../ddl/CreateAccessMethodStatementTestCase.java   |   26 -
 .../ddl/CreateAggregateStatementTestCase.java      |   26 -
 .../statement/ddl/CreateCastStatementTestCase.java |   26 -
 .../ddl/CreateCollationStatementTestCase.java      |   26 -
 .../ddl/CreateContextStatementTestCase.java        |   26 -
 .../ddl/CreateControlFileStatementTestCase.java    |   26 -
 .../ddl/CreateConversionStatementTestCase.java     |   26 -
 .../ddl/CreateDatabaseLinkStatementTestCase.java   |   26 -
 .../ddl/CreateDatabaseStatementTestCase.java       |   26 -
 .../ddl/CreateDimensionStatementTestCase.java      |   26 -
 .../ddl/CreateDirectoryStatementTestCase.java      |   26 -
 .../ddl/CreateDiskgroupStatementTestCase.java      |   26 -
 .../ddl/CreateDomainStatementTestCase.java         |   26 -
 .../ddl/CreateEditionStatementTestCase.java        |   26 -
 .../ddl/CreateEventTriggerStatementTestCase.java   |   26 -
 .../ddl/CreateExtensionStatementTestCase.java      |   26 -
 .../CreateFlashbackArchiveStatementTestCase.java   |   26 -
 .../CreateForeignDataWrapperStatementTestCase.java |   26 -
 .../ddl/CreateForeignTableStatementTestCase.java   |   26 -
 .../ddl/CreateFunctionStatementTestCase.java       |   26 -
 .../ddl/CreateIndexStatementTestCase.java          |   46 -
 .../CreateInmemoryJoinGroupStatementTestCase.java  |   26 -
 .../ddl/CreateLanguageStatementTestCase.java       |   26 -
 .../CreateLockdownProfileStatementTestCase.java    |   26 -
 .../CreateMaterializedViewStatementTestCase.java   |   26 -
 .../ddl/CreateOperatorStatementTestCase.java       |   26 -
 .../ddl/CreatePFileStatementTestCase.java          |   26 -
 .../ddl/CreatePolicyStatementTestCase.java         |   26 -
 .../ddl/CreateProcedureStatementTestCase.java      |   26 -
 .../ddl/CreatePublicationStatementTestCase.java    |   26 -
 .../ddl/CreateRestorePointStatementTestCase.java   |   26 -
 .../CreateRollbackSegmentStatementTestCase.java    |   26 -
 .../statement/ddl/CreateRuleStatementTestCase.java |   26 -
 .../ddl/CreateSPFileStatementTestCase.java         |   26 -
 .../ddl/CreateSchemaStatementTestCase.java         |   26 -
 .../ddl/CreateSequenceStatementTestCase.java       |   26 -
 .../ddl/CreateServerStatementTestCase.java         |   26 -
 .../ddl/CreateServiceStatementTestCase.java        |   26 -
 .../ddl/CreateSynonymStatementTestCase.java        |   26 -
 .../ddl/CreateTableStatementTestCase.java          |   54 -
 .../ddl/CreateTablespaceStatementTestCase.java     |   26 -
 .../ddl/CreateTextSearchStatementTestCase.java     |   26 -
 .../ddl/CreateTriggerStatementTestCase.java        |   26 -
 .../statement/ddl/CreateTypeStatementTestCase.java |   26 -
 .../statement/ddl/CreateViewStatementTestCase.java |   44 -
 .../statement/ddl/CursorStatementTestCase.java     |   40 -
 .../statement/ddl/DeclareStatementTestCase.java    |   40 -
 .../DisassociateStatisticsStatementTestCase.java   |   62 -
 .../statement/ddl/DiscardStatementTestCase.java    |   26 -
 .../ddl/DropAccessMethodStatementTestCase.java     |   26 -
 .../ddl/DropAggregateStatementTestCase.java        |   26 -
 .../statement/ddl/DropCastStatementTestCase.java   |   26 -
 .../ddl/DropCollationStatementTestCase.java        |   26 -
 .../ddl/DropConversionStatementTestCase.java       |   26 -
 .../ddl/DropDatabaseLinkStatementTestCase.java     |   26 -
 .../ddl/DropDatabaseStatementTestCase.java         |   26 -
 .../ddl/DropDimensionStatementTestCase.java        |   26 -
 .../ddl/DropDirectoryStatementTestCase.java        |   26 -
 .../ddl/DropDiskgroupStatementTestCase.java        |   26 -
 .../statement/ddl/DropDomainStatementTestCase.java |   26 -
 .../ddl/DropEditionStatementTestCase.java          |   26 -
 .../ddl/DropEventTriggerStatementTestCase.java     |   26 -
 .../ddl/DropExtensionStatementTestCase.java        |   26 -
 .../ddl/DropFlashbackArchiveStatementTestCase.java |   26 -
 .../DropForeignDataWrapperStatementTestCase.java   |   26 -
 .../ddl/DropForeignTableStatementTestCase.java     |   26 -
 .../ddl/DropFunctionStatementTestCase.java         |   26 -
 .../statement/ddl/DropGroupStatementTestCase.java  |   26 -
 .../statement/ddl/DropIndexStatementTestCase.java  |   42 -
 .../ddl/DropIndexTypeStatementTestCase.java        |   26 -
 .../DropInmemoryJoinGroupStatementTestCase.java    |   26 -
 .../statement/ddl/DropJavaStatementTestCase.java   |   26 -
 .../ddl/DropLanguageStatementTestCase.java         |   26 -
 .../ddl/DropLibraryStatementTestCase.java          |   26 -
 .../ddl/DropLockdownProfileStatementTestCase.java  |   26 -
 .../DropMaterializedViewLogStatementTestCase.java  |   26 -
 .../ddl/DropMaterializedViewStatementTestCase.java |   26 -
 .../DropMaterializedZonemapStatementTestCase.java  |   26 -
 .../ddl/DropOperatorClassStatementTestCase.java    |   26 -
 .../ddl/DropOperatorFamilyStatementTestCase.java   |   26 -
 .../ddl/DropOperatorStatementTestCase.java         |   26 -
 .../ddl/DropOutlineStatementTestCase.java          |   26 -
 .../statement/ddl/DropOwnedStatementTestCase.java  |   26 -
 .../ddl/DropPackageStatementTestCase.java          |   26 -
 .../DropPluggableDatabaseStatementTestCase.java    |   26 -
 .../statement/ddl/DropPolicyStatementTestCase.java |   26 -
 .../ddl/DropProcedureStatementTestCase.java        |   26 -
 .../ddl/DropPublicationStatementTestCase.java      |   26 -
 .../ddl/DropRestorePointStatementTestCase.java     |   26 -
 .../ddl/DropRollbackSegmentStatementTestCase.java  |   26 -
 .../ddl/DropRoutineStatementTestCase.java          |   26 -
 .../statement/ddl/DropRuleStatementTestCase.java   |   26 -
 .../statement/ddl/DropSchemaStatementTestCase.java |   26 -
 .../ddl/DropSequenceStatementTestCase.java         |   26 -
 .../statement/ddl/DropServerStatementTestCase.java |   26 -
 .../ddl/DropServiceStatementTestCase.java          |   26 -
 .../ddl/DropStatisticsStatementTestCase.java       |   26 -
 .../ddl/DropSubscriptionStatementTestCase.java     |   26 -
 .../ddl/DropSynonymStatementTestCase.java          |   26 -
 .../statement/ddl/DropTableStatementTestCase.java  |   36 -
 .../ddl/DropTextSearchStatementTestCase.java       |   26 -
 .../ddl/DropTriggerStatementTestCase.java          |   26 -
 .../statement/ddl/DropTypeStatementTestCase.java   |   26 -
 .../statement/ddl/DropViewStatementTestCase.java   |   38 -
 .../jaxb/statement/ddl/FetchStatementTestCase.java |   40 -
 .../ddl/FlashbackDatabaseStatementTestCase.java    |   26 -
 .../ddl/FlashbackTableStatementTestCase.java       |   39 -
 .../statement/ddl/ListenStatementTestCase.java     |   35 -
 .../jaxb/statement/ddl/MoveStatementTestCase.java  |   40 -
 .../statement/ddl/NoAuditStatementTestCase.java    |   26 -
 .../statement/ddl/NotifyStmtStatementTestCase.java |   26 -
 .../statement/ddl/PreparedStatementTestCase.java   |   26 -
 .../jaxb/statement/ddl/PurgeStatementTestCase.java |   40 -
 .../ddl/RefreshMatViewStmtStatementTestCase.java   |   26 -
 .../statement/ddl/ReindexStatementTestCase.java    |   26 -
 .../statement/ddl/RenameStatementTestCase.java     |   26 -
 .../ddl/RenameTableStatementTestCase.java          |   36 -
 .../ddl/SecurityLabelStmtStatementTestCase.java    |   26 -
 .../statement/ddl/TruncateStatementTestCase.java   |   36 -
 .../statement/ddl/UnlistenStatementTestCase.java   |   26 -
 .../jaxb/statement/dml/CallStatementTestCase.java  |   42 -
 .../statement/dml/CheckpointStatementTestCase.java |   26 -
 .../jaxb/statement/dml/CopyStatementTestCase.java  |   46 -
 .../statement/dml/DeleteStatementTestCase.java     |   62 -
 .../jaxb/statement/dml/DoStatementTestCase.java    |   36 -
 .../statement/dml/InsertStatementTestCase.java     |   74 -
 .../statement/dml/LockTableStatementTestCase.java  |   26 -
 .../jaxb/statement/dml/MergeStatementTestCase.java |   49 -
 .../statement/dml/SelectStatementTestCase.java     |   83 -
 .../jaxb/statement/dml/TableStatementTestCase.java |   44 -
 .../statement/dml/UpdateStatementTestCase.java     |   52 -
 ...ShardingHintDatabaseValueStatementTestCase.java |   38 -
 ...AddShardingHintTableValueStatementTestCase.java |   38 -
 .../ral/AlterComputeNodeStatementTestCase.java     |   41 -
 ...AlterLocalTransactionRuleStatementTestCase.java |   26 -
 ...plittingStorageUnitStatusStatementTestCase.java |   41 -
 .../ral/AlterSQLParserRuleStatementTestCase.java   |   34 -
 .../ral/AlterTrafficRuleStatementTestCase.java     |   36 -
 .../AlterXATransactionRuleStatementTestCase.java   |   26 -
 .../ral/ApplyDistSQLStatementTestCase.java         |   26 -
 .../statement/ral/ClearHintStatementTestCase.java  |   26 -
 ...earReadwriteSplittingHintStatementTestCase.java |   26 -
 .../ral/ClearShardingHintStatementTestCase.java    |   26 -
 .../ConvertYamlConfigurationStatementTestCase.java |   35 -
 .../ral/CreateTrafficRuleStatementTestCase.java    |   36 -
 .../ral/DiscardDistSQLStatementTestCase.java       |   26 -
 .../ral/DropTrafficRuleStatementTestCase.java      |   36 -
 ...portDatabaseConfigurationStatementTestCase.java |   26 -
 ...portDatabaseConfigurationStatementTestCase.java |   35 -
 .../ral/LabelComputeNodeStatementTestCase.java     |   43 -
 .../ral/PrepareDistSQLStatementTestCase.java       |   26 -
 .../ral/RefreshTableMetadataStatementTestCase.java |   41 -
 .../ral/SetDistVariableStatementTestCase.java      |   26 -
 ...SetReadwriteSplittingHintStatementTestCase.java |   35 -
 ...ShardingHintDatabaseValueStatementTestCase.java |   35 -
 .../ral/ShowAuthorityRuleStatementTestCase.java    |   26 -
 .../ral/ShowComputeNodeInfoStatementTestCase.java  |   26 -
 .../ral/ShowComputeNodeModeStatementTestCase.java  |   26 -
 .../ral/ShowComputeNodesStatementTestCase.java     |   26 -
 .../ral/ShowDistVariableStatementTestCase.java     |   35 -
 .../ral/ShowDistVariablesStatementTestCase.java    |   26 -
 .../ral/ShowMigrationListStatementTestCase.java    |   26 -
 ...dwriteSplittingHintStatusStatementTestCase.java |   26 -
 .../ral/ShowSQLParserRuleStatementTestCase.java    |   26 -
 .../ShowSQLTranslatorRuleStatementTestCase.java    |   26 -
 .../ShowShardingHintStatusStatementTestCase.java   |   26 -
 ...omReadwriteSplittingRulesStatementTestCase.java |   26 -
 .../ral/ShowTableMetadataStatementTestCase.java    |   36 -
 .../ral/ShowTrafficRulesStatementTestCase.java     |   35 -
 .../ral/ShowTransactionRuleStatementTestCase.java  |   26 -
 .../ral/UnlabelComputeNodeStatementTestCase.java   |   40 -
 .../migration/CheckMigrationStatementTestCase.java |   41 -
 .../CommitMigrationStatementTestCase.java          |   35 -
 .../DropMigrationCheckStatementTestCase.java       |   35 -
 .../migration/MigrateTableStatementTestCase.java   |   47 -
 ...igrationSourceStorageUnitStatementTestCase.java |   36 -
 .../RollbackMigrationStatementTestCase.java        |   35 -
 ...wMigrationCheckAlgorithmsStatementTestCase.java |   26 -
 .../ShowMigrationCheckStatusStatementTestCase.java |   35 -
 ...grationSourceStorageUnitsStatementTestCase.java |   26 -
 .../ShowMigrationStatusStatementTestCase.java      |   41 -
 .../StartMigrationCheckStatementTestCase.java      |   35 -
 .../migration/StartMigrationStatementTestCase.java |   35 -
 .../StopMigrationCheckStatementTestCase.java       |   35 -
 .../migration/StopMigrationStatementTestCase.java  |   35 -
 ...igrationSourceStorageUnitStatementTestCase.java |   35 -
 .../AlterStorageUnitStatementTestCase.java         |   36 -
 .../RegisterStorageUnitStatementTestCase.java      |   36 -
 .../UnregisterStorageUnitStatementTestCase.java    |   44 -
 ...seDiscoveryDefinitionRuleStatementTestCase.java |   36 -
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   36 -
 ...lterDatabaseDiscoveryTypeStatementTestCase.java |   36 -
 ...seDiscoveryDefinitionRuleStatementTestCase.java |   36 -
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   36 -
 ...eateDatabaseDiscoveryTypeStatementTestCase.java |   36 -
 ...atabaseDiscoveryHeartbeatStatementTestCase.java |   41 -
 ...DropDatabaseDiscoveryRuleStatementTestCase.java |   41 -
 ...DropDatabaseDiscoveryTypeStatementTestCase.java |   41 -
 .../encrypt/AlterEncryptRuleStatementTestCase.java |   36 -
 .../CreateEncryptRuleStatementTestCase.java        |   36 -
 .../encrypt/DropEncryptRuleStatementTestCase.java  |   41 -
 ...terReadwriteSplittingRuleStatementTestCase.java |   36 -
 ...ateReadwriteSplittingRuleStatementTestCase.java |   36 -
 ...ropReadwriteSplittingRuleStatementTestCase.java |   35 -
 ...terDefaultShadowAlgorithmStatementTestCase.java |   36 -
 .../shadow/AlterShadowRuleStatementTestCase.java   |   36 -
 ...ateDefaultShadowAlgorithmStatementTestCase.java |   36 -
 .../shadow/CreateShadowRuleStatementTestCase.java  |   36 -
 .../DropShadowAlgorithmStatementTestCase.java      |   41 -
 .../shadow/DropShadowRuleStatementTestCase.java    |   41 -
 ...erDefaultShardingStrategyStatementTestCase.java |   36 -
 .../AlterShardingAuditorStatementTestCase.java     |   36 -
 ...lterShardingAutoTableRuleStatementTestCase.java |   36 -
 ...ardingTableReferenceRulesStatementTestCase.java |   36 -
 .../AlterShardingTableRuleStatementTestCase.java   |   36 -
 .../CreateBroadcastTableRuleStatementTestCase.java |   35 -
 ...teDefaultShardingStrategyStatementTestCase.java |   36 -
 .../CreateShardingAuditorStatementTestCase.java    |   36 -
 ...eateShardingAutoTableRuleStatementTestCase.java |   36 -
 ...hardingTableReferenceRuleStatementTestCase.java |   36 -
 .../CreateShardingTableRuleStatementTestCase.java  |   36 -
 .../DropBroadcastTableRuleStatementTestCase.java   |   35 -
 ...opDefaultShardingStrategyStatementTestCase.java |   35 -
 .../DropShardingAlgorithmStatementTestCase.java    |   35 -
 .../DropShardingAuditorStatementTestCase.java      |   35 -
 .../DropShardingKeyGeneratorStatementTestCase.java |   35 -
 ...hardingTableReferenceRuleStatementTestCase.java |   35 -
 .../DropShardingTableRuleStatementTestCase.java    |   35 -
 ...ultSingleTableStorageUnitStatementTestCase.java |   35 -
 .../ShowRulesUsedStorageUnitStatementTestCase.java |   35 -
 ...ountDatabaseDiscoveryRuleStatementTestCase.java |   26 -
 ...howDatabaseDiscoveryRulesStatementTestCase.java |   26 -
 .../encrypt/CountEncryptRuleStatementTestCase.java |   26 -
 .../encrypt/ShowEncryptRulesStatementTestCase.java |   35 -
 ...untReadwriteSplittingRuleStatementTestCase.java |   26 -
 ...owReadwriteSplittingRulesStatementTestCase.java |   26 -
 .../shadow/CountShadowRuleStatementTestCase.java   |   26 -
 ...owDefaultShadowAlgorithmsStatementTestCase.java |   26 -
 .../ShowShadowAlgorithmsStatementTestCase.java     |   26 -
 .../shadow/ShowShadowRulesStatementTestCase.java   |   35 -
 .../ShowShadowTableRulesStatementTestCase.java     |   26 -
 .../CountShardingRuleStatementTestCase.java        |   26 -
 .../ShowBroadcastTableRulesStatementTestCase.java  |   26 -
 ...owDefaultShardingStrategyStatementTestCase.java |   26 -
 .../ShowShardingAlgorithmsStatementTestCase.java   |   26 -
 .../ShowShardingAuditorsStatementTestCase.java     |   26 -
 ...ShowShardingKeyGeneratorsStatementTestCase.java |   26 -
 .../ShowShardingTableNodesStatementTestCase.java   |   35 -
 ...ardingTableReferenceRulesStatementTestCase.java |   26 -
 .../ShowShardingTableRulesStatementTestCase.java   |   35 -
 ...ngTableRulesUsedAlgorithmStatementTestCase.java |   35 -
 ...dingTableRulesUsedAuditorStatementTestCase.java |   35 -
 ...ableRulesUsedKeyGeneratorStatementTestCase.java |   35 -
 ...wUnusedShardingAlgorithmsStatementTestCase.java |   26 -
 ...howUnusedShardingAuditorsStatementTestCase.java |   26 -
 ...usedShardingKeyGeneratorsStatementTestCase.java |   26 -
 .../CountSingleTableRuleStatementTestCase.java     |   26 -
 ...ultSingleTableStorageUnitStatementTestCase.java |   30 -
 .../single/ShowSingleTableStatementTestCase.java   |   35 -
 .../statement/rul/FormatSQLStatementTestCase.java  |   35 -
 .../jaxb/statement/rul/ParseStatementTestCase.java |   35 -
 .../statement/rul/PreviewStatementTestCase.java    |   35 -
 .../tcl/BeginTransactionStatementTestCase.java     |   26 -
 .../statement/tcl/CommitStatementTestCase.java     |   26 -
 .../jaxb/statement/tcl/LockStatementTestCase.java  |   36 -
 .../statement/tcl/PrepareTransactionTestCase.java  |   26 -
 .../statement/tcl/RollbackStatementTestCase.java   |   35 -
 .../statement/tcl/SavepointStatementTestCase.java  |   35 -
 .../tcl/SetAutoCommitStatementTestCase.java        |   35 -
 .../tcl/SetConstraintsStatementTestCase.java       |   26 -
 .../tcl/SetTransactionStatementTestCase.java       |   26 -
 .../statement/tcl/UnlockStatementTestCase.java     |   26 -
 .../parser/jaxb/statement/tcl/XATestCase.java      |   26 -
 .../loader/SQLParserTestCaseLoaderCallback.java    |   75 -
 .../registry/SQLParserTestCasesRegistry.java       |   47 -
 .../sql/parser/internal/cases/sql/SQLCases.java    |   98 --
 .../internal/cases/sql/jaxb/RootSQLCases.java      |   36 -
 .../parser/internal/cases/sql/jaxb/SQLCase.java    |   46 -
 .../cases/sql/loader/SQLCaseLoaderCallback.java    |   65 -
 .../cases/sql/registry/SQLCasesRegistry.java       |   47 -
 .../sql/registry/UnsupportedSQLCasesRegistry.java  |   47 -
 .../cases/sql/type/CaseTypedSQLBuilder.java        |   35 -
 .../cases/sql/type/CaseTypedSQLBuilderFactory.java |   47 -
 .../internal/cases/sql/type/SQLCaseType.java       |   26 -
 .../cases/sql/type/impl/LiteralSQLBuilder.java     |   40 -
 .../cases/sql/type/impl/PlaceholderSQLBuilder.java |   33 -
 .../sql/parser/internal/loader/CaseFileLoader.java |   96 --
 .../parser/internal/loader/CaseLoaderCallback.java |   51 -
 .../parser/internal/loader/CaseLoaderTemplate.java |   48 -
 ...r.external.result.SQLParseResultReporterCreator |   19 +
 ...r.external.result.SQLParseResultReporterCreator |   19 -
 .../parser/internal/InternalDistSQLParserIT.java   |   37 +
 .../parser/internal/InternalDistSQLParserIT.java   |   37 -
 1787 files changed, 41210 insertions(+), 41210 deletions(-)

diff --git a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/SQLNodeConverterEngineIT.java b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/SQLNodeConverterEngineIT.java
index dab5028010b..3ce10531936 100644
--- a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/SQLNodeConverterEngineIT.java
+++ b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/SQLNodeConverterEngineIT.java
@@ -34,12 +34,12 @@ import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sqlfederation.optimizer.context.parser.dialect.OptimizerSQLDialectBuilderFactory;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.SQLParserTestCases;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistry;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.SQLCases;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.registry.SQLCasesRegistry;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.SQLCaseType;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.SQLParserTestCases;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistry;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.SQLCases;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.registry.SQLCasesRegistry;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserIT.java
deleted file mode 100644
index d1e0867beeb..00000000000
--- a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserIT.java
+++ /dev/null
@@ -1,41 +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.sql.parser.mysql.external;
-
-import org.apache.shardingsphere.test.sql.parser.external.ExternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.external.ExternalSQLParserTestParameter;
-import org.apache.shardingsphere.test.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
-import org.apache.shardingsphere.test.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.net.URI;
-import java.util.Collection;
-
-public final class ExternalMySQLParserIT extends ExternalSQLParserIT {
-    
-    public ExternalMySQLParserIT(final ExternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
-        String caseURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";
-        String resultURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";
-        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "MySQL", "CSV");
-    }
-}
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalMySQLParserIT.java
deleted file mode 100644
index f873a3d586a..00000000000
--- a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalMySQLParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.mysql.internal;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalMySQLParserIT extends InternalSQLParserIT {
-    
-    public InternalMySQLParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("MySQL", "H2");
-    }
-}
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalUnsupportedMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalUnsupportedMySQLParserIT.java
deleted file mode 100644
index c561332d638..00000000000
--- a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/internal/InternalUnsupportedMySQLParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.mysql.internal;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedMySQLParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedMySQLParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("MySQL");
-    }
-}
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
new file mode 100644
index 00000000000..51c0f3e2808
--- /dev/null
+++ b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
@@ -0,0 +1,41 @@
+/*
+ * 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.it.mysql.external;
+
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.net.URI;
+import java.util.Collection;
+
+public final class ExternalMySQLParserIT extends ExternalSQLParserIT {
+    
+    public ExternalMySQLParserIT(final ExternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
+        String caseURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";
+        String resultURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";
+        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "MySQL", "CSV");
+    }
+}
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalMySQLParserIT.java
new file mode 100644
index 00000000000..c225b239058
--- /dev/null
+++ b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalMySQLParserIT.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.test.it.sql.parser.it.mysql.internal;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalMySQLParserIT extends InternalSQLParserIT {
+    
+    public InternalMySQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("MySQL", "H2");
+    }
+}
diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalUnsupportedMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalUnsupportedMySQLParserIT.java
new file mode 100644
index 00000000000..5aa6e63abac
--- /dev/null
+++ b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/internal/InternalUnsupportedMySQLParserIT.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.test.it.sql.parser.it.mysql.internal;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedMySQLParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedMySQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("MySQL");
+    }
+}
diff --git a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalOpenGaussParserIT.java b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalOpenGaussParserIT.java
deleted file mode 100644
index 31cbd57c87c..00000000000
--- a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalOpenGaussParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.opengauss;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalOpenGaussParserIT extends InternalSQLParserIT {
-    
-    public InternalOpenGaussParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("openGauss");
-    }
-}
diff --git a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalUnsupportedOpenGaussParserIT.java b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalUnsupportedOpenGaussParserIT.java
deleted file mode 100644
index b02025aa94b..00000000000
--- a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/InternalUnsupportedOpenGaussParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.opengauss;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedOpenGaussParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedOpenGaussParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("openGauss");
-    }
-}
diff --git a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalOpenGaussParserIT.java b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalOpenGaussParserIT.java
new file mode 100644
index 00000000000..7791e99beb5
--- /dev/null
+++ b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalOpenGaussParserIT.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.test.it.sql.parser.it.opengauss;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalOpenGaussParserIT extends InternalSQLParserIT {
+    
+    public InternalOpenGaussParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("openGauss");
+    }
+}
diff --git a/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalUnsupportedOpenGaussParserIT.java b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalUnsupportedOpenGaussParserIT.java
new file mode 100644
index 00000000000..204f0b021e7
--- /dev/null
+++ b/sql-parser/dialect/opengauss/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/opengauss/InternalUnsupportedOpenGaussParserIT.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.test.it.sql.parser.it.opengauss;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedOpenGaussParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedOpenGaussParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("openGauss");
+    }
+}
diff --git a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalOracleParserIT.java b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalOracleParserIT.java
deleted file mode 100644
index dedd41dc450..00000000000
--- a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalOracleParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.oracle;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalOracleParserIT extends InternalSQLParserIT {
-    
-    public InternalOracleParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("Oracle");
-    }
-}
diff --git a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalUnsupportedOracleParserIT.java b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalUnsupportedOracleParserIT.java
deleted file mode 100644
index 42d9ebffc07..00000000000
--- a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/sql/parser/oracle/InternalUnsupportedOracleParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.oracle;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedOracleParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedOracleParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("Oracle");
-    }
-}
diff --git a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalOracleParserIT.java b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalOracleParserIT.java
new file mode 100644
index 00000000000..7d4f4e28d10
--- /dev/null
+++ b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalOracleParserIT.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.test.it.sql.parser.it.oracle;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalOracleParserIT extends InternalSQLParserIT {
+    
+    public InternalOracleParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("Oracle");
+    }
+}
diff --git a/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalUnsupportedOracleParserIT.java b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalUnsupportedOracleParserIT.java
new file mode 100644
index 00000000000..0464791b30b
--- /dev/null
+++ b/sql-parser/dialect/oracle/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/oracle/InternalUnsupportedOracleParserIT.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.test.it.sql.parser.it.oracle;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedOracleParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedOracleParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("Oracle");
+    }
+}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserIT.java
deleted file mode 100644
index d8b3ccd65ac..00000000000
--- a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserIT.java
+++ /dev/null
@@ -1,41 +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.sql.parser.postgresql.external;
-
-import org.apache.shardingsphere.test.sql.parser.external.ExternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.external.ExternalSQLParserTestParameter;
-import org.apache.shardingsphere.test.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
-import org.apache.shardingsphere.test.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.net.URI;
-import java.util.Collection;
-
-public final class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
-    
-    public ExternalPostgreSQLParserIT(final ExternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0} (PostgreSQL) -> {1}")
-    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
-        String caseURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/sql";
-        String resultURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/expected";
-        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "PostgreSQL", "CSV");
-    }
-}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalPostgreSQLParserIT.java
deleted file mode 100644
index 243bfe779e1..00000000000
--- a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalPostgreSQLParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.postgresql.internal;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalPostgreSQLParserIT extends InternalSQLParserIT {
-    
-    public InternalPostgreSQLParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("PostgreSQL");
-    }
-}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.java
deleted file mode 100644
index 843b22c04bc..00000000000
--- a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.postgresql.internal;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedPostgreSQLParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedPostgreSQLParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("PostgreSQL");
-    }
-}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
new file mode 100644
index 00000000000..a6bdec9053e
--- /dev/null
+++ b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
@@ -0,0 +1,41 @@
+/*
+ * 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.it.postgresql.external;
+
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.net.URI;
+import java.util.Collection;
+
+public final class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
+    
+    public ExternalPostgreSQLParserIT(final ExternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0} (PostgreSQL) -> {1}")
+    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
+        String caseURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/sql";
+        String resultURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/expected";
+        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "PostgreSQL", "CSV");
+    }
+}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalPostgreSQLParserIT.java
new file mode 100644
index 00000000000..5022758cf6d
--- /dev/null
+++ b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalPostgreSQLParserIT.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.test.it.sql.parser.it.postgresql.internal;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalPostgreSQLParserIT extends InternalSQLParserIT {
+    
+    public InternalPostgreSQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("PostgreSQL");
+    }
+}
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.java
new file mode 100644
index 00000000000..2bc8c2d8de5
--- /dev/null
+++ b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/internal/InternalUnsupportedPostgreSQLParserIT.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.test.it.sql.parser.it.postgresql.internal;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedPostgreSQLParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedPostgreSQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("PostgreSQL");
+    }
+}
diff --git a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalSQL92ParserIT.java b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalSQL92ParserIT.java
deleted file mode 100644
index 3d46ebcd740..00000000000
--- a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalSQL92ParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.sql92;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalSQL92ParserIT extends InternalSQLParserIT {
-    
-    public InternalSQL92ParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("SQL92");
-    }
-}
diff --git a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalUnsupportedSQL92ParserIT.java b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalUnsupportedSQL92ParserIT.java
deleted file mode 100644
index fe9d5f6304d..00000000000
--- a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/InternalUnsupportedSQL92ParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.sql92;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedSQL92ParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedSQL92ParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("SQL92");
-    }
-}
diff --git a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalSQL92ParserIT.java b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalSQL92ParserIT.java
new file mode 100644
index 00000000000..84e0fbd4c64
--- /dev/null
+++ b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalSQL92ParserIT.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.test.it.sql.parser.it.sql92;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalSQL92ParserIT extends InternalSQLParserIT {
+    
+    public InternalSQL92ParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("SQL92");
+    }
+}
diff --git a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalUnsupportedSQL92ParserIT.java b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalUnsupportedSQL92ParserIT.java
new file mode 100644
index 00000000000..8e1947632f2
--- /dev/null
+++ b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sql92/InternalUnsupportedSQL92ParserIT.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.test.it.sql.parser.it.sql92;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedSQL92ParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedSQL92ParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("SQL92");
+    }
+}
diff --git a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalSQLServerParserIT.java b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalSQLServerParserIT.java
deleted file mode 100644
index 54c03dc239a..00000000000
--- a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalSQLServerParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.sqlserver;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalSQLServerParserIT extends InternalSQLParserIT {
-    
-    public InternalSQLServerParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return getTestParameters("SQLServer");
-    }
-}
diff --git a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalUnsupportedSQLServerParserIT.java b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalUnsupportedSQLServerParserIT.java
deleted file mode 100644
index 1cbe81600a3..00000000000
--- a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/sql/parser/sqlserver/InternalUnsupportedSQLServerParserIT.java
+++ /dev/null
@@ -1,39 +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.sql.parser.sqlserver;
-
-import org.apache.shardingsphere.test.sql.parser.internal.InternalUnsupportedSQLParserIT;
-import org.apache.shardingsphere.test.sql.parser.internal.InternalSQLParserTestParameter;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.util.Collection;
-
-@RunWith(Parameterized.class)
-public final class InternalUnsupportedSQLServerParserIT extends InternalUnsupportedSQLParserIT {
-    
-    public InternalUnsupportedSQLServerParserIT(final InternalSQLParserTestParameter testParameter) {
-        super(testParameter);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
-        return InternalUnsupportedSQLParserIT.getTestParameters("SQLServer");
-    }
-}
diff --git a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalSQLServerParserIT.java b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalSQLServerParserIT.java
new file mode 100644
index 00000000000..7ed39ada685
--- /dev/null
+++ b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalSQLServerParserIT.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.test.it.sql.parser.it.sqlserver;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalSQLServerParserIT extends InternalSQLParserIT {
+    
+    public InternalSQLServerParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return getTestParameters("SQLServer");
+    }
+}
diff --git a/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalUnsupportedSQLServerParserIT.java b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalUnsupportedSQLServerParserIT.java
new file mode 100644
index 00000000000..ed97d86ee16
--- /dev/null
+++ b/sql-parser/dialect/sqlserver/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/sqlserver/InternalUnsupportedSQLServerParserIT.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.test.it.sql.parser.it.sqlserver;
+
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalUnsupportedSQLParserIT;
+import org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserTestParameter;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+@RunWith(Parameterized.class)
+public final class InternalUnsupportedSQLServerParserIT extends InternalUnsupportedSQLParserIT {
+    
+    public InternalUnsupportedSQLServerParserIT(final InternalSQLParserTestParameter testParameter) {
+        super(testParameter);
+    }
+    
+    @Parameters(name = "{0}")
+    public static Collection<InternalSQLParserTestParameter> getTestParameters() {
+        return InternalUnsupportedSQLParserIT.getTestParameters("SQLServer");
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
new file mode 100644
index 00000000000..c7fc1703e66
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
@@ -0,0 +1,62 @@
+/*
+ * 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.external;
+
+import org.apache.shardingsphere.infra.util.exception.external.ShardingSphereExternalException;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
+import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
+import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporterCreatorFactory;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Properties;
+
+@RunWith(Parameterized.class)
+public abstract class ExternalSQLParserIT {
+    
+    private final String sqlCaseId;
+    
+    private final String sql;
+    
+    private final String databaseType;
+    
+    private final SQLParseResultReporter resultReporter;
+    
+    protected ExternalSQLParserIT(final ExternalSQLParserTestParameter testParameter) {
+        sqlCaseId = testParameter.getSqlCaseId();
+        sql = testParameter.getSql();
+        databaseType = testParameter.getDatabaseType();
+        resultReporter = SQLParseResultReporterCreatorFactory.newInstance(testParameter.getReportType()).create(databaseType);
+    }
+    
+    @Test
+    public final void assertParseSQL() {
+        boolean isSuccess = true;
+        try {
+            ParseASTNode parseASTNode = new SQLParserEngine(databaseType, new CacheOption(128, 1024L)).parse(sql, false);
+            new SQLVisitorEngine(databaseType, "STATEMENT", true, new Properties()).visit(parseASTNode);
+        } catch (final ShardingSphereExternalException | ClassCastException | NullPointerException | IllegalArgumentException | IndexOutOfBoundsException ignore) {
+            isSuccess = false;
+        }
+        resultReporter.printResult(sqlCaseId, databaseType, isSuccess, sql);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
new file mode 100644
index 00000000000..e3d76e1268d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
@@ -0,0 +1,42 @@
+/*
+ * 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.external;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * External SQL parser test parameter.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class ExternalSQLParserTestParameter {
+    
+    private final String sqlCaseId;
+    
+    private final String databaseType;
+    
+    private final String sql;
+    
+    private final String reportType;
+    
+    @Override
+    public String toString() {
+        return String.format("%s (%s) -> %s", sqlCaseId, databaseType, sql);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/env/SQLParserExternalITEnvironment.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/env/SQLParserExternalITEnvironment.java
new file mode 100644
index 00000000000..0e20f0573de
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/env/SQLParserExternalITEnvironment.java
@@ -0,0 +1,74 @@
+/*
+ * 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.external.env;
+
+import lombok.Getter;
+import lombok.SneakyThrows;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * SQL parser external IT environment.
+ */
+@Getter
+public final class SQLParserExternalITEnvironment {
+    
+    private static final String SQL_PARSER_EXTERNAL_IT_ENABLED_KEY = "sql.parser.external.it.enabled";
+    
+    private static final String SQL_PARSER_EXTERNAL_IT_REPORT_PATH = "sql.parser.external.it.report.path";
+    
+    private static final String SQL_PARSER_EXTERNAL_IT_REPORT_TYPE = "sql.parser.external.it.report.type";
+    
+    private static final SQLParserExternalITEnvironment INSTANCE = new SQLParserExternalITEnvironment();
+    
+    private final boolean sqlParserITEnabled;
+    
+    private final String resultPath;
+    
+    private final String resultProcessorType;
+    
+    private SQLParserExternalITEnvironment() {
+        Properties props = loadProperties();
+        sqlParserITEnabled = Boolean.parseBoolean(props.get(SQL_PARSER_EXTERNAL_IT_ENABLED_KEY).toString());
+        resultPath = props.getOrDefault(SQL_PARSER_EXTERNAL_IT_REPORT_PATH, "/tmp/").toString();
+        resultProcessorType = props.getOrDefault(SQL_PARSER_EXTERNAL_IT_REPORT_TYPE, "LOG").toString();
+    }
+    
+    /**
+     * Get instance.
+     *
+     * @return got instance
+     */
+    public static SQLParserExternalITEnvironment getInstance() {
+        return INSTANCE;
+    }
+    
+    @SneakyThrows(IOException.class)
+    private Properties loadProperties() {
+        Properties result = new Properties();
+        try (InputStream inputStream = SQLParserExternalITEnvironment.class.getClassLoader().getResourceAsStream("env/sql-parser-external-it-env.properties")) {
+            result.load(inputStream);
+        }
+        for (String each : System.getProperties().stringPropertyNames()) {
+            result.setProperty(each, System.getProperty(each));
+        }
+        return result;
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
new file mode 100644
index 00000000000..723bd19733b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
@@ -0,0 +1,139 @@
+/*
+ * 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.external.loader;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+import org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * External SQL parser test parameter loader.
+ */
+@RequiredArgsConstructor
+@Slf4j
+public final class ExternalSQLParserTestParameterLoader {
+    
+    private final TestParameterLoadStrategy loadStrategy;
+    
+    /**
+     * Load SQL parser test parameters.
+     *
+     * @param sqlCaseURI SQL case URI
+     * @param resultURI result URI
+     * @param databaseType database type
+     * @param reportType report type
+     * @return loaded test parameters
+     */
+    public Collection<ExternalSQLParserTestParameter> load(final URI sqlCaseURI, final URI resultURI, final String databaseType, final String reportType) {
+        if (!SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled()) {
+            return Collections.emptyList();
+        }
+        Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
+        Map<String, FileSummary> sqlCaseFileSummaries = loadStrategy.loadSQLCaseFileSummaries(sqlCaseURI).stream().collect(Collectors.toMap(FileSummary::getFileName, v -> v, (k, v) -> v));
+        Map<String, FileSummary> resultFileSummaries = loadStrategy.loadSQLCaseFileSummaries(resultURI).stream().collect(Collectors.toMap(FileSummary::getFileName, v -> v, (k, v) -> v));
+        for (Entry<String, FileSummary> entry : sqlCaseFileSummaries.entrySet()) {
+            String fileName = entry.getKey();
+            String sqlCaseFileContent = loadContent(URI.create(entry.getValue().getAccessURI()));
+            String resultFileContent = resultFileSummaries.containsKey(fileName) ? loadContent(URI.create(resultFileSummaries.get(fileName).getAccessURI())) : "";
+            result.addAll(createTestParameters(fileName, sqlCaseFileContent, resultFileContent, databaseType, reportType));
+        }
+        if (result.isEmpty()) {
+            result.add(new ExternalSQLParserTestParameter("", databaseType, "", reportType));
+        }
+        return result;
+    }
+    
+    private String loadContent(final URI uri) {
+        try (
+                InputStreamReader in = new InputStreamReader(uri.toURL().openStream());
+                BufferedReader reader = new BufferedReader(in)) {
+            return reader.lines().collect(Collectors.joining(System.lineSeparator()));
+        } catch (final IOException ex) {
+            log.warn("Load failed, reason is: ", ex);
+            return "";
+        }
+    }
+    
+    private Collection<ExternalSQLParserTestParameter> createTestParameters(final String sqlCaseFileName,
+                                                                            final String sqlCaseFileContent, final String resultFileContent, final String databaseType, final String reportType) {
+        Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
+        String[] rawCaseLines = sqlCaseFileContent.split("\n");
+        String[] rawResultLines = resultFileContent.split("\n");
+        String completedSQL = "";
+        int sqlCaseEnum = 1;
+        int statementLines = 0;
+        int resultIndex = 0;
+        boolean inProcedure = false;
+        for (String each : rawCaseLines) {
+            inProcedure = isInProcedure(inProcedure, each.trim());
+            completedSQL = getStatement(completedSQL, each.trim(), inProcedure);
+            statementLines = completedSQL.isEmpty() ? 0 : statementLines + 1;
+            if (completedSQL.contains(";") && !inProcedure) {
+                resultIndex = searchInResultContent(resultIndex, rawResultLines, completedSQL, statementLines);
+                if (resultIndex >= rawResultLines.length || !rawResultLines[resultIndex].contains("ERROR")) {
+                    String sqlCaseId = sqlCaseFileName + sqlCaseEnum;
+                    result.add(new ExternalSQLParserTestParameter(sqlCaseId, databaseType, completedSQL, reportType));
+                    sqlCaseEnum++;
+                }
+                completedSQL = "";
+                statementLines = 0;
+            }
+        }
+        return result;
+    }
+    
+    private static boolean isInProcedure(final boolean inProcedure, final String statementLines) {
+        if (statementLines.contains("{") && statementLines.contains("}")) {
+            return inProcedure;
+        }
+        return (statementLines.contains("{") || statementLines.contains("}") || statementLines.contains("$$")) != inProcedure;
+    }
+    
+    private static String getStatement(final String completedSQL, final String rawSQLLine, final boolean inProcedure) {
+        return (rawSQLLine.isEmpty() || isComment(rawSQLLine)) && !inProcedure ? "" : completedSQL + rawSQLLine + " ";
+    }
+    
+    private static boolean isComment(final String statement) {
+        return statement.startsWith("#") || statement.startsWith("/") || statement.startsWith("--") || statement.startsWith(":") || statement.startsWith("\\");
+    }
+    
+    private static int searchInResultContent(final int resultIndex, final String[] resultLines, final String completedSQL, final int statementLines) {
+        int index = resultIndex;
+        while (index < resultLines.length && !completedSQL.startsWith(resultLines[index].trim())) {
+            index++;
+        }
+        if (index != resultLines.length) {
+            return index + statementLines;
+        }
+        return resultIndex;
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java
new file mode 100644
index 00000000000..78dc5c06771
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java
@@ -0,0 +1,37 @@
+/*
+ * 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.external.loader.strategy;
+
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+
+import java.net.URI;
+import java.util.Collection;
+
+/**
+ * Test parameter load strategy.
+ */
+public interface TestParameterLoadStrategy {
+    
+    /**
+     * Load SQL case file summaries.
+     * 
+     * @param uri URL to be loaded
+     * @return loaded SQL file summaries
+     */
+    Collection<FileSummary> loadSQLCaseFileSummaries(URI uri);
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
new file mode 100644
index 00000000000..0dd27ff21a0
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
@@ -0,0 +1,85 @@
+/*
+ * 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.external.loader.strategy.impl;
+
+import com.jayway.jsonpath.JsonPath;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Test parameter load strategy with GitHub.
+ */
+@Slf4j
+public final class GitHubTestParameterLoadStrategy implements TestParameterLoadStrategy {
+    
+    @Override
+    public Collection<FileSummary> loadSQLCaseFileSummaries(final URI uri) {
+        String content = loadContent(getGitHubApiUri(uri));
+        if (content.isEmpty()) {
+            return Collections.emptyList();
+        }
+        Collection<FileSummary> result = new LinkedList<>();
+        List<String> fileNames = JsonPath.parse(content).read("$..name");
+        List<String> folderTypes = JsonPath.parse(content).read("$..type");
+        List<String> downloadURLs = JsonPath.parse(content).read("$..download_url");
+        List<String> htmlURLs = JsonPath.parse(content).read("$..html_url");
+        int length = JsonPath.parse(content).read("$.length()");
+        for (int i = 0; i < length; i++) {
+            String fileName = fileNames.get(i).split("\\.")[0];
+            String folderType = folderTypes.get(i);
+            String downloadURL = downloadURLs.get(i);
+            String htmlURL = htmlURLs.get(i);
+            if ("file".equals(folderType)) {
+                result.add(new FileSummary(fileName, downloadURL));
+            } else if ("dir".equals(folderType)) {
+                result.addAll(loadSQLCaseFileSummaries(URI.create(htmlURL)));
+            }
+        }
+        return result;
+    }
+    
+    private URI getGitHubApiUri(final URI sqlCaseURI) {
+        String[] patches = sqlCaseURI.toString().split("/", 8);
+        String casesOwner = patches[3];
+        String casesRepo = patches[4];
+        String casesDirectory = patches[7];
+        return URI.create(String.join("/", "https://api.github.com/repos", casesOwner, casesRepo, "contents", casesDirectory));
+    }
+    
+    private String loadContent(final URI casesURI) {
+        try (
+                InputStreamReader in = new InputStreamReader(casesURI.toURL().openStream());
+                BufferedReader reader = new BufferedReader(in)) {
+            return reader.lines().collect(Collectors.joining(System.lineSeparator()));
+        } catch (final IOException ex) {
+            log.warn("Load failed, reason is: ", ex);
+            return "";
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
new file mode 100644
index 00000000000..a6e87924119
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
@@ -0,0 +1,47 @@
+/*
+ * 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.external.loader.strategy.impl;
+
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.stream.Stream;
+
+/**
+ * Test parameter load strategy with local file.
+ */
+public final class LocalFileTestParameterLoadStrategy implements TestParameterLoadStrategy {
+    
+    @SneakyThrows
+    @Override
+    public Collection<FileSummary> loadSQLCaseFileSummaries(final URI uri) {
+        final Collection<FileSummary> result = new LinkedList<>();
+        try (Stream<Path> stream = Files.walk(Paths.get(uri))) {
+            stream.filter(each -> each.toString().endsWith(".sql"))
+                    .forEach(each -> result.add(new FileSummary(each.getFileName().toString(), each.toUri().toString())));
+        }
+        return result;
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java
new file mode 100644
index 00000000000..4368d61f8e1
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java
@@ -0,0 +1,35 @@
+/*
+ * 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.external.loader.summary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * Assertable file summary.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class AssertableFileSummary {
+    
+    private final String fileName;
+    
+    private final String sqlCaseFileAccessURL;
+    
+    private final String resultFileAccessURL;
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java
new file mode 100644
index 00000000000..9774f6fbfb2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java
@@ -0,0 +1,33 @@
+/*
+ * 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.external.loader.summary;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * File summary.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class FileSummary {
+    
+    private final String fileName;
+    
+    private final String accessURI;
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporter.java
new file mode 100644
index 00000000000..983df4cb91a
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.external.result;
+
+/**
+ * SQL parse result reporter.
+ */
+public interface SQLParseResultReporter {
+    
+    /**
+     * Print result.
+     * 
+     * @param sqlCaseId SQL case ID
+     * @param databaseType database type
+     * @param sql SQL
+     * @param isSuccess whether success
+     */
+    void printResult(String sqlCaseId, String databaseType, boolean isSuccess, String sql);
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
new file mode 100644
index 00000000000..ed40b99bcbf
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
@@ -0,0 +1,34 @@
+/*
+ * 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.external.result;
+
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
+
+/**
+ * SQL parse result reporter creator.
+ */
+public interface SQLParseResultReporterCreator extends TypedSPI {
+    
+    /**
+     * Create SQL parse result reporter.
+     * 
+     * @param databaseType database type
+     * @return created SQL parse result reporter
+     */
+    SQLParseResultReporter create(String databaseType);
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreatorFactory.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreatorFactory.java
new file mode 100644
index 00000000000..8e545193c05
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreatorFactory.java
@@ -0,0 +1,44 @@
+/*
+ * 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.external.result;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPIRegistry;
+
+/**
+ * SQL parse result reporter creator factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLParseResultReporterCreatorFactory {
+    
+    static {
+        ShardingSphereServiceLoader.register(SQLParseResultReporterCreator.class);
+    }
+    
+    /**
+     * Create new instance of SQL parse result reporter creator.
+     * 
+     * @param type type
+     * @return new instance of SQL parse result reporter creator
+     */
+    public static SQLParseResultReporterCreator newInstance(final String type) {
+        return TypedSPIRegistry.getRegisteredService(SQLParseResultReporterCreator.class, type);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
new file mode 100644
index 00000000000..f84d14ea42d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
@@ -0,0 +1,60 @@
+/*
+ * 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.external.result.type.csv;
+
+import lombok.SneakyThrows;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVPrinter;
+import org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
+
+import java.io.File;
+import java.io.FileWriter;
+
+/**
+ *  SQL parse result reporter for CSV.
+ */
+public final class CsvSQLParseResultReporter implements SQLParseResultReporter {
+    
+    private final CSVPrinter printer;
+    
+    @SneakyThrows
+    public CsvSQLParseResultReporter(final String databaseType) {
+        File csvFile = new File(SQLParserExternalITEnvironment.getInstance().getResultPath() + databaseType + "-result.csv");
+        printHeader(csvFile);
+        printer = new CSVPrinter(new FileWriter(csvFile, true), CSVFormat.DEFAULT.builder().setSkipHeaderRecord(true).build());
+    }
+    
+    @SneakyThrows
+    private void printHeader(final File csvFile) {
+        if (csvFile.exists()) {
+            return;
+        }
+        try (CSVPrinter csvHeaderPrinter = new CSVPrinter(new FileWriter(csvFile), CSVFormat.DEFAULT.builder().setSkipHeaderRecord(false).build())) {
+            csvHeaderPrinter.printRecord("SQLCaseId", "DatabaseType", "Result", "SQL");
+            csvHeaderPrinter.flush();
+        }
+    }
+    
+    @SneakyThrows
+    @Override
+    public void printResult(final String sqlCaseId, final String databaseType, final boolean isSuccess, final String sql) {
+        printer.printRecord(sqlCaseId, databaseType, isSuccess ? "success" : "failed", sql);
+        printer.flush();
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
new file mode 100644
index 00000000000..e9694bab3cd
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
@@ -0,0 +1,37 @@
+/*
+ * 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.external.result.type.csv;
+
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporterCreator;
+
+/**
+ * SQL parse result reporter creator for CSV.
+ */
+public final class CsvSQLParseResultReporterCreator implements SQLParseResultReporterCreator {
+    
+    @Override
+    public SQLParseResultReporter create(final String databaseType) {
+        return new CsvSQLParseResultReporter(databaseType);
+    }
+    
+    @Override
+    public String getType() {
+        return "CSV";
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
new file mode 100644
index 00000000000..2392e4dec6b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
@@ -0,0 +1,35 @@
+/*
+ * 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.external.result.type.log;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
+
+/**
+ * SQL parse result reporter for log.
+ */
+@Slf4j
+public final class LogSQLParseResultReporter implements SQLParseResultReporter {
+    
+    @Override
+    public void printResult(final String sqlCaseId, final String databaseType, final boolean isSuccess, final String sql) {
+        if (!isSuccess) {
+            log.warn("SQL parse failed. SQL Case ID is: {}, database type is: {}, SQL is: {}", sqlCaseId, databaseType, sql);
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
new file mode 100644
index 00000000000..12d2490ebdf
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
@@ -0,0 +1,37 @@
+/*
+ * 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.external.result.type.log;
+
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
+import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporterCreator;
+
+/**
+ * SQL parse result reporter creator for log.
+ */
+public final class LogSQLParseResultReporterCreator implements SQLParseResultReporterCreator {
+    
+    @Override
+    public SQLParseResultReporter create(final String databaseType) {
+        return new LogSQLParseResultReporter();
+    }
+    
+    @Override
+    public String getType() {
+        return "LOG";
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
new file mode 100644
index 00000000000..cbedd870509
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
@@ -0,0 +1,86 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.distsql.parser.engine.api.DistSQLStatementParserEngine;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
+import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.SQLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.SQLParserTestCases;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistry;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.SQLCases;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.registry.SQLCasesRegistry;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+public abstract class InternalSQLParserIT {
+    
+    private static final SQLCases SQL_CASES = SQLCasesRegistry.getInstance().getCases();
+    
+    private static final SQLParserTestCases SQL_PARSER_TEST_CASES = SQLParserTestCasesRegistry.getInstance().getCases();
+    
+    private final String sqlCaseId;
+    
+    private final String databaseType;
+    
+    private final SQLCaseType sqlCaseType;
+    
+    public InternalSQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        sqlCaseId = testParameter.getSqlCaseId();
+        databaseType = testParameter.getDatabaseType();
+        sqlCaseType = testParameter.getSqlCaseType();
+    }
+    
+    protected static Collection<InternalSQLParserTestParameter> getTestParameters(final String... databaseTypes) {
+        Collection<InternalSQLParserTestParameter> result = new LinkedList<>();
+        for (InternalSQLParserTestParameter each : SQL_CASES.generateTestParameters(Arrays.stream(databaseTypes).collect(Collectors.toSet()))) {
+            if (!isPlaceholderWithoutParameter(each)) {
+                result.add(each);
+            }
+        }
+        return result;
+    }
+    
+    private static boolean isPlaceholderWithoutParameter(final InternalSQLParserTestParameter testParameter) {
+        return SQLCaseType.Placeholder == testParameter.getSqlCaseType() && SQL_PARSER_TEST_CASES.get(testParameter.getSqlCaseId()).getParameters().isEmpty();
+    }
+    
+    @Test
+    public final void assertSupportedSQL() {
+        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
+        SQLStatement actual = parseSQLStatement("H2".equals(databaseType) ? "MySQL" : databaseType, sql);
+        SQLParserTestCase expected = SQL_PARSER_TEST_CASES.get(sqlCaseId);
+        SQLStatementAssert.assertIs(new SQLCaseAssertContext(sqlCaseId, sql, expected.getParameters(), sqlCaseType), actual, expected);
+    }
+    
+    private SQLStatement parseSQLStatement(final String databaseType, final String sql) {
+        return "ShardingSphere".equals(databaseType)
+                ? new DistSQLStatementParserEngine().parse(sql)
+                : new SQLVisitorEngine(databaseType, "STATEMENT", true, new Properties()).visit(new SQLParserEngine(databaseType, new CacheOption(128, 1024L)).parse(sql, false));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserTestParameter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserTestParameter.java
new file mode 100644
index 00000000000..3184710f3e6
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserTestParameter.java
@@ -0,0 +1,41 @@
+/*
+ * 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;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+/**
+ * Internal SQL parser test parameter.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class InternalSQLParserTestParameter {
+    
+    private final String sqlCaseId;
+    
+    private final SQLCaseType sqlCaseType;
+    
+    private final String databaseType;
+    
+    @Override
+    public String toString() {
+        return String.format("%s (%s) -> %s", sqlCaseId, sqlCaseType, databaseType);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalUnsupportedSQLParserIT.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalUnsupportedSQLParserIT.java
new file mode 100644
index 00000000000..a7be08cc02d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalUnsupportedSQLParserIT.java
@@ -0,0 +1,64 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
+import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
+import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.SQLCases;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.registry.UnsupportedSQLCasesRegistry;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Properties;
+
+public abstract class InternalUnsupportedSQLParserIT {
+    
+    private static final SQLCases SQL_CASES = UnsupportedSQLCasesRegistry.getInstance().getCases();
+    
+    private final String sqlCaseId;
+    
+    private final String databaseType;
+    
+    private final SQLCaseType sqlCaseType;
+    
+    public InternalUnsupportedSQLParserIT(final InternalSQLParserTestParameter testParameter) {
+        sqlCaseId = testParameter.getSqlCaseId();
+        databaseType = testParameter.getDatabaseType();
+        sqlCaseType = testParameter.getSqlCaseType();
+    }
+    
+    protected static Collection<InternalSQLParserTestParameter> getTestParameters(final String databaseType) {
+        return SQL_CASES.generateTestParameters(Collections.singleton(databaseType));
+    }
+    
+    @Test(expected = Exception.class)
+    // TODO should expect SQLParsingException only
+    public final void assertUnsupportedSQL() {
+        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, Collections.emptyList());
+        String databaseType = "H2".equals(this.databaseType) ? "MySQL" : this.databaseType;
+        CacheOption cacheOption = new CacheOption(128, 1024L);
+        ParseASTNode parseContext = new SQLParserEngine(databaseType, cacheOption).parse(sql, false);
+        // TODO remove SQLStatement sqlStatement =
+        SQLStatement sqlStatement = new SQLVisitorEngine(databaseType, "STATEMENT", true, new Properties()).visit(parseContext);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/SQLCaseAssertContext.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/SQLCaseAssertContext.java
new file mode 100644
index 00000000000..55f2c5fa275
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/SQLCaseAssertContext.java
@@ -0,0 +1,79 @@
+/*
+ * 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.asserts;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import java.util.List;
+
+/**
+ * SQL case assert context.
+ */
+@RequiredArgsConstructor
+public final class SQLCaseAssertContext {
+    
+    private final String caseId;
+    
+    private final String sql;
+    
+    private final List<String> params;
+    
+    @Getter
+    private final SQLCaseType caseType;
+    
+    /**
+     * Get message text.
+     * 
+     * @param failureMessage failure message
+     * @return got message text
+     */
+    public String getText(final String failureMessage) {
+        StringBuilder result = new StringBuilder(System.lineSeparator());
+        appendSQLCaseId(result);
+        appendSQL(result);
+        appendFailureMessage(failureMessage, result);
+        return result.toString();
+    }
+    
+    private void appendSQLCaseId(final StringBuilder builder) {
+        builder.append("SQL Case ID : ");
+        builder.append(caseId);
+        builder.append(System.lineSeparator());
+    }
+    
+    private void appendSQL(final StringBuilder builder) {
+        builder.append("SQL         : ");
+        if (SQLCaseType.Placeholder == caseType) {
+            builder.append(sql);
+            builder.append(System.lineSeparator());
+            builder.append("SQL Params  : ");
+            builder.append(params);
+            builder.append(System.lineSeparator());
+        } else {
+            builder.append(sql);
+        }
+    }
+    
+    private void appendFailureMessage(final String failureMessage, final StringBuilder builder) {
+        builder.append(System.lineSeparator());
+        builder.append(failureMessage);
+        builder.append(System.lineSeparator());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/SQLSegmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/SQLSegmentAssert.java
new file mode 100644
index 00000000000..72409787ea1
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/SQLSegmentAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.segment;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.ExpectedSQLSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ *  SQL segment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLSegmentAssert {
+    
+    /**
+     * Assert generic attributes of actual SQL segment are same with expected SQL segment.
+     * 
+     * @param assertContext assert context
+     * @param actual actual SQL segment
+     * @param expected expected SQL segment
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SQLSegment actual, final ExpectedSQLSegment expected) {
+        assertStartIndex(assertContext, actual, expected);
+        assertStopIndex(assertContext, actual, expected);
+    }
+    
+    private static void assertStartIndex(final SQLCaseAssertContext assertContext, final SQLSegment actual, final ExpectedSQLSegment expected) {
+        int expectedStartIndex = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralStartIndex() ? expected.getLiteralStartIndex() : expected.getStartIndex();
+        assertThat(assertContext.getText(String.format("`%s`'s start index assertion error: ", actual.getClass().getSimpleName())), actual.getStartIndex(), is(expectedStartIndex));
+    }
+    
+    private static void assertStopIndex(final SQLCaseAssertContext assertContext, final SQLSegment actual, final ExpectedSQLSegment expected) {
+        int expectedStopIndex = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralStopIndex() ? expected.getLiteralStopIndex() : expected.getStopIndex();
+        assertThat(assertContext.getText(String.format("`%s`'s stop index assertion error: ", actual.getClass().getSimpleName())), actual.getStopIndex(), is(expectedStopIndex));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java
new file mode 100644
index 00000000000..47dfe84025e
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentAssert.java
@@ -0,0 +1,58 @@
+/*
+ * 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.asserts.segment.assignment;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.assignment.ExpectedAssignment;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Assignment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AssignmentAssert {
+    
+    /**
+     * Assert actual assignment segment is correct with expected assignment.
+     *
+     * @param assertContext assert context
+     * @param actual actual assignment segment
+     * @param expected expected assignment
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AssignmentSegment actual, final ExpectedAssignment expected) {
+        if (expected.getColumns().isEmpty()) {
+            ColumnAssert.assertIs(assertContext, actual.getColumns().get(0), expected.getColumn());
+        } else {
+            assertThat(assertContext.getText("Assignment columns size assertion error: "), actual.getColumns().size(), is(expected.getColumns().size()));
+            int count = 0;
+            for (ColumnSegment each : actual.getColumns()) {
+                ColumnAssert.assertIs(assertContext, each, expected.getColumns().get(count));
+                count++;
+            }
+        }
+        // TODO assert assign operator
+        AssignmentValueAssert.assertIs(assertContext, actual.getValue(), expected.getAssignmentValue());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentValueAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentValueAssert.java
new file mode 100644
index 00000000000..e3b9e5f1e51
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/assignment/AssignmentValueAssert.java
@@ -0,0 +1,66 @@
+/*
+ * 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.asserts.segment.assignment;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+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.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;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.assignment.ExpectedAssignmentValue;
+
+/**
+ * Assignment value assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AssignmentValueAssert {
+    
+    /**
+     * Assert actual expression segment is correct with expected assignment value.
+     *
+     * @param assertContext assert context
+     * @param actual actual expression segment
+     * @param expected expected assignment value
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ExpressionSegment actual, final ExpectedAssignmentValue expected) {
+        if (actual instanceof ParameterMarkerExpressionSegment) {
+            ExpressionAssert.assertParameterMarkerExpression(assertContext, (ParameterMarkerExpressionSegment) actual, expected.getParameterMarkerExpression());
+        } else if (actual instanceof LiteralExpressionSegment) {
+            ExpressionAssert.assertLiteralExpression(assertContext, (LiteralExpressionSegment) actual, expected.getLiteralExpression());
+            // FIXME should be CommonExpressionProjection, not ExpressionProjectionSegment
+        } else if (actual instanceof ExpressionProjectionSegment) {
+            ExpressionAssert.assertCommonExpression(assertContext, (ExpressionProjectionSegment) actual, expected.getCommonExpression());
+        } else if (actual instanceof ColumnSegment) {
+            ColumnAssert.assertIs(assertContext, (ColumnSegment) actual, expected.getColumn());
+        } else if (actual instanceof SubqueryExpressionSegment) {
+            ExpressionAssert.assertSubqueryExpression(assertContext, (SubqueryExpressionSegment) actual, expected.getSubquery());
+        } else if (actual instanceof FunctionSegment) {
+            ExpressionAssert.assertFunction(assertContext, (FunctionSegment) actual, expected.getFunction());
+        } else if (actual instanceof CommonExpressionSegment) {
+            ExpressionAssert.assertCommonExpression(assertContext, (CommonExpressionSegment) actual, expected.getCommonExpression());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/charset/CharsetAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/charset/CharsetAssert.java
new file mode 100644
index 00000000000..c90b4073f2e
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/charset/CharsetAssert.java
@@ -0,0 +1,56 @@
+/*
+ * 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.asserts.segment.charset;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.charset.CharsetNameSegment;
+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.cases.parser.jaxb.segment.impl.charset.ExpectedCharsetName;
+
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Charset assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CharsetAssert {
+    
+    /**
+     * Assert actual charset name segment is correct with expected charset name.
+     *
+     * @param assertContext assert context
+     * @param actual actual charset name segment
+     * @param expected expected charset name
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final CharsetNameSegment actual, final ExpectedCharsetName expected) {
+        if (null == expected) {
+            assertFalse(assertContext.getText("Actual charset name should not exist."), Optional.ofNullable(actual).isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual charset name should exist."), Optional.ofNullable(actual).isPresent());
+            assertThat(assertContext.getText("charset name assertion error. "), actual.getName(), is(expected.getName()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/column/ColumnAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/column/ColumnAssert.java
new file mode 100644
index 00000000000..56d59d4999b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/column/ColumnAssert.java
@@ -0,0 +1,76 @@
+/*
+ * 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.asserts.segment.column;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+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.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Column assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ColumnAssert {
+    
+    /**
+     * Assert actual column segment is correct with expected column.
+     *
+     * @param assertContext assert context
+     * @param actual actual column segment
+     * @param expected expected column
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnSegment actual, final ExpectedColumn expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Column");
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    /**
+     * Assert actual column segments is correct with expected columns.
+     *
+     * @param assertContext assert context
+     * @param actual actual columns
+     * @param expected expected columns
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<ColumnSegment> actual, final List<ExpectedColumn> expected) {
+        assertThat(assertContext.getText("Columns size assertion error: "), actual.size(), is(expected.size()));
+        int count = 0;
+        for (ColumnSegment each : actual) {
+            assertIs(assertContext, each, expected.get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/cursor/DirectionSegmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/cursor/DirectionSegmentAssert.java
new file mode 100644
index 00000000000..2374682882d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/cursor/DirectionSegmentAssert.java
@@ -0,0 +1,68 @@
+/*
+ * 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.asserts.segment.cursor;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.cursor.DirectionSegment;
+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.cases.parser.jaxb.segment.impl.cursor.ExpectedDirectionSegment;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Direction segment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DirectionSegmentAssert {
+    
+    /**
+     * Assert actual direction segment is correct with expected direction segment.
+     * 
+     * @param assertContext assert context
+     * @param actual actual direction segment
+     * @param expected expected direction segment
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DirectionSegment actual, final ExpectedDirectionSegment expected) {
+        assertDirectionType(assertContext, actual, expected);
+        assertCount(assertContext, actual, expected);
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertDirectionType(final SQLCaseAssertContext assertContext, final DirectionSegment actual, final ExpectedDirectionSegment expected) {
+        if (null == expected.getDirectionType()) {
+            assertFalse(assertContext.getText("Actual direction type should not exist."), actual.getDirectionType().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual direction type should exist."), actual.getDirectionType().isPresent());
+            assertThat(assertContext.getText("Direction type assertion error: "), actual.getDirectionType().get().name(), is(expected.getDirectionType()));
+        }
+    }
+    
+    private static void assertCount(final SQLCaseAssertContext assertContext, final DirectionSegment actual, final ExpectedDirectionSegment expected) {
+        if (null == expected.getCount()) {
+            assertFalse(assertContext.getText("Actual count should not exist."), actual.getCount().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual count should exist."), actual.getCount().isPresent());
+            assertThat(assertContext.getText("Count assertion error: "), actual.getCount().get(), is(expected.getCount()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/database/DatabaseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/database/DatabaseAssert.java
new file mode 100644
index 00000000000..1bcd017ea13
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/database/DatabaseAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.segment.database;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
+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.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.database.ExpectedDatabase;
+
+/**
+ * Database assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DatabaseAssert {
+    
+    /**
+     * Assert actual database segment is correct with expected database.
+     *
+     * @param assertContext assert context
+     * @param actual actual database segment
+     * @param expected expected database
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DatabaseSegment actual, final ExpectedDatabase expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Database");
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
new file mode 100644
index 00000000000..b09012e1b2a
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
@@ -0,0 +1,51 @@
+/*
+ * 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.asserts.segment.definition;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.ColumnDefinitionSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedColumnDefinition;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Column definition assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ColumnDefinitionAssert {
+    
+    /**
+     * Assert actual column definition segment is correct with expected column definition.
+     * 
+     * @param assertContext assert context
+     * @param actual actual column definition segment
+     * @param expected expected column definition
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnDefinitionSegment actual, final ExpectedColumnDefinition expected) {
+        assertThat(assertContext.getText("Column definition name assertion error: "), actual.getColumnName().getIdentifier().getValue(), is(expected.getColumn().getName()));
+        assertThat(assertContext.getText("Column definition data type assertion error: "), actual.getDataType().getDataTypeName(), is(expected.getType()));
+        assertThat(assertContext.getText("Column definition primary key assertion error: "), actual.isPrimaryKey(), is(expected.isPrimaryKey()));
+        TableAssert.assertIs(assertContext, actual.getReferencedTables(), expected.getReferencedTables());
+        assertThat(assertContext.getText("Column definition start index assertion error: "), actual.getStartIndex(), is(expected.getStartIndex()));
+        assertThat(assertContext.getText("Column definition stop index assertion error: "), actual.getStopIndex(), is(expected.getStopIndex()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnPositionAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnPositionAssert.java
new file mode 100644
index 00000000000..468bf13cc3d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnPositionAssert.java
@@ -0,0 +1,64 @@
+/*
+ * 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.asserts.segment.definition;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.position.ColumnAfterPositionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.position.ColumnPositionSegment;
+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.cases.parser.jaxb.segment.impl.definition.ExpectedColumnPosition;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Column position assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ColumnPositionAssert {
+    
+    /**
+     * Assert actual column position segment is correct with expected column position.
+     * 
+     * @param assertContext assert context
+     * @param actual actual column position segment
+     * @param expected expected column position
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnPositionSegment actual, final ExpectedColumnPosition expected) {
+        String actualColumn = null;
+        if (null != actual.getColumnName()) {
+            actualColumn = actual.getColumnName().getQualifiedName();
+        }
+        String expectColumn = null;
+        if (null != expected.getColumn()) {
+            expectColumn = expected.getColumn().getName();
+        }
+        assertThat(assertContext.getText("Column change position name assertion error: "), actualColumn, is(expectColumn));
+        if (actual instanceof ColumnAfterPositionSegment) {
+            assertNotNull(assertContext.getText("Assignments should exist."), expected.getColumn());
+            assertThat(assertContext.getText("Column change position after name assertion error: "), actual.getColumnName().getIdentifier().getValue(), is(expected.getColumn().getName()));
+        } else {
+            assertNull(assertContext.getText("Assignments should not exist."), expected.getColumn());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ConstraintDefinitionAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ConstraintDefinitionAssert.java
new file mode 100644
index 00000000000..dd170eb64da
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ConstraintDefinitionAssert.java
@@ -0,0 +1,80 @@
+/*
+ * 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.asserts.segment.definition;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintDefinitionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedConstraintDefinition;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Constraint definition assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ConstraintDefinitionAssert {
+    
+    /**
+     * Assert actual constraint definition segment is correct with expected constraint definition.
+     * 
+     * @param assertContext assert context
+     * @param actual actual constraint definition segment
+     * @param expected expected constraint definition
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ConstraintDefinitionSegment actual, final ExpectedConstraintDefinition expected) {
+        int count = 0;
+        for (ColumnSegment each : actual.getPrimaryKeyColumns()) {
+            ColumnAssert.assertIs(assertContext, each, expected.getPrimaryKeyColumns().get(count));
+            count++;
+        }
+        assertThat(assertContext.getText("Constraint definition index column size assertion error: "), actual.getIndexColumns().size(), is(expected.getIndexColumns().size()));
+        int indexCount = 0;
+        for (ColumnSegment each : actual.getIndexColumns()) {
+            ColumnAssert.assertIs(assertContext, each, expected.getIndexColumns().get(indexCount));
+            indexCount++;
+        }
+        if (null == expected.getConstraintName()) {
+            assertFalse(assertContext.getText("Actual constraint name should not exist."), actual.getConstraintName().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual constraint name should exist."), actual.getConstraintName().isPresent());
+            assertThat(assertContext.getText("Actual constraint name assertion error."), actual.getConstraintName().get().getIdentifier().getValue(), is(expected.getConstraintName()));
+        }
+        if (null == expected.getIndexName()) {
+            assertFalse(assertContext.getText("Actual index name should not exist."), actual.getIndexName().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual index name should exist."), actual.getIndexName().isPresent());
+            assertThat(assertContext.getText("Actual index name assertion error."), actual.getIndexName().get().getIndexName().getIdentifier().getValue(), is(expected.getIndexName()));
+        }
+        if (null == expected.getReferencedTable()) {
+            assertFalse(assertContext.getText("Actual referenced table should not exist."), actual.getReferencedTable().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual referenced table should exist."), actual.getReferencedTable().isPresent());
+            TableAssert.assertIs(assertContext, actual.getReferencedTable().get(), expected.getReferencedTable());
+        }
+        assertThat(assertContext.getText("Constraint definition start index assertion error: "), actual.getStartIndex(), is(expected.getStartIndex()));
+        assertThat(assertContext.getText("Constraint definition stop index assertion error: "), actual.getStopIndex(), is(expected.getStopIndex()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AlgorithmAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AlgorithmAssert.java
new file mode 100644
index 00000000000..a0844170daf
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AlgorithmAssert.java
@@ -0,0 +1,53 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedAlgorithm;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Algorithm assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AlgorithmAssert {
+    
+    /**
+     * Assert algorithm is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual algorithm
+     * @param expected expected algorithm test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AlgorithmSegment actual, final ExpectedAlgorithm expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual algorithm should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual algorithm should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s algorithm segment assertion error: ", actual.getClass().getSimpleName())), actual.getName(), is(expected.getName()));
+            PropertiesAssert.assertIs(assertContext, actual.getProps(), expected.getProperties());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AutoTableRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AutoTableRuleAssert.java
new file mode 100644
index 00000000000..a28916bd377
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/AutoTableRuleAssert.java
@@ -0,0 +1,64 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.table.AutoTableRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.rdl.AuditStrategyAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedAutoTableRule;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Auto table rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AutoTableRuleAssert {
+    
+    /**
+     * Assert auto table rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual auto table rule
+     * @param expected expected auto table rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AutoTableRuleSegment actual, final ExpectedAutoTableRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual auto table rule should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual auto table rule should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s auto table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getLogicTable(), is(expected.getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s auto table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getDataSourceNodes(), is(expected.getDataSources()));
+            assertThat(assertContext.getText(String.format("`%s`'s auto table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getShardingColumn(), is(expected.getTableStrategyColumn()));
+            assertNotNull(assertContext.getText("key generate should exist."), actual.getKeyGenerateStrategySegment());
+            assertThat(assertContext.getText(String.format("`%s`'s auto table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getKeyGenerateStrategySegment().getKeyGenerateColumn(), is(expected.getKeyGenerateStrategyColumn()));
+            AlgorithmAssert.assertIs(assertContext, actual.getShardingAlgorithmSegment(), expected.getTableStrategy());
+            AlgorithmAssert.assertIs(assertContext, actual.getKeyGenerateStrategySegment().getKeyGenerateAlgorithmSegment(), expected.getKeyGenerateStrategy());
+            AuditStrategyAssert.assertIs(assertContext, actual.getAuditStrategySegment(), expected.getAuditStrategy());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DataSourceAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DataSourceAssert.java
new file mode 100644
index 00000000000..08d87131f70
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DataSourceAssert.java
@@ -0,0 +1,68 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
+import org.apache.shardingsphere.distsql.parser.segment.HostnameAndPortBasedDataSourceSegment;
+import org.apache.shardingsphere.distsql.parser.segment.URLBasedDataSourceSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedDataSource;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Data source assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DataSourceAssert {
+    
+    /**
+     * Assert data source is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual data source
+     * @param expected expected data source test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DataSourceSegment actual, final ExpectedDataSource expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual dataSource should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual dataSource should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actual.getName(), is(expected.getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actual.getUser(), is(expected.getUser()));
+            assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actual.getPassword(), is(expected.getPassword()));
+            PropertiesAssert.assertIs(assertContext, actual.getProps(), expected.getProperties());
+            if (actual instanceof URLBasedDataSourceSegment) {
+                assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), ((URLBasedDataSourceSegment) actual).getUrl(),
+                        is(expected.getUrl()));
+            }
+            if (actual instanceof HostnameAndPortBasedDataSourceSegment) {
+                HostnameAndPortBasedDataSourceSegment actualSegment = (HostnameAndPortBasedDataSourceSegment) actual;
+                assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actualSegment.getHostname(),
+                        is(expected.getHostname()));
+                assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actualSegment.getPort(), is(expected.getPort()));
+                assertThat(assertContext.getText(String.format("`%s`'s datasource segment assertion error: ", actual.getClass().getSimpleName())), actualSegment.getDatabase(), is(expected.getDb()));
+            }
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DatabaseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DatabaseAssert.java
new file mode 100644
index 00000000000..e2096e9c3a4
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/DatabaseAssert.java
@@ -0,0 +1,44 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.database.ExpectedDatabase;
+
+/**
+ * Database assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DatabaseAssert {
+    
+    /**
+     * Assert database is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual database
+     * @param expected expected database test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DatabaseSegment actual, final ExpectedDatabase expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "schema");
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertiesAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertiesAssert.java
new file mode 100644
index 00000000000..d287b7f8262
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertiesAssert.java
@@ -0,0 +1,54 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperty;
+
+import java.util.List;
+import java.util.Properties;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Properties assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class PropertiesAssert {
+    
+    /**
+     * Assert properties is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual properties
+     * @param expected expected properties test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Properties actual, final List<ExpectedProperty> expected) {
+        if (expected.isEmpty()) {
+            assertTrue(assertContext.getText("Actual properties should not exist."), actual.isEmpty());
+        } else {
+            assertNotNull(assertContext.getText("Actual properties should exist."), actual);
+            for (ExpectedProperty each : expected) {
+                PropertyAssert.assertIs(assertContext, actual, each);
+            }
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertyAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertyAssert.java
new file mode 100644
index 00000000000..2d1cf1a7fab
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/PropertyAssert.java
@@ -0,0 +1,53 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperty;
+
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Property assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class PropertyAssert {
+    
+    /**
+     * Assert property is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual property
+     * @param expected expected property test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Properties actual, final ExpectedProperty expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual properties should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual properties should exist."), actual);
+            assertThat(assertContext.getText("properties assertion error: "), actual.getProperty(expected.getKey()), is(expected.getValue()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/SQLSegmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/SQLSegmentAssert.java
new file mode 100644
index 00000000000..35e124d7cdb
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/SQLSegmentAssert.java
@@ -0,0 +1,46 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.ExpectedSQLSegment;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ *  SQL segment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLSegmentAssert {
+    
+    /**
+     * Assert generic attributes of actual SQL segment are same with expected SQL segment.
+     * 
+     * @param assertContext assert context
+     * @param actual actual SQL segment
+     * @param expected expected SQL segment
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SQLSegment actual, final ExpectedSQLSegment expected) {
+        assertThat(assertContext.getText(String.format("`%s`'s start index assertion error: ", actual.getClass().getSimpleName())), actual.getStartIndex(), is(expected.getStartIndex()));
+        assertThat(assertContext.getText(String.format("`%s`'s start index assertion error: ", actual.getClass().getSimpleName())), actual.getStopIndex(), is(expected.getStopIndex()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/TableRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/TableRuleAssert.java
new file mode 100644
index 00000000000..1e2f4f0b39e
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/TableRuleAssert.java
@@ -0,0 +1,73 @@
+/*
+ * 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.asserts.segment.distsql;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.table.TableRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.rdl.AuditStrategyAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedTableRule;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Table rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TableRuleAssert {
+    
+    /**
+     * Assert table rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual table rule
+     * @param expected expected table rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final TableRuleSegment actual, final ExpectedTableRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual table rule should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual table rule should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getLogicTable(), is(expected.getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getDataSourceNodes(), is(expected.getDataNodes()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getTableStrategySegment().getShardingColumn(), is(expected.getTableStrategy().getShardingColumn()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getTableStrategySegment().getType(), is(expected.getTableStrategy().getType()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getTableStrategySegment().getShardingAlgorithm().getName(), is(expected.getTableStrategy().getAlgorithmSegment().getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getDatabaseStrategySegment().getShardingColumn(), is(expected.getDataStrategy().getShardingColumn()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getDatabaseStrategySegment().getType(), is(expected.getDataStrategy().getType()));
+            assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                    actual.getDatabaseStrategySegment().getShardingAlgorithm().getName(), is(expected.getDataStrategy().getAlgorithmSegment().getName()));
+            if (null != actual.getKeyGenerateStrategySegment()) {
+                assertThat(assertContext.getText(String.format("`%s`'s table rule segment assertion error: ", actual.getClass().getSimpleName())),
+                        actual.getKeyGenerateStrategySegment().getKeyGenerateColumn(), is(expected.getKeyGenerateStrategyColumn()));
+            }
+            AuditStrategyAssert.assertIs(assertContext, actual.getAuditStrategySegment(), expected.getAuditStrategy());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/AuditStrategyAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/AuditStrategyAssert.java
new file mode 100644
index 00000000000..22c9a1b5365
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/AuditStrategyAssert.java
@@ -0,0 +1,66 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.strategy.AuditStrategySegment;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.strategy.ShardingAuditorSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedAuditStrategy;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShardingAuditor;
+
+import java.util.Iterator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Audit strategy assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AuditStrategyAssert {
+    
+    /**
+     * Assert audit strategy is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual audit strategy
+     * @param expected expected audit strategy test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AuditStrategySegment actual, final ExpectedAuditStrategy expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual strategy should not exist."), actual);
+        } else {
+            assertThat(actual.isAllowHintDisable(), is(expected.isAllowHintDisable()));
+            assertNotNull(assertContext.getText("Actual sharding auditor segment should exist."), actual.getAuditorSegments());
+            assertThat(actual.getAuditorSegments().size(), is(expected.getAuditors().size()));
+            Iterator<ShardingAuditorSegment> auditorSegmentIterator = actual.getAuditorSegments().iterator();
+            Iterator<ExpectedShardingAuditor> expectedShardingAuditorIterator = expected.getAuditors().iterator();
+            while (auditorSegmentIterator.hasNext() && expectedShardingAuditorIterator.hasNext()) {
+                ShardingAuditorSegment shardingAuditorSegment = auditorSegmentIterator.next();
+                ExpectedShardingAuditor expectedShardingAuditor = expectedShardingAuditorIterator.next();
+                assertThat(shardingAuditorSegment.getAuditorName(), is(expectedShardingAuditor.getAuditorName()));
+                AlgorithmAssert.assertIs(assertContext, shardingAuditorSegment.getAlgorithmSegment(), expectedShardingAuditor.getAlgorithmSegment());
+            }
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java
new file mode 100644
index 00000000000..18bf489d67c
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java
@@ -0,0 +1,58 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedEncryptColumn;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Encrypt column assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class EncryptColumnAssert {
+    
+    /**
+     * Assert encrypt rule statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual encrypt column
+     * @param expected expected encrypt column test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final EncryptColumnSegment actual, final ExpectedEncryptColumn expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual encrypt column should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual encrypt column should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getName(), is(expected.getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getPlainColumn(), is(expected.getPlainColumn()));
+            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getCipherColumn(), is(expected.getCipherColumn()));
+            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getAssistedQueryColumn(), is(expected.getAssistedQueryColumn()));
+            AlgorithmAssert.assertIs(assertContext, actual.getEncryptor(), expected.getEncryptor());
+            AlgorithmAssert.assertIs(assertContext, actual.getAssistedQueryEncryptor(), expected.getAssistedQueryEncryptor());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptRuleAssert.java
new file mode 100644
index 00000000000..5ac6fa4207d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptRuleAssert.java
@@ -0,0 +1,75 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnSegment;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedEncryptColumn;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedEncryptRule;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Encrypt rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class EncryptRuleAssert {
+    
+    /**
+     * Assert encrypt rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual encrypt rule
+     * @param expected expected encrypt rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final EncryptRuleSegment actual, final ExpectedEncryptRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual encrypt rule should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual encrypt rule should exist."), actual);
+            assertThat(assertContext.getText("encrypt rule assertion error: "), actual.getTableName(), is(expected.getName()));
+            assertThat(assertContext.getText("encrypt rule assertion error: "), actual.getQueryWithCipherColumn(), is(expected.getQueryWithCipherColumn()));
+            assertEncryptColumns(assertContext, actual.getColumns(), expected.getColumns());
+        }
+    }
+    
+    private static void assertEncryptColumns(final SQLCaseAssertContext assertContext, final Collection<EncryptColumnSegment> actual, final List<ExpectedEncryptColumn> expected) {
+        if (expected.isEmpty()) {
+            assertNull(assertContext.getText("Actual encrypt column should not exist."), actual);
+        } else {
+            assertFalse(assertContext.getText("Actual encrypt column should exist."), actual.isEmpty());
+            assertThat(assertContext.getText(String.format("Actual encrypt column size should be %s, but it was %s.", expected.size(), actual.size())), actual.size(), is(expected.size()));
+            int count = 0;
+            for (EncryptColumnSegment encryptColumnSegment : actual) {
+                ExpectedEncryptColumn expectedEncryptColumn = expected.get(count);
+                EncryptColumnAssert.assertIs(assertContext, encryptColumnSegment, expectedEncryptColumn);
+                count++;
+            }
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ReadwriteSplittingRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ReadwriteSplittingRuleAssert.java
new file mode 100644
index 00000000000..10dabab2888
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ReadwriteSplittingRuleAssert.java
@@ -0,0 +1,63 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.PropertiesAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExceptedReadwriteSplittingRule;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Readwrite splitting rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ReadwriteSplittingRuleAssert {
+    
+    /**
+     * Assert readwrite splitting rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual readwrite splitting rule
+     * @param expected expected readwrite splitting rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ReadwriteSplittingRuleSegment actual, final ExceptedReadwriteSplittingRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual readwrite splitting rule should not exit."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual readwrite splitting rule should exit."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s readwrite splitting rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getName(), is(expected.getName()));
+            assertThat(assertContext.getText(String.format("`%s`'s readwrite splitting rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getAutoAwareResource(), is(expected.getAutoAwareResource()));
+            assertThat(assertContext.getText(String.format("`%s`'s readwrite splitting rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getWriteDataSource(), is(expected.getWriteDataSource()));
+            assertThat(assertContext.getText(String.format("`%s`'s readwrite splitting rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getReadDataSources(), is(expected.getReadDataSources()));
+            assertThat(assertContext.getText(String.format("`%s`'s readwrite splitting rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getLoadBalancer(), is(expected.getLoadBalancer()));
+            PropertiesAssert.assertIs(assertContext, actual.getProps(), expected.getProperties());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShadowRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShadowRuleAssert.java
new file mode 100644
index 00000000000..92354186f6a
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShadowRuleAssert.java
@@ -0,0 +1,81 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowRule;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowRule.ExpectedShadowTableRule;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Shadow table rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShadowRuleAssert {
+    
+    /**
+     * Assert shadow rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual shadow rule
+     * @param expected expected shadow rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ShadowRuleSegment actual, final ExpectedShadowRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual shadow rule should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual shadow rule should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s shadow rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getShadow(), is(expected.getShadow()));
+            assertThat(assertContext.getText(String.format("`%s`'s shadow rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getSource(), is(expected.getSource()));
+            assertThat(assertContext.getText(String.format("`%s`'s shadow rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getRuleName(), is(expected.getRuleName()));
+            for (ExpectedShadowTableRule each : expected.getShadowTableRules()) {
+                assertIsTableRules(assertContext, actual.getShadowTableRules().get(each.getTableName()), each.getAlgorithms());
+            }
+        }
+    }
+    
+    private static void assertIsTableRules(final SQLCaseAssertContext assertContext, final Collection<ShadowAlgorithmSegment> actual,
+                                           final Collection<ExpectedShadowAlgorithm> expected) {
+        assertNotNull(actual);
+        Map<String, ShadowAlgorithmSegment> actualMap = actual.stream().collect(Collectors.toMap(ShadowAlgorithmSegment::getAlgorithmName, each -> each));
+        expected.forEach(each -> assertIsAlgorithmsSegment(assertContext, actualMap.get(each.getAlgorithmName()), each));
+    }
+    
+    private static void assertIsAlgorithmsSegment(final SQLCaseAssertContext assertContext, final ShadowAlgorithmSegment actual,
+                                                  final ExpectedShadowAlgorithm expected) {
+        assertNotNull(actual);
+        AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingAuditorAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingAuditorAssert.java
new file mode 100644
index 00000000000..16987f6d990
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingAuditorAssert.java
@@ -0,0 +1,49 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.strategy.ShardingAuditorSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShardingAuditor;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Sharding auditor assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingAuditorAssert {
+    
+    /**
+     * Assert sharding auditor is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual sharding auditor
+     * @param expected expected sharding auditor test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ShardingAuditorSegment actual, final ExpectedShardingAuditor expected) {
+        assertNotNull(assertContext.getText("Actual sharding auditor segment should exist."), actual.getAlgorithmSegment());
+        assertThat(actual.getAuditorName(), is(expected.getAuditorName()));
+        AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingTableReferenceRuleAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingTableReferenceRuleAssert.java
new file mode 100644
index 00000000000..21c96c782d2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/ShardingTableReferenceRuleAssert.java
@@ -0,0 +1,53 @@
+/*
+ * 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.asserts.segment.distsql.rdl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.table.TableReferenceRuleSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShardingTableReferenceRule;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Sharding table reference rule assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingTableReferenceRuleAssert {
+    
+    /**
+     * Assert sharding table reference rule is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual sharding table reference rule
+     * @param expected expected sharding table reference rule test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final TableReferenceRuleSegment actual, final ExpectedShardingTableReferenceRule expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual sharding table reference rule should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual sharding table reference rule should exist."), actual);
+            assertThat(assertContext.getText(String.format("`%s`'s sharding table reference rule segment assertion error: ",
+                    actual.getClass().getSimpleName())), actual.getReference(), is(expected.getTableGroups()));
+        }
+    }
+}
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
new file mode 100644
index 00000000000..ba87f1d9740
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
@@ -0,0 +1,406 @@
+/*
+ * 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.asserts.segment.expression;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CollateExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
+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.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.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;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DataTypeSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.generic.DataTypeAssert;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedBetweenExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedBinaryOperationExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedCaseWhenExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedCollateExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExistsSubquery;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedInExpression;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedListExpression;
+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.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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.simple.ExpectedSubquery;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.function.ExpectedFunction;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import java.util.Iterator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ *  Expression assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ExpressionAssert {
+    
+    /**
+     * Assert parameter marker expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual parameter marker expression segment
+     * @param expected expected parameter marker expression
+     */
+    public static void assertParameterMarkerExpression(final SQLCaseAssertContext assertContext,
+                                                       final ParameterMarkerExpressionSegment actual, final ExpectedParameterMarkerExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual parameter marker expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual parameter marker expression should exist."), actual);
+            assertThat(assertContext.getText("Parameter marker index assertion error: "), actual.getParameterMarkerIndex(), is(expected.getParameterIndex()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert literal expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual literal expression segment
+     * @param expected expected literal expression
+     */
+    public static void assertLiteralExpression(final SQLCaseAssertContext assertContext,
+                                               final LiteralExpressionSegment actual, final ExpectedLiteralExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual literal expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual literal expression should exist."), actual);
+            assertThat(assertContext.getText("Literal assertion error: "), String.valueOf(actual.getLiterals()), is(expected.getValue()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert common expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual common expression segment
+     * @param expected expected common expression
+     */
+    public static void assertCommonExpression(final SQLCaseAssertContext assertContext,
+                                              final ComplexExpressionSegment actual, final ExpectedCommonExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual common expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual common expression should exist."), actual);
+            String expectedText = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralText() ? expected.getLiteralText() : expected.getText();
+            assertThat(assertContext.getText("Common expression text assertion error: "), actual.getText(), is(expectedText));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert subquery expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual subquery expression segment
+     * @param expected expected subquery expression
+     */
+    public static void assertSubqueryExpression(final SQLCaseAssertContext assertContext,
+                                                final SubqueryExpressionSegment actual, final ExpectedSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual subquery expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual subquery expression should exist."), actual);
+            assertSubquery(assertContext, actual.getSubquery(), expected);
+        }
+    }
+    
+    /**
+     * Assert subquery.
+     *
+     * @param assertContext assert context
+     * @param actual actual subquery segment
+     * @param expected expected subquery expression
+     */
+    public static void assertSubquery(final SQLCaseAssertContext assertContext,
+                                      final SubquerySegment actual, final ExpectedSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual subquery should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual subquery should exist."), actual);
+            SelectStatementAssert.assertIs(assertContext, actual.getSelect(), expected.getSelectTestCases());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert exists subquery expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual exists subquery expression
+     * @param expected expected exists subquery expression
+     */
+    public static void assertExistsSubqueryExpression(final SQLCaseAssertContext assertContext,
+                                                      final ExistsSubqueryExpression actual, final ExpectedExistsSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual exists subquery should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual exists subquery should exist."), actual);
+            assertSubquery(assertContext, actual.getSubquery(), expected.getSubquery());
+            assertThat(assertContext.getText("Exists subquery expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert binary operation expression.
+     * @param assertContext assert context
+     * @param actual actual binary operation expression
+     * @param expected expected binary operation expression
+     */
+    public static void assertBinaryOperationExpression(final SQLCaseAssertContext assertContext,
+                                                       final BinaryOperationExpression actual, final ExpectedBinaryOperationExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual binary operation expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual binary operation expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertThat(assertContext.getText("Binary operation expression operator assert error."),
+                    actual.getOperator(), is(expected.getOperator()));
+            assertExpression(assertContext, actual.getRight(), expected.getRight());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert in operation expression.
+     * @param assertContext assert context
+     * @param actual actual in operation expression
+     * @param expected expected in operation expression
+     */
+    public static void assertInExpression(final SQLCaseAssertContext assertContext,
+                                          final InExpression actual, final ExpectedInExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual in expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual in expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertThat(assertContext.getText("In expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            assertExpression(assertContext, actual.getRight(), expected.getRight());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert not operation expression.
+     * @param assertContext assert context
+     * @param actual actual not operation expression
+     * @param expected expected not operation expression
+     */
+    public static void assertNotExpression(final SQLCaseAssertContext assertContext,
+                                           final NotExpression actual, final ExpectedNotExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual not expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual not expression should exist."), actual);
+            assertExpression(assertContext, actual.getExpression(), expected.getExpr());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert list operation expression.
+     * @param assertContext assert context
+     * @param actual actual list operation expression
+     * @param expected expected list operation expression
+     */
+    public static void assertListExpression(final SQLCaseAssertContext assertContext,
+                                            final ListExpression actual, final ExpectedListExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual list expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual list expression should exist."), actual);
+            assertThat(assertContext.getText("List expression item size assert error."),
+                    actual.getItems().size(), is(expected.getItems().size()));
+            Iterator<ExpressionSegment> actualItems = actual.getItems().iterator();
+            Iterator<ExpectedExpression> expectedItems = expected.getItems().iterator();
+            while (actualItems.hasNext()) {
+                assertExpression(assertContext, actualItems.next(), expectedItems.next());
+            }
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert between operation expression.
+     * @param assertContext assert context
+     * @param actual actual between operation expression
+     * @param expected expected between operation expression
+     */
+    public static void assertBetweenExpression(final SQLCaseAssertContext assertContext,
+                                               final BetweenExpression actual, final ExpectedBetweenExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual between expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual between expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertExpression(assertContext, actual.getBetweenExpr(), expected.getBetweenExpr());
+            assertExpression(assertContext, actual.getAndExpr(), expected.getAndExpr());
+            assertThat(assertContext.getText("Between expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert function.
+     *
+     * @param assertContext assert context
+     * @param actual actual function segment
+     * @param expected expected function segment
+     */
+    public static void assertFunction(final SQLCaseAssertContext assertContext, final FunctionSegment actual, final ExpectedFunction expected) {
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        assertThat(assertContext.getText("Function method name assertion error: "), actual.getFunctionName(), is(expected.getFunctionName()));
+        String expectedText = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralText()
+                ? expected.getLiteralText()
+                : expected.getText();
+        assertThat(assertContext.getText("Function text name assertion error: "), actual.getText(), is(expectedText));
+        assertThat(assertContext.getText("Function parameter size assertion error: "), actual.getParameters().size(), is(expected.getParameters().size()));
+        Iterator<ExpectedExpression> expectedIterator = expected.getParameters().iterator();
+        Iterator<ExpressionSegment> actualIterator = actual.getParameters().iterator();
+        while (expectedIterator.hasNext()) {
+            ExpressionAssert.assertExpression(assertContext, actualIterator.next(), expectedIterator.next());
+        }
+        if (expected.getOwner() != null) {
+            OwnerAssert.assertIs(assertContext, actual.getOwner(), expected.getOwner());
+        }
+    }
+    
+    /**
+     * Assert collate.
+     *
+     * @param assertContext assert context
+     * @param actual actual collate expression
+     * @param expected expected collate expression
+     */
+    public static void assertCollateExpression(final SQLCaseAssertContext assertContext, final CollateExpression actual, final ExpectedCollateExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual collate expression should not exist."), actual);
+        } else {
+            assertExpression(assertContext, actual.getCollateName(), expected.getCollateName());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+    
+    /**
+     * Assert case when expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual case when expression
+     * @param expected expected case when expression
+     */
+    public static void assertCaseWhenExpression(final SQLCaseAssertContext assertContext, final CaseWhenExpression actual, final ExpectedCaseWhenExpression expected) {
+        assertThat(assertContext.getText("When exprs size is not same!"), actual.getWhenExprs().size(), is(expected.getWhenExprs().size()));
+        assertThat(assertContext.getText("Then exprs size is not same!"), actual.getThenExprs().size(), is(expected.getThenExprs().size()));
+        Iterator<ExpectedExpression> whenExprsIterator = expected.getWhenExprs().iterator();
+        for (ExpressionSegment each : actual.getWhenExprs()) {
+            assertExpression(assertContext, each, whenExprsIterator.next());
+        }
+        Iterator<ExpectedExpression> thenExprsIterator = expected.getThenExprs().iterator();
+        for (ExpressionSegment each : actual.getThenExprs()) {
+            assertExpression(assertContext, each, thenExprsIterator.next());
+        }
+        assertExpression(assertContext, actual.getCaseExpr(), expected.getCaseExpr());
+        assertExpression(assertContext, actual.getElseExpr(), expected.getElseExpr());
+    }
+    
+    /**
+     * Assert expression by actual expression segment class type.
+     *
+     * @param assertContext assert context
+     * @param actual actual expression segment
+     * @param expected expected expression
+     *
+     * @throws UnsupportedOperationException When expression segment class type is not supported.
+     */
+    public static void assertExpression(final SQLCaseAssertContext assertContext,
+                                        final ExpressionSegment actual, final ExpectedExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual expression should not exist."), actual);
+            return;
+        }
+        assertNotNull(assertContext.getText("Actual expression should exist."), actual);
+        if (actual instanceof BinaryOperationExpression) {
+            assertBinaryOperationExpression(assertContext, (BinaryOperationExpression) actual, expected.getBinaryOperationExpression());
+        } else if (actual instanceof SubqueryExpressionSegment) {
+            assertSubqueryExpression(assertContext, (SubqueryExpressionSegment) actual, expected.getSubquery());
+        } else if (actual instanceof ColumnSegment) {
+            ColumnAssert.assertIs(assertContext, (ColumnSegment) actual, expected.getColumn());
+        } else if (actual instanceof DataTypeSegment) {
+            DataTypeAssert.assertIs(assertContext, (DataTypeSegment) actual, expected.getDataType());
+        } else if (actual instanceof LiteralExpressionSegment) {
+            assertLiteralExpression(assertContext, (LiteralExpressionSegment) actual, expected.getLiteralExpression());
+        } else if (actual instanceof ParameterMarkerExpressionSegment) {
+            assertParameterMarkerExpression(assertContext, (ParameterMarkerExpressionSegment) actual, expected.getParameterMarkerExpression());
+        } else if (actual instanceof ExistsSubqueryExpression) {
+            assertExistsSubqueryExpression(assertContext, (ExistsSubqueryExpression) actual, expected.getExistsSubquery());
+        } else if (actual instanceof CommonExpressionSegment) {
+            assertCommonExpression(assertContext, (ComplexExpressionSegment) actual, expected.getCommonExpression());
+        } else if (actual instanceof InExpression) {
+            assertInExpression(assertContext, (InExpression) actual, expected.getInExpression());
+        } else if (actual instanceof NotExpression) {
+            assertNotExpression(assertContext, (NotExpression) actual, expected.getNotExpression());
+        } else if (actual instanceof ListExpression) {
+            assertListExpression(assertContext, (ListExpression) actual, expected.getListExpression());
+        } else if (actual instanceof BetweenExpression) {
+            assertBetweenExpression(assertContext, (BetweenExpression) actual, expected.getBetweenExpression());
+        } else if (actual instanceof ExpressionProjectionSegment) {
+            ProjectionAssert.assertProjection(assertContext, (ExpressionProjectionSegment) actual, expected.getExpressionProjection());
+        } else if (actual instanceof AggregationProjectionSegment) {
+            ProjectionAssert.assertProjection(assertContext, (AggregationProjectionSegment) actual, expected.getAggregationProjection());
+        } else if (actual instanceof FunctionSegment) {
+            assertFunction(assertContext, (FunctionSegment) actual, expected.getFunction());
+        } else if (actual instanceof CollateExpression) {
+            assertCollateExpression(assertContext, (CollateExpression) actual, expected.getCollateExpression());
+        } else if (actual instanceof CaseWhenExpression) {
+            assertCaseWhenExpression(assertContext, (CaseWhenExpression) actual, expected.getCaseWhenExpression());
+        } 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/asserts/segment/generic/DataTypeAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/generic/DataTypeAssert.java
new file mode 100644
index 00000000000..1f0ba94ca6a
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/generic/DataTypeAssert.java
@@ -0,0 +1,50 @@
+/*
+ * 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.asserts.segment.generic;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DataTypeSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.generic.ExpectedDataType;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ *  Data type assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DataTypeAssert {
+    
+    /**
+     * Assert actual data type segment is correct with expected date type.
+     *
+     * @param assertContext assert context
+     * @param actual actual data type statement
+     * @param expected expected data type
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DataTypeSegment actual, final ExpectedDataType expected) {
+        assertThat(assertContext.getText(String.format("%s name assertion error: ", "dataType")),
+                actual.getDataTypeName(), is(expected.getValue()));
+        assertThat(assertContext.getText(String.format("%s start index assertion error: ", "dataType")),
+                actual.getStartIndex(), is(expected.getStartIndex()));
+        assertThat(assertContext.getText(String.format("%s end index assertion error: ", "dataType")),
+                actual.getStopIndex(), is(expected.getStopIndex()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/generic/GrantLevelSegmentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/generic/GrantLevelSegmentAssert.java
new file mode 100644
index 00000000000..7c0f4939d97
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/generic/GrantLevelSegmentAssert.java
@@ -0,0 +1,53 @@
+/*
+ * 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.asserts.segment.generic;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.GrantLevelSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Grant level segment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class GrantLevelSegmentAssert {
+    
+    /**
+     * Assert MySQL grant statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual grant level statement
+     * @param expected expected grant statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final GrantLevelSegment actual, final List<ExpectedSimpleTable> expected) {
+        if (null == expected || expected.isEmpty()) {
+            assertNull(assertContext.getText("Actual table should not exist."), actual.getTableName());
+        } else {
+            assertThat(expected.size(), is(1));
+            assertThat(actual.getTableName(), is(expected.get(0).getName()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/groupby/GroupByClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/groupby/GroupByClauseAssert.java
new file mode 100644
index 00000000000..bfeda2972fa
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/groupby/GroupByClauseAssert.java
@@ -0,0 +1,43 @@
+/*
+ * 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.asserts.segment.groupby;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.GroupBySegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.orderby.OrderByItemAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.ExpectedOrderByClause;
+
+/**
+ * Group by clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class GroupByClauseAssert {
+    
+    /**
+     * Assert actual group by segment is correct with expected group by clause.
+     * 
+     * @param assertContext assert context
+     * @param actual actual group by segment
+     * @param expected expected group by clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final GroupBySegment actual, final ExpectedOrderByClause expected) {
+        OrderByItemAssert.assertIs(assertContext, actual.getGroupByItems(), expected, "Group by");
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/having/HavingClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/having/HavingClauseAssert.java
new file mode 100644
index 00000000000..d7fa5b74ef7
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/having/HavingClauseAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.segment.having;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.HavingSegment;
+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.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.having.ExpectedHavingClause;
+
+/**
+ * Having clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class HavingClauseAssert {
+    
+    /**
+     * Assert actual having segment is correct with expected having clause.
+     * 
+     * @param assertContext assert context
+     * @param actual actual having segment
+     * @param expected expected having clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final HavingSegment actual, final ExpectedHavingClause expected) {
+        ExpressionAssert.assertExpression(assertContext, actual.getExpr(), expected.getExpr());
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/identifier/IdentifierValueAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/identifier/IdentifierValueAssert.java
new file mode 100644
index 00000000000..dea03391687
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/identifier/IdentifierValueAssert.java
@@ -0,0 +1,48 @@
+/*
+ * 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.asserts.segment.identifier;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.ExpectedIdentifierSQLSegment;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Identifier value assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class IdentifierValueAssert {
+    
+    /**
+     * Assert actual identifier value is correct with expected identifier.
+     *
+     * @param assertContext assert context
+     * @param actual actual identifier value
+     * @param expected expected identifier
+     * @param type assert identifier value type
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final IdentifierValue actual, final ExpectedIdentifierSQLSegment expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s name assertion error: ", type)), actual.getValue(), is(expected.getName()));
+        assertThat(assertContext.getText(String.format("%s start delimiter assertion error: ", type)), actual.getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
+        assertThat(assertContext.getText(String.format("%s end delimiter assertion error: ", type)), actual.getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexAssert.java
new file mode 100644
index 00000000000..650e5f641a5
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.segment.index;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+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.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.index.ExpectedIndex;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Index assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class IndexAssert {
+    
+    /**
+     * Assert actual index segment is correct with expected index.
+     *
+     * @param assertContext assert context
+     * @param actual actual index segment
+     * @param expected expected index
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final IndexSegment actual, final ExpectedIndex expected) {
+        assertNotNull(assertContext.getText("Index should exist."), expected);
+        IdentifierValueAssert.assertIs(assertContext, actual.getIndexName().getIdentifier(), expected, "Index");
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexTypeAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexTypeAssert.java
new file mode 100644
index 00000000000..b212fbc71f6
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/index/IndexTypeAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.segment.index;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexTypeSegment;
+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.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.index.ExpectedIndexType;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Index type assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class IndexTypeAssert {
+    
+    /**
+     * Assert actual index type segment is correct with expected index type.
+     *
+     * @param assertContext assert context
+     * @param actual actual index type segment
+     * @param expected expected index type
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final IndexTypeSegment actual, final ExpectedIndexType expected) {
+        assertNotNull(assertContext.getText("IndexType should exist."), expected);
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "IndexType");
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertColumnsClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertColumnsClauseAssert.java
new file mode 100644
index 00000000000..4acf7a9b1e3
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertColumnsClauseAssert.java
@@ -0,0 +1,54 @@
+/*
+ * 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.asserts.segment.insert;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertColumnsClause;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Insert column clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InsertColumnsClauseAssert {
+    
+    /**
+     * Assert actual insert columns segment is correct with expected insert columns clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual insert columns segment
+     * @param expected expected insert columns clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final InsertColumnsSegment actual, final ExpectedInsertColumnsClause expected) {
+        assertThat(assertContext.getText("Insert column size assertion error: "), actual.getColumns().size(), is(expected.getColumns().size()));
+        int count = 0;
+        for (ColumnSegment each : actual.getColumns()) {
+            ColumnAssert.assertIs(assertContext, each, expected.getColumns().get(count));
+            count++;
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
new file mode 100644
index 00000000000..d9d211da26f
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertMultiTableElementAssert.java
@@ -0,0 +1,54 @@
+/*
+ * 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.asserts.segment.insert;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.InsertMultiTableElementSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+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.statement.dml.impl.InsertStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertMultiTableElement;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Insert multi table element assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InsertMultiTableElementAssert {
+    
+    /**
+     * Assert actual insert multi table element segment is correct with expected multi table element.
+     *
+     * @param assertContext assert context
+     * @param actual actual insert multi table element
+     * @param expected expected insert multi table element
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final InsertMultiTableElementSegment actual, final ExpectedInsertMultiTableElement expected) {
+        assertThat(assertContext.getText("Insert values size assertion error: "), actual.getInsertStatements().size(), is(expected.getInsertTestCases().size()));
+        int count = 0;
+        for (InsertStatement each : actual.getInsertStatements()) {
+            InsertStatementAssert.assertIs(assertContext, each, expected.getInsertTestCases().get(count));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertValuesClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertValuesClauseAssert.java
new file mode 100644
index 00000000000..aefa95df146
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/InsertValuesClauseAssert.java
@@ -0,0 +1,64 @@
+/*
+ * 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.asserts.segment.insert;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.assignment.AssignmentValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertValue;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedInsertValuesClause;
+
+import java.util.Collection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Insert values clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InsertValuesClauseAssert {
+    
+    /**
+     * Assert actual insert values segment is correct with expected insert values clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual insert values segment
+     * @param expected expected insert values clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<InsertValuesSegment> actual, final ExpectedInsertValuesClause expected) {
+        assertThat(assertContext.getText("Insert values size assertion error: "), actual.size(), is(expected.getValues().size()));
+        int count = 0;
+        for (InsertValuesSegment each : actual) {
+            assertInsertValues(assertContext, each, expected.getValues().get(count));
+            count++;
+        }
+    }
+    
+    private static void assertInsertValues(final SQLCaseAssertContext assertContext, final InsertValuesSegment actual, final ExpectedInsertValue expected) {
+        assertThat(assertContext.getText("Insert assignment value size assertion error: "), actual.getValues().size(), is(expected.getAssignmentValues().size()));
+        int count = 0;
+        for (ExpressionSegment each : actual.getValues()) {
+            AssignmentValueAssert.assertIs(assertContext, each, expected.getAssignmentValues().get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java
new file mode 100644
index 00000000000..45e9887e17b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/insert/OnDuplicateKeyColumnsAssert.java
@@ -0,0 +1,56 @@
+/*
+ * 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.asserts.segment.insert;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
+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.assignment.AssignmentAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedOnDuplicateKeyColumns;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * On duplicate key columns assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OnDuplicateKeyColumnsAssert {
+    
+    /**
+     * Assert actual on duplicate key columns segment is correct with expected on duplicate key columns.
+     * 
+     * @param assertContext assert context
+     * @param actual actual on duplicate key columns segment
+     * @param expected expected on duplicate key columns
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final OnDuplicateKeyColumnsSegment actual, final ExpectedOnDuplicateKeyColumns expected) {
+        assertNotNull(assertContext.getText("On duplicate key columns should exist."), expected);
+        assertThat(assertContext.getText("On duplicate key columns size assertion error: "), actual.getColumns().size(), is(expected.getAssignments().size()));
+        int count = 0;
+        for (AssignmentSegment each : actual.getColumns()) {
+            AssignmentAssert.assertIs(assertContext, each, expected.getAssignments().get(count));
+            count++;
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/limit/LimitClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/limit/LimitClauseAssert.java
new file mode 100644
index 00000000000..8b0d5f5fb99
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/limit/LimitClauseAssert.java
@@ -0,0 +1,81 @@
+/*
+ * 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.asserts.segment.limit;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.NumberLiteralPaginationValueSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.PaginationValueSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.ParameterMarkerPaginationValueSegment;
+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.cases.parser.jaxb.segment.impl.limit.ExpectedPaginationValue;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Limit clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LimitClauseAssert {
+    
+    /**
+     * Assert actual offset segment is correct with expected offset.
+     * 
+     * @param assertContext assert context
+     * @param actual actual offset
+     * @param expected expected offset
+     */
+    public static void assertOffset(final SQLCaseAssertContext assertContext, final PaginationValueSegment actual, final ExpectedPaginationValue expected) {
+        if (null == actual) {
+            assertNull(assertContext.getText("Offset should not exist."), expected);
+            return;
+        }
+        if (actual instanceof ParameterMarkerPaginationValueSegment) {
+            assertThat(assertContext.getText("Offset index assertion error: "),
+                    ((ParameterMarkerPaginationValueSegment) actual).getParameterIndex(), is(expected.getParameterIndex()));
+        } else {
+            assertThat(assertContext.getText("Offset value assertion error: "), ((NumberLiteralPaginationValueSegment) actual).getValue(), is(expected.getValue()));
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    /**
+     * Assert actual row count segment is correct with expected row count.
+     *
+     * @param assertContext assert context
+     * @param actual actual row count
+     * @param expected expected row count
+     */
+    public static void assertRowCount(final SQLCaseAssertContext assertContext, final PaginationValueSegment actual, final ExpectedPaginationValue expected) {
+        if (null == actual) {
+            assertNull(assertContext.getText("Row count should not exist."), expected);
+            return;
+        }
+        if (SQLCaseType.Placeholder == assertContext.getCaseType()) {
+            assertThat(assertContext.getText("Row count index assertion error: "),
+                    ((ParameterMarkerPaginationValueSegment) actual).getParameterIndex(), is(expected.getParameterIndex()));
+        } else {
+            assertThat(assertContext.getText("Row count value assertion error: "), ((NumberLiteralPaginationValueSegment) actual).getValue(), is(expected.getValue()));
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/lock/LockClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/lock/LockClauseAssert.java
new file mode 100644
index 00000000000..675c9ceb448
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/lock/LockClauseAssert.java
@@ -0,0 +1,69 @@
+/*
+ * 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.asserts.segment.lock;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+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.lock.ExpectedLockClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
+
+import java.util.List;
+
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Lock clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LockClauseAssert {
+    
+    /**
+     * Assert lock segment index and forTables.
+     * @param assertContext assert context
+     * @param actual actual lock
+     * @param expected expected lock
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final LockSegment actual, final ExpectedLockClause expected) {
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        List<SimpleTableSegment> actualTables = actual.getTables();
+        List<ColumnSegment> actualColumns = actual.getColumns();
+        List<ExpectedSimpleTable> expectedTables = expected.getTables();
+        List<ExpectedColumn> expectedColumns = expected.getColumns();
+        if (actualTables.isEmpty()) {
+            assertTrue(assertContext.getText("lock tables should not exist."), expectedTables.isEmpty());
+        }
+        TableAssert.assertIs(assertContext, actualTables, expectedTables);
+        if (actualColumns.isEmpty()) {
+            assertTrue(assertContext.getText("lock columns should not exist."), expectedColumns.isEmpty());
+            return;
+        }
+        int count = 0;
+        for (ColumnSegment each : actual.getColumns()) {
+            ColumnAssert.assertIs(assertContext, each, expected.getColumns().get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/model/ModelClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/model/ModelClauseAssert.java
new file mode 100644
index 00000000000..c7bd8bf57e1
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/model/ModelClauseAssert.java
@@ -0,0 +1,109 @@
+/*
+ * 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.asserts.segment.model;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.OrderBySegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ModelSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.orderby.OrderByItemAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.SelectStatementAssert;
+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.model.ExpectedModelClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.ExpectedOrderByClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.SelectStatementTestCase;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Model clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ModelClauseAssert {
+    
+    /**
+     * Assert actual model segment is correct with expected model clause.
+     * @param assertContext assert context
+     * @param actual actual model
+     * @param expected expected model
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ModelSegment actual, final ExpectedModelClause expected) {
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        if (null != expected.getReferenceModelSelect()) {
+            assertNotNull(assertContext.getText("Actual reference model select subquery should exist."), actual.getReferenceModelSelects());
+            assertThat(assertContext.getText("Actual reference model select subquery size assertion error: "), actual.getReferenceModelSelects().size(), is(expected.getReferenceModelSelect().size()));
+            assertReferenceModelSelectStatements(assertContext, actual.getReferenceModelSelects(), expected.getReferenceModelSelect());
+        }
+        if (null != expected.getOrderBySegments()) {
+            assertNotNull(assertContext.getText("Actual order by segments should exist."), actual.getOrderBySegments());
+            assertThat(assertContext.getText("Actual order by segments size assertion error: "), actual.getOrderBySegments().size(), is(expected.getOrderBySegments().size()));
+            assertOrderBySegments(assertContext, actual.getOrderBySegments(), expected.getOrderBySegments());
+        }
+        if (null != expected.getCellAssignmentColumns()) {
+            assertNotNull(assertContext.getText("Actual cell assignment columns should exist."), actual.getCellAssignmentColumns());
+            assertThat(assertContext.getText("Actual cell assignment columns assertion error: "), actual.getCellAssignmentColumns().size(), is(expected.getCellAssignmentColumns().size()));
+            assertCellAssignmentColumns(assertContext, actual.getCellAssignmentColumns(), expected.getCellAssignmentColumns());
+        }
+        if (null != expected.getCellAssignmentSelect()) {
+            assertNotNull(assertContext.getText("Actual cell assignment select subquery should exist."), actual.getCellAssignmentSelects());
+            assertThat(assertContext.getText("Actual cell assignment select size assertion error: "), actual.getCellAssignmentSelects().size(), is(expected.getCellAssignmentSelect().size()));
+            assertCellAssignmentSelectStatements(assertContext, actual.getCellAssignmentSelects(), expected.getCellAssignmentSelect());
+        }
+    }
+    
+    private static void assertReferenceModelSelectStatements(final SQLCaseAssertContext assertContext, final List<SubquerySegment> actual, final List<SelectStatementTestCase> expected) {
+        int count = 0;
+        for (SubquerySegment each : actual) {
+            SelectStatementAssert.assertIs(assertContext, each.getSelect(), expected.get(count));
+            count++;
+        }
+    }
+    
+    private static void assertOrderBySegments(final SQLCaseAssertContext assertContext, final List<OrderBySegment> actual, final List<ExpectedOrderByClause> expected) {
+        int count = 0;
+        for (OrderBySegment each : actual) {
+            OrderByItemAssert.assertIs(assertContext, each.getOrderByItems(), expected.get(count), "Order by");
+            count++;
+        }
+    }
+    
+    private static void assertCellAssignmentColumns(final SQLCaseAssertContext assertContext, final List<ColumnSegment> actual, final List<ExpectedColumn> expected) {
+        int count = 0;
+        for (ColumnSegment each : actual) {
+            ColumnAssert.assertIs(assertContext, each, expected.get(count));
+            count++;
+        }
+    }
+    
+    private static void assertCellAssignmentSelectStatements(final SQLCaseAssertContext assertContext, final List<SubquerySegment> actual, final List<SelectStatementTestCase> expected) {
+        int count = 0;
+        for (SubquerySegment each : actual) {
+            SelectStatementAssert.assertIs(assertContext, each.getSelect(), expected.get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByClauseAssert.java
new file mode 100644
index 00000000000..3de229521d0
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByClauseAssert.java
@@ -0,0 +1,42 @@
+/*
+ * 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.asserts.segment.orderby;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.OrderBySegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.ExpectedOrderByClause;
+
+/**
+ * Order by clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OrderByClauseAssert {
+    
+    /**
+     * Assert actual order by segment is correct with expected order by clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual order by segment
+     * @param expected expected order by clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final OrderBySegment actual, final ExpectedOrderByClause expected) {
+        OrderByItemAssert.assertIs(assertContext, actual.getOrderByItems(), expected, "Order by");
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByItemAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByItemAssert.java
new file mode 100644
index 00000000000..0edca645335
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/orderby/OrderByItemAssert.java
@@ -0,0 +1,118 @@
+/*
+ * 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.asserts.segment.orderby;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ColumnOrderByItemSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ExpressionOrderByItemSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.IndexOrderByItemSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.OrderByItemSegment;
+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.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.ExpectedOrderByClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.item.ExpectedOrderByItem;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.item.impl.ExpectedColumnOrderByItem;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.item.impl.ExpectedExpressionOrderByItem;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.orderby.item.impl.ExpectedIndexOrderByItem;
+
+import java.util.Collection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Order by item assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OrderByItemAssert {
+    
+    /**
+     * Assert actual order by segment is correct with expected order by.
+     *
+     * @param assertContext assert context
+     * @param actual actual order by segments
+     * @param expected expected order by
+     * @param type type of assertion, should be Order by or Group by
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext,
+                                final Collection<OrderByItemSegment> actual, final ExpectedOrderByClause expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s items size assertion error: ", type)), actual.size(), is(expected.getItemSize()));
+        int count = 0;
+        for (OrderByItemSegment each : actual) {
+            if (each instanceof ColumnOrderByItemSegment) {
+                assertOrderInfo(assertContext, each, expected.getColumnItems().get(count), type);
+                assertColumnOrderByItem(assertContext, (ColumnOrderByItemSegment) each, expected.getColumnItems().get(count), type);
+                count++;
+            }
+        }
+        count = 0;
+        for (OrderByItemSegment each : actual) {
+            if (each instanceof IndexOrderByItemSegment) {
+                assertOrderInfo(assertContext, each, expected.getIndexItems().get(count), type);
+                assertIndexOrderByItem(assertContext, (IndexOrderByItemSegment) each, expected.getIndexItems().get(count), type);
+                count++;
+            }
+        }
+        count = 0;
+        for (OrderByItemSegment each : actual) {
+            if (each instanceof ExpressionOrderByItemSegment) {
+                assertOrderInfo(assertContext, each, expected.getExpressionItems().get(count), type);
+                assertExpressionOrderByItem(assertContext, (ExpressionOrderByItemSegment) each, expected.getExpressionItems().get(count), type);
+                count++;
+            }
+        }
+    }
+    
+    private static void assertOrderInfo(final SQLCaseAssertContext assertContext, final OrderByItemSegment actual, final ExpectedOrderByItem expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s item order direction assertion error: ", type)), actual.getOrderDirection().name(), is(expected.getOrderDirection()));
+        assertThat(assertContext.getText(String.format("%s item nulls order type assertion error: ", type)), actual.getNullsOrderType().name(), is(expected.getNullsOrderType()));
+    }
+    
+    private static void assertColumnOrderByItem(final SQLCaseAssertContext assertContext,
+                                                final ColumnOrderByItemSegment actual, final ExpectedColumnOrderByItem expected, final String type) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, String.format("%s item", type));
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getColumn().getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getColumn().getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getColumn().getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertIndexOrderByItem(final SQLCaseAssertContext assertContext,
+                                               final IndexOrderByItemSegment actual, final ExpectedIndexOrderByItem expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s item index assertion error: ", type)), actual.getColumnIndex(), is(expected.getIndex()));
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertExpressionOrderByItem(final SQLCaseAssertContext assertContext,
+                                                    final ExpressionOrderByItemSegment actual, final ExpectedExpressionOrderByItem expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s item expression assertion error: ", type)), actual.getExpression(), is(expected.getExpression()));
+        if (null != expected.getExpr()) {
+            ExpressionAssert.assertExpression(assertContext, actual.getExpr(), expected.getExpr());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
new file mode 100644
index 00000000000..c01015d19ff
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
@@ -0,0 +1,94 @@
+/*
+ * 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.asserts.segment.output;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
+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.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.output.ExpectedOutputClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.column.ExpectedColumnProjection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Output clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OutputClauseAssert {
+    
+    /**
+     * Assert actual output segment is correct with expected output clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual output segment
+     * @param expected expected output clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final OutputSegment actual, final ExpectedOutputClause expected) {
+        assertNotNull(assertContext.getText("Output clause should exist."), expected);
+        if (!actual.getOutputColumns().isEmpty()) {
+            assertOutputColumnsSegment(assertContext, actual, expected);
+        }
+        if (null != actual.getTableName()) {
+            assertOutputTableSegment(assertContext, actual, expected);
+        }
+        if (!actual.getTableColumns().isEmpty()) {
+            assertOutputTableColumnSegment(assertContext, actual, expected);
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertOutputColumnsSegment(final SQLCaseAssertContext assertContext, final OutputSegment actual, final ExpectedOutputClause expected) {
+        assertThat(assertContext.getText("Output columns size assertion error: "),
+                actual.getOutputColumns().size(), is(expected.getOutputColumns().getColumnProjections().size()));
+        int count = 0;
+        for (ColumnProjectionSegment each : actual.getOutputColumns()) {
+            assertOutputColumnSegment(assertContext, each, expected.getOutputColumns().getColumnProjections().get(count));
+            count++;
+        }
+    }
+    
+    private static void assertOutputColumnSegment(final SQLCaseAssertContext assertContext, final ColumnProjectionSegment actual, final ExpectedColumnProjection expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, "Output column");
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertOutputTableSegment(final SQLCaseAssertContext assertContext, final OutputSegment actual, final ExpectedOutputClause expected) {
+        assertThat(assertContext.getText("Output table name assertion error: "),
+                actual.getTableName().getIdentifier().getValue(), is(expected.getOutputTable().getName()));
+        SQLSegmentAssert.assertIs(assertContext, actual.getTableName(), expected.getOutputTable());
+    }
+    
+    private static void assertOutputTableColumnSegment(final SQLCaseAssertContext assertContext, final OutputSegment actual, final ExpectedOutputClause expected) {
+        assertThat(assertContext.getText("Output table columns size assertion error: "),
+                actual.getTableColumns().size(), is(expected.getOutputTableColumns().getColumns().size()));
+        int count = 0;
+        for (ColumnSegment each : actual.getTableColumns()) {
+            assertThat(assertContext.getText("Output table column name assertion error: "),
+                    each.getIdentifier().getValue(), is(expected.getOutputTableColumns().getColumns().get(count).getName()));
+            SQLSegmentAssert.assertIs(assertContext, each, expected.getOutputTableColumns().getColumns().get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/owner/OwnerAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/owner/OwnerAssert.java
new file mode 100644
index 00000000000..165ba782dc2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/owner/OwnerAssert.java
@@ -0,0 +1,54 @@
+/*
+ * 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.asserts.segment.owner;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
+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.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Owner assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OwnerAssert {
+    
+    /**
+     * Assert actual owner segment is correct with expected owner.
+     *
+     * @param assertContext assert context
+     * @param actual actual owner segment
+     * @param expected expected owner
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final OwnerSegment actual, final ExpectedOwner expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Owner");
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/packages/PackageAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/packages/PackageAssert.java
new file mode 100644
index 00000000000..48277092e44
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/packages/PackageAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.segment.packages;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.packages.PackageSegment;
+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.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.packages.ExpectedPackage;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Package assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class PackageAssert {
+    
+    /**
+     * Assert actual package segment is correct with expected package.
+     *
+     * @param assertContext assert context
+     * @param actual actual package segment
+     * @param expected expected package
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final PackageSegment actual, final ExpectedPackage expected) {
+        assertNotNull(assertContext.getText("Package should exist."), expected);
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Package");
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/parameter/ParameterMarkerAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/parameter/ParameterMarkerAssert.java
new file mode 100644
index 00000000000..9477a1dc153
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/parameter/ParameterMarkerAssert.java
@@ -0,0 +1,48 @@
+/*
+ * 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.asserts.segment.parameter;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Parameter marker assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ParameterMarkerAssert {
+    
+    /**
+     * Assert parameter markers count.
+     * 
+     * @param assertContext assert context
+     * @param actual actual parameter markers count
+     * @param expected expected parameter markers count
+     */
+    public static void assertCount(final SQLCaseAssertContext assertContext, final int actual, final int expected) {
+        if (SQLCaseType.Placeholder == assertContext.getCaseType()) {
+            assertThat(assertContext.getText("Parameter markers count assertion error: "), actual, is(expected));
+        } else {
+            assertThat(assertContext.getText("Parameter markers count assertion error: "), actual, is(0));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/prepare/PrepareStatementQueryAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/prepare/PrepareStatementQueryAssert.java
new file mode 100644
index 00000000000..d990bf4d364
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/prepare/PrepareStatementQueryAssert.java
@@ -0,0 +1,90 @@
+/*
+ * 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.asserts.segment.prepare;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.prepare.PrepareStatementQuerySegment;
+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.statement.dml.impl.DeleteStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.InsertStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.SelectStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.UpdateStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.query.ExpectedPrepareStatementQuery;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Prepare statement query assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class PrepareStatementQueryAssert {
+    
+    /**
+     * Assert actual prepare statement query segment is correct with expected prepare statement query.
+     *
+     * @param assertContext assert context
+     * @param actual actual prepare statement query segment
+     * @param expected expected prepare statement query
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final PrepareStatementQuerySegment actual, final ExpectedPrepareStatementQuery expected) {
+        assertSelect(assertContext, actual, expected);
+        assertInsert(assertContext, actual, expected);
+        assertUpdate(assertContext, actual, expected);
+        assertDelete(assertContext, actual, expected);
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertSelect(final SQLCaseAssertContext assertContext, final PrepareStatementQuerySegment actual, final ExpectedPrepareStatementQuery expected) {
+        if (null == expected.getSelectClause()) {
+            assertFalse(assertContext.getText("Actual select statement should not exist."), actual.getSelect().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual select statement should exist."), actual.getSelect().isPresent());
+            SelectStatementAssert.assertIs(assertContext, actual.getSelect().get(), expected.getSelectClause());
+        }
+    }
+    
+    private static void assertInsert(final SQLCaseAssertContext assertContext, final PrepareStatementQuerySegment actual, final ExpectedPrepareStatementQuery expected) {
+        if (null == expected.getInsertClause()) {
+            assertFalse(assertContext.getText("Actual insert statement should not exist."), actual.getInsert().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual insert statement should exist."), actual.getInsert().isPresent());
+            InsertStatementAssert.assertIs(assertContext, actual.getInsert().get(), expected.getInsertClause());
+        }
+    }
+    
+    private static void assertUpdate(final SQLCaseAssertContext assertContext, final PrepareStatementQuerySegment actual, final ExpectedPrepareStatementQuery expected) {
+        if (null == expected.getUpdateClause()) {
+            assertFalse(assertContext.getText("Actual update statement should not exist."), actual.getUpdate().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual update statement should exist."), actual.getUpdate().isPresent());
+            UpdateStatementAssert.assertIs(assertContext, actual.getUpdate().get(), expected.getUpdateClause());
+        }
+    }
+    
+    private static void assertDelete(final SQLCaseAssertContext assertContext, final PrepareStatementQuerySegment actual, final ExpectedPrepareStatementQuery expected) {
+        if (null == expected.getDeleteClause()) {
+            assertFalse(assertContext.getText("Actual delete statement should not exist."), actual.getDelete().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual delete statement should exist."), actual.getDelete().isPresent());
+            DeleteStatementAssert.assertIs(assertContext, actual.getDelete().get(), expected.getDeleteClause());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/projection/ProjectionAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/projection/ProjectionAssert.java
new file mode 100644
index 00000000000..d43d608197b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/projection/ProjectionAssert.java
@@ -0,0 +1,178 @@
+/*
+ * 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.asserts.segment.projection;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationDistinctProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.SubqueryProjectionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.rownum.ParameterMarkerRowNumberValueSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.top.TopProjectionSegment;
+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.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.SelectStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.ExpectedProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.ExpectedProjections;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.aggregation.ExpectedAggregationDistinctProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.aggregation.ExpectedAggregationProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.column.ExpectedColumnProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.expression.ExpectedExpressionProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.shorthand.ExpectedShorthandProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.subquery.ExpectedSubqueryProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.top.ExpectedTopProjection;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.sql.type.SQLCaseType;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Projection assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ProjectionAssert {
+    
+    /**
+     * Assert actual projections segment is correct with expected projections.
+     *
+     * @param assertContext assert context
+     * @param actual actual projection
+     * @param expected expected projections
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ProjectionsSegment actual, final ExpectedProjections expected) {
+        assertProjections(assertContext, actual, expected);
+        List<ExpectedProjection> expectedProjections = expected.getExpectedProjections();
+        int count = 0;
+        for (ProjectionSegment each : actual.getProjections()) {
+            assertProjection(assertContext, each, expectedProjections.get(count));
+            count++;
+        }
+    }
+    
+    private static void assertProjections(final SQLCaseAssertContext assertContext, final ProjectionsSegment actual, final ExpectedProjections expected) {
+        assertThat(assertContext.getText("Projections size assertion error: "), actual.getProjections().size(), is(expected.getSize()));
+        assertThat(assertContext.getText("Projections distinct row assertion error: "), actual.isDistinctRow(), is(expected.isDistinctRow()));
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    /**
+     * Assert actual projection segment is correct with expected projection.
+     * @param assertContext assert context
+     * @param actual actual projection
+     * @param expected expected projection
+     */
+    public static void assertProjection(final SQLCaseAssertContext assertContext, final ProjectionSegment actual, final ExpectedProjection expected) {
+        if (actual instanceof ShorthandProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedShorthandProjection.class));
+            assertShorthandProjection(assertContext, (ShorthandProjectionSegment) actual, (ExpectedShorthandProjection) expected);
+        } else if (actual instanceof ColumnProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedColumnProjection.class));
+            assertColumnProjection(assertContext, (ColumnProjectionSegment) actual, (ExpectedColumnProjection) expected);
+        } else if (actual instanceof AggregationProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedAggregationProjection.class));
+            assertAggregationProjection(assertContext, (AggregationProjectionSegment) actual, (ExpectedAggregationProjection) expected);
+        } else if (actual instanceof ExpressionProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedExpressionProjection.class));
+            assertExpressionProjection(assertContext, (ExpressionProjectionSegment) actual, (ExpectedExpressionProjection) expected);
+        } else if (actual instanceof TopProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedTopProjection.class));
+            assertTopProjection(assertContext, (TopProjectionSegment) actual, (ExpectedTopProjection) expected);
+        } else if (actual instanceof SubqueryProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedSubqueryProjection.class));
+            assertSubqueryProjection(assertContext, (SubqueryProjectionSegment) actual, (ExpectedSubqueryProjection) expected);
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertSubqueryProjection(final SQLCaseAssertContext assertContext, final SubqueryProjectionSegment actual, final ExpectedSubqueryProjection expected) {
+        assertThat(assertContext.getText("Subquery projection alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+        String expectedText = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralText() ? expected.getLiteralText() : expected.getText();
+        assertThat(assertContext.getText("Subquery projection text assertion error: "), actual.getText(), is(expectedText));
+        SelectStatementAssert.assertIs(assertContext, actual.getSubquery().getSelect(), expected.getSubquery().getSelectTestCases());
+    }
+    
+    private static void assertShorthandProjection(final SQLCaseAssertContext assertContext, final ShorthandProjectionSegment actual, final ExpectedShorthandProjection expected) {
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+    }
+    
+    private static void assertColumnProjection(final SQLCaseAssertContext assertContext, final ColumnProjectionSegment actual, final ExpectedColumnProjection expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, "Column projection");
+        assertThat(assertContext.getText("Column projection alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getColumn().getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getColumn().getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getColumn().getOwner().get(), expected.getOwner());
+        }
+    }
+    
+    private static void assertAggregationProjection(final SQLCaseAssertContext assertContext, final AggregationProjectionSegment actual, final ExpectedAggregationProjection expected) {
+        assertThat(assertContext.getText("Aggregation projection type assertion error: "), actual.getType().name(), is(expected.getType()));
+        assertThat(assertContext.getText("Aggregation projection inner expression assertion error: "), actual.getInnerExpression(), is(expected.getInnerExpression()));
+        assertThat(assertContext.getText("Aggregation projection alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+        if (actual instanceof AggregationDistinctProjectionSegment) {
+            assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedAggregationDistinctProjection.class));
+            assertThat(assertContext.getText("Aggregation projection alias assertion error: "),
+                    ((AggregationDistinctProjectionSegment) actual).getDistinctExpression(), is(((ExpectedAggregationDistinctProjection) expected).getDistinctExpression()));
+        }
+    }
+    
+    private static void assertExpressionProjection(final SQLCaseAssertContext assertContext, final ExpressionProjectionSegment actual, final ExpectedExpressionProjection expected) {
+        assertThat(assertContext.getText("Expression projection alias assertion error: "),
+                actual.getAlias().orElse(null), is(expected.getAlias()));
+        String expectedText = SQLCaseType.Literal == assertContext.getCaseType() && null != expected.getLiteralText()
+                ? expected.getLiteralText()
+                : expected.getText();
+        assertThat(assertContext.getText("Expression projection text assertion error: "),
+                actual.getText(), is(expectedText));
+        if (expected.getExpr() != null) {
+            ExpressionAssert.assertExpression(assertContext, actual.getExpr(), expected.getExpr());
+        }
+    }
+    
+    private static void assertTopProjection(final SQLCaseAssertContext assertContext, final TopProjectionSegment actual, final ExpectedTopProjection expected) {
+        if (actual.getTop() instanceof NumberLiteralRowNumberValueSegment) {
+            assertThat(assertContext.getText("Expression projection top value assertion error: "),
+                    ((NumberLiteralRowNumberValueSegment) actual.getTop()).getValue(), is(expected.getTopValue().getValue()));
+        } else {
+            assertThat(assertContext.getText("Expression projection top parameter index assertion error: "),
+                    ((ParameterMarkerRowNumberValueSegment) actual.getTop()).getParameterIndex(), is(expected.getTopValue().getParameterIndex()));
+        }
+        assertThat(assertContext.getText("Expression projection alias assertion error: "), actual.getAlias(), is(expected.getAlias()));
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/returning/ReturningClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/returning/ReturningClauseAssert.java
new file mode 100644
index 00000000000..07fab47baa2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/returning/ReturningClauseAssert.java
@@ -0,0 +1,47 @@
+/*
+ * 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.asserts.segment.returning;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.ReturningSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.projection.ProjectionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.insert.ExpectedReturningClause;
+
+/**
+ * Returning clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ReturningClauseAssert {
+    
+    /**
+     * Assert actual returning segment is correct with expected returning clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual returning segment
+     * @param expected expected returning clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ReturningSegment actual, final ExpectedReturningClause expected) {
+        ProjectionsSegment actualProjections = actual.getProjections();
+        if (null != actualProjections.getProjections() || expected.getProjections().getSize() > 0) {
+            ProjectionAssert.assertIs(assertContext, actualProjections, expected.getProjections());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java
new file mode 100644
index 00000000000..5bc877f112b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/set/SetClauseAssert.java
@@ -0,0 +1,56 @@
+/*
+ * 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.asserts.segment.set;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.SetAssignmentSegment;
+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.assignment.AssignmentAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.set.ExpectedSetClause;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Set clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SetClauseAssert {
+    
+    /**
+     * Assert actual set assignment segment is correct with expected set assignment.
+     * 
+     * @param assertContext assert context
+     * @param actual actual set assignment segment
+     * @param expected expected set clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SetAssignmentSegment actual, final ExpectedSetClause expected) {
+        assertNotNull(assertContext.getText("Assignments should exist."), expected);
+        assertThat(assertContext.getText("Assignments size assertion error: "), actual.getAssignments().size(), is(expected.getAssignments().size()));
+        int count = 0;
+        for (AssignmentSegment each : actual.getAssignments()) {
+            AssignmentAssert.assertIs(assertContext, each, expected.getAssignments().get(count));
+            count++;
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/show/ShowFilterAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/show/ShowFilterAssert.java
new file mode 100644
index 00000000000..fe646573208
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/show/ShowFilterAssert.java
@@ -0,0 +1,55 @@
+/*
+ * 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.asserts.segment.show;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
+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.where.WhereClauseAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.show.ExpectedShowFilter;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Show filter assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShowFilterAssert {
+    
+    /**
+     * Assert actual show filter segment is correct with expected schema.
+     *
+     * @param assertContext assert context
+     * @param actual actual show filter segment
+     * @param expected expected show filter
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ShowFilterSegment actual, final ExpectedShowFilter expected) {
+        if (actual.getLike().isPresent()) {
+            assertThat(assertContext.getText("Show filter like segment pattern content assert error."),
+                    actual.getLike().get().getPattern(), is(expected.getLike().getPattern()));
+            SQLSegmentAssert.assertIs(assertContext, actual.getLike().get(), expected.getLike());
+        }
+        if (actual.getWhere().isPresent()) {
+            WhereClauseAssert.assertIs(assertContext, actual.getWhere().get(), expected.getWhere());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
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
new file mode 100644
index 00000000000..44e26b27f92
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/table/TableAssert.java
@@ -0,0 +1,196 @@
+/*
+ * 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.asserts.segment.table;
+
+import com.google.common.base.Strings;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.XmlTableFunctionSegment;
+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.common.segment.generic.table.XmlTableSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.impl.SelectStatementAssert;
+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.ExpectedXmlTableFunction;
+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.ExpectedXmlTable;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Table assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TableAssert {
+    
+    /**
+     * Assert actual table segments is correct with expected tables.
+     *
+     * @param assertContext assert context
+     * @param actual actual tables
+     * @param expected expected tables
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final TableSegment actual, final ExpectedTable expected) {
+        if (actual instanceof JoinTableSegment) {
+            assertIs(assertContext, (JoinTableSegment) actual, expected.getJoinTable());
+        } else if (actual instanceof SimpleTableSegment) {
+            assertIs(assertContext, (SimpleTableSegment) actual, expected.getSimpleTable());
+        } else if (actual instanceof SubqueryTableSegment) {
+            assertIs(assertContext, (SubqueryTableSegment) actual, expected.getSubqueryTable());
+        } else if (actual instanceof XmlTableSegment) {
+            assertIs(assertContext, (XmlTableSegment) actual, expected.getXmlTable());
+        } else {
+            throw new UnsupportedOperationException(
+                    String.format("Unsupported table segment type `%s`.", actual.getClass()));
+        }
+    }
+    
+    /**
+     * Assert actual xml table segment is correct with expected xml table.
+     *
+     * @param assertContext assert context
+     * @param actual actual xml table
+     * @param expected expected xml table
+     */
+    private static void assertIs(final SQLCaseAssertContext assertContext, final XmlTableSegment actual, final ExpectedXmlTable expected) {
+        assertThat(assertContext.getText("Table name assertion error"), actual.getTableName(), is(expected.getTableName()));
+        assertThat(assertContext.getText("Table name alias assertion error"), actual.getTableNameAlias(), is(expected.getTableAlias()));
+        assertXmlTableFunction(assertContext, actual.getXmlTableFunction(), expected.getXmlTableFunction());
+        assertThat(assertContext.getText("Xml table function alias assertion error"), actual.getXmlTableFunctionAlias(), is(expected.getXmlTableFunctionAlias()));
+    }
+    
+    /**
+     * Assert actual table segment is correct with expected table.
+     *
+     * @param assertContext assert context
+     * @param actual actual table
+     * @param expected expected table
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SimpleTableSegment actual, final ExpectedSimpleTable expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getTableName().getIdentifier(), expected, "Table");
+        assertThat(assertContext.getText("Table alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    /**
+     * Assert subquery expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual subquery segment
+     * @param expected expected subquery expression
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SubqueryTableSegment actual, final ExpectedSubqueryTable expected) {
+        SelectStatementAssert.assertIs(assertContext, actual.getSubquery().getSelect(), expected.getSubquery().getSelectTestCases());
+        assertThat(assertContext.getText("Table alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+    }
+    
+    /**
+     * Assert join table.
+     *
+     * @param assertContext assert context
+     * @param actual actual JoinTableSegment
+     * @param expected expected ExpectedJoinTable
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final JoinTableSegment actual, final ExpectedJoinTable expected) {
+        assertIs(assertContext, actual.getLeft(), expected.getLeft());
+        assertIs(assertContext, actual.getRight(), expected.getRight());
+        ExpressionAssert.assertExpression(assertContext, actual.getCondition(), expected.getOnCondition());
+        assertJoinType(assertContext, actual.getJoinType(), expected.getJoinType());
+        assertThat(assertContext.getText("Natural should be the same."), actual.isNatural(), is(expected.isNatural()));
+        assertThat(assertContext.getText("Column size assertion error: "), actual.getUsing().size(), is(expected.getUsingColumns().size()));
+        int count = 0;
+        for (ExpectedColumn each : expected.getUsingColumns()) {
+            ColumnAssert.assertIs(assertContext, actual.getUsing().get(count), each);
+            count++;
+        }
+    }
+    
+    /**
+     * Assert actual table segments is correct with expected tables.
+     *
+     * @param assertContext assert context
+     * @param actual actual tables
+     * @param expected expected tables
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final Collection<SimpleTableSegment> actual, final List<ExpectedSimpleTable> expected) {
+        assertThat(assertContext.getText("Tables size assertion error: "), actual.size(), is(expected.size()));
+        int count = 0;
+        for (SimpleTableSegment each : actual) {
+            assertIs(assertContext, each, expected.get(count));
+            count++;
+        }
+    }
+    
+    /**
+     * Assert actual simple table segments with expected simple tables.
+     *
+     * @param assertContext assert context
+     * @param actualTables actual simple tables
+     * @param expectedTables expected simple tables
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final List<SimpleTableSegment> actualTables, final List<ExpectedSimpleTable> expectedTables) {
+        assertThat(assertContext.getText("tables size should be the same."),
+                actualTables.size(), is(expectedTables.size()));
+        for (int i = 0; i < actualTables.size(); i++) {
+            assertIs(assertContext, actualTables.get(i), expectedTables.get(i));
+        }
+    }
+    
+    private static void assertJoinType(final SQLCaseAssertContext assertContext, final String actual, final String expected) {
+        if (Strings.isNullOrEmpty(expected)) {
+            assertTrue(assertContext.getText("Actual join-type should not exist."), Strings.isNullOrEmpty(actual));
+        } else {
+            assertThat(assertContext.getText("Actual join-type should exist."), actual, is(expected));
+        }
+    }
+    
+    /**
+     * Assert actual xml table function segment is correct with expected xml table function.
+     *
+     * @param assertContext assert context
+     * @param actual actual xml table function
+     * @param expected expected xml table function
+     */
+    private static void assertXmlTableFunction(final SQLCaseAssertContext assertContext, final XmlTableFunctionSegment actual, final ExpectedXmlTableFunction expected) {
+        assertThat(assertContext.getText("Function name assertion error"), actual.getFunctionName(), is(expected.getFunctionName()));
+        assertThat(assertContext.getText("Function text assert error"), actual.getText(), is(expected.getText()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/type/TypeAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/type/TypeAssert.java
new file mode 100644
index 00000000000..96e898a780c
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/type/TypeAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.segment.type;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.type.TypeSegment;
+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.owner.OwnerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.type.ExpectedType;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Type assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TypeAssert {
+    
+    /**
+     * Assert actual type segment is correct with expected type.
+     *
+     * @param assertContext assert context
+     * @param actual actual type segment
+     * @param expected expected type
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final TypeSegment actual, final ExpectedType expected) {
+        assertNotNull(assertContext.getText("Type should exist."), expected);
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Type");
+        if (null == expected.getOwner()) {
+            assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
+        } else {
+            assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/where/WhereClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/where/WhereClauseAssert.java
new file mode 100644
index 00000000000..9aa37c3b81d
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/where/WhereClauseAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.segment.where;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+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.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.where.ExpectedWhereClause;
+
+/**
+ * Where clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class WhereClauseAssert {
+    
+    /**
+     * Assert actual where segment is correct with expected where clause.
+     * 
+     * @param assertContext assert context
+     * @param actual actual where segment
+     * @param expected expected where clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final WhereSegment actual, final ExpectedWhereClause expected) {
+        ExpressionAssert.assertExpression(assertContext, actual.getExpr(), expected.getExpr());
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
new file mode 100644
index 00000000000..d7b46e5dd00
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
@@ -0,0 +1,76 @@
+/*
+ * 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.asserts.segment.with;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
+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;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.expression.ExpressionAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.with.ExpectedCommonTableExpressionClause;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.with.ExpectedWithClause;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * With clause assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class WithClauseAssert {
+    
+    /**
+     * Assert actual with segment is correct with expected with clause.
+     *
+     * @param assertContext assert context
+     * @param actual actual with segment
+     * @param expected expected with clause
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final WithSegment actual, final ExpectedWithClause expected) {
+        assertNotNull(assertContext.getText("With clause should exist."), expected);
+        assertThat(assertContext.getText("With clause common table expressions size assertion error: "),
+                actual.getCommonTableExpressions().size(), is(expected.getCommonTableExpressions().size()));
+        int count = 0;
+        for (CommonTableExpressionSegment each : actual.getCommonTableExpressions()) {
+            assertCommonTableExpressionSegment(assertContext, each, expected.getCommonTableExpressions().get(count));
+            count++;
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
+    private static void assertCommonTableExpressionSegment(final SQLCaseAssertContext assertContext, final CommonTableExpressionSegment actual, final ExpectedCommonTableExpressionClause expected) {
+        if (!expected.getColumns().isEmpty()) {
+            assertThat(assertContext.getText("Common table expression column size assertion error: "), actual.getColumns().size(), is(expected.getColumns().size()));
+        }
+        assertThat(assertContext.getText("Common table expression name assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
+        int count = 0;
+        for (ColumnSegment each : actual.getColumns()) {
+            ColumnAssert.assertIs(assertContext, each, expected.getColumns().get(count));
+            count++;
+        }
+        if (null != expected.getSubquery()) {
+            ExpressionAssert.assertSubquery(assertContext, actual.getSubquery(), expected.getSubquery());
+        }
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/SQLStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/SQLStatementAssert.java
new file mode 100644
index 00000000000..c49ac7d03d7
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/SQLStatementAssert.java
@@ -0,0 +1,82 @@
+/*
+ * 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.asserts.statement;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.parameter.ParameterMarkerAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.comment.CommentAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.DALStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dcl.DCLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.DDLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ral.RALStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.rdl.RDLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.rql.RQLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.rul.RULStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.DMLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.tcl.TCLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+/**
+ * SQL statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLStatementAssert {
+    
+    /**
+     * Assert SQL statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual SQL statement
+     * @param expected expected parser result
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SQLStatement actual, final SQLParserTestCase expected) {
+        ParameterMarkerAssert.assertCount(assertContext, actual.getParameterCount(), expected.getParameters().size());
+        CommentAssert.assertComment(assertContext, actual, expected);
+        if (actual instanceof DMLStatement) {
+            DMLStatementAssert.assertIs(assertContext, (DMLStatement) actual, expected);
+        } else if (actual instanceof DDLStatement) {
+            DDLStatementAssert.assertIs(assertContext, (DDLStatement) actual, expected);
+        } else if (actual instanceof TCLStatement) {
+            TCLStatementAssert.assertIs(assertContext, (TCLStatement) actual, expected);
+        } else if (actual instanceof DCLStatement) {
+            DCLStatementAssert.assertIs(assertContext, (DCLStatement) actual, expected);
+        } else if (actual instanceof DALStatement) {
+            DALStatementAssert.assertIs(assertContext, (DALStatement) actual, expected);
+        } else if (actual instanceof RDLStatement) {
+            RDLStatementAssert.assertIs(assertContext, (RDLStatement) actual, expected);
+        } else if (actual instanceof RQLStatement) {
+            RQLStatementAssert.assertIs(assertContext, (RQLStatement) actual, expected);
+        } else if (actual instanceof RALStatement) {
+            RALStatementAssert.assertIs(assertContext, (RALStatement) actual, expected);
+        } else if (actual instanceof RULStatement) {
+            RULStatementAssert.assertIs(assertContext, (RULStatement) actual, expected);
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
new file mode 100644
index 00000000000..478bba086d8
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
@@ -0,0 +1,70 @@
+/*
+ * 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.asserts.statement.comment;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.comments.ExpectedComment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+import java.util.Iterator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Comment assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CommentAssert {
+    
+    /**
+     * Assert comment is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual SQL statement
+     * @param expected expected statement test case
+     */
+    public static void assertComment(final SQLCaseAssertContext assertContext, final SQLStatement actual, final SQLParserTestCase expected) {
+        if (expected.getComments().isEmpty()) {
+            assertEmptyComment(assertContext, actual);
+        } else {
+            assertCorrectComment(assertContext, actual, expected);
+        }
+    }
+    
+    private static void assertEmptyComment(final SQLCaseAssertContext assertContext, final SQLStatement actual) {
+        if (actual instanceof AbstractSQLStatement) {
+            assertTrue(assertContext.getText("Comment should be empty."), ((AbstractSQLStatement) actual).getCommentSegments().isEmpty());
+        }
+    }
+    
+    private static void assertCorrectComment(final SQLCaseAssertContext assertContext, final SQLStatement actual, final SQLParserTestCase expected) {
+        assertTrue(assertContext.getText("Comment should exist."), actual instanceof AbstractSQLStatement);
+        assertThat(assertContext.getText("Comments size assertion error: "), ((AbstractSQLStatement) actual).getCommentSegments().size(), is(expected.getComments().size()));
+        Iterator<CommentSegment> actualIterator = ((AbstractSQLStatement) actual).getCommentSegments().iterator();
+        for (final ExpectedComment each : expected.getComments()) {
+            assertThat(assertContext.getText("Comments assertion error: "), actualIterator.next().getText(), is(each.getText()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
new file mode 100644
index 00000000000..11fec3fb81c
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
@@ -0,0 +1,302 @@
+/*
+ * 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.asserts.statement.dal;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ExplainStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ResetParameterStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLAlterResourceGroupStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLBinlogStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCacheIndexStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCheckTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLChecksumTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCloneStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCreateResourceGroupStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLDelimiterStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLDropResourceGroupStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLFlushStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLInstallComponentStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLInstallPluginStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLKillStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLLoadIndexInfoStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLOptimizeTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLRepairTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLResetPersistStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLResetStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLRestartStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLSetResourceGroupStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowBinlogEventsStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCollationStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowColumnsStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateTriggerStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateUserStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowEventsStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowFunctionStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowIndexStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowOpenTablesStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowProcedureCodeStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowProcedureStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowRelayLogEventsStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowReplicaStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowReplicasStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowSlaveHostsStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowSlaveStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTableStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTriggersStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowVariablesStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShutdownStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUninstallComponentStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUninstallPluginStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.CacheIndexStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.CheckTableStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.CloneStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.EmptyStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ExplainStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.FlushStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.InstallComponentStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.InstallPluginStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.KillStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.LoadIndexInfoStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLAlterResourceGroupStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLBinlogStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLChecksumTableStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLCreateResourceGroupStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLDelimiterStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLDropResourceGroupStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLOptimizeTableStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLRepairTableStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLResetPersistStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLResetStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLSetResourceGroupStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLUseStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ResetParameterStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.RestartStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.SetParameterStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowBinlogEventsStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowCollationStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowColumnsStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowCreateTableStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowCreateTriggerStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowCreateUserStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowDatabasesStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowEventsStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowFunctionStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowIndexStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowOpenTablesStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowProcedureCodeStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowProcedureStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowRelaylogEventsStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowReplicaStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowReplicasStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowSlaveHostsStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowSlaveStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowTableStatusStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowTablesStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowTriggersStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShowVariablesStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.ShutdownStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.UninstallComponentStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.UninstallPluginStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.AlterResourceGroupStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.BinlogStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CacheIndexStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CheckTableStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ChecksumTableStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CloneStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CreateResourceGroupStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.DelimiterStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.DropResourceGroupStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.EmptyStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ExplainStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.FlushStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.InstallComponentStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.InstallPluginStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.KillStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.LoadIndexInfoStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.OptimizeTableStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.RepairTableStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ResetParameterStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ResetPersistStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ResetStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.RestartStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.SetParameterStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.SetResourceGroupStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowBinlogEventsStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowCollationStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowColumnsStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowCreateTableStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowCreateTriggerStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowCreateUserStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowDatabasesStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowEventsStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowFunctionStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowIndexStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowOpenTablesStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowProcedureCodeStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowProcedureStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowRelayLogEventsStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowReplicaStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowReplicasStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowSlaveHostsStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowSlaveStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowTableStatusStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowTablesStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowTriggersStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowVariablesStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShutdownStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.UninstallComponentStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.UninstallPluginStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.UseStatementTestCase;
+
+/**
+ * DAL statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DALStatementAssert {
+    
+    /**
+     * Assert DAL statement is correct with expected parser result.
+     * 
+     * @param assertContext assert context
+     * @param actual actual DAL statement
+     * @param expected expected DAL statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DALStatement actual, final SQLParserTestCase expected) {
+        if (actual instanceof MySQLUseStatement) {
+            MySQLUseStatementAssert.assertIs(assertContext, (MySQLUseStatement) actual, (UseStatementTestCase) expected);
+        } else if (actual instanceof EmptyStatement) {
+            EmptyStatementAssert.assertIs(assertContext, (EmptyStatement) actual, (EmptyStatementTestCase) expected);
+        } else if (actual instanceof ExplainStatement) {
+            ExplainStatementAssert.assertIs(assertContext, (ExplainStatement) actual, (ExplainStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowDatabasesStatement) {
+            ShowDatabasesStatementAssert.assertIs(assertContext, (MySQLShowDatabasesStatement) actual, (ShowDatabasesStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowTablesStatement) {
+            ShowTablesStatementAssert.assertIs(assertContext, (MySQLShowTablesStatement) actual, (ShowTablesStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowColumnsStatement) {
+            ShowColumnsStatementAssert.assertIs(assertContext, (MySQLShowColumnsStatement) actual, (ShowColumnsStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowCreateTableStatement) {
+            ShowCreateTableStatementAssert.assertIs(assertContext, (MySQLShowCreateTableStatement) actual, (ShowCreateTableStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowCreateTriggerStatement) {
+            ShowCreateTriggerStatementAssert.assertIs(assertContext, (MySQLShowCreateTriggerStatement) actual, (ShowCreateTriggerStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowCreateUserStatement) {
+            ShowCreateUserStatementAssert.assertIs(assertContext, (MySQLShowCreateUserStatement) actual, (ShowCreateUserStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowTableStatusStatement) {
+            ShowTableStatusStatementAssert.assertIs(assertContext, (MySQLShowTableStatusStatement) actual, (ShowTableStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowIndexStatement) {
+            ShowIndexStatementAssert.assertIs(assertContext, (MySQLShowIndexStatement) actual, (ShowIndexStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowRelayLogEventsStatement) {
+            ShowRelaylogEventsStatementAssert.assertIs(assertContext, (MySQLShowRelayLogEventsStatement) actual, (ShowRelayLogEventsStatementTestCase) expected);
+        } else if (actual instanceof ShowStatement) {
+            ShowStatementAssert.assertIs(assertContext, (ShowStatement) actual, (ShowStatementTestCase) expected);
+        } else if (actual instanceof SetStatement) {
+            SetParameterStatementAssert.assertIs(assertContext, (SetStatement) actual, (SetParameterStatementTestCase) expected);
+        } else if (actual instanceof ResetParameterStatement) {
+            ResetParameterStatementAssert.assertIs(assertContext, (ResetParameterStatement) actual, (ResetParameterStatementTestCase) expected);
+        } else if (actual instanceof MySQLInstallComponentStatement) {
+            InstallComponentStatementAssert.assertIs(assertContext, (MySQLInstallComponentStatement) actual, (InstallComponentStatementTestCase) expected);
+        } else if (actual instanceof MySQLFlushStatement) {
+            FlushStatementAssert.assertIs(assertContext, (MySQLFlushStatement) actual, (FlushStatementTestCase) expected);
+        } else if (actual instanceof MySQLInstallPluginStatement) {
+            InstallPluginStatementAssert.assertIs(assertContext, (MySQLInstallPluginStatement) actual, (InstallPluginStatementTestCase) expected);
+        } else if (actual instanceof MySQLCloneStatement) {
+            CloneStatementAssert.assertIs(assertContext, (MySQLCloneStatement) actual, (CloneStatementTestCase) expected);
+        } else if (actual instanceof MySQLUninstallComponentStatement) {
+            UninstallComponentStatementAssert.assertIs(assertContext, (MySQLUninstallComponentStatement) actual, (UninstallComponentStatementTestCase) expected);
+        } else if (actual instanceof MySQLCreateResourceGroupStatement) {
+            MySQLCreateResourceGroupStatementAssert.assertIs(assertContext, (MySQLCreateResourceGroupStatement) actual, (CreateResourceGroupStatementTestCase) expected);
+        } else if (actual instanceof MySQLUninstallPluginStatement) {
+            UninstallPluginStatementAssert.assertIs(assertContext, (MySQLUninstallPluginStatement) actual, (UninstallPluginStatementTestCase) expected);
+        } else if (actual instanceof MySQLRestartStatement) {
+            RestartStatementAssert.assertIs(assertContext, (MySQLRestartStatement) actual, (RestartStatementTestCase) expected);
+        } else if (actual instanceof MySQLSetResourceGroupStatement) {
+            MySQLSetResourceGroupStatementAssert.assertIs(assertContext, (MySQLSetResourceGroupStatement) actual, (SetResourceGroupStatementTestCase) expected);
+        } else if (actual instanceof MySQLOptimizeTableStatement) {
+            MySQLOptimizeTableStatementAssert.assertIs(assertContext, (MySQLOptimizeTableStatement) actual, (OptimizeTableStatementTestCase) expected);
+        } else if (actual instanceof MySQLRepairTableStatement) {
+            MySQLRepairTableStatementAssert.assertIs(assertContext, (MySQLRepairTableStatement) actual, (RepairTableStatementTestCase) expected);
+        } else if (actual instanceof MySQLBinlogStatement) {
+            MySQLBinlogStatementAssert.assertIs(assertContext, (MySQLBinlogStatement) actual, (BinlogStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowFunctionStatusStatement) {
+            ShowFunctionStatusStatementAssert.assertIs(assertContext, (MySQLShowFunctionStatusStatement) actual, (ShowFunctionStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowProcedureStatusStatement) {
+            ShowProcedureStatusStatementAssert.assertIs(assertContext, (MySQLShowProcedureStatusStatement) actual, (ShowProcedureStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowReplicasStatement) {
+            ShowReplicasStatementAssert.assertIs(assertContext, (MySQLShowReplicasStatement) actual, (ShowReplicasStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowReplicaStatusStatement) {
+            ShowReplicaStatusStatementAssert.assertIs(assertContext, (MySQLShowReplicaStatusStatement) actual, (ShowReplicaStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowSlaveStatusStatement) {
+            ShowSlaveStatusStatementAssert.assertIs(assertContext, (MySQLShowSlaveStatusStatement) actual, (ShowSlaveStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowSlaveHostsStatement) {
+            ShowSlaveHostsStatementAssert.assertIs(assertContext, (MySQLShowSlaveHostsStatement) actual, (ShowSlaveHostsStatementTestCase) expected);
+        } else if (actual instanceof MySQLResetStatement) {
+            MySQLResetStatementAssert.assertIs(assertContext, (MySQLResetStatement) actual, (ResetStatementTestCase) expected);
+        } else if (actual instanceof MySQLResetPersistStatement) {
+            MySQLResetPersistStatementAssert.assertIs(assertContext, (MySQLResetPersistStatement) actual, (ResetPersistStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowProcedureCodeStatement) {
+            ShowProcedureCodeStatementAssert.assertIs(assertContext, (MySQLShowProcedureCodeStatement) actual, (ShowProcedureCodeStatementTestCase) expected);
+        } else if (actual instanceof MySQLKillStatement) {
+            KillStatementAssert.assertIs(assertContext, (MySQLKillStatement) actual, (KillStatementTestCase) expected);
+        } else if (actual instanceof MySQLCacheIndexStatement) {
+            CacheIndexStatementAssert.assertIs(assertContext, (MySQLCacheIndexStatement) actual, (CacheIndexStatementTestCase) expected);
+        } else if (actual instanceof MySQLLoadIndexInfoStatement) {
+            LoadIndexInfoStatementAssert.assertIs(assertContext, (MySQLLoadIndexInfoStatement) actual, (LoadIndexInfoStatementTestCase) expected);
+        } else if (actual instanceof MySQLShutdownStatement) {
+            ShutdownStatementAssert.assertIs(assertContext, (MySQLShutdownStatement) actual, (ShutdownStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowOpenTablesStatement) {
+            ShowOpenTablesStatementAssert.assertIs(assertContext, (MySQLShowOpenTablesStatement) actual, (ShowOpenTablesStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowTriggersStatement) {
+            ShowTriggersStatementAssert.assertIs(assertContext, (MySQLShowTriggersStatement) actual, (ShowTriggersStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowStatusStatement) {
+            ShowStatusStatementAssert.assertIs(assertContext, (MySQLShowStatusStatement) actual, (ShowStatusStatementTestCase) expected);
+        } else if (actual instanceof MySQLCheckTableStatement) {
+            CheckTableStatementAssert.assertIs(assertContext, (MySQLCheckTableStatement) actual, (CheckTableStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowEventsStatement) {
+            ShowEventsStatementAssert.assertIs(assertContext, (MySQLShowEventsStatement) actual, (ShowEventsStatementTestCase) expected);
+        } else if (actual instanceof MySQLDropResourceGroupStatement) {
+            MySQLDropResourceGroupStatementAssert.assertIs(assertContext, (MySQLDropResourceGroupStatement) actual, (DropResourceGroupStatementTestCase) expected);
+        } else if (actual instanceof MySQLAlterResourceGroupStatement) {
+            MySQLAlterResourceGroupStatementAssert.assertIs(assertContext, (MySQLAlterResourceGroupStatement) actual, (AlterResourceGroupStatementTestCase) expected);
+        } else if (actual instanceof MySQLChecksumTableStatement) {
+            MySQLChecksumTableStatementAssert.assertIs(assertContext, (MySQLChecksumTableStatement) actual, (ChecksumTableStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowCollationStatement) {
+            ShowCollationStatementAssert.assertIs(assertContext, (MySQLShowCollationStatement) actual, (ShowCollationStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowVariablesStatement) {
+            ShowVariablesStatementAssert.assertIs(assertContext, (MySQLShowVariablesStatement) actual, (ShowVariablesStatementTestCase) expected);
+        } else if (actual instanceof MySQLDelimiterStatement) {
+            MySQLDelimiterStatementAssert.assertIs(assertContext, (MySQLDelimiterStatement) actual, (DelimiterStatementTestCase) expected);
+        } else if (actual instanceof MySQLShowBinlogEventsStatement) {
+            ShowBinlogEventsStatementAssert.assertIs(assertContext, (MySQLShowBinlogEventsStatement) actual, (ShowBinlogEventsStatementTestCase) expected);
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CacheIndexStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CacheIndexStatementAssert.java
new file mode 100644
index 00000000000..1d4bb0406e7
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CacheIndexStatementAssert.java
@@ -0,0 +1,88 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCacheIndexStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.CacheTableIndexSegment;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.PartitionDefinitionSegment;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.PartitionSegment;
+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.index.IndexAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.index.ExpectedCacheTableIndex;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.index.ExpectedPartitionDefinition;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CacheIndexStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Cache index statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CacheIndexStatementAssert {
+    
+    /**
+     * Assert cache index statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual cache index statement
+     * @param expected expected cache index statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLCacheIndexStatement actual, final CacheIndexStatementTestCase expected) {
+        if (!expected.getTableIndexes().isEmpty()) {
+            int count = 0;
+            for (CacheTableIndexSegment each : actual.getTableIndexes()) {
+                TableAssert.assertIs(assertContext, each.getTable(), expected.getTableIndexes().get(count).getTable());
+                assertIndexes(assertContext, each, expected.getTableIndexes().get(count));
+                SQLSegmentAssert.assertIs(assertContext, each, expected.getTableIndexes().get(count));
+                count++;
+            }
+        }
+        if (null != expected.getPartitionDefinition()) {
+            assertPartitions(assertContext, actual.getPartitionDefinition(), expected.getPartitionDefinition());
+            SQLSegmentAssert.assertIs(assertContext, actual.getPartitionDefinition(), expected.getPartitionDefinition());
+        }
+        if (null != expected.getName()) {
+            assertThat(assertContext.getText("Cache index statement name assert error: "), actual.getName().getValue(), is(expected.getName()));
+        }
+    }
+    
+    private static void assertIndexes(final SQLCaseAssertContext assertContext, final CacheTableIndexSegment actual, final ExpectedCacheTableIndex expected) {
+        int count = 0;
+        for (IndexSegment index : actual.getIndexes()) {
+            IndexAssert.assertIs(assertContext, index, expected.getIndexNames().get(count));
+            count++;
+        }
+    }
+    
+    private static void assertPartitions(final SQLCaseAssertContext assertContext, final PartitionDefinitionSegment actual, final ExpectedPartitionDefinition expected) {
+        TableAssert.assertIs(assertContext, actual.getTable(), expected.getTable());
+        int count = 0;
+        for (PartitionSegment each : actual.getPartitions()) {
+            IdentifierValueAssert.assertIs(assertContext, each.getName(), expected.getPartitions().get(count), "Partition");
+            SQLSegmentAssert.assertIs(assertContext, each, expected.getPartitions().get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CheckTableStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CheckTableStatementAssert.java
new file mode 100644
index 00000000000..e0839a54b80
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CheckTableStatementAssert.java
@@ -0,0 +1,43 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCheckTableStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CheckTableStatementTestCase;
+
+/**
+ * Check table statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CheckTableStatementAssert {
+    
+    /**
+     * Assert check table statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual check table statement
+     * @param expected expected check table statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLCheckTableStatement actual, final CheckTableStatementTestCase expected) {
+        TableAssert.assertIs(assertContext, actual.getTables(), expected.getTables());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CloneStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CloneStatementAssert.java
new file mode 100644
index 00000000000..5c0120c00b0
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/CloneStatementAssert.java
@@ -0,0 +1,56 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLCloneStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.CloneInstanceSegment;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.CloneStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Clone statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CloneStatementAssert {
+    
+    /**
+     * Assert clone statement is correct with expected clone statement test case.
+     *
+     * @param assertContext assert context
+     * @param actual actual clone statement
+     * @param expected expected clone statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLCloneStatement actual, final CloneStatementTestCase expected) {
+        if (null != expected.getDataDirectory()) {
+            assertThat(assertContext.getText("Actual data directory does not match: "), actual.getCloneActionSegment().getCloneDir(), is(expected.getDataDirectory().getLocation()));
+        }
+        if (null != expected.getInstance()) {
+            CloneInstanceSegment instance = actual.getCloneActionSegment().getCloneInstance();
+            assertThat(assertContext.getText("Actual instance hostname does not match: "), instance.getHostname(), is(expected.getInstance().getHostname()));
+            assertThat(assertContext.getText("Actual instance username does not match: "), instance.getUsername(), is(expected.getInstance().getUsername()));
+            assertThat(assertContext.getText("Actual instance port does not match: "), instance.getPort(), is(expected.getInstance().getPort()));
+            assertThat(assertContext.getText("Actual instance password does not match: "), instance.getPassword(), is(expected.getInstance().getPassword()));
+            assertThat(assertContext.getText("Actual instance SSL requirement does not match: "), instance.isSslRequired(), is(expected.getInstance().isSslRequired()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/EmptyStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/EmptyStatementAssert.java
new file mode 100644
index 00000000000..28ad89cc55b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/EmptyStatementAssert.java
@@ -0,0 +1,41 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.EmptyStatementTestCase;
+
+/**
+ * Empty statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class EmptyStatementAssert {
+    
+    /**
+     * Assert empty statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual empty statement
+     * @param expected expected empty statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final EmptyStatement actual, final EmptyStatementTestCase expected) {
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ExplainStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ExplainStatementAssert.java
new file mode 100644
index 00000000000..989b32a63cc
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ExplainStatementAssert.java
@@ -0,0 +1,81 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ExplainStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLExplainStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.SQLStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ExplainStatementTestCase;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Explain statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ExplainStatementAssert {
+    
+    /**
+     * Assert explain statement is correct with expected parser result.
+     * 
+     * @param assertContext assert context
+     * @param actual actual explain statement
+     * @param expected expected explain statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ExplainStatement actual, final ExplainStatementTestCase expected) {
+        if (null != expected.getSelectClause()) {
+            assertTrue(assertContext.getText("Actual statement should exist."), actual.getStatement().isPresent());
+            SQLStatementAssert.assertIs(assertContext, actual.getStatement().get(), expected.getSelectClause());
+        } else if (null != expected.getUpdateClause()) {
+            assertTrue(assertContext.getText("Actual statement should exist."), actual.getStatement().isPresent());
+            SQLStatementAssert.assertIs(assertContext, actual.getStatement().get(), expected.getUpdateClause());
+        } else if (null != expected.getInsertClause()) {
+            assertTrue(assertContext.getText("Actual statement should exist."), actual.getStatement().isPresent());
+            SQLStatementAssert.assertIs(assertContext, actual.getStatement().get(), expected.getInsertClause());
+        } else if (null != expected.getDeleteClause()) {
+            assertTrue(assertContext.getText("Actual statement should exist."), actual.getStatement().isPresent());
+            SQLStatementAssert.assertIs(assertContext, actual.getStatement().get(), expected.getDeleteClause());
+        } else if (null != expected.getCreateTableAsSelectClause()) {
+            assertTrue(assertContext.getText("Actual statement should exist."), actual.getStatement().isPresent());
+            SQLStatementAssert.assertIs(assertContext, actual.getStatement().get(), expected.getCreateTableAsSelectClause());
+        } else if (actual instanceof MySQLExplainStatement && null != expected.getTable()) {
+            mysqlExplainStatementAssert(assertContext, (MySQLExplainStatement) actual, expected);
+        } else {
+            assertFalse(assertContext.getText("Actual statement should not exist."), actual.getStatement().isPresent());
+        }
+    }
+    
+    private static void mysqlExplainStatementAssert(final SQLCaseAssertContext assertContext, final MySQLExplainStatement actual, final ExplainStatementTestCase expected) {
+        if (actual.getTable().isPresent()) {
+            TableAssert.assertIs(assertContext, actual.getTable().get(), expected.getTable());
+            if (actual.getColumnWild().isPresent()) {
+                ColumnAssert.assertIs(assertContext, actual.getColumnWild().get(), expected.getColumn());
+            } else {
+                assertFalse(assertContext.getText("Actual column wild should not exist."), actual.getColumnWild().isPresent());
+            }
+        } else {
+            assertFalse(assertContext.getText("Actual table should not exist."), actual.getTable().isPresent());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
new file mode 100644
index 00000000000..98818133ce2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
@@ -0,0 +1,51 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLFlushStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.FlushStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Flush statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class FlushStatementAssert {
+    
+    /**
+     * Assert flush statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual flush statement
+     * @param expected expected flush statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLFlushStatement actual, final FlushStatementTestCase expected) {
+        assertThat(assertContext.getText("Flush statement is flush table assert error: "), actual.isFlushTable(), is(expected.isFlushTable()));
+        assertTables(assertContext, actual, expected);
+    }
+    
+    private static void assertTables(final SQLCaseAssertContext assertContext, final MySQLFlushStatement actual, final FlushStatementTestCase expected) {
+        TableAssert.assertIs(assertContext, actual.getTables(), expected.getTables());
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallComponentStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallComponentStatementAssert.java
new file mode 100644
index 00000000000..290b8207230
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallComponentStatementAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLInstallComponentStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.component.ExpectedComponent;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.InstallComponentStatementTestCase;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Install component statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InstallComponentStatementAssert {
+    
+    /**
+     * Assert install component statement is correct with expected install component statement test case.
+     *
+     * @param assertContext assert context
+     * @param actual actual install component statement
+     * @param expected expected install component statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLInstallComponentStatement actual, final InstallComponentStatementTestCase expected) {
+        assertThat(assertContext.getText("Actual components size assertion error: "), actual.getComponents().size(), is(expected.getComponents().size()));
+        assertComponents(assertContext, actual.getComponents(), expected.getComponents());
+    }
+    
+    private static void assertComponents(final SQLCaseAssertContext assertContext, final List<String> actual, final List<ExpectedComponent> expected) {
+        int count = 0;
+        for (String each : actual) {
+            assertThat(assertContext.getText("Actual component value does not match: "), each, is(expected.get(count).getName()));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallPluginStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallPluginStatementAssert.java
new file mode 100644
index 00000000000..20ba76140ad
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/InstallPluginStatementAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLInstallPluginStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.InstallPluginStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Install plugin statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InstallPluginStatementAssert {
+    
+    /**
+     * Assert install plugin statement is correct with expected install plugin statement test case.
+     *
+     * @param assertContext assert context
+     * @param actual actual install plugin statement
+     * @param expected expected install plugin statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLInstallPluginStatement actual, final InstallPluginStatementTestCase expected) {
+        assertThat(assertContext.getText("Actual plugin name does not match: "), actual.getPluginName(), is(expected.getPlugin().getName()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/KillStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/KillStatementAssert.java
new file mode 100644
index 00000000000..636929299b2
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/KillStatementAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLKillStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.KillStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Kill statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class KillStatementAssert {
+    
+    /**
+     * Assert kill statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual kill statement
+     * @param expected expected kill statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLKillStatement actual, final KillStatementTestCase expected) {
+        assertThat(assertContext.getText("Kill statement context does not match: "), actual.getProcesslistId(), is(expected.getProcesslistId()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/LoadIndexInfoStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/LoadIndexInfoStatementAssert.java
new file mode 100644
index 00000000000..b4699a8497b
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/LoadIndexInfoStatementAssert.java
@@ -0,0 +1,78 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLLoadIndexInfoStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.LoadTableIndexSegment;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.segment.PartitionSegment;
+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.index.IndexAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.index.ExpectedLoadTableIndex;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.LoadIndexInfoStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Load index info statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LoadIndexInfoStatementAssert {
+    
+    /**
+     * Assert load index info statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual load index info statement
+     * @param expected expected load index info statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLLoadIndexInfoStatement actual, final LoadIndexInfoStatementTestCase expected) {
+        assertThat("Load index info statement table index size assertion error: ", actual.getTableIndexes().size(), is(expected.getTableIndexes().size()));
+        int count = 0;
+        for (LoadTableIndexSegment each : actual.getTableIndexes()) {
+            TableAssert.assertIs(assertContext, each.getTable(), expected.getTableIndexes().get(count).getTable());
+            assertIndexes(assertContext, each, expected.getTableIndexes().get(count));
+            assertPartitions(assertContext, each, expected.getTableIndexes().get(count));
+            SQLSegmentAssert.assertIs(assertContext, each, expected.getTableIndexes().get(count));
+            count++;
+        }
+    }
+    
+    private static void assertIndexes(final SQLCaseAssertContext assertContext, final LoadTableIndexSegment actual, final ExpectedLoadTableIndex expected) {
+        int count = 0;
+        for (IndexSegment index : actual.getIndexes()) {
+            IndexAssert.assertIs(assertContext, index, expected.getIndexNames().get(count));
+            count++;
+        }
+    }
+    
+    private static void assertPartitions(final SQLCaseAssertContext assertContext, final LoadTableIndexSegment actual, final ExpectedLoadTableIndex expected) {
+        int count = 0;
+        for (PartitionSegment each : actual.getPartitions()) {
+            IdentifierValueAssert.assertIs(assertContext, each.getName(), expected.getPartitions().get(count), "Partition");
+            SQLSegmentAssert.assertIs(assertContext, each, expected.getPartitions().get(count));
+            count++;
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ResetParameterStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ResetParameterStatementAssert.java
new file mode 100644
index 00000000000..e9f15f11634
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ResetParameterStatementAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ResetParameterStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ResetParameterStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Reset parameter statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ResetParameterStatementAssert {
+    
+    /**
+     * Assert reset parameter statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual reset parameter statement
+     * @param expected expected reset parameter statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ResetParameterStatement actual, final ResetParameterStatementTestCase expected) {
+        assertThat(assertContext.getText("Configuration parameter assertion error: "), actual.getConfigurationParameter(), is(expected.getConfigurationParameter()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/RestartStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/RestartStatementAssert.java
new file mode 100644
index 00000000000..f9ce781b20a
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/RestartStatementAssert.java
@@ -0,0 +1,41 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLRestartStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.RestartStatementTestCase;
+
+/**
+ * restart statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class RestartStatementAssert {
+    
+    /**
+     * Assert restart statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual restart statement
+     * @param expected expected restart statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLRestartStatement actual, final RestartStatementTestCase expected) {
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SetParameterStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SetParameterStatementAssert.java
new file mode 100644
index 00000000000..72361627bbc
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SetParameterStatementAssert.java
@@ -0,0 +1,58 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.assignment.ExpectedVariable;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.SetParameterStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Set parameter statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SetParameterStatementAssert {
+    
+    /**
+     * Assert set parameter statement is correct with expected parser result.
+     * 
+     * @param assertContext assert context
+     * @param actual actual set parameter statement
+     * @param expected expected parameter statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final SetStatement actual, final SetParameterStatementTestCase expected) {
+        assertThat(assertContext.getText("variableAssign size assertion error: "), actual.getVariableAssigns().size(), is(expected.getValueAssigns().size()));
+        if (!expected.getValueAssigns().isEmpty()) {
+            for (int i = 0; i < expected.getValueAssigns().size(); i++) {
+                assertVariable(assertContext, actual.getVariableAssigns().get(i).getVariable(), expected.getValueAssigns().get(i).getParameter());
+                assertThat(assertContext.getText("variableAssign assert error."), actual.getVariableAssigns().get(i).getAssignValue(), is(expected.getValueAssigns().get(i).getValue()));
+            }
+        }
+    }
+    
+    public static void assertVariable(final SQLCaseAssertContext assertContext, final VariableSegment actual, final ExpectedVariable expected) {
+        assertThat(assertContext.getText("variable assertion error: "), actual.getVariable(), is(expected.getName()));
+        assertThat(assertContext.getText("scope assertion error: "), actual.getScope(), is(expected.getScope()));
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowBinlogEventsStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowBinlogEventsStatementAssert.java
new file mode 100644
index 00000000000..c75271f7886
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowBinlogEventsStatementAssert.java
@@ -0,0 +1,60 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowBinlogEventsStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.limit.LimitClauseAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.ShowBinlogEventsStatementTestCase;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Show binlog events statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShowBinlogEventsStatementAssert {
+    
+    /**
+     * Assert show binlog events statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual show binlog events statement
+     * @param expected expected show binlog events statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLShowBinlogEventsStatement actual, final ShowBinlogEventsStatementTestCase expected) {
+        if (null == expected.getLogName()) {
+            assertNull(assertContext.getText("Actual logName should not exist."), actual.getLogName());
+        } else {
+            assertNotNull(assertContext.getText("Actual logName should exist."), actual.getLogName());
+            assertThat(actual.getLogName(), is(expected.getLogName()));
+        }
+        if (null == expected.getLimitClause()) {
+            assertNull(assertContext.getText("Actual limit clause should not exist."), actual.getLimit());
+        } else {
+            assertNotNull(assertContext.getText("Actual limit clause should exist."), actual.getLimit());
+            LimitClauseAssert.assertOffset(assertContext, actual.getLimit().getOffset().get(), expected.getLimitClause().getOffset());
+            LimitClauseAssert.assertRowCount(assertContext, actual.getLimit().getRowCount().get(), expected.getLimitClause().getRowCount());
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowCharacterSetStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowCharacterSetStatementAssert.java
new file mode 100644
index 00000000000..37cfb256c79
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowCharacterSetStatementAssert.java
@@ -0,0 +1,45 @@
+/*
+ * 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.asserts.statement.dal.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCharacterSetStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.show.ShowFilterAssert;
... 84946 lines suppressed ...