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 feb96f00b [#5359] fix(ob-catalog): fix ob catalog default value parse
error (#5378)
feb96f00b is described below
commit feb96f00b77b89a24693f870aa78d02717e1c036
Author: mchades <[email protected]>
AuthorDate: Thu Oct 31 14:20:30 2024 +0800
[#5359] fix(ob-catalog): fix ob catalog default value parse error (#5378)
### 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
---
.../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":