Fix ASTERIXDB-1292
Change-Id: Iee8e9b87145d9b3511874cd11d61ae87acdc94c7
Reviewed-on: https://asterix-gerrit.ics.uci.edu/636
Reviewed-by: Till Westmann <tillw@apache.org>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Yingyi Bu <buyingyi@gmail.com>
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/parse_02/parse_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/parse_02/parse_02.3.query.aql
index dd1a2a5..318c4fe 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/parse_02/parse_02.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/parse_02/parse_02.3.query.aql
@@ -26,7 +26,8 @@
let $date := date("-0123-01-30")
let $time := time("08:07:29.030Z")
let $datetime := datetime("0137-12-31T23:59:59.999+08:00")
-return {
+let $datetime2 := datetime("1000-10-10T10:10:10.100+00:00")
+return {
"date-string-1": print-date($date, "YY/M/D"),
"date-string-2": print-date($date, "MMM DD, YYYY"),
"date-string-3": print-date($date, "YYYY/MM/DD"),
@@ -34,5 +35,6 @@
"time-string-2": print-time($time, "hh.mm.ss.nnn a z"),
"datetime-string-1": print-datetime($datetime, "MMM DD h:m:s.nnn a YY z"),
"datetime-string-2": print-datetime($datetime, "YYYY/MMM/DD h:m:s.nnnz a"),
- "datetime-string-3": print-datetime($datetime, "YYYY-MM-DDThh:mm:ss.nnnz")
+ "datetime-string-3": print-datetime($datetime, "YYYY-MM-DDThh:mm:ss.nnnz"),
+ "datetime-string-4": print-datetime($datetime2, "YYYY-MM-DDThh:mm:ss.nnnz")
}
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/parse_02/parse_02.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/parse_02/parse_02.3.query.sqlpp
index a6f8354..5b7df2e 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/parse_02/parse_02.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/parse_02/parse_02.3.query.sqlpp
@@ -24,4 +24,4 @@
use test;
-{'date-string-1':test."print-date"(test.date('-0123-01-30'),'YY/M/D'),'date-string-2':test."print-date"(test.date('-0123-01-30'),'MMM DD, YYYY'),'date-string-3':test."print-date"(test.date('-0123-01-30'),'YYYY/MM/DD'),'time-string-1':test."print-time"(test.time('08:07:29.030Z'),'h.m.s.nn a z'),'time-string-2':test."print-time"(test.time('08:07:29.030Z'),'hh.mm.ss.nnn a z'),'datetime-string-1':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'MMM DD h:m:s.nnn a YY z'),'datetime-string-2':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'YYYY/MMM/DD h:m:s.nnnz a'),'datetime-string-3':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'YYYY-MM-DDThh:mm:ss.nnnz')};
+{'date-string-1':test."print-date"(test.date('-0123-01-30'),'YY/M/D'),'date-string-2':test."print-date"(test.date('-0123-01-30'),'MMM DD, YYYY'),'date-string-3':test."print-date"(test.date('-0123-01-30'),'YYYY/MM/DD'),'time-string-1':test."print-time"(test.time('08:07:29.030Z'),'h.m.s.nn a z'),'time-string-2':test."print-time"(test.time('08:07:29.030Z'),'hh.mm.ss.nnn a z'),'datetime-string-1':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'MMM DD h:m:s.nnn a YY z'),'datetime-string-2':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'YYYY/MMM/DD h:m:s.nnnz a'),'datetime-string-3':test."print-datetime"(test.datetime('0137-12-31T23:59:59.999+08:00'),'YYYY-MM-DDThh:mm:ss.nnnz'),'datetime-string-4':test."print-datetime"(test.datetime('1000-10-10T10:10:10.100+00:00'),'YYYY-MM-DDThh:mm:ss.nnnz')};
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/parse_02/parse_02.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/parse_02/parse_02.1.adm
index 53035aa..68f22cc 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/parse_02/parse_02.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/parse_02/parse_02.1.adm
@@ -1 +1 @@
-{ "date-string-1": "-123/1/30", "date-string-2": "JAN 30, -0123", "date-string-3": "-0123/01/30", "time-string-1": "8.7.29.03 AM Z", "time-string-2": "08.07.29.030 AM Z", "datetime-string-1": "DEC 31 3:59:59.999 PM 137 Z", "datetime-string-2": "0137/DEC/31 3:59:59.999Z PM", "datetime-string-3": "0137-12-31T15:59:59.999Z" }
+{ "date-string-1": "-123/1/30", "date-string-2": "JAN 30, -0123", "date-string-3": "-0123/01/30", "time-string-1": "8.7.29.03 AM Z", "time-string-2": "08.07.29.030 AM Z", "datetime-string-1": "DEC 31 3:59:59.999 PM 137 Z", "datetime-string-2": "0137/DEC/31 3:59:59.999Z PM", "datetime-string-3": "0137-12-31T15:59:59.999Z", "datetime-string-4": "1000-10-10T10:10:10.100Z" }
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/parse_02/parse_02.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/parse_02/parse_02.3.ast
index 1fe2ac2..5ff0efc 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/parse_02/parse_02.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/parse_02/parse_02.3.ast
@@ -81,4 +81,14 @@
LiteralExpr [STRING] [YYYY-MM-DDThh:mm:ss.nnnz]
]
)
+ (
+ LiteralExpr [STRING] [datetime-string-4]
+ :
+ FunctionCall test.print-datetime@2[
+ FunctionCall test.datetime@1[
+ LiteralExpr [STRING] [1000-10-10T10:10:10.100+00:00]
+ ]
+ LiteralExpr [STRING] [YYYY-MM-DDThh:mm:ss.nnnz]
+ ]
+ )
]
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DateTimeFormatUtils.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DateTimeFormatUtils.java
index 30ff44d..8e33d44 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DateTimeFormatUtils.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DateTimeFormatUtils.java
@@ -875,14 +875,12 @@
} else {
val = day;
}
- int valFieldCount = (int) Math.ceil(Math.log10(val));
- if (val == 1 || val == 0) {
- valFieldCount = 1;
- }
+ String strVal = String.valueOf(val);
+ int valFieldCount = strVal.length();
for (int i = 0; i < formatCharCopies - valFieldCount; i++) {
appender.append('0');
}
- appender.append(String.valueOf(val));
+ appender.append(strVal);
break;
case HOUR:
case MINUTE:
@@ -904,7 +902,8 @@
appender.append(String.valueOf(val));
break;
case MILLISECOND:
- int msFieldCount = (int) Math.ceil(Math.log10(ms));
+ String strMS = String.valueOf(ms);
+ int msFieldCount = strMS.length();
for (int i = 0; i < 3 - msFieldCount; i++) {
appender.append('0');
}
@@ -924,9 +923,10 @@
ms = ms / 10;
}
}
-
+ appender.append(String.valueOf(ms));
+ } else {
+ appender.append(strMS);
}
- appender.append(String.valueOf(ms));
break;
case TIMEZONE:
if (timezone == 0) {