[feature](mtmv)add more test case1 (#28910)

This commit is contained in:
zhangdong
2023-12-23 14:39:44 +08:00
committed by GitHub
parent 623257d02b
commit 0a1d9f4cbc
5 changed files with 313 additions and 29 deletions

View File

@ -38,6 +38,8 @@ import org.apache.doris.nereids.trees.plans.visitor.TableCollector;
import org.apache.doris.nereids.trees.plans.visitor.TableCollector.TableCollectorContext;
import org.apache.doris.qe.ConnectContext;
import com.google.common.collect.Sets;
import java.util.List;
import java.util.Set;
@ -77,12 +79,7 @@ public class MTMVPlanUtil {
}
private static Set<BaseTableInfo> getBaseViews(Plan plan) {
TableCollectorContext collectorContext =
new TableCollector.TableCollectorContext(
com.google.common.collect.Sets.newHashSet(TableType.VIEW));
plan.accept(TableCollector.INSTANCE, collectorContext);
List<TableIf> collectedTables = collectorContext.getCollectedTables();
return transferTableIfToInfo(collectedTables);
return Sets.newHashSet();
}
private static Set<BaseTableInfo> transferTableIfToInfo(List<TableIf> tables) {

View File

@ -30,6 +30,7 @@ import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.PartitionType;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.catalog.TableIf.TableType;
import org.apache.doris.catalog.View;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.FeNameFormat;
@ -56,6 +57,7 @@ import org.apache.doris.nereids.trees.plans.algebra.OneRowRelation;
import org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.logical.LogicalSink;
import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias;
import org.apache.doris.nereids.trees.plans.visitor.NondeterministicFunctionCollector;
import org.apache.doris.nereids.trees.plans.visitor.TableCollector;
import org.apache.doris.nereids.trees.plans.visitor.TableCollector.TableCollectorContext;
@ -66,6 +68,8 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.List;
@ -80,6 +84,8 @@ import java.util.stream.Collectors;
* MTMV info in creating MTMV.
*/
public class CreateMTMVInfo {
public static final Logger LOG = LogManager.getLogger(CreateMTMVInfo.class);
private final boolean ifNotExists;
private final TableNameInfo mvName;
private List<String> keys;
@ -208,7 +214,7 @@ public class CreateMTMVInfo {
throw new AnalysisException("at least contain one table");
}
// can not contain VIEW or MTMV
analyzeBaseTables(plan);
analyzeBaseTables(planner.getAnalyzedPlan());
// can not contain Random function
analyzeExpressions(planner.getAnalyzedPlan());
// can not contain partition or tablets
@ -282,11 +288,28 @@ public class CreateMTMVInfo {
private void analyzeBaseTables(Plan plan) {
TableCollectorContext collectorContext =
new TableCollector.TableCollectorContext(Sets.newHashSet(TableType.MATERIALIZED_VIEW, TableType.VIEW));
new TableCollector.TableCollectorContext(Sets.newHashSet(TableType.MATERIALIZED_VIEW));
plan.accept(TableCollector.INSTANCE, collectorContext);
List<TableIf> collectedTables = collectorContext.getCollectedTables();
if (!CollectionUtils.isEmpty(collectedTables)) {
throw new AnalysisException("can not contain MATERIALIZED_VIEW or VIEW");
throw new AnalysisException("can not contain MATERIALIZED_VIEW");
}
List<Object> subQuerys = plan.collectToList(node -> node instanceof LogicalSubQueryAlias);
for (Object subquery : subQuerys) {
List<String> qualifier = ((LogicalSubQueryAlias) subquery).getQualifier();
if (!CollectionUtils.isEmpty(qualifier) && qualifier.size() == 3) {
try {
TableIf table = Env.getCurrentEnv().getCatalogMgr()
.getCatalogOrAnalysisException(qualifier.get(0))
.getDbOrAnalysisException(qualifier.get(1)).getTableOrAnalysisException(qualifier.get(2));
if (table instanceof View) {
throw new AnalysisException("can not contain VIEW");
}
} catch (org.apache.doris.common.AnalysisException e) {
LOG.warn("can not get table, ", e);
}
}
}
}

View File

@ -183,6 +183,10 @@ public class LogicalSubQueryAlias<CHILD_TYPE extends Plan> extends LogicalUnary<
return relationId;
}
public List<String> getQualifier() {
return qualifier;
}
@Override
public Set<RelationId> getInputRelations() {
Set<RelationId> relationIdSet = Sets.newHashSet();