Skip to content

Commit

Permalink
Support recover partition in new Parser and Analyzer (StarRocks#8493)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuxt2015 authored and melt-code committed Jul 18, 2022
1 parent 6168bc1 commit 86f5cdd
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.starrocks.mysql.privilege.Privilege;
import com.starrocks.qe.ConnectContext;
import com.starrocks.server.GlobalStateMgr;
import com.starrocks.sql.ast.AstVisitor;

public class RecoverPartitionStmt extends DdlStmt {
private TableName dbTblName;
Expand All @@ -50,6 +51,10 @@ public String getTableName() {
return dbTblName.getTbl();
}

public TableName getDbTblName() {
return dbTblName;
}

public String getPartitionName() {
return partitionName;
}
Expand Down Expand Up @@ -80,4 +85,14 @@ public String toSql() {
sb.append(getTableName());
return sb.toString();
}

@Override
public boolean isSupportNewPlanner() {
return true;
}

@Override
public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
return visitor.visitRecoverPartitionStmt(this, context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.starrocks.analysis.InsertStmt;
import com.starrocks.analysis.LimitElement;
import com.starrocks.analysis.RecoverDbStmt;
import com.starrocks.analysis.RecoverPartitionStmt;
import com.starrocks.analysis.RecoverTableStmt;
import com.starrocks.analysis.RestoreStmt;
import com.starrocks.analysis.SetStmt;
Expand Down Expand Up @@ -357,6 +358,12 @@ public Void visitTruncateTableStatement(TruncateTableStmt statement, ConnectCont
return null;
}

@Override
public Void visitRecoverPartitionStmt(RecoverPartitionStmt statement, ConnectContext context) {
RecoverPartitionAnalyzer.analyze(statement, context);
return null;
}

// ------------------------------------------- Analyze Statement ---------------------------------------------------

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// This file is licensed under the Elastic License 2.0. Copyright 2021-present, StarRocks Limited.
package com.starrocks.sql.analyzer;

import com.starrocks.analysis.RecoverPartitionStmt;
import com.starrocks.analysis.TableName;
import com.starrocks.qe.ConnectContext;
import com.starrocks.sql.common.MetaUtils;

public class RecoverPartitionAnalyzer {
public static void analyze(RecoverPartitionStmt statement, ConnectContext context) {
TableName tbl = statement.getDbTblName();
MetaUtils.normalizationTableName(context, tbl);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ statement
| showTabletStatement #showTablet
| cancelAlterTableStatement #cancelAlterTable
| showPartitionsStatement #showPartitions
| recoverPartitionStatement #recoverPartition

// View Statement
| createViewStatement #createView
Expand Down Expand Up @@ -340,6 +341,10 @@ showPartitionsStatement
(ORDER BY sortItem (',' sortItem)*)? limitElement?
;

recoverPartitionStatement
: RECOVER PARTITION identifier FROM table=qualifiedName
;

// ------------------------------------------- View Statement ----------------------------------------------------------

createViewStatement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void testNormalDropPartition() throws Exception {
Assert.assertNull(partition);
String recoverPartitionSql = "recover partition p20210201 from test.tbl1";
RecoverPartitionStmt recoverPartitionStmt =
(RecoverPartitionStmt) UtFrameUtils.parseAndAnalyzeStmt(recoverPartitionSql, connectContext);
(RecoverPartitionStmt) UtFrameUtils.parseStmtWithNewParser(recoverPartitionSql, connectContext);
GlobalStateMgr.getCurrentState().recoverPartition(recoverPartitionStmt);
partition = table.getPartition("p20210201");
Assert.assertNotNull(partition);
Expand All @@ -108,7 +108,7 @@ public void testForceDropPartition() throws Exception {
Assert.assertNull(partition);
String recoverPartitionSql = "recover partition p20210202 from test.tbl1";
RecoverPartitionStmt recoverPartitionStmt =
(RecoverPartitionStmt) UtFrameUtils.parseAndAnalyzeStmt(recoverPartitionSql, connectContext);
(RecoverPartitionStmt) UtFrameUtils.parseStmtWithNewParser(recoverPartitionSql, connectContext);
ExceptionChecker.expectThrowsWithMsg(DdlException.class,
"No partition named p20210202 in table tbl1",
() -> GlobalStateMgr.getCurrentState().recoverPartition(recoverPartitionStmt));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ public void testForMultiPartitionTable() throws Exception {
Assert.assertTrue(!originPartitionTabletIds2.containsKey("p1"));

String recoverStr = "recover partition p1 from db2.tbl2;";
RecoverPartitionStmt recoverStmt = (RecoverPartitionStmt) UtFrameUtils.parseAndAnalyzeStmt(recoverStr, ctx);
RecoverPartitionStmt recoverStmt = (RecoverPartitionStmt) UtFrameUtils.parseStmtWithNewParser(recoverStr, ctx);
GlobalStateMgr.getCurrentState().recoverPartition(recoverStmt);
checkShowPartitionsResultNum("db2.tbl2", true, 3);
checkShowPartitionsResultNum("db2.tbl2", false, 3);
Expand Down

0 comments on commit 86f5cdd

Please sign in to comment.