This is an automated email from the ASF dual-hosted git repository.

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new acb38a18ad [#10091] feat (trino-connector): Add the version segment 
module to support Trino 473-478 (#10188)
acb38a18ad is described below

commit acb38a18ad3747d621eb0ddb273f68d710c9b7de
Author: Yuhui <[email protected]>
AuthorDate: Wed Mar 4 21:05:33 2026 +0800

    [#10091] feat (trino-connector): Add the version segment module to support 
Trino 473-478 (#10188)
    
    ### What changes were proposed in this pull request?
    
    Add the version segment module to support Trino 473-478
    
    ### Why are the changes needed?
    
    Fix: #10091
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    UT and IT
    
    Co-authored-by: qbhan <[email protected]>
---
 .claude/skills/trino-test/trino-test-guide.md      |   7 +
 build.gradle.kts                                   |   3 +-
 dev/docker/trino/trino-dependency.sh               |   4 +-
 docs/trino-connector/configuration.md              |   2 +-
 docs/trino-connector/development.md                |   7 +-
 docs/trino-connector/installation.md               |   1 +
 docs/trino-connector/requirements.md               |   2 +-
 .../docker-script/docker-compose.yaml              |   8 +-
 .../docker-script/init/trino/config/jvm.config     |  19 +-
 settings.gradle.kts                                |   1 +
 trino-connector/integration-test/build.gradle.kts  |   1 +
 .../testsets/hive/00008_decimal.sql                |   2 +-
 .../jdbc-postgresql/00004_query_pushdown.txt       |   8 +-
 .../trino-ci-testset/testsets/tpcds/00002.sql      |  14 +-
 .../trino-ci-testset/testsets/tpcds/00020.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00036.sql      |   4 +-
 .../trino-ci-testset/testsets/tpcds/00049.sql      |  12 +-
 .../trino-ci-testset/testsets/tpcds/00059.sql      |  14 +-
 .../trino-ci-testset/testsets/tpcds/00061.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00066.sql      |  24 +-
 .../trino-ci-testset/testsets/tpcds/00066.txt      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00075.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00078.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00089.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00090.sql      |   2 +-
 .../trino-ci-testset/testsets/tpcds/00098.sql      |   2 +-
 .../trino-ci-testset/testsets/tpch/00008.sql       |   4 +-
 .../trino-ci-testset/testsets/trino-469-478.patch  | 384 +++++++++++++++++++++
 .../trino-connector-473-478/build.gradle.kts       | 168 +++++++++
 .../trino/connector/GravitinoConnector478.java     |  67 ++++
 .../connector/GravitinoConnectorFactory478.java    |  62 ++++
 .../trino/connector/GravitinoMetadata478.java      | 127 +++++++
 .../GravitinoNodePartitioningProvider478.java      |  48 +++
 .../trino/connector/GravitinoPlugin478.java        |  38 ++
 .../trino/connector/GravitinoSplitManager478.java  |  61 ++++
 .../connector/GravitinoSystemConnector478.java     |  83 +++++
 .../META-INF/services/io.trino.spi.Plugin          |  20 +-
 .../trino/connector/TestGravitinoConnector478.java |  58 ++++
 38 files changed, 1177 insertions(+), 92 deletions(-)

diff --git a/.claude/skills/trino-test/trino-test-guide.md 
b/.claude/skills/trino-test/trino-test-guide.md
index fcbcde0fb7..fa4a08cc38 100644
--- a/.claude/skills/trino-test/trino-test-guide.md
+++ b/.claude/skills/trino-test/trino-test-guide.md
@@ -500,6 +500,13 @@ testsets/
 └── tpcds/                   # TPC-DS benchmark tests
 ```
 
+All test sets are located in the testsets directory. Each test set contains 
one or more catalogs to test.
+Each catalog in a test set requires two files for initialization and cleanup:
+- `catalog_xxx_prepare.txt`: Initialization script
+- `catalog_xxx_clean.txt`: Cleanup script
+
+Each test file will be executed against every catalog in the test set.
+
 #### Test File Naming Convention
 
 Use 5-digit number prefix for easy sorting and reference:
diff --git a/build.gradle.kts b/build.gradle.kts
index 47aa93942b..e1cbefaa82 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -903,7 +903,7 @@ tasks {
   }
 
   val compileTrinoConnector by registering {
-    dependsOn("trino-connector:trino-connector-469-472:copyLibs")
+    dependsOn("trino-connector:trino-connector-473-478:copyLibs")
     group = "gravitino distribution"
   }
 
@@ -914,6 +914,7 @@ tasks {
       ":trino-connector:trino-connector-446-451:assembleTrinoConnector",
       ":trino-connector:trino-connector-452-468:assembleTrinoConnector",
       ":trino-connector:trino-connector-469-472:assembleTrinoConnector",
+      ":trino-connector:trino-connector-473-478:assembleTrinoConnector",
       "assembleIcebergRESTServer",
       "assembleLanceRESTServer"
     )
diff --git a/dev/docker/trino/trino-dependency.sh 
b/dev/docker/trino/trino-dependency.sh
index 09b89e89e8..49689a01eb 100755
--- a/dev/docker/trino/trino-dependency.sh
+++ b/dev/docker/trino/trino-dependency.sh
@@ -28,8 +28,8 @@ rm -rf "${trino_dir}/packages"
 mkdir -p "${trino_dir}/packages"
 
 cd ${gravitino_home}
-${gravitino_home}/gradlew 
:trino-connector:trino-connector-469-472:assembleTrinoConnector -x test
-cp -r "${gravitino_home}/distribution/gravitino-trino-connector-469-472" 
"${trino_dir}/packages/gravitino-trino-connector"
+${gravitino_home}/gradlew 
:trino-connector:trino-connector-473-478:assembleTrinoConnector -x test
+cp -r "${gravitino_home}/distribution/gravitino-trino-connector-473-478" 
"${trino_dir}/packages/gravitino-trino-connector"
 
 MYSQL_VERSION="8.0.27"
 PG_VERSION="42.7.0"
diff --git a/docs/trino-connector/configuration.md 
b/docs/trino-connector/configuration.md
index 2e300eee85..4adeb28360 100644
--- a/docs/trino-connector/configuration.md
+++ b/docs/trino-connector/configuration.md
@@ -13,7 +13,7 @@ license: "This software is licensed under the Apache License 
version 2."
 | trino.jdbc.user                             | string  | admin                
 | The jdbc user name of current Trino.                                         
                                                                                
                                                                                
                                                                       | NO     
  | 0.5.1         |
 | trino.jdbc.password                         | string  | (none)               
 | The jdbc password of current Trino.                                          
                                                                                
                                                                                
                                                                       | NO     
  | 0.5.1         |
 | gravitino.metadata.refresh-interval-seconds | integer | 10                   
 | The `gravitino.metadata.refresh-interval-seconds` defines the interval in 
seconds to refresh metadata from Gravitino server, the default value is 10 
seconds.                                                                        
                                                                               
| No       | 0.9.0         |
-| gravitino.trino.skip-version-validation     | boolean | false                
 | The `gravitino.trino.skip-version-validation` defines whether to skip Trino 
version validation. Gravitino supports Trino versions between 435 and 462. If 
this option is `true`, unsupported Trino versions can still be used, but 
compatibility is not guaranteed.                                               
| No       | 1.0.0         |
+| gravitino.trino.skip-version-validation     | boolean | false                
 | The `gravitino.trino.skip-version-validation` defines whether to skip Trino 
version validation. Gravitino supports Trino versions between 435 and 478. If 
this option is `true`, unsupported Trino versions can still be used, but 
compatibility is not guaranteed.                                                
 | No       | 1.0.0         |
 | gravitino.client.                           | string  | (none)               
 | The configuration key prefix for the Gravitino client config.                
                                                                                
                                                                                
                                                                       | No     
  | 1.0.0         |
 | gravitino.trino.skip-catalog-patterns       | string  | (none)               
 | The `gravitino.trino.skip-catalog-patterns` defines a comma-separated list 
of catalog name regex patterns that should be excluded from loading. For 
example, `test_.*, .*_tmp` excludes all catalogs starting with `test_` or 
ending with `_tmp`.                                                             
      | No       | 1.2.0         |
 
diff --git a/docs/trino-connector/development.md 
b/docs/trino-connector/development.md
index b507999747..f9464f8bbb 100644
--- a/docs/trino-connector/development.md
+++ b/docs/trino-connector/development.md
@@ -25,6 +25,8 @@ trino-connector/
 │   └── src/main/java/
 ├── trino-connector-469-472/      # Version-specific adapters for Trino 469-472
 │   └── src/main/java/
+├── trino-connector-473-478/      # Version-specific adapters for Trino 473-478
+│   └── src/main/java/
 └── integration-test/             # Integration tests
 ```
 
@@ -65,13 +67,14 @@ Change `localhost`, `port`, and the names of metalake and 
catalogs to match your
 
 4. Identify which version-segment module matches your Trino version:
 
-   | Trino Version | Version-Segment Module |
-   |---------------|------------------------|
+   | Trino Version | Version-Segment Module    |
+   |---------------|---------------------------|
    | 435-439       | `trino-connector-435-439` |
    | 440-445       | `trino-connector-440-445` |
    | 446-451       | `trino-connector-446-451` |
    | 452-468       | `trino-connector-452-468` |
    | 469-472       | `trino-connector-469-472` |
+   | 473-478       | `trino-connector-473-478` |
 
 5. Add `<module>plugin/trino-gravitino</module>` to `trino/pom.xml` and create 
the `pom.xml` for the `trino-gravitino` module. The example below uses Trino 
`469`. Ensure the `trino-root` version matches the Trino version you are 
developing against.
 
diff --git a/docs/trino-connector/installation.md 
b/docs/trino-connector/installation.md
index cfd7077663..25c22bcf6d 100644
--- a/docs/trino-connector/installation.md
+++ b/docs/trino-connector/installation.md
@@ -22,6 +22,7 @@ You need to choose the package by your Trino server version 
first.
 | 446-451              | `trino-connector-446-451` |
 | 452-468              | `trino-connector-452-468` |
 | 469-472              | `trino-connector-469-472` |
+| 473-478              | `trino-connector-473-478` |
 
 For Trino `469`, choose the `trino-connector-469-472` package.
 
diff --git a/docs/trino-connector/requirements.md 
b/docs/trino-connector/requirements.md
index 21a3d12997..67bd57550a 100644
--- a/docs/trino-connector/requirements.md
+++ b/docs/trino-connector/requirements.md
@@ -7,7 +7,7 @@ license: "This software is licensed under the Apache License 
version 2."
 
 To install and deploy the Apache Gravitino Trino connector, The following 
environmental setup is necessary:
 
-- Trino server version should be between Trino-server-435 and Trino-server-472.
+- Trino server version should be between Trino-server-435 and Trino-server-478.
   The examples in this document use Trino `469` by default.
 - If you use an unsupported Trino version, you can set 
`gravitino.trino.skip-version-validation` to `true`.
   Unsupported versions have not undergone thorough testing.
diff --git a/integration-test-common/docker-script/docker-compose.yaml 
b/integration-test-common/docker-script/docker-compose.yaml
index ddbf976a2e..3ed57d07ca 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:-469}
+    image: trinodb/trino:${TRINO_VERSION:-478}
     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-469-472/build/libs}:/usr/lib/trino/plugin/gravitino
+      - 
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-473-478/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:-469}
+    image: trinodb/trino:${TRINO_VERSION:-478}
     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-469-472/build/libs}:/usr/lib/trino/plugin/gravitino
+      - 
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector-473-478/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 93f196e0af..77a930a367 100644
--- a/integration-test-common/docker-script/init/trino/config/jvm.config
+++ b/integration-test-common/docker-script/init/trino/config/jvm.config
@@ -16,22 +16,15 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+-server
 -XX:InitialRAMPercentage=30
 -XX:MaxRAMPercentage=60
+-XX:+UseG1GC
 -XX:G1HeapRegionSize=32M
+-XX:MaxGCPauseMillis=500
+
 -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
-# 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
+-Dlog4j.configurationFile=/etc/trino/log4j2.properties
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 5b737ca14f..1529343c61 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -75,6 +75,7 @@ include(
   "trino-connector:trino-connector-446-451",
   "trino-connector:trino-connector-452-468",
   "trino-connector:trino-connector-469-472",
+  "trino-connector:trino-connector-473-478",
   "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 7ec53676fd..bb15ef356e 100644
--- a/trino-connector/integration-test/build.gradle.kts
+++ b/trino-connector/integration-test/build.gradle.kts
@@ -76,6 +76,7 @@ tasks.register("setupDependencies") {
   dependsOn(":trino-connector:trino-connector-446-451:copyLibs")
   dependsOn(":trino-connector:trino-connector-452-468:copyLibs")
   dependsOn(":trino-connector:trino-connector-469-472:copyLibs")
+  dependsOn(":trino-connector:trino-connector-473-478: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/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
index 4d3fcb5d24..46cf682b15 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
@@ -26,7 +26,7 @@ SELECT val1 + val2 FROM tb03;
 
 SELECT val1 * val2 FROM tb03;
 
-SELECT val1 / val2 FROM tb03;
+SELECT CAST(val1 / val2 AS DECIMAL(38, 2)) FROM tb03;
 
 CREATE TABLE tb04 (max_min_val DECIMAL(18, 4));
 
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
index c4f271adde..156b5136f0 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
@@ -12,26 +12,26 @@ INSERT: 15000 rows
 
 "Trino version: %
 %
-    %TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db1.customer limit=10 columns=[custkey:bigint:int8]]
+    └─ TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
%gt_db1.customer limit=10 columns=[custkey:bigint:int8]]
            Layout: [custkey:bigint]
 %
 "
 
 "Trino version: %
 %
-    %TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db1.customer%constraints=%phone%LIKE%]
+    └─ TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
%gt_db1.customer%constraints=%phone%LIKE%]
 %
 "
 
 "Trino version: %
 %
-    %TableScan[table = gt_postgresql:gt_db1.orders->Query[SELECT 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM 
""gt_db1"".""orders""]%columns=[_pfgnrtd_0:decimal(38,2):decimal]]
+    └─ TableScan[table = gt_postgresql:gt_db1.orders->Query[SELECT 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM 
%""gt_db1"".""orders""]%columns=[_pfgnrtd_0:decimal(38,2):decimal]]
 %
 "
 
 "Trino version: %
 %
-    %TableScan[table = gt_postgresql:gt_db1.%->Query[SELECT ""orderdate"", 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM ""gt_db1"".""orders"" GROUP BY 
""orderdate""]%sortOrder=[orderdate:date:date ASC NULLS 
LAST]%limit=10%columns=[orderdate:date:date, _pfgnrtd_0:decimal(38,2):decimal]]
+    └─ TableScan[table = gt_postgresql:gt_db1.%->Query[SELECT ""orderdate"", 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM %""gt_db1"".""orders"" GROUP BY 
""orderdate""]%sortOrder=[orderdate:date:date ASC NULLS 
LAST]%limit=10%columns=[orderdate:date:date, _pfgnrtd_0:decimal(38,2):decimal]]
 %
 "
 
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
index 0e797b6395..7ed8fbf184 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
@@ -36,13 +36,13 @@ UNION ALL (
 ) 
 SELECT
   "d_week_seq1"
-, "round"(("sun_sales1" / "sun_sales2"), 2)
-, "round"(("mon_sales1" / "mon_sales2"), 2)
-, "round"(("tue_sales1" / "tue_sales2"), 2)
-, "round"(("wed_sales1" / "wed_sales2"), 2)
-, "round"(("thu_sales1" / "thu_sales2"), 2)
-, "round"(("fri_sales1" / "fri_sales2"), 2)
-, "round"(("sat_sales1" / "sat_sales2"), 2)
+, CAST(("sun_sales1" / "sun_sales2") as DECIMAL(38,2))
+, CAST(("mon_sales1" / "mon_sales2") as DECIMAL(38,2))
+, CAST(("tue_sales1" / "tue_sales2") as DECIMAL(38,2))
+, CAST(("wed_sales1" / "wed_sales2") as DECIMAL(38,2))
+, CAST(("thu_sales1" / "thu_sales2") as DECIMAL(38,2))
+, CAST(("fri_sales1" / "fri_sales2") as DECIMAL(38,2))
+, CAST(("sat_sales1" / "sat_sales2") as DECIMAL(38,2))
 FROM
   (
    SELECT
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
index 7f28d3700a..e64089005f 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
@@ -5,7 +5,7 @@ SELECT
 , "i_class"
 , "i_current_price"
 , "sum"("cs_ext_sales_price") "itemrevenue"
-, (("sum"("cs_ext_sales_price") * 100) / "sum"("sum"("cs_ext_sales_price")) 
OVER (PARTITION BY "i_class")) "revenueratio"
+, CAST((("sum"("cs_ext_sales_price") * 100) / 
"sum"("sum"("cs_ext_sales_price")) OVER (PARTITION BY "i_class")) AS 
DECIMAL(38,2)) "revenueratio"
 FROM
   catalog_sales
 , item
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
index bb2b27e58c..77611c6372 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
@@ -1,9 +1,9 @@
 SELECT
-  ("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) "gross_margin"
+  CAST("sum"("ss_net_profit") / "sum"("ss_ext_sales_price") AS DECIMAL(38,2)) 
"gross_margin"
 , "i_category"
 , "i_class"
 , (GROUPING ("i_category") + GROUPING ("i_class")) "lochierarchy"
-, "rank"() OVER (PARTITION BY (GROUPING ("i_category") + GROUPING 
("i_class")), (CASE WHEN (GROUPING ("i_class") = 0) THEN "i_category" END) 
ORDER BY ("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) ASC) 
"rank_within_parent"
+, "rank"() OVER (PARTITION BY (GROUPING ("i_category") + GROUPING 
("i_class")), (CASE WHEN (GROUPING ("i_class") = 0) THEN "i_category" END) 
ORDER BY CAST(("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) AS 
DECIMAL(38, 2)) ASC) "rank_within_parent"
 FROM
   store_sales
 , date_dim d1
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
index c65d1a14a5..a50bd4083d 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
@@ -16,8 +16,8 @@ FROM
      (
       SELECT
         "ws"."ws_item_sk" "item"
-      , (CAST("sum"(COALESCE("wr"."wr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("ws"."ws_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
-      , (CAST("sum"(COALESCE("wr"."wr_return_amt", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("ws"."ws_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+      , (CAST(CAST("sum"(COALESCE("wr"."wr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("ws"."ws_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+      , (CAST(CAST("sum"(COALESCE("wr"."wr_return_amt", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("ws"."ws_net_paid", 0)) AS DECIMAL(15,4)) AS 
DECIMAL(15,4))) "currency_ratio"
       FROM
         (web_sales ws
       LEFT JOIN web_returns wr ON ("ws"."ws_order_number" = 
"wr"."wr_order_number")
@@ -53,8 +53,8 @@ FROM
      (
       SELECT
         "cs"."cs_item_sk" "item"
-      , (CAST("sum"(COALESCE("cr"."cr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("cs"."cs_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
-      , (CAST("sum"(COALESCE("cr"."cr_return_amount", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("cs"."cs_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+      , (CAST(CAST("sum"(COALESCE("cr"."cr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("cs"."cs_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+      , (CAST(CAST("sum"(COALESCE("cr"."cr_return_amount", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("cs"."cs_net_paid", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "currency_ratio"
       FROM
         (catalog_sales cs
       LEFT JOIN catalog_returns cr ON ("cs"."cs_order_number" = 
"cr"."cr_order_number")
@@ -90,8 +90,8 @@ FROM
      (
       SELECT
         "sts"."ss_item_sk" "item"
-      , (CAST("sum"(COALESCE("sr"."sr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("sts"."ss_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
-      , (CAST("sum"(COALESCE("sr"."sr_return_amt", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("sts"."ss_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+      , (CAST(CAST("sum"(COALESCE("sr"."sr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("sts"."ss_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+      , (CAST(CAST("sum"(COALESCE("sr"."sr_return_amt", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("sts"."ss_net_paid", 0)) AS DECIMAL(15,4)) AS 
DECIMAL(15,4))) "currency_ratio"
       FROM
         (store_sales sts
       LEFT JOIN store_returns sr ON ("sts"."ss_ticket_number" = 
"sr"."sr_ticket_number")
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
index 9114f353d6..ac2baa60c0 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
@@ -20,13 +20,13 @@ SELECT
   "s_store_name1"
 , "s_store_id1"
 , "d_week_seq1"
-, ("sun_sales1" / "sun_sales2")
-, ("mon_sales1" / "mon_sales2")
-, ("tue_sales1" / "tue_sales2")
-, ("wed_sales1" / "wed_sales2")
-, ("thu_sales1" / "thu_sales2")
-, ("fri_sales1" / "fri_sales2")
-, ("sat_sales1" / "sat_sales2")
+, CAST(("sun_sales1" / "sun_sales2") AS DECIMAL(38,2))
+, CAST(("mon_sales1" / "mon_sales2") AS DECIMAL(38,2))
+, CAST(("tue_sales1" / "tue_sales2") AS DECIMAL(38,2))
+, CAST(("wed_sales1" / "wed_sales2") AS DECIMAL(38,2))
+, CAST(("thu_sales1" / "thu_sales2") AS DECIMAL(38,2))
+, CAST(("fri_sales1" / "fri_sales2") AS DECIMAL(38,2))
+, CAST(("sat_sales1" / "sat_sales2") AS DECIMAL(38,2))
 FROM
   (
    SELECT
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
index 17cd193386..e23b0574fd 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
@@ -1,7 +1,7 @@
 SELECT
   "promotions"
 , "total"
-, ((CAST("promotions" AS DECIMAL(15,4)) / CAST("total" AS DECIMAL(15,4))) * 
100)
+, (CAST((CAST("promotions" AS DECIMAL(15,4)) / CAST("total" AS DECIMAL(15,4))) 
AS DECIMAL(15,4)) * 100)
 FROM
   (
    SELECT "sum"("ss_ext_sales_price") "promotions"
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
index 50a1633296..02befa7408 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
@@ -19,18 +19,18 @@ SELECT
 , "sum"("oct_sales") "oct_sales"
 , "sum"("nov_sales") "nov_sales"
 , "sum"("dec_sales") "dec_sales"
-, "sum"(("jan_sales" / "w_warehouse_sq_ft")) "jan_sales_per_sq_foot"
-, "sum"(("feb_sales" / "w_warehouse_sq_ft")) "feb_sales_per_sq_foot"
-, "sum"(("mar_sales" / "w_warehouse_sq_ft")) "mar_sales_per_sq_foot"
-, "sum"(("apr_sales" / "w_warehouse_sq_ft")) "apr_sales_per_sq_foot"
-, "sum"(("may_sales" / "w_warehouse_sq_ft")) "may_sales_per_sq_foot"
-, "sum"(("jun_sales" / "w_warehouse_sq_ft")) "jun_sales_per_sq_foot"
-, "sum"(("jul_sales" / "w_warehouse_sq_ft")) "jul_sales_per_sq_foot"
-, "sum"(("aug_sales" / "w_warehouse_sq_ft")) "aug_sales_per_sq_foot"
-, "sum"(("sep_sales" / "w_warehouse_sq_ft")) "sep_sales_per_sq_foot"
-, "sum"(("oct_sales" / "w_warehouse_sq_ft")) "oct_sales_per_sq_foot"
-, "sum"(("nov_sales" / "w_warehouse_sq_ft")) "nov_sales_per_sq_foot"
-, "sum"(("dec_sales" / "w_warehouse_sq_ft")) "dec_sales_per_sq_foot"
+, CAST("sum"(("jan_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jan_sales_per_sq_foot"
+, CAST("sum"(("feb_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"feb_sales_per_sq_foot"
+, CAST("sum"(("mar_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"mar_sales_per_sq_foot"
+, CAST("sum"(("apr_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"apr_sales_per_sq_foot"
+, CAST("sum"(("may_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"may_sales_per_sq_foot"
+, CAST("sum"(("jun_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jun_sales_per_sq_foot"
+, CAST("sum"(("jul_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jul_sales_per_sq_foot"
+, CAST("sum"(("aug_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"aug_sales_per_sq_foot"
+, CAST("sum"(("sep_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"sep_sales_per_sq_foot"
+, CAST("sum"(("oct_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"oct_sales_per_sq_foot"
+, CAST("sum"(("nov_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"nov_sales_per_sq_foot"
+, CAST("sum"(("dec_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"dec_sales_per_sq_foot"
 , "sum"("jan_net") "jan_net"
 , "sum"("feb_net") "feb_net"
 , "sum"("mar_net") "mar_net"
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
index 813eb8a073..fd045292ef 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
@@ -1 +1 @@
-"Conventional childr","977787","Midway","Williamson County","TN","United 
States","DHL,BARIAN","2001","661407.18","766942.78","307720.05","333390.59","1904937.34","2308974.68","1310866.26","2298210.15","1497771.61","2900278.47","5213564.64","2706805.34","0.68","0.78","0.32","0.35","1.94","2.36","1.34","2.35","1.53","2.97","5.33","2.77","7554063.29","8213766.03","7574329.97","4142886.32","3575413.31","4126236.48","5015953.55","9665997.01","10823343.90","13418884.62","23331407.18","19502364.49"
\ No newline at end of file
+"Conventional childr","977787","Midway","Williamson County","TN","United 
States","DHL,BARIAN","2001","661407.18","766942.78","307720.05","333390.59","1904937.34","2308974.68","1310866.26","2298210.15","1497771.61","2900278.47","5213564.64","2706805.34","0.68","0.78","0.31","0.34","1.95","2.36","1.34","2.35","1.53","2.97","5.33","2.77","7554063.29","8213766.03","7574329.97","4142886.32","3575413.31","4126236.48","5015953.55","9665997.01","10823343.90","13418884.62","23331407.18","19502364.49"
\ No newline at end of file
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
index 33017f9fd9..abc085c9ee 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
@@ -78,7 +78,7 @@ WHERE ("curr_yr"."i_brand_id" = "prev_yr"."i_brand_id")
    AND ("curr_yr"."i_manufact_id" = "prev_yr"."i_manufact_id")
    AND ("curr_yr"."d_year" = 2002)
    AND ("prev_yr"."d_year" = (2002 - 1))
-   AND ((CAST("curr_yr"."sales_cnt" AS DECIMAL(17,2)) / 
CAST("prev_yr"."sales_cnt" AS DECIMAL(17,2))) < DECIMAL '0.9')
+   AND ((CAST((CAST("curr_yr"."sales_cnt" AS DECIMAL(17,2)) / 
CAST("prev_yr"."sales_cnt" AS DECIMAL(17,2))) AS DECIMAL(17,2))) < DECIMAL 
'0.9')
 ORDER BY "sales_cnt_diff" ASC, "sales_amt_diff" ASC
 LIMIT 100
 ;
\ No newline at end of file
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
index c3fdb2a265..0c455627be 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
@@ -51,7 +51,7 @@ SELECT
   "ss_sold_year"
 , "ss_item_sk"
 , "ss_customer_sk"
-, "round"((CAST("ss_qty" AS DECIMAL(10,2)) / COALESCE(("ws_qty" + "cs_qty"), 
1)), 2) "ratio"
+, CAST((CAST("ss_qty" AS DECIMAL(10,2)) / COALESCE(("ws_qty" + "cs_qty"), 1)) 
AS DECIMAL(38, 2)) "ratio"
 , "ss_qty" "store_qty"
 , "ss_wc" "store_wholesale_cost"
 , "ss_sp" "store_sales_price"
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
index 934b8cdf03..bbc16a21bf 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
@@ -25,7 +25,7 @@ FROM
             AND ("i_class" IN ('shirts'         , 'birdal'         , 
'dresses'))))
    GROUP BY "i_category", "i_class", "i_brand", "s_store_name", 
"s_company_name", "d_moy"
 )  tmp1
-WHERE ((CASE WHEN ("avg_monthly_sales" <> 0) THEN ("abs"(("sum_sales" - 
"avg_monthly_sales")) / "avg_monthly_sales") ELSE null END) > DECIMAL '0.1')
+WHERE ((CASE WHEN ("avg_monthly_sales" <> 0) THEN CAST(("abs"(("sum_sales" - 
"avg_monthly_sales")) / "avg_monthly_sales") AS DECIMAL(38,2)) ELSE null END) > 
DECIMAL '0.1')
 ORDER BY ("sum_sales" - "avg_monthly_sales") ASC, "s_store_name" ASC
 LIMIT 100
 ;
\ No newline at end of file
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
index 106349bf33..edcb1d548f 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
@@ -1,4 +1,4 @@
-SELECT (CAST("amc" AS DECIMAL(15,4)) / CAST("pmc" + 0.001 AS DECIMAL(15,4))) 
"am_pm_ratio"
+SELECT CAST((CAST("amc" AS DECIMAL(15,4)) / CAST("pmc" + 0.001 AS 
DECIMAL(15,4))) AS DECIMAL(15,4)) "am_pm_ratio"
 FROM
   (
    SELECT "count"(*) "amc"
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
index 72ddd155e9..10e47d07ec 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
@@ -5,7 +5,7 @@ SELECT
 , "i_class"
 , "i_current_price"
 , "sum"("ss_ext_sales_price") "itemrevenue"
-, (("sum"("ss_ext_sales_price") * 100) / "sum"("sum"("ss_ext_sales_price")) 
OVER (PARTITION BY "i_class")) "revenueratio"
+, CAST((("sum"("ss_ext_sales_price") * 100) / 
"sum"("sum"("ss_ext_sales_price")) OVER (PARTITION BY "i_class")) AS 
DECIMAL(38, 2)) "revenueratio"
 FROM
   store_sales
 , item
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
index ea3b1fa724..02f52dc5fb 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
@@ -1,10 +1,10 @@
 SELECT
   o_year,
-  sum(CASE
+  CAST(sum(CASE
       WHEN nation = 'BRAZIL'
         THEN volume
       ELSE 0
-      END) / sum(volume) AS mkt_share
+      END) / sum(volume) AS DECIMAL(38, 4)) AS mkt_share
 FROM (
        SELECT
          extract(YEAR FROM o.orderdate)     AS o_year,
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-469-478.patch
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-469-478.patch
new file mode 100644
index 0000000000..9a55b49b87
--- /dev/null
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/trino-469-478.patch
@@ -0,0 +1,384 @@
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/catalog_hive_prepare.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/catalog_hive_prepare.sql
+index 67ea924ba..b392ae230 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/catalog_hive_prepare.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/catalog_hive_prepare.sql
+@@ -2,7 +2,7 @@ call gravitino.system.create_catalog(
+     'gt_hive',
+     'hive',
+     map(
+-        array['metastore.uris', 'trino.bypass.fs.hadoop.enabled'],
+-        array['${hive_uri}', 'true']
++        array['metastore.uris'],
++        array['${hive_uri}']
+     )
+ );
+\ No newline at end of file
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
+index edd8257ad..c4f271add 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-postgresql/00004_query_pushdown.txt
+@@ -12,26 +12,26 @@ INSERT: 15000 rows
+ 
+ "Trino version: %
+ %
+-    └─ TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db.gt_db1.customer limit=10 columns=[custkey:bigint:int8]]
++    %TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db1.customer limit=10 columns=[custkey:bigint:int8]]
+            Layout: [custkey:bigint]
+ %
+ "
+ 
+ "Trino version: %
+ %
+-    └─ TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db.gt_db1.customer%constraints=%phone%LIKE%]
++    %TableScan[table = gt_postgresql:gt_db1.customer->gt_db1.customer 
gt_db1.customer%constraints=%phone%LIKE%]
+ %
+ "
+ 
+ "Trino version: %
+ %
+-    └─ TableScan[table = gt_postgresql:gt_db1.orders->Query[SELECT 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM 
""gt_db"".""gt_db1"".""orders""]%columns=[_pfgnrtd_0:decimal(38,2):decimal]]
++    %TableScan[table = gt_postgresql:gt_db1.orders->Query[SELECT 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM 
""gt_db1"".""orders""]%columns=[_pfgnrtd_0:decimal(38,2):decimal]]
+ %
+ "
+ 
+ "Trino version: %
+ %
+-    └─ TableScan[table = gt_postgresql:gt_db1.%->Query[SELECT ""orderdate"", 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM ""gt_db"".""gt_db1"".""orders"" 
GROUP BY ""orderdate""]%sortOrder=[orderdate:date:date ASC NULLS 
LAST]%limit=10%columns=[orderdate:date:date, _pfgnrtd_0:decimal(38,2):decimal]]
++    %TableScan[table = gt_postgresql:gt_db1.%->Query[SELECT ""orderdate"", 
sum(""totalprice"") AS ""_pfgnrtd_0"" FROM ""gt_db1"".""orders"" GROUP BY 
""orderdate""]%sortOrder=[orderdate:date:date ASC NULLS 
LAST]%limit=10%columns=[orderdate:date:date, _pfgnrtd_0:decimal(38,2):decimal]]
+ %
+ "
+ 
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/lakehouse-iceberg/catalog_iceberg_prepare.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/lakehouse-iceberg/catalog_iceberg_prepare.sql
+index e310c051d..46ad6a38c 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/lakehouse-iceberg/catalog_iceberg_prepare.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/lakehouse-iceberg/catalog_iceberg_prepare.sql
+@@ -2,8 +2,8 @@ call gravitino.system.create_catalog(
+     'gt_iceberg',
+     'lakehouse-iceberg',
+     map(
+-        array['uri', 'catalog-backend', 'warehouse', 
'trino.bypass.fs.hadoop.enabled'],
+-        array['${hive_uri}', 'hive', 
'${hdfs_uri}/user/iceberg/warehouse/TrinoQueryIT', 'true']
++        array['uri', 'catalog-backend', 'warehouse'],
++        array['${hive_uri}', 'hive', 
'${hdfs_uri}/user/iceberg/warehouse/TrinoQueryIT']
+     )
+ );
+ 
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
+index 7ed8fbf18..0e797b639 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00002.sql
+@@ -36,13 +36,13 @@ UNION ALL (
+ ) 
+ SELECT
+   "d_week_seq1"
+-, CAST(("sun_sales1" / "sun_sales2") as DECIMAL(38,2))
+-, CAST(("mon_sales1" / "mon_sales2") as DECIMAL(38,2))
+-, CAST(("tue_sales1" / "tue_sales2") as DECIMAL(38,2))
+-, CAST(("wed_sales1" / "wed_sales2") as DECIMAL(38,2))
+-, CAST(("thu_sales1" / "thu_sales2") as DECIMAL(38,2))
+-, CAST(("fri_sales1" / "fri_sales2") as DECIMAL(38,2))
+-, CAST(("sat_sales1" / "sat_sales2") as DECIMAL(38,2))
++, "round"(("sun_sales1" / "sun_sales2"), 2)
++, "round"(("mon_sales1" / "mon_sales2"), 2)
++, "round"(("tue_sales1" / "tue_sales2"), 2)
++, "round"(("wed_sales1" / "wed_sales2"), 2)
++, "round"(("thu_sales1" / "thu_sales2"), 2)
++, "round"(("fri_sales1" / "fri_sales2"), 2)
++, "round"(("sat_sales1" / "sat_sales2"), 2)
+ FROM
+   (
+    SELECT
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
+index e64089005..7f28d3700 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00020.sql
+@@ -5,7 +5,7 @@ SELECT
+ , "i_class"
+ , "i_current_price"
+ , "sum"("cs_ext_sales_price") "itemrevenue"
+-, CAST((("sum"("cs_ext_sales_price") * 100) / 
"sum"("sum"("cs_ext_sales_price")) OVER (PARTITION BY "i_class")) AS 
DECIMAL(38,2)) "revenueratio"
++, (("sum"("cs_ext_sales_price") * 100) / "sum"("sum"("cs_ext_sales_price")) 
OVER (PARTITION BY "i_class")) "revenueratio"
+ FROM
+   catalog_sales
+ , item
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
+index 77611c637..bb2b27e58 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00036.sql
+@@ -1,9 +1,9 @@
+ SELECT
+-  CAST("sum"("ss_net_profit") / "sum"("ss_ext_sales_price") AS DECIMAL(38,2)) 
"gross_margin"
++  ("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) "gross_margin"
+ , "i_category"
+ , "i_class"
+ , (GROUPING ("i_category") + GROUPING ("i_class")) "lochierarchy"
+-, "rank"() OVER (PARTITION BY (GROUPING ("i_category") + GROUPING 
("i_class")), (CASE WHEN (GROUPING ("i_class") = 0) THEN "i_category" END) 
ORDER BY CAST(("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) AS 
DECIMAL(38, 2)) ASC) "rank_within_parent"
++, "rank"() OVER (PARTITION BY (GROUPING ("i_category") + GROUPING 
("i_class")), (CASE WHEN (GROUPING ("i_class") = 0) THEN "i_category" END) 
ORDER BY ("sum"("ss_net_profit") / "sum"("ss_ext_sales_price")) ASC) 
"rank_within_parent"
+ FROM
+   store_sales
+ , date_dim d1
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
+index a50bd4083..c65d1a14a 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00049.sql
+@@ -16,8 +16,8 @@ FROM
+      (
+       SELECT
+         "ws"."ws_item_sk" "item"
+-      , (CAST(CAST("sum"(COALESCE("wr"."wr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("ws"."ws_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+-      , (CAST(CAST("sum"(COALESCE("wr"."wr_return_amt", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("ws"."ws_net_paid", 0)) AS DECIMAL(15,4)) AS 
DECIMAL(15,4))) "currency_ratio"
++      , (CAST("sum"(COALESCE("wr"."wr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("ws"."ws_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
++      , (CAST("sum"(COALESCE("wr"."wr_return_amt", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("ws"."ws_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+       FROM
+         (web_sales ws
+       LEFT JOIN web_returns wr ON ("ws"."ws_order_number" = 
"wr"."wr_order_number")
+@@ -53,8 +53,8 @@ FROM
+      (
+       SELECT
+         "cs"."cs_item_sk" "item"
+-      , (CAST(CAST("sum"(COALESCE("cr"."cr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("cs"."cs_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+-      , (CAST(CAST("sum"(COALESCE("cr"."cr_return_amount", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("cs"."cs_net_paid", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "currency_ratio"
++      , (CAST("sum"(COALESCE("cr"."cr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("cs"."cs_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
++      , (CAST("sum"(COALESCE("cr"."cr_return_amount", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("cs"."cs_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+       FROM
+         (catalog_sales cs
+       LEFT JOIN catalog_returns cr ON ("cs"."cs_order_number" = 
"cr"."cr_order_number")
+@@ -90,8 +90,8 @@ FROM
+      (
+       SELECT
+         "sts"."ss_item_sk" "item"
+-      , (CAST(CAST("sum"(COALESCE("sr"."sr_return_quantity", 0)) AS 
DECIMAL(15,4)) / CAST("sum"(COALESCE("sts"."ss_quantity", 0)) AS DECIMAL(15,4)) 
AS DECIMAL(15,4))) "return_ratio"
+-      , (CAST(CAST("sum"(COALESCE("sr"."sr_return_amt", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("sts"."ss_net_paid", 0)) AS DECIMAL(15,4)) AS 
DECIMAL(15,4))) "currency_ratio"
++      , (CAST("sum"(COALESCE("sr"."sr_return_quantity", 0)) AS DECIMAL(15,4)) 
/ CAST("sum"(COALESCE("sts"."ss_quantity", 0)) AS DECIMAL(15,4))) "return_ratio"
++      , (CAST("sum"(COALESCE("sr"."sr_return_amt", 0)) AS DECIMAL(15,4)) / 
CAST("sum"(COALESCE("sts"."ss_net_paid", 0)) AS DECIMAL(15,4))) "currency_ratio"
+       FROM
+         (store_sales sts
+       LEFT JOIN store_returns sr ON ("sts"."ss_ticket_number" = 
"sr"."sr_ticket_number")
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
+index ac2baa60c..9114f353d 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00059.sql
+@@ -20,13 +20,13 @@ SELECT
+   "s_store_name1"
+ , "s_store_id1"
+ , "d_week_seq1"
+-, CAST(("sun_sales1" / "sun_sales2") AS DECIMAL(38,2))
+-, CAST(("mon_sales1" / "mon_sales2") AS DECIMAL(38,2))
+-, CAST(("tue_sales1" / "tue_sales2") AS DECIMAL(38,2))
+-, CAST(("wed_sales1" / "wed_sales2") AS DECIMAL(38,2))
+-, CAST(("thu_sales1" / "thu_sales2") AS DECIMAL(38,2))
+-, CAST(("fri_sales1" / "fri_sales2") AS DECIMAL(38,2))
+-, CAST(("sat_sales1" / "sat_sales2") AS DECIMAL(38,2))
++, ("sun_sales1" / "sun_sales2")
++, ("mon_sales1" / "mon_sales2")
++, ("tue_sales1" / "tue_sales2")
++, ("wed_sales1" / "wed_sales2")
++, ("thu_sales1" / "thu_sales2")
++, ("fri_sales1" / "fri_sales2")
++, ("sat_sales1" / "sat_sales2")
+ FROM
+   (
+    SELECT
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
+index e23b0574f..17cd19338 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00061.sql
+@@ -1,7 +1,7 @@
+ SELECT
+   "promotions"
+ , "total"
+-, (CAST((CAST("promotions" AS DECIMAL(15,4)) / CAST("total" AS 
DECIMAL(15,4))) AS DECIMAL(15,4)) * 100)
++, ((CAST("promotions" AS DECIMAL(15,4)) / CAST("total" AS DECIMAL(15,4))) * 
100)
+ FROM
+   (
+    SELECT "sum"("ss_ext_sales_price") "promotions"
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
+index 02befa740..50a163329 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.sql
+@@ -19,18 +19,18 @@ SELECT
+ , "sum"("oct_sales") "oct_sales"
+ , "sum"("nov_sales") "nov_sales"
+ , "sum"("dec_sales") "dec_sales"
+-, CAST("sum"(("jan_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jan_sales_per_sq_foot"
+-, CAST("sum"(("feb_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"feb_sales_per_sq_foot"
+-, CAST("sum"(("mar_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"mar_sales_per_sq_foot"
+-, CAST("sum"(("apr_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"apr_sales_per_sq_foot"
+-, CAST("sum"(("may_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"may_sales_per_sq_foot"
+-, CAST("sum"(("jun_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jun_sales_per_sq_foot"
+-, CAST("sum"(("jul_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"jul_sales_per_sq_foot"
+-, CAST("sum"(("aug_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"aug_sales_per_sq_foot"
+-, CAST("sum"(("sep_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"sep_sales_per_sq_foot"
+-, CAST("sum"(("oct_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"oct_sales_per_sq_foot"
+-, CAST("sum"(("nov_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"nov_sales_per_sq_foot"
+-, CAST("sum"(("dec_sales" / "w_warehouse_sq_ft")) AS DECIMAL(38,2)) 
"dec_sales_per_sq_foot"
++, "sum"(("jan_sales" / "w_warehouse_sq_ft")) "jan_sales_per_sq_foot"
++, "sum"(("feb_sales" / "w_warehouse_sq_ft")) "feb_sales_per_sq_foot"
++, "sum"(("mar_sales" / "w_warehouse_sq_ft")) "mar_sales_per_sq_foot"
++, "sum"(("apr_sales" / "w_warehouse_sq_ft")) "apr_sales_per_sq_foot"
++, "sum"(("may_sales" / "w_warehouse_sq_ft")) "may_sales_per_sq_foot"
++, "sum"(("jun_sales" / "w_warehouse_sq_ft")) "jun_sales_per_sq_foot"
++, "sum"(("jul_sales" / "w_warehouse_sq_ft")) "jul_sales_per_sq_foot"
++, "sum"(("aug_sales" / "w_warehouse_sq_ft")) "aug_sales_per_sq_foot"
++, "sum"(("sep_sales" / "w_warehouse_sq_ft")) "sep_sales_per_sq_foot"
++, "sum"(("oct_sales" / "w_warehouse_sq_ft")) "oct_sales_per_sq_foot"
++, "sum"(("nov_sales" / "w_warehouse_sq_ft")) "nov_sales_per_sq_foot"
++, "sum"(("dec_sales" / "w_warehouse_sq_ft")) "dec_sales_per_sq_foot"
+ , "sum"("jan_net") "jan_net"
+ , "sum"("feb_net") "feb_net"
+ , "sum"("mar_net") "mar_net"
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
+index fd045292e..813eb8a07 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00066.txt
+@@ -1 +1 @@
+-"Conventional childr","977787","Midway","Williamson County","TN","United 
States","DHL,BARIAN","2001","661407.18","766942.78","307720.05","333390.59","1904937.34","2308974.68","1310866.26","2298210.15","1497771.61","2900278.47","5213564.64","2706805.34","0.68","0.78","0.31","0.34","1.95","2.36","1.34","2.35","1.53","2.97","5.33","2.77","7554063.29","8213766.03","7574329.97","4142886.32","3575413.31","4126236.48","5015953.55","9665997.01","10823343.90","13418884.62","23331407.18","19502364.49"
+\ No newline at end of file
++"Conventional childr","977787","Midway","Williamson County","TN","United 
States","DHL,BARIAN","2001","661407.18","766942.78","307720.05","333390.59","1904937.34","2308974.68","1310866.26","2298210.15","1497771.61","2900278.47","5213564.64","2706805.34","0.68","0.78","0.32","0.35","1.94","2.36","1.34","2.35","1.53","2.97","5.33","2.77","7554063.29","8213766.03","7574329.97","4142886.32","3575413.31","4126236.48","5015953.55","9665997.01","10823343.90","13418884.62","23331407.18","19502364.49"
+\ No newline at end of file
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
+index abc085c9e..33017f9fd 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00075.sql
+@@ -78,7 +78,7 @@ WHERE ("curr_yr"."i_brand_id" = "prev_yr"."i_brand_id")
+    AND ("curr_yr"."i_manufact_id" = "prev_yr"."i_manufact_id")
+    AND ("curr_yr"."d_year" = 2002)
+    AND ("prev_yr"."d_year" = (2002 - 1))
+-   AND ((CAST((CAST("curr_yr"."sales_cnt" AS DECIMAL(17,2)) / 
CAST("prev_yr"."sales_cnt" AS DECIMAL(17,2))) AS DECIMAL(17,2))) < DECIMAL 
'0.9')
++   AND ((CAST("curr_yr"."sales_cnt" AS DECIMAL(17,2)) / 
CAST("prev_yr"."sales_cnt" AS DECIMAL(17,2))) < DECIMAL '0.9')
+ ORDER BY "sales_cnt_diff" ASC, "sales_amt_diff" ASC
+ LIMIT 100
+ ;
+\ No newline at end of file
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
+index 0c455627b..c3fdb2a26 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00078.sql
+@@ -51,7 +51,7 @@ SELECT
+   "ss_sold_year"
+ , "ss_item_sk"
+ , "ss_customer_sk"
+-, CAST((CAST("ss_qty" AS DECIMAL(10,2)) / COALESCE(("ws_qty" + "cs_qty"), 1)) 
AS DECIMAL(38, 2)) "ratio"
++, "round"((CAST("ss_qty" AS DECIMAL(10,2)) / COALESCE(("ws_qty" + "cs_qty"), 
1)), 2) "ratio"
+ , "ss_qty" "store_qty"
+ , "ss_wc" "store_wholesale_cost"
+ , "ss_sp" "store_sales_price"
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
+index bbc16a21b..934b8cdf0 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00089.sql
+@@ -25,7 +25,7 @@ FROM
+             AND ("i_class" IN ('shirts'         , 'birdal'         , 
'dresses'))))
+    GROUP BY "i_category", "i_class", "i_brand", "s_store_name", 
"s_company_name", "d_moy"
+ )  tmp1
+-WHERE ((CASE WHEN ("avg_monthly_sales" <> 0) THEN CAST(("abs"(("sum_sales" - 
"avg_monthly_sales")) / "avg_monthly_sales") AS DECIMAL(38,2)) ELSE null END) > 
DECIMAL '0.1')
++WHERE ((CASE WHEN ("avg_monthly_sales" <> 0) THEN ("abs"(("sum_sales" - 
"avg_monthly_sales")) / "avg_monthly_sales") ELSE null END) > DECIMAL '0.1')
+ ORDER BY ("sum_sales" - "avg_monthly_sales") ASC, "s_store_name" ASC
+ LIMIT 100
+ ;
+\ No newline at end of file
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
+index edcb1d548..106349bf3 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00090.sql
+@@ -1,4 +1,4 @@
+-SELECT CAST((CAST("amc" AS DECIMAL(15,4)) / CAST("pmc" + 0.001 AS 
DECIMAL(15,4))) AS DECIMAL(15,4)) "am_pm_ratio"
++SELECT (CAST("amc" AS DECIMAL(15,4)) / CAST("pmc" + 0.001 AS DECIMAL(15,4))) 
"am_pm_ratio"
+ FROM
+   (
+    SELECT "count"(*) "amc"
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
+index 10e47d07e..72ddd155e 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpcds/00098.sql
+@@ -5,7 +5,7 @@ SELECT
+ , "i_class"
+ , "i_current_price"
+ , "sum"("ss_ext_sales_price") "itemrevenue"
+-, CAST((("sum"("ss_ext_sales_price") * 100) / 
"sum"("sum"("ss_ext_sales_price")) OVER (PARTITION BY "i_class")) AS 
DECIMAL(38, 2)) "revenueratio"
++, (("sum"("ss_ext_sales_price") * 100) / "sum"("sum"("ss_ext_sales_price")) 
OVER (PARTITION BY "i_class")) "revenueratio"
+ FROM
+   store_sales
+ , item
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
+index 11b768749..ea3b1fa72 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.sql
+@@ -1,10 +1,10 @@
+ SELECT
+   o_year,
+-  CAST((sum(CASE
++  sum(CASE
+       WHEN nation = 'BRAZIL'
+         THEN volume
+       ELSE 0
+-      END) / sum(volume)) AS DECIMAL(38, 2)) AS mkt_share
++      END) / sum(volume) AS mkt_share
+ FROM (
+        SELECT
+          extract(YEAR FROM o.orderdate)     AS o_year,
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.txt
+index cdea0396b..8be6da155 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.txt
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00008.txt
+@@ -1,2 +1,2 @@
+-"1995","0.00"
+-"1996","0.00"
+\ No newline at end of file
++"1995","0.0000"
++"1996","0.0000"
+\ No newline at end of file
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00017.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00017.sql
+index d712f45bb..7150e90ec 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00017.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/00017.sql
+@@ -1,5 +1,5 @@
+ SELECT
+-  CAST(sum(l.extendedprice)/7.0 AS DECIMAL(38, 2)) as avg_yearly
++  sum(l.extendedprice)/7.0 as avg_yearly
+ FROM
+   lineitem l,
+   part p
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_hive_prepare.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_hive_prepare.sql
+index 2a35d4340..2fb4294af 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_hive_prepare.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_hive_prepare.sql
+@@ -2,8 +2,8 @@ call gravitino.system.create_catalog(
+     'gt_hive2',
+     'hive',
+     map(
+-        array['metastore.uris', 'trino.bypass.fs.hadoop.enabled'],
+-        array['${hive_uri}', 'true']
++        array['metastore.uris'],
++        array['${hive_uri}']
+     )
+ );
+ 
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_iceberg_prepare.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_iceberg_prepare.sql
+index 22826aa98..a5a0669f8 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_iceberg_prepare.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/tpch/catalog_iceberg_prepare.sql
+@@ -2,8 +2,8 @@ call gravitino.system.create_catalog(
+     'gt_iceberg2',
+     'lakehouse-iceberg',
+     map(
+-        array['uri', 'catalog-backend', 'warehouse', 
'trino.bypass.fs.hadoop.enabled'],
+-        array['${hive_uri}', 'hive', 
'${hdfs_uri}/user/iceberg/warehouse/TrinoQueryIT', 'true']
++        array['uri', 'catalog-backend', 'warehouse'],
++        array['${hive_uri}', 'hive', 
'${hdfs_uri}/user/iceberg/warehouse/TrinoQueryIT']
+     )
+ );
+ 
+diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
+index 46cf682b1..4d3fcb5d2 100644
+--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
++++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/hive/00008_decimal.sql
+@@ -26,7 +26,7 @@ SELECT val1 + val2 FROM tb03;
+ 
+ SELECT val1 * val2 FROM tb03;
+ 
+-SELECT CAST(val1 / val2 AS DECIMAL(38, 2)) FROM tb03;
++SELECT val1 / val2 FROM tb03;
+ 
+ CREATE TABLE tb04 (max_min_val DECIMAL(18, 4));
+ 
diff --git a/trino-connector/trino-connector-473-478/build.gradle.kts 
b/trino-connector/trino-connector-473-478/build.gradle.kts
new file mode 100644
index 0000000000..d74624bb6d
--- /dev/null
+++ b/trino-connector/trino-connector-473-478/build.gradle.kts
@@ -0,0 +1,168 @@
+/*
+ * 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 473-478
+val minTrinoVersion = 473
+val maxTrinoVersion = 478
+val otelSemconvVersion = "1.32.0"
+
+val trinoVersion = providers.gradleProperty("trinoVersion")
+  .map { it.trim().toInt() }
+  .orElse(maxTrinoVersion)
+  .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")
+    exclude("org.junit.jupiter")
+    exclude("org.junit.platform")
+  }
+  testImplementation(enforcedPlatform("org.junit:junit-bom:5.11.4"))
+  testImplementation("org.junit.jupiter:junit-jupiter-api")
+  testRuntimeOnly("org.junit.jupiter: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-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector478.java
new file mode 100644
index 0000000000..2c069e1241
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector478.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 GravitinoConnector478 extends GravitinoConnector {
+
+  public GravitinoConnector478(CatalogConnectorContext connectorContext) {
+    super(connectorContext);
+  }
+
+  @Override
+  protected GravitinoMetadata createGravitinoMetadata(
+      CatalogConnectorMetadata catalogConnectorMetadata,
+      CatalogConnectorMetadataAdapter metadataAdapter,
+      ConnectorMetadata internalMetadata) {
+    return new GravitinoMetadata478(catalogConnectorMetadata, metadataAdapter, 
internalMetadata);
+  }
+
+  @Override
+  public ConnectorSplitManager getSplitManager() {
+    ConnectorSplitManager splitManager =
+        catalogConnectorContext.getInternalConnector().getSplitManager();
+    return new GravitinoSplitManager478(splitManager);
+  }
+
+  @Override
+  public ConnectorNodePartitioningProvider getNodePartitioningProvider() {
+    ConnectorNodePartitioningProvider nodePartitioningProvider =
+        
catalogConnectorContext.getInternalConnector().getNodePartitioningProvider();
+    return new GravitinoNodePartitioningProvider478(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-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory478.java
new file mode 100644
index 0000000000..60680e1866
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory478.java
@@ -0,0 +1,62 @@
+/*
+ * 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;
+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 GravitinoConnectorFactory478 extends GravitinoConnectorFactory {
+
+  public GravitinoConnectorFactory478(GravitinoAdminClient client) {
+    super(client);
+  }
+
+  @Override
+  protected int getMinSupportTrinoSpiVersion() {
+    return 473;
+  }
+
+  @Override
+  protected int getMaxSupportTrinoSpiVersion() {
+    return 478;
+  }
+
+  @Override
+  protected String getTrinoCatalogName(String metalake, String catalog) {
+    return "\"" + metalake + "." + catalog + "\"";
+  }
+
+  @Override
+  protected boolean supportCatalogNameWithMetalake() {
+    return false;
+  }
+
+  @Override
+  protected GravitinoConnector createConnector(CatalogConnectorContext 
connectorContext) {
+    return new GravitinoConnector478(connectorContext);
+  }
+
+  @Override
+  protected GravitinoSystemConnector createSystemConnector(
+      GravitinoStoredProcedureFactory storedProcedureFactory) {
+    return new GravitinoSystemConnector478(storedProcedureFactory);
+  }
+}
diff --git 
a/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata478.java
new file mode 100644
index 0000000000..40173cdb42
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata478.java
@@ -0,0 +1,127 @@
+/*
+ * 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.ColumnHandle;
+import io.trino.spi.connector.ColumnMetadata;
+import io.trino.spi.connector.ColumnPosition;
+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.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.apache.gravitino.rel.TableChange;
+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 GravitinoMetadata478 extends GravitinoMetadata {
+
+  public GravitinoMetadata478(
+      CatalogConnectorMetadata catalogConnectorMetadata,
+      CatalogConnectorMetadataAdapter metadataAdapter,
+      io.trino.spi.connector.ConnectorMetadata internalMetadata) {
+    super(catalogConnectorMetadata, metadataAdapter, internalMetadata);
+  }
+
+  @Override
+  public void addColumn(
+      ConnectorSession session,
+      ConnectorTableHandle tableHandle,
+      ColumnMetadata column,
+      ColumnPosition position) {
+    TableChange.ColumnPosition columnPosition = 
TableChange.ColumnPosition.defaultPos();
+    if (position instanceof ColumnPosition.First) {
+      columnPosition = TableChange.ColumnPosition.first();
+    }
+    if (position instanceof ColumnPosition.After after) {
+      columnPosition = TableChange.ColumnPosition.after(after.columnName());
+    }
+    GravitinoColumn gravitinoColumn = metadataAdapter.createColumn(column);
+    catalogConnectorMetadata.addColumn(getTableName(tableHandle), 
gravitinoColumn, columnPosition);
+  }
+
+  @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.toUnmodifiableList()),
+        fragments,
+        computedStatistics);
+  }
+
+  @Override
+  public ConnectorMergeTableHandle beginMerge(
+      ConnectorSession session,
+      ConnectorTableHandle tableHandle,
+      Map<Integer, Collection<ColumnHandle>> updateCaseColumns,
+      RetryMode retryMode) {
+    Map<Integer, Collection<ColumnHandle>> unWrapUpdateCaseColumns =
+        updateCaseColumns.entrySet().stream()
+            .collect(
+                Collectors.toMap(
+                    Map.Entry::getKey,
+                    entry ->
+                        entry.getValue().stream()
+                            .map(GravitinoHandle::unWrap)
+                            .collect(Collectors.toUnmodifiableList())));
+
+    ConnectorMergeTableHandle connectorMergeTableHandle =
+        internalMetadata.beginMerge(
+            session, GravitinoHandle.unWrap(tableHandle), 
unWrapUpdateCaseColumns, 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.toUnmodifiableList()),
+        fragments,
+        computedStatistics);
+  }
+}
diff --git 
a/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider478.java
new file mode 100644
index 0000000000..de134e30f6
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoNodePartitioningProvider478.java
@@ -0,0 +1,48 @@
+/*
+ * 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;
+import io.trino.spi.connector.ConnectorPartitioningHandle;
+import io.trino.spi.connector.ConnectorSession;
+import io.trino.spi.connector.ConnectorSplit;
+import io.trino.spi.connector.ConnectorTransactionHandle;
+import java.util.function.ToIntFunction;
+
+/** Trino NodePartitioningProvider implementation with the new split bucket 
function signature. */
+public class GravitinoNodePartitioningProvider478 extends 
GravitinoNodePartitioningProvider {
+
+  public GravitinoNodePartitioningProvider478(
+      ConnectorNodePartitioningProvider nodePartitioningProvider) {
+    super(nodePartitioningProvider);
+  }
+
+  @Override
+  public ToIntFunction<ConnectorSplit> getSplitBucketFunction(
+      ConnectorTransactionHandle transactionHandle,
+      ConnectorSession session,
+      ConnectorPartitioningHandle partitioningHandle,
+      int bucketCount) {
+    return nodePartitioningProvider.getSplitBucketFunction(
+        GravitinoHandle.unWrap(transactionHandle),
+        session,
+        GravitinoHandle.unWrap(partitioningHandle),
+        bucketCount);
+  }
+}
diff --git 
a/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin478.java
new file mode 100644
index 0000000000..eae2fb0a90
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoPlugin478.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 GravitinoPlugin478 extends GravitinoPlugin {
+
+  public GravitinoPlugin478() {
+    super();
+  }
+
+  public GravitinoPlugin478(GravitinoAdminClient client) {
+    super(client);
+  }
+
+  @Override
+  protected GravitinoConnectorFactory 
createConnectorFactory(GravitinoAdminClient client) {
+    return new GravitinoConnectorFactory478(client);
+  }
+}
diff --git 
a/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager478.java
new file mode 100644
index 0000000000..9cec26c6e0
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSplitManager478.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 GravitinoSplitManager478 extends GravitinoSplitManager {
+
+  public GravitinoSplitManager478(ConnectorSplitManager internalSplitManager) {
+    super(internalSplitManager);
+  }
+
+  @Override
+  protected ConnectorSplitSource createSplitSource(ConnectorSplitSource 
splits) {
+    return new GravitinoSplitSource478(splits);
+  }
+
+  static class GravitinoSplitSource478 extends GravitinoSplitSource {
+
+    GravitinoSplitSource478(ConnectorSplitSource connectorSplitSource) {
+      super(connectorSplitSource);
+    }
+
+    @Override
+    protected ConnectorSplit createSplit(ConnectorSplit split) {
+      return new GravitinoSplit478(split);
+    }
+  }
+
+  public static class GravitinoSplit478 extends GravitinoSplit {
+
+    @JsonCreator
+    public GravitinoSplit478(@JsonProperty(HANDLE_STRING) String handleString) 
{
+      super(handleString);
+    }
+
+    public GravitinoSplit478(ConnectorSplit split) {
+      super(split);
+    }
+  }
+}
diff --git 
a/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector478.java
 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector478.java
new file mode 100644
index 0000000000..208671e051
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/main/java/org/apache/gravitino/trino/connector/GravitinoSystemConnector478.java
@@ -0,0 +1,83 @@
+/*
+ * 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 io.trino.spi.connector.SourcePage;
+import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector;
+import 
org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory;
+
+public class GravitinoSystemConnector478 extends GravitinoSystemConnector {
+
+  public GravitinoSystemConnector478(
+      GravitinoStoredProcedureFactory gravitinoStoredProcedureFactory) {
+    super(gravitinoStoredProcedureFactory);
+  }
+
+  @Override
+  protected ConnectorSplitManager createSplitManager() {
+    return new GravitinoSplitManager478();
+  }
+
+  @Override
+  protected ConnectorPageSourceProvider createPageSourceProvider() {
+    return new DatasourceProvider478();
+  }
+
+  static class DatasourceProvider478 extends DatasourceProvider {
+
+    @Override
+    protected ConnectorPageSource createPageSource(Page page) {
+      return new SystemTablePageSource478(page);
+    }
+  }
+
+  static class GravitinoSplitManager478 extends SplitManager {
+
+    protected ConnectorSplit createSplit(SchemaTableName tableName) {
+      return new Split478(tableName);
+    }
+  }
+
+  static class SystemTablePageSource478 extends SystemTablePageSource {
+
+    public SystemTablePageSource478(Page page) {
+      super(page);
+    }
+
+    public SourcePage getNextSourcePage() {
+      return SourcePage.create(nextPage());
+    }
+  }
+
+  public static class Split478 extends Split {
+
+    @JsonCreator
+    public Split478(@JsonProperty("tableName") SchemaTableName tableName) {
+      super(tableName);
+    }
+  }
+}
diff --git a/integration-test-common/docker-script/init/trino/config/jvm.config 
b/trino-connector/trino-connector-473-478/src/main/resources/META-INF/services/io.trino.spi.Plugin
similarity index 52%
copy from integration-test-common/docker-script/init/trino/config/jvm.config
copy to 
trino-connector/trino-connector-473-478/src/main/resources/META-INF/services/io.trino.spi.Plugin
index 93f196e0af..3cb26a67b5 100644
--- a/integration-test-common/docker-script/init/trino/config/jvm.config
+++ 
b/trino-connector/trino-connector-473-478/src/main/resources/META-INF/services/io.trino.spi.Plugin
@@ -16,22 +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
-# 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
+org.apache.gravitino.trino.connector.GravitinoPlugin478
diff --git 
a/trino-connector/trino-connector-473-478/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector478.java
 
b/trino-connector/trino-connector-473-478/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector478.java
new file mode 100644
index 0000000000..afe2022c8e
--- /dev/null
+++ 
b/trino-connector/trino-connector-473-478/src/test/java/org/apache/gravitino/trino/connector/TestGravitinoConnector478.java
@@ -0,0 +1,58 @@
+/*
+ * 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 static io.trino.testing.TestingSession.testSessionBuilder;
+
+import io.trino.Session;
+import io.trino.testing.DistributedQueryRunner;
+import org.apache.gravitino.client.GravitinoAdminClient;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+
+public class TestGravitinoConnector478 {
+  @Nested
+  class SingleMetalake extends TestGravitinoConnector {
+    @Override
+    protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient 
client) {
+      return new GravitinoPlugin478(client);
+    }
+
+    @Override
+    protected DistributedQueryRunner createTrinoQueryRunner() throws Exception 
{
+      Session session = testSessionBuilder().setCatalog("gravitino").build();
+      return DistributedQueryRunner.builder(session).setWorkerCount(0).build();
+    }
+  }
+
+  @Nested
+  @Disabled
+  class MultiMetalake extends TestGravitinoConnectorWithMetalakeCatalogName {
+    @Override
+    protected GravitinoPlugin createGravitinoPlugin(GravitinoAdminClient 
client) {
+      return new GravitinoPlugin478(client);
+    }
+
+    @Override
+    protected DistributedQueryRunner createTrinoQueryRunner() throws Exception 
{
+      Session session = testSessionBuilder().setCatalog("gravitino").build();
+      return DistributedQueryRunner.builder(session).setWorkerCount(0).build();
+    }
+  }
+}


Reply via email to