Skip to content

Commit

Permalink
[Enhancement] (nereids)implement showCreateCatalogCommand in nereids
Browse files Browse the repository at this point in the history
  • Loading branch information
msridhar78 committed Nov 19, 2024
1 parent b3cb480 commit d194e86
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ supportedShowStatement
| SHOW PRIVILEGES #showPrivileges
| SHOW PROC path=STRING_LITERAL #showProc
| SHOW STORAGE? ENGINES #showStorageEngines
| SHOW CREATE CATALOG name=identifier #showCreateCatalog
| SHOW SQL_BLOCK_RULE (FOR ruleName=identifier)? #showSqlBlockRule
| SHOW CREATE MATERIALIZED VIEW mvName=identifier
ON tableName=multipartIdentifier #showCreateMaterializedView
Expand Down Expand Up @@ -248,7 +249,6 @@ lockTable
(READ (LOCAL)? | (LOW_PRIORITY)? WRITE)
;


unsupportedShowStatement
: SHOW ROW POLICY (FOR (userIdentify | (ROLE role=identifier)))? #showRowPolicy
| SHOW STORAGE POLICY (USING (FOR policy=identifierOrText)?)? #showStoragePolicy
Expand All @@ -267,7 +267,6 @@ unsupportedShowStatement
| SHOW CREATE VIEW name=multipartIdentifier #showCreateView
| SHOW CREATE MATERIALIZED VIEW name=multipartIdentifier #showMaterializedView
| SHOW CREATE (DATABASE | SCHEMA) name=multipartIdentifier #showCreateDatabase
| SHOW CREATE CATALOG name=identifier #showCreateCatalog
| SHOW CREATE (GLOBAL | SESSION | LOCAL)? FUNCTION functionIdentifier
LEFT_PAREN functionArguments? RIGHT_PAREN
((FROM | IN) database=multipartIdentifier)? #showCreateFunction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -440,17 +440,16 @@ public static Map<String, String> getCatalogPropertiesWithPrintable(CatalogIf<?>
return sortedMap;
}


public ShowResultSet showCreateCatalog(ShowCreateCatalogStmt showStmt) throws AnalysisException {
public List<List<String>> showCreateCatalog(String catalogName) throws AnalysisException {
List<List<String>> rows = Lists.newArrayList();
readLock();
try {
CatalogIf catalog = nameToCatalog.get(showStmt.getCatalog());
CatalogIf catalog = nameToCatalog.get(catalogName);
if (catalog == null) {
throw new AnalysisException("No catalog found with name " + showStmt.getCatalog());
throw new AnalysisException("No catalog found with name " + catalogName);
}
StringBuilder sb = new StringBuilder();
sb.append("\nCREATE CATALOG `").append(ClusterNamespace.getNameFromFullName(showStmt.getCatalog()))
sb.append("\nCREATE CATALOG `").append(ClusterNamespace.getNameFromFullName(catalogName))
.append("`");
if (!Strings.isNullOrEmpty(catalog.getComment())) {
sb.append("\nCOMMENT \"").append(catalog.getComment()).append("\"\n");
Expand All @@ -464,11 +463,17 @@ public ShowResultSet showCreateCatalog(ShowCreateCatalogStmt showStmt) throws An
sb.append("\n);");
}

rows.add(Lists.newArrayList(ClusterNamespace.getNameFromFullName(showStmt.getCatalog()), sb.toString()));
rows.add(Lists.newArrayList(ClusterNamespace.getNameFromFullName(catalogName), sb.toString()));
} finally {
readUnlock();
}

return rows;
}

public ShowResultSet showCreateCatalog(ShowCreateCatalogStmt showStmt) throws AnalysisException {
List<List<String>> rows = showCreateCatalog(showStmt.getCatalog());

return new ShowResultSet(showStmt.getMetaData(), rows);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@
import org.apache.doris.nereids.DorisParser.ShowBackendsContext;
import org.apache.doris.nereids.DorisParser.ShowConfigContext;
import org.apache.doris.nereids.DorisParser.ShowConstraintContext;
import org.apache.doris.nereids.DorisParser.ShowCreateCatalogContext;
import org.apache.doris.nereids.DorisParser.ShowCreateMTMVContext;
import org.apache.doris.nereids.DorisParser.ShowCreateMaterializedViewContext;
import org.apache.doris.nereids.DorisParser.ShowCreateProcedureContext;
Expand Down Expand Up @@ -450,6 +451,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowBackendsCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConfigCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConstraintsCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateCatalogCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateMaterializedViewCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateProcedureCommand;
Expand Down Expand Up @@ -4059,7 +4061,6 @@ public SetDefaultStorageVaultCommand visitSetDefaultStorageVault(SetDefaultStora
}

@Override

public Object visitRefreshCatalog(RefreshCatalogContext ctx) {
if (ctx.name != null) {
String catalogName = ctx.name.getText();
Expand Down Expand Up @@ -4171,6 +4172,11 @@ public LogicalPlan visitShowProc(ShowProcContext ctx) {
return new ShowProcCommand(path);
}

@Override
public LogicalPlan visitShowCreateCatalog(ShowCreateCatalogContext ctx) {
return new ShowCreateCatalogCommand(ctx.identifier().getText());
}

@Override
public LogicalPlan visitShowStorageEngines(ShowStorageEnginesContext ctx) {
return new ShowStorageEnginesCommand();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ public enum PlanType {
SHOW_BACKENDS_COMMAND,
SHOW_BLOCK_RULE_COMMAND,
SHOW_CONFIG_COMMAND,
SHOW_CREATE_CATALOG_COMMAND,
SHOW_CREATE_MATERIALIZED_VIEW_COMMAND,
SHOW_FRONTENDS_COMMAND,
SHOW_GRANTS_COMMAND,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// 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.doris.nereids.trees.plans.commands;

import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.mysql.privilege.PrivPredicate;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ShowResultSet;
import org.apache.doris.qe.ShowResultSetMetaData;
import org.apache.doris.qe.StmtExecutor;

import com.google.common.base.Strings;

import java.util.List;
import java.util.Objects;

/**
* Represents the command for SHOW CREATE CATALOG.
*/
public class ShowCreateCatalogCommand extends ShowCommand {
private static final ShowResultSetMetaData META_DATA =
ShowResultSetMetaData.builder()
.addColumn(new Column("Catalog", ScalarType.createVarchar(20)))
.addColumn(new Column("CreateCatalog", ScalarType.createVarchar(30)))
.build();

private final String catalogName;

public ShowCreateCatalogCommand(String catalogName) {
super(PlanType.SHOW_CREATE_CATALOG_COMMAND);
this.catalogName = Objects.requireNonNull(catalogName, "Catalog name cannot be null");
}

@Override
public ShowResultSet doRun(ConnectContext ctx, StmtExecutor executor) throws Exception {
if (Strings.isNullOrEmpty(catalogName)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_CATALOG_NAME, catalogName);
}

if (!Env.getCurrentEnv().getAccessManager()
.checkCtlPriv(ConnectContext.get(), catalogName, PrivPredicate.SHOW)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_CATALOG_ACCESS_DENIED,
ConnectContext.get().getQualifiedUser(), catalogName);
}

List<List<String>> rows = Env.getCurrentEnv().getCatalogMgr().showCreateCatalog(catalogName);

return new ShowResultSet(getMetaData(), rows);
}

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

public ShowResultSetMetaData getMetaData() {
return META_DATA;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowBackendsCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConfigCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConstraintsCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateCatalogCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateMaterializedViewCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowCreateProcedureCommand;
Expand Down Expand Up @@ -311,6 +312,10 @@ default R visitShowStorageEnginesCommand(ShowStorageEnginesCommand showStorageEn
return visitCommand(showStorageEnginesCommand, context);
}

default R visitShowCreateCatalogCommand(ShowCreateCatalogCommand showCreateCatalogCommand, C context) {
return visitCommand(showCreateCatalogCommand, context);
}

default R visitShowCreateMaterializedViewCommand(ShowCreateMaterializedViewCommand showCreateMtlzViewCommand,
C context) {
return visitCommand(showCreateMtlzViewCommand, context);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !cmd --
es \nCREATE CATALOG `es` PROPERTIES (\n"type" = "es",\n"hosts" = "http://127.0.0.1:9200"\n);

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// 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.

suite("test_show_create_catalog", "p0,external,hive,external_docker,external_docker_hive") {

String catalog_name = "es"

sql """drop catalog if exists ${catalog_name}"""
sql """create catalog if not exists ${catalog_name} properties (
"type"="es",
"hosts"="http://127.0.0.1:9200"
);"""

checkNereidsExecute("""show create catalog ${catalog_name}""")
qt_cmd("""show create catalog ${catalog_name}""")

sql """drop catalog if exists ${catalog_name}"""
}

0 comments on commit d194e86

Please sign in to comment.