This is an automated email from the ASF dual-hosted git repository.

gabriellee 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 d5486726de [Bug](date) Fix wrong result produced by date function 
(#12720)
d5486726de is described below

commit d5486726de0a078b4230d83352b2a31ee2548288
Author: Gabriel <[email protected]>
AuthorDate: Tue Sep 20 21:09:26 2022 +0800

    [Bug](date) Fix wrong result produced by date function (#12720)
---
 .../org/apache/doris/analysis/DateLiteral.java     |  6 ++-
 .../org/apache/doris/analysis/InPredicateTest.java |  2 +-
 .../org/apache/doris/rewrite/FEFunctionsTest.java  | 49 ++++------------------
 3 files changed, 14 insertions(+), 43 deletions(-)

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 2bdb3e43ac..9cd48b53ae 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
@@ -600,7 +600,11 @@ public class DateLiteral extends LiteralExpr {
 
     @Override
     public long getLongValue() {
-        return (year * 10000 + month * 100 + day) * 1000000L + hour * 10000 + 
minute * 100 + second;
+        if (this.getType().isDate() || this.getType().isDateV2()) {
+            return year * 10000 + month * 100 + day;
+        } else {
+            return (year * 10000 + month * 100 + day) * 1000000L + hour * 
10000 + minute * 100 + second;
+        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/InPredicateTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/InPredicateTest.java
index 7c45237296..1175db44a5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/InPredicateTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/InPredicateTest.java
@@ -175,7 +175,7 @@ public class InPredicateTest {
         InPredicate union = inPredicate1.union(inPredicate2);
         Assert.assertEquals(slotRef1, union.getChild(0));
         Assert.assertTrue(union.isLiteralChildren());
-        Assert.assertEquals(2, union.getListChildren().size());
+        Assert.assertEquals(3, union.getListChildren().size());
         Assert.assertTrue(union.getListChildren().contains(literalChild1));
         Assert.assertTrue(union.getListChildren().contains(literalChild2));
         Assert.assertTrue(union.getListChildren().contains(literalChild5));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/rewrite/FEFunctionsTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/rewrite/FEFunctionsTest.java
index eb9f18684d..70ec805e64 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/FEFunctionsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/rewrite/FEFunctionsTest.java
@@ -146,49 +146,33 @@ public class FEFunctionsTest {
     public void dateAddTest() throws AnalysisException {
         DateLiteral actualResult = FEFunctions.dateAdd(new 
DateLiteral("2018-08-08", Type.DATE),
                 new IntLiteral(1));
-        DateLiteral expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIME);
+        DateLiteral expectedResult = new DateLiteral("2018-08-09", Type.DATE);
         Assert.assertEquals(expectedResult, actualResult);
 
         actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", Type.DATETIME);
+        expectedResult = new DateLiteral("2018-08-07", Type.DATE);
         Assert.assertEquals(expectedResult, actualResult);
     }
 
     @Test
     public void dateV2AddTest() throws AnalysisException {
         DateLiteral actualResult = FEFunctions.dateAdd(new 
DateLiteral("2018-08-08", Type.DATEV2), new IntLiteral(1));
-        DateLiteral expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(1));
-        expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(1));
-        expectedResult = new DateLiteral("2018-08-09 00:00:00", Type.DATETIME);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", 
Type.DATETIMEV2);
+        DateLiteral expectedResult = new DateLiteral("2018-08-09", 
Type.DATEV2);
         Assert.assertEquals(expectedResult, actualResult);
 
         actualResult = FEFunctions.dateAdd(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", Type.DATETIME);
+        expectedResult = new DateLiteral("2018-08-07", Type.DATEV2);
         Assert.assertEquals(expectedResult, actualResult);
     }
 
     @Test
     public void addDateTest() throws AnalysisException {
         DateLiteral actualResult = FEFunctions.addDate(new 
DateLiteral("2018-08-08", Type.DATE), new IntLiteral(1));
-        DateLiteral expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIME);
+        DateLiteral expectedResult = new DateLiteral("2018-08-09", Type.DATE);
         Assert.assertEquals(expectedResult, actualResult);
 
         actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", Type.DATETIME);
+        expectedResult = new DateLiteral("2018-08-07", Type.DATE);
         Assert.assertEquals(expectedResult, actualResult);
 
     }
@@ -196,29 +180,12 @@ public class FEFunctionsTest {
     @Test
     public void addDateV2Test() throws AnalysisException {
         DateLiteral actualResult = FEFunctions.addDate(new 
DateLiteral("2018-08-08", Type.DATEV2), new IntLiteral(1));
-        DateLiteral expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(1));
-        expectedResult = new DateLiteral("2018-08-09 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(1));
-        expectedResult = new DateLiteral("2018-08-09 00:00:00", Type.DATETIME);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", 
Type.DATETIMEV2);
-        Assert.assertEquals(expectedResult, actualResult);
-
-        actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATE), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", 
Type.DATETIMEV2);
+        DateLiteral expectedResult = new DateLiteral("2018-08-09", 
Type.DATEV2);
         Assert.assertEquals(expectedResult, actualResult);
 
         actualResult = FEFunctions.addDate(new DateLiteral("2018-08-08", 
Type.DATEV2), new IntLiteral(-1));
-        expectedResult = new DateLiteral("2018-08-07 00:00:00", Type.DATETIME);
+        expectedResult = new DateLiteral("2018-08-07", Type.DATEV2);
         Assert.assertEquals(expectedResult, actualResult);
-
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to