Skip to content

Commit

Permalink
[Enhancement] (nereids)implement alterCatalogPropertiesCommand in ner…
Browse files Browse the repository at this point in the history
…eids
  • Loading branch information
msridhar78 committed Dec 20, 2024
1 parent 8956279 commit 7b3de4b
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ supportedAlterStatement
| ALTER ROLE role=identifier commentSpec #alterRole
| ALTER WORKLOAD GROUP name=identifierOrText
properties=propertyClause? #alterWorkloadGroup
| ALTER CATALOG name=identifier SET PROPERTIES
LEFT_PAREN propertyItemList RIGHT_PAREN #alterCatalogProperties
| ALTER WORKLOAD POLICY name=identifierOrText
properties=propertyClause? #alterWorkloadPolicy
| ALTER SQL_BLOCK_RULE name=identifier properties=propertyClause? #alterSqlBlockRule
Expand Down Expand Up @@ -586,8 +588,6 @@ unsupportedAlterStatement
| ALTER DATABASE name=identifier SET PROPERTIES
LEFT_PAREN propertyItemList RIGHT_PAREN #alterDatabaseProperties
| ALTER CATALOG name=identifier RENAME newName=identifier #alterCatalogRename
| ALTER CATALOG name=identifier SET PROPERTIES
LEFT_PAREN propertyItemList RIGHT_PAREN #alterCatalogProperties
| ALTER RESOURCE name=identifierOrText properties=propertyClause? #alterResource
| ALTER COLOCATE GROUP name=multipartIdentifier
SET LEFT_PAREN propertyItemList RIGHT_PAREN #alterColocateGroup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,26 +364,35 @@ public void alterCatalogComment(AlterCatalogCommentStmt stmt) throws UserExcepti
/**
* Modify the catalog property and write the meta log.
*/
public void alterCatalogProps(AlterCatalogPropertyStmt stmt) throws UserException {
public void alterCatalogProps(String catalogName, Map<String, String> newProperties) throws UserException {
writeLock();
try {
CatalogIf catalog = nameToCatalog.get(stmt.getCatalogName());
CatalogIf catalog = nameToCatalog.get(catalogName);
if (catalog == null) {
throw new DdlException("No catalog found with name: " + stmt.getCatalogName());
throw new DdlException("No catalog found with name: " + catalogName);
}
Map<String, String> oldProperties = catalog.getProperties();
if (stmt.getNewProperties().containsKey("type") && !catalog.getType()
.equalsIgnoreCase(stmt.getNewProperties().get("type"))) {
throw new DdlException("Can't modify the type of catalog property with name: " + stmt.getCatalogName());
if (newProperties.containsKey("type") && !catalog.getType()
.equalsIgnoreCase(newProperties.get("type"))) {
throw new DdlException("Can't modify the type of catalog property with name: " + catalogName);
}
CatalogLog log = CatalogFactory.createCatalogLog(catalog.getId(), stmt);
CatalogLog log = new CatalogLog();
log.setCatalogId(catalog.getId());
log.setNewProps(newProperties);
replayAlterCatalogProps(log, oldProperties, false);
Env.getCurrentEnv().getEditLog().logCatalogLog(OperationType.OP_ALTER_CATALOG_PROPS, log);
} finally {
writeUnlock();
}
}

/**
* Modify the catalog property and write the meta log.
*/
public void alterCatalogProps(AlterCatalogPropertyStmt stmt) throws UserException {
alterCatalogProps(stmt.getCatalogName(), stmt.getNewProperties());
}

/**
* List all catalog or get the special catalog with a name.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
import org.apache.doris.nereids.DorisParser.AliasQueryContext;
import org.apache.doris.nereids.DorisParser.AliasedQueryContext;
import org.apache.doris.nereids.DorisParser.AlterCatalogCommentContext;
import org.apache.doris.nereids.DorisParser.AlterCatalogPropertiesContext;
import org.apache.doris.nereids.DorisParser.AlterMTMVContext;
import org.apache.doris.nereids.DorisParser.AlterRoleContext;
import org.apache.doris.nereids.DorisParser.AlterSqlBlockRuleContext;
Expand Down Expand Up @@ -498,6 +499,7 @@
import org.apache.doris.nereids.trees.plans.commands.AdminSetTableStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.AdminShowReplicaStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterCatalogCommentCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterCatalogPropertiesCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterRoleCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterSqlBlockRuleCommand;
Expand Down Expand Up @@ -4952,6 +4954,13 @@ public LogicalPlan visitShowWarningErrors(ShowWarningErrorsContext ctx) {
return new ShowWarningErrorsCommand(isWarning, limit);
}

@Override
public LogicalPlan visitAlterCatalogProperties(AlterCatalogPropertiesContext ctx) {
String catalogName = stripQuotes(ctx.name.getText());
Map<String, String> properties = visitPropertyItemList(ctx.propertyItemList());
return new AlterCatalogPropertiesCommand(catalogName, properties);
}

@Override
public RecoverTableCommand visitRecoverTable(RecoverTableContext ctx) {
List<String> dbTblNameParts = visitMultipartIdentifier(ctx.name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ public enum PlanType {
DROP_JOB_COMMAND,
RESUME_JOB_COMMAND,
ALTER_MTMV_COMMAND,
ALTER_CATALOG_PROPERTIES_COMMAND,
ADD_CONSTRAINT_COMMAND,
ADMIN_COMPACT_TABLE_COMMAND,
DROP_CONSTRAINT_COMMAND,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// 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.Env;
import org.apache.doris.common.util.PropertyAnalyzer;
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.StmtExecutor;

import java.util.Map;
import java.util.Objects;

/**
* Represents the command for ALTER CATALOG ... SET PROPERTIES.
*/
public class AlterCatalogPropertiesCommand extends AlterCatalogCommand {
private final Map<String, String> newProperties;

public AlterCatalogPropertiesCommand(String catalogName, Map<String, String> properties) {
super(PlanType.ALTER_CATALOG_PROPERTIES_COMMAND, catalogName);
this.newProperties = Objects.requireNonNull(properties, "Properties cannot be null");
}

@Override
public void doRun(ConnectContext ctx, StmtExecutor executor) throws Exception {
PropertyAnalyzer.checkCatalogProperties(newProperties, true);

Env.getCurrentEnv().getCatalogMgr().alterCatalogProps(catalogName, newProperties);
}

@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitAlterCatalogPropertiesCommand(this, context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.doris.nereids.trees.plans.commands.AdminSetTableStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.AdminShowReplicaStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterCatalogCommentCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterCatalogPropertiesCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterJobStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterRoleCommand;
Expand Down Expand Up @@ -551,6 +552,10 @@ default R visitShowWhiteListCommand(ShowWhiteListCommand whiteListCommand, C con
return visitCommand(whiteListCommand, context);
}

default R visitAlterCatalogPropertiesCommand(AlterCatalogPropertiesCommand alterCatalogPropsCmd, C context) {
return visitCommand(alterCatalogPropsCmd, context);
}

default R visitRecoverDatabaseCommand(RecoverDatabaseCommand recoverDatabaseCommand, C context) {
return visitCommand(recoverDatabaseCommand, context);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !cmd --
test_alter_catalog_properties \nCREATE CATALOG `test_alter_catalog_properties`\nCOMMENT "Catalog for property test"\n PROPERTIES (\n"type" = "es",\n"hosts" = "http://127.0.0.1:9200"\n);

-- !cmd --
test_alter_catalog_properties \nCREATE CATALOG `test_alter_catalog_properties`\nCOMMENT "Catalog for property test"\n PROPERTIES (\n"type" = "es",\n"hosts" = "http://192.168.0.1:9200"\n);

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// 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,
// 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_alter_catalog_properties_command", "nereids_p0") {
def catalogName = "test_alter_catalog_properties"
def catalogProperties = "\"type\"=\"es\", \"hosts\"=\"http://127.0.0.1:9200\""
def newProperties = "\"type\"=\"es\", \"hosts\"=\"http://192.168.0.1:9200\""

try {
// Drop catalog if it already exists
sql("DROP CATALOG IF EXISTS ${catalogName}")

// Create a new catalog
sql(
"""
CREATE CATALOG ${catalogName}
COMMENT 'Catalog for property test'
PROPERTIES (${catalogProperties})
"""
)
// Verify the catalog was created
checkNereidsExecute("""SHOW CREATE CATALOG ${catalogName}""")
qt_cmd("""SHOW CREATE CATALOG ${catalogName}""")

// Alter the catalog properties
checkNereidsExecute(
"""
ALTER CATALOG ${catalogName} SET PROPERTIES (${newProperties})
"""
)

// Verify the properties were changed
checkNereidsExecute("""SHOW CREATE CATALOG ${catalogName}""")
qt_cmd("""SHOW CREATE CATALOG ${catalogName}""")

} finally {
// Clean up
sql("DROP CATALOG IF EXISTS ${catalogName}")
}
}

0 comments on commit 7b3de4b

Please sign in to comment.