Repository: phoenix Updated Branches: refs/heads/calcite 553dc9727 -> 84d92bffe
PHOENIX-3668 Resolve Date/Time/Timestamp incompatibility in bind variables Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/84d92bff Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/84d92bff Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/84d92bff Branch: refs/heads/calcite Commit: 84d92bffecc1e1cf20c56f2691b7d6ecae7bb7ab Parents: 553dc97 Author: maryannxue <maryann....@gmail.com> Authored: Mon Feb 13 16:50:08 2017 -0800 Committer: maryannxue <maryann....@gmail.com> Committed: Mon Feb 13 16:50:08 2017 -0800 ---------------------------------------------------------------------- .../calcite/jdbc/PhoenixCalciteFactory.java | 31 ++++++++++++++++++++ .../apache/phoenix/calcite/CalciteUtils.java | 4 +-- .../jdbc/PhoenixCalciteEmbeddedDriver.java | 2 +- 3 files changed, 34 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/84d92bff/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java index 5c15025..15d8b83 100644 --- a/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java +++ b/phoenix-core/src/main/java/org/apache/calcite/jdbc/PhoenixCalciteFactory.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.InputStream; import java.io.Reader; import java.sql.DatabaseMetaData; +import java.sql.Date; import java.sql.NClob; import java.sql.ResultSetMetaData; import java.sql.RowId; @@ -11,6 +12,8 @@ import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.SQLXML; import java.sql.Savepoint; +import java.sql.Time; +import java.sql.Timestamp; import java.sql.ResultSet; import java.util.Calendar; import java.util.List; @@ -381,6 +384,34 @@ public class PhoenixCalciteFactory extends CalciteFactory { } } + public void setTimestamp(int parameterIndex, Timestamp x, Calendar calendar) + throws SQLException { + if (x != null) { + x = new Timestamp(getAdjustedTime(x.getTime(), calendar)); + } + super.setTimestamp(parameterIndex, x, calendar); + } + + public void setDate(int parameterIndex, Date x, Calendar calendar) + throws SQLException { + if (x != null) { + x = new Date(getAdjustedTime(x.getTime(), calendar)); + } + super.setDate(parameterIndex, x, calendar); + } + + public void setTime(int parameterIndex, Time x, Calendar calendar) + throws SQLException { + if (x != null) { + x = new Time(getAdjustedTime(x.getTime(), calendar)); + } + super.setTime(parameterIndex, x, calendar); + } + + private long getAdjustedTime(long v, Calendar calendar) { + return (v - calendar.getTimeZone().getOffset(v)); + } + public void setRowId( int parameterIndex, RowId x) throws SQLException { http://git-wip-us.apache.org/repos/asf/phoenix/blob/84d92bff/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java index c9f072a..d1ca972 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java @@ -295,7 +295,7 @@ public class CalciteUtils { ExpressionFactory eFactory = EXPRESSION_MAP.get(node.getKind()); if (eFactory == null) { throw new UnsupportedOperationException("Unsupported RexNode: " - + node); + + node.getKind()); } return eFactory; } @@ -1169,7 +1169,7 @@ public class CalciteUtils { public static SQLException unwrapSqlException(SQLException root){ Exception e = root; - while(e.getCause() != null){ + while(e.getCause() instanceof Exception){ e = (Exception) e.getCause(); if(e instanceof RuntimeException && e.getCause() instanceof SQLException) { return (SQLException) e.getCause(); http://git-wip-us.apache.org/repos/asf/phoenix/blob/84d92bff/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteEmbeddedDriver.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteEmbeddedDriver.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteEmbeddedDriver.java index 36088ba..c20151d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteEmbeddedDriver.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/jdbc/PhoenixCalciteEmbeddedDriver.java @@ -58,7 +58,7 @@ public abstract class PhoenixCalciteEmbeddedDriver extends Driver implements SQL return new Function0<CalcitePrepare>() { @Override public CalcitePrepare apply() { - return new PhoenixPrepareImpl(PhoenixConverterRules.CONVERTIBLE_RULES); + return new PhoenixPrepareImpl(PhoenixConverterRules.RULES); } }; }