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

mchades pushed a commit to branch branch-0.7
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-0.7 by this push:
     new 5d1b8ae03 [#5359] fix(ob-catalog): fix ob catalog default value parse 
error (#5393)
5d1b8ae03 is described below

commit 5d1b8ae03b8b95fea43f7ae584be4df1bf5e5f4a
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Oct 31 15:53:26 2024 +0800

    [#5359] fix(ob-catalog): fix ob catalog default value parse error (#5393)
    
    ### What changes were proposed in this pull request?
    
    fix ob catalog default value parse error
    
    ### Why are the changes needed?
    
    For OceanBase catalog, the `IS_GENERATEDCOLUMN` value of the column
    ResultSet is set to `NO`, which is causing `isExpression` to be false
    and leading to a parse error.
    
    Fix: #5359
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    tests added
    
    Co-authored-by: mchades <[email protected]>
---
 .../gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java | 5 +++++
 .../converter/OceanBaseColumnDefaultValueConverter.java          | 9 +++++++--
 .../catalog/oceanbase/integration/test/CatalogOceanBaseIT.java   | 2 ++
 3 files changed, 14 insertions(+), 2 deletions(-)

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 9d1a80b49..4d4237d72 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
@@ -488,6 +488,7 @@ public class CatalogMysqlIT extends BaseIT {
             + "  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"
+            + "  timestamp_col_3 timestamp(6) default CURRENT_TIMESTAMP(6),\n"
             + "  decimal_6_2_col_1 decimal(6, 2) default 1.2,\n"
             + "  bit_col_1 bit default b'1'\n"
             + ");\n";
@@ -569,6 +570,10 @@ public class CatalogMysqlIT extends BaseIT {
           Assertions.assertEquals(
               Literals.timestampLiteral("1983-09-05T00:00:00"), 
column.defaultValue());
           break;
+        case "timestamp_col_3":
+          Assertions.assertEquals(
+              UnparsedExpression.of("CURRENT_TIMESTAMP(6)"), 
column.defaultValue());
+          break;
         case "decimal_6_2_col_1":
           Assertions.assertEquals(
               Literals.decimalLiteral(Decimal.of("1.2", 6, 2)), 
column.defaultValue());
diff --git 
a/catalogs/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/converter/OceanBaseColumnDefaultValueConverter.java
 
b/catalogs/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/converter/OceanBaseColumnDefaultValueConverter.java
index 4f151290b..6677ed05d 100644
--- 
a/catalogs/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/converter/OceanBaseColumnDefaultValueConverter.java
+++ 
b/catalogs/catalog-jdbc-oceanbase/src/main/java/org/apache/gravitino/catalog/oceanbase/converter/OceanBaseColumnDefaultValueConverter.java
@@ -25,6 +25,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Objects;
+import java.util.regex.Pattern;
 import 
org.apache.gravitino.catalog.jdbc.converter.JdbcColumnDefaultValueConverter;
 import org.apache.gravitino.catalog.jdbc.converter.JdbcTypeConverter;
 import org.apache.gravitino.rel.expressions.Expression;
@@ -35,6 +36,10 @@ import org.apache.gravitino.rel.types.Types;
 
 public class OceanBaseColumnDefaultValueConverter extends 
JdbcColumnDefaultValueConverter {
 
+  // match CURRENT_TIMESTAMP or CURRENT_TIMESTAMP(fsp)
+  private static final Pattern CURRENT_TIMESTAMP =
+      Pattern.compile("^CURRENT_TIMESTAMP(\\(\\d+\\))?$");
+
   @Override
   public Expression toGravitino(
       JdbcTypeConverter.JdbcTypeBean type,
@@ -50,7 +55,7 @@ public class OceanBaseColumnDefaultValueConverter extends 
JdbcColumnDefaultValue
     }
 
     if (isExpression) {
-      if (columnDefaultValue.equals(CURRENT_TIMESTAMP)) {
+      if (CURRENT_TIMESTAMP.matcher(columnDefaultValue).matches()) {
         return DEFAULT_VALUE_OF_CURRENT_TIMESTAMP;
       }
       // The parsing of OceanBase expressions is complex, so we are not 
currently undertaking the
@@ -93,7 +98,7 @@ public class OceanBaseColumnDefaultValueConverter extends 
JdbcColumnDefaultValue
         return Literals.timeLiteral(LocalTime.parse(columnDefaultValue, 
DATE_TIME_FORMATTER));
       case JdbcTypeConverter.TIMESTAMP:
       case OceanBaseTypeConverter.DATETIME:
-        return CURRENT_TIMESTAMP.equals(columnDefaultValue)
+        return CURRENT_TIMESTAMP.matcher(columnDefaultValue).matches()
             ? DEFAULT_VALUE_OF_CURRENT_TIMESTAMP
             : Literals.timestampLiteral(
                 LocalDateTime.parse(columnDefaultValue, DATE_TIME_FORMATTER));
diff --git 
a/catalogs/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/integration/test/CatalogOceanBaseIT.java
 
b/catalogs/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/integration/test/CatalogOceanBaseIT.java
index 591e333c8..edcc9354b 100644
--- 
a/catalogs/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/integration/test/CatalogOceanBaseIT.java
+++ 
b/catalogs/catalog-jdbc-oceanbase/src/test/java/org/apache/gravitino/catalog/oceanbase/integration/test/CatalogOceanBaseIT.java
@@ -473,6 +473,7 @@ public class CatalogOceanBaseIT extends BaseIT {
             + "  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"
+            + "  timestamp_col_3 timestamp(6) default CURRENT_TIMESTAMP(6),\n"
             + "  decimal_6_2_col_1 decimal(6, 2) default 1.2,\n"
             + "  bit_col_1 bit default b'1'\n"
             + ");\n";
@@ -511,6 +512,7 @@ public class CatalogOceanBaseIT extends BaseIT {
           break;
         case "datetime_col_1":
         case "datetime_col_2":
+        case "timestamp_col_3":
           Assertions.assertEquals(DEFAULT_VALUE_OF_CURRENT_TIMESTAMP, 
column.defaultValue());
           break;
         case "datetime_col_3":

Reply via email to