This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 48b8aed44f7 [feature](Nereids) support datev1 and datetimev1 (#28581) (#28623) 48b8aed44f7 is described below commit 48b8aed44f738664f1cbdb23970b261aa9cbd43e Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Thu Dec 21 12:24:51 2023 +0800 [feature](Nereids) support datev1 and datetimev1 (#28581) (#28623) pick from master PR #28581 commit ddba98159e246d3439bf1cbdd727d8d7fadf8a63 --- .../antlr4/org/apache/doris/nereids/DorisParser.g4 | 2 +- .../org/apache/doris/nereids/types/DataType.java | 11 +++++++++++ .../doris/nereids/parser/NereidsParserTest.java | 23 ++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index 8c9ece2799f..ec4b2672c6d 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -440,7 +440,7 @@ specifiedPartition constant : NULL #nullLiteral | interval #intervalLiteral - | type=(DATE | DATEV1 | DATEV2 | TIMESTAMP) STRING_LITERAL #typeConstructor + | type=(DATE | DATEV1 | DATEV2 | TIMESTAMP) STRING_LITERAL #typeConstructor | number #numericLiteral | booleanValue #booleanLiteral | STRING_LITERAL #stringLiteral diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java index 9967e5cf0b6..7baa65d2647 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java @@ -207,6 +207,8 @@ public abstract class DataType implements AbstractDataType { case "date": return Config.enable_date_conversion && tryConvert ? DateV2Type.INSTANCE : DateType.INSTANCE; + case "datev1": + return DateType.INSTANCE; case "datev2": return DateV2Type.INSTANCE; case "time": @@ -222,6 +224,15 @@ public abstract class DataType implements AbstractDataType { default: throw new AnalysisException("Nereids do not support type: " + type); } + case "datetimev1": + switch (types.size()) { + case 1: + return DateTimeType.INSTANCE; + case 2: + throw new AnalysisException("Nereids do not support datetimev1 type with precision"); + default: + throw new AnalysisException("Nereids do not support type: " + type); + } case "datetimev2": switch (types.size()) { case 1: diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java index d3064bde012..128569af31b 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java @@ -21,6 +21,7 @@ import org.apache.doris.analysis.StatementBase; import org.apache.doris.common.Config; import org.apache.doris.common.Pair; import org.apache.doris.nereids.StatementContext; +import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.exceptions.ParseException; import org.apache.doris.nereids.glue.LogicalPlanAdapter; import org.apache.doris.nereids.trees.expressions.Cast; @@ -36,6 +37,8 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalCTE; import org.apache.doris.nereids.trees.plans.logical.LogicalJoin; import org.apache.doris.nereids.trees.plans.logical.LogicalPlan; import org.apache.doris.nereids.trees.plans.logical.LogicalProject; +import org.apache.doris.nereids.types.DateTimeType; +import org.apache.doris.nereids.types.DateType; import org.apache.doris.nereids.types.DecimalV2Type; import org.apache.doris.nereids.types.DecimalV3Type; @@ -261,6 +264,26 @@ public class NereidsParserTest extends ParserTestBase { Assertions.assertEquals(doubleCount, Config.enable_decimal_conversion ? 0 : 1); } + @Test + public void testDatev1() { + String dv1 = "SELECT CAST('2023-12-18' AS DATEV1) FROM t"; + NereidsParser nereidsParser = new NereidsParser(); + LogicalPlan logicalPlan = (LogicalPlan) nereidsParser.parseSingle(dv1).child(0); + Assertions.assertEquals(DateType.INSTANCE, logicalPlan.getExpressions().get(0).getDataType()); + } + + @Test + public void testDatetimev1() { + String dtv1 = "SELECT CAST('2023-12-18' AS DATETIMEV1) FROM t"; + NereidsParser nereidsParser = new NereidsParser(); + LogicalPlan logicalPlan = (LogicalPlan) nereidsParser.parseSingle(dtv1).child(0); + Assertions.assertEquals(DateTimeType.INSTANCE, logicalPlan.getExpressions().get(0).getDataType()); + + String wrongDtv1 = "SELECT CAST('2023-12-18' AS DATETIMEV1(2))"; + Assertions.assertThrows(AnalysisException.class, () -> nereidsParser.parseSingle(wrongDtv1).child(0)); + + } + @Test public void parseSetOperation() { String union = "select * from t1 union select * from t2 union all select * from t3"; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org