[
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)