You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2019/06/17 12:29:57 UTC
[kylin] branch master updated: KYLIN-4032 return timestamp and date
without timezone in jdbc
This is an automated email from the ASF dual-hosted git repository.
nic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push:
new 2cfead0 KYLIN-4032 return timestamp and date without timezone in jdbc
2cfead0 is described below
commit 2cfead0b3c7772366e233c6bc61942ca38c68642
Author: chenzhx <ch...@apache.org>
AuthorDate: Mon Jun 17 17:39:32 2019 +0800
KYLIN-4032 return timestamp and date without timezone in jdbc
---
.../java/org/apache/kylin/jdbc/KylinClient.java | 19 ++++++++++++++++--
.../java/org/apache/kylin/jdbc/DriverTest.java | 23 ++++++++++++++++++++++
.../java/org/apache/kylin/jdbc/DummyClient.java | 17 +++++++++++++++-
3 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
index f59c374..2f23f4e 100644
--- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
+++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java
@@ -30,6 +30,9 @@ import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@@ -217,11 +220,11 @@ public class KylinClient implements IRemoteClient {
case Types.LONGVARBINARY:
return value.getBytes(StandardCharsets.UTF_8);
case Types.DATE:
- return Date.valueOf(value);
+ return dateConvert(value);
case Types.TIME:
return Time.valueOf(value);
case Types.TIMESTAMP:
- return Timestamp.valueOf(value);
+ return timestampConvert(value);
default:
//do nothing
break;
@@ -380,6 +383,18 @@ public class KylinClient implements IRemoteClient {
columnStub.getIS_NULLABLE());
}
+ private static Date dateConvert(String value) {
+ ZoneId utc = ZoneId.of("UTC");
+ LocalDate localDate = Date.valueOf(value).toLocalDate();
+ return new Date(localDate.atStartOfDay(utc).toInstant().toEpochMilli());
+ }
+
+ private static Timestamp timestampConvert(String value) {
+ ZoneId utc = ZoneId.of("UTC");
+ LocalDateTime localDate = Timestamp.valueOf(value).toLocalDateTime();
+ return new Timestamp(localDate.atZone(utc).toInstant().toEpochMilli());
+ }
+
@Override
public QueryResult executeQuery(String sql, List<Object> paramValues,
Map<String, String> queryToggles) throws IOException {
diff --git a/jdbc/src/test/java/org/apache/kylin/jdbc/DriverTest.java b/jdbc/src/test/java/org/apache/kylin/jdbc/DriverTest.java
index 1ffec6d..908ce21 100644
--- a/jdbc/src/test/java/org/apache/kylin/jdbc/DriverTest.java
+++ b/jdbc/src/test/java/org/apache/kylin/jdbc/DriverTest.java
@@ -105,6 +105,29 @@ public class DriverTest {
}
@Test
+ public void testDateAndTimeStampWithMockData() throws SQLException {
+ Driver driver = new DummyDriver();
+
+ Connection conn = driver.connect("jdbc:kylin://test_url/test_db", null);
+ PreparedStatement state = conn.prepareStatement("select * from test_table where id=?");
+ state.setInt(1, 10);
+ ResultSet resultSet = state.executeQuery();
+
+ ResultSetMetaData metadata = resultSet.getMetaData();
+ assertEquals("date", metadata.getColumnTypeName(4));
+ assertEquals("timestamp", metadata.getColumnTypeName(5));
+
+ while (resultSet.next()) {
+ assertEquals("2019-04-27", resultSet.getString(4));
+ assertEquals("2019-04-27 17:30:03", resultSet.getString(5));
+ }
+
+ resultSet.close();
+ state.close();
+ conn.close();
+ }
+
+ @Test
public void testMultipathOfDomainForConnection() throws SQLException {
Driver driver = new DummyDriver();
diff --git a/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java b/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java
index 7039cc0..75292a1 100644
--- a/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java
+++ b/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java
@@ -19,7 +19,12 @@
package org.apache.kylin.jdbc;
import java.io.IOException;
+import java.sql.Date;
+import java.sql.Timestamp;
import java.sql.Types;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -65,13 +70,23 @@ public class DummyClient implements IRemoteClient {
@Override
public QueryResult executeQuery(String sql, List<Object> paramValues, Map<String, String> queryToggles) throws IOException {
List<Object> data = new ArrayList<Object>();
- Object[] row = new Object[] { "foo", "bar", "tool" };
+
+ ZoneId utc = ZoneId.of("UTC");
+ LocalDate localDate = Date.valueOf("2019-04-27").toLocalDate();
+ LocalDateTime localDateTime = Timestamp.valueOf("2019-04-27 17:30:03").toLocalDateTime();
+ Date date = new Date(localDate.atStartOfDay(utc).toInstant().toEpochMilli());
+ Timestamp timestamp = new Timestamp(localDateTime.atZone(utc).toInstant().toEpochMilli());
+
+ Object[] row = new Object[] { "foo", "bar", "tool", date, timestamp };
data.add(row);
List<ColumnMetaData> meta = new ArrayList<ColumnMetaData>();
meta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.VARCHAR, "varchar", Rep.STRING), true));
meta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.VARCHAR, "varchar", Rep.STRING), true));
meta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.VARCHAR, "varchar", Rep.STRING), true));
+ meta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.DATE, "date", Rep.JAVA_SQL_DATE), true));
+ meta.add(ColumnMetaData.dummy(ColumnMetaData.scalar(Types.TIMESTAMP, "timestamp", Rep.JAVA_SQL_TIMESTAMP),
+ true));
return new QueryResult(meta, data);
}