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,