You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Piotr Bojko (JIRA)" <ji...@apache.org> on 2018/10/25 20:27:00 UTC

[jira] [Commented] (CALCITE-2641) DATE and TIMESTAMP arguments to user-defined table function

    [ https://issues.apache.org/jira/browse/CALCITE-2641?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16664250#comment-16664250 ] 

Piotr Bojko commented on CALCITE-2641:
--------------------------------------

Here is a [test case|https://github.com/ptrbojko/calcite/tree/bug/CALCITE-2641].

> DATE and TIMESTAMP arguments to user-defined table function
> -----------------------------------------------------------
>
>                 Key: CALCITE-2641
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2641
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.17.0, 1.18.0
>            Reporter: Piotr Bojko
>            Assignee: Julian Hyde
>            Priority: Major
>
> I am trying to create UDF with java.sql.Timestamp as a parameter:
> {code:java}
> public static QueryableTable getTable(
> 			@Parameter(name = "Projection") String projection,
> 			@Parameter(name = "Query") String query,
> 			@Parameter(name = "Test Timestamp") Timestamp timestamp) 
> {code}
> But when using following UDF like this:
> {code:java}
> SELECT * FROM TABLE(MYUDF('ID','',  TIMESTAMP '2013-01-01 01:01:01'))
> {code}
> I've got following exception and wondering whether I am missing something or having date/time as a parameter is not fully supported yet?
> {noformat}
> [INFO] [talledLocalContainer] java.lang.AssertionError: value 2013-01-01 01:01:01 does not match type class java.sql.Timestamp
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.ConstantExpression.<init>(ConstantExpression.java:49)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.Expressions.constant(Expressions.java:588)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.OptimizeShuttle.visit(OptimizeShuttle.java:278)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.UnaryExpression.accept(UnaryExpression.java:37)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.GotoStatement.accept(GotoStatement.java:60)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.BlockBuilder.optimize(BlockBuilder.java:438)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.linq4j.tree.BlockBuilder.toBlock(BlockBuilder.java:322)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlUserDefinedTableMacro.coerce(SqlUserDefinedTableMacro.java:190)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlUserDefinedTableMacro.convertArguments(SqlUserDefinedTableMacro.java:110)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlUserDefinedTableFunction.getRowType(SqlUserDefinedTableFunction.java:70)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.ProcedureNamespace.validateImpl(ProcedureNamespace.java:62)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:971)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:950)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3036)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3018)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3288)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:971)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:950)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:216)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:925)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:629)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:553)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:264)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:774)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:638)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:608)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:238)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:220)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:209)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:96)
> [INFO] [talledLocalContainer] 	at org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175)
> {noformat}
> When breakpointed on ConstantExpression.java:49, the debugged value was TimestampString with toString = 2013-01-01 01:01:01
> Suggestion from [~vladimirsitnikov]:  
> {quote}Then it might be a bug
> in org/apache/calcite/linq4j/tree/OptimizeShuttle.java:277
> Have you tried to comment that branch out for test purposes?{quote}
> Suggestion from [~julianhyde]:
> {quote}
> Two existing JIRA cases that relate to this are https://issues.apache.org/jira/browse/CALCITE-1041 <https://issues.apache.org/jira/browse/CALCITE-1041> and https://issues.apache.org/jira/browse/CALCITE-986 <https://issues.apache.org/jira/browse/CALCITE-986>.
> This case seems different because it is a user-defined TABLE function. I don’t think that has been tested before, therefore I wouldn’t consider it “done". The first step is to a bug “DATE and TIMESTAMP arguments to user-defined table function”, and the second step is to write a test in TableFunctionTest.
> {quote}
> I will attach a test case in a moment,



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)