You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2019/04/13 22:43:20 UTC

[GitHub] [incubator-druid] egor-ryashin opened a new issue #7469: CASE statement fails with a metrics column in a condition: Cannot apply '=' to arguments of type ' = '

egor-ryashin opened a new issue #7469: CASE statement fails with a metrics column in a condition: Cannot apply '=' to arguments of type '<FLOAT> = <BOOLEAN>'
URL: https://github.com/apache/incubator-druid/issues/7469
 
 
   Cannot use a metrics column in a condition:
   ```sql
   select sum(case m1 when m1 = 1 then m1 else 0 end) from foo
   ```
   
   ### Affected Version
   
   0.13.0-incubating
   
   ### Description
   
   Reproduced by running a test in `CalciteQueryTest`:
   ```java
     @Test
     public void testSelectConstantExpressionFromTableMetricsCase() throws Exception
     {
       String sql = "select sum(case m1 when m1 = 1 then m1 else 0 end) from foo";
       queryLogHook.clearRecordedQueries();
       final List<Object[]> plannerResults = getResults(PLANNER_CONFIG_DEFAULT, QUERY_CONTEXT_DEFAULT, sql, CalciteTests.REGULAR_USER_AUTH_RESULT);
       for (Object[] plannerResult : plannerResults) {
         System.out.println(Arrays.asList(plannerResult));
       }
     }
   ```
   ```
   org.apache.calcite.tools.ValidationException: org.apache.calcite.runtime.CalciteContextException: From line 1, column 12 to line 1, column 49: Cannot apply '=' to arguments of type '<FLOAT> = <BOOLEAN>'. Supported form(s): '<COMPARABLE_TYPE> = <COMPARABLE_TYPE>'
   
   	at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:190)
   	at org.apache.druid.sql.calcite.planner.DruidPlanner.plan(DruidPlanner.java:124)
   	at org.apache.druid.sql.calcite.planner.DruidPlanner.plan(DruidPlanner.java:105)
   	at org.apache.druid.sql.calcite.CalciteQueryTest.getResults(CalciteQueryTest.java:7824)
   	at org.apache.druid.sql.calcite.CalciteQueryTest.testSelectConstantExpressionFromTableCase(CalciteQueryTest.java:367)
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
   	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
   	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
   	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
   	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
   	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
   	at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
   	at org.apache.druid.sql.calcite.util.QueryLogHook$1.evaluate(QueryLogHook.java:95)
   	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
   	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
   	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
   	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
   	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
   	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
   	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
   	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
   	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
   	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
   	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
   	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
   	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
   	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
   	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
   	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
   	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
   	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
   Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, column 12 to line 1, column 49: Cannot apply '=' to arguments of type '<FLOAT> = <BOOLEAN>'. Supported form(s): '<COMPARABLE_TYPE> = <COMPARABLE_TYPE>'
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   	at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463)
   	at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:783)
   	at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:768)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4759)
   	at org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:280)
   	at org.apache.calcite.sql.type.ComparableOperandTypeChecker.checkOperandTypes(ComparableOperandTypeChecker.java:66)
   	at org.apache.calcite.sql.SqlOperator.checkOperandTypes(SqlOperator.java:659)
   	at org.apache.calcite.sql.SqlOperator.validateOperands(SqlOperator.java:432)
   	at org.apache.calcite.sql.SqlOperator.deriveType(SqlOperator.java:509)
   	at org.apache.calcite.sql.SqlBinaryOperator.deriveType(SqlBinaryOperator.java:144)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5483)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5470)
   	at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1629)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1614)
   	at org.apache.calcite.sql.fun.SqlCaseOperator.checkOperandTypes(SqlCaseOperator.java:180)
   	at org.apache.calcite.sql.SqlOperator.validateOperands(SqlOperator.java:432)
   	at org.apache.calcite.sql.fun.SqlCaseOperator.deriveType(SqlCaseOperator.java:165)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5483)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:5470)
   	at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1629)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1614)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:1773)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:1804)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:456)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:4023)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3286)
   	at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
   	at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:967)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:943)
   	at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:225)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:918)
   	at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628)
   	at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:188)
   	... 39 more
   Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Cannot apply '=' to arguments of type '<FLOAT> = <BOOLEAN>'. Supported form(s): '<COMPARABLE_TYPE> = <COMPARABLE_TYPE>'
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   	at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463)
   	at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572)
   	... 74 more
   ```
   Could be a blocker for https://github.com/apache/incubator-druid/issues/6687
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org