Skip to content

Commit ef8a0c1

Browse files
committed
Add Doris grammar rules and tests
1 parent 99b0097 commit ef8a0c1

File tree

9 files changed

+151
-72
lines changed

9 files changed

+151
-72
lines changed

parser/sql/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4

-9
Original file line numberDiff line numberDiff line change
@@ -667,10 +667,6 @@ databaseName
667667
: identifier
668668
;
669669

670-
newDatabaseName
671-
: identifier
672-
;
673-
674670
databaseId
675671
: identifier
676672
;
@@ -855,11 +851,6 @@ partitionName
855851
: identifier
856852
;
857853

858-
newPartitionName
859-
: identifier
860-
;
861-
862-
863854
partitionId
864855
: identifier
865856
;

parser/sql/dialect/doris/src/main/antlr4/imports/doris/DALStatement.g4

+3-3
Original file line numberDiff line numberDiff line change
@@ -412,15 +412,15 @@ restart
412412
;
413413

414414
recoverDatabase
415-
: RECOVER DATABASE databaseName (databaseId | AS newDatabaseName)?
415+
: RECOVER DATABASE databaseName (databaseId | AS newDatabaseName=identifier)?
416416
;
417417

418418
recoverPartition
419-
: RECOVER PARTITION partitionName partitionId? (AS newPartitionName)? FROM tableName
419+
: RECOVER PARTITION partitionName partitionId? (AS newPartitionName=identifier)? FROM tableName
420420
;
421421

422422
recoverTable
423-
: RECOVER TABLE tableName tableId? (AS newDatabaseName)?
423+
: RECOVER TABLE tableName tableId? (AS newTableName=identifier)?
424424
;
425425

426426
shutdown

parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java

+68-18
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@
123123
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromTableSegment;
124124
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.LoadTableIndexSegment;
125125
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionDefinitionSegment;
126+
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionIdSegment;
126127
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionSegment;
127128
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetMasterOptionSegment;
128129
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetOptionSegment;
@@ -137,8 +138,12 @@
137138
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
138139
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.LimitSegment;
139140
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
141+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseIdSegment;
140142
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
143+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
141144
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
145+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableIdSegment;
146+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
142147
import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
143148
import org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
144149
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -935,17 +940,17 @@ private VariableAssignSegment getVariableAssignSegment(final OptionValueContext
935940
ctx.internalVariableName().start.getStartIndex(), ctx.internalVariableName().stop.getStopIndex(), ctx.internalVariableName().getText(), ctx.optionType().getText());
936941
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
937942
}
938-
943+
939944
private VariableAssignSegment getVariableAssignSegment(final OptionValueListContext ctx) {
940945
VariableSegment variable = new VariableSegment(
941946
ctx.internalVariableName().start.getStartIndex(), ctx.internalVariableName().stop.getStopIndex(), ctx.internalVariableName().getText(), ctx.optionType().getText());
942947
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.setExprOrDefault().stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
943948
}
944-
949+
945950
private VariableAssignSegment getVariableAssignSegment(final OptionValueNoOptionTypeContext ctx) {
946951
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getVariableSegment(ctx), getAssignValue(ctx));
947952
}
948-
953+
949954
private VariableSegment getVariableSegment(final OptionValueNoOptionTypeContext ctx) {
950955
if (null != ctx.NAMES()) {
951956
// TODO Consider setting all three system variables: character_set_client, character_set_results, character_set_connection
@@ -1084,40 +1089,85 @@ public ASTNode visitHelp(final HelpContext ctx) {
10841089
@Override
10851090
public ASTNode visitRecoverDatabase(final RecoverDatabaseContext ctx) {
10861091
DorisRecoverDatabaseStatement result = new DorisRecoverDatabaseStatement();
1087-
result.setDatabaseName(new IdentifierValue(ctx.databaseName().getText()).getValue());
1092+
DatabaseSegment databaseName = new DatabaseSegment(
1093+
ctx.databaseName().start.getStartIndex(),
1094+
ctx.databaseName().stop.getStopIndex(),
1095+
new IdentifierValue(ctx.databaseName().identifier().getText()));
1096+
result.setDatabaseName(databaseName);
1097+
10881098
if (null != ctx.databaseId()) {
1089-
result.setDatabaseId(new IdentifierValue(ctx.databaseId().getText()).getValue());
1099+
DatabaseIdSegment databaseIdSegment = new DatabaseIdSegment(
1100+
ctx.databaseId().start.getStartIndex(),
1101+
ctx.databaseId().stop.getStopIndex(),
1102+
new IdentifierValue(ctx.databaseId().identifier().getText()));
1103+
result.setDatabaseId(databaseIdSegment);
10901104
}
1091-
if (null != ctx.newDatabaseName()) {
1092-
result.setDatabaseName(new IdentifierValue(ctx.newDatabaseName().getText()).getValue());
1105+
if (null != ctx.newDatabaseName) {
1106+
DatabaseSegment newDatabaseName = new DatabaseSegment(
1107+
ctx.newDatabaseName.start.getStartIndex(),
1108+
ctx.newDatabaseName.stop.getStopIndex(),
1109+
new IdentifierValue(ctx.newDatabaseName.getText()));
1110+
result.setDatabaseName(newDatabaseName);
10931111
}
10941112
return result;
10951113
}
1096-
1114+
10971115
@Override
10981116
public ASTNode visitRecoverPartition(final RecoverPartitionContext ctx) {
10991117
DorisRecoverPartitionStatement result = new DorisRecoverPartitionStatement();
1100-
result.setPartitionName(new IdentifierValue(ctx.partitionName().getText()).getValue());
1118+
PartitionSegment partitionSegment = new PartitionSegment(
1119+
ctx.partitionName().start.getStartIndex(),
1120+
ctx.partitionName().stop.getStopIndex(),
1121+
new IdentifierValue(ctx.partitionName().identifier().getText()));
1122+
result.setPartitionName(partitionSegment);
11011123
if (null != ctx.partitionId()) {
1102-
result.setPartitionId(new IdentifierValue(ctx.partitionId().getText()).getValue());
1103-
}
1104-
if (null != ctx.newPartitionName()) {
1105-
result.setNewPartitionName(new IdentifierValue(ctx.newPartitionName().getText()).getValue());
1124+
PartitionIdSegment partitionId = new PartitionIdSegment(
1125+
ctx.partitionId().start.getStartIndex(),
1126+
ctx.partitionId().stop.getStopIndex(),
1127+
new IdentifierValue(ctx.partitionId().identifier().getText()));
1128+
result.setPartitionId(partitionId);
11061129
}
1107-
if (null != ctx.tableName().owner()) {
1108-
result.setOwner(new IdentifierValue(ctx.tableName().owner().getText()).getValue());
1130+
if (null != ctx.newPartitionName) {
1131+
final PartitionSegment newPartitionName = new PartitionSegment(
1132+
ctx.newPartitionName.start.getStartIndex(),
1133+
ctx.newPartitionName.stop.getStopIndex(),
1134+
new IdentifierValue(ctx.newPartitionName.getText()));
1135+
result.setNewPartitionName(newPartitionName);
11091136
}
1110-
result.setTableName(new IdentifierValue(ctx.tableName().name().getText()).getValue());
1137+
SimpleTableSegment simpleTableSegment = createSimpleTableSegment(ctx.tableName());
1138+
result.setTableName(simpleTableSegment);
1139+
11111140
return result;
11121141
}
11131142

11141143
@Override
11151144
public ASTNode visitRecoverTable(final RecoverTableContext ctx) {
11161145
DorisRecoverTableStatement result = new DorisRecoverTableStatement();
1117-
result.setTableName(new IdentifierValue(ctx.tableName().getText()).getValue());
1146+
SimpleTableSegment simpleTableSegment = createSimpleTableSegment(ctx.tableName());
1147+
result.setTableName(simpleTableSegment);
11181148
if (null != ctx.tableId()) {
1119-
result.setTableName(new IdentifierValue(ctx.tableId().getText()).getValue());
1149+
final TableIdSegment tableIdSegment = new TableIdSegment(
1150+
ctx.tableId().start.getStartIndex(),
1151+
ctx.tableId().stop.getStopIndex(),
1152+
new IdentifierValue(ctx.tableId().getText()));
1153+
result.setTableId(tableIdSegment);
11201154
}
11211155
return result;
11221156
}
1157+
1158+
private SimpleTableSegment createSimpleTableSegment(final TableNameContext tableNameContext) {
1159+
final TableNameSegment tableNameSegment = new TableNameSegment(
1160+
tableNameContext.start.getStartIndex(),
1161+
tableNameContext.stop.getStopIndex(),
1162+
new IdentifierValue(tableNameContext.getText()));
1163+
SimpleTableSegment simpleTableSegment = new SimpleTableSegment(tableNameSegment);
1164+
if (null != tableNameContext.owner()) {
1165+
OwnerSegment ownerSegment = new OwnerSegment(
1166+
tableNameContext.owner().start.getStartIndex(),
1167+
tableNameContext.owner().stop.getStopIndex(),
1168+
new IdentifierValue(tableNameContext.owner().getText()));
1169+
simpleTableSegment.setOwner(ownerSegment);
1170+
}
1171+
return simpleTableSegment;
1172+
}
11231173
}
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,25 @@
1515
* limitations under the License.
1616
*/
1717

18-
package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
18+
package org.apache.shardingsphere.sql.parser.statement.core.segment.dal;
1919

2020
import lombok.Getter;
21+
import lombok.RequiredArgsConstructor;
2122
import lombok.Setter;
22-
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
23-
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
23+
import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
24+
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
2425

2526
/**
26-
* Create database statement.
27+
* Partition Id segment.
2728
*/
29+
@RequiredArgsConstructor
2830
@Getter
2931
@Setter
30-
public abstract class RecoverDatabaseStatement extends AbstractSQLStatement implements DDLStatement {
32+
public final class PartitionIdSegment implements SQLSegment {
3133

32-
private String databaseName;
34+
private final int startIndex;
3335

34-
private String databaseId;
36+
private final int stopIndex;
3537

38+
private final IdentifierValue name;
3639
}
+10-9
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,23 @@
1515
* limitations under the License.
1616
*/
1717

18-
package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
18+
package org.apache.shardingsphere.sql.parser.statement.core.segment.generic;
1919

2020
import lombok.Getter;
21-
import lombok.Setter;
22-
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
23-
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
21+
import lombok.RequiredArgsConstructor;
22+
import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
23+
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
2424

2525
/**
26-
* Create database statement.
26+
* Database Id segment.
2727
*/
28+
@RequiredArgsConstructor
2829
@Getter
29-
@Setter
30-
public abstract class RecoverTableStatement extends AbstractSQLStatement implements DDLStatement {
30+
public final class DatabaseIdSegment implements SQLSegment {
3131

32-
private String tableName;
32+
private final int startIndex;
3333

34-
private String tableId;
34+
private final int stopIndex;
3535

36+
private final IdentifierValue identifier;
3637
}
+10-17
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,23 @@
1515
* limitations under the License.
1616
*/
1717

18-
package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;
18+
package org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table;
1919

2020
import lombok.Getter;
21-
import lombok.Setter;
22-
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
23-
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
21+
import lombok.RequiredArgsConstructor;
22+
import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
23+
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
2424

2525
/**
26-
* Create database statement.
26+
* Table Id segment.
2727
*/
28+
@RequiredArgsConstructor
2829
@Getter
29-
@Setter
30-
public abstract class RecoverPartitionStatement extends AbstractSQLStatement implements DDLStatement {
30+
public final class TableIdSegment implements SQLSegment {
3131

32-
private String partitionName;
32+
private final int startIndex;
3333

34-
private String partitionId;
35-
36-
private String databaseName;
37-
38-
private String newPartitionName;
39-
40-
private String owner;
41-
42-
private String tableName;
34+
private final int stopIndex;
4335

36+
private final IdentifierValue identifier;
4437
}

parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisRecoverDatabaseStatement.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,22 @@
1717

1818
package org.apache.shardingsphere.sql.parser.statement.doris.dal;
1919

20-
import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.RecoverDatabaseStatement;
20+
import lombok.Getter;
21+
import lombok.Setter;
22+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseIdSegment;
23+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
24+
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
2125
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
2226

2327
/**
24-
* Doris create database statement.
28+
* Doris recover database statement.
2529
*/
26-
public final class DorisRecoverDatabaseStatement extends RecoverDatabaseStatement implements DorisStatement {
30+
31+
@Setter
32+
@Getter
33+
public final class DorisRecoverDatabaseStatement extends AbstractSQLStatement implements DorisStatement {
34+
35+
private DatabaseSegment databaseName;
36+
37+
private DatabaseIdSegment databaseId;
2738
}

parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisRecoverPartitionStatement.java

+21-3
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,29 @@
1717

1818
package org.apache.shardingsphere.sql.parser.statement.doris.dal;
1919

20-
import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.RecoverPartitionStatement;
20+
import lombok.Getter;
21+
import lombok.Setter;
22+
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionIdSegment;
23+
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionSegment;
24+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
25+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
26+
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
2127
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
2228

2329
/**
24-
* Doris create database statement.
30+
* Doris recover partition statement.
2531
*/
26-
public final class DorisRecoverPartitionStatement extends RecoverPartitionStatement implements DorisStatement {
32+
@Setter
33+
@Getter
34+
public final class DorisRecoverPartitionStatement extends AbstractSQLStatement implements DorisStatement {
35+
36+
private PartitionSegment partitionName;
37+
38+
private PartitionSegment newPartitionName;
39+
40+
private PartitionIdSegment partitionId;
41+
42+
private DatabaseSegment databaseName;
43+
44+
private SimpleTableSegment tableName;
2745
}

parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dal/DorisRecoverTableStatement.java

+15-3
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,23 @@
1717

1818
package org.apache.shardingsphere.sql.parser.statement.doris.dal;
1919

20-
import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.RecoverTableStatement;
20+
import lombok.Getter;
21+
import lombok.Setter;
22+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
23+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableIdSegment;
24+
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
25+
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
2126
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
2227

2328
/**
24-
* Doris create database statement.
29+
* Doris recover table statement.
2530
*/
26-
public final class DorisRecoverTableStatement extends RecoverTableStatement implements DorisStatement {
31+
32+
@Getter
33+
@Setter
34+
public final class DorisRecoverTableStatement extends AbstractSQLStatement implements DorisStatement {
35+
36+
private SimpleTableSegment tableName;
37+
38+
private TableIdSegment tableId;
2739
}

0 commit comments

Comments
 (0)