Skip to content

Commit

Permalink
[Enhancement] (nereids)implement showTableCreationCommand in nereids #…
Browse files Browse the repository at this point in the history
  • Loading branch information
rijeshkp committed Dec 5, 2024
1 parent d58a972 commit 1d8471a
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,8 @@ supportedShowStatement
| SHOW WHITELIST #showWhitelist
| SHOW TABLETS BELONG
tabletIds+=INTEGER_VALUE (COMMA tabletIds+=INTEGER_VALUE)* #showTabletsBelong
| SHOW TABLE CREATION ((FROM | IN) database=multipartIdentifier)?
(LIKE STRING_LITERAL)? #showTableCreation
;

supportedLoadStatement
Expand Down Expand Up @@ -355,7 +357,6 @@ unsupportedShowStatement
| SHOW QUERY PROFILE queryIdPath=STRING_LITERAL #showQueryProfile
| SHOW CACHE HOTSPOT tablePath=STRING_LITERAL #showCacheHotSpot
| SHOW SYNC JOB ((FROM | IN) database=multipartIdentifier)? #showSyncJob
| SHOW TABLE CREATION ((FROM | IN) database=multipartIdentifier)? wildWhere? #showTableCreation
| SHOW CATALOG RECYCLE BIN wildWhere? #showCatalogRecycleBin
| SHOW QUERY STATS ((FOR database=identifier)
| (FROM tableName=multipartIdentifier (ALL VERBOSE?)?))? #showQueryStats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@
import org.apache.doris.nereids.DorisParser.ShowSmallFilesContext;
import org.apache.doris.nereids.DorisParser.ShowSqlBlockRuleContext;
import org.apache.doris.nereids.DorisParser.ShowStorageEnginesContext;
import org.apache.doris.nereids.DorisParser.ShowTableCreationContext;
import org.apache.doris.nereids.DorisParser.ShowTableIdContext;
import org.apache.doris.nereids.DorisParser.ShowTabletsBelongContext;
import org.apache.doris.nereids.DorisParser.ShowTrashContext;
Expand Down Expand Up @@ -564,6 +565,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowSmallFilesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowSqlBlockRuleCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowStorageEnginesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableCreationCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableIdCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTabletsBelongCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTrashCommand;
Expand Down Expand Up @@ -1392,7 +1394,7 @@ public BrokerDesc visitWithRemoteStorageSystem(WithRemoteStorageSystemContext ct
@Override
public List<Pair<LogicalPlan, StatementContext>> visitMultiStatements(MultiStatementsContext ctx) {
List<Pair<LogicalPlan, StatementContext>> logicalPlans = Lists.newArrayList();
for (org.apache.doris.nereids.DorisParser.StatementContext statement : ctx.statement()) {
for (DorisParser.StatementContext statement : ctx.statement()) {
StatementContext statementContext = new StatementContext();
ConnectContext connectContext = ConnectContext.get();
if (connectContext != null) {
Expand Down Expand Up @@ -1517,7 +1519,7 @@ public LogicalPlan visitLoad(DorisParser.LoadContext ctx) {
* ******************************************************************************************** */

/**
* process lateral view, add a {@link org.apache.doris.nereids.trees.plans.logical.LogicalGenerate} on plan.
* process lateral view, add a {@link LogicalGenerate} on plan.
*/
protected LogicalPlan withGenerate(LogicalPlan plan, LateralViewContext ctx) {
if (ctx.LATERAL() == null) {
Expand Down Expand Up @@ -4936,4 +4938,15 @@ public LogicalPlan visitShowCollation(ShowCollationContext ctx) {
}
return new ShowCollationCommand(wild);
}

@Override
public LogicalPlan visitShowTableCreation(ShowTableCreationContext ctx) {
String dbName = null;
if (ctx.database != null) {
List<String> nameParts = visitMultipartIdentifier(ctx.database);
dbName = nameParts.get(0); // only one entry possible
}

return new ShowTableCreationCommand(dbName, ctx.STRING_LITERAL().getText());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -244,5 +244,6 @@ public enum PlanType {
REPLAY_COMMAND,
CREATE_ENCRYPTKEY_COMMAND,
CREATE_FILE_COMMAND,
CREATE_ROUTINE_LOAD_COMMAND
CREATE_ROUTINE_LOAD_COMMAND,
SHOW_TABLE_CREATION_COMMAND
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// 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.ScalarType;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.common.util.ListComparator;
import org.apache.doris.common.util.OrderByPair;
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 com.google.common.collect.Lists;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* show table id command
*/
public class ShowTableCreationCommand extends ShowCommand {
private static final ShowResultSetMetaData META_DATA =
ShowResultSetMetaData.builder()
.addColumn(new Column("Database", ScalarType.createVarchar(20)))
.addColumn(new Column("Table", ScalarType.createVarchar(20)))
.addColumn(new Column("Status", ScalarType.createVarchar(10)))
.addColumn(new Column("Create Time", ScalarType.createVarchar(20)))
.addColumn(new Column("Error Msg", ScalarType.createVarchar(100)))
.build();

private String dbName;
private String wild;

/**
* constructor
*/
public ShowTableCreationCommand(String dbName, String wild) {
super(PlanType.SHOW_TABLE_CREATION_COMMAND);
this.dbName = dbName;
this.wild = wild;
}

/**
* get meta for show tableId
*/
public ShowResultSetMetaData getMetaData() {
return META_DATA;
}

@Override
public ShowResultSet doRun(ConnectContext ctx, StmtExecutor executor) throws Exception {
if (Strings.isNullOrEmpty(dbName)) {
dbName = ConnectContext.get().getDatabase();
if (Strings.isNullOrEmpty(dbName)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DB_ERROR);
}
}

/* Need to implement fetching records from iceberg table */
List<List<Comparable>> rowSet = Lists.newArrayList();
// sort function rows by fourth column (Create Time) asc
ListComparator<List<Comparable>> comparator = null;
OrderByPair orderByPair = new OrderByPair(3, false);
comparator = new ListComparator<>(orderByPair);
Collections.sort(rowSet, comparator);
List<List<String>> resultRowSet = Lists.newArrayList();

Set<String> keyNameSet = new HashSet<>();
for (List<Comparable> row : rowSet) {
List<String> resultRow = Lists.newArrayList();
for (Comparable column : row) {
resultRow.add(column.toString());
}
resultRowSet.add(resultRow);
keyNameSet.add(resultRow.get(0));
}

return new ShowResultSet(getMetaData(), resultRowSet);

}

@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitShowTableCreationCommand(this, context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
import org.apache.doris.nereids.trees.plans.commands.ShowSmallFilesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowSqlBlockRuleCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowStorageEnginesCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableCreationCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTableIdCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTabletsBelongCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowTrashCommand;
Expand Down Expand Up @@ -585,4 +586,8 @@ default R visitCreateRoutineLoadCommand(CreateRoutineLoadCommand createRoutineLo
default R visitShowProcessListCommand(ShowProcessListCommand showProcessListCommand, C context) {
return visitCommand(showProcessListCommand, context);
}

default R visitShowTableCreationCommand(ShowTableCreationCommand showTableCreationCommand, C context) {
return visitCommand(showTableCreationCommand, context);
}
}

0 comments on commit 1d8471a

Please sign in to comment.