[ 
https://issues.apache.org/jira/browse/CALCITE-1907?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julian Hyde resolved CALCITE-1907.
----------------------------------
       Resolution: Fixed
    Fix Version/s: 1.14.0

Fixed in  http://git-wip-us.apache.org/repos/asf/calcite/commit/a473eca5.

> Table function with 1 column gives ClassCastException
> -----------------------------------------------------
>
>                 Key: CALCITE-1907
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1907
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>             Fix For: 1.14.0
>
>
> If a table function has 1 column and is used under a Filter or Aggregate, the 
> query gives ClassCastException when executed:
> {noformat}
> java.lang.RuntimeException: exception while executing [select *
> from table("s"."fibonacci"())]
>       at 
> org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1270)
>       at 
> org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1249)
>       at 
> org.apache.calcite.test.TableFunctionTest.testUserDefinedTableFunction6(TableFunctionTest.java:381)
>       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.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.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:242)
>       at 
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
> Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast 
> to java.lang.Long
>       at 
> org.apache.calcite.avatica.util.AbstractCursor$LongAccessor.getLong(AbstractCursor.java:550)
>       at 
> org.apache.calcite.avatica.AvaticaResultSet.getLong(AvaticaResultSet.java:277)
>       at 
> org.apache.calcite.test.TableFunctionTest$1.apply(TableFunctionTest.java:387)
>       at 
> org.apache.calcite.test.TableFunctionTest$1.apply(TableFunctionTest.java:382)
>       at 
> org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:533)
>       at 
> org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1266)
> {noformat}
> The cause is a slight difference what the enumerable to iterable converter 
> requires (arrays if there is more than one column, scalars is there is 1 
> column) and the specification of table functions (always return arrays).
> Up until now we have been masking the problem by applying "slice" to the 
> output of table functions. Which is fine if the output goes straight into the 
> JDBC result set, but not fine if there are other operators, such as Filter or 
> Aggregate, downstream.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to