[
https://issues.apache.org/jira/browse/CALCITE-3018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
fangyc updated CALCITE-3018:
----------------------------
Description:
I've defined a user defined function that returns a date or timestamp and
register it on root schema :
{code:java}
public static java.sql.Date test(long value) {
return new java.sql.Date(value);
}{code}
{code:java}
rootSchema.add("my_test", ScalarFunctionImpl.create(CalciteTest.class,
"test")); {code}
If I use this function in the select part of a query as the only column, the
result works fine:
{code:java}
select my_test(1) from northwind.product{code}
However, if I add an additional column in the select part, the error occurs:
{code:java}
select my_test(1), 2 from northwind.product{code}
Error message:
{code:java}
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){code}
I tried with calcite.debug=true, and the difference seems as follows:
* 1 column
{code:java}
/* 51 */ public Object current() {
/* 52 */ return
org.apache.calcite.runtime.SqlFunctions.toIntOptional(CalciteTest.test(1));
/* 53 */ }{code}
* 2 columns
{code:java}
/* 51 */ public Object current() {
/* 52 */ return new Object[] {
/* 53 */ CalciteTest.test(1),
/* 54 */ 2};
/* 55 */ }{code}
was:
I've defined a user defined function that returns a date or timestamp and
register it on root schema :
{quote} public static java.sql.Date test(long value) {
return new java.sql.Date(value);
}
{quote}
{quote}rootSchema.add("my_test", ScalarFunctionImpl.create(CalciteTest.class,
"test"));
{quote}
If I use this function in the select part of a query as the only column, the
result works fine:
{quote}select my_test(1) from northwind.product
{quote}
However, if I add an additional column in the select part, the error occurs:
{quote}select my_test(1), 2 from northwind.product
{quote}
Error message:
{quote} 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)
{quote}
I tried with calcite.debug=true, and the difference seems as follows:
* 1 column
{quote}/* 51 */ public Object current() {
/* 52 */ return
org.apache.calcite.runtime.SqlFunctions.toIntOptional(CalciteTest.test(1));
/* 53 */ }
{quote} * 2 columns
{quote}/* 51 */ public Object current() {
/* 52 */ return new Object[] {
/* 53 */ CalciteTest.test(1),
/* 54 */ 2};
/* 55 */ }
{quote}
> User defined scalar function which returns a Date/Timestamp value causes
> error.
> -------------------------------------------------------------------------------
>
> Key: CALCITE-3018
> URL: https://issues.apache.org/jira/browse/CALCITE-3018
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.19.0
> Reporter: fangyc
> Priority: Major
>
> I've defined a user defined function that returns a date or timestamp and
> register it on root schema :
> {code:java}
> public static java.sql.Date test(long value) {
> return new java.sql.Date(value);
> }{code}
>
> {code:java}
> rootSchema.add("my_test", ScalarFunctionImpl.create(CalciteTest.class,
> "test")); {code}
>
> If I use this function in the select part of a query as the only column, the
> result works fine:
> {code:java}
> select my_test(1) from northwind.product{code}
> However, if I add an additional column in the select part, the error occurs:
> {code:java}
> select my_test(1), 2 from northwind.product{code}
> Error message:
>
> {code:java}
> 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){code}
>
> I tried with calcite.debug=true, and the difference seems as follows:
> * 1 column
>
> {code:java}
> /* 51 */ public Object current() {
> /* 52 */ return
> org.apache.calcite.runtime.SqlFunctions.toIntOptional(CalciteTest.test(1));
> /* 53 */ }{code}
>
> * 2 columns
> {code:java}
> /* 51 */ public Object current() {
> /* 52 */ return new Object[] {
> /* 53 */ CalciteTest.test(1),
> /* 54 */ 2};
> /* 55 */ }{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)