Skip to content

Commit

Permalink
Add Doris grammar rules and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
shamilv committed Dec 26, 2024
1 parent ad02d16 commit aa412d3
Show file tree
Hide file tree
Showing 19 changed files with 486 additions and 4 deletions.
21 changes: 21 additions & 0 deletions parser/sql/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,14 @@ databaseName
: identifier
;

newDatabaseName
: identifier
;

databaseId
: identifier
;

databaseNames
: databaseName (COMMA_ databaseName)*
;
Expand All @@ -687,6 +695,10 @@ tableName
: (owner DOT_)? name
;

tableId
: identifier
;

columnName
: identifier
;
Expand Down Expand Up @@ -843,6 +855,15 @@ partitionName
: identifier
;

newPartitionName
: identifier
;


partitionId
: identifier
;

identifierList
: identifier (COMMA_ identifier)*
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,18 @@ restart
: RESTART
;

recoverDatabase
: RECOVER DATABASE databaseName (databaseId | AS newDatabaseName)?
;

recoverPartition
: RECOVER PARTITION partitionName partitionId? (AS newPartitionName)? FROM tableName
;

recoverTable
: RECOVER TABLE tableName tableId? (AS newDatabaseName)?
;

shutdown
: SHUTDOWN
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ execute
| repairTable
| dropTable
| truncateTable
| recoverTable
| createIndex
| dropIndex
| createProcedure
Expand All @@ -39,6 +40,7 @@ execute
| dropFunction
| createDatabase
| dropDatabase
| recoverDatabase
| createEvent
| dropEvent
| createLogfileGroup
Expand Down Expand Up @@ -128,6 +130,7 @@ execute
| dropTablespace
| delimiter
| startReplica
| recoverPartition
// TODO consider refactor following sytax to SEMI_? EOF
) (SEMI_ EOF? | EOF)
| EOF
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisKillStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisLoadIndexInfoStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisOptimizeTableStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisRecoverPartitionStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisRepairTableStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisResetPersistStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisResetStatement;
Expand Down Expand Up @@ -215,11 +216,18 @@
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUninstallComponentStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUninstallPluginStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUseStatement;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetMasterOptionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetOptionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetSlaveOptionSegment;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisRecoverDatabaseStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisRecoverTableStatement;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import static org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.*;

/**
* DAL statement visitor for Doris.
*/
Expand Down Expand Up @@ -928,17 +936,17 @@ private VariableAssignSegment getVariableAssignSegment(final OptionValueContext
ctx.internalVariableName().start.getStartIndex(), ctx.internalVariableName().stop.getStopIndex(), ctx.internalVariableName().getText(), ctx.optionType().getText());
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
}

private VariableAssignSegment getVariableAssignSegment(final OptionValueListContext ctx) {
VariableSegment variable = new VariableSegment(
ctx.internalVariableName().start.getStartIndex(), ctx.internalVariableName().stop.getStopIndex(), ctx.internalVariableName().getText(), ctx.optionType().getText());
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.setExprOrDefault().stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
}

private VariableAssignSegment getVariableAssignSegment(final OptionValueNoOptionTypeContext ctx) {
return new VariableAssignSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getVariableSegment(ctx), getAssignValue(ctx));
}

private VariableSegment getVariableSegment(final OptionValueNoOptionTypeContext ctx) {
if (null != ctx.NAMES()) {
// TODO Consider setting all three system variables: character_set_client, character_set_results, character_set_connection
Expand Down Expand Up @@ -1073,4 +1081,44 @@ public ASTNode visitHelp(final HelpContext ctx) {
result.setSearchString(ctx.textOrIdentifier().getText());
return result;
}

@Override
public ASTNode visitRecoverDatabase(final RecoverDatabaseContext ctx) {
DorisRecoverDatabaseStatement result = new DorisRecoverDatabaseStatement();
result.setDatabaseName(new IdentifierValue(ctx.databaseName().getText()).getValue());
if (null != ctx.databaseId()) {
result.setDatabaseId(new IdentifierValue(ctx.databaseId().getText()).getValue());
}
if (null != ctx.newDatabaseName()) {
result.setDatabaseName(new IdentifierValue(ctx.newDatabaseName().getText()).getValue());
}
return result;
}

@Override
public ASTNode visitRecoverPartition(final RecoverPartitionContext ctx) {
DorisRecoverPartitionStatement result = new DorisRecoverPartitionStatement();
result.setPartitionName(new IdentifierValue(ctx.partitionName().getText()).getValue());
if (null != ctx.partitionId()) {
result.setPartitionId(new IdentifierValue(ctx.partitionId().getText()).getValue());
}
if (null != ctx.newPartitionName()) {
result.setNewPartitionName(new IdentifierValue(ctx.newPartitionName().getText()).getValue());
}
if (null != ctx.tableName().owner()) {
result.setOwner(new IdentifierValue(ctx.tableName().owner().getText()).getValue());
}
result.setTableName(new IdentifierValue(ctx.tableName().name().getText()).getValue());
return result;
}

@Override
public ASTNode visitRecoverTable(final RecoverTableContext ctx) {
DorisRecoverTableStatement result = new DorisRecoverTableStatement();
result.setTableName(new IdentifierValue(ctx.tableName().getText()).getValue());
if (null != ctx.tableId()) {
result.setTableName(new IdentifierValue(ctx.tableId().getText()).getValue());
}
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ public enum SQLVisitorRule {

DROP_TABLE("DropTable", SQLStatementType.DDL),

RECOVER_TABLE("RecoverTable", SQLStatementType.DAL),

TRUNCATE_TABLE("TruncateTable", SQLStatementType.DDL),

CREATE_INDEX("CreateIndex", SQLStatementType.DDL),
Expand Down Expand Up @@ -137,6 +139,8 @@ public enum SQLVisitorRule {

DROP_DATABASE("DropDatabase", SQLStatementType.DDL),

RECOVER_DATABASE("RecoverDatabase", SQLStatementType.DAL),

DROP_DATABASE_LINK("DropDatabaseLink", SQLStatementType.DDL),

ALTER_DATABASE_DICTIONARY("AlterDatabaseDictionary", SQLStatementType.DDL),
Expand Down Expand Up @@ -711,7 +715,9 @@ public enum SQLVisitorRule {

START_REPLICA("StartReplica", SQLStatementType.RL),

OPEN("Open", SQLStatementType.DDL);
OPEN("Open", SQLStatementType.DDL),

RECOVER_PARTITION("RecoverPartition", SQLStatementType.DAL);

private final String name;

Expand Down
Original file line number Diff line number Diff line change
@@ -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.core.statement.dal;

import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;

/**
* Create database statement.
*/
@Getter
@Setter
public abstract class RecoverDatabaseStatement extends AbstractSQLStatement implements DDLStatement {

private String databaseName;

private String databaseId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.shardingsphere.sql.parser.statement.core.statement.dal;

import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;

/**
* Create database statement.
*/
@Getter
@Setter
public abstract class RecoverPartitionStatement extends AbstractSQLStatement implements DDLStatement {

private String partitionName;

private String partitionId;

private String databaseName;

private String newPartitionName;

private String owner;

private String tableName;

}
Original file line number Diff line number Diff line change
@@ -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.core.statement.dal;

import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;

/**
* Create database statement.
*/
@Getter
@Setter
public abstract class RecoverTableStatement extends AbstractSQLStatement implements DDLStatement {

private String tableName;

private String tableId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* 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 org.apache.shardingsphere.sql.parser.statement.core.statement.dal.RecoverDatabaseStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;

/**
* Doris create database statement.
*/
public final class DorisRecoverDatabaseStatement extends RecoverDatabaseStatement implements DorisStatement {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* 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 org.apache.shardingsphere.sql.parser.statement.core.statement.dal.RecoverPartitionStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;

/**
* Doris create database statement.
*/
public final class DorisRecoverPartitionStatement extends RecoverPartitionStatement implements DorisStatement {
}
Loading

0 comments on commit aa412d3

Please sign in to comment.