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

w41ter pushed a commit to branch fix_column_def_sql_result
in repository https://gitbox.apache.org/repos/asf/doris.git

commit bda5eb26603217579267831daf79972be5603c9b
Author: w41ter <w41te...@gmail.com>
AuthorDate: Tue Sep 24 07:09:26 2024 +0000

    [fix](analysis) Fix ColumnDef to sql result
    
    For sql:
    
    ```
    ALTER TABLE table_3333338 ADD COLUMN col484 DATETIME(1) REPLACE_IF_NOT_NULL
    ```
    
    the toSql result is:
    
    ```
    ADD COLUMN `col484` datetimev2(1) REPLACE_IF_NOT_NULL NULL DEFAULT "null" 
COMMENT ""
    ```
    
    the `DEFAULT "null"` is not a valid expr for datetime. This PR correct
    the behaviour of toSql of the NULL DEFAULT VALUE to `DEFAULT NULL`.
---
 .../main/java/org/apache/doris/analysis/ColumnDef.java    | 15 ++++++++++++++-
 .../java/org/apache/doris/analysis/ColumnDefTest.java     |  8 +++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
index 9bd34e1410b..52255196bdb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java
@@ -175,9 +175,22 @@ public class ColumnDef {
                 }
                 return LocalDateTime.now(TimeUtils.getTimeZone().toZoneId())
                         .format(DateTimeFormatter.ofPattern(format));
+            } else if (value == null) {
+                return "NULL";
             }
             return value;
         }
+
+        public String toSql() {
+            StringBuilder sb = new StringBuilder();
+            sb.append("DEFAULT ");
+            if (value != null) {
+                sb.append('"').append(value).append('"');
+            } else {
+                sb.append("NULL");
+            }
+            return sb.toString();
+        }
     }
 
     // parameter initialized in constructor
@@ -662,7 +675,7 @@ public class ColumnDef {
         }
 
         if (defaultValue.isSet) {
-            sb.append("DEFAULT \"").append(defaultValue.value).append("\" ");
+            sb.append(defaultValue.toSql()).append(" ");
         }
         sb.append("COMMENT \"").append(comment).append("\"");
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/ColumnDefTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/ColumnDefTest.java
index 246dd5dc8ff..c8764a0a2e0 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ColumnDefTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ColumnDefTest.java
@@ -89,7 +89,7 @@ public class ColumnDefTest {
             ColumnDef column = new ColumnDef("col", intCol, false, 
AggregateType.REPLACE_IF_NOT_NULL, true, DefaultValue.NOT_SET, "");
             column.analyze(true);
             Assert.assertEquals(AggregateType.REPLACE_IF_NOT_NULL, 
column.getAggregateType());
-            Assert.assertEquals("`col` int REPLACE_IF_NOT_NULL NULL DEFAULT 
\"null\" COMMENT \"\"", column.toSql());
+            Assert.assertEquals("`col` int REPLACE_IF_NOT_NULL NULL DEFAULT 
NULL COMMENT \"\"", column.toSql());
         } // CHECKSTYLE IGNORE THIS LINE
         { // CHECKSTYLE IGNORE THIS LINE
             // not allow null
@@ -98,6 +98,12 @@ public class ColumnDefTest {
             Assert.assertEquals(AggregateType.REPLACE_IF_NOT_NULL, 
column.getAggregateType());
             Assert.assertEquals("`col` int REPLACE_IF_NOT_NULL NULL DEFAULT 
\"10\" COMMENT \"\"", column.toSql());
         } // CHECKSTYLE IGNORE THIS LINE
+        { // CHECKSTYLE IGNORE THIS LINE
+            ColumnDef column = new ColumnDef("col", intCol, false, 
AggregateType.REPLACE_IF_NOT_NULL, true, DefaultValue.NULL_DEFAULT_VALUE, "");
+            column.analyze(true);
+            Assert.assertEquals(AggregateType.REPLACE_IF_NOT_NULL, 
column.getAggregateType());
+            Assert.assertEquals("`col` int REPLACE_IF_NOT_NULL NULL DEFAULT 
NULL COMMENT \"\"", column.toSql());
+        } // CHECKSTYLE IGNORE THIS LINE
     }
 
     @Test(expected = AnalysisException.class)


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

Reply via email to