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:20:00 UTC
[jira] [Comment Edited] (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 edited comment on CALCITE-4120 at 10/31/22 7:19 PM:
-------------------------------------------------------------------
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.
So not only is the wrong calendar being used, different calendars are being used for different frames.
was (Author: ian.bertolacci):
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)