Skip to content

Commit

Permalink
[Feature] Support DDL [Drop external catalog catalog_name;] for exter…
Browse files Browse the repository at this point in the history
…nal catalog (StarRocks#5839)
  • Loading branch information
adzfolc authored May 9, 2022
1 parent 1e08992 commit 5324829
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// This file is licensed under the Elastic License 2.0. Copyright 2021-present, StarRocks Limited.

package com.starrocks.analysis;

import com.google.common.base.Strings;
import com.starrocks.catalog.InternalCatalog;
import com.starrocks.sql.analyzer.SemanticException;
import com.starrocks.sql.ast.AstVisitor;

// ToDo(zhuodong): to support internal catalog in the future
public class DropCatalogStmt extends DdlStmt {

private final String name;

public DropCatalogStmt(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void analyze() throws SemanticException {
// TODO check permission
if (Strings.isNullOrEmpty(name)) {
throw new SemanticException("'catalog name' can not be null or empty");
}

if (name.equals(InternalCatalog.DEFAULT_INTERNAL_CATALOG_NAME)) {
throw new SemanticException("Can't drop the default internal catalog");
}
}

@Override
public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
return visitor.visitDropCatalogStatement(this, context);
}

@Override
public String toSql() {
StringBuilder sb = new StringBuilder();
sb.append("DROP EXTERNAL CATALOG ");
sb.append("\'" + name + "\'");
return sb.toString();
}
}
3 changes: 3 additions & 0 deletions fe/fe-core/src/main/java/com/starrocks/qe/DdlExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import com.starrocks.analysis.CreateWorkGroupStmt;
import com.starrocks.analysis.DdlStmt;
import com.starrocks.analysis.DropAnalyzeJobStmt;
import com.starrocks.analysis.DropCatalogStmt;
import com.starrocks.analysis.DropDbStmt;
import com.starrocks.analysis.DropFileStmt;
import com.starrocks.analysis.DropFunctionStmt;
Expand Down Expand Up @@ -240,6 +241,8 @@ public static void execute(GlobalStateMgr globalStateMgr, DdlStmt ddlStmt) throw
globalStateMgr.getWorkGroupMgr().alterWorkGroup((AlterWorkGroupStmt) ddlStmt);
} else if (ddlStmt instanceof CreateCatalogStmt) {
globalStateMgr.getCatalogMgr().createCatalog((CreateCatalogStmt) ddlStmt);
} else if (ddlStmt instanceof DropCatalogStmt) {
globalStateMgr.getCatalogMgr().dropCatalog(((DropCatalogStmt) ddlStmt).getName());
} else {
throw new DdlException("Unknown statement.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.starrocks.analysis.CreateWorkGroupStmt;
import com.starrocks.analysis.DeleteStmt;
import com.starrocks.analysis.DmlStmt;
import com.starrocks.analysis.DropCatalogStmt;
import com.starrocks.analysis.DropMaterializedViewStmt;
import com.starrocks.analysis.DropTableStmt;
import com.starrocks.analysis.DropWorkGroupStmt;
Expand Down Expand Up @@ -179,7 +180,8 @@ public static boolean supportedByNewParser(StatementBase statement) {
|| statement instanceof ShowDbStmt
|| statement instanceof ShowMaterializedViewStmt
|| statement instanceof ShowTableStmt
|| statement instanceof CreateCatalogStmt;
|| statement instanceof CreateCatalogStmt
|| statement instanceof DropCatalogStmt;
}

public static boolean supportedByNewAnalyzer(StatementBase statement) {
Expand All @@ -206,6 +208,7 @@ public static boolean supportedByNewAnalyzer(StatementBase statement) {
|| statement instanceof ShowVariablesStmt
|| statement instanceof ShowWorkGroupStmt
|| statement instanceof DropMaterializedViewStmt
|| statement instanceof CreateCatalogStmt;
|| statement instanceof CreateCatalogStmt
|| statement instanceof DropCatalogStmt;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.starrocks.analysis.CreateTableAsSelectStmt;
import com.starrocks.analysis.CreateWorkGroupStmt;
import com.starrocks.analysis.DeleteStmt;
import com.starrocks.analysis.DropCatalogStmt;
import com.starrocks.analysis.DropMaterializedViewStmt;
import com.starrocks.analysis.DropTableStmt;
import com.starrocks.analysis.InsertStmt;
Expand Down Expand Up @@ -176,6 +177,12 @@ public Void visitCreateCatalogStatement(CreateCatalogStmt statement, ConnectCont
statement.analyze();
return null;
}

@Override
public Void visitDropCatalogStatement(DropCatalogStmt statement, ConnectContext context) {
statement.analyze();
return null;
}
}

private static void analyzeAnalyzeStmt(AnalyzeStmt node, ConnectContext session) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.starrocks.analysis.DdlStmt;
import com.starrocks.analysis.DefaultValueExpr;
import com.starrocks.analysis.DeleteStmt;
import com.starrocks.analysis.DropCatalogStmt;
import com.starrocks.analysis.DropIndexClause;
import com.starrocks.analysis.DropMaterializedViewStmt;
import com.starrocks.analysis.DropTableStmt;
Expand Down Expand Up @@ -205,6 +206,10 @@ public R visitCreateCatalogStatement(CreateCatalogStmt stmt, C context) {
return visitStatement(stmt, context);
}

public R visitDropCatalogStatement(DropCatalogStmt stmt, C context) {
return visitStatement(stmt, context);
}

// ----------------- Alter Clause ---------------

public R visitCreateIndexClause(CreateIndexClause clause, C context) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import com.starrocks.analysis.DeleteStmt;
import com.starrocks.analysis.DistributionDesc;
import com.starrocks.analysis.DropBackendClause;
import com.starrocks.analysis.DropCatalogStmt;
import com.starrocks.analysis.DropFollowerClause;
import com.starrocks.analysis.DropIndexClause;
import com.starrocks.analysis.DropMaterializedViewStmt;
Expand Down Expand Up @@ -338,6 +339,13 @@ public ParseNode visitCreateExternalCatalogStatement(StarRocksParser.CreateExter
return new CreateCatalogStmt(catalogName, properties);
}

@Override
public ParseNode visitDropExternalCatalogStatement(StarRocksParser.DropExternalCatalogStatementContext context) {
Identifier identifier = (Identifier) visit(context.catalogName);
String catalogName = identifier.getValue();
return new DropCatalogStmt(catalogName);
}

// ------------------------------------------- Alter Clause --------------------------------------------------------

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ statement

// Catalog Statement
| createExternalCatalogStatement #createCatalog
| dropExternalCatalogStatement #dropCatalog

// DML Statement
| insertStatement #insert
Expand Down Expand Up @@ -131,6 +132,10 @@ createExternalCatalogStatement
: CREATE EXTERNAL CATALOG catalogName=identifierOrString properties
;

dropExternalCatalogStatement
: DROP EXTERNAL CATALOG catalogName=identifierOrString
;

// ------------------------------------------- Alter Clause ------------------------------------------------------------

alterClause
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,24 @@ public void testSelectNonReservedCol() {
AnalyzeTestUtil.analyzeSuccess(sql_3);
}

@Test
public void testDropCatalogParserAndAnalyzer() {
// test drop ddl DROP EXTERNAL CATALOG catalog_name
String sql_1 = "DROP EXTERNAL CATALOG catalog_1";
StatementBase stmt = AnalyzeTestUtil.analyzeSuccess(sql_1);
Assert.assertTrue(stmt instanceof DropCatalogStmt);
String sql_2 = "DROP EXTERNAL CATALOG";
AnalyzeTestUtil.analyzeFail(sql_2);
String sql_3 = "DROP EXTERNAL CATALOG default";
AnalyzeTestUtil.analyzeFail(sql_3);
Assert.assertEquals("DROP EXTERNAL CATALOG 'catalog_1'", stmt.toSql());

// test drop ddl DROP EXTERNAL CATALOG 'catalog_name'
String sql_4 = "DROP EXTERNAL CATALOG 'catalog_1'";
StatementBase stmt2 = AnalyzeTestUtil.analyzeSuccess(sql_4);
Assert.assertTrue(stmt2 instanceof DropCatalogStmt);
}

@Test
public void testCreateCatalog() throws Exception {
String sql = "CREATE EXTERNAL CATALOG hive_catalog PROPERTIES(\"type\"=\"hive\", \"hive.metastore.uris\"=\"thrift://127.0.0.1:9083\")";
Expand All @@ -79,4 +97,48 @@ public void testCreateCatalog() throws Exception {
Assert.assertFalse(metadataMgr.connectorMetadataExists("hive_catalog"));
}


@Test
public void testDropCatalog() throws Exception {
// test drop ddl DROP EXTERNAL CATALOG catalog_name
String createSql = "CREATE EXTERNAL CATALOG hive_catalog PROPERTIES(\"type\"=\"hive\", \"hive.metastore.uris\"=\"thrift://127.0.0.1:9083\")";
String dropSql = "DROP EXTERNAL CATALOG hive_catalog";


CatalogMgr catalogMgr = GlobalStateMgr.getCurrentState().getCatalogMgr();
ConnectorMgr connectorMgr = GlobalStateMgr.getCurrentState().getConnectorMgr();
MetadataMgr metadataMgr = GlobalStateMgr.getCurrentState().getMetadataMgr();

StatementBase createStmtBase = AnalyzeTestUtil.analyzeSuccess(createSql);
Assert.assertTrue(createStmtBase instanceof CreateCatalogStmt);
CreateCatalogStmt createCatalogStmt = (CreateCatalogStmt) createStmtBase;
DdlExecutor.execute(GlobalStateMgr.getCurrentState(), createCatalogStmt);
Assert.assertTrue(catalogMgr.catalogExists("hive_catalog"));
Assert.assertTrue(connectorMgr.connectorExists("hive_catalog"));
Assert.assertTrue(metadataMgr.connectorMetadataExists("hive_catalog"));

StatementBase dropStmtBase = AnalyzeTestUtil.analyzeSuccess(dropSql);
Assert.assertTrue(dropStmtBase instanceof DropCatalogStmt);
DropCatalogStmt dropCatalogStmt = (DropCatalogStmt) dropStmtBase;
DdlExecutor.execute(GlobalStateMgr.getCurrentState(), dropCatalogStmt);
Assert.assertFalse(catalogMgr.catalogExists("hive_catalog"));
Assert.assertFalse(connectorMgr.connectorExists("hive_catalog"));
Assert.assertFalse(metadataMgr.connectorMetadataExists("hive_catalog"));

// test drop ddl DROP EXTERNAL CATALOG 'catalog_name'
String dropSql_2 = "DROP EXTERNAL CATALOG 'hive_catalog'";

DdlExecutor.execute(GlobalStateMgr.getCurrentState(), createCatalogStmt);
Assert.assertTrue(catalogMgr.catalogExists("hive_catalog"));
Assert.assertTrue(connectorMgr.connectorExists("hive_catalog"));
Assert.assertTrue(metadataMgr.connectorMetadataExists("hive_catalog"));

StatementBase dropStmtBase_2 = AnalyzeTestUtil.analyzeSuccess(dropSql_2);
Assert.assertTrue(dropStmtBase_2 instanceof DropCatalogStmt);
DropCatalogStmt dropCatalogStmt_2 = (DropCatalogStmt) dropStmtBase;
DdlExecutor.execute(GlobalStateMgr.getCurrentState(), dropCatalogStmt_2);
Assert.assertFalse(catalogMgr.catalogExists("hive_catalog"));
Assert.assertFalse(connectorMgr.connectorExists("hive_catalog"));
Assert.assertFalse(metadataMgr.connectorMetadataExists("hive_catalog"));
}
}

0 comments on commit 5324829

Please sign in to comment.