This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 2f16fb35b71 Support parsing Doris SHOW PROC and CREATE/PAUSE/RESUME
SYNC JOB syntax (#38115)
2f16fb35b71 is described below
commit 2f16fb35b71b610eee10f650f4978e6ea48c2a4a
Author: cxy <[email protected]>
AuthorDate: Sat Feb 21 22:19:23 2026 +0800
Support parsing Doris SHOW PROC and CREATE/PAUSE/RESUME SYNC JOB syntax
(#38115)
---
.../core/database/visitor/SQLVisitorRule.java | 8 ++
.../src/main/antlr4/imports/doris/BaseRule.g4 | 2 +
.../src/main/antlr4/imports/doris/DALStatement.g4 | 5 +
.../src/main/antlr4/imports/doris/DDLStatement.g4 | 20 ++++
.../src/main/antlr4/imports/doris/DorisKeyword.g4 | 8 ++
.../sql/parser/autogen/DorisStatement.g4 | 3 +
.../statement/type/DorisDALStatementVisitor.java | 10 ++
.../statement/type/DorisDDLStatementVisitor.java | 79 ++++++++++++++++
.../segment/ddl/job/BinlogDescriptionSegment.java | 39 ++++++++
.../segment/ddl/job/ChannelDescriptionSegment.java | 46 +++++++++
.../core/segment/ddl/job/JobNameSegment.java | 50 ++++++++++
.../doris/dal/DorisShowProcStatement.java | 36 +++++++
.../doris/ddl/DorisCreateSyncJobStatement.java | 66 +++++++++++++
.../doris/ddl/DorisPauseSyncJobStatement.java | 49 ++++++++++
.../doris/ddl/DorisResumeSyncJobStatement.java | 49 ++++++++++
.../dal/dialect/doris/DorisDALStatementAssert.java | 5 +
.../doris/type/DorisShowProcStatementAssert.java | 44 +++++++++
.../doris/DorisCreateSyncJobStatementAssert.java | 105 +++++++++++++++++++++
.../ddl/dialect/doris/DorisDDLStatementAssert.java | 12 +++
.../doris/DorisPauseSyncJobStatementAssert.java | 50 ++++++++++
.../doris/DorisResumeSyncJobStatementAssert.java | 50 ++++++++++
.../cases/parser/jaxb/RootSQLParserTestCases.java | 16 ++++
.../impl/job/ExpectedBinlogDescription.java | 41 ++++++++
.../impl/job/ExpectedChannelDescription.java | 47 +++++++++
.../doris/DorisShowProcStatementTestCase.java | 38 ++++++++
.../doris/DorisCreateSyncJobStatementTestCase.java | 53 +++++++++++
.../doris/DorisPauseSyncJobStatementTestCase.java | 43 +++++++++
.../doris/DorisResumeSyncJobStatementTestCase.java | 43 +++++++++
.../src/main/resources/case/dal/show-proc.xml | 30 ++++++
.../main/resources/case/ddl/create-sync-job.xml | 67 +++++++++++++
.../src/main/resources/case/ddl/pause-sync-job.xml | 29 ++++++
.../main/resources/case/ddl/resume-sync-job.xml | 29 ++++++
.../main/resources/sql/supported/dal/show-proc.xml | 30 ++++++
.../sql/supported/ddl/create-sync-job.xml | 22 +++++
.../resources/sql/supported/ddl/pause-sync-job.xml | 25 +++++
.../sql/supported/ddl/resume-sync-job.xml | 25 +++++
36 files changed, 1274 insertions(+)
diff --git
a/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
b/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
index fe7309c35ef..cbfb46c799c 100644
---
a/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
+++
b/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
@@ -291,6 +291,12 @@ public enum SQLVisitorRule {
RESUME_JOB("ResumeJob", SQLStatementType.DDL),
+ RESUME_SYNC_JOB("ResumeSyncJob", SQLStatementType.DDL),
+
+ PAUSE_SYNC_JOB("PauseSyncJob", SQLStatementType.DDL),
+
+ CREATE_SYNC_JOB("CreateSyncJob", SQLStatementType.DDL),
+
ALTER_CATALOG("AlterCatalog", SQLStatementType.DDL),
SET_CONSTRAINTS("SetConstraints", SQLStatementType.TCL),
@@ -447,6 +453,8 @@ public enum SQLVisitorRule {
SHOW_ALTER_TABLE("ShowAlterTable", SQLStatementType.DAL),
+ SHOW_PROC("ShowProc", SQLStatementType.DAL),
+
SET_VARIABLE("SetVariable", SQLStatementType.DAL),
UNSET_VARIABLE("UnsetVariable", SQLStatementType.DAL),
diff --git
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
index 3930e451602..dfc371092bd 100644
--- a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
+++ b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
@@ -390,6 +390,7 @@ identifierKeywordsUnambiguous
| PASSWORD
| PASSWORD_LOCK_TIME
| PATH
+ | PAUSE
| PHASE
| PLUGINS
| PLUGIN_DIR
@@ -402,6 +403,7 @@ identifierKeywordsUnambiguous
| PREV
| PRIVILEGES
| PRIVILEGE_CHECKS_USER
+ | PROC
| PROCESSLIST
| PROFILES
| PROFILE
diff --git
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DALStatement.g4
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DALStatement.g4
index 62c7703cea5..b019faa979a 100644
---
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DALStatement.g4
+++
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DALStatement.g4
@@ -497,6 +497,10 @@ showQueryStats
: SHOW QUERY STATS (FOR databaseName | fromTable)? ALL? VERBOSE?
;
+showProc
+ : SHOW PROC string_
+ ;
+
binlog
: BINLOG stringLiterals
;
@@ -821,4 +825,5 @@ show
| showSqlBlockRule
| showRoutineLoadTask
| showRoutineLoad
+ | showProc
;
diff --git
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
index 73db4baadb4..077ec7bf497 100644
---
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
+++
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
@@ -965,6 +965,26 @@ resumeJob
: RESUME JOB WHERE jobName EQ_ stringLiterals
;
+resumeSyncJob
+ : RESUME SYNC JOB (owner DOT_)? identifier
+ ;
+
+pauseSyncJob
+ : PAUSE SYNC JOB (owner DOT_)? identifier
+ ;
+
+createSyncJob
+ : CREATE SYNC (owner DOT_)? identifier LP_ channelDescription (COMMA_
channelDescription)* RP_ binlogDescription
+ ;
+
+channelDescription
+ : FROM tableName INTO tableName (LP_ columnNames RP_)?
+ ;
+
+binlogDescription
+ : FROM BINLOG LP_ properties RP_
+ ;
+
prepare
: PREPARE identifier FROM (stringLiterals | userVariable)
;
diff --git
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
index 20b41379057..00228a93593 100644
---
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
+++
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
@@ -1942,6 +1942,10 @@ PATH
: P A T H
;
+PAUSE
+ : P A U S E
+ ;
+
PERCENT_RANK
: P E R C E N T UL_ R A N K
;
@@ -2018,6 +2022,10 @@ PRIVILEGE_CHECKS_USER
: P R I V I L E G E UL_ C H E C K S UL_ U S E R
;
+PROC
+ : P R O C
+ ;
+
PROCEDURE
: P R O C E D U R E
;
diff --git
a/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
b/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
index f84560d01ad..9a219f6f7db 100644
---
a/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
+++
b/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
@@ -136,6 +136,9 @@ execute
| startReplica
| createMaterializedView
| resumeJob
+ | resumeSyncJob
+ | pauseSyncJob
+ | createSyncJob
| dorisAlterSystem
| createSqlBlockRule
| alterSqlBlockRule
diff --git
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDALStatementVisitor.java
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDALStatementVisitor.java
index 9b523208c90..2ad85bc5d5c 100644
---
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDALStatementVisitor.java
+++
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDALStatementVisitor.java
@@ -144,6 +144,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.Propert
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PropertyContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.DorisAlterSystemActionContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ShowQueryStatsContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ShowProcContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AlterSqlBlockRuleContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.DropSqlBlockRuleContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ShowSqlBlockRuleContext;
@@ -211,6 +212,7 @@ import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisDescFunctio
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisDropRepositoryStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisDropSqlBlockRuleStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowFunctionsStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowProcStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowSqlBlockRuleStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowRoutineLoadTaskStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowRoutineLoadStatement;
@@ -1368,4 +1370,12 @@ public final class DorisDALStatementVisitor extends
DorisStatementVisitor implem
public ASTNode visitRefresh(final RefreshContext ctx) {
return new RefreshStatement(getDatabaseType());
}
+
+ @Override
+ public ASTNode visitShowProc(final ShowProcContext ctx) {
+ String procPath = SQLUtils.getExactlyValue(ctx.string_().getText());
+ DorisShowProcStatement result = new
DorisShowProcStatement(getDatabaseType(), procPath);
+ result.addParameterMarkers(getParameterMarkerSegments());
+ return result;
+ }
}
diff --git
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index a8b18799195..201a216ae24 100644
---
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -25,6 +25,12 @@ import org.apache.shardingsphere.sql.parser.api.ASTNode;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AlterCatalogContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ResumeJobContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ResumeSyncJobContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PauseSyncJobContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateSyncJobContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ChannelDescriptionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.BinlogDescriptionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ColumnNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AddColumnContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AddTableConstraintContext;
import
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AlterAlgorithmOptionContext;
@@ -160,6 +166,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.Ro
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.ValidStatementSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.JobNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.ChannelDescriptionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.BinlogDescriptionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.AlgorithmTypeSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ConvertTableDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.CreateTableOptionSegment;
@@ -224,6 +233,9 @@ import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisAlterStorag
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisDropFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeSyncJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisPauseSyncJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateSyncJobStatement;
import
org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLAlterEventStatement;
import
org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLCreateEventStatement;
import
org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLDropEventStatement;
@@ -355,6 +367,73 @@ public final class DorisDDLStatementVisitor extends
DorisStatementVisitor implem
return new DorisResumeJobStatement(getDatabaseType(), jobName);
}
+ @Override
+ public ASTNode visitResumeSyncJob(final ResumeSyncJobContext ctx) {
+ DorisResumeSyncJobStatement result = new
DorisResumeSyncJobStatement(getDatabaseType());
+ JobNameSegment jobName = new
JobNameSegment(ctx.identifier().start.getStartIndex(),
ctx.identifier().stop.getStopIndex(), (IdentifierValue)
visit(ctx.identifier()));
+ if (null != ctx.owner()) {
+ jobName.setOwner((OwnerSegment) visit(ctx.owner()));
+ }
+ result.setJobName(jobName);
+ return result;
+ }
+
+ @Override
+ public ASTNode visitPauseSyncJob(final PauseSyncJobContext ctx) {
+ DorisPauseSyncJobStatement result = new
DorisPauseSyncJobStatement(getDatabaseType());
+ JobNameSegment jobName = new
JobNameSegment(ctx.identifier().start.getStartIndex(),
ctx.identifier().stop.getStopIndex(), (IdentifierValue)
visit(ctx.identifier()));
+ if (null != ctx.owner()) {
+ jobName.setOwner((OwnerSegment) visit(ctx.owner()));
+ }
+ result.setJobName(jobName);
+ return result;
+ }
+
+ @Override
+ public ASTNode visitCreateSyncJob(final CreateSyncJobContext ctx) {
+ DorisCreateSyncJobStatement result = new
DorisCreateSyncJobStatement(getDatabaseType());
+ JobNameSegment jobName = new
JobNameSegment(ctx.identifier().start.getStartIndex(),
ctx.identifier().stop.getStopIndex(), (IdentifierValue)
visit(ctx.identifier()));
+ if (null != ctx.owner()) {
+ jobName.setOwner((OwnerSegment) visit(ctx.owner()));
+ }
+ result.setJobName(jobName);
+ for (ChannelDescriptionContext each : ctx.channelDescription()) {
+ result.getChannelDescriptions().add((ChannelDescriptionSegment)
visit(each));
+ }
+ result.setBinlogDescription((BinlogDescriptionSegment)
visit(ctx.binlogDescription()));
+ return result;
+ }
+
+ @Override
+ public ASTNode visitChannelDescription(final ChannelDescriptionContext
ctx) {
+ SimpleTableSegment sourceTable = (SimpleTableSegment)
visit(ctx.tableName(0));
+ SimpleTableSegment targetTable = (SimpleTableSegment)
visit(ctx.tableName(1));
+ ChannelDescriptionSegment result = new
ChannelDescriptionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(),
sourceTable, targetTable);
+ if (null != ctx.columnNames()) {
+ for (ColumnNameContext each : ctx.columnNames().columnName()) {
+ result.getColumnNames().add(((ColumnSegment)
visit(each)).getIdentifier().getValue());
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public ASTNode visitBinlogDescription(final BinlogDescriptionContext ctx) {
+ BinlogDescriptionSegment result = new
BinlogDescriptionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex());
+ PropertiesSegment propertiesSegment = new
PropertiesSegment(ctx.properties().start.getStartIndex(),
ctx.properties().stop.getStopIndex());
+ for (PropertyContext each : ctx.properties().property()) {
+ propertiesSegment.getProperties().add(createPropertySegment(each));
+ }
+ result.setProperties(propertiesSegment);
+ return result;
+ }
+
+ private PropertySegment createPropertySegment(final PropertyContext ctx) {
+ String key = getPropertyKey(ctx);
+ String value = SQLUtils.getExactlyValue(ctx.literals().getText());
+ return new PropertySegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), key, value);
+ }
+
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/BinlogDescriptionSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/BinlogDescriptionSegment.java
new file mode 100644
index 00000000000..b80d3e98b56
--- /dev/null
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/BinlogDescriptionSegment.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
+
+/**
+ * Binlog description segment.
+ */
+@RequiredArgsConstructor
+@Getter
+@Setter
+public final class BinlogDescriptionSegment implements SQLSegment {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private PropertiesSegment properties;
+}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/ChannelDescriptionSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/ChannelDescriptionSegment.java
new file mode 100644
index 00000000000..3d15a0e6245
--- /dev/null
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/ChannelDescriptionSegment.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.sql.parser.statement.core.segment.ddl.job;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+/**
+ * Channel description segment.
+ */
+@RequiredArgsConstructor
+@Getter
+@Setter
+public final class ChannelDescriptionSegment implements SQLSegment {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private final SimpleTableSegment sourceTable;
+
+ private final SimpleTableSegment targetTable;
+
+ private final Collection<String> columnNames = new LinkedList<>();
+}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/JobNameSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/JobNameSegment.java
new file mode 100644
index 00000000000..674d4eef4ef
--- /dev/null
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/job/JobNameSegment.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.sql.parser.statement.core.segment.ddl.job;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerAvailable;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
+
+import java.util.Optional;
+
+/**
+ * Job name segment.
+ */
+@RequiredArgsConstructor
+@Getter
+@Setter
+public final class JobNameSegment implements SQLSegment, OwnerAvailable {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private final IdentifierValue identifier;
+
+ private OwnerSegment owner;
+
+ @Override
+ public Optional<OwnerSegment> getOwner() {
+ return Optional.ofNullable(owner);
+ }
+}
diff --git
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisShowProcStatement.java
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisShowProcStatement.java
new file mode 100644
index 00000000000..cba1267ebcd
--- /dev/null
+++
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisShowProcStatement.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.statement.doris.dal;
+
+import lombok.Getter;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.DALStatement;
+
+/**
+ * Show proc statement for Doris.
+ */
+@Getter
+public final class DorisShowProcStatement extends DALStatement {
+
+ private final String procPath;
+
+ public DorisShowProcStatement(final DatabaseType databaseType, final
String procPath) {
+ super(databaseType);
+ this.procPath = procPath;
+ }
+}
diff --git
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateSyncJobStatement.java
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateSyncJobStatement.java
new file mode 100644
index 00000000000..87b87386be9
--- /dev/null
+++
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisCreateSyncJobStatement.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.sql.parser.statement.doris.ddl;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.BinlogDescriptionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.ChannelDescriptionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.JobNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DDLStatement;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Optional;
+
+/**
+ * Create sync job statement for Doris.
+ */
+@Getter
+@Setter
+public final class DorisCreateSyncJobStatement extends DDLStatement {
+
+ private JobNameSegment jobName;
+
+ private final Collection<ChannelDescriptionSegment> channelDescriptions =
new LinkedList<>();
+
+ private BinlogDescriptionSegment binlogDescription;
+
+ public DorisCreateSyncJobStatement(final DatabaseType databaseType) {
+ super(databaseType);
+ }
+
+ /**
+ * Get job name segment.
+ *
+ * @return job name segment
+ */
+ public Optional<JobNameSegment> getJobName() {
+ return Optional.ofNullable(jobName);
+ }
+
+ /**
+ * Get binlog description segment.
+ *
+ * @return binlog description segment
+ */
+ public Optional<BinlogDescriptionSegment> getBinlogDescription() {
+ return Optional.ofNullable(binlogDescription);
+ }
+}
diff --git
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisPauseSyncJobStatement.java
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisPauseSyncJobStatement.java
new file mode 100644
index 00000000000..2c4f95af435
--- /dev/null
+++
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisPauseSyncJobStatement.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.sql.parser.statement.doris.ddl;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.JobNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DDLStatement;
+
+import java.util.Optional;
+
+/**
+ * Pause sync job statement for Doris.
+ */
+@Getter
+@Setter
+public final class DorisPauseSyncJobStatement extends DDLStatement {
+
+ private JobNameSegment jobName;
+
+ public DorisPauseSyncJobStatement(final DatabaseType databaseType) {
+ super(databaseType);
+ }
+
+ /**
+ * Get job name segment.
+ *
+ * @return job name segment
+ */
+ public Optional<JobNameSegment> getJobName() {
+ return Optional.ofNullable(jobName);
+ }
+}
diff --git
a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisResumeSyncJobStatement.java
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisResumeSyncJobStatement.java
new file mode 100644
index 00000000000..5f26157e2f7
--- /dev/null
+++
b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisResumeSyncJobStatement.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.sql.parser.statement.doris.ddl;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.JobNameSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DDLStatement;
+
+import java.util.Optional;
+
+/**
+ * Resume sync job statement for Doris.
+ */
+@Getter
+@Setter
+public final class DorisResumeSyncJobStatement extends DDLStatement {
+
+ private JobNameSegment jobName;
+
+ public DorisResumeSyncJobStatement(final DatabaseType databaseType) {
+ super(databaseType);
+ }
+
+ /**
+ * Get job name segment.
+ *
+ * @return job name segment
+ */
+ public Optional<JobNameSegment> getJobName() {
+ return Optional.ofNullable(jobName);
+ }
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/DorisDALStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/DorisDALStatementAssert.java
index 156ea1b28a9..0fe7bc17269 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/DorisDALStatementAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/DorisDALStatementAssert.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisCreateRepos
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisDescFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisDropRepositoryStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowFunctionsStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowProcStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisSwitchStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.dal.show.DorisShowQueryStatsStatement;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
@@ -38,6 +39,7 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.d
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisDescFunctionStatementAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisDropRepositoryStatementAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisShowFunctionsStatementAssert;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisShowProcStatementAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisShowQueryStatsStatementAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisSwitchStatementAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.dialect.doris.type.DorisUnsetVariableStatementAssert;
@@ -49,6 +51,7 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisDescFunctionStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisDropRepositoryStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowFunctionsStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowProcStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisSwitchStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisUnsetVariableStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.show.DorisShowQueryStatsStatementTestCase;
@@ -87,6 +90,8 @@ public final class DorisDALStatementAssert {
DorisShowFunctionsStatementAssert.assertIs(assertContext,
(DorisShowFunctionsStatement) actual, (DorisShowFunctionsStatementTestCase)
expected);
} else if (actual instanceof DorisDescFunctionStatement) {
DorisDescFunctionStatementAssert.assertIs(assertContext,
(DorisDescFunctionStatement) actual, (DorisDescFunctionStatementTestCase)
expected);
+ } else if (actual instanceof DorisShowProcStatement) {
+ DorisShowProcStatementAssert.assertIs(assertContext,
(DorisShowProcStatement) actual, (DorisShowProcStatementTestCase) expected);
}
}
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/type/DorisShowProcStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/type/DorisShowProcStatementAssert.java
new file mode 100644
index 00000000000..232780a0960
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/dialect/doris/type/DorisShowProcStatementAssert.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.statement.dal.dialect.doris.type;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShowProcStatement;
+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.dialect.doris.DorisShowProcStatementTestCase;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+
+/**
+ * Show proc statement assert for Doris.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DorisShowProcStatementAssert {
+
+ /**
+ * Assert show proc statement is correct with expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual show proc statement
+ * @param expected expected show proc statement test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final DorisShowProcStatement actual, final DorisShowProcStatementTestCase
expected) {
+ MatcherAssert.assertThat(assertContext.getText("Assertion error: proc
path does not match."), actual.getProcPath(),
Matchers.is(expected.getProcPath()));
+ }
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisCreateSyncJobStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisCreateSyncJobStatementAssert.java
new file mode 100644
index 00000000000..bef4db178e1
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisCreateSyncJobStatementAssert.java
@@ -0,0 +1,105 @@
+/*
+ * 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.ddl.dialect.doris;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.job.ChannelDescriptionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertySegment;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateSyncJobStatement;
+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.table.TableAssert;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.job.ExpectedChannelDescription;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.PropertyTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCreateSyncJobStatementTestCase;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+/**
+ * Create sync job statement assert for Doris.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DorisCreateSyncJobStatementAssert {
+
+ /**
+ * Assert create sync job statement is correct with expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual create sync job statement
+ * @param expected expected create sync job statement test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final DorisCreateSyncJobStatement actual, final
DorisCreateSyncJobStatementTestCase expected) {
+ assertJobName(assertContext, actual, expected);
+ assertChannelDescriptions(assertContext, actual, expected);
+ assertBinlogDescription(assertContext, actual, expected);
+ }
+
+ private static void assertJobName(final SQLCaseAssertContext
assertContext, final DorisCreateSyncJobStatement actual, final
DorisCreateSyncJobStatementTestCase expected) {
+ if (actual.getJobName().isPresent()) {
+ assertThat(assertContext.getText("Job name does not match: "),
actual.getJobName().get().getIdentifier().getValue(),
is(expected.getJobName()));
+ if (null != expected.getOwner()) {
+ OwnerAssert.assertIs(assertContext,
actual.getJobName().get().getOwner().orElse(null), expected.getOwner());
+ }
+ }
+ }
+
+ private static void assertChannelDescriptions(final SQLCaseAssertContext
assertContext, final DorisCreateSyncJobStatement actual, final
DorisCreateSyncJobStatementTestCase expected) {
+ assertThat(assertContext.getText("Channel descriptions size does not
match: "), actual.getChannelDescriptions().size(),
is(expected.getChannelDescriptions().size()));
+ int index = 0;
+ for (ChannelDescriptionSegment actualChannel :
actual.getChannelDescriptions()) {
+ assertChannelDescription(assertContext, actualChannel,
expected.getChannelDescriptions().get(index));
+ index++;
+ }
+ }
+
+ private static void assertChannelDescription(final SQLCaseAssertContext
assertContext, final ChannelDescriptionSegment actual, final
ExpectedChannelDescription expected) {
+ SQLSegmentAssert.assertIs(assertContext, actual, expected);
+ TableAssert.assertIs(assertContext, actual.getSourceTable(),
expected.getSourceTable());
+ TableAssert.assertIs(assertContext, actual.getTargetTable(),
expected.getTargetTable());
+ assertThat(assertContext.getText("Column names size assertion error:
"), actual.getColumnNames().size(), is(expected.getColumnNames().size()));
+ int index = 0;
+ for (String actualColumnName : actual.getColumnNames()) {
+ assertThat(assertContext.getText(String.format("Column name at
index %d assertion error: ", index)), actualColumnName,
is(expected.getColumnNames().get(index)));
+ index++;
+ }
+ }
+
+ private static void assertBinlogDescription(final SQLCaseAssertContext
assertContext, final DorisCreateSyncJobStatement actual, final
DorisCreateSyncJobStatementTestCase expected) {
+ if (actual.getBinlogDescription().isPresent() && null !=
expected.getBinlogDescription()) {
+ SQLSegmentAssert.assertIs(assertContext,
actual.getBinlogDescription().get(), expected.getBinlogDescription());
+ assertNotNull(actual.getBinlogDescription().get().getProperties(),
assertContext.getText("Binlog properties should not be null"));
+ if (!expected.getBinlogDescription().getProperties().isEmpty()) {
+ assertThat(assertContext.getText("Binlog properties size does
not match: "),
actual.getBinlogDescription().get().getProperties().getProperties().size(),
+
is(expected.getBinlogDescription().getProperties().size()));
+ for (int i = 0; i <
expected.getBinlogDescription().getProperties().size(); i++) {
+ assertProperty(assertContext,
actual.getBinlogDescription().get().getProperties().getProperties().get(i),
expected.getBinlogDescription().getProperties().get(i));
+ }
+ }
+ }
+ }
+
+ private static void assertProperty(final SQLCaseAssertContext
assertContext, final PropertySegment actual, final PropertyTestCase expected) {
+ assertThat(assertContext.getText(String.format("Property key '%s'
assertion error: ", expected.getKey())), actual.getKey(),
is(expected.getKey()));
+ assertThat(assertContext.getText(String.format("Property value for key
'%s' assertion error: ", expected.getKey())), 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/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
index 9408637b3af..8de054fb40e 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
@@ -24,12 +24,18 @@ import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisAlterStorag
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisDropFunctionStatement;
import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeSyncJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisPauseSyncJobStatement;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateSyncJobStatement;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.dialect.doris.type.DorisAlterStoragePolicyStatementAssert;
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.ddl.dialect.doris.DorisAlterStoragePolicyStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropFunctionStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisResumeJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisResumeSyncJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisPauseSyncJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCreateSyncJobStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.standard.function.CreateFunctionStatementTestCase;
/**
@@ -54,6 +60,12 @@ public final class DorisDDLStatementAssert {
DorisAlterStoragePolicyStatementAssert.assertIs(assertContext,
(DorisAlterStoragePolicyStatement) actual,
(DorisAlterStoragePolicyStatementTestCase) expected);
} else if (actual instanceof DorisDropFunctionStatement) {
DorisDropFunctionStatementAssert.assertIs(assertContext,
(DorisDropFunctionStatement) actual, (DorisDropFunctionStatementTestCase)
expected);
+ } else if (actual instanceof DorisResumeSyncJobStatement) {
+ DorisResumeSyncJobStatementAssert.assertIs(assertContext,
(DorisResumeSyncJobStatement) actual, (DorisResumeSyncJobStatementTestCase)
expected);
+ } else if (actual instanceof DorisPauseSyncJobStatement) {
+ DorisPauseSyncJobStatementAssert.assertIs(assertContext,
(DorisPauseSyncJobStatement) actual, (DorisPauseSyncJobStatementTestCase)
expected);
+ } else if (actual instanceof DorisCreateSyncJobStatement) {
+ DorisCreateSyncJobStatementAssert.assertIs(assertContext,
(DorisCreateSyncJobStatement) actual, (DorisCreateSyncJobStatementTestCase)
expected);
}
}
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisPauseSyncJobStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisPauseSyncJobStatementAssert.java
new file mode 100644
index 00000000000..5a69a00e9d8
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisPauseSyncJobStatementAssert.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.statement.ddl.dialect.doris;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisPauseSyncJobStatement;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+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.statement.ddl.dialect.doris.DorisPauseSyncJobStatementTestCase;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+
+/**
+ * Pause sync job statement assert for Doris.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DorisPauseSyncJobStatementAssert {
+
+ /**
+ * Assert pause sync job statement is correct with expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual pause sync job statement
+ * @param expected expected pause sync job statement test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final DorisPauseSyncJobStatement actual, final
DorisPauseSyncJobStatementTestCase expected) {
+ if (actual.getJobName().isPresent()) {
+ MatcherAssert.assertThat(assertContext.getText("Job name does not
match: "), actual.getJobName().get().getIdentifier().getValue(),
Matchers.is(expected.getJobName()));
+ if (null != expected.getOwner()) {
+ OwnerAssert.assertIs(assertContext,
actual.getJobName().get().getOwner().orElse(null), expected.getOwner());
+ }
+ }
+ }
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisResumeSyncJobStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisResumeSyncJobStatementAssert.java
new file mode 100644
index 00000000000..9d903497a33
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisResumeSyncJobStatementAssert.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.statement.ddl.dialect.doris;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeSyncJobStatement;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+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.statement.ddl.dialect.doris.DorisResumeSyncJobStatementTestCase;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+
+/**
+ * Resume sync job statement assert for Doris.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DorisResumeSyncJobStatementAssert {
+
+ /**
+ * Assert resume sync job statement is correct with expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual resume sync job statement
+ * @param expected expected resume sync job statement test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final DorisResumeSyncJobStatement actual, final
DorisResumeSyncJobStatementTestCase expected) {
+ if (actual.getJobName().isPresent()) {
+ MatcherAssert.assertThat(assertContext.getText("Job name does not
match: "), actual.getJobName().get().getIdentifier().getValue(),
Matchers.is(expected.getJobName()));
+ if (null != expected.getOwner()) {
+ OwnerAssert.assertIs(assertContext,
actual.getJobName().get().getOwner().orElse(null), expected.getOwner());
+ }
+ }
+ }
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index 5b109ea050b..4d4fc92f6d7 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -30,8 +30,12 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisAlterStoragePolicyStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropFunctionStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisResumeJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisResumeSyncJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisPauseSyncJobStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCreateSyncJobStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisAlterSqlBlockRuleStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisDropSqlBlockRuleStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowProcStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowSqlBlockRuleStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowRoutineLoadTaskStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.DorisShowRoutineLoadStatementTestCase;
@@ -537,6 +541,15 @@ public final class RootSQLParserTestCases {
@XmlElement(name = "resume-job")
private final List<DorisResumeJobStatementTestCase> resumeJobTestCases =
new LinkedList<>();
+ @XmlElement(name = "resume-sync-job")
+ private final List<DorisResumeSyncJobStatementTestCase>
resumeSyncJobTestCases = new LinkedList<>();
+
+ @XmlElement(name = "pause-sync-job")
+ private final List<DorisPauseSyncJobStatementTestCase>
pauseSyncJobTestCases = new LinkedList<>();
+
+ @XmlElement(name = "create-sync-job")
+ private final List<DorisCreateSyncJobStatementTestCase>
createSyncJobTestCases = new LinkedList<>();
+
@XmlElement(name = "alter-catalog")
private final List<AlterCatalogStatementTestCase> alterCatalogTestCases =
new LinkedList<>();
@@ -579,6 +592,9 @@ public final class RootSQLParserTestCases {
@XmlElement(name = "show-alter-table")
private final List<ShowAlterTableStatementTestCase>
showAlterTableTestCases = new LinkedList<>();
+ @XmlElement(name = "doris-show-proc")
+ private final List<DorisShowProcStatementTestCase> dorisShowProcTestCases
= new LinkedList<>();
+
@XmlElement(name = "build-index")
private final List<BuildIndexStatementTestCase> buildIndexTestCases = new
LinkedList<>();
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedBinlogDescription.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedBinlogDescription.java
new file mode 100644
index 00000000000..d20cb420c17
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedBinlogDescription.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.cases.parser.jaxb.segment.impl.job;
+
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris.PropertyTestCase;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Expected binlog description.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class ExpectedBinlogDescription extends
AbstractExpectedSQLSegment {
+
+ @XmlElement(name = "property")
+ private final List<PropertyTestCase> properties = new LinkedList<>();
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedChannelDescription.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedChannelDescription.java
new file mode 100644
index 00000000000..0b34c260a0e
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/job/ExpectedChannelDescription.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.cases.parser.jaxb.segment.impl.job;
+
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Expected channel description.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class ExpectedChannelDescription extends
AbstractExpectedSQLSegment {
+
+ @XmlElement(name = "source-table")
+ private ExpectedSimpleTable sourceTable;
+
+ @XmlElement(name = "target-table")
+ private ExpectedSimpleTable targetTable;
+
+ @XmlElement(name = "column-name")
+ private final List<String> columnNames = new LinkedList<>();
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dal/dialect/doris/DorisShowProcStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dal/dialect/doris/DorisShowProcStatementTestCase.java
new file mode 100644
index 00000000000..c47062ce205
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dal/dialect/doris/DorisShowProcStatementTestCase.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.dialect.doris;
+
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * Show proc statement test case for Doris.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class DorisShowProcStatementTestCase extends SQLParserTestCase {
+
+ @XmlAttribute(name = "proc-path")
+ private String procPath;
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisCreateSyncJobStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisCreateSyncJobStatementTestCase.java
new file mode 100644
index 00000000000..afff00af19f
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisCreateSyncJobStatementTestCase.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.cases.parser.jaxb.statement.ddl.dialect.doris;
+
+import lombok.Getter;
+import lombok.Setter;
+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.segment.impl.job.ExpectedBinlogDescription;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.job.ExpectedChannelDescription;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Create sync job statement test case for Doris.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class DorisCreateSyncJobStatementTestCase extends
SQLParserTestCase {
+
+ @XmlAttribute(name = "job-name")
+ private String jobName;
+
+ @XmlElement
+ private ExpectedOwner owner;
+
+ @XmlElement(name = "channel-description")
+ private final List<ExpectedChannelDescription> channelDescriptions = new
LinkedList<>();
+
+ @XmlElement(name = "binlog-description")
+ private ExpectedBinlogDescription binlogDescription;
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisPauseSyncJobStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisPauseSyncJobStatementTestCase.java
new file mode 100644
index 00000000000..3c6ac117f52
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisPauseSyncJobStatementTestCase.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.cases.parser.jaxb.statement.ddl.dialect.doris;
+
+import lombok.Getter;
+import lombok.Setter;
+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.segment.impl.table.ExpectedOwner;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Pause sync job statement test case for Doris.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class DorisPauseSyncJobStatementTestCase extends
SQLParserTestCase {
+
+ @XmlAttribute(name = "job-name")
+ private String jobName;
+
+ @XmlElement
+ private ExpectedOwner owner;
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisResumeSyncJobStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisResumeSyncJobStatementTestCase.java
new file mode 100644
index 00000000000..92e80140405
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisResumeSyncJobStatementTestCase.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.cases.parser.jaxb.statement.ddl.dialect.doris;
+
+import lombok.Getter;
+import lombok.Setter;
+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.segment.impl.table.ExpectedOwner;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Resume sync job statement test case for Doris.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class DorisResumeSyncJobStatementTestCase extends
SQLParserTestCase {
+
+ @XmlAttribute(name = "job-name")
+ private String jobName;
+
+ @XmlElement
+ private ExpectedOwner owner;
+}
diff --git a/test/it/parser/src/main/resources/case/dal/show-proc.xml
b/test/it/parser/src/main/resources/case/dal/show-proc.xml
new file mode 100644
index 00000000000..a58baeeb055
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/dal/show-proc.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-parser-test-cases>
+ <doris-show-proc sql-case-id="show_proc_root" proc-path="/" />
+ <doris-show-proc sql-case-id="show_proc_dbs" proc-path="/dbs/10002" />
+ <doris-show-proc sql-case-id="show_proc_statistic" proc-path="/statistic"
/>
+ <doris-show-proc sql-case-id="show_proc_colocation_group"
proc-path="/colocation_group" />
+ <doris-show-proc sql-case-id="show_proc_colocation_group_with_id"
proc-path="/colocation_group/10005.10008" />
+ <doris-show-proc sql-case-id="show_proc_tasks" proc-path="/tasks" />
+ <doris-show-proc sql-case-id="show_proc_cluster_health_tablet_health"
proc-path="/cluster_health/tablet_health" />
+ <doris-show-proc
sql-case-id="show_proc_cluster_health_tablet_health_with_id"
proc-path="/cluster_health/tablet_health/25852112" />
+ <doris-show-proc sql-case-id="show_proc_diagnose" proc-path="/diagnose" />
+ <doris-show-proc sql-case-id="show_proc_diagnose_cluster_balance"
proc-path="/diagnose/cluster_balance" />
+</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/create-sync-job.xml
b/test/it/parser/src/main/resources/case/ddl/create-sync-job.xml
new file mode 100644
index 00000000000..f8e1f5cc220
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/ddl/create-sync-job.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-parser-test-cases>
+ <create-sync-job sql-case-id="create_sync_job_simple" job-name="job1">
+ <owner name="test_db" start-index="12" stop-index="20"
start-delimiter="`" end-delimiter="`" />
+ <channel-description start-index="30" stop-index="68">
+ <source-table name="tbl1" start-index="35" stop-index="52"
start-delimiter="`" end-delimiter="`">
+ <owner name="mysql_db1" start-index="35" stop-index="45"
start-delimiter="`" end-delimiter="`" />
+ </source-table>
+ <target-table name="test_tbl" start-index="59" stop-index="68"
start-delimiter="`" end-delimiter="`" />
+ </channel-description>
+ <binlog-description start-index="71" stop-index="238">
+ <property key="type" value="canal" start-index="84"
stop-index="99" />
+ <property key="canal.server.ip" value="127.0.0.1"
start-index="101" stop-index="131" />
+ <property key="canal.server.port" value="11111" start-index="133"
stop-index="161" />
+ <property key="canal.destination" value="example"
start-index="163" stop-index="193" />
+ <property key="canal.username" value="" start-index="195"
stop-index="215" />
+ <property key="canal.password" value="" start-index="217"
stop-index="237" />
+ </binlog-description>
+ </create-sync-job>
+
+ <create-sync-job sql-case-id="create_sync_job_multi_channels"
job-name="job1">
+ <owner name="test_db" start-index="12" stop-index="20"
start-delimiter="`" end-delimiter="`" />
+ <channel-description start-index="30" stop-index="75">
+ <source-table name="t1" start-index="35" stop-index="49"
start-delimiter="`" end-delimiter="`">
+ <owner name="mysql_db" start-index="35" stop-index="44"
start-delimiter="`" end-delimiter="`" />
+ </source-table>
+ <target-table name="test1" start-index="56" stop-index="62"
start-delimiter="`" end-delimiter="`" />
+ <column-name>k1</column-name>
+ <column-name>k2</column-name>
+ <column-name>v1</column-name>
+ </channel-description>
+ <channel-description start-index="77" stop-index="122">
+ <source-table name="t2" start-index="82" stop-index="96"
start-delimiter="`" end-delimiter="`">
+ <owner name="mysql_db" start-index="82" stop-index="91"
start-delimiter="`" end-delimiter="`" />
+ </source-table>
+ <target-table name="test2" start-index="103" stop-index="109"
start-delimiter="`" end-delimiter="`" />
+ <column-name>k3</column-name>
+ <column-name>k4</column-name>
+ <column-name>v2</column-name>
+ </channel-description>
+ <binlog-description start-index="125" stop-index="312">
+ <property key="type" value="canal" start-index="138"
stop-index="153" />
+ <property key="canal.server.ip" value="xx.xxx.xxx.xx"
start-index="155" stop-index="189" />
+ <property key="canal.server.port" value="12111" start-index="191"
stop-index="219" />
+ <property key="canal.destination" value="example"
start-index="221" stop-index="251" />
+ <property key="canal.username" value="username" start-index="253"
stop-index="281" />
+ <property key="canal.password" value="password" start-index="283"
stop-index="311" />
+ </binlog-description>
+ </create-sync-job>
+</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/pause-sync-job.xml
b/test/it/parser/src/main/resources/case/ddl/pause-sync-job.xml
new file mode 100644
index 00000000000..1326425fa52
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/ddl/pause-sync-job.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-parser-test-cases>
+ <pause-sync-job sql-case-id="pause_sync_job_with_identifier"
job-name="job_name" />
+ <pause-sync-job sql-case-id="pause_sync_job_with_schema"
job-name="job_name">
+ <owner name="testdb" start-index="15" stop-index="20" />
+ </pause-sync-job>
+ <pause-sync-job sql-case-id="pause_sync_job_simple" job-name="my_sync_job"
/>
+ <pause-sync-job sql-case-id="pause_sync_job_with_backticks"
job-name="sync_job_123" />
+ <pause-sync-job sql-case-id="pause_sync_job_with_schema_backticks"
job-name="my_job">
+ <owner name="my_db" start-index="15" stop-index="21"
start-delimiter="`" end-delimiter="`" />
+ </pause-sync-job>
+</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/resume-sync-job.xml
b/test/it/parser/src/main/resources/case/ddl/resume-sync-job.xml
new file mode 100644
index 00000000000..a0e83b1f9e9
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/ddl/resume-sync-job.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-parser-test-cases>
+ <resume-sync-job sql-case-id="resume_sync_job_with_identifier"
job-name="job_name" />
+ <resume-sync-job sql-case-id="resume_sync_job_with_schema"
job-name="job_name">
+ <owner name="testdb" start-index="16" stop-index="21" />
+ </resume-sync-job>
+ <resume-sync-job sql-case-id="resume_sync_job_simple"
job-name="my_sync_job" />
+ <resume-sync-job sql-case-id="resume_sync_job_with_backticks"
job-name="sync_job_123" />
+ <resume-sync-job sql-case-id="resume_sync_job_with_schema_backticks"
job-name="my_job">
+ <owner name="my_db" start-index="16" stop-index="22"
start-delimiter="`" end-delimiter="`" />
+ </resume-sync-job>
+</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dal/show-proc.xml
b/test/it/parser/src/main/resources/sql/supported/dal/show-proc.xml
new file mode 100644
index 00000000000..d896ac67ea1
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/dal/show-proc.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-cases>
+ <sql-case id="show_proc_root" value="SHOW PROC '/';" db-types="Doris" />
+ <sql-case id="show_proc_dbs" value="SHOW PROC "/dbs/10002";"
db-types="Doris" />
+ <sql-case id="show_proc_statistic" value="SHOW PROC '/statistic';"
db-types="Doris" />
+ <sql-case id="show_proc_colocation_group" value="SHOW PROC
'/colocation_group';" db-types="Doris" />
+ <sql-case id="show_proc_colocation_group_with_id" value="SHOW PROC
'/colocation_group/10005.10008';" db-types="Doris" />
+ <sql-case id="show_proc_tasks" value="SHOW PROC '/tasks';"
db-types="Doris" />
+ <sql-case id="show_proc_cluster_health_tablet_health" value="SHOW PROC
'/cluster_health/tablet_health';" db-types="Doris" />
+ <sql-case id="show_proc_cluster_health_tablet_health_with_id" value="SHOW
PROC '/cluster_health/tablet_health/25852112';" db-types="Doris" />
+ <sql-case id="show_proc_diagnose" value="SHOW PROC "/diagnose";"
db-types="Doris" />
+ <sql-case id="show_proc_diagnose_cluster_balance" value="SHOW PROC
"/diagnose/cluster_balance";" db-types="Doris" />
+</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-sync-job.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-sync-job.xml
new file mode 100644
index 00000000000..0edb78654d2
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-sync-job.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-cases>
+ <sql-case id="create_sync_job_simple" value="CREATE SYNC `test_db`.`job1`
(FROM `mysql_db1`.`tbl1` INTO `test_tbl`) FROM BINLOG ("type" =
"canal","canal.server.ip" =
"127.0.0.1","canal.server.port" =
"11111","canal.destination" =
"example","canal.username" =
"","canal.password" = "")" db-types="Doris" />
+ <sql-case id="create_sync_job_multi_channels" value="CREATE SYNC
`test_db`.`job1` (FROM `mysql_db`.`t1` INTO `test1` (k1, k2, v1),FROM
`mysql_db`.`t2` INTO `test2` (k3, k4, v2)) FROM BINLOG ("type" =
"canal","canal.server.ip" =
"xx.xxx.xxx.xx","canal.server.port" =
"12111","canal.destination" =
"example","canal.username" =
"username","canal.password" = "password")" [...]
+</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/pause-sync-job.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/pause-sync-job.xml
new file mode 100644
index 00000000000..e44bb121701
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/pause-sync-job.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-cases>
+ <sql-case id="pause_sync_job_with_identifier" value="PAUSE SYNC JOB
`job_name`;" db-types="Doris" />
+ <sql-case id="pause_sync_job_with_schema" value="PAUSE SYNC JOB
testdb.job_name;" db-types="Doris" />
+ <sql-case id="pause_sync_job_simple" value="PAUSE SYNC JOB my_sync_job;"
db-types="Doris" />
+ <sql-case id="pause_sync_job_with_backticks" value="PAUSE SYNC JOB
`sync_job_123`;" db-types="Doris" />
+ <sql-case id="pause_sync_job_with_schema_backticks" value="PAUSE SYNC JOB
`my_db`.`my_job`;" db-types="Doris" />
+</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/resume-sync-job.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/resume-sync-job.xml
new file mode 100644
index 00000000000..c2bfccf6c05
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/resume-sync-job.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<sql-cases>
+ <sql-case id="resume_sync_job_with_identifier" value="RESUME SYNC JOB
`job_name`;" db-types="Doris" />
+ <sql-case id="resume_sync_job_with_schema" value="RESUME SYNC JOB
testdb.job_name;" db-types="Doris" />
+ <sql-case id="resume_sync_job_simple" value="RESUME SYNC JOB my_sync_job;"
db-types="Doris" />
+ <sql-case id="resume_sync_job_with_backticks" value="RESUME SYNC JOB
`sync_job_123`;" db-types="Doris" />
+ <sql-case id="resume_sync_job_with_schema_backticks" value="RESUME SYNC
JOB `my_db`.`my_job`;" db-types="Doris" />
+</sql-cases>