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

jshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 06febfbea [#4300] improvement(Mysql&PG catalog): use 
UnparsedExpression to represent unparsed column default value (#4301)
06febfbea is described below

commit 06febfbea1ad81b1dd4d41b5987a09a49aace75b
Author: mchades <[email protected]>
AuthorDate: Wed Jul 31 10:14:04 2024 +0800

    [#4300] improvement(Mysql&PG catalog): use UnparsedExpression to represent 
unparsed column default value (#4301)
    
    ### What changes were proposed in this pull request?
    
    use UnparsedExpression to represent unpared column default value
    
    ### Why are the changes needed?
    
    Fix: #4300
    
    ### Does this PR introduce _any_ user-facing change?
    
    yes, when loading a PG or MySQL table with an unparsed column default
    value, will use an UnparsedExpression instead of throw a exception
    
    ### How was this patch tested?
    
    modified tests
---
 .../rel/expressions/UnparsedExpression.java        |  5 +++
 .../MysqlColumnDefaultValueConverter.java          | 10 +++++-
 .../mysql/integration/test/CatalogMysqlIT.java     | 36 +++++++++++++++++++---
 .../PostgreSqlColumnDefaultValueConverter.java     |  4 ---
 4 files changed, 45 insertions(+), 10 deletions(-)

diff --git 
a/api/src/main/java/org/apache/gravitino/rel/expressions/UnparsedExpression.java
 
b/api/src/main/java/org/apache/gravitino/rel/expressions/UnparsedExpression.java
index c2cf790af..b7448f62d 100644
--- 
a/api/src/main/java/org/apache/gravitino/rel/expressions/UnparsedExpression.java
+++ 
b/api/src/main/java/org/apache/gravitino/rel/expressions/UnparsedExpression.java
@@ -77,5 +77,10 @@ public interface UnparsedExpression extends Expression {
     public int hashCode() {
       return Objects.hash(unparsedExpression);
     }
+
+    @Override
+    public String toString() {
+      return "UnparsedExpressionImpl{" + "unparsedExpression='" + 
unparsedExpression + '\'' + '}';
+    }
   }
 }
diff --git 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlColumnDefaultValueConverter.java
 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlColumnDefaultValueConverter.java
index daccd37e2..aea869d63 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlColumnDefaultValueConverter.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlColumnDefaultValueConverter.java
@@ -60,12 +60,20 @@ public class MysqlColumnDefaultValueConverter extends 
JdbcColumnDefaultValueConv
     switch (type.getTypeName().toLowerCase()) {
       case MysqlTypeConverter.TINYINT:
         return Literals.byteLiteral(Byte.valueOf(columnDefaultValue));
+      case MysqlTypeConverter.TINYINT_UNSIGNED:
+        return Literals.unsignedByteLiteral(Short.valueOf(columnDefaultValue));
       case MysqlTypeConverter.SMALLINT:
         return Literals.shortLiteral(Short.valueOf(columnDefaultValue));
+      case MysqlTypeConverter.SMALLINT_UNSIGNED:
+        return 
Literals.unsignedShortLiteral(Integer.valueOf(columnDefaultValue));
       case MysqlTypeConverter.INT:
         return Literals.integerLiteral(Integer.valueOf(columnDefaultValue));
+      case MysqlTypeConverter.INT_UNSIGNED:
+        return 
Literals.unsignedIntegerLiteral(Long.valueOf(columnDefaultValue));
       case MysqlTypeConverter.BIGINT:
         return Literals.longLiteral(Long.valueOf(columnDefaultValue));
+      case MysqlTypeConverter.BIGINT_UNSIGNED:
+        return Literals.unsignedLongLiteral(Decimal.of(columnDefaultValue));
       case MysqlTypeConverter.FLOAT:
         return Literals.floatLiteral(Float.valueOf(columnDefaultValue));
       case MysqlTypeConverter.DOUBLE:
@@ -95,7 +103,7 @@ public class MysqlColumnDefaultValueConverter extends 
JdbcColumnDefaultValueConv
       case JdbcTypeConverter.TEXT:
         return Literals.stringLiteral(columnDefaultValue);
       default:
-        throw new IllegalArgumentException("Unknown data type for literal: " + 
type);
+        return UnparsedExpression.of(columnDefaultValue);
     }
   }
 }
diff --git 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
index e1cae77e0..894b611ab 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
@@ -484,18 +484,18 @@ public class CatalogMysqlIT extends AbstractIT {
             + "  int_col_1 int default 0x01AF,\n"
             + "  int_col_2 int default (rand()),\n"
             + "  int_col_3 int default '3.321',\n"
+            + "  unsigned_int_col_1 INT UNSIGNED default 1,\n"
+            + "  unsigned_bigint_col_1 BIGINT(20) UNSIGNED UNSIGNED default 
0,\n"
             + "  double_col_1 double default 123.45,\n"
             + "  varchar20_col_1 varchar(20) default (10),\n"
             + "  varchar100_col_1 varchar(100) default 'CURRENT_TIMESTAMP',\n"
             + "  varchar200_col_1 varchar(200) default 'curdate()',\n"
             + "  varchar200_col_2 varchar(200) default (curdate()),\n"
             + "  varchar200_col_3 varchar(200) default (CURRENT_TIMESTAMP),\n"
-            // todo: uncomment when we support datetime type
-            + "  /* we don't support datetime type now\n"
             + "  datetime_col_1 datetime default CURRENT_TIMESTAMP,\n"
             + "  datetime_col_2 datetime default current_timestamp,\n"
             + "  datetime_col_3 datetime default null,\n"
-            + "  datetime_col_4 datetime default 19830905, */\n"
+            + "  datetime_col_4 datetime default 19830905,\n"
             + "  date_col_1 date default (CURRENT_DATE),\n"
             + "  date_col_2 date,\n"
             + "  date_col_3 date DEFAULT (CURRENT_DATE + INTERVAL 1 YEAR),\n"
@@ -503,7 +503,8 @@ public class CatalogMysqlIT extends AbstractIT {
             + "  date_col_5 date DEFAULT '2024-04-01',\n"
             + "  timestamp_col_1 timestamp default '2012-12-31 11:30:45',\n"
             + "  timestamp_col_2 timestamp default 19830905,\n"
-            + "  decimal_6_2_col_1 decimal(6, 2) default 1.2\n"
+            + "  decimal_6_2_col_1 decimal(6, 2) default 1.2,\n"
+            + "  bit_col_1 bit default b'1'\n"
             + ");\n";
 
     mysqlService.executeQuery(sql);
@@ -521,6 +522,13 @@ public class CatalogMysqlIT extends AbstractIT {
         case "int_col_3":
           Assertions.assertEquals(Literals.integerLiteral(3), 
column.defaultValue());
           break;
+        case "unsigned_int_col_1":
+          Assertions.assertEquals(Literals.unsignedIntegerLiteral(1L), 
column.defaultValue());
+          break;
+        case "unsigned_bigint_col_1":
+          Assertions.assertEquals(
+              Literals.unsignedLongLiteral(Decimal.of("0")), 
column.defaultValue());
+          break;
         case "double_col_1":
           Assertions.assertEquals(Literals.doubleLiteral(123.45), 
column.defaultValue());
           break;
@@ -540,6 +548,17 @@ public class CatalogMysqlIT extends AbstractIT {
         case "varchar200_col_3":
           Assertions.assertEquals(UnparsedExpression.of("now()"), 
column.defaultValue());
           break;
+        case "datetime_col_1":
+        case "datetime_col_2":
+          Assertions.assertEquals(DEFAULT_VALUE_OF_CURRENT_TIMESTAMP, 
column.defaultValue());
+          break;
+        case "datetime_col_3":
+          Assertions.assertEquals(Literals.NULL, column.defaultValue());
+          break;
+        case "datetime_col_4":
+          Assertions.assertEquals(
+              Literals.timestampLiteral("1983-09-05T00:00"), 
column.defaultValue());
+          break;
         case "date_col_1":
           Assertions.assertEquals(UnparsedExpression.of("curdate()"), 
column.defaultValue());
           break;
@@ -569,8 +588,15 @@ public class CatalogMysqlIT extends AbstractIT {
           Assertions.assertEquals(
               Literals.decimalLiteral(Decimal.of("1.2", 6, 2)), 
column.defaultValue());
           break;
+        case "bit_col_1":
+          Assertions.assertEquals(UnparsedExpression.of("b'1'"), 
column.defaultValue());
+          break;
         default:
-          Assertions.fail("Unexpected column name: " + column.name());
+          Assertions.fail(
+              "Unexpected column name: "
+                  + column.name()
+                  + ", default value: "
+                  + column.defaultValue());
       }
     }
   }
diff --git 
a/catalogs/catalog-jdbc-postgresql/src/main/java/org/apache/gravitino/catalog/postgresql/converter/PostgreSqlColumnDefaultValueConverter.java
 
b/catalogs/catalog-jdbc-postgresql/src/main/java/org/apache/gravitino/catalog/postgresql/converter/PostgreSqlColumnDefaultValueConverter.java
index e6f2c6cac..091c99dd5 100644
--- 
a/catalogs/catalog-jdbc-postgresql/src/main/java/org/apache/gravitino/catalog/postgresql/converter/PostgreSqlColumnDefaultValueConverter.java
+++ 
b/catalogs/catalog-jdbc-postgresql/src/main/java/org/apache/gravitino/catalog/postgresql/converter/PostgreSqlColumnDefaultValueConverter.java
@@ -67,10 +67,6 @@ public class PostgreSqlColumnDefaultValueConverter extends 
JdbcColumnDefaultValu
       if (columnDefaultValue.equals(CURRENT_TIMESTAMP)) {
         return DEFAULT_VALUE_OF_CURRENT_TIMESTAMP;
       }
-      if (e instanceof IllegalArgumentException
-          && e.getMessage().contains("Unknown data type for literal")) {
-        throw e;
-      }
       return UnparsedExpression.of(columnDefaultValue);
     }
   }

Reply via email to