Steven Talbot created CALCITE-5254: -------------------------------------- Summary: Infinite Loop in SubstituionVisitor.go Key: CALCITE-5254 URL: https://issues.apache.org/jira/browse/CALCITE-5254 Project: Calcite Issue Type: Bug Reporter: Steven Talbot
Happens when you have a materialization "target" of an Aggregate/Scan attempting to substitute for an a "query" with a matching Scan. The following test should repro (in CustomMaterializedViewRecognitionRuleTest) {code:java} @Test void testNoInifiniteLoopOnAggregateScanMaterialization() { final SchemaPlus rootSchema = Frameworks.createRootSchema(true); rootSchema.add("mv1", new AbstractTable() { @Override public RelDataType getRowType(RelDataTypeFactory typeFactory) { return typeFactory.builder() .add("count", SqlTypeName.INTEGER) .build(); } }); final Frameworks.ConfigBuilder config = Frameworks.newConfigBuilder() .parserConfig(SqlParser.Config.DEFAULT) .defaultSchema( CalciteAssert.addSchema(rootSchema, CalciteAssert.SchemaSpec.SCOTT_WITH_TEMPORAL)) .traitDefs((List<RelTraitDef>) null); final RelBuilder relBuilder = RelBuilder.create(config.build()); final RelNode query = relBuilder.scan("EMP") .project(relBuilder.field("DEPTNO")) .aggregate( relBuilder.groupKey(0), relBuilder.aggregateCall(SqlStdOperatorTable.COUNT) ) .build(); final RelNode target = relBuilder.scan("EMP") .aggregate(relBuilder.groupKey(), relBuilder.aggregateCall(SqlStdOperatorTable.COUNT)) .build(); final RelNode replacement = relBuilder.scan("mv1").build(); final RelOptMaterialization relOptMaterialization = new RelOptMaterialization(replacement, target, null, Lists.newArrayList("mv1")); final List<Pair<RelNode, List<RelOptMaterialization>>> relOptimized = RelOptMaterializations.useMaterializedViews(query, ImmutableList.of(relOptMaterialization), SubstitutionVisitor.DEFAULT_RULES); System.out.println("never ger here!"); } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)