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

James Starr edited comment on CALCITE-4668 at 6/29/21, 12:06 AM:
-----------------------------------------------------------------

[~julianhyde]

What if we add another thread local to prepare, then do something like this in 
{code:java}
...
class QuidemTest {
  ...
  protected void checkRun(String path) throws Exception {
      ...
            switch (propertyName) {
            case "bindable": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Hook.ENABLE_BINDABLE.addThread(Hook.propertyJ(b)));
            }
            case "expand": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Prepare.THREAD_EXPAND.push(b));
            }
            case "decorrelate": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Prepare.THREAD_SUPPRESS_DECORRELATION.push(b));
            }}
          })
{code}


was (Author: jamesstarr):
[~julianhyde]

What if we add another thread local to prepare, then do something like this in 
{code:java}
...
class QuidemTest {
  ...
  protected void checkRun(String path) throws Exception {
      ...
            switch (propertyName) {
            case "bindable": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Hook.ENABLE_BINDABLE.addThread(Hook.propertyJ(b)));
            }
            case "expand": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Prepare.THREAD_EXPAND.push(b));
            }
            case "decorrelate": {
              final boolean b = value instanceof Boolean
                  && (Boolean) value;
              closer.add(Prepare.THREAD_EXPAND.push(b));
            }}
          })
{code}

> RelBuilder.join should only emit a correlate when a correlate variable is used
> ------------------------------------------------------------------------------
>
>                 Key: CALCITE-4668
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4668
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: James Starr
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> We generate correlated join when no correlate variable is present on the 
> right side.  However, this could be simplified to emit a normal join.
> Given:
> {code:java}
> final RelNode rel = builder
>     .scan("EMP")
>     .variable(v)
>     .scan("DEPT")
>     .join(JoinRelType.LEFT,
>         builder.equals(builder.field(2, 0, "SAL"),
>             builder.literal(1000)),
>         ImmutableSet.of(v.get().id))
>     .build();
> {code}
> Currently the following is emitted:
> {code}
> LogicalFilter(condition=[=($7, $8)])
>   LogicalCorrelate(correlation=[$cor0], joinType=[left], 
> requiredColumns=[{0}])
>     LogicalTableScan(table=[[scott, EMP]])
>     LogicalFilter(condition=[=($cor0.DEPTNO, $0)])
>       LogicalTableScan(table=[[scott, DEPT]])
> {code}
> After the changes the following will be emitted:
> {code}
> LogicalJoin(condition=[=($7, $8)], joinType=[left])
>   LogicalTableScan(table=[[scott, EMP]])
>   LogicalTableScan(table=[[scott, DEPT]])
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to