This is an automated email from the ASF dual-hosted git repository.
mchades 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 256cad05c2 [#7900] fix(catalogs): Fix jdbc catalogs DateTimeType
column load with default value (#7901)
256cad05c2 is described below
commit 256cad05c2eb0176849f41b7f265abb86b415685
Author: qbhan <[email protected]>
AuthorDate: Tue Aug 5 10:02:41 2025 +0800
[#7900] fix(catalogs): Fix jdbc catalogs DateTimeType column load with
default value (#7901)
### What changes were proposed in this pull request?
Update DateTimeType column default value formatter.
- TimeType: "HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]"
- TimestampType: "yyyy-MM-dd
HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]"
### Why are the changes needed?
Fix: #7900
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
local tests
Co-authored-by: Mini Yu <[email protected]>
---
.../rel/expressions/literals/Literals.java | 20 ++++++
.../converter/JdbcColumnDefaultValueConverter.java | 12 +++-
.../DorisColumnDefaultValueConverter.java | 5 +-
.../doris/integration/test/CatalogDorisIT.java | 78 ++++++++++++++++++++++
.../MysqlColumnDefaultValueConverter.java | 6 +-
.../mysql/integration/test/CatalogMysqlIT.java | 8 +++
.../OceanBaseColumnDefaultValueConverter.java | 2 +-
.../integration/test/CatalogOceanBaseIT.java | 4 ++
.../PostgreSqlColumnDefaultValueConverter.java | 9 ++-
.../integration/test/CatalogPostgreSqlIT.java | 51 ++++++++++++--
.../StarRocksColumnDefaultValueConverter.java | 2 +-
.../integration/test/CatalogStarRocksIT.java | 71 ++++++++++++++++++++
12 files changed, 247 insertions(+), 21 deletions(-)
diff --git
a/api/src/main/java/org/apache/gravitino/rel/expressions/literals/Literals.java
b/api/src/main/java/org/apache/gravitino/rel/expressions/literals/Literals.java
index f789afbb88..7d9d237fea 100644
---
a/api/src/main/java/org/apache/gravitino/rel/expressions/literals/Literals.java
+++
b/api/src/main/java/org/apache/gravitino/rel/expressions/literals/Literals.java
@@ -176,6 +176,16 @@ public class Literals {
return of(value, Types.DateType.get());
}
+ /**
+ * Creates a date type literal with the given value.
+ *
+ * @param value the date literal value, must be in the format "yyyy-MM-dd"
+ * @return a new {@link Literal} instance
+ */
+ public static LiteralImpl<LocalDate> dateLiteral(String value) {
+ return dateLiteral(LocalDate.parse(value));
+ }
+
/**
* Creates a time type literal with the given value.
*
@@ -186,6 +196,16 @@ public class Literals {
return of(value, Types.TimeType.get());
}
+ /**
+ * Creates a time type literal with the given value.
+ *
+ * @param value the time literal value, must be in the format "HH:mm:ss"
+ * @return a new {@link Literal} instance
+ */
+ public static LiteralImpl<LocalTime> timeLiteral(String value) {
+ return timeLiteral(LocalTime.parse(value));
+ }
+
/**
* Creates a timestamp type literal with the given value.
*
diff --git
a/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/converter/JdbcColumnDefaultValueConverter.java
b/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/converter/JdbcColumnDefaultValueConverter.java
index 0258c3a754..a72c4cbb7f 100644
---
a/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/converter/JdbcColumnDefaultValueConverter.java
+++
b/catalogs/catalog-jdbc-common/src/main/java/org/apache/gravitino/catalog/jdbc/converter/JdbcColumnDefaultValueConverter.java
@@ -20,21 +20,25 @@ package org.apache.gravitino.catalog.jdbc.converter;
import static org.apache.gravitino.rel.Column.DEFAULT_VALUE_NOT_SET;
+import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.apache.gravitino.rel.expressions.Expression;
import org.apache.gravitino.rel.expressions.FunctionExpression;
import org.apache.gravitino.rel.expressions.literals.Literal;
import org.apache.gravitino.rel.expressions.literals.Literals;
import org.apache.gravitino.rel.types.Type;
+import org.apache.gravitino.rel.types.Types;
public class JdbcColumnDefaultValueConverter {
protected static final String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP";
protected static final String NULL = "NULL";
protected static final DateTimeFormatter DATE_TIME_FORMATTER =
- DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ DateTimeFormatter.ofPattern("yyyy-MM-dd
HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
protected static final DateTimeFormatter DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ protected static final DateTimeFormatter TIME_FORMATTER =
+
DateTimeFormatter.ofPattern("HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
public String fromGravitino(Expression defaultValue) {
if (DEFAULT_VALUE_NOT_SET.equals(defaultValue)) {
@@ -58,6 +62,12 @@ public class JdbcColumnDefaultValueConverter {
return NULL;
} else if (type instanceof Type.NumericType) {
return literal.value().toString();
+ } else if (type instanceof Types.TimestampType) {
+ /** @see LocalDateTime#toString() would return like
'yyyy-MM-ddTHH:mm:ss' */
+ if (literal.value() instanceof String || literal.value() instanceof
LocalDateTime) {
+ return String.format("'%s'", literal.value().toString().replace("T",
" "));
+ }
+ return String.format("'%s'", literal.value());
} else {
return String.format("'%s'", literal.value());
}
diff --git
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisColumnDefaultValueConverter.java
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisColumnDefaultValueConverter.java
index d4f81ac822..e9a7a7f898 100644
---
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisColumnDefaultValueConverter.java
+++
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisColumnDefaultValueConverter.java
@@ -32,7 +32,6 @@ import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP
import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.LocalTime;
import
org.apache.gravitino.catalog.jdbc.converter.JdbcColumnDefaultValueConverter;
import org.apache.gravitino.catalog.jdbc.converter.JdbcTypeConverter;
import org.apache.gravitino.rel.expressions.Expression;
@@ -83,9 +82,7 @@ public class DorisColumnDefaultValueConverter extends
JdbcColumnDefaultValueConv
return Literals.decimalLiteral(
Decimal.of(columnDefaultValue, columnType.getColumnSize(),
columnType.getScale()));
case JdbcTypeConverter.DATE:
- return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
- case JdbcTypeConverter.TIME:
- return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_FORMATTER));
case JdbcTypeConverter.TIMESTAMP:
case DATETIME:
return CURRENT_TIMESTAMP.equals(columnDefaultValue)
diff --git
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
index 47d9f851f3..977fbfdf29 100644
---
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
+++
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
@@ -19,6 +19,7 @@
package org.apache.gravitino.catalog.doris.integration.test;
import static
org.apache.gravitino.integration.test.util.ITUtils.assertPartition;
+import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -27,6 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -1061,4 +1064,79 @@ public class CatalogDorisIT extends BaseIT {
distribution.expressions(), loadTable.distribution().expressions());
tableCatalog.dropTable(tableIdentifier);
}
+
+ @Test
+ void testColumnDefaultValue() {
+
+ Column col_default_value_date =
+ Column.of(
+ "col_default_value_date",
+ Types.DateType.get(),
+ "col_default_value_date",
+ false,
+ false,
+ Literals.dateLiteral("2024-01-01"));
+
+ Column col_default_value_timestamp =
+ Column.of(
+ "col_default_value_timestamp",
+ Types.TimestampType.withoutTimeZone(),
+ "col_default_value_timestamp",
+ false,
+ false,
+ Literals.timestampLiteral("2024-01-01T01:01:01"));
+
+ Column col_default_value_timestamp_2 =
+ Column.of(
+ "col_default_value_timestamp_2",
+ Types.TimestampType.withoutTimeZone(),
+ "col_default_value_timestamp_2",
+ false,
+ false,
+ DEFAULT_VALUE_OF_CURRENT_TIMESTAMP);
+ Column[] columns = createColumns();
+
+ columns =
+ ArrayUtils.addAll(
+ columns,
+ col_default_value_date,
+ col_default_value_timestamp,
+ col_default_value_timestamp_2);
+
+ NameIdentifier tableIdent =
+ NameIdentifier.of(
+ schemaName,
GravitinoITUtils.genRandomName("test_table_with_default_value"));
+ Distribution distribution = createDistribution();
+
+ Index[] indexes =
+ new Index[] {
+ Indexes.of(Index.IndexType.PRIMARY_KEY, "k1_index", new String[][]
{{DORIS_COL_NAME1}})
+ };
+
+ Map<String, String> properties = createTableProperties();
+ TableCatalog tableCatalog = catalog.asTableCatalog();
+ tableCatalog.createTable(
+ tableIdent,
+ columns,
+ table_comment,
+ properties,
+ Transforms.EMPTY_TRANSFORM,
+ distribution,
+ null,
+ indexes);
+
+ Table loadedTable = tableCatalog.loadTable(tableIdent);
+
+ Column[] colDefaultValues =
+ Arrays.stream(loadedTable.columns())
+ .filter(c -> c.name().startsWith("col_default_value_"))
+ .toArray(Column[]::new);
+
+ Assertions.assertEquals(
+ Literals.dateLiteral(LocalDate.of(2024, 1, 1)),
colDefaultValues[0].defaultValue());
+ Assertions.assertEquals(
+ Literals.timestampLiteral(LocalDateTime.of(2024, 1, 1, 1, 1, 1)),
+ colDefaultValues[1].defaultValue());
+ Assertions.assertEquals(DEFAULT_VALUE_OF_CURRENT_TIMESTAMP,
colDefaultValues[2].defaultValue());
+ }
}
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 d0acb60387..ad7defff30 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
@@ -24,7 +24,6 @@ import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import
org.apache.gravitino.catalog.jdbc.converter.JdbcColumnDefaultValueConverter;
import org.apache.gravitino.catalog.jdbc.converter.JdbcTypeConverter;
@@ -36,9 +35,6 @@ import org.apache.gravitino.rel.types.Types;
public class MysqlColumnDefaultValueConverter extends
JdbcColumnDefaultValueConverter {
- private static final DateTimeFormatter DATE_TIME_FORMATTER =
- DateTimeFormatter.ofPattern("yyyy-MM-dd
HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
-
@Override
public Expression toGravitino(
JdbcTypeConverter.JdbcTypeBean type,
@@ -90,7 +86,7 @@ public class MysqlColumnDefaultValueConverter extends
JdbcColumnDefaultValueConv
case JdbcTypeConverter.DATE:
return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_FORMATTER));
case JdbcTypeConverter.TIME:
- return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
TIME_FORMATTER));
case JdbcTypeConverter.TIMESTAMP:
case MysqlTypeConverter.DATETIME:
if (columnDefaultValue.startsWith(CURRENT_TIMESTAMP)) {
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 981619ce5d..1e47f72496 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
@@ -528,6 +528,8 @@ public class CatalogMysqlIT extends BaseIT {
+ " 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"
+ + " time_col_1 time default '00:00:00',\n"
+ + " time_col_2 time default (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"
@@ -585,6 +587,12 @@ public class CatalogMysqlIT extends BaseIT {
case "varchar200_col_3":
Assertions.assertEquals(UnparsedExpression.of("now()"),
column.defaultValue());
break;
+ case "time_col_1":
+ Assertions.assertEquals(Literals.timeLiteral("00:00:00"),
column.defaultValue());
+ break;
+ case "time_col_2":
+ 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());
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 6c999a6d77..4294a66d38 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
@@ -92,7 +92,7 @@ public class OceanBaseColumnDefaultValueConverter extends
JdbcColumnDefaultValue
case JdbcTypeConverter.DATE:
return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_FORMATTER));
case JdbcTypeConverter.TIME:
- return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
TIME_FORMATTER));
case JdbcTypeConverter.TIMESTAMP:
case OceanBaseTypeConverter.DATETIME:
return CURRENT_TIMESTAMP.matcher(columnDefaultValue).matches()
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 c29a34452a..60ef1c1a37 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
@@ -495,6 +495,7 @@ public class CatalogOceanBaseIT extends BaseIT {
+ " double_col_1 double default 123.45,\n"
+ " varchar100_col_1 varchar(100) default 'CURRENT_TIMESTAMP',\n"
+ " varchar200_col_1 varchar(200) default 'curdate()',\n"
+ + " time_col_1 time default '00:00:00',\n"
+ " datetime_col_1 datetime default CURRENT_TIMESTAMP,\n"
+ " datetime_col_2 datetime default current_timestamp,\n"
+ " datetime_col_3 datetime default null,\n"
@@ -540,6 +541,9 @@ public class CatalogOceanBaseIT extends BaseIT {
case "varchar200_col_1":
Assertions.assertEquals(Literals.varcharLiteral(200, "curdate()"),
column.defaultValue());
break;
+ case "time_col_1":
+ Assertions.assertEquals(Literals.timeLiteral("00:00:00"),
column.defaultValue());
+ break;
case "datetime_col_1":
case "datetime_col_2":
case "timestamp_col_3":
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 b510d6244c..0b4229fcf8 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
@@ -23,6 +23,7 @@ import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_NOT_SET;
import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -98,9 +99,13 @@ public class PostgreSqlColumnDefaultValueConverter extends
JdbcColumnDefaultValu
return Literals.decimalLiteral(
Decimal.of(columnDefaultValue, type.getColumnSize(),
type.getScale()));
case JdbcTypeConverter.DATE:
- return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_FORMATTER));
+ case JdbcTypeConverter.TIME:
+ return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
TIME_FORMATTER));
+ case JdbcTypeConverter.TIMESTAMP:
case PostgreSqlTypeConverter.TIMESTAMP_TZ:
- return Literals.timeLiteral(LocalTime.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.timestampLiteral(
+ LocalDateTime.parse(columnDefaultValue, DATE_TIME_FORMATTER));
case VARCHAR:
return Literals.varcharLiteral(type.getColumnSize(),
columnDefaultValue);
case PostgreSqlTypeConverter.BPCHAR:
diff --git
a/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
b/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
index a33d0ab0da..b944629c0e 100644
---
a/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
+++
b/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
@@ -27,6 +27,9 @@ import com.google.common.collect.Sets;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
@@ -917,8 +920,32 @@ public class CatalogPostgreSqlIT extends BaseIT {
true,
false,
Literals.integerLiteral(1000));
+ Column col7 =
+ Column.of(
+ "col_7",
+ Types.DateType.get(),
+ "col_7_comment",
+ false,
+ false,
+ Literals.dateLiteral("2024-01-01"));
+ Column col8 =
+ Column.of(
+ "col_8",
+ Types.TimestampType.withoutTimeZone(),
+ "col_8_comment",
+ false,
+ false,
+ Literals.timestampLiteral("2024-01-01T01:01:01"));
+ Column col9 =
+ Column.of(
+ "col_9",
+ Types.TimeType.get(),
+ "col_9_comment",
+ false,
+ false,
+ Literals.timeLiteral("01:01:01"));
- Column[] newColumns = new Column[] {col1, col2, col3, col4, col5, col6};
+ Column[] newColumns = new Column[] {col1, col2, col3, col4, col5, col6,
col7, col8, col9};
NameIdentifier tableIdent =
NameIdentifier.of(schemaName,
GravitinoITUtils.genRandomName("pg_it_table"));
@@ -934,6 +961,13 @@ public class CatalogPostgreSqlIT extends BaseIT {
Assertions.assertEquals(
Literals.varcharLiteral(255, "current_timestamp"),
loadedTable.columns()[4].defaultValue());
Assertions.assertEquals(Literals.integerLiteral(1000),
loadedTable.columns()[5].defaultValue());
+ Assertions.assertEquals(
+ Literals.dateLiteral(LocalDate.of(2024, 1, 1)),
loadedTable.columns()[6].defaultValue());
+ Assertions.assertEquals(
+ Literals.timestampLiteral(LocalDateTime.of(2024, 1, 1, 1, 1, 1)),
+ loadedTable.columns()[7].defaultValue());
+ Assertions.assertEquals(
+ Literals.timeLiteral(LocalTime.of(1, 1, 1)),
loadedTable.columns()[8].defaultValue());
}
@Test
@@ -1001,9 +1035,10 @@ public class CatalogPostgreSqlIT extends BaseIT {
+ " date_col_2 date,\n"
+ " date_col_3 date default (current_date + interval '1
year'),\n"
+ " date_col_4 date default current_date,\n"
- // todo: uncomment when we support timestamp in PG catalog
- // + " timestamp_col_1 timestamp default '2012-12-31
11:30:45',\n"
- + " decimal_6_2_col_1 decimal(6, 2) default 1.2\n"
+ + " date_col_5 date default '2012-12-31',\n"
+ + " decimal_6_2_col_1 decimal(6, 2) default 1.2,\n"
+ + " timestamp_col_1 timestamp default '2012-12-31 11:30:45',\n"
+ + " time_col_1 time default '11:30:45'\n"
+ ");";
System.out.println(sql);
postgreSqlService.executeQuery(sql);
@@ -1057,13 +1092,15 @@ public class CatalogPostgreSqlIT extends BaseIT {
case "date_col_4":
Assertions.assertEquals(UnparsedExpression.of("CURRENT_DATE"),
column.defaultValue());
break;
+ case "date_col_5":
+ Assertions.assertEquals(Literals.dateLiteral("2012-12-31"),
column.defaultValue());
+ break;
case "timestamp_col_1":
Assertions.assertEquals(
Literals.timestampLiteral("2012-12-31T11:30:45"),
column.defaultValue());
break;
- case "timestamp_col_2":
- Assertions.assertEquals(
- Literals.timestampLiteral("1983-09-05T00:00:00"),
column.defaultValue());
+ case "time_col_1":
+ Assertions.assertEquals(Literals.timeLiteral("11:30:45"),
column.defaultValue());
break;
case "decimal_6_2_col_1":
Assertions.assertEquals(
diff --git
a/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/converter/StarRocksColumnDefaultValueConverter.java
b/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/converter/StarRocksColumnDefaultValueConverter.java
index d449f29b1a..4da2f8df41 100644
---
a/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/converter/StarRocksColumnDefaultValueConverter.java
+++
b/catalogs/catalog-jdbc-starrocks/src/main/java/org/apache/gravitino/catalog/starrocks/converter/StarRocksColumnDefaultValueConverter.java
@@ -84,7 +84,7 @@ public class StarRocksColumnDefaultValueConverter extends
JdbcColumnDefaultValue
return Literals.decimalLiteral(
Decimal.of(columnDefaultValue, columnType.getColumnSize(),
columnType.getScale()));
case DATE:
- return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_TIME_FORMATTER));
+ return Literals.dateLiteral(LocalDate.parse(columnDefaultValue,
DATE_FORMATTER));
case DATETIME:
return CURRENT_TIMESTAMP.equals(columnDefaultValue)
? DEFAULT_VALUE_OF_CURRENT_TIMESTAMP
diff --git
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
index 5437f363fe..a41e92adea 100644
---
a/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
+++
b/catalogs/catalog-jdbc-starrocks/src/test/java/org/apache/gravitino/catalog/starrocks/integration/test/CatalogStarRocksIT.java
@@ -19,6 +19,7 @@
package org.apache.gravitino.catalog.starrocks.integration.test;
import static
org.apache.gravitino.integration.test.util.ITUtils.assertPartition;
+import static
org.apache.gravitino.rel.Column.DEFAULT_VALUE_OF_CURRENT_TIMESTAMP;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -27,6 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -925,4 +928,72 @@ public class CatalogStarRocksIT extends BaseIT {
distribution.expressions(), loadTable.distribution().expressions());
tableCatalog.dropTable(tableIdentifier);
}
+
+ @Test
+ void testColumnDefaultValue() {
+ // create a table
+ String tableName =
GravitinoITUtils.genRandomName("test_table_with_defaule_value");
+ NameIdentifier tableIdentifier = NameIdentifier.of(schemaName, tableName);
+ Column[] columns = createColumns();
+ Column col_default_value_date =
+ Column.of(
+ "col_default_value_date",
+ Types.DateType.get(),
+ "col_default_value_date",
+ false,
+ false,
+ Literals.dateLiteral("2024-01-01"));
+
+ Column col_default_value_timestamp =
+ Column.of(
+ "col_default_value_timestamp",
+ Types.TimestampType.withoutTimeZone(),
+ "col_default_value_timestamp",
+ false,
+ false,
+ Literals.timestampLiteral("2024-01-01T01:01:01"));
+
+ Column col_default_value_timestamp_2 =
+ Column.of(
+ "col_default_value_timestamp_2",
+ Types.TimestampType.withoutTimeZone(),
+ "col_default_value_timestamp_2",
+ false,
+ false,
+ DEFAULT_VALUE_OF_CURRENT_TIMESTAMP);
+ columns =
+ ArrayUtils.addAll(
+ columns,
+ col_default_value_date,
+ col_default_value_timestamp,
+ col_default_value_timestamp_2);
+ Distribution distribution = createDistribution();
+
+ Map<String, String> properties = createTableProperties();
+ TableCatalog tableCatalog = catalog.asTableCatalog();
+ tableCatalog.createTable(
+ tableIdentifier,
+ columns,
+ table_comment,
+ properties,
+ Transforms.EMPTY_TRANSFORM,
+ distribution,
+ null,
+ null);
+
+ // load table
+ Table loadTable = tableCatalog.loadTable(tableIdentifier);
+
+ Column[] colDefaultValues =
+ Arrays.stream(loadTable.columns())
+ .filter(c -> c.name().startsWith("col_default_value_"))
+ .toArray(Column[]::new);
+
+ Assertions.assertEquals(
+ Literals.dateLiteral(LocalDate.of(2024, 1, 1)),
colDefaultValues[0].defaultValue());
+ Assertions.assertEquals(
+ Literals.timestampLiteral(LocalDateTime.of(2024, 1, 1, 1, 1, 1)),
+ colDefaultValues[1].defaultValue());
+ Assertions.assertEquals(DEFAULT_VALUE_OF_CURRENT_TIMESTAMP,
colDefaultValues[2].defaultValue());
+ }
}