[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15747090#comment-15747090 ] Khurram Faraaz commented on DRILL-4906: --- Verified. Tests are added here https://github.com/mapr/drill-test-framework/tree/master/framework/resources/Functional/case_expr > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15550503#comment-15550503 ] ASF GitHub Bot commented on DRILL-4906: --- Github user asfgit closed the pull request at: https://github.com/apache/drill/pull/598 > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Aman Sinha > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15533188#comment-15533188 ] ASF GitHub Bot commented on DRILL-4906: --- Github user amansinha100 commented on a diff in the pull request: https://github.com/apache/drill/pull/598#discussion_r81173247 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java --- @@ -143,116 +156,176 @@ public void reduce(RexBuilder rexBuilder, List constExps, List continue; } -switch(materializedExpr.getMajorType().getMinorType()) { - case INT: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((IntHolder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.INTEGER, newCall.getType().isNullable()), -false)); -break; - case BIGINT: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((BigIntHolder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.BIGINT, newCall.getType().isNullable()), -false)); -break; - case FLOAT4: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((Float4Holder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.FLOAT, newCall.getType().isNullable()), -false)); -break; - case FLOAT8: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((Float8Holder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.DOUBLE, newCall.getType().isNullable()), -false)); -break; - case VARCHAR: -reducedValues.add(rexBuilder.makeCharLiteral( -new NlsString(StringFunctionHelpers.getStringFromVarCharHolder((VarCharHolder)output), null, null))); -break; - case BIT: -reducedValues.add(rexBuilder.makeLiteral( -((BitHolder)output).value == 1 ? true : false, - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.BOOLEAN, newCall.getType().isNullable()), -false)); -break; - case DATE: -reducedValues.add(rexBuilder.makeLiteral( -new DateTime(((DateHolder) output).value, DateTimeZone.UTC).toCalendar(null), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.DATE, newCall.getType().isNullable()), -false)); -break; - case DECIMAL9: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(BigInteger.valueOf(((Decimal9Holder) output).value), ((Decimal9Holder)output).scale), + Function literator = new Function() { --- End diff -- Sounds good. > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15532526#comment-15532526 ] ASF GitHub Bot commented on DRILL-4906: --- Github user Serhii-Harnyk commented on a diff in the pull request: https://github.com/apache/drill/pull/598#discussion_r81115837 --- Diff: exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java --- @@ -0,0 +1,107 @@ +/* +* 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.exec.planner.logical; + +import org.apache.drill.BaseTestQuery; +import org.junit.Test; + +/** + * DRILL-4906 + * Tests for handling nullable types in CASE function + */ +public class TestCaseNullableTypes extends BaseTestQuery { + + @Test + public void testCaseNullableTypesInt() throws Exception { +testBuilder() +.sqlQuery("select (case when (false) then null else 1 end) res1 from (values(1))") +.unOrdered() +.baselineColumns("res1") +.baselineValues(1) +.go(); + } + + @Test + public void testCaseNullableTypesVarchar() throws Exception { --- End diff -- Done > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530578#comment-15530578 ] ASF GitHub Bot commented on DRILL-4906: --- Github user amansinha100 commented on a diff in the pull request: https://github.com/apache/drill/pull/598#discussion_r80995340 --- Diff: exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java --- @@ -0,0 +1,107 @@ +/* +* 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.exec.planner.logical; + +import org.apache.drill.BaseTestQuery; +import org.junit.Test; + +/** + * DRILL-4906 + * Tests for handling nullable types in CASE function + */ +public class TestCaseNullableTypes extends BaseTestQuery { + + @Test + public void testCaseNullableTypesInt() throws Exception { +testBuilder() +.sqlQuery("select (case when (false) then null else 1 end) res1 from (values(1))") +.unOrdered() +.baselineColumns("res1") +.baselineValues(1) +.go(); + } + + @Test + public void testCaseNullableTypesVarchar() throws Exception { --- End diff -- Its good that you have added tests for different data types. One suggestion: could you add a test where the constant reduction rule has to do 2 or more iterations .. i.e for 2 or more different data types ? > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530577#comment-15530577 ] ASF GitHub Bot commented on DRILL-4906: --- Github user amansinha100 commented on a diff in the pull request: https://github.com/apache/drill/pull/598#discussion_r80994695 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java --- @@ -143,116 +156,176 @@ public void reduce(RexBuilder rexBuilder, List constExps, List continue; } -switch(materializedExpr.getMajorType().getMinorType()) { - case INT: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((IntHolder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.INTEGER, newCall.getType().isNullable()), -false)); -break; - case BIGINT: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((BigIntHolder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.BIGINT, newCall.getType().isNullable()), -false)); -break; - case FLOAT4: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((Float4Holder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.FLOAT, newCall.getType().isNullable()), -false)); -break; - case FLOAT8: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(((Float8Holder)output).value), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.DOUBLE, newCall.getType().isNullable()), -false)); -break; - case VARCHAR: -reducedValues.add(rexBuilder.makeCharLiteral( -new NlsString(StringFunctionHelpers.getStringFromVarCharHolder((VarCharHolder)output), null, null))); -break; - case BIT: -reducedValues.add(rexBuilder.makeLiteral( -((BitHolder)output).value == 1 ? true : false, - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.BOOLEAN, newCall.getType().isNullable()), -false)); -break; - case DATE: -reducedValues.add(rexBuilder.makeLiteral( -new DateTime(((DateHolder) output).value, DateTimeZone.UTC).toCalendar(null), - TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.DATE, newCall.getType().isNullable()), -false)); -break; - case DECIMAL9: -reducedValues.add(rexBuilder.makeLiteral( -new BigDecimal(BigInteger.valueOf(((Decimal9Holder) output).value), ((Decimal9Holder)output).scale), + Function literator = new Function() { --- End diff -- Interesting that you are using a Function interface here within the original function. Is this helping much ? It is not eliminating the need for the large switch statement. I would think a valid use case for Function interface would be when you are passing a function pointer (borrowing a term from c++) to another function and that function calls apply(). We can keep this as-is but I am curious about the rationale. > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530057#comment-15530057 ] ASF GitHub Bot commented on DRILL-4906: --- Github user zfong commented on the issue: https://github.com/apache/drill/pull/598 @amansinha100 - can you review this pull request. > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception
[ https://issues.apache.org/jira/browse/DRILL-4906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15526343#comment-15526343 ] ASF GitHub Bot commented on DRILL-4906: --- GitHub user Serhii-Harnyk opened a pull request: https://github.com/apache/drill/pull/598 DRILL-4906 CASE Expression with constant generates class exception You can merge this pull request into a Git repository by running: $ git pull https://github.com/Serhii-Harnyk/drill DRILL-4906 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/drill/pull/598.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #598 commit 46f0df7cf89fff8e7d8cf9a21a810e1b4e292bce Author: Serhii-Harnyk Date: 2016-09-22T12:06:10Z DRILL-4906 CASE Expression with constant generates class exception > CASE Expression with constant generates class exception > --- > > Key: DRILL-4906 > URL: https://issues.apache.org/jira/browse/DRILL-4906 > Project: Apache Drill > Issue Type: Bug > Components: SQL Parser >Affects Versions: 1.6.0, 1.8.0 >Reporter: Serhii Harnyk >Assignee: Serhii Harnyk > Fix For: 1.9.0 > > > How to reproduce: > select (case when (true) then 1 end) from (values(1)); > Error > Error: SYSTEM ERROR: ClassCastException: > org.apache.drill.exec.expr.holders.NullableVarCharHolder cannot be cast to > org.apache.drill.exec.expr.holders.VarCharHolder -- This message was sent by Atlassian JIRA (v6.3.4#6332)