[ 
https://issues.apache.org/jira/browse/CALCITE-5286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17608956#comment-17608956
 ] 

Jiajun Xie commented on CALCITE-5286:
-------------------------------------

[~kramerul] , I can't reproduce your problem in this unit test.
{code:java}
@Test void testRowCountDynamicParameters() {
  final String sql = "select t.ename, t.deptno, dname " +
      "from ( " +
      " select emp.ename, dept.deptno, dept.name as dname from emp " +
      " left join dept " +
      " on emp.deptno = dept.deptno) t " +
      "where t.deptno = ? " +
      "limit ?";
  sql(sql).withCluster(cluster -> {
        RelOptPlanner planner = new VolcanoPlanner();
        planner.addRule(EnumerableRules.ENUMERABLE_TABLE_SCAN_RULE);
        planner.addRule(EnumerableRules.ENUMERABLE_PROJECT_RULE);
        planner.addRule(EnumerableRules.ENUMERABLE_FILTER_RULE);
        planner.addRule(EnumerableRules.ENUMERABLE_JOIN_RULE);
        planner.addRule(EnumerableRules.ENUMERABLE_LIMIT_SORT_RULE);
        planner.addRelTraitDef(ConventionTraitDef.INSTANCE);
        return RelOptCluster.create(planner, cluster.getRexBuilder());
      })
      .withRelTransform(rel -> {
            RelOptPlanner planner = rel.getCluster().getPlanner();
            planner.setRoot(rel);
            RelTraitSet requiredOutputTraits =
                
rel.getCluster().traitSet().replace(EnumerableConvention.INSTANCE);
            final RelNode rootRel2 = planner.changeTraits(rel, 
requiredOutputTraits);

            planner.setRoot(rootRel2);
            final RelOptPlanner planner2 = planner.chooseDelegate();
            final RelNode rootRel3 = planner2.findBestExp();
            return rootRel3;
          }
      )
      .assertThatRowCount(is(3.045), is(0D), is(Double.POSITIVE_INFINITY));
} {code}
Would you please give me any unit test to reproduce your problem?

> Join with parameterized LIMIT throws AssertionError "not a literal"
> -------------------------------------------------------------------
>
>                 Key: CALCITE-5286
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5286
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Ulrich Kramer
>            Priority: Major
>
> A query like the following one
> {code:java}
> select T."name", T."valueLeverId", T."type", T."ID", T."parentId" 
> from (
>   SELECT VD."id" as ID, VD."name", VD."typeId", VD."type", VD."valueLeverId", 
> VD."valueLever", VD."parentId", VDtoSC."VDtoSC_List"
>       FROM VD 
>       LEFT JOIN VDtoSC 
>       ON VD."id" = VDtoSC."Value_Driver_ID"
> ) AS T
> where T."ID" = ? limit ?
> {code}
> fails with
> {code:java}
> findValue:1208, RexLiteral (org.apache.calcite.rex)
> intValue:1183, RexLiteral (org.apache.calcite.rex)
> getMaxRowCount:207, RelMdMaxRowCount (org.apache.calcite.rel.metadata)
> getMaxRowCount_$:-1, GeneratedMetadata_MaxRowCountHandler 
> (org.apache.calcite.rel.metadata.janino)
> getMaxRowCount:-1, GeneratedMetadata_MaxRowCountHandler 
> (org.apache.calcite.rel.metadata.janino)
> getMaxRowCount:277, RelMetadataQuery (org.apache.calcite.rel.metadata)
> alreadySmaller:914, RelMdUtil (org.apache.calcite.rel.metadata)
> checkInputForCollationAndLimit:887, RelMdUtil 
> (org.apache.calcite.rel.metadata)
> onMatch:138, SortJoinTransposeRule (org.apache.calcite.rel.rules)
> onMatch:223, VolcanoRuleCall (org.apache.calcite.plan.volcano)
> drive:59, IterativeRuleDriver (org.apache.calcite.plan.volcano)
> findBestExp:523, VolcanoPlanner (org.apache.calcite.plan.volcano)
> lambda$standard$3:276, Programs (org.apache.calcite.tools)
> run:-1, Programs$$Lambda$2787/0x000000080121f9c0 (org.apache.calcite.tools)
> run:336, Programs$SequenceProgram (org.apache.calcite.tools)
> transform:373, PlannerImpl (org.apache.calcite.prepare)
> {code}
> The 2 tables are located in a schema where joins can't be pushed down.
> See also CALCITE-5048  --
> CALCITE-2061
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to