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 4f7ac0794 [#5691] fix(doris-catalog): Fix errors in type mapping about 
timestamp in Doris catalog. (#5693)
4f7ac0794 is described below

commit 4f7ac0794dc53a49f3e0c8306264fa88fbb10c68
Author: Qi Yu <[email protected]>
AuthorDate: Thu Nov 28 21:40:24 2024 +0800

    [#5691] fix(doris-catalog): Fix errors in type mapping about timestamp in 
Doris catalog. (#5693)
    
    ### What changes were proposed in this pull request?
    
    When loading table with datetime column from Doris table, we should
    convert it to Gravitno timestamp without timezone NOT
    timestamp_tz(timestamp with timezone)
    
    ### Why are the changes needed?
    
    According to docs
    1.
    
https://gravitino.apache.org/docs/0.7.0-incubating/jdbc-doris-catalog#table-column-types
    2.
    
https://doris.apache.org/docs/1.2/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE
    
    it's a bug when converting Gravitino timestamp type to Doris datetime
    type.
    
    Fix: #5691
    
    ### Does this PR introduce _any_ user-facing change?
    
    N/A
    
    ### How was this patch tested?
    
    UT & IT
---
 .../doris/converter/DorisTypeConverter.java        |  2 +-
 .../doris/integration/test/CatalogDorisIT.java     | 37 ++++++++++++++++++++++
 .../doris/operation/TestDorisTableOperations.java  |  5 +++
 3 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
index e855a46ca..8121e0eb1 100644
--- 
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
+++ 
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
@@ -59,7 +59,7 @@ public class DorisTypeConverter extends JdbcTypeConverter {
       case DATE:
         return Types.DateType.get();
       case DATETIME:
-        return Types.TimestampType.withTimeZone();
+        return Types.TimestampType.withoutTimeZone();
       case CHAR:
         return 
Types.FixedCharType.of(Integer.parseInt(typeBean.getColumnSize()));
       case VARCHAR:
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 ca04c03c4..9288c9616 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
@@ -35,6 +35,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.gravitino.Catalog;
 import org.apache.gravitino.NameIdentifier;
@@ -863,6 +864,42 @@ public class CatalogDorisIT extends BaseIT {
     assertPartition(p5, loadedListPartitions.get("p5"));
   }
 
+  @Test
+  void testTableWithTimeStampColumn() {
+    // create a table
+    String tableName = 
GravitinoITUtils.genRandomName("test_table_with_timestamp_column");
+    NameIdentifier tableIdentifier = NameIdentifier.of(schemaName, tableName);
+    Column[] columns = createColumns();
+    columns =
+        ArrayUtils.add(columns, Column.of("timestamp_col", 
Types.TimestampType.withoutTimeZone()));
+    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(
+        tableIdentifier,
+        columns,
+        table_comment,
+        properties,
+        Transforms.EMPTY_TRANSFORM,
+        distribution,
+        null,
+        indexes);
+
+    // load table
+    Table loadTable = tableCatalog.loadTable(tableIdentifier);
+    Column timestampColumn =
+        Arrays.stream(loadTable.columns())
+            .filter(c -> "timestamp_col".equals(c.name()))
+            .findFirst()
+            .get();
+
+    Assertions.assertEquals(Types.TimestampType.withoutTimeZone(), 
timestampColumn.dataType());
+  }
+
   @Test
   void testNonPartitionedTable() {
     // create a non-partitioned table
diff --git 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
index 8bc082073..a9dfb0ed6 100644
--- 
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
+++ 
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
@@ -433,6 +433,11 @@ public class TestDorisTableOperations extends TestDoris {
         
JdbcColumn.builder().withName("col_11").withType(Types.FixedCharType.of(10)).build());
     
columns.add(JdbcColumn.builder().withName("col_12").withType(Types.VarCharType.of(10)).build());
     
columns.add(JdbcColumn.builder().withName("col_13").withType(Types.StringType.get()).build());
+    columns.add(
+        JdbcColumn.builder()
+            .withName("col_14")
+            .withType(Types.TimestampType.withoutTimeZone())
+            .build());
 
     Distribution distribution =
         Distributions.hash(DEFAULT_BUCKET_SIZE, NamedReference.field("col_1"));

Reply via email to