[jira] [Commented] (DRILL-4906) CASE Expression with constant generates class exception

2016-12-13 Thread Khurram Faraaz (JIRA)

[ 
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

2016-10-05 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-29 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-29 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-28 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-28 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-28 Thread ASF GitHub Bot (JIRA)

[ 
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

2016-09-27 Thread ASF GitHub Bot (JIRA)

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