This is an automated email from the ASF dual-hosted git repository.
yuqi4733 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 1a20686d93 [#7338] feat(trino-connector): Support external type with
MySQL (#7578)
1a20686d93 is described below
commit 1a20686d931c914f46c8ac9d942ee211c803c209
Author: qbhan <[email protected]>
AuthorDate: Wed Jul 9 21:19:36 2025 +0800
[#7338] feat(trino-connector): Support external type with MySQL (#7578)
### What changes were proposed in this pull request?
Support MySQL external type with Trino.
### Why are the changes needed?
Fix: #7338
Fix: #7339
### Does this PR introduce _any_ user-facing change?
no
### How was this patch tested?
local integration-test
---
.../MysqlColumnDefaultValueConverter.java | 1 +
.../mysql/converter/MysqlTypeConverter.java | 2 +
.../mysql/converter/TestMysqlTypeConverter.java | 2 +
.../docker-script/init/mysql/init.sql | 101 +++++++++++++++++++++
.../testsets/jdbc-mysql/00009_datatype_mapping.sql | 4 +
.../testsets/jdbc-mysql/00009_datatype_mapping.txt | 47 ++++++++++
.../jdbc/mysql/MySQLDataTypeTransformer.java | 7 +-
.../catalog/jdbc/mysql/MySQLExternalDataType.java | 94 +++++++++++++++++++
.../jdbc/mysql/TestMySQLDataTypeTransformer.java | 69 +++++++++++++-
9 files changed, 321 insertions(+), 6 deletions(-)
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 26f6fdef8b..52aa9c86c2 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
@@ -78,6 +78,7 @@ public class MysqlColumnDefaultValueConverter extends
JdbcColumnDefaultValueConv
return Literals.floatLiteral(Float.valueOf(columnDefaultValue));
case MysqlTypeConverter.DOUBLE:
return Literals.doubleLiteral(Double.valueOf(columnDefaultValue));
+ case MysqlTypeConverter.DECIMAL_UNSIGNED:
case MysqlTypeConverter.DECIMAL:
return Literals.decimalLiteral(
Decimal.of(columnDefaultValue, type.getColumnSize(),
type.getScale()));
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 300e22fe43..1a0f8a67b8 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
@@ -37,6 +37,7 @@ public class MysqlTypeConverter extends JdbcTypeConverter {
static final String FLOAT = "float";
static final String DOUBLE = "double";
static final String DECIMAL = "decimal";
+ static final String DECIMAL_UNSIGNED = "decimal unsigned";
static final String CHAR = "char";
static final String BINARY = "binary";
static final String DATETIME = "datetime";
@@ -81,6 +82,7 @@ public class MysqlTypeConverter extends JdbcTypeConverter {
return Types.TimestampType.withTimeZone();
case DATETIME:
return Types.TimestampType.withoutTimeZone();
+ case DECIMAL_UNSIGNED:
case DECIMAL:
return Types.DecimalType.of(typeBean.getColumnSize(),
typeBean.getScale());
case VARCHAR:
diff --git
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/converter/TestMysqlTypeConverter.java
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/converter/TestMysqlTypeConverter.java
index 9478d133ac..e34c6dc5ea 100644
---
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/converter/TestMysqlTypeConverter.java
+++
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/converter/TestMysqlTypeConverter.java
@@ -28,6 +28,7 @@ import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.BI
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.CHAR;
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.DATETIME;
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.DECIMAL;
+import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.DECIMAL_UNSIGNED;
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.DOUBLE;
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.FLOAT;
import static
org.apache.gravitino.catalog.mysql.converter.MysqlTypeConverter.INT;
@@ -57,6 +58,7 @@ public class TestMysqlTypeConverter {
checkJdbcTypeToGravitinoType(Types.TimestampType.withoutTimeZone(),
DATETIME, null, null);
checkJdbcTypeToGravitinoType(Types.TimestampType.withTimeZone(),
TIMESTAMP, null, null);
checkJdbcTypeToGravitinoType(Types.DecimalType.of(10, 2), DECIMAL, 10, 2);
+ checkJdbcTypeToGravitinoType(Types.DecimalType.of(10, 2),
DECIMAL_UNSIGNED, 10, 2);
checkJdbcTypeToGravitinoType(Types.VarCharType.of(20), VARCHAR, 20, null);
checkJdbcTypeToGravitinoType(Types.FixedCharType.of(20), CHAR, 20, null);
checkJdbcTypeToGravitinoType(Types.StringType.get(), TEXT, null, null);
diff --git a/integration-test-common/docker-script/init/mysql/init.sql
b/integration-test-common/docker-script/init/mysql/init.sql
index f2b730b90f..23c6906695 100644
--- a/integration-test-common/docker-script/init/mysql/init.sql
+++ b/integration-test-common/docker-script/init/mysql/init.sql
@@ -18,3 +18,104 @@
*/
GRANT ALL PRIVILEGES on *.* to 'trino'@'%';
FLUSH PRIVILEGES;
+CREATE DATABASE gt_mysql_test_all_type;
+CREATE TABLE gt_mysql_test_all_type.demo
+(
+ -- 数值类型
+ id BIGINT PRIMARY KEY,
+ tiny_col TINYINT,
+ tiny_unsigned_col TINYINT UNSIGNED,
+ small_col SMALLINT,
+ small_unsigned_col SMALLINT UNSIGNED,
+ medium_col MEDIUMINT,
+ medium_unsigned_col MEDIUMINT UNSIGNED,
+ int_col INT,
+ int_unsigned_col INT UNSIGNED,
+ bigint_col BIGINT,
+ bigint_unsigned_col BIGINT UNSIGNED,
+ float_col FLOAT,
+ float_unsigned_col FLOAT UNSIGNED,
+ double_col DOUBLE,
+ double_unsigned_col DOUBLE UNSIGNED,
+ decimal_col DECIMAL(12,6),
+ decimal_unsigned_col DECIMAL(12,6) UNSIGNED,
+ -- 字符串类型
+ char_col CHAR(10),
+ varchar_col VARCHAR(255),
+ tinytext_col TINYTEXT,
+ text_col TEXT,
+ mediumtext_col MEDIUMTEXT,
+ longtext_col LONGTEXT,
+ -- 日期时间类型
+ date_col DATE,
+ time_col TIME,
+ datetime_col DATETIME,
+ timestamp_col TIMESTAMP,
+ year_col YEAR,
+ -- json
+ json_col JSON,
+ -- 枚举与集合
+ enum_col ENUM('red','green','blue'),
+ set_col SET('read','write','execute'),
+ -- 二进制类型
+ binary_col BINARY(16),
+ varbinary_col VARBINARY(100),
+ tinyblob_col TINYBLOB,
+ blob_col BLOB,
+ mediumblob_col MEDIUMBLOB,
+ longblob_col LONGBLOB,
+ -- 空间类型
+ point_col POINT,
+ geometry_col GEOMETRY
+);
+INSERT INTO gt_mysql_test_all_type.demo (
+ id, tiny_col, tiny_unsigned_col, small_col, small_unsigned_col,medium_col,
+ medium_unsigned_col, int_col, int_unsigned_col, bigint_col,
bigint_unsigned_col,
+ float_col, float_unsigned_col, double_col, double_unsigned_col,
decimal_col, decimal_unsigned_col,
+ char_col, varchar_col, tinytext_col, text_col, mediumtext_col,
longtext_col,
+ date_col, time_col, datetime_col, timestamp_col, year_col, json_col,
+ enum_col, set_col,
+ binary_col, varbinary_col, tinyblob_col, blob_col, mediumblob_col,
longblob_col,
+ point_col, geometry_col
+) VALUES (
+ 1, -- id
+ 100, -- tiny_col
+ 100, -- tiny_unsigned_col
+ 500, -- small_col
+ 500, -- small_unsigned_col
+ 10000, -- medium_col
+ 10000, -- medium_unsigned_col
+ 200000, -- int_col
+ 200000, -- int_unsigned_col
+ 200000, -- bigint_col
+ 200000, -- bigint_unsigned_col
+ 123.45, -- float_col
+ 123.45, -- float_unsigned_col
+ 9876.5432, -- double_col
+ 9876.5432, -- double_unsigned_col
+ 123456.789000, -- decimal_col
+ 123456.789000, -- decimal_unsigned_col
+ 'abc', -- char_col
+ 'abc', -- varchar_col
+ 'abc', -- tinytext_col
+ 'abc', -- text_col
+ 'abc', -- mediumtext_col
+ 'abc', -- longtext_col
+ '2025-07-04', -- date_col
+ '14:30:00', -- time_col
+ '2025-07-04 14:30:00', -- datetime_col
+ '2025-07-04 14:30:00', -- timestamp_col
+ '2025', -- year_col
+ '{"x": 1, "y": 2}', -- json_col
+ 'green', -- enum_col
+ 'read,write', -- set_col
+ X'A1B2C3D4', -- binary_col
+ X'A1B2', -- varbinary_col
+ X'123456', -- tinyblob_col
+ X'ABCDEF', -- blob_col
+ X'1234567890', -- mediumblob_col
+ X'A1B2C3D4E5', -- longblob_col
+ ST_GeomFromText('POINT(10 20)'), -- point_col
+ ST_GeomFromText('LINESTRING(0 0, 10 10)') -- geometry_col
+);
+
diff --git
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.sql
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.sql
new file mode 100644
index 0000000000..bb9d4b9472
--- /dev/null
+++
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.sql
@@ -0,0 +1,4 @@
+-- Table create by integration-test-common/docker-script/init/mysql/init.sql
+show create table gt_mysql.gt_mysql_test_all_type.demo;
+
+select * from gt_mysql.gt_mysql_test_all_type.demo;
diff --git
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
new file mode 100644
index 0000000000..b592dca267
--- /dev/null
+++
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
@@ -0,0 +1,47 @@
+"CREATE TABLE gt_mysql.gt_mysql_test_all_type.demo (
+ id bigint NOT NULL,
+ tiny_col tinyint,
+ tiny_unsigned_col smallint,
+ small_col smallint,
+ small_unsigned_col integer,
+ medium_col integer,
+ medium_unsigned_col integer,
+ int_col integer,
+ int_unsigned_col bigint,
+ bigint_col bigint,
+ bigint_unsigned_col decimal(20, 0),
+ float_col real,
+ float_unsigned_col real,
+ double_col double,
+ double_unsigned_col double,
+ decimal_col decimal(12, 6),
+ decimal_unsigned_col decimal(12, 6),
+ char_col char(10),
+ varchar_col varchar(255),
+ tinytext_col varchar,
+ text_col varchar,
+ mediumtext_col varchar,
+ longtext_col varchar,
+ date_col date,
+ time_col time(0),
+ datetime_col timestamp(0),
+ timestamp_col timestamp(0) with time zone,
+ year_col date,
+ json_col json,
+ enum_col varchar,
+ set_col varchar,
+ binary_col varbinary,
+ varbinary_col varbinary,
+ tinyblob_col varbinary,
+ blob_col varbinary,
+ mediumblob_col varbinary,
+ longblob_col varbinary,
+ point_col varbinary,
+ geometry_col varbinary
+)
+COMMENT ''
+WITH (
+ engine = 'InnoDB'
+)"
+
+"1","100","100","500","500","10000","10000","200000","200000","200000","200000","123.45","123.45","9876.5432","9876.5432","123456.789000","123456.789000","abc
","abc","abc","abc","abc","abc","2025-07-04","14:30:00","2025-07-04
14:30:00","2025-07-04 14:30:00
UTC","2025-01-01","{""x"":1,""y"":2}","green","read,write","a1 b2 c3 d4 00 00
00 00 00 00 00 00 00 00 00 00","a1 b2","12 34 56","ab cd ef","12 34 56 78
90","a1 b2 c3 d4 e5","00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 24 40 00
[...]
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLDataTypeTransformer.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLDataTypeTransformer.java
index 089311e6a4..920793d2e9 100644
---
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLDataTypeTransformer.java
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLDataTypeTransformer.java
@@ -21,7 +21,6 @@ package
org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
import io.trino.spi.TrinoException;
import io.trino.spi.type.CharType;
-import io.trino.spi.type.StandardTypes;
import io.trino.spi.type.TimeType;
import io.trino.spi.type.TimestampType;
import io.trino.spi.type.TimestampWithTimeZoneType;
@@ -59,9 +58,7 @@ public class MySQLDataTypeTransformer extends
GeneralDataTypeTransformer {
return TimeType.TIME_SECONDS;
} else if (Name.EXTERNAL == type.name()) {
String catalogString = ((Types.ExternalType) type).catalogString();
- if (StandardTypes.JSON.equalsIgnoreCase(catalogString)) {
- return JSON_TYPE;
- }
+ return MySQLExternalDataType.safeValueOf(catalogString).getTrinoType();
}
return super.getTrinoType(type);
@@ -105,7 +102,7 @@ public class MySQLDataTypeTransformer extends
GeneralDataTypeTransformer {
}
return Types.VarCharType.of(length);
} else if (typeClass == JSON_TYPE.getClass()) {
- return Types.ExternalType.of(StandardTypes.JSON);
+ return
Types.ExternalType.of(MySQLExternalDataType.JSON.getMysqlTypeName());
}
return super.getGravitinoType(type);
diff --git
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLExternalDataType.java
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLExternalDataType.java
new file mode 100644
index 0000000000..03f4661689
--- /dev/null
+++
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLExternalDataType.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
+
+import static
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLDataTypeTransformer.JSON_TYPE;
+
+import io.trino.spi.type.DateType;
+import io.trino.spi.type.DoubleType;
+import io.trino.spi.type.IntegerType;
+import io.trino.spi.type.RealType;
+import io.trino.spi.type.Type;
+import io.trino.spi.type.VarbinaryType;
+import io.trino.spi.type.VarcharType;
+
+/**
+ * External type mapping between MySQL and Trino
+ *
+ * <p>TODO: type mapping base on jdbcType rather than typeName
+ *
+ * <p>see
https://trino.io/docs/current/connector/mysql.html#mysql-to-trino-type-mapping
+ */
+public enum MySQLExternalDataType {
+ MEDIUMINT("mediumint", IntegerType.INTEGER),
+ MEDIUMINT_UNSIGNED("mediumint unsigned", IntegerType.INTEGER),
+ FLOAT_UNSIGNED("float unsigned", RealType.REAL),
+ DOUBLE_UNSIGNED("double unsigned", DoubleType.DOUBLE),
+ TINYTEXT("tinytext", VarcharType.VARCHAR),
+ MEDIUMTEXT("mediumtext", VarcharType.VARCHAR),
+ LONGTEXT("longtext", VarcharType.VARCHAR),
+ YEAR("year", DateType.DATE),
+ ENUM("enum", VarcharType.VARCHAR),
+ SET("set", VarcharType.VARCHAR),
+ JSON("json", JSON_TYPE),
+ VARBINARY("varbinary", VarbinaryType.VARBINARY),
+ TINYBLOB("tinyblob", VarbinaryType.VARBINARY),
+ BLOB("blob", VarbinaryType.VARBINARY),
+ MEDIUMBLOB("mediumblob", VarbinaryType.VARBINARY),
+ LONGBLOB("longblob", VarbinaryType.VARBINARY),
+ GEOMETRY("geometry", VarbinaryType.VARBINARY),
+ /**
+ * In Trino, session property unsupported_type_handling default value is
+ * UnsupportedTypeHandling.IGNORE. For unsupported data types, standardize
mapping to varchar for
+ * enhanced usability. Equivalent to default configuration of the
unsupported_type_handling is
+ * UnsupportedTypeHandling.CONVERT_TO_VARCHAR
+ *
+ * <p>TODO: type mapping support unsupported_type_handling and
jdbc-types-mapped-to-varchar
+ */
+ UNKNOWN("unknown", VarcharType.VARCHAR);
+
+ private final String mysqlTypeName;
+
+ // suppress ImmutableEnumChecker because Type is outside the project.
+ @SuppressWarnings("ImmutableEnumChecker")
+ private final Type trinoType;
+
+ private MySQLExternalDataType(String mysqlTypeName, Type trinoType) {
+ this.mysqlTypeName = mysqlTypeName;
+ this.trinoType = trinoType;
+ }
+
+ public String getMysqlTypeName() {
+ return mysqlTypeName;
+ }
+
+ public Type getTrinoType() {
+ return trinoType;
+ }
+
+ public static MySQLExternalDataType safeValueOf(String mysqlTypeName) {
+ for (MySQLExternalDataType mySQLExternalDataType :
MySQLExternalDataType.values()) {
+ if (mySQLExternalDataType.mysqlTypeName.equalsIgnoreCase(mysqlTypeName))
{
+ return mySQLExternalDataType;
+ }
+ }
+ return UNKNOWN;
+ }
+}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLDataTypeTransformer.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLDataTypeTransformer.java
index 7e2048a028..3629edd883 100644
---
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLDataTypeTransformer.java
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/TestMySQLDataTypeTransformer.java
@@ -22,6 +22,12 @@ package
org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
import static
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLDataTypeTransformer.JSON_TYPE;
import io.trino.spi.TrinoException;
+import io.trino.spi.type.DateType;
+import io.trino.spi.type.DoubleType;
+import io.trino.spi.type.IntegerType;
+import io.trino.spi.type.RealType;
+import io.trino.spi.type.VarbinaryType;
+import io.trino.spi.type.VarcharType;
import org.apache.gravitino.rel.types.Type;
import org.apache.gravitino.rel.types.Types;
import org.apache.gravitino.trino.connector.util.GeneralDataTypeTransformer;
@@ -104,10 +110,71 @@ public class TestMySQLDataTypeTransformer {
}
@Test
- public void testGravitinoExternalJsonTypeToTrinoType() {
+ public void testGravitinoExternalTypeToTrinoType() {
GeneralDataTypeTransformer generalDataTypeTransformer = new
MySQLDataTypeTransformer();
+ Type mediumintType = Types.ExternalType.of("mediumint");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(mediumintType),
IntegerType.INTEGER);
+
+ Type mediumintUnsignedType = Types.ExternalType.of("mediumint unsigned");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(mediumintUnsignedType),
IntegerType.INTEGER);
+
+ Type floatUnsignedType = Types.ExternalType.of("float unsigned");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(floatUnsignedType),
RealType.REAL);
+
+ Type doubleUnsignedType = Types.ExternalType.of("double unsigned");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(doubleUnsignedType),
DoubleType.DOUBLE);
+
+ Type tinytextType = Types.ExternalType.of("tinytext");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(tinytextType),
VarcharType.VARCHAR);
+
+ Type mediumtextType = Types.ExternalType.of("mediumtext");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(mediumtextType),
VarcharType.VARCHAR);
+
+ Type longtextType = Types.ExternalType.of("longtext");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(longtextType),
VarcharType.VARCHAR);
+
+ Type yearType = Types.ExternalType.of("year");
+ Assertions.assertEquals(generalDataTypeTransformer.getTrinoType(yearType),
DateType.DATE);
+
+ Type enumType = Types.ExternalType.of("enum");
+ Assertions.assertEquals(generalDataTypeTransformer.getTrinoType(enumType),
VarcharType.VARCHAR);
+
+ Type setType = Types.ExternalType.of("set");
+ Assertions.assertEquals(generalDataTypeTransformer.getTrinoType(setType),
VarcharType.VARCHAR);
+
Type jsonType = Types.ExternalType.of("json");
Assertions.assertEquals(generalDataTypeTransformer.getTrinoType(jsonType),
JSON_TYPE);
+
+ Type varbinaryType = Types.ExternalType.of("varbinary");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(varbinaryType),
VarbinaryType.VARBINARY);
+
+ Type tinyblobType = Types.ExternalType.of("tinyblob");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(tinyblobType),
VarbinaryType.VARBINARY);
+
+ Type mediumblobType = Types.ExternalType.of("mediumblob");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(mediumblobType),
VarbinaryType.VARBINARY);
+
+ Type longblobType = Types.ExternalType.of("longblob");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(longblobType),
VarbinaryType.VARBINARY);
+
+ Type geometryType = Types.ExternalType.of("geometry");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(geometryType),
VarbinaryType.VARBINARY);
+
+ Type unknownType = Types.ExternalType.of("unknown");
+ Assertions.assertEquals(
+ generalDataTypeTransformer.getTrinoType(unknownType),
VarcharType.VARCHAR);
}
}