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

morrysnow pushed a commit to branch 2.0.1-rc04-patch
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 839ab8c8cdb690548443d87380c17db26ab16d8d
Author: LiBinfeng <46676950+libinfeng...@users.noreply.github.com>
AuthorDate: Fri Sep 1 17:28:40 2023 +0800

    [Fix](planner) fix to_date failed in create table as select (#23613)
    
    Problem:
    when create table as select using to_date function, it would failed
    
    Example:
    create table test_to_date properties('replication_num' = '1') as select 
to_date('20230816') as datev2;
    
    Reason:
    after release version 2.0, datev1 is disabled, but to_date function 
signature does not upgrade, so it failed when checking return type of to_date
    
    Solved:
    when getfunction, forbidden to_date with return type date_v1, datetime v1 
also changed to datetime v2 and decimal v2 changed to decimal v3
---
 .../doris/analysis/CreateTableAsSelectStmt.java      | 20 ++++++++++++++++++++
 regression-test/suites/ddl_p0/test_ctas.groovy       |  8 ++++++++
 2 files changed, 28 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java
index 942c3cce70..d9e507445e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java
@@ -17,6 +17,9 @@
 
 package org.apache.doris.analysis;
 
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.catalog.Type;
+import org.apache.doris.common.Config;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
@@ -82,6 +85,23 @@ public class CreateTableAsSelectStmt extends DdlStmt {
                 queryStmt.getResultExprs().get(i).getSrcSlotRef().getColumn()
                         .setIsAllowNull(outputs.get(i).isNullable());
             }
+            if (Config.enable_date_conversion) {
+                if (queryStmt.getResultExprs().get(i).getType() == Type.DATE) {
+                    Expr castExpr = 
queryStmt.getResultExprs().get(i).castTo(Type.DATEV2);
+                    queryStmt.getResultExprs().set(i, castExpr);
+                }
+                if (queryStmt.getResultExprs().get(i).getType() == 
Type.DATETIME) {
+                    Expr castExpr = 
queryStmt.getResultExprs().get(i).castTo(Type.DATETIMEV2);
+                    queryStmt.getResultExprs().set(i, castExpr);
+                }
+            }
+            if (Config.enable_decimal_conversion && 
queryStmt.getResultExprs().get(i).getType().isDecimalV2()) {
+                int precision = 
queryStmt.getResultExprs().get(i).getType().getPrecision();
+                int scalar = 
queryStmt.getResultExprs().get(i).getType().getDecimalDigits();
+                Expr castExpr = queryStmt.getResultExprs().get(i)
+                        .castTo(ScalarType.createDecimalV3Type(precision, 
scalar));
+                queryStmt.getResultExprs().set(i, castExpr);
+            }
         }
         ArrayList<Expr> resultExprs = getQueryStmt().getResultExprs();
         if (columnNames != null && columnNames.size() != resultExprs.size()) {
diff --git a/regression-test/suites/ddl_p0/test_ctas.groovy 
b/regression-test/suites/ddl_p0/test_ctas.groovy
index 7c093aa479..1617e71c11 100644
--- a/regression-test/suites/ddl_p0/test_ctas.groovy
+++ b/regression-test/suites/ddl_p0/test_ctas.groovy
@@ -234,10 +234,18 @@ suite("test_ctas") {
         
         String desc = sql 'desc c'
         assertTrue(desc.contains('Yes'))
+        sql '''create table test_date_v2 
+        properties (
+                "replication_num"="1"
+        ) as select to_date('20250829');
+        '''
+        desc = sql 'desc test_date_v2'
+        assertTrue(desc.contains('Yes'))
     } finally {
         sql 'drop table a'
         sql 'drop table b'
         sql 'drop table c'
+        sql 'drop table test_date_v2'
     }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to