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)