Description
Getting below error while executing the 'order by' or 'group by' queries with timestamp data type column.
Caused by: org.codehaus.commons.compiler.CompileException: Line 11, Column 76: No applicable constructor/method found for actual parameters "java.lang.Object"; candidates are: "public static java.sql.Timestamp org.apache.calcite.runtime.SqlFunctions.internalToTimestamp(java.lang.Long)", "public static java.sql.Timestamp org.apache.calcite.runtime.SqlFunctions.internalToTimestamp(long)"
I could able to reproduce this problem in CsvTests.
Fire a test with query "select * from \"DATE\" order by \"JOINTIMES\"" you will see test failing with exception.
Root cause and fix:
The fix for this to overload the SqlFunctions.internalToTimestamp() to accept the timestamp or object and return timestamp value. I tested and it's working
Stack trace at org.apache.calcite.avatica.Helper.wrap(Helper.java:37) at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:108) at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1233) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:303) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:200) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:761) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:617) at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:587) at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214) at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:595) at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:615) at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:148) ... 29 more Caused by: org.codehaus.commons.compiler.CompileException: Line 11, Column 76: No applicable constructor/method found for actual parameters "java.lang.Object"; candidates are: "public static java.sql.Timestamp org.apache.calcite.runtime.SqlFunctions.internalToTimestamp(java.lang.Long)", "public static java.sql.Timestamp org.apache.calcite.runtime.SqlFunctions.internalToTimestamp(long)" at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:10092) at org.codehaus.janino.UnitCompiler.findMostSpecificIInvocable(UnitCompiler.java:7506) at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:7376) at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:7280) at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:3850) at org.codehaus.janino.UnitCompiler.access$6900(UnitCompiler.java:183) at org.codehaus.janino.UnitCompiler$10.visitMethodInvocation(UnitCompiler.java:3251) at org.codehaus.janino.Java$MethodInvocation.accept(Java.java:3974) at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:3278)
Attachments
Issue Links
- is related to
-
CALCITE-1427 Code generation incorrect (does not compile) for DATE, TIME and TIMESTAMP fields
- Closed
-
CALCITE-1569 Code generation for fields of type java.sql.Date
- Closed
-
CALCITE-1054 NPE caused by wrong code generation for Timestamp fields
- Closed
- relates to
-
CALCITE-1703 Query with BETWEEN or AGGREGATE functions on TIMESTAMP column throws ClassCastException
- Open