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 239e78a9e [#5659] improvement(catalog-mysql) : support load MySQL 
BOOLEAN data in Trino (#5773)
239e78a9e is described below

commit 239e78a9e69400f0dd18917d1516bf7dd62f0e07
Author: Xiaojian Sun <[email protected]>
AuthorDate: Tue Dec 10 11:41:47 2024 +0800

    [#5659] improvement(catalog-mysql) : support load MySQL BOOLEAN data in 
Trino (#5773)
    
    ### Why are the changes needed?
    
    
    Fix: https://github.com/apache/gravitino/issues/5659
    
    
    ### How was this patch tested?
    
    
![image](https://github.com/user-attachments/assets/e01f43ac-656f-4b4d-bb1f-32a604f77068)
---
 .../mysql/converter/MysqlTypeConverter.java        |  8 ++++++
 .../mysql/integration/test/CatalogMysqlIT.java     | 14 +++++++---
 .../mysql/operation/TestMysqlTableOperations.java  |  1 -
 docs/jdbc-mysql-catalog.md                         |  3 ++-
 .../testsets/jdbc-mysql/00006_datatype.sql         | 31 +++++++++++-----------
 .../testsets/jdbc-mysql/00006_datatype.txt         |  6 +++--
 6 files changed, 41 insertions(+), 22 deletions(-)

diff --git 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlTypeConverter.java
 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlTypeConverter.java
index a0a00eadd..300e22fe4 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlTypeConverter.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlTypeConverter.java
@@ -25,6 +25,7 @@ import org.apache.gravitino.rel.types.Types;
 /** Type converter for MySQL. */
 public class MysqlTypeConverter extends JdbcTypeConverter {
 
+  static final String BIT = "bit";
   static final String TINYINT = "tinyint";
   static final String TINYINT_UNSIGNED = "tinyint unsigned";
   static final String SMALLINT = "smallint";
@@ -43,6 +44,11 @@ public class MysqlTypeConverter extends JdbcTypeConverter {
   @Override
   public Type toGravitino(JdbcTypeBean typeBean) {
     switch (typeBean.getTypeName().toLowerCase()) {
+      case BIT:
+        if (typeBean.getColumnSize() == null || typeBean.getColumnSize() == 1) 
{
+          return Types.BooleanType.get();
+        }
+        return Types.BinaryType.get();
       case TINYINT:
         return Types.ByteType.get();
       case TINYINT_UNSIGNED:
@@ -139,6 +145,8 @@ public class MysqlTypeConverter extends JdbcTypeConverter {
       return type.simpleString();
     } else if (type instanceof Types.BinaryType) {
       return type.simpleString();
+    } else if (type instanceof Types.BooleanType) {
+      return BIT;
     } else if (type instanceof Types.ExternalType) {
       return ((Types.ExternalType) type).catalogString();
     }
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 6b8c824d0..4a0fe241e 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
@@ -643,7 +643,9 @@ public class CatalogMysqlIT extends BaseIT {
             + "  varchar20_col varchar(20),\n"
             + "  text_col text,\n"
             + "  binary_col binary,\n"
-            + "  blob_col blob\n"
+            + "  blob_col blob,\n"
+            + "  bit_col_8 bit(8),\n"
+            + "  bit_col bit\n"
             + ");\n";
 
     mysqlService.executeQuery(sql);
@@ -694,6 +696,12 @@ public class CatalogMysqlIT extends BaseIT {
         case "binary_col":
           Assertions.assertEquals(Types.BinaryType.get(), column.dataType());
           break;
+        case "bit_col_8":
+          Assertions.assertEquals(Types.BinaryType.get(), column.dataType());
+          break;
+        case "bit_col":
+          Assertions.assertEquals(Types.BooleanType.get(), column.dataType());
+          break;
         case "blob_col":
           Assertions.assertEquals(Types.ExternalType.of("BLOB"), 
column.dataType());
           break;
@@ -1691,13 +1699,13 @@ public class CatalogMysqlIT extends BaseIT {
   }
 
   @Test
-  void testUnparsedTypeConverter() {
+  void testParsedBitTypeConverter() {
     String tableName = GravitinoITUtils.genRandomName("test_unparsed_type");
     mysqlService.executeQuery(
         String.format("CREATE TABLE %s.%s (bit_col bit);", schemaName, 
tableName));
     Table loadedTable =
         catalog.asTableCatalog().loadTable(NameIdentifier.of(schemaName, 
tableName));
-    Assertions.assertEquals(Types.ExternalType.of("BIT"), 
loadedTable.columns()[0].dataType());
+    Assertions.assertEquals(Types.BooleanType.get(), 
loadedTable.columns()[0].dataType());
   }
 
   @Test
diff --git 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
index ce1343dd5..9eac348cd 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java
@@ -712,7 +712,6 @@ public class TestMysqlTableOperations extends TestMysql {
     List<JdbcColumn> columns = new ArrayList<>();
     List<Type> notSupportType =
         Arrays.asList(
-            Types.BooleanType.get(),
             Types.FixedType.of(10),
             Types.IntervalDayType.get(),
             Types.IntervalYearType.get(),
diff --git a/docs/jdbc-mysql-catalog.md b/docs/jdbc-mysql-catalog.md
index 6c228faf6..c761006a0 100644
--- a/docs/jdbc-mysql-catalog.md
+++ b/docs/jdbc-mysql-catalog.md
@@ -107,9 +107,10 @@ Refer to [Manage Relational Metadata Using 
Gravitino](./manage-relational-metada
 | `VarChar`          | `VarChar`           |
 | `FixedChar`        | `FixedChar`         |
 | `Binary`           | `Binary`            |
+| `BOOLEAN`          | `BIT`               |
 
 :::info
-MySQL doesn't support Gravitino `Boolean` `Fixed` `Struct` `List` `Map` 
`Timestamp_tz` `IntervalDay` `IntervalYear` `Union` `UUID` type.
+MySQL doesn't support Gravitino `Fixed` `Struct` `List` `Map` `Timestamp_tz` 
`IntervalDay` `IntervalYear` `Union` `UUID` type.
 Meanwhile, the data types other than listed above are mapped to Gravitino 
**[External 
Type](./manage-relational-metadata-using-gravitino.md#external-type)** that 
represents an unresolvable data type since 0.6.0-incubating.
 :::
 
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.sql
index 84058a731..383f7766f 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.sql
@@ -2,7 +2,6 @@ CREATE SCHEMA gt_mysql.gt_db1;
 
 USE gt_mysql.gt_db1;
 
--- Unsupported Type: BOOLEAN
 CREATE TABLE tb01 (
     f1 VARCHAR(200),
     f2 CHAR(20),
@@ -10,6 +9,7 @@ CREATE TABLE tb01 (
     f4 DECIMAL(10, 3),
     f5 REAL,
     f6 DOUBLE,
+    f7 BOOLEAN,
     f8 TINYINT,
     f9 SMALLINT,
     f10 INT,
@@ -23,12 +23,12 @@ CREATE TABLE tb01 (
 
 SHOW CREATE TABLE tb01;
 
-INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 
1000, 100000, DATE '2024-01-01',
+INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 
1000, 1000, 100000, DATE '2024-01-01',
         TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP 
'2024-01-01 08:00:00 UTC');
 
-INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULl);
+INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULl, NULl);
 
 select * from tb01 order by f1;
 
@@ -39,6 +39,7 @@ CREATE TABLE tb02 (
     f4 DECIMAL(10, 3) NOT NULL ,
     f5 REAL NOT NULL ,
     f6 DOUBLE NOT NULL ,
+    f7 BOOLEAN NOT NULL ,
     f8 TINYINT NOT NULL ,
     f9 SMALLINT NOT NULL ,
     f10 INT NOT NULL ,
@@ -52,23 +53,23 @@ CREATE TABLE tb02 (
 
 show create table tb02;
 
-INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 
1000, 100000, DATE '2024-01-01',
+INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 
1000, 1000, 100000, DATE '2024-01-01',
         TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP 
'2024-01-01 08:00:00 UTC');
 
-INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL);
+INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL);
 
-INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES ('Sample text 1', NULL, x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 
1000, 100000, DATE '2024-01-01',
+INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES ('Sample text 1', NULL, x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 
1000, 1000, 100000, DATE '2024-01-01',
         TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP 
'2024-01-01 08:00:00 UTC');
 
-INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES ('Sample text 1', 'same3', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 
1000, NULl, DATE '2024-01-01',
+INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES ('Sample text 1', 'same3', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 
1000, 1000, NULl, DATE '2024-01-01',
         TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP 
'2024-01-01 08:00:00 UTC');
 
-INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
-VALUES ('Sample text 1', 'same9', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 
1000, 1992382342, DATE '2024-01-01',
+INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, 
f15, f16)
+VALUES ('Sample text 1', 'same9', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 
1000, 1000, 1992382342, DATE '2024-01-01',
         NULL, TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 
UTC');
 
 drop table tb01;
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.txt
index d0236d580..91267178c 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.txt
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.txt
@@ -11,6 +11,7 @@ CREATE TABLE
    f4 decimal(10, 3),
    f5 real,
    f6 double,
+   f7 boolean,
    f8 tinyint,
    f9 smallint,
    f10 integer,
@@ -30,8 +31,8 @@ INSERT: 1 row
 
 INSERT: 1 row
 
-"Sample text 1","Text1               
","65","123.456","7.89","12.34","1","100","1000","1000","100000","2024-01-01","08:00:00","2024-01-01
 08:00:00","2024-01-01 08:00:00 UTC"
-"","","","","","","","","","","","","","",""
+"Sample text 1","Text1               
","65","123.456","7.89","12.34","false","1","100","1000","1000","100000","2024-01-01","08:00:00","2024-01-01
 08:00:00","2024-01-01 08:00:00 UTC"
+"","","","","","","","","","","","","","","",""
 
 CREATE TABLE
 
@@ -42,6 +43,7 @@ CREATE TABLE
    f4 decimal(10, 3) NOT NULL,
    f5 real NOT NULL,
    f6 double NOT NULL,
+   f7 boolean NOT NULL,
    f8 tinyint NOT NULL,
    f9 smallint NOT NULL,
    f10 integer NOT NULL,

Reply via email to