Skip to content

Commit

Permalink
[Enhancement] (nereids)implement showTableIdCommand in nereids (apach…
Browse files Browse the repository at this point in the history
…e#43134)

Issue Number: close apache#42728
  • Loading branch information
Vallishp authored Nov 18, 2024
1 parent 6627d56 commit 866033f
Show file tree
Hide file tree
Showing 6 changed files with 188 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ supportedShowStatement
ON tableName=multipartIdentifier #showCreateMaterializedView
| SHOW BACKENDS #showBackends
| SHOW FRONTENDS name=identifier? #showFrontends
| SHOW TABLE tableId=INTEGER_VALUE #showTableId
;

unsupportedOtherStatement
Expand Down Expand Up @@ -253,7 +254,6 @@ unsupportedShowStatement
| SHOW TABLE STATUS ((FROM | IN) database=multipartIdentifier)? wildWhere? #showTableStatus
| SHOW FULL? TABLES ((FROM | IN) database=multipartIdentifier)? wildWhere? #showTables
| SHOW FULL? VIEWS ((FROM | IN) database=multipartIdentifier)? wildWhere? #showViews
| SHOW TABLE tableId=INTEGER_VALUE #showTableId
| SHOW FULL? PROCESSLIST #showProcessList
| SHOW (GLOBAL | SESSION | LOCAL)? STATUS wildWhere? #showStatus
| SHOW FULL? TRIGGERS ((FROM | IN) database=multipartIdentifier)? wildWhere? #showTriggers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@
import org.apache.doris.nereids.DorisParser.ShowRepositoriesContext;
import org.apache.doris.nereids.DorisParser.ShowRolesContext;
import org.apache.doris.nereids.DorisParser.ShowStorageEnginesContext;
import org.apache.doris.nereids.DorisParser.ShowTableIdContext;
import org.apache.doris.nereids.DorisParser.ShowVariablesContext;
import org.apache.doris.nereids.DorisParser.ShowViewContext;
import org.apache.doris.nereids.DorisParser.SimpleColumnDefContext;
Expand Down Expand Up @@ -453,6 +454,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowRepositoriesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowRolesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowStorageEnginesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableIdCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowVariablesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowViewCommand;
import org.apache.doris.nereids.trees.plans.commands.UnsetDefaultStorageVaultCommand;
Expand Down Expand Up @@ -4153,4 +4155,13 @@ public LogicalPlan visitRecoverDatabase(RecoverDatabaseContext ctx) {
public LogicalPlan visitDropRole(DropRoleContext ctx) {
return new DropRoleCommand(ctx.name.getText(), ctx.EXISTS() != null);
}

@Override
public LogicalPlan visitShowTableId(ShowTableIdContext ctx) {
long tableId = -1;
if (ctx.tableId != null) {
tableId = Long.parseLong(ctx.tableId.getText());
}
return new ShowTableIdCommand(tableId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ public enum PlanType {
SHOW_REPOSITORIES_COMMAND,
SHOW_ROLE_COMMAND,
SHOW_STORAGE_ENGINES_COMMAND,
SHOW_TABLE_ID_COMMAND,
SHOW_VARIABLES_COMMAND,
SHOW_AUTHORS_COMMAND,
SHOW_VIEW_COMMAND,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// 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.Database;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.catalog.TableIf;
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.collect.Lists;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.ArrayList;
import java.util.List;

/**
* show table id command
*/
public class ShowTableIdCommand extends ShowCommand {
public static final Logger LOG = LogManager.getLogger(ShowTableIdCommand.class);
private final long tableId;

/**
* constructor
*/
public ShowTableIdCommand(long tableId) {
super(PlanType.SHOW_TABLE_ID_COMMAND);
this.tableId = tableId;
}

/**
* get meta for show tableId
*/
public ShowResultSetMetaData getMetaData() {
ShowResultSetMetaData.Builder builder = ShowResultSetMetaData.builder();
builder.addColumn(new Column("DbName", ScalarType.createVarchar(30)));
builder.addColumn(new Column("TableName", ScalarType.createVarchar(30)));
builder.addColumn(new Column("DbId", ScalarType.createVarchar(30)));
return builder.build();
}

private ShowResultSet handleShowTableId(ConnectContext ctx, StmtExecutor executor) throws Exception {
List<List<String>> rows = Lists.newArrayList();
Env env = ctx.getEnv();
List<Long> dbIds = env.getInternalCatalog().getDbIds();
for (long dbId : dbIds) {
Database database = env.getInternalCatalog().getDbNullable(dbId);
if (database == null) {
continue;
}
TableIf table = database.getTableNullable(tableId);
if (table != null) {
List<String> row = new ArrayList<>();
row.add(database.getFullName());
row.add(table.getName());
row.add(String.valueOf(database.getId()));
rows.add(row);
break;
}
}
ShowResultSet resultSet = new ShowResultSet(getMetaData(), rows);
return resultSet;
}

@Override
public ShowResultSet doRun(ConnectContext ctx, StmtExecutor executor) throws Exception {
// check access first
if (!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), PrivPredicate.ADMIN)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, "SHOW TABLE");
}
return handleShowTableId(ctx, executor);
}

@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitShowTableIdCommand(this, context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowRepositoriesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowRolesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowStorageEnginesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableIdCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowVariablesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowViewCommand;
import org.apache.doris.nereids.trees.plans.commands.UnsetDefaultStorageVaultCommand;
Expand Down Expand Up @@ -308,4 +309,8 @@ default R visitRecoverDatabaseCommand(RecoverDatabaseCommand recoverDatabaseComm
default R visitDropRoleCommand(DropRoleCommand dropRoleCommand, C context) {
return visitCommand(dropRoleCommand, context);
}

default R visitShowTableIdCommand(ShowTableIdCommand showTableIdCommand, C context) {
return visitCommand(showTableIdCommand, context);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// 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_nereids_showtableid") {
def table = "test_nereids_showtableid"
// create table and insert data
sql """ drop table if exists ${table} force"""
sql """
create table ${table} (
`id` int(11),
`name` varchar(128),
`da` date
)
engine=olap
duplicate key(id)
partition by range(da)(
PARTITION p3 VALUES LESS THAN ('2023-01-01'),
PARTITION p4 VALUES LESS THAN ('2024-01-01'),
PARTITION p5 VALUES LESS THAN ('2025-01-01')
)
distributed by hash(id) buckets 2
properties(
"replication_num"="1",
"light_schema_change"="true"
);
"""

def result = sql_return_maparray "show partitions from ${table}"
logger.info("${result}")
def partitionId;
for (def partition : result) {
//get any partition ID.
partitionId = partition.PartitionId;
break;
}

def result1 = sql_return_maparray "show partition ${partitionId}"
logger.info("${result1}");
def tableId;
for (def row : result1) {
//get any tableID ID.
tableId = row.TableId;
break;
}

checkNereidsExecute("show table ${tableId}")
def result2 = sql "show table ${tableId}";
logger.info("${result2}");

}

0 comments on commit 866033f

Please sign in to comment.