You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Ian Bertolacci (Jira)" <ji...@apache.org> on 2022/10/31 19:19:00 UTC

[jira] [Commented] (CALCITE-4120) Inconsistent Calendar used In JdbcMeta between prepareAndExecute and Fetch

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

Ian Bertolacci commented on CALCITE-4120:
-----------------------------------------

To add to this, I believe that this can be tripped in ArrayTypeTest.timestampArrays by setting the data size to 101 (AvaticaStatement.DEFAULT_FETCH_SIZE + 1).

The first 100 blocks are fine, but then the next one is off by as many hours as my UTC offset

> Inconsistent Calendar used In JdbcMeta between prepareAndExecute and Fetch
> --------------------------------------------------------------------------
>
>                 Key: CALCITE-4120
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4120
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Chris Snowden
>            Priority: Major
>
> org.apache.calcite.avatica.jdbc.JdbcMeta prepareAndExecute is using UTC calendar but fetch is using local calendar, results in inconsistent TZs being applied for single statement. 
> [https://github.com/apache/calcite-avatica/blob/master/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java]
> [https://github.com/apache/calcite-avatica/blob/master/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcResultSet.java]
>  
> {code:java}
> org.apache.calcite.avatica.jdbc.JdbcMeta 
> final Calendar calendar = Unsafe.localCalendar(); //LOCAL
> public ExecuteResult prepareAndExecute(
>     StatementHandle h, 
>     String sql, 
>     long maxRowCount, 
>     int maxRowsInFirstFrame, 
>     PrepareCallback callback) throws NoSuchStatementException {
> ....
>     resultSets.add(JdbcResultSet.create(h.connectionId, h.id, info.getResultSet(), maxRowsInFirstFrame)); //USES UTC CALENDAR      
> ....
> }
> public Frame fetch(
>     StatementHandle h, 
>     long offset, 
>     int fetchMaxRowCount) throws NoSuchStatementException, MissingResultsException {
> ...
>     return JdbcResultSet.frame(statementInfo, statementInfo.getResultSet(), offset, fetchMaxRowCount, calendar, Optional.<Meta.Signature>absent()); //USES LOCAL CALENDAR
> ...
> }
> ____________________________________________________________________
> org.apache.calcite.avatica.jdbc.JdbcResultSet
> public static JdbcResultSet create(
>     String connectionId, 
>     int statementId,      
>     ResultSet resultSet, 
>     int maxRowCount, 
>     Meta.Signature signature) {
>     final Calendar calendar = DateTimeUtils.calendar(); //UTC
>     ....
>     final Meta.Frame firstFrame = frame(null, resultSet, 0, fetchRowCount, calendar, Optional.of(signature))
>     ....
> }
> {code}
>  
>  
>  
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)