[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16952481#comment-16952481 ] Danny Chen commented on CALCITE-1075: - I think it is because internally Calcite use Long to represent the datetime data type values, including DATE and TIMESTAMP. > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Priority: Major > Attachments: 0001-test-cases-for-CALCITE-1075.patch > > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:715) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:703) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3932) > at > org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:275) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkSingleOperandType(FamilyOperandTypeChecker.java:92) > at >
[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16952456#comment-16952456 ] hailin.huang commented on CALCITE-1075: --- [~julianhyde] Thanks for your quick response! Accutualy I had run the test case class UdfTest .testReturnDate, which I think test user-defined date functions in Small.AllTypeFunctions.dateFun. and modified CaciteAssert.checkResultValue() * the original code is "resultSet.getString(1)" , it run successfully. * I know the dateFun function will retrue type, so I chande the code to " resultSet.getDate(1)", it throw SqlDataException:cannot covert to Date. * I chand the code to " resultSet.getLong(1)", it run successfully. It make me confused, my self-defined function reture java.sql.date, however I can only use getLong when use jdbc Driver to process it. why the return type of user defined fucnion is different from the accutual return type? > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Priority: Major > Attachments: 0001-test-cases-for-CALCITE-1075.patch > > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at >
[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16952397#comment-16952397 ] Julian Hyde commented on CALCITE-1075: -- It's probably fixed. Can you try running the test cases? Calling getObject() on a TIMESTAMP or DATE column is not a great idea. You may not get timezone conversion. > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Priority: Major > Attachments: 0001-test-cases-for-CALCITE-1075.patch > > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:715) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:703) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3932) > at > org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:275) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkSingleOperandType(FamilyOperandTypeChecker.java:92) > at >
[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16951659#comment-16951659 ] hailin.huang commented on CALCITE-1075: --- [~julianhyde] Hi Julian Hyde, Do we fix this issue? > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Priority: Major > Attachments: 0001-test-cases-for-CALCITE-1075.patch > > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:715) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:703) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3932) > at > org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:275) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkSingleOperandType(FamilyOperandTypeChecker.java:92) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkOperandTypes(FamilyOperandTypeChecker.java:109) > at >
[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15169946#comment-15169946 ] Julian Hyde commented on CALCITE-1075: -- It doesn't look as if CALCITE-1054 has the same cause. > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Assignee: Julian Hyde > Attachments: 0001-test-cases-for-CALCITE-1075.patch > > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:715) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:703) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3932) > at > org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:275) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkSingleOperandType(FamilyOperandTypeChecker.java:92) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkOperandTypes(FamilyOperandTypeChecker.java:109) >
[jira] [Commented] (CALCITE-1075) UDF Error of Calcite 1.6
[ https://issues.apache.org/jira/browse/CALCITE-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15130833#comment-15130833 ] Julian Hyde commented on CALCITE-1075: -- This might be related to CALCITE-1054, but it's not possible to check without a test case. Can you provide a patch with a test case? > UDF Error of Calcite 1.6 > - > > Key: CALCITE-1075 > URL: https://issues.apache.org/jira/browse/CALCITE-1075 > Project: Calcite > Issue Type: Bug >Affects Versions: 1.6.0 >Reporter: Wei Hu >Assignee: Julian Hyde > > UDF Error In Calcite 1.6, may be Regression bugs? > schema:Table:hr, A String, B String, C String, D Timestamp > UDF: DATE_TRUNC(Timestamp D, String X) returns a timestamp value > there a several regression bugs. 1.5 is ok, but 1.6 will throw exception: > 1. UDF in Group_by clause, > sql:select min(m0), max(m0) from (select DATE_TRUNC(D, 'month') as d1, > COUNT(A) as m0 from \"hr\" group by DATE_TRUNC(D, 'month')) > Error Stack: > Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to > java.lang.Long > at Baz$2.apply(Unknown Source) > at Baz$2.apply(Unknown Source) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:821) > at > org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:754) > at > org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:302) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:326) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:281) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:545) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:536) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:187) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:65) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) > at > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:566) > at > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:578) > at > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:571) > at > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:135) > ... 2 more > > > 2. select UDF > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > throw exception when call resultSet.getTimestamp(1) > Error stack: > Exception in thread "main" java.lang.ClassCastException: java.sql.Timestamp > cannot be cast to java.lang.Number > at > org.apache.calcite.avatica.util.AbstractCursor$NumberAccessor.getNumber(AbstractCursor.java:696) > at > org.apache.calcite.avatica.util.AbstractCursor$TimestampFromNumberAccessor.getTimestamp(AbstractCursor.java:958) > at > org.apache.calcite.avatica.AvaticaResultSet.getTimestamp(AvaticaResultSet.java:285) > at testPs.TestPs.main(TestPs.java:150) > > 3. UDFs with same name and different arg types > UDF: DATE_TRUNC(Timestamp D, String x) returns a timestamp value > DATE_TRUNC(Date D, String x) returns a date value > > sql: select D, DATE_TRUNC(D, 'month') from \"hr\" group by D > Error stack: > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 11 to line 1, column 32: Cannot apply 'DATE_TRUNC' to arguments of > type 'DATE_TRUNC(, )'. Supported form(s): > 'DATE_TRUNC(, )' > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:526) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:715) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:703) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3932) > at > org.apache.calcite.sql.SqlCallBinding.newValidationSignatureError(SqlCallBinding.java:275) > at > org.apache.calcite.sql.type.FamilyOperandTypeChecker.checkSingleOperandType(FamilyOperandTypeChecker.java:92) > at >