Skip to content

Commit b6aa540

Browse files
committed
support boolean type
1 parent 0e4a0dc commit b6aa540

File tree

6 files changed

+43
-22
lines changed

6 files changed

+43
-22
lines changed

catalogs/catalog-jdbc-mysql/src/main/java/org/apache/gravitino/catalog/mysql/converter/MysqlTypeConverter.java

+10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
/** Type converter for MySQL. */
2626
public class MysqlTypeConverter extends JdbcTypeConverter {
2727

28+
static final String BIT = "bit";
29+
static final String BIT_UNSIGNED = "bit unsigned";
2830
static final String TINYINT = "tinyint";
2931
static final String TINYINT_UNSIGNED = "tinyint unsigned";
3032
static final String SMALLINT = "smallint";
@@ -43,6 +45,12 @@ public class MysqlTypeConverter extends JdbcTypeConverter {
4345
@Override
4446
public Type toGravitino(JdbcTypeBean typeBean) {
4547
switch (typeBean.getTypeName().toLowerCase()) {
48+
case BIT:
49+
case BIT_UNSIGNED:
50+
if (typeBean.getColumnSize() == null || Integer.parseInt(typeBean.getColumnSize()) <= 1) {
51+
return Types.BooleanType.get();
52+
}
53+
return Types.BinaryType.get();
4654
case TINYINT:
4755
return Types.ByteType.get();
4856
case TINYINT_UNSIGNED:
@@ -140,6 +148,8 @@ public String fromGravitino(Type type) {
140148
return type.simpleString();
141149
} else if (type instanceof Types.BinaryType) {
142150
return type.simpleString();
151+
} else if (type instanceof Types.BooleanType) {
152+
return BIT;
143153
} else if (type instanceof Types.ExternalType) {
144154
return ((Types.ExternalType) type).catalogString();
145155
}

catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,9 @@ void testColumnTypeConverter() {
643643
+ " varchar20_col varchar(20),\n"
644644
+ " text_col text,\n"
645645
+ " binary_col binary,\n"
646-
+ " blob_col blob\n"
646+
+ " blob_col blob,\n"
647+
+ " bit_col_8 bit(8),\n"
648+
+ " bit_col bit\n"
647649
+ ");\n";
648650

649651
mysqlService.executeQuery(sql);
@@ -694,6 +696,12 @@ void testColumnTypeConverter() {
694696
case "binary_col":
695697
Assertions.assertEquals(Types.BinaryType.get(), column.dataType());
696698
break;
699+
case "bit_col_8":
700+
Assertions.assertEquals(Types.BinaryType.get(), column.dataType());
701+
break;
702+
case "bit_col":
703+
Assertions.assertEquals(Types.BooleanType.get(), column.dataType());
704+
break;
697705
case "blob_col":
698706
Assertions.assertEquals(Types.ExternalType.of("BLOB"), column.dataType());
699707
break;
@@ -1691,13 +1699,13 @@ void testMySQLSchemaNameCaseSensitive() {
16911699
}
16921700

16931701
@Test
1694-
void testUnparsedTypeConverter() {
1702+
void testParsedBitTypeConverter() {
16951703
String tableName = GravitinoITUtils.genRandomName("test_unparsed_type");
16961704
mysqlService.executeQuery(
16971705
String.format("CREATE TABLE %s.%s (bit_col bit);", schemaName, tableName));
16981706
Table loadedTable =
16991707
catalog.asTableCatalog().loadTable(NameIdentifier.of(schemaName, tableName));
1700-
Assertions.assertEquals(Types.ExternalType.of("BIT"), loadedTable.columns()[0].dataType());
1708+
Assertions.assertEquals(Types.BooleanType.get(), loadedTable.columns()[0].dataType());
17011709
}
17021710

17031711
@Test

catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/operation/TestMysqlTableOperations.java

-1
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,6 @@ public void testCreateNotSupportTypeTable() {
712712
List<JdbcColumn> columns = new ArrayList<>();
713713
List<Type> notSupportType =
714714
Arrays.asList(
715-
Types.BooleanType.get(),
716715
Types.FixedType.of(10),
717716
Types.IntervalDayType.get(),
718717
Types.IntervalYearType.get(),

docs/jdbc-mysql-catalog.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,10 @@ Refer to [Manage Relational Metadata Using Gravitino](./manage-relational-metada
107107
| `VarChar` | `VarChar` |
108108
| `FixedChar` | `FixedChar` |
109109
| `Binary` | `Binary` |
110+
| `BOOLEAN` | `BIT` |
110111

111112
:::info
112-
MySQL doesn't support Gravitino `Boolean` `Fixed` `Struct` `List` `Map` `Timestamp_tz` `IntervalDay` `IntervalYear` `Union` `UUID` type.
113+
MySQL doesn't support Gravitino `Fixed` `Struct` `List` `Map` `Timestamp_tz` `IntervalDay` `IntervalYear` `Union` `UUID` type.
113114
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.
114115
:::
115116

trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.sql

+16-15
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ CREATE SCHEMA gt_mysql.gt_db1;
22

33
USE gt_mysql.gt_db1;
44

5-
-- Unsupported Type: BOOLEAN
65
CREATE TABLE tb01 (
76
f1 VARCHAR(200),
87
f2 CHAR(20),
98
f3 VARBINARY,
109
f4 DECIMAL(10, 3),
1110
f5 REAL,
1211
f6 DOUBLE,
12+
f7 BOOLEAN,
1313
f8 TINYINT,
1414
f9 SMALLINT,
1515
f10 INT,
@@ -23,12 +23,12 @@ CREATE TABLE tb01 (
2323

2424
SHOW CREATE TABLE tb01;
2525

26-
INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
27-
VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
26+
INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
27+
VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
2828
TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 UTC');
2929

30-
INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
31-
VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULl);
30+
INSERT INTO tb01 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
31+
VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULl, NULl);
3232

3333
select * from tb01 order by f1;
3434

@@ -39,6 +39,7 @@ CREATE TABLE tb02 (
3939
f4 DECIMAL(10, 3) NOT NULL ,
4040
f5 REAL NOT NULL ,
4141
f6 DOUBLE NOT NULL ,
42+
f7 BOOLEAN,
4243
f8 TINYINT NOT NULL ,
4344
f9 SMALLINT NOT NULL ,
4445
f10 INT NOT NULL ,
@@ -52,23 +53,23 @@ CREATE TABLE tb02 (
5253

5354
show create table tb02;
5455

55-
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
56-
VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
56+
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
57+
VALUES ('Sample text 1', 'Text1', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
5758
TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 UTC');
5859

59-
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
60-
VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
60+
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
61+
VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
6162

62-
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
63-
VALUES ('Sample text 1', NULL, x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
63+
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
64+
VALUES ('Sample text 1', NULL, x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 1000, 1000, 100000, DATE '2024-01-01',
6465
TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 UTC');
6566

66-
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
67-
VALUES ('Sample text 1', 'same3', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 1000, NULl, DATE '2024-01-01',
67+
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
68+
VALUES ('Sample text 1', 'same3', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 1000, 1000, NULl, DATE '2024-01-01',
6869
TIME '08:00:00', TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 UTC');
6970

70-
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f8, f9, f10, f11, f12, f13, f14, f15, f16)
71-
VALUES ('Sample text 1', 'same9', x'65', 123.456, 7.89, 12.34, 1, 100, 1000, 1000, 1992382342, DATE '2024-01-01',
71+
INSERT INTO tb02 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16)
72+
VALUES ('Sample text 1', 'same9', x'65', 123.456, 7.89, 12.34, FALSE, 1, 100, 1000, 1000, 1992382342, DATE '2024-01-01',
7273
NULL, TIMESTAMP '2024-01-01 08:00:00', TIMESTAMP '2024-01-01 08:00:00 UTC');
7374

7475
drop table tb01;

trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00006_datatype.txt

+4-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ CREATE TABLE
1111
f4 decimal(10, 3),
1212
f5 real,
1313
f6 double,
14+
f7 boolean,
1415
f8 tinyint,
1516
f9 smallint,
1617
f10 integer,
@@ -30,8 +31,8 @@ INSERT: 1 row
3031

3132
INSERT: 1 row
3233

33-
"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"
34-
"","","","","","","","","","","","","","",""
34+
"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"
35+
"","","","","","","","","","","","","","","",""
3536

3637
CREATE TABLE
3738

@@ -42,6 +43,7 @@ CREATE TABLE
4243
f4 decimal(10, 3) NOT NULL,
4344
f5 real NOT NULL,
4445
f6 double NOT NULL,
46+
f7 boolean NOT NULL,
4547
f8 tinyint NOT NULL,
4648
f9 smallint NOT NULL,
4749
f10 integer NOT NULL,

0 commit comments

Comments
 (0)