Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
1.19.0
-
None
-
None
Description
I've defined a user defined function that returns a date or timestamp and register it on root schema :
public static java.sql.Date test(long value) { return new java.sql.Date(value); }
rootSchema.add("my_test", ScalarFunctionImpl.create(CalciteTest.class, "test"));
If I use this function in the select part of a query as the only column, the result works fine:
select my_test(1) from northwind.product
However, if I add an additional column in the select part, the error occurs:
select my_test(1), 2 from northwind.product
Error message:
Exception in thread "main" java.lang.ClassCastException: java.sql.Date cannot be cast to java.lang.Number at org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:726) at org.apache.calcite.avatica.util.AbstractCursor$DateFromNumberAccessor.getDate(AbstractCursor.java:915) at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite.java:326) at org.apache.calcite.avatica.AvaticaResultSet.getObject(AvaticaResultSet.java:393)
I tried with calcite.debug=true, and the difference seems as follows:
- 1 column
/* 51 */ public Object current() { /* 52 */ return org.apache.calcite.runtime.SqlFunctions.toIntOptional(CalciteTest.test(1)); /* 53 */ }
- 2 columns
/* 51 */ public Object current() { /* 52 */ return new Object[] { /* 53 */ CalciteTest.test(1), /* 54 */ 2}; /* 55 */ }
Attachments
Issue Links
- duplicates
-
CALCITE-3018 User defined scalar function which returns a Date/Timestamp value causes error.
- Open