You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2023/01/13 00:55:50 UTC
[calcite] branch main updated: [CALCITE-5405] MongoDB adapter does not parse dates correctly
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new ad145397d9 [CALCITE-5405] MongoDB adapter does not parse dates correctly
ad145397d9 is described below
commit ad145397d91eea981a48d8f2002b3d36de5591ee
Author: Tim Nieradzik <ti...@sparse.tech>
AuthorDate: Tue Nov 29 16:29:04 2022 +0300
[CALCITE-5405] MongoDB adapter does not parse dates correctly
The following conversion does not work as expected:
cast(_MAP['date'] as TIMESTAMP)
The resulting date is always 1970-01-01 and only the fractional seconds are set.
---
.../calcite/adapter/mongodb/MongoEnumerator.java | 4 +++-
.../calcite/adapter/mongodb/MongoAdapterTest.java | 23 ++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
index 0045044c34..0c3d327fa5 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
@@ -129,7 +129,9 @@ class MongoEnumerator implements Enumerator<Object> {
if (clazz.isInstance(o)) {
return o;
}
- if (o instanceof Date && primitive != null) {
+ if (o instanceof Date && clazz == Long.class) {
+ o = ((Date) o).getTime();
+ } else if (o instanceof Date && primitive != null) {
o = ((Date) o).getTime() / DateTimeUtils.MILLIS_PER_DAY;
}
if (o instanceof Number && primitive != null) {
diff --git a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
index 79d5e81d26..a9aa191fa6 100644
--- a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
+++ b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
@@ -708,6 +708,29 @@ public class MongoAdapterTest implements SchemaFactory {
.returnsUnordered("EXPR$0=2012-09-05");
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-5405">[CALCITE-5405]
+ * Error casting MongoDB dates to TIMESTAMP</a>. */
+ @Test void testDateConversion() {
+ assertModel("{\n"
+ + " version: '1.0',\n"
+ + " defaultSchema: 'test',\n"
+ + " schemas: [\n"
+ + " {\n"
+ + " type: 'custom',\n"
+ + " name: 'test',\n"
+ + " factory: 'org.apache.calcite.adapter.mongodb.MongoSchemaFactory',\n"
+ + " operand: {\n"
+ + " host: 'localhost',\n"
+ + " database: 'test'\n"
+ + " }\n"
+ + " }\n"
+ + " ]\n"
+ + "}")
+ .query("select cast(_MAP['date'] as TIMESTAMP) from \"datatypes\"")
+ .returnsUnordered("EXPR$0=2012-09-05 00:00:00");
+ }
+
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-665">[CALCITE-665]
* ClassCastException in MongoDB adapter</a>. */