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

Karan Mehta commented on PHOENIX-5086:
--------------------------------------

I was able to reproduce this with all the branches, thanks for the integration 
test that you added. This also appears to be a general Phoenix fat driver issue 
and not thin driver specifically. 
Checkout the file QueryMetaDataTes.java. Turns out that if getParameterMetaData 
is called before the query is executed with bind values, it would work 
correctly. However once the values are bind into the statement, it fails to 
determine the Metadata. 

I am not sure how to exactly fix this. Is this in Jdbc contract that the 
getParameterMetaData should be idempodent? Is it allowed to call this method 
even after bind parameters have been assigned values?
If yes, then the current behavior is correct. 
If no, we need to investigate further to understand the correct fix. A simple 
fix is to cache the parameterMetaData values in PhoenixPreparedStatement and 
not compute it everytime. Other approaches may involved correcting the way we 
parse our expression trees and fixing those. The latter approach can be 
complicated and time consuming.

Let me know your thoughts.

> Prepare statement fails: Lost Bound parameter in TO_TIMESTAMP function
> ----------------------------------------------------------------------
>
>                 Key: PHOENIX-5086
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5086
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 5.0.0
>            Reporter: Marwa Saleh
>            Priority: Critical
>              Labels: preparedstatements
>
> Please note the issue happens in case of SELECT and works fine in case of 
> UPSERT. 
> Prepared Statement SQL: 
> {noformat}
> SELECT "DOC_KEY" FROM XYZ WHERE  "DOC_MODIFY_DATE" >= 
> TO_TIMESTAMP(?,'yyyy-MM-dd HH:mm:ss.SSS','UTC'); {noformat}
>  
> {code:java}
> preparedStatement.setString(1, "2018-12-30 14:38:24.208"); {code}
>  
> {code:java}
> Stack trace: 
> Caused by: org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : 
> Remote driver error: RuntimeException: java.sql.SQLException: ERROR 2004 
> (INT05): Parameter value unbound. Parameter at index 1 is unbound -> 
> SQLException: ERROR 2004 (INT05): Parameter value unbound. Parameter at index 
> 1 is unbound 
>         at org.apache.calcite.avatica.Helper.createException(Helper.java:54) 
>         at org.apache.calcite.avatica.Helper.createException(Helper.java:41) 
>         at 
> org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:520)
>  
>         at 
> org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:133)
>  {code}
>  
> Possible to be patched?



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

Reply via email to