[
https://issues.apache.org/jira/browse/CALCITE-4120?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17627875#comment-17627875
]
Julian Hyde commented on CALCITE-4120:
--------------------------------------
Let's make sure we're on the same page:
* SQL {{TIMESTAMP}} values never have any time zone (explicit or implied);
their interpretation is up to the user.
* Java {{java.sql.Timestamp}} values are instants whose values are stored in
UTC.
> 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)