[
https://issues.apache.org/jira/browse/CALCITE-4120?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chris Snowden updated CALCITE-4120:
-----------------------------------
Description:
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/JdbcResultSet.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}
was:
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.
{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}
> 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/JdbcResultSet.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.3.4#803005)