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 8bc0274059 [#7701] feat(trino-connector): Support show index info with 
MySQL (#7733)
8bc0274059 is described below

commit 8bc0274059160c841d78204807c0cbfe822bba71
Author: qbhan <[email protected]>
AuthorDate: Mon Jul 21 15:38:31 2025 +0800

    [#7701] feat(trino-connector): Support show index info with MySQL (#7733)
    
    ### What changes were proposed in this pull request?
    
    Support show index info with MySQL
    
    ### Why are the changes needed?
    `show create table`  would display the index info of MySQL table.
    ```sql
    -- In MySQL
    CREATE TABLE gt_mysql_test_index.demo_with_primary_key_and_unique_key
    (
        key1 INT,
        key2 INT,
        col1 INT,
        primary key (key1),
        unique key unique_key1 (key2)
    );
    -- In Trino
    -- show create table
    CREATE TABLE 
gt_mysql.gt_mysql_test_index.demo_with_primary_key_and_unique_key (
       key1 integer NOT NULL,
       key2 integer,
       col1 integer
    )
    COMMENT ''
    WITH (
       engine = 'InnoDB',
       primary_key = ARRAY['key1'],
       unique_key = ARRAY['unique_key1:key2']
    )
    ```
    
    Fix: #7701
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    
    local tests
---
 .../docker-script/init/mysql/init.sql              | 64 ++++++++++++++-
 .../testsets/jdbc-mysql/00009_datatype_mapping.txt |  3 +-
 .../testsets/jdbc-mysql/00010_show_index.sql       | 16 ++++
 .../testsets/jdbc-mysql/00010_show_index.txt       | 91 ++++++++++++++++++++++
 .../catalog/jdbc/mysql/MySQLMetadataAdapter.java   | 60 ++++++++++++++
 .../catalog/jdbc/mysql/MySQLPropertyMeta.java      | 24 +++++-
 .../trino/connector/metadata/GravitinoTable.java   | 21 +++++
 .../connector/metadata/TestGravitinoTable.java     | 65 ++++++++++++++++
 8 files changed, 341 insertions(+), 3 deletions(-)

diff --git a/integration-test-common/docker-script/init/mysql/init.sql 
b/integration-test-common/docker-script/init/mysql/init.sql
index 23c6906695..b6535b27cf 100644
--- a/integration-test-common/docker-script/init/mysql/init.sql
+++ b/integration-test-common/docker-script/init/mysql/init.sql
@@ -118,4 +118,66 @@ INSERT INTO gt_mysql_test_all_type.demo (
     ST_GeomFromText('POINT(10 20)'),        -- point_col
     ST_GeomFromText('LINESTRING(0 0, 10 10)') -- geometry_col
 );
-
+CREATE DATABASE gt_mysql_test_index;
+CREATE TABLE gt_mysql_test_index.demo_with_one_primary_key
+(
+    key1 INT PRIMARY KEY,
+    col1 INT
+);
+CREATE TABLE gt_mysql_test_index.demo_with_two_primary_key
+(
+    key1 INT,
+    key2 INT,
+    col1 INT,
+    primary key (key2, key1)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_one_unique_key
+(
+    key1 INT,
+    col1 INT,
+    unique key unique_key1 (key1)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_one_unique_key_1
+(
+    key1 INT,
+    key2 INT,
+    col1 INT,
+    unique key unique_key1 (key2, key1)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_two_unique_key
+(
+    key1 INT,
+    key2 INT,
+    col1 INT,
+    unique key unique_key1 (key1),
+    unique key unique_key2 (key2)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_two_unique_key_1
+(
+    key1 INT,
+    key2 INT,
+    key3 INT,
+    col1 INT,
+    unique key unique_key1 (key1),
+    unique key unique_key2 (key3, key2)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_primary_key_and_unique_key
+(
+    key1 INT,
+    key2 INT,
+    col1 INT,
+    primary key (key1),
+    unique key unique_key1 (key2)
+);
+CREATE TABLE gt_mysql_test_index.demo_with_primary_key_and_unique_key_1
+(
+    key1 INT,
+    key2 INT,
+    key3 INT,
+    key4 INT,
+    key5 INT,
+    col1 INT,
+    primary key (key5, key1),
+    unique key unique_key1 (key2),
+    unique key unique_key2 (key4, key3)
+);
\ No newline at end of file
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
index b592dca267..d090eb9c72 100644
--- 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00009_datatype_mapping.txt
@@ -41,7 +41,8 @@
 )
 COMMENT ''
 WITH (
-   engine = 'InnoDB'
+   engine = 'InnoDB',
+   primary_key = ARRAY['id']
 )"
 
 
"1","100","100","500","500","10000","10000","200000","200000","200000","200000","123.45","123.45","9876.5432","9876.5432","123456.789000","123456.789000","abc
       ","abc","abc","abc","abc","abc","2025-07-04","14:30:00","2025-07-04 
14:30:00","2025-07-04 14:30:00 
UTC","2025-01-01","{""x"":1,""y"":2}","green","read,write","a1 b2 c3 d4 00 00 
00 00 00 00 00 00 00 00 00 00","a1 b2","12 34 56","ab cd ef","12 34 56 78 
90","a1 b2 c3 d4 e5","00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 24 40 00  
[...]
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.sql
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.sql
new file mode 100644
index 0000000000..7f7d8ae1e3
--- /dev/null
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.sql
@@ -0,0 +1,16 @@
+-- Table create by integration-test-common/docker-script/init/mysql/init.sql
+show create table gt_mysql_test_index.demo_with_one_primary_key;
+
+show create table gt_mysql_test_index.demo_with_two_primary_key;
+
+show create table gt_mysql_test_index.demo_with_one_unique_key;
+
+show create table gt_mysql_test_index.demo_with_one_unique_key_1;
+
+show create table gt_mysql_test_index.demo_with_two_unique_key;
+
+show create table gt_mysql_test_index.demo_with_two_unique_key_1;
+
+show create table gt_mysql_test_index.demo_with_primary_key_and_unique_key;
+
+show create table gt_mysql_test_index.demo_with_primary_key_and_unique_key_1;
diff --git 
a/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.txt
 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.txt
new file mode 100644
index 0000000000..b7bdaf167c
--- /dev/null
+++ 
b/trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets/jdbc-mysql/00010_show_index.txt
@@ -0,0 +1,91 @@
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_one_primary_key (
+   key1 integer NOT NULL,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   primary_key = ARRAY['key1']
+)"
+
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_two_primary_key (
+   key1 integer NOT NULL,
+   key2 integer NOT NULL,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   primary_key = ARRAY['key2','key1']
+)"
+
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_one_unique_key (
+   key1 integer,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   unique_key = ARRAY['unique_key1:key1']
+)"
+
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_one_unique_key_1 (
+   key1 integer,
+   key2 integer,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   unique_key = ARRAY['unique_key1:key2,key1']
+)"
+
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_two_unique_key (
+   key1 integer,
+   key2 integer,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   unique_key = ARRAY['unique_key1:key1','unique_key2:key2']
+)"
+
+"CREATE TABLE gt_mysql.gt_mysql_test_index.demo_with_two_unique_key_1 (
+   key1 integer,
+   key2 integer,
+   key3 integer,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   unique_key = ARRAY['unique_key1:key1','unique_key2:key3,key2']
+)"
+
+"CREATE TABLE 
gt_mysql.gt_mysql_test_index.demo_with_primary_key_and_unique_key (
+   key1 integer NOT NULL,
+   key2 integer,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   primary_key = ARRAY['key1'],
+   unique_key = ARRAY['unique_key1:key2']
+)"
+
+"CREATE TABLE 
gt_mysql.gt_mysql_test_index.demo_with_primary_key_and_unique_key_1 (
+   key1 integer NOT NULL,
+   key2 integer,
+   key3 integer,
+   key4 integer,
+   key5 integer NOT NULL,
+   col1 integer
+)
+COMMENT ''
+WITH (
+   engine = 'InnoDB',
+   primary_key = ARRAY['key5','key1'],
+   unique_key = ARRAY['unique_key1:key2','unique_key2:key4,key3']
+)"
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
index 7232e30b96..f28941a23d 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
@@ -18,18 +18,28 @@
  */
 package org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
 
+import static 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLPropertyMeta.TABLE_PRIMARY_KEY;
+import static 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLPropertyMeta.TABLE_UNIQUE_KEY;
+
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import io.trino.spi.connector.ColumnMetadata;
 import io.trino.spi.connector.ConnectorTableMetadata;
+import io.trino.spi.connector.SchemaTableName;
 import io.trino.spi.session.PropertyMetadata;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.gravitino.catalog.property.PropertyConverter;
+import org.apache.gravitino.rel.indexes.Index;
 import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
 import org.apache.gravitino.trino.connector.metadata.GravitinoColumn;
 import org.apache.gravitino.trino.connector.metadata.GravitinoTable;
+import org.apache.logging.log4j.util.Strings;
 
 /** Transforming Apache Gravitino MySQL metadata to Trino. */
 public class MySQLMetadataAdapter extends CatalogConnectorMetadataAdapter {
@@ -92,6 +102,56 @@ public class MySQLMetadataAdapter extends 
CatalogConnectorMetadataAdapter {
     return new GravitinoTable(schemaName, tableName, columns, comment, 
properties);
   }
 
+  @Override
+  public ConnectorTableMetadata getTableMetadata(GravitinoTable 
gravitinoTable) {
+    SchemaTableName schemaTableName =
+        new SchemaTableName(gravitinoTable.getSchemaName(), 
gravitinoTable.getName());
+    ArrayList<ColumnMetadata> columnMetadataList = new ArrayList<>();
+    for (GravitinoColumn column : gravitinoTable.getColumns()) {
+      columnMetadataList.add(getColumnMetadata(column));
+    }
+
+    Map<String, Object> properties = 
toTrinoTableProperties(gravitinoTable.getProperties());
+
+    ImmutableMap.Builder<String, Object> propertiesBuilder = 
ImmutableMap.builder();
+    propertiesBuilder.putAll(properties);
+
+    Index[] indexes = gravitinoTable.getIndexes();
+    if (ArrayUtils.isNotEmpty(indexes)) {
+      List<String> primaryKeys = new ArrayList<>();
+      List<String> uniqueKeys = new ArrayList<>();
+      for (int i = 0; i < indexes.length; i++) {
+        Index index = indexes[i];
+        switch (index.type()) {
+          case PRIMARY_KEY:
+            Arrays.stream(index.fieldNames())
+                .flatMap(Arrays::stream)
+                .forEach(col -> primaryKeys.add(col));
+            break;
+
+          case UNIQUE_KEY:
+            List<String> columns =
+                Arrays.stream(index.fieldNames())
+                    .flatMap(Arrays::stream)
+                    .collect(Collectors.toUnmodifiableList());
+            uniqueKeys.add(String.format("%s:%s", index.name(), 
Strings.join(columns, ',')));
+            break;
+        }
+      }
+      if (!primaryKeys.isEmpty()) {
+        propertiesBuilder.put(TABLE_PRIMARY_KEY, primaryKeys);
+      }
+      if (!uniqueKeys.isEmpty()) {
+        propertiesBuilder.put(TABLE_UNIQUE_KEY, uniqueKeys);
+      }
+    }
+    return new ConnectorTableMetadata(
+        schemaTableName,
+        columnMetadataList,
+        propertiesBuilder.build(),
+        Optional.ofNullable(gravitinoTable.getComment()));
+  }
+
   @Override
   public ColumnMetadata getColumnMetadata(GravitinoColumn column) {
     Map<String, Object> propertyMap = Maps.newHashMap(column.getProperties());
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLPropertyMeta.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLPropertyMeta.java
index 6bae7093e4..8682d2acd0 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLPropertyMeta.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLPropertyMeta.java
@@ -21,9 +21,11 @@ package 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql;
 
 import static io.trino.spi.session.PropertyMetadata.booleanProperty;
 import static io.trino.spi.session.PropertyMetadata.stringProperty;
+import static io.trino.spi.type.VarcharType.VARCHAR;
 
 import com.google.common.collect.ImmutableList;
 import io.trino.spi.session.PropertyMetadata;
+import io.trino.spi.type.ArrayType;
 import java.util.List;
 import org.apache.gravitino.trino.connector.catalog.HasPropertyMeta;
 
@@ -35,12 +37,32 @@ public class MySQLPropertyMeta implements HasPropertyMeta {
 
   static final String TABLE_ENGINE = "engine";
   static final String TABLE_AUTO_INCREMENT_OFFSET = "auto_increment_offset";
+  public static final String TABLE_PRIMARY_KEY = "primary_key";
+  public static final String TABLE_UNIQUE_KEY = "unique_key";
 
   private static final List<PropertyMetadata<?>> TABLE_PROPERTY_META =
       ImmutableList.of(
           stringProperty(TABLE_ENGINE, "The engine that MySQL table uses", 
"InnoDB", false),
           stringProperty(
-              TABLE_AUTO_INCREMENT_OFFSET, "The auto increment offset for the 
table", null, false));
+              TABLE_AUTO_INCREMENT_OFFSET, "The auto increment offset for the 
table", null, false),
+          new PropertyMetadata<>(
+              TABLE_PRIMARY_KEY,
+              "The primary keys for the table",
+              new ArrayType(VARCHAR),
+              List.class,
+              ImmutableList.of(),
+              false,
+              value -> (List<?>) value,
+              value -> value),
+          new PropertyMetadata<>(
+              TABLE_UNIQUE_KEY,
+              "The unique keys for the table",
+              new ArrayType(VARCHAR),
+              List.class,
+              ImmutableList.of(),
+              false,
+              value -> (List<?>) value,
+              value -> value));
 
   /** Property name for auto-incrementing columns. */
   public static final String AUTO_INCREMENT = "auto_increment";
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/metadata/GravitinoTable.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/metadata/GravitinoTable.java
index fb2c848c84..9a27b2efb7 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/metadata/GravitinoTable.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/metadata/GravitinoTable.java
@@ -30,6 +30,7 @@ import 
org.apache.gravitino.rel.expressions.distributions.Distribution;
 import org.apache.gravitino.rel.expressions.distributions.Distributions;
 import org.apache.gravitino.rel.expressions.sorts.SortOrder;
 import org.apache.gravitino.rel.expressions.transforms.Transform;
+import org.apache.gravitino.rel.indexes.Index;
 import org.apache.gravitino.trino.connector.GravitinoErrorCode;
 
 /** Help Apache Gravitino connector access TableMetadata from Gravitino 
client. */
@@ -45,6 +46,7 @@ public class GravitinoTable {
   private SortOrder[] sortOrders = new SortOrder[0];
   private Transform[] partitioning = new Transform[0];
   private Distribution distribution = Distributions.NONE;
+  private Index[] indexes = new Index[0];
 
   /**
    * Constructs a new GravitinoTable with the specified schema name, table 
name, and table metadata.
@@ -69,6 +71,7 @@ public class GravitinoTable {
     sortOrders = tableMetadata.sortOrder();
     partitioning = tableMetadata.partitioning();
     distribution = tableMetadata.distribution();
+    indexes = tableMetadata.index();
   }
 
   /**
@@ -231,6 +234,15 @@ public class GravitinoTable {
     this.distribution = distribution;
   }
 
+  /**
+   * Sets the indexes of the table.
+   *
+   * @param indexes the indexes
+   */
+  public void setIndexes(Index[] indexes) {
+    this.indexes = indexes;
+  }
+
   /**
    * Retrieves the sort orders of the table.
    *
@@ -257,4 +269,13 @@ public class GravitinoTable {
   public Distribution getDistribution() {
     return distribution;
   }
+
+  /**
+   * Retrieves the indexes of the table.
+   *
+   * @return the indexes
+   */
+  public Index[] getIndexes() {
+    return indexes;
+  }
 }
diff --git 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/metadata/TestGravitinoTable.java
 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/metadata/TestGravitinoTable.java
index 91077ce6d0..f1171ac806 100644
--- 
a/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/metadata/TestGravitinoTable.java
+++ 
b/trino-connector/trino-connector/src/test/java/org/apache/gravitino/trino/connector/metadata/TestGravitinoTable.java
@@ -18,13 +18,17 @@
  */
 package org.apache.gravitino.trino.connector.metadata;
 
+import static 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLPropertyMeta.TABLE_PRIMARY_KEY;
+import static 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLPropertyMeta.TABLE_UNIQUE_KEY;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import com.google.common.collect.ImmutableList;
 import io.trino.spi.connector.ConnectorTableMetadata;
 import java.time.Instant;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import org.apache.gravitino.Audit;
 import org.apache.gravitino.rel.Column;
@@ -33,9 +37,12 @@ import 
org.apache.gravitino.rel.expressions.distributions.Distribution;
 import org.apache.gravitino.rel.expressions.distributions.Distributions;
 import org.apache.gravitino.rel.expressions.sorts.SortOrder;
 import org.apache.gravitino.rel.expressions.transforms.Transform;
+import org.apache.gravitino.rel.indexes.Index;
+import org.apache.gravitino.rel.indexes.Indexes;
 import org.apache.gravitino.rel.types.Types;
 import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
 import org.apache.gravitino.trino.connector.catalog.hive.HiveMetadataAdapter;
+import 
org.apache.gravitino.trino.connector.catalog.jdbc.mysql.MySQLMetadataAdapter;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -99,6 +106,44 @@ public class TestGravitinoTable {
     Assertions.assertTrue(tableMetadata.getComment().isEmpty());
   }
 
+  @Test
+  public void testGravitinoTableWithIndexes() {
+    Column[] columns = {
+      Column.of("f1", Types.StringType.get()),
+      Column.of("f2", Types.IntegerType.get()),
+      Column.of("f3", Types.IntegerType.get()),
+      Column.of("f4", Types.IntegerType.get()),
+      Column.of("f5", Types.IntegerType.get())
+    };
+    CatalogConnectorMetadataAdapter adapter =
+        new MySQLMetadataAdapter(
+            Collections.emptyList(), Collections.emptyList(), 
Collections.emptyList());
+    // test with no indexes
+    Table mockTable = mockTable("table1", columns, null, new Index[0]);
+    GravitinoTable table = new GravitinoTable("db1", "table1", mockTable);
+    ConnectorTableMetadata tableMetadata = adapter.getTableMetadata(table);
+    
Assertions.assertNull(tableMetadata.getProperties().get(TABLE_PRIMARY_KEY));
+    Assertions.assertNull(tableMetadata.getProperties().get(TABLE_UNIQUE_KEY));
+
+    // test with indexes
+    Index[] indexes = {
+      Indexes.createMysqlPrimaryKey(new String[][] {{"f1"}}),
+      Indexes.unique("unique_key1", new String[][] {{"f2"}}),
+      Indexes.unique("unique_key2", new String[][] {{"f3"}, {"f4"}})
+    };
+    Table mockTableWithIndexes = mockTable("tableWithIndexes", columns, null, 
indexes);
+    GravitinoTable tableWithIndexes =
+        new GravitinoTable("db1", "tableWithIndexes", mockTableWithIndexes);
+
+    ConnectorTableMetadata tableMetadataWithIndexes = 
adapter.getTableMetadata(tableWithIndexes);
+    Assertions.assertIterableEquals(
+        (List) tableMetadataWithIndexes.getProperties().get(TABLE_PRIMARY_KEY),
+        ImmutableList.of("f1"));
+    Assertions.assertIterableEquals(
+        (List) tableMetadataWithIndexes.getProperties().get(TABLE_UNIQUE_KEY),
+        ImmutableList.of("unique_key1:f2", "unique_key2:f3,f4"));
+  }
+
   public static Table mockTable(
       String tableName, Column[] columns, String comment, Map<String, String> 
properties) {
     Table table = mock(Table.class);
@@ -118,6 +163,26 @@ public class TestGravitinoTable {
     return table;
   }
 
+  public static Table mockTable(
+      String tableName, Column[] columns, String comment, Index[] indexes) {
+    Table table = mock(Table.class);
+    when(table.name()).thenReturn(tableName);
+    when(table.columns()).thenReturn(columns);
+    when(table.comment()).thenReturn(comment);
+    when(table.properties()).thenReturn(Collections.emptyMap());
+    when(table.partitioning()).thenReturn(new Transform[0]);
+    when(table.sortOrder()).thenReturn(new SortOrder[0]);
+    when(table.distribution()).thenReturn(Distributions.NONE);
+    when(table.index()).thenReturn(indexes);
+
+    Audit mockAudit = mock(Audit.class);
+    when(mockAudit.creator()).thenReturn("gravitino");
+    when(mockAudit.createTime()).thenReturn(Instant.now());
+    when(table.auditInfo()).thenReturn(mockAudit);
+
+    return table;
+  }
+
   public static Table mockTable(
       String tableName,
       Column[] columns,

Reply via email to