This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch branch-trino-smv
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-trino-smv by this push:
new a5a50085bf [#9961] feat (trino-connector): Add the version segment
module to support Trino 452-468 (#9962)
a5a50085bf is described below
commit a5a50085bf3bf48f14dbe85cd1b68a21cd97acea
Author: Yuhui <[email protected]>
AuthorDate: Thu Feb 26 21:27:06 2026 +0800
[#9961] feat (trino-connector): Add the version segment module to support
Trino 452-468 (#9962)
### What changes were proposed in this pull request?
Add the version segment module for 452-468 to support Trino 452 through
Trino 468
### Why are the changes needed?
Fix: #9961
### Does this PR introduce _any_ user-facing change?
NO
### How was this patch tested?
UT and IT
---------
Co-authored-by: Copilot <[email protected]>
---
.claude/skills/trino-test/SKILL.md | 19 +--
.claude/skills/trino-test/trino-test-guide.md | 26 +---
build.gradle.kts | 5 +-
.../docker-script/docker-compose.yaml | 8 +-
.../docker-script/init/trino/config/jvm.config | 2 +
.../test/container/TrinoITContainers.java | 2 +-
settings.gradle.kts | 1 +
trino-connector/integration-test/build.gradle.kts | 1 +
.../connector/integration/test/TrinoQueryIT.java | 6 +-
.../integration/test/TrinoQueryITBase.java | 15 +-
.../integration/test/TrinoQueryTestTool.java | 2 +-
.../jdbc-mysql/00011_column_properties.txt | 74 +++++-----
.../trino-ci-testset/testsets/trino-446-451.patch | 131 ++++++++++++++++
.../connector/GravitinoConnectorFactory446.java | 2 +-
.../trino-connector-452-468/build.gradle.kts | 164 +++++++++++++++++++++
.../trino/connector/GravitinoConnector452.java | 67 +++++++++
.../connector/GravitinoConnectorFactory452.java} | 17 ++-
.../trino/connector/GravitinoMetadata452.java | 96 ++++++++++++
.../GravitinoNodePartitioningProvider452.java | 30 ++++
.../trino/connector/GravitinoPlugin452.java | 38 +++++
.../trino/connector/GravitinoSplitManager452.java | 61 ++++++++
.../connector/GravitinoSystemConnector452.java | 82 +++++++++++
.../META-INF/services/io.trino.spi.Plugin | 18 +--
.../src/test/java/TestGravitinoConnector452.java | 61 ++++++++
.../trino/connector/TestGravitinoConnector.java | 2 +-
25 files changed, 825 insertions(+), 105 deletions(-)
diff --git a/.claude/skills/trino-test/SKILL.md
b/.claude/skills/trino-test/SKILL.md
index b549ee0e17..0b9fec5fbb 100644
--- a/.claude/skills/trino-test/SKILL.md
+++ b/.claude/skills/trino-test/SKILL.md
@@ -83,21 +83,22 @@ cd /home/ubuntu/git/gravitino
--auto=all --test_set=jdbc-mysql --tester_id=00004
```
-### Test with Trino 446
+### Run specific test catalog with testset
+./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \
+ --auto=all --test_set=tpch --catalog=hive
+
+
+### Test specific Trino version with specific trino connector
```bash
./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \
--auto=all \
- --trino_version=446 \
-
--trino_connector_dir=/home/ubuntu/git/gravitino/trino-connector/trino-connector-446-451/build/libs
+ --trino_version=<VERSION> \
+
--trino_connector_dir=<WORKSPACE>/trino-connector/trino-connector-<VERSION_RANGE>/build/libs
```
-### Multi-version test
-```bash
-./trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh \
- --trino_versions_map="446:trino-connector-446-451"
-```
+## Check test status
----
+grep -E "(Test progress|All testers|Total|PASS|FAIL|BUILD) from log
## Test Structure
diff --git a/.claude/skills/trino-test/trino-test-guide.md
b/.claude/skills/trino-test/trino-test-guide.md
index f69d4cdb12..fcbcde0fb7 100644
--- a/.claude/skills/trino-test/trino-test-guide.md
+++ b/.claude/skills/trino-test/trino-test-guide.md
@@ -85,15 +85,10 @@ trino-connector/integration-test/
#### Specify Trino Version
```bash
-# Test with Trino 446
+# Test with a specific Trino version
./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \
- --auto=all --trino_version=446 \
- --trino_connector_dir=/path/to/trino-connector-446-451/build/libs
-
-# Test with Trino 435
-./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \
- --auto=all --trino_version=435 \
- --trino_connector_dir=/path/to/trino-connector-435-439/build/libs
+ --auto=all --trino_version=<VERSION> \
+ --trino_connector_dir=/path/to/trino-connector-<VERSION_RANGE>/build/libs
```
### 1.2 Test Modes
@@ -173,7 +168,7 @@ trino-connector/integration-test/
| `--catalog` | Specify catalog name | - | `--catalog=mysql` |
| `--params` | Parameter substitution | - | `--params=key1,v1;key2,v2` |
| `--trino_worker_num` | Number of Trino workers | 0 | `--trino_worker_num=3` |
-| `--trino_version` | Trino version | 435 | `--trino_version=446` |
+| `--trino_version` | Trino version | - | `--trino_version=<VERSION>` |
| `--trino_connector_dir` | Connector JAR directory |
trino-connector/build/libs | `--trino_connector_dir=/path/to/libs` |
| `--help` | Show help message | - | `--help` |
@@ -199,14 +194,7 @@ trino-connector/integration-test/
--auto=all --test_set=jdbc-mysql --tester_id=00004
```
-#### Scenario 4: Verify Trino 446 compatibility
-
-```bash
-./trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh \
- --trino_versions_map="446:trino-connector-446-451"
-```
-
-#### Scenario 5: Connect to remote test environment
+#### Scenario 4: Connect to remote test environment
```bash
./trino-connector/integration-test/trino-test-tools/trino_integration_test.sh \
@@ -343,7 +331,7 @@ Use `%` to match variable content:
```
"Trino version: %
```
-Matches: `Trino version: 446`, `Trino version: 435`, etc.
+Matches any Trino version string, e.g. `Trino version: 452`, `Trino version:
435`, etc.
**Example 2: Match query plan**
```
@@ -444,7 +432,7 @@ Expect:
%ScanFilter[...]
"
Actual:
-"Trino version: 446
+"Trino version: 435
Fragment 0 [SINGLE]
...
"
diff --git a/build.gradle.kts b/build.gradle.kts
index 8a41be6ec3..8ef02ab0ee 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -863,13 +863,14 @@ tasks {
dependsOn("trino-connector:trino-connector-435-439:copyLibs")
dependsOn("trino-connector:trino-connector-440-445:copyLibs")
dependsOn("trino-connector:trino-connector-446-451:copyLibs")
+ dependsOn("trino-connector:trino-connector-452-468:copyLibs")
group = "gravitino distribution"
-
outputs.dir(projectDir.dir("distribution/${rootProject.name}-trino-connector-435-439"))
+
outputs.dir(projectDir.dir("distribution/${rootProject.name}-trino-connector-452-468"))
}
val assembleDistribution by registering(Tar::class) {
dependsOn(
- ":trino-connector:trino-connector-435-439:assembleTrinoConnector",
+ ":trino-connector:trino-connector-452-468:assembleTrinoConnector",
"assembleIcebergRESTServer",
"assembleLanceRESTServer"
)
diff --git a/integration-test-common/docker-script/docker-compose.yaml
b/integration-test-common/docker-script/docker-compose.yaml
index 37d90fae33..37cc54cbb9 100644
--- a/integration-test-common/docker-script/docker-compose.yaml
+++ b/integration-test-common/docker-script/docker-compose.yaml
@@ -79,7 +79,7 @@ services:
retries: 5
trino:
- image: trinodb/trino:${TRINO_VERSION:-446}
+ image: trinodb/trino:${TRINO_VERSION:-452}
networks:
- trino-net
container_name: trino-ci-trino
@@ -94,7 +94,7 @@ services:
entrypoint: /bin/bash /tmp/trino/init.sh
volumes:
- ./init/trino:/tmp/trino
- -
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-446-451/build/libs}:/usr/lib/trino/plugin/gravitino
+ -
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-452-468/build/libs}:/usr/lib/trino/plugin/gravitino
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
@@ -113,7 +113,7 @@ services:
condition: service_healthy
trino-worker:
- image: trinodb/trino:${TRINO_VERSION:-446}
+ image: trinodb/trino:${TRINO_VERSION:-452}
networks:
- trino-net
deploy:
@@ -128,7 +128,7 @@ services:
entrypoint: /bin/bash /tmp/trino/init.sh
volumes:
- ./init/trino:/tmp/trino
- -
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-446-451/build/libs}:/usr/lib/trino/plugin/gravitino
+ -
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-452-468/build/libs}:/usr/lib/trino/plugin/gravitino
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
diff --git a/integration-test-common/docker-script/init/trino/config/jvm.config
b/integration-test-common/docker-script/init/trino/config/jvm.config
index 57b0e104dc..93f196e0af 100644
--- a/integration-test-common/docker-script/init/trino/config/jvm.config
+++ b/integration-test-common/docker-script/init/trino/config/jvm.config
@@ -31,5 +31,7 @@
# Reduce starvation of threads by GClocker, recommend to set about the number
of cpu cores (JDK-8192647)
-XX:+UnlockDiagnosticVMOptions
-XX:GCLockerRetryAllocationCount=32
+# Required for Trino 452+ due to JDK-8329528
+-XX:G1NumCollectionsKeepPinned=10000000
-DHADOOP_USER_NAME=hive
-Dlog4j.configurationFile=/etc/trino/log4j2.properties
\ No newline at end of file
diff --git
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
index 16b6e67a5d..fb808c3f59 100644
---
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
+++
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
@@ -74,7 +74,7 @@ public class TrinoITContainers implements AutoCloseable {
File dir = new File(trinoConnectorDir);
if (!dir.exists() || dir.list().length == 0) {
throw new Exception(
- "Gravitino trino connector directory %s is not exist or empty"
+ "Gravitino trino connector directory %s does not exist or is empty"
.formatted(trinoConnectorDir));
}
env.put("GRAVITINO_TRINO_CONNECTOR_DIR", trinoConnectorDir);
diff --git a/settings.gradle.kts b/settings.gradle.kts
index a79f8da9b5..f929f3ce60 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -68,6 +68,7 @@ include(
"trino-connector:trino-connector-435-439",
"trino-connector:trino-connector-440-445",
"trino-connector:trino-connector-446-451",
+ "trino-connector:trino-connector-452-468",
"trino-connector:integration-test"
)
include("spark-connector:spark-common")
diff --git a/trino-connector/integration-test/build.gradle.kts
b/trino-connector/integration-test/build.gradle.kts
index ef21ba21c4..fa0e8cd36b 100644
--- a/trino-connector/integration-test/build.gradle.kts
+++ b/trino-connector/integration-test/build.gradle.kts
@@ -74,6 +74,7 @@ tasks.register("setupDependencies") {
dependsOn(":trino-connector:trino-connector-435-439:copyLibs")
dependsOn(":trino-connector:trino-connector-440-445:copyLibs")
dependsOn(":trino-connector:trino-connector-446-451:copyLibs")
+ dependsOn(":trino-connector:trino-connector-452-468:copyLibs")
dependsOn(":catalogs:catalog-lakehouse-iceberg:jar",
":catalogs:catalog-lakehouse-iceberg:runtimeJars")
dependsOn(":catalogs:catalog-jdbc-mysql:jar",
":catalogs:catalog-jdbc-mysql:runtimeJars")
dependsOn(":catalogs:catalog-jdbc-postgresql:jar",
":catalogs:catalog-jdbc-postgresql:runtimeJars")
diff --git
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
index 2637ef9c67..460fe4fe22 100644
---
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
+++
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
@@ -338,7 +338,7 @@ public class TrinoQueryIT extends TrinoQueryITBase {
CompletionService<Integer> completionService = new
ExecutorCompletionService<>(executor);
String[] testSetNames =
- Arrays.stream(TrinoQueryITBase.listDirectory(testsetsDir))
+ Arrays.stream(TrinoQueryITBase.listTestSetDirectory(testsetsDir))
.filter(s -> new File(ITUtils.joinPath(testsetsDir,
s)).isDirectory())
.filter(s -> ciTestsets.isEmpty() || ciTestsets.contains(s))
.toArray(String[]::new);
@@ -529,14 +529,14 @@ public class TrinoQueryIT extends TrinoQueryITBase {
}
static String[] getTesterNames(String testSetDirName, String
testFilterPrefix) throws Exception {
- return Arrays.stream(listDirectory(testSetDirName))
+ return Arrays.stream(listTestSetDirectory(testSetDirName))
.filter(s -> !s.endsWith("prepare.sql") && !s.endsWith("cleanup.sql")
&& s.endsWith(".sql"))
.filter(s -> testFilterPrefix.isEmpty() ||
s.startsWith(testFilterPrefix))
.toArray(String[]::new);
}
static String[] getTesterCatalogNames(String testSetDirName, String catalog)
throws Exception {
- return Arrays.stream(listDirectory(testSetDirName))
+ return Arrays.stream(listTestSetDirectory(testSetDirName))
.filter(s -> s.matches("catalog_.*_prepare.sql"))
.filter(s -> catalog.isEmpty() || s.equals("catalog_" + catalog +
"_prepare.sql"))
.map(s -> s.replace("catalog_", "").replace("_prepare.sql", ""))
diff --git
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
index 456e24d4c4..5d955bca7e 100644
---
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
+++
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
@@ -277,11 +277,18 @@ public class TrinoQueryITBase {
}
}
- public static String[] listDirectory(String dirname) throws Exception {
+ public static String[] listTestSetDirectory(String dirname) throws Exception
{
File dir = new File(dirname);
- if (dir.exists()) {
- return dir.list();
+ if (!dir.exists()) {
+ throw new Exception("Test queries directory " + dirname + " does not
exist");
}
- throw new Exception("Test queries directory " + dirname + " does not
exist");
+ if (!dir.isDirectory()) {
+ throw new Exception("Path " + dirname + " is not a directory");
+ }
+ String[] files = dir.list();
+ if (files == null) {
+ throw new Exception("Failed to list directory " + dirname + " (I/O
error)");
+ }
+ return files;
}
}
diff --git
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
index 13a4bf8ed3..7078107220 100644
---
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
+++
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
@@ -227,7 +227,7 @@ public class TrinoQueryTestTool {
}
}
if (Strings.isNotEmpty(testerId)) {
- if (Arrays.stream(TrinoQueryIT.listDirectory(testSetDir))
+ if (Arrays.stream(TrinoQueryIT.listTestSetDirectory(testSetDir))
.noneMatch(f -> f.startsWith(testerId))) {
System.out.println("The tester " + testerId + " does not found in
testset");
System.exit(1);
diff --git
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
index c3e55683f7..117d2f1d4f 100644
---
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
+++
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
@@ -1,20 +1,20 @@
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties.demo_all_data_types_default_value (
col_bit boolean,
- col_tinyint tinyint WITH ( default = '0' ),
- col_smallint smallint WITH ( default = '-1' ),
+ col_tinyint tinyint WITH (default = '0'),
+ col_smallint smallint WITH (default = '-1'),
col_mediumint integer,
- col_int integer WITH ( default = '1' ),
- col_bigint bigint WITH ( default = '9999999' ),
- col_float real WITH ( default = '0.0' ),
- col_double double WITH ( default = '1.23456' ),
- col_decimal decimal(10, 2) WITH ( default = '100.50' ),
- col_date date WITH ( default = '2000-01-01' ),
- col_time time(0) WITH ( default = '12:30:01' ),
- col_datetime timestamp(0) WITH ( default = '2025-01-01 00:00:01' ),
- col_timestamp timestamp(0) with time zone WITH ( default = '2025-01-01
00:00:01' ),
+ col_int integer WITH (default = '1'),
+ col_bigint bigint WITH (default = '9999999'),
+ col_float real WITH (default = '0.0'),
+ col_double double WITH (default = '1.23456'),
+ col_decimal decimal(10, 2) WITH (default = '100.50'),
+ col_date date WITH (default = '2000-01-01'),
+ col_time time(0) WITH (default = '12:30:01'),
+ col_datetime timestamp(0) WITH (default = '2025-01-01 00:00:01'),
+ col_timestamp timestamp(0) with time zone WITH (default = '2025-01-01
00:00:01'),
col_year date,
- col_char char(10) WITH ( default = 'abc' ),
- col_varchar varchar(100) WITH ( default = 'Hello' ),
+ col_char char(10) WITH (default = 'abc'),
+ col_varchar varchar(100) WITH (default = 'Hello'),
col_tinytext varchar,
col_text varchar,
col_mediumtext varchar,
@@ -40,13 +40,13 @@ WITH (
int_col_2 integer,
varchar200_col_1 varchar(200),
varchar200_col_2 varchar(200),
- datetime_col_1 timestamp(0) WITH ( default = 'CURRENT_TIMESTAMP' ),
- datetime_col_2 timestamp(0) WITH ( default = 'CURRENT_TIMESTAMP' ),
+ datetime_col_1 timestamp(0) WITH (default = 'CURRENT_TIMESTAMP'),
+ datetime_col_2 timestamp(0) WITH (default = 'CURRENT_TIMESTAMP'),
date_col_1 date,
date_col_2 date,
date_col_3 date,
- timestamp_col_1 timestamp(0) with time zone WITH ( default =
'CURRENT_TIMESTAMP' ),
- timestamp_col_2 timestamp(0) with time zone WITH ( default =
'CURRENT_TIMESTAMP' )
+ timestamp_col_1 timestamp(0) with time zone WITH (default =
'CURRENT_TIMESTAMP'),
+ timestamp_col_2 timestamp(0) with time zone WITH (default =
'CURRENT_TIMESTAMP')
)
COMMENT ''
WITH (
@@ -58,22 +58,22 @@ CREATE SCHEMA
CREATE TABLE
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_default_value (
- key1 integer NOT NULL WITH ( auto_increment = true ),
- f1 varchar(200) WITH ( default = 'VARCHAR' ),
- f2 char(20) WITH ( default = 'CHAR' ),
- f4 decimal(10, 3) WITH ( default = '0.300' ),
- f5 real WITH ( default = '0.3' ),
- f6 double WITH ( default = '0.3' ),
- f8 tinyint WITH ( default = '1' ),
- f9 smallint WITH ( default = '1' ),
- f10 integer WITH ( default = '1' ),
- f11 integer WITH ( default = '1' ),
- f12 bigint WITH ( default = '1' ),
- f13 date WITH ( default = '2024-04-01' ),
- f14 time(0) WITH ( default = '08:00' ),
- f15 timestamp(0) WITH ( default = '2012-12-31 11:30:45' ),
- f16 timestamp(0) with time zone WITH ( default = '2012-12-31 11:30:45' ),
- f17 timestamp(0) with time zone WITH ( default = 'CURRENT_TIMESTAMP' )
+ key1 integer NOT NULL WITH (auto_increment = true),
+ f1 varchar(200) WITH (default = 'VARCHAR'),
+ f2 char(20) WITH (default = 'CHAR'),
+ f4 decimal(10, 3) WITH (default = '0.300'),
+ f5 real WITH (default = '0.3'),
+ f6 double WITH (default = '0.3'),
+ f8 tinyint WITH (default = '1'),
+ f9 smallint WITH (default = '1'),
+ f10 integer WITH (default = '1'),
+ f11 integer WITH (default = '1'),
+ f12 bigint WITH (default = '1'),
+ f13 date WITH (default = '2024-04-01'),
+ f14 time(0) WITH (default = '08:00'),
+ f15 timestamp(0) WITH (default = '2012-12-31 11:30:45'),
+ f16 timestamp(0) with time zone WITH (default = '2012-12-31 11:30:45'),
+ f17 timestamp(0) with time zone WITH (default = 'CURRENT_TIMESTAMP')
)
COMMENT ''
WITH (
@@ -90,7 +90,7 @@ DROP TABLE
CREATE TABLE
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_1 (
- key1 integer NOT NULL WITH ( auto_increment = true ),
+ key1 integer NOT NULL WITH (auto_increment = true),
f1 timestamp(0),
f2 date
)
@@ -105,7 +105,7 @@ DROP TABLE
CREATE TABLE
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_2 (
- key1 integer NOT NULL WITH ( auto_increment = true ),
+ key1 integer NOT NULL WITH (auto_increment = true),
key2 integer NOT NULL,
f1 timestamp(0),
f2 date
@@ -121,7 +121,7 @@ DROP TABLE
CREATE TABLE
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_3 (
- key1 integer NOT NULL WITH ( auto_increment = true ),
+ key1 integer NOT NULL WITH (auto_increment = true),
col1 integer
)
COMMENT ''
@@ -135,7 +135,7 @@ DROP TABLE
CREATE TABLE
"CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_4 (
- key1 integer NOT NULL WITH ( auto_increment = true ),
+ key1 integer NOT NULL WITH (auto_increment = true),
key2 integer,
col1 integer
)
diff --git
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-446-451.patch
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-446-451.patch
new file mode 100644
index 0000000000..4e158cd7cd
--- /dev/null
+++
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-446-451.patch
@@ -0,0 +1,131 @@
+diff --git
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
+index 117d2f1d4..c3e55683f 100644
+---
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
++++
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00011_column_properties.txt
+@@ -1,20 +1,20 @@
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties.demo_all_data_types_default_value (
+ col_bit boolean,
+- col_tinyint tinyint WITH (default = '0'),
+- col_smallint smallint WITH (default = '-1'),
++ col_tinyint tinyint WITH ( default = '0' ),
++ col_smallint smallint WITH ( default = '-1' ),
+ col_mediumint integer,
+- col_int integer WITH (default = '1'),
+- col_bigint bigint WITH (default = '9999999'),
+- col_float real WITH (default = '0.0'),
+- col_double double WITH (default = '1.23456'),
+- col_decimal decimal(10, 2) WITH (default = '100.50'),
+- col_date date WITH (default = '2000-01-01'),
+- col_time time(0) WITH (default = '12:30:01'),
+- col_datetime timestamp(0) WITH (default = '2025-01-01 00:00:01'),
+- col_timestamp timestamp(0) with time zone WITH (default = '2025-01-01
00:00:01'),
++ col_int integer WITH ( default = '1' ),
++ col_bigint bigint WITH ( default = '9999999' ),
++ col_float real WITH ( default = '0.0' ),
++ col_double double WITH ( default = '1.23456' ),
++ col_decimal decimal(10, 2) WITH ( default = '100.50' ),
++ col_date date WITH ( default = '2000-01-01' ),
++ col_time time(0) WITH ( default = '12:30:01' ),
++ col_datetime timestamp(0) WITH ( default = '2025-01-01 00:00:01' ),
++ col_timestamp timestamp(0) with time zone WITH ( default = '2025-01-01
00:00:01' ),
+ col_year date,
+- col_char char(10) WITH (default = 'abc'),
+- col_varchar varchar(100) WITH (default = 'Hello'),
++ col_char char(10) WITH ( default = 'abc' ),
++ col_varchar varchar(100) WITH ( default = 'Hello' ),
+ col_tinytext varchar,
+ col_text varchar,
+ col_mediumtext varchar,
+@@ -40,13 +40,13 @@ WITH (
+ int_col_2 integer,
+ varchar200_col_1 varchar(200),
+ varchar200_col_2 varchar(200),
+- datetime_col_1 timestamp(0) WITH (default = 'CURRENT_TIMESTAMP'),
+- datetime_col_2 timestamp(0) WITH (default = 'CURRENT_TIMESTAMP'),
++ datetime_col_1 timestamp(0) WITH ( default = 'CURRENT_TIMESTAMP' ),
++ datetime_col_2 timestamp(0) WITH ( default = 'CURRENT_TIMESTAMP' ),
+ date_col_1 date,
+ date_col_2 date,
+ date_col_3 date,
+- timestamp_col_1 timestamp(0) with time zone WITH (default =
'CURRENT_TIMESTAMP'),
+- timestamp_col_2 timestamp(0) with time zone WITH (default =
'CURRENT_TIMESTAMP')
++ timestamp_col_1 timestamp(0) with time zone WITH ( default =
'CURRENT_TIMESTAMP' ),
++ timestamp_col_2 timestamp(0) with time zone WITH ( default =
'CURRENT_TIMESTAMP' )
+ )
+ COMMENT ''
+ WITH (
+@@ -58,22 +58,22 @@ CREATE SCHEMA
+ CREATE TABLE
+
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_default_value (
+- key1 integer NOT NULL WITH (auto_increment = true),
+- f1 varchar(200) WITH (default = 'VARCHAR'),
+- f2 char(20) WITH (default = 'CHAR'),
+- f4 decimal(10, 3) WITH (default = '0.300'),
+- f5 real WITH (default = '0.3'),
+- f6 double WITH (default = '0.3'),
+- f8 tinyint WITH (default = '1'),
+- f9 smallint WITH (default = '1'),
+- f10 integer WITH (default = '1'),
+- f11 integer WITH (default = '1'),
+- f12 bigint WITH (default = '1'),
+- f13 date WITH (default = '2024-04-01'),
+- f14 time(0) WITH (default = '08:00'),
+- f15 timestamp(0) WITH (default = '2012-12-31 11:30:45'),
+- f16 timestamp(0) with time zone WITH (default = '2012-12-31 11:30:45'),
+- f17 timestamp(0) with time zone WITH (default = 'CURRENT_TIMESTAMP')
++ key1 integer NOT NULL WITH ( auto_increment = true ),
++ f1 varchar(200) WITH ( default = 'VARCHAR' ),
++ f2 char(20) WITH ( default = 'CHAR' ),
++ f4 decimal(10, 3) WITH ( default = '0.300' ),
++ f5 real WITH ( default = '0.3' ),
++ f6 double WITH ( default = '0.3' ),
++ f8 tinyint WITH ( default = '1' ),
++ f9 smallint WITH ( default = '1' ),
++ f10 integer WITH ( default = '1' ),
++ f11 integer WITH ( default = '1' ),
++ f12 bigint WITH ( default = '1' ),
++ f13 date WITH ( default = '2024-04-01' ),
++ f14 time(0) WITH ( default = '08:00' ),
++ f15 timestamp(0) WITH ( default = '2012-12-31 11:30:45' ),
++ f16 timestamp(0) with time zone WITH ( default = '2012-12-31 11:30:45' ),
++ f17 timestamp(0) with time zone WITH ( default = 'CURRENT_TIMESTAMP' )
+ )
+ COMMENT ''
+ WITH (
+@@ -90,7 +90,7 @@ DROP TABLE
+ CREATE TABLE
+
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_1 (
+- key1 integer NOT NULL WITH (auto_increment = true),
++ key1 integer NOT NULL WITH ( auto_increment = true ),
+ f1 timestamp(0),
+ f2 date
+ )
+@@ -105,7 +105,7 @@ DROP TABLE
+ CREATE TABLE
+
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_2 (
+- key1 integer NOT NULL WITH (auto_increment = true),
++ key1 integer NOT NULL WITH ( auto_increment = true ),
+ key2 integer NOT NULL,
+ f1 timestamp(0),
+ f2 date
+@@ -121,7 +121,7 @@ DROP TABLE
+ CREATE TABLE
+
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_3 (
+- key1 integer NOT NULL WITH (auto_increment = true),
++ key1 integer NOT NULL WITH ( auto_increment = true ),
+ col1 integer
+ )
+ COMMENT ''
+@@ -135,7 +135,7 @@ DROP TABLE
+ CREATE TABLE
+
+ "CREATE TABLE
gt_mysql.gt_mysql_test_column_properties_v2.test_create_with_auto_increment_4 (
+- key1 integer NOT NULL WITH (auto_increment = true),
++ key1 integer NOT NULL WITH ( auto_increment = true ),
+ key2 integer,
+ col1 integer
+ )
diff --git
a/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
b/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
index 39e273e0a3..56bdbf9067 100644
---
a/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
+++
b/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
@@ -41,7 +41,7 @@ public class GravitinoConnectorFactory446 extends
GravitinoConnectorFactory {
@Override
protected boolean supportCatalogNameWithMetalake() {
- return false;
+ return true;
}
@Override
diff --git a/trino-connector/trino-connector-452-468/build.gradle.kts
b/trino-connector/trino-connector-452-468/build.gradle.kts
new file mode 100644
index 0000000000..6bcdff5e41
--- /dev/null
+++ b/trino-connector/trino-connector-452-468/build.gradle.kts
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+import com.diffplug.gradle.spotless.SpotlessExtension
+import net.ltgt.gradle.errorprone.errorprone
+import org.gradle.internal.hash.ChecksumService
+import org.gradle.kotlin.dsl.support.serviceOf
+
+plugins {
+ `java-library`
+ `maven-publish`
+}
+
+// This module supports Trino versions 452-468
+val minTrinoVersion = 452
+val maxTrinoVersion = 468
+val otelSemconvVersion = "1.32.0"
+
+val trinoVersion = providers.gradleProperty("trinoVersion")
+ .map { it.trim().toInt() }
+ .orElse(minTrinoVersion)
+ .get()
+
+// Validate version range
+check(trinoVersion in minTrinoVersion..maxTrinoVersion) {
+ "Module ${project.path} supports Trino versions
$minTrinoVersion-$maxTrinoVersion, " +
+ "but trinoVersion=$trinoVersion was specified. " +
+ "Please set '-PtrinoVersion=$minTrinoVersion' (or any version in the
supported range)."
+}
+
+java {
+ toolchain.languageVersion.set(JavaLanguageVersion.of(24))
+}
+
+dependencies {
+ implementation(project(":catalogs:catalog-common"))
+ implementation(project(":clients:client-java-runtime", configuration =
"shadow"))
+ implementation(libs.airlift.json)
+ implementation(libs.bundles.log4j)
+ implementation(libs.commons.collections4)
+ implementation(libs.commons.lang3)
+ implementation("io.trino:trino-jdbc:$trinoVersion")
+
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv:$otelSemconvVersion")
+ compileOnly(libs.airlift.resolver)
+ compileOnly("io.trino:trino-spi:$trinoVersion") {
+ exclude("org.apache.logging.log4j")
+ }
+ testImplementation(libs.awaitility)
+ testImplementation(libs.mockito.core)
+ testImplementation(libs.mysql.driver)
+ testImplementation("io.trino:trino-memory:$trinoVersion") {
+ exclude("org.antlr")
+ exclude("org.apache.logging.log4j")
+ }
+ testImplementation("io.trino:trino-testing:$trinoVersion") {
+ exclude("org.apache.logging.log4j")
+ }
+ testRuntimeOnly(libs.junit.jupiter.engine)
+}
+
+sourceSets {
+ main {
+ java.srcDirs("../trino-connector/src/main/java")
+ }
+ test {
+ java.srcDirs("../trino-connector/src/test/java")
+ resources.srcDirs("../trino-connector/src/test/resources")
+ }
+}
+
+plugins.withId("com.diffplug.spotless") {
+ configure<SpotlessExtension> {
+ java {
+ // Keep Spotless within this module to avoid cross-project target errors.
+ target(project.fileTree("src") { include("**/*.java") })
+ }
+ }
+}
+
+tasks.withType<JavaCompile>().configureEach {
+ // Error Prone is incompatible with the JDK 24 toolchain required by this
Trino range.
+ options.errorprone.isEnabled.set(false)
+ options.release.set(17)
+}
+
+tasks.withType<Test>().configureEach {
+ extensions
+
.findByType(org.gradle.testing.jacoco.plugins.JacocoTaskExtension::class.java)
+ ?.isEnabled = false
+}
+
+tasks {
+ val copyRuntimeLibs by registering(Copy::class) {
+ dependsOn("jar")
+ from({ configurations.runtimeClasspath.get().filter(File::isFile) })
+ into(layout.buildDirectory.dir("libs"))
+ }
+
+ val distributionDir =
rootProject.layout.projectDirectory.dir("distribution/${rootProject.name}-${project.name}")
+
+ val copyLibs by registering(Copy::class) {
+ dependsOn(copyRuntimeLibs, "build")
+ from(layout.buildDirectory.dir("libs"))
+ from(rootProject.layout.projectDirectory.dir("licenses")) {
+ into("licenses")
+ }
+ from(rootProject.file("LICENSE.trino"))
+ from(rootProject.file("NOTICE.trino"))
+ from(rootProject.file("README.md"))
+ into(distributionDir)
+ rename { fileName ->
+ fileName.replace(".trino", "")
+ }
+ outputs.dir(distributionDir)
+ }
+
+ val assembleTrinoConnector by registering(Tar::class) {
+ dependsOn(copyLibs)
+ group = "gravitino distribution"
+ finalizedBy("checksumTrinoConnector")
+ val archiveBase = "${rootProject.name}-${project.name}-$version"
+ into(archiveBase)
+ from(distributionDir)
+ compression = Compression.GZIP
+ archiveFileName.set("$archiveBase.tar.gz")
+
destinationDirectory.set(rootProject.layout.projectDirectory.dir("distribution"))
+ }
+
+ val checksumTrinoConnector by registering {
+ group = "gravitino distribution"
+ dependsOn(assembleTrinoConnector)
+ val archiveFile = assembleTrinoConnector.flatMap { it.archiveFile }
+ val checksumFile = archiveFile.map { archive ->
+ archive.asFile.let { it.resolveSibling("${it.name}.sha256") }
+ }
+ inputs.file(archiveFile)
+ outputs.file(checksumFile)
+ doLast {
+ checksumFile.get().writeText(
+
serviceOf<ChecksumService>().sha256(archiveFile.get().asFile).toString()
+ )
+ }
+ }
+
+ named("build") {
+ finalizedBy(copyRuntimeLibs)
+ }
+}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector452.java
new file mode 100644
index 0000000000..e2cbd08873
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector452.java
@@ -0,0 +1,67 @@
+/*
+ * 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;
+
+import io.trino.spi.connector.Connector;
+import io.trino.spi.connector.ConnectorMetadata;
+import io.trino.spi.connector.ConnectorNodePartitioningProvider;
+import io.trino.spi.connector.ConnectorPageSourceProviderFactory;
+import io.trino.spi.connector.ConnectorSplitManager;
+import org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext;
+import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata;
+import
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
+
+public class GravitinoConnector452 extends GravitinoConnector {
+
+ public GravitinoConnector452(CatalogConnectorContext connectorContext) {
+ super(connectorContext);
+ }
+
+ @Override
+ protected GravitinoMetadata createGravitinoMetadata(
+ CatalogConnectorMetadata catalogConnectorMetadata,
+ CatalogConnectorMetadataAdapter metadataAdapter,
+ ConnectorMetadata internalMetadata) {
+ return new GravitinoMetadata452(catalogConnectorMetadata, metadataAdapter,
internalMetadata);
+ }
+
+ @Override
+ public ConnectorSplitManager getSplitManager() {
+ ConnectorSplitManager splitManager =
+ catalogConnectorContext.getInternalConnector().getSplitManager();
+ return new GravitinoSplitManager452(splitManager);
+ }
+
+ @Override
+ public ConnectorNodePartitioningProvider getNodePartitioningProvider() {
+ ConnectorNodePartitioningProvider nodePartitioningProvider =
+
catalogConnectorContext.getInternalConnector().getNodePartitioningProvider();
+ return new GravitinoNodePartitioningProvider452(nodePartitioningProvider);
+ }
+
+ @Override
+ public ConnectorPageSourceProviderFactory getPageSourceProviderFactory() {
+ Connector internalConnector =
catalogConnectorContext.getInternalConnector();
+ ConnectorPageSourceProviderFactory
internalConnectorPageSourceProviderFactory =
+ internalConnector.getPageSourceProviderFactory();
+ return () ->
+ new GravitinoDataSourceProvider(
+
internalConnectorPageSourceProviderFactory.createPageSourceProvider());
+ }
+}
diff --git
a/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory452.java
similarity index 79%
copy from
trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
copy to
trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory452.java
index 39e273e0a3..f8c69d7c6e 100644
---
a/trino-connector/trino-connector-446-451/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory446.java
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory452.java
@@ -23,20 +23,25 @@ import
org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext;
import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector;
import
org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory;
-public class GravitinoConnectorFactory446 extends GravitinoConnectorFactory {
+public class GravitinoConnectorFactory452 extends GravitinoConnectorFactory {
- public GravitinoConnectorFactory446(GravitinoAdminClient client) {
+ public GravitinoConnectorFactory452(GravitinoAdminClient client) {
super(client);
}
@Override
protected int getMinSupportTrinoSpiVersion() {
- return 446;
+ return 452;
}
@Override
protected int getMaxSupportTrinoSpiVersion() {
- return 451;
+ return 468;
+ }
+
+ @Override
+ protected String getTrinoCatalogName(String metalake, String catalog) {
+ return "\"" + metalake + "." + catalog + "\"";
}
@Override
@@ -46,12 +51,12 @@ public class GravitinoConnectorFactory446 extends
GravitinoConnectorFactory {
@Override
protected GravitinoConnector createConnector(CatalogConnectorContext
connectorContext) {
- return new GravitinoConnector446(connectorContext);
+ return new GravitinoConnector452(connectorContext);
}
@Override
protected GravitinoSystemConnector createSystemConnector(
GravitinoStoredProcedureFactory storedProcedureFactory) {
- return new GravitinoSystemConnector446(storedProcedureFactory);
+ return new GravitinoSystemConnector452(storedProcedureFactory);
}
}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata452.java
new file mode 100644
index 0000000000..ff43beb290
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata452.java
@@ -0,0 +1,96 @@
+/*
+ * 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;
+
+import io.airlift.slice.Slice;
+import io.trino.spi.connector.ColumnMetadata;
+import io.trino.spi.connector.ConnectorInsertTableHandle;
+import io.trino.spi.connector.ConnectorMergeTableHandle;
+import io.trino.spi.connector.ConnectorOutputMetadata;
+import io.trino.spi.connector.ConnectorSession;
+import io.trino.spi.connector.ConnectorTableHandle;
+import io.trino.spi.connector.RetryMode;
+import io.trino.spi.connector.SchemaTableName;
+import io.trino.spi.statistics.ComputedStatistics;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata;
+import
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
+import org.apache.gravitino.trino.connector.metadata.GravitinoColumn;
+
+public class GravitinoMetadata452 extends GravitinoMetadata {
+
+ public GravitinoMetadata452(
+ CatalogConnectorMetadata catalogConnectorMetadata,
+ CatalogConnectorMetadataAdapter metadataAdapter,
+ io.trino.spi.connector.ConnectorMetadata internalMetadata) {
+ super(catalogConnectorMetadata, metadataAdapter, internalMetadata);
+ }
+
+ @Override
+ public void addColumn(
+ ConnectorSession session, ConnectorTableHandle tableHandle,
ColumnMetadata column) {
+ GravitinoColumn gravitinoColumn = metadataAdapter.createColumn(column);
+ catalogConnectorMetadata.addColumn(getTableName(tableHandle),
gravitinoColumn);
+ }
+
+ @Override
+ public Optional<ConnectorOutputMetadata> finishInsert(
+ ConnectorSession session,
+ ConnectorInsertTableHandle insertHandle,
+ List<ConnectorTableHandle> sourceTableHandles,
+ Collection<Slice> fragments,
+ Collection<ComputedStatistics> computedStatistics) {
+ return internalMetadata.finishInsert(
+ session,
+ GravitinoHandle.unWrap(insertHandle),
+
sourceTableHandles.stream().map(GravitinoHandle::unWrap).collect(Collectors.toList()),
+ fragments,
+ computedStatistics);
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public ConnectorMergeTableHandle beginMerge(
+ ConnectorSession session, ConnectorTableHandle tableHandle, RetryMode
retryMode) {
+ ConnectorMergeTableHandle connectorMergeTableHandle =
+ internalMetadata.beginMerge(session,
GravitinoHandle.unWrap(tableHandle), retryMode);
+ SchemaTableName tableName = getTableName(tableHandle);
+
+ return new GravitinoMergeTableHandle(
+ tableName.getSchemaName(), tableName.getTableName(),
connectorMergeTableHandle);
+ }
+
+ @Override
+ public void finishMerge(
+ ConnectorSession session,
+ ConnectorMergeTableHandle mergeTableHandle,
+ List<ConnectorTableHandle> sourceTableHandles,
+ Collection<Slice> fragments,
+ Collection<ComputedStatistics> computedStatistics) {
+ internalMetadata.finishMerge(
+ session,
+ GravitinoHandle.unWrap(mergeTableHandle),
+
sourceTableHandles.stream().map(GravitinoHandle::unWrap).collect(Collectors.toList()),
+ fragments,
+ computedStatistics);
+ }
+}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider452.java
new file mode 100644
index 0000000000..ef8475d5c5
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider452.java
@@ -0,0 +1,30 @@
+/*
+ * 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;
+
+import io.trino.spi.connector.ConnectorNodePartitioningProvider;
+
+/** Trino NodePartitioningProvider implementation with the new split bucket
function signature. */
+public class GravitinoNodePartitioningProvider452 extends
GravitinoNodePartitioningProvider {
+
+ public GravitinoNodePartitioningProvider452(
+ ConnectorNodePartitioningProvider nodePartitioningProvider) {
+ super(nodePartitioningProvider);
+ }
+}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin452.java
new file mode 100644
index 0000000000..907769d805
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin452.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.gravitino.client.GravitinoAdminClient;
+
+/** Trino plugin endpoint, using java spi mechanism */
+public class GravitinoPlugin452 extends GravitinoPlugin {
+
+ public GravitinoPlugin452() {
+ super();
+ }
+
+ public GravitinoPlugin452(GravitinoAdminClient client) {
+ super(client);
+ }
+
+ @Override
+ protected GravitinoConnectorFactory
createConnectorFactory(GravitinoAdminClient client) {
+ return new GravitinoConnectorFactory452(client);
+ }
+}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager452.java
new file mode 100644
index 0000000000..6c84514e2e
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager452.java
@@ -0,0 +1,61 @@
+/*
+ * 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;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.trino.spi.connector.ConnectorSplit;
+import io.trino.spi.connector.ConnectorSplitManager;
+import io.trino.spi.connector.ConnectorSplitSource;
+
+public class GravitinoSplitManager452 extends GravitinoSplitManager {
+
+ public GravitinoSplitManager452(ConnectorSplitManager internalSplitManager) {
+ super(internalSplitManager);
+ }
+
+ @Override
+ protected ConnectorSplitSource createSplitSource(ConnectorSplitSource
splits) {
+ return new GravitinoSplitSource452(splits);
+ }
+
+ static class GravitinoSplitSource452 extends GravitinoSplitSource {
+
+ GravitinoSplitSource452(ConnectorSplitSource connectorSplitSource) {
+ super(connectorSplitSource);
+ }
+
+ @Override
+ protected ConnectorSplit createSplit(ConnectorSplit split) {
+ return new GravitinoSplit452(split);
+ }
+ }
+
+ public static class GravitinoSplit452 extends GravitinoSplit {
+
+ @JsonCreator
+ public GravitinoSplit452(@JsonProperty(HANDLE_STRING) String handleString)
{
+ super(handleString);
+ }
+
+ public GravitinoSplit452(ConnectorSplit split) {
+ super(split);
+ }
+ }
+}
diff --git
a/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector452.java
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector452.java
new file mode 100644
index 0000000000..3dd53e12d5
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector452.java
@@ -0,0 +1,82 @@
+/*
+ * 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;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.trino.spi.Page;
+import io.trino.spi.connector.ConnectorPageSource;
+import io.trino.spi.connector.ConnectorPageSourceProvider;
+import io.trino.spi.connector.ConnectorSplit;
+import io.trino.spi.connector.ConnectorSplitManager;
+import io.trino.spi.connector.SchemaTableName;
+import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector;
+import
org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory;
+
+public class GravitinoSystemConnector452 extends GravitinoSystemConnector {
+
+ public GravitinoSystemConnector452(
+ GravitinoStoredProcedureFactory gravitinoStoredProcedureFactory) {
+ super(gravitinoStoredProcedureFactory);
+ }
+
+ @Override
+ protected ConnectorSplitManager createSplitManager() {
+ return new GravitinoSplitManager452();
+ }
+
+ @Override
+ protected ConnectorPageSourceProvider createPageSourceProvider() {
+ return new DatasourceProvider452();
+ }
+
+ static class DatasourceProvider452 extends DatasourceProvider {
+
+ @Override
+ protected ConnectorPageSource createPageSource(Page page) {
+ return new SystemTablePageSource452(page);
+ }
+ }
+
+ static class GravitinoSplitManager452 extends SplitManager {
+
+ protected ConnectorSplit createSplit(SchemaTableName tableName) {
+ return new Split452(tableName);
+ }
+ }
+
+ static class SystemTablePageSource452 extends SystemTablePageSource {
+
+ public SystemTablePageSource452(Page page) {
+ super(page);
+ }
+
+ public Page getNextPage() {
+ return nextPage();
+ }
+ }
+
+ public static class Split452 extends Split {
+
+ @JsonCreator
+ public Split452(@JsonProperty("tableName") SchemaTableName tableName) {
+ super(tableName);
+ }
+ }
+}
diff --git a/integration-test-common/docker-script/init/trino/config/jvm.config
b/trino-connector/trino-connector-452-468/src/main/resources/META-INF/services/io.trino.spi.Plugin
similarity index 55%
copy from integration-test-common/docker-script/init/trino/config/jvm.config
copy to
trino-connector/trino-connector-452-468/src/main/resources/META-INF/services/io.trino.spi.Plugin
index 57b0e104dc..3d61d7e651 100644
--- a/integration-test-common/docker-script/init/trino/config/jvm.config
+++
b/trino-connector/trino-connector-452-468/src/main/resources/META-INF/services/io.trino.spi.Plugin
@@ -16,20 +16,4 @@
# specific language governing permissions and limitations
# under the License.
#
--XX:InitialRAMPercentage=30
--XX:MaxRAMPercentage=60
--XX:G1HeapRegionSize=32M
--XX:+ExplicitGCInvokesConcurrent
--XX:+HeapDumpOnOutOfMemoryError
--XX:+ExitOnOutOfMemoryError
--XX:-OmitStackTraceInFastThrow
--XX:ReservedCodeCacheSize=256M
--XX:PerMethodRecompilationCutoff=10000
--XX:PerBytecodeRecompilationCutoff=10000
--Djdk.attach.allowAttachSelf=true
--Djdk.nio.maxCachedBufferSize=2000000
-# Reduce starvation of threads by GClocker, recommend to set about the number
of cpu cores (JDK-8192647)
--XX:+UnlockDiagnosticVMOptions
--XX:GCLockerRetryAllocationCount=32
--DHADOOP_USER_NAME=hive
--Dlog4j.configurationFile=/etc/trino/log4j2.properties
\ No newline at end of file
+org.apache.gravitino.trino.connector.GravitinoPlugin452
diff --git
a/trino-connector/trino-connector-452-468/src/test/java/TestGravitinoConnector452.java
b/trino-connector/trino-connector-452-468/src/test/java/TestGravitinoConnector452.java
new file mode 100644
index 0000000000..d2c1fb41b7
--- /dev/null
+++
b/trino-connector/trino-connector-452-468/src/test/java/TestGravitinoConnector452.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+import static io.trino.testing.TestingSession.testSessionBuilder;
+
+import io.trino.Session;
+import io.trino.testing.DistributedQueryRunner;
+import org.apache.gravitino.client.GravitinoAdminClient;
+import org.apache.gravitino.trino.connector.GravitinoPlugin;
+import org.apache.gravitino.trino.connector.GravitinoPlugin452;
+import org.apache.gravitino.trino.connector.TestGravitinoConnector;
+import
org.apache.gravitino.trino.connector.TestGravitinoConnectorWithMetalakeCatalogName;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+
+public class TestGravitinoConnector452 {
+ @Nested
+ class SingleMetalake extends TestGravitinoConnector {
+ @Override
+ protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient
client) {
+ return new GravitinoPlugin452(client);
+ }
+
+ @Override
+ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception
{
+ Session session = testSessionBuilder().setCatalog("gravitino").build();
+ return DistributedQueryRunner.builder(session).setWorkerCount(1).build();
+ }
+ }
+
+ @Nested
+ @Disabled
+ class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName {
+ @Override
+ protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient
client) {
+ return new GravitinoPlugin452(client);
+ }
+
+ @Override
+ protected DistributedQueryRunner createTrinoQueryRunner() throws Exception
{
+ Session session = testSessionBuilder().setCatalog("gravitino").build();
+ return DistributedQueryRunner.builder(session).setWorkerCount(1).build();
+ }
+ }
+}
diff --git
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector.java
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector.java
index 99a7f803ac..710bf2a0ff 100644
---
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector.java
+++
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector.java
@@ -37,7 +37,7 @@ public abstract class TestGravitinoConnector extends
AbstractGravitinoConnectorT
public static final int SPI_VERSION_TEST_SUPPORT_RENAME_COLUMN = 452;
public static final int SPI_VERSION_SUPPORT_ADD_COLUMN_WITH_POSITION = 468;
- public static final int SPI_VERSION_TEST_SUPPORT_ADD_COLUMN = 469;
+ public static final int SPI_VERSION_TEST_SUPPORT_ADD_COLUMN = 452;
@Override
protected void configureCatalogs(