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

commit 5b72977a7f0d5c05910840aa59fbde83fa256e38
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)
    
    Add the version segment module for 452-468 to support Trino 452 through
    Trino 468
    
    Fix: #9961
    
    NO
    
    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 +---
 .../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 +-
 24 files changed, 822 insertions(+), 103 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/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 8dd679883d..71a7bc776e 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -72,6 +72,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(

Reply via email to