[feature](mtmv)add more test case1 (#28910)
This commit is contained in:
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
Reference in New Issue
Block a user