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?

---
.../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,