[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16515173#comment-16515173 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner closed pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java index 94964efd1c..6c151ed7ea 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java @@ -17,22 +17,37 @@ */ package org.apache.drill.exec.planner.logical; - -import org.apache.calcite.plan.Convention; -import org.apache.calcite.plan.ConventionTraitDef; +import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; +import org.apache.calcite.plan.RelOptUtil; +import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.Project; -import org.apache.calcite.rel.rules.ProjectMergeRule; +import org.apache.calcite.rel.logical.LogicalProject; +import org.apache.calcite.rex.RexUtil; +import org.apache.calcite.sql.SqlKind; +import org.apache.calcite.tools.RelBuilder; +import org.apache.calcite.util.Permutation; import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry; import org.apache.calcite.rel.core.RelFactories.ProjectFactory; import org.apache.calcite.rex.RexCall; import org.apache.calcite.rex.RexNode; import org.apache.drill.exec.planner.DrillRelBuilder; -public class DrillMergeProjectRule extends ProjectMergeRule { +import java.util.ArrayList; +import java.util.List; + +/** + * Rule for merging two projects provided the projects aren't projecting identical sets of + * input references. + * + * NOTE: This rules does not extend the Calcite ProjectMergeRule + * because of CALCITE-2223. Once, fixed this rule be changed accordingly. Please see DRILL-6501. + */ +public class DrillMergeProjectRule extends RelOptRule { private FunctionImplementationRegistry functionRegistry; private static DrillMergeProjectRule INSTANCE = null; + private final boolean force; public static DrillMergeProjectRule getInstance(boolean force, ProjectFactory pFactory, FunctionImplementationRegistry functionRegistry) { @@ -44,7 +59,12 @@ public static DrillMergeProjectRule getInstance(boolean force, ProjectFactory pF private DrillMergeProjectRule(boolean force, ProjectFactory pFactory, FunctionImplementationRegistry functionRegistry) { -super(force, DrillRelBuilder.proto(pFactory)); + +super(operand(LogicalProject.class, +operand(LogicalProject.class, any())), +DrillRelBuilder.proto(pFactory), +"DrillMergeProjectRule" + (force ? ":force_mode" : "")); +this.force = force; this.functionRegistry = functionRegistry; } @@ -53,12 +73,6 @@ public boolean matches(RelOptRuleCall call) { Project topProject = call.rel(0); Project bottomProject = call.rel(1); -// Make sure both projects be LogicalProject. -if (topProject.getTraitSet().getTrait(ConventionTraitDef.INSTANCE) != Convention.NONE || -bottomProject.getTraitSet().getTrait(ConventionTraitDef.INSTANCE) != Convention.NONE) { - return false; -} - // We have a complex output type do not fire the merge project rule if (checkComplexOutput(topProject) || checkComplexOutput(bottomProject)) { return false; @@ -77,4 +91,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); +final Project bottomProject = call.rel(1); +final RelBuilder relBuilder = call.builder(); + +// If one or both projects are permutations, short-circuit the complex logic +// of building a RexProgram. +final Permutation topPermutation = topProject.getPermutation(); +if (topPermutation != null) { + if (topPermutation.isIdentity()) { +// Let ProjectRemoveRule handle this. +return; + } + final Permutation bottomPermutation = bottomProject.getPermutation(); + if (bottomPermutation != null) { +if (bottomPermutation.isIdentity()) { + // Let ProjectRemoveRule handle this. + return; +} +final Permutation product = topPermutation.product(bottomPermutation); +relBuilder.push(bottomProject.getInput()); +
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514625#comment-16514625 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397779157 @gparai Thanks for making changes LGTM +1. @vrozov Please let us know if things look good to you. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514588#comment-16514588 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397772969 @ilooner / @vrozov I have addressed the review comments. Please take a look. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514587#comment-16514587 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195887775 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast + +import org.apache.drill.categories.PlannerTest; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(PlannerTest.class) +public class TestProjectWithFunctions extends PlanTestBase { + + @Test + public void testCastFunctions() throws Exception { +test("use dfs.tmp"); Review comment: Test is changed so not required. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514585#comment-16514585 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195887742 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast Review comment: Done This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514586#comment-16514586 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195887748 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: Done This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16514325#comment-16514325 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195854242 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: @ilooner thanks for the comment. I have create DRILL-6501 for the same. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16513277#comment-16513277 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195624878 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: @gparai I'm okay with the temporary fix since it has been battle tested with users, but could you create a Jira to for undoing the changes once the fix in Calcite is made. Also please include some details in the jira about what would need to be done, and add a note in the javadoc of DrillMergeProjectRule pointing to CALCITE-2223 and the Drill Jira. I'm guessing that we would be able to extend from ProjectMergeRule again when the fix for CALCITE-2223 is available? While it's good to have this fixed in Drill in the short term, in the long term it is not sustainable to accumulate custom fixes for Calcite in Drill. Looking at CALCITE-2223 they haven't settled on a solution yet, and there hasn't been any activity there for two months. I think you should propose this solution for CALCITE-2223 and open a PR against Calcite as well. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512873#comment-16512873 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195532561 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: Please see https://issues.apache.org/jira/browse/CALCITE-2223. This fix is meant to be in temporarily until the right fix is agreed upon and implemented in Calcite. Please let me know if you have concerns about the fix - I will make the rest of the changes if we first agree to do the temporary fix in Drill. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512867#comment-16512867 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195532561 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: Please see https://issues.apache.org/jira/browse/CALCITE-2223. This fix is meant to be in temporarily until the right fix is agreed upon and implemented in Calcite. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512785#comment-16512785 ] ASF GitHub Bot commented on DRILL-6212: --- vrozov commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195506376 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast + +import org.apache.drill.categories.PlannerTest; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(PlannerTest.class) +public class TestProjectWithFunctions extends PlanTestBase { + + @Test + public void testCastFunctions() throws Exception { +test("use dfs.tmp"); Review comment: minor suggestion - use `@Before` and `@After` to create and drop views. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512003#comment-16512003 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195298678 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast Review comment: Please add as javadoc above TestProjectWithFunctions ``` /** */ @Category(PlannerTest.class) public class TestProjectWithFunctions extends PlanTestBase { ``` This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512001#comment-16512001 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195298678 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast Review comment: Please add as javadoc above TestProjectWithFunctions ``` @Category(PlannerTest.class) public class TestProjectWithFunctions extends PlanTestBase { ``` This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512000#comment-16512000 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195298995 ## File path: exec/java-exec/src/test/java/org/apache/drill/TestProjectWithFunctions.java ## @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +// Test the optimizer plan in terms of projecting different functions e.g. cast + +import org.apache.drill.categories.PlannerTest; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(PlannerTest.class) +public class TestProjectWithFunctions extends PlanTestBase { Review comment: Since this isn't using any of the planning test functions please extend ClusterTest instead and use the ClientFixture to run the queries. We are trying to move all the integration tests to using ClusterFixture and ClientFixture instead of the now deprecated BaseTestQuery and its child classes. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16512002#comment-16512002 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195306589 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +84,79 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); Review comment: I'm still a little concerned about this change because lines 90 - 115 are copied from ProjectMergeRule, lines 119 - 124 are new, and lines 126 - 142 are logically equivalent except for the added call to simplifyCast. Considering the similarity of the code and the fact that ProjectMergeRule should do this logic correctly, I have a few questions. Is this a bug in Calcite ProjectMergeRule or in Drill? If it is a bug in Calcite, shouldn't we be contributing the fix there? If it is a Drill specific bug why is the ProjectMergeRule provided by Calcite not sufficient and why does it cause issues for us when a cast is used? This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511945#comment-16511945 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397157684 @ilooner / @vrozov I have addressed your review comments. Please take a look. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511865#comment-16511865 ] ASF GitHub Bot commented on DRILL-6212: --- vrozov commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195277468 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +85,100 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); +final Project bottomProject = call.rel(1); +final RelBuilder relBuilder = call.builder(); + +// If one or both projects are permutations, short-circuit the complex logic +// of building a RexProgram. +final Permutation topPermutation = topProject.getPermutation(); +if (topPermutation != null) { + if (topPermutation.isIdentity()) { +// Let ProjectRemoveRule handle this. +return; + } + final Permutation bottomPermutation = bottomProject.getPermutation(); + if (bottomPermutation != null) { +if (bottomPermutation.isIdentity()) { + // Let ProjectRemoveRule handle this. + return; +} +final Permutation product = topPermutation.product(bottomPermutation); +relBuilder.push(bottomProject.getInput()); +relBuilder.project(relBuilder.fields(product), +topProject.getRowType().getFieldNames()); +call.transformTo(relBuilder.build()); +return; + } +} + +// If we're not in force mode and the two projects reference identical +// inputs, then return and let ProjectRemoveRule replace the projects. +if (!force) { + if (RexUtil.isIdentity(topProject.getProjects(), + topProject.getInput().getRowType())) { +return; + } +} + +final List pushedProjects = +RelOptUtil.pushPastProject(topProject.getProjects(), bottomProject); +final List newProjects = simplifyCast(pushedProjects); +final RelNode input = bottomProject.getInput(); +if (RexUtil.isIdentity(newProjects, input.getRowType())) { + if (force + || input.getRowType().getFieldNames() + .equals(topProject.getRowType().getFieldNames())) { +call.transformTo(input); +return; + } +} + +// replace the two projects with a combined projection +relBuilder.push(bottomProject.getInput()); +relBuilder.project(newProjects, topProject.getRowType().getFieldNames()); +call.transformTo(relBuilder.build()); + } + + public static List simplifyCast(List projectExprs) { +final List list = new ArrayList<>(); +for (RexNode rex: projectExprs) { + if (rex.getKind() == SqlKind.CAST) { +RexNode operand = ((RexCall) rex).getOperands().get(0); +while (operand.getKind() == SqlKind.CAST +&& operand.getType().equals(rex.getType())) { + rex = operand; + operand = ((RexCall) rex).getOperands().get(0); +} + + } + list.add(rex); +} +return list; + } + + public static Project replace(Project topProject, Project bottomProject) { Review comment: Where is this method used? This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511944#comment-16511944 ] ASF GitHub Bot commented on DRILL-6212: --- gparai commented on a change in pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#discussion_r195293116 ## File path: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeProjectRule.java ## @@ -77,4 +85,100 @@ private boolean checkComplexOutput(Project project) { } return false; } + + @Override + public void onMatch(RelOptRuleCall call) { +final Project topProject = call.rel(0); +final Project bottomProject = call.rel(1); +final RelBuilder relBuilder = call.builder(); + +// If one or both projects are permutations, short-circuit the complex logic +// of building a RexProgram. +final Permutation topPermutation = topProject.getPermutation(); +if (topPermutation != null) { + if (topPermutation.isIdentity()) { +// Let ProjectRemoveRule handle this. +return; + } + final Permutation bottomPermutation = bottomProject.getPermutation(); + if (bottomPermutation != null) { +if (bottomPermutation.isIdentity()) { + // Let ProjectRemoveRule handle this. + return; +} +final Permutation product = topPermutation.product(bottomPermutation); +relBuilder.push(bottomProject.getInput()); +relBuilder.project(relBuilder.fields(product), +topProject.getRowType().getFieldNames()); +call.transformTo(relBuilder.build()); +return; + } +} + +// If we're not in force mode and the two projects reference identical +// inputs, then return and let ProjectRemoveRule replace the projects. +if (!force) { + if (RexUtil.isIdentity(topProject.getProjects(), + topProject.getInput().getRowType())) { +return; + } +} + +final List pushedProjects = +RelOptUtil.pushPastProject(topProject.getProjects(), bottomProject); +final List newProjects = simplifyCast(pushedProjects); +final RelNode input = bottomProject.getInput(); +if (RexUtil.isIdentity(newProjects, input.getRowType())) { + if (force + || input.getRowType().getFieldNames() + .equals(topProject.getRowType().getFieldNames())) { +call.transformTo(input); +return; + } +} + +// replace the two projects with a combined projection +relBuilder.push(bottomProject.getInput()); +relBuilder.project(newProjects, topProject.getRowType().getFieldNames()); +call.transformTo(relBuilder.build()); + } + + public static List simplifyCast(List projectExprs) { +final List list = new ArrayList<>(); +for (RexNode rex: projectExprs) { + if (rex.getKind() == SqlKind.CAST) { +RexNode operand = ((RexCall) rex).getOperands().get(0); +while (operand.getKind() == SqlKind.CAST +&& operand.getType().equals(rex.getType())) { + rex = operand; + operand = ((RexCall) rex).getOperands().get(0); +} + + } + list.add(rex); +} +return list; + } + + public static Project replace(Project topProject, Project bottomProject) { Review comment: It is unnecessary. Removed it. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511863#comment-16511863 ] ASF GitHub Bot commented on DRILL-6212: --- vrozov commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397132934 @ilooner There is a call to `simplifyCast()` in the replaced implementation of `ProjectMergeRule.onMatch()`. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511774#comment-16511774 ] ASF GitHub Bot commented on DRILL-6212: --- ilooner commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397117397 @gparai It looks like this change copies the contents of ProjectMergeRule.onMatch into DrillMergeProjectRule. Can we avoid doing that? Also can you add a test that reproduces the original issue that you were seeing. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511481#comment-16511481 ] ASF GitHub Bot commented on DRILL-6212: --- HanumathRao commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397028569 @gparai Code changes look good to me. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511393#comment-16511393 ] ASF GitHub Bot commented on DRILL-6212: --- vrozov commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-397002788 I am not familiar with the functionality to review functional changes, java code LGTM. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16511377#comment-16511377 ] ASF GitHub Bot commented on DRILL-6212: --- priteshm commented on issue #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319#issuecomment-396997663 Since @HanumathRao opened the bug, maybe he can also review it? This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16510463#comment-16510463 ] ASF GitHub Bot commented on DRILL-6212: --- gparai opened a new pull request #1319: DRILL-6212: Prevent recursive cast expressions URL: https://github.com/apache/drill/pull/1319 @vrozov / @amansinha100 please review the PR. Thanks! This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16510147#comment-16510147 ] Gautam Kumar Parai commented on DRILL-6212: --- [~cshi] I am reassigning this Jira to push it over the finish line. > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Gautam Kumar Parai >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16509017#comment-16509017 ] Gautam Kumar Parai commented on DRILL-6212: --- I see that CALCITE-2223 is still open. We should go ahead and fix the issue on DRILL and open another DRILL Jira to revert/modify this fix onceCALCITE changes are complete. [~vvysotskyi] [~vrozov] [~amansinha100] what do you think? > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16505623#comment-16505623 ] Chunhui Shi commented on DRILL-6212: The fix we have in MapR Drill is on DrillProjectMergeRule, it could be applied in CALCITE-2223 on ProjectMergeRule. > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16504458#comment-16504458 ] Volodymyr Vysotskyi commented on DRILL-6212: [~cshi], I think the more proper fix should be done in Calcite (CALCITE-2223). Please let me know if you have some suggestions for fixing this problem in Calcite. > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16504329#comment-16504329 ] Chunhui Shi commented on DRILL-6212: Just get back from trips etc. I can cross port the fix I have in mapr drill to here in these two days. [~vvysotskyi], you could ping me directly via shi.chunhui at aliyun.com. > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16494535#comment-16494535 ] Pritesh Maker commented on DRILL-6212: -- [~cshi] not sure if you are actively working on this. If not I suggest we reassign this one - [~vvysotskyi] can you pick this up? Also, I am assuming the fix is required in Calcite (CALCITE-2223) ... is that correct? > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16462118#comment-16462118 ] Chunhui Shi commented on DRILL-6212: The fix is not a PR to Apache Drill yet. I will wrap up a PR in these two days. [~priteshm] > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16461897#comment-16461897 ] Pritesh Maker commented on DRILL-6212: -- [~hanu.ncr], [~cshi] is there is a PR for the fix being referenced here? > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Chunhui Shi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-6212) A simple join is recursing too deep in planning and eventually throwing stack overflow.
[ https://issues.apache.org/jira/browse/DRILL-6212?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16411429#comment-16411429 ] Hanumath Rao Maduri commented on DRILL-6212: [~vvysotskyi] This case should be handled by the chunhui's fix to the similar JIRA. > A simple join is recursing too deep in planning and eventually throwing stack > overflow. > --- > > Key: DRILL-6212 > URL: https://issues.apache.org/jira/browse/DRILL-6212 > Project: Apache Drill > Issue Type: Bug > Components: Query Planning Optimization >Affects Versions: 1.12.0 >Reporter: Hanumath Rao Maduri >Assignee: Volodymyr Vysotskyi >Priority: Critical > Fix For: 1.14.0 > > > Create two views using following statements. > {code} > create view v1 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > create view v2 as select cast(greeting as int) f from > dfs.`/home/mapr/data/json/temp.json`; > {code} > Executing the following join query produces a stack overflow during the > planning phase. > {code} > select t1.f from dfs.tmp.v1 as t inner join dfs.tmp.v2 as t1 on cast(t.f as > int) = cast(t1.f as int) and cast(t.f as int) = 10 and cast(t1.f as int) = 10; > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)