This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new f9f711cd16 FIX: fix datetimev2 decimal error. (#10736) f9f711cd16 is described below commit f9f711cd16525ef2f3a0dbfd986cdab6d74f1711 Author: Stalary <stal...@163.com> AuthorDate: Wed Jul 13 08:32:26 2022 +0800 FIX: fix datetimev2 decimal error. (#10736) --- .../src/main/java/org/apache/doris/analysis/DateLiteral.java | 7 ++++++- .../test/java/org/apache/doris/analysis/DateLiteralTest.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java index 88898f6c64..a20e26000a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java @@ -285,6 +285,7 @@ public class DateLiteral extends LiteralExpr { this.hour = dateTime.getHourOfDay(); this.minute = dateTime.getMinuteOfHour(); this.second = dateTime.getSecondOfMinute(); + this.microsecond = dateTime.getMillisOfSecond() * 1000L; this.type = type; } @@ -433,12 +434,16 @@ public class DateLiteral extends LiteralExpr { if (((ScalarType) type).decimalScale() == 0) { return s; } - return s + "." + microsecond / (10L * (6 - ((ScalarType) type).decimalScale())); + return s + "." + getDecimalNumber(); } else { return String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second); } } + public long getDecimalNumber() { + return Double.valueOf(microsecond / (Math.pow(10, 6 - ((ScalarType) type).decimalScale()))).longValue(); + } + private String convertToString(PrimitiveType type) { if (type == PrimitiveType.DATE || type == PrimitiveType.DATEV2) { return String.format("%04d-%02d-%02d", year, month, day); diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java index db2dbd797d..c20bcf194e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java @@ -23,6 +23,7 @@ import org.apache.doris.common.AnalysisException; import org.apache.doris.common.InvalidFormatException; import org.apache.doris.common.jmockit.Deencapsulation; +import org.joda.time.LocalDateTime; import org.junit.Assert; import org.junit.Test; @@ -344,4 +345,15 @@ public class DateLiteralTest { } Assert.assertFalse(hasException); } + + @Test + public void testDateTimeV2Decimal() throws AnalysisException { + DateLiteral dateLiteral1 = new DateLiteral(LocalDateTime.now(), + DateLiteral.getDefaultDateType(ScalarType.createDatetimeV2Type(3))); + Assert.assertTrue(dateLiteral1.getDecimalNumber() >= 100 && dateLiteral1.getDecimalNumber() < 1000); + + DateLiteral dateLiteral2 = new DateLiteral(LocalDateTime.now(), + DateLiteral.getDefaultDateType(ScalarType.createDatetimeV2Type(5))); + Assert.assertTrue(dateLiteral2.getDecimalNumber() >= 10000 && dateLiteral2.getDecimalNumber() < 100000); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org