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

yuqi4733 pushed a commit to branch branch-lance-namepspace-dev
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-lance-namepspace-dev by 
this push:
     new d724f2e522 [#9028] improve(core): Refactor the table and table entity 
to avoid introducing unnecessary interfaces (#9029)
d724f2e522 is described below

commit d724f2e5226cb7348803b8ade9821a030472aa40
Author: Jerry Shao <[email protected]>
AuthorDate: Fri Nov 7 09:58:33 2025 +0800

    [#9028] improve(core): Refactor the table and table entity to avoid 
introducing unnecessary interfaces (#9029)
    
    ### What changes were proposed in this pull request?
    
    Refactor the table and table entity to avoid introducing unnecessary
    interfaces
    
    ### Why are the changes needed?
    
    To make the generic lakehouse catalog more stable
    
    Fix: #9028
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Exisiting UT and IT.
---
 .../main/java/org/apache/gravitino/rel/Table.java  |  71 +++++++------
 .../GenericLakehouseCatalogOperations.java         |  22 ++--
 .../lakehouse/lance/LanceCatalogOperations.java    |  35 +++----
 .../test/CatalogGenericLakehouseLanceIT.java       |   2 -
 .../gravitino/catalog/EntityCombinedTable.java     |  10 --
 .../gravitino/connector/GenericLakehouseTable.java |  26 ++---
 .../org/apache/gravitino/meta/TableEntity.java     | 113 +++++++++++++--------
 .../storage/relational/utils/POConverters.java     |  53 +++++-----
 .../java/org/apache/gravitino/meta/TestEntity.java |   4 +-
 .../gravitino/storage/TestEntityStorage.java       |  17 ++--
 .../storage/relational/TestJDBCBackend.java        |   2 +-
 .../storage/relational/utils/TestPOConverters.java |   6 +-
 .../gravitino/lance/common/config/LanceConfig.java |   6 +-
 mcp-server/tests/unit/tools/__init__.py            |   3 +
 14 files changed, 188 insertions(+), 182 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/rel/Table.java 
b/api/src/main/java/org/apache/gravitino/rel/Table.java
index 316ba18839..d9b95c5210 100644
--- a/api/src/main/java/org/apache/gravitino/rel/Table.java
+++ b/api/src/main/java/org/apache/gravitino/rel/Table.java
@@ -44,6 +44,46 @@ import org.apache.gravitino.tag.SupportsTags;
 @Evolving
 public interface Table extends Auditable {
 
+  /**
+   * The property name for the table format. This property indicates the 
format of the table, such
+   * as "iceberg", "hudi", "lance", etc. generic lakehouse catalog will use 
this property to
+   * determine the table format and perform specific operations based on the 
format. For other
+   * relational catalogs, this property can be ignored.
+   *
+   * <p>This property is a must-have property for generic lakehouse catalog to 
create tables, and
+   * cannot be modified after table creation.
+   *
+   * <p>Current supported formats include:
+   *
+   * <ul>
+   *   <li>lance
+   * </ul>
+   */
+  String PROPERTY_TABLE_FORMAT = "format";
+
+  /**
+   * The property name to indicate whether the table is external. This 
property is a boolean value
+   * represented as a string ("true" or "false"). if true (the table is 
external), the drop
+   * operation will not delete the underlying data.
+   *
+   * <p>This property is optional and defaults to "false" if not specified. 
Also, it depends on the
+   * catalog implementation to decide whether to leverage and allow to alter 
this property.
+   */
+  String PROPERTY_EXTERNAL = "external";
+
+  /**
+   * The property name for the table location. This property indicates the 
physical location of the
+   * table's data, such as a file path or a URI.
+   *
+   * <p>The location property is optional, it can be specified when creating 
the table. If not, the
+   * catalog implementation may use a location based on the catalog and schema 
location properties.
+   *
+   * <p>It depends on the catalog implementation to decide whether to leverage 
and allow to alter
+   * this property after table creation. And the behavior of altering this 
property (moving the
+   * table data) is also catalog specific.
+   */
+  String PROPERTY_LOCATION = "location";
+
   /**
    * @return Name of the table.
    */
@@ -99,37 +139,6 @@ public interface Table extends Auditable {
     return Collections.emptyMap();
   }
 
-  /**
-   * Table format of the table. For example, in a file-based table, it could 
be "parquet", "Lance",
-   * "Iceberg", etc.
-   *
-   * @return the table format name, for more information: LakehouseTableFormat
-   */
-  default String format() {
-    throw new UnsupportedOperationException("Table format is not supported.");
-  }
-
-  /**
-   * Gets the location of the table if the table has a location. For example, 
in a file-based table,
-   * it could be the root path where the table data is stored.
-   *
-   * @return the location of the table as a string.
-   */
-  default String location() {
-    throw new UnsupportedOperationException("Table location is not 
supported.");
-  }
-
-  /**
-   * Indicates whether the table is external. An external table is a table 
that is not managed by
-   * the catalog and the drop operation will not delete the underlying data. 
If it's a managed
-   * table, dropping the table will delete the underlying data.
-   *
-   * @return true if the table is external, false otherwise
-   */
-  default boolean external() {
-    return false;
-  }
-
   /**
    * Table method for working with partitions. If the table does not support 
partition operations,
    * an {@link UnsupportedOperationException} is thrown.
diff --git 
a/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/GenericLakehouseCatalogOperations.java
 
b/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/GenericLakehouseCatalogOperations.java
index 3860b52d57..5603ab1f22 100644
--- 
a/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/GenericLakehouseCatalogOperations.java
+++ 
b/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/GenericLakehouseCatalogOperations.java
@@ -200,16 +200,16 @@ public class GenericLakehouseCatalogOperations
     try {
       TableEntity tableEntity = store.get(ident, Entity.EntityType.TABLE, 
TableEntity.class);
       return GenericLakehouseTable.builder()
-          .withFormat(tableEntity.getFormat())
-          .withProperties(tableEntity.getProperties())
+          .withFormat(tableEntity.format())
+          .withProperties(tableEntity.properties())
           .withAuditInfo(tableEntity.auditInfo())
-          .withSortOrders(tableEntity.getSortOrder())
-          .withPartitioning(tableEntity.getPartitions())
-          .withDistribution(tableEntity.getDistribution())
+          .withSortOrders(tableEntity.sortOrders())
+          .withPartitioning(tableEntity.partitioning())
+          .withDistribution(tableEntity.distribution())
           .withColumns(EntityConverter.toColumns(tableEntity.columns()))
-          .withIndexes(tableEntity.getIndexes())
+          .withIndexes(tableEntity.indexes())
           .withName(tableEntity.name())
-          .withComment(tableEntity.getComment())
+          .withComment(tableEntity.comment())
           .build();
     } catch (NoSuchEntityException e) {
       throw new NoSuchTableException(e, "Table %s does not exist", ident);
@@ -265,8 +265,8 @@ public class GenericLakehouseCatalogOperations
               .withFormat(format.lowerName())
               .withProperties(newProperties)
               .withComment(comment)
-              .withPartitions(partitions)
-              .withSortOrder(sortOrders)
+              .withPartitioning(partitions)
+              .withSortOrders(sortOrders)
               .withDistribution(distribution)
               .withIndexes(indexes)
               .withId(idGenerator.nextId())
@@ -359,7 +359,7 @@ public class GenericLakehouseCatalogOperations
       throws NoSuchTableException, IllegalArgumentException {
     try {
       TableEntity tableEntity = store.get(ident, Entity.EntityType.TABLE, 
TableEntity.class);
-      Map<String, String> tableProperties = tableEntity.getProperties();
+      Map<String, String> tableProperties = tableEntity.properties();
       LakehouseCatalogOperations lakehouseCatalogOperations =
           getLakehouseCatalogOperations(tableProperties);
       return lakehouseCatalogOperations.alterTable(ident, changes);
@@ -373,7 +373,7 @@ public class GenericLakehouseCatalogOperations
     try {
       TableEntity tableEntity = store.get(ident, Entity.EntityType.TABLE, 
TableEntity.class);
       LakehouseCatalogOperations lakehouseCatalogOperations =
-          getLakehouseCatalogOperations(tableEntity.getProperties());
+          getLakehouseCatalogOperations(tableEntity.properties());
       return lakehouseCatalogOperations.purgeTable(ident);
     } catch (NoSuchTableException e) {
       LOG.warn("Table {} does not exist, skip purging it.", ident);
diff --git 
a/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceCatalogOperations.java
 
b/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceCatalogOperations.java
index 16bef5565f..8ec7909b2b 100644
--- 
a/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceCatalogOperations.java
+++ 
b/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/lance/LanceCatalogOperations.java
@@ -190,7 +190,7 @@ public class LanceCatalogOperations implements 
LakehouseCatalogOperations {
                       .withId(tableEntity.id())
                       .withName(tableEntity.name())
                       .withNamespace(tableEntity.namespace())
-                      .withFormat(entity.getFormat())
+                      .withFormat(entity.format())
                       .withAuditInfo(
                           AuditInfo.builder()
                               .withCreator(tableEntity.auditInfo().creator())
@@ -200,13 +200,12 @@ public class LanceCatalogOperations implements 
LakehouseCatalogOperations {
                               .build())
                       .withColumns(tableEntity.columns())
                       .withIndexes(
-                          ArrayUtils.addAll(
-                              entity.getIndexes(), addedIndexes.toArray(new 
Index[0])))
-                      .withDistribution(tableEntity.getDistribution())
-                      .withPartitions(tableEntity.getPartitions())
-                      .withSortOrder(tableEntity.getSortOrder())
-                      .withProperties(tableEntity.getProperties())
-                      .withComment(tableEntity.getComment())
+                          ArrayUtils.addAll(entity.indexes(), 
addedIndexes.toArray(new Index[0])))
+                      .withDistribution(tableEntity.distribution())
+                      .withPartitioning(tableEntity.partitioning())
+                      .withSortOrders(tableEntity.sortOrders())
+                      .withProperties(tableEntity.properties())
+                      .withComment(tableEntity.comment())
                       .build());
 
       // Add indexes to Lance dataset
@@ -214,16 +213,16 @@ public class LanceCatalogOperations implements 
LakehouseCatalogOperations {
 
       // return the updated table
       return GenericLakehouseTable.builder()
-          .withFormat(updatedEntity.getFormat())
-          .withProperties(updatedEntity.getProperties())
+          .withFormat(updatedEntity.format())
+          .withProperties(updatedEntity.properties())
           .withAuditInfo(updatedEntity.auditInfo())
-          .withSortOrders(updatedEntity.getSortOrder())
-          .withPartitioning(updatedEntity.getPartitions())
-          .withDistribution(updatedEntity.getDistribution())
+          .withSortOrders(updatedEntity.sortOrders())
+          .withPartitioning(updatedEntity.partitioning())
+          .withDistribution(updatedEntity.distribution())
           .withColumns(EntityConverter.toColumns(updatedEntity.columns()))
-          .withIndexes(updatedEntity.getIndexes())
+          .withIndexes(updatedEntity.indexes())
           .withName(updatedEntity.name())
-          .withComment(updatedEntity.getComment())
+          .withComment(updatedEntity.comment())
           .build();
     } catch (NoSuchEntityException e) {
       throw new NoSuchTableException("No such table: %s", ident);
@@ -234,9 +233,7 @@ public class LanceCatalogOperations implements 
LakehouseCatalogOperations {
 
   private void addLanceIndex(TableEntity updatedEntity, List<Index> 
addedIndexes) {
     String location =
-        updatedEntity
-            .getProperties()
-            .get(GenericLakehouseTablePropertiesMetadata.LAKEHOUSE_LOCATION);
+        
updatedEntity.properties().get(GenericLakehouseTablePropertiesMetadata.LAKEHOUSE_LOCATION);
     try (Dataset dataset = Dataset.open(location, new RootAllocator())) {
       // For Lance, we only support adding indexes, so in fact, we can't 
handle drop index here.
       for (Index index : addedIndexes) {
@@ -276,7 +273,7 @@ public class LanceCatalogOperations implements 
LakehouseCatalogOperations {
   public boolean purgeTable(NameIdentifier ident) {
     try {
       TableEntity tableEntity = store.get(ident, Entity.EntityType.TABLE, 
TableEntity.class);
-      Map<String, String> lancePropertiesMap = tableEntity.getProperties();
+      Map<String, String> lancePropertiesMap = tableEntity.properties();
       String location =
           
lancePropertiesMap.get(GenericLakehouseTablePropertiesMetadata.LAKEHOUSE_LOCATION);
 
diff --git 
a/catalogs/catalog-generic-lakehouse/src/test/java/org/apache/gravitino/catalog/lakehouse/integration/test/CatalogGenericLakehouseLanceIT.java
 
b/catalogs/catalog-generic-lakehouse/src/test/java/org/apache/gravitino/catalog/lakehouse/integration/test/CatalogGenericLakehouseLanceIT.java
index 1b4fd8b172..ca1e8ca003 100644
--- 
a/catalogs/catalog-generic-lakehouse/src/test/java/org/apache/gravitino/catalog/lakehouse/integration/test/CatalogGenericLakehouseLanceIT.java
+++ 
b/catalogs/catalog-generic-lakehouse/src/test/java/org/apache/gravitino/catalog/lakehouse/integration/test/CatalogGenericLakehouseLanceIT.java
@@ -53,7 +53,6 @@ import org.apache.gravitino.Catalog;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Schema;
 import org.apache.gravitino.client.GravitinoMetalake;
-import org.apache.gravitino.integration.test.container.ContainerSuite;
 import org.apache.gravitino.integration.test.util.BaseIT;
 import org.apache.gravitino.integration.test.util.GravitinoITUtils;
 import org.apache.gravitino.rel.Column;
@@ -97,7 +96,6 @@ public class CatalogGenericLakehouseLanceIT extends BaseIT {
   public static final String LANCE_COL_NAME2 = "lance_col_name2";
   public static final String LANCE_COL_NAME3 = "lance_col_name3";
   protected final String provider = "generic-lakehouse";
-  protected final ContainerSuite containerSuite = ContainerSuite.getInstance();
   protected GravitinoMetalake metalake;
   protected Catalog catalog;
   protected String tempDirectory;
diff --git 
a/core/src/main/java/org/apache/gravitino/catalog/EntityCombinedTable.java 
b/core/src/main/java/org/apache/gravitino/catalog/EntityCombinedTable.java
index 7a0d90ead7..921b14dcdf 100644
--- a/core/src/main/java/org/apache/gravitino/catalog/EntityCombinedTable.java
+++ b/core/src/main/java/org/apache/gravitino/catalog/EntityCombinedTable.java
@@ -129,16 +129,6 @@ public final class EntityCombinedTable implements Table {
     return table.index();
   }
 
-  @Override
-  public String format() {
-    return table.format();
-  }
-
-  @Override
-  public String location() {
-    return table.location();
-  }
-
   public boolean imported() {
     return imported;
   }
diff --git 
a/core/src/main/java/org/apache/gravitino/connector/GenericLakehouseTable.java 
b/core/src/main/java/org/apache/gravitino/connector/GenericLakehouseTable.java
index 7206125386..c408c49cc0 100644
--- 
a/core/src/main/java/org/apache/gravitino/connector/GenericLakehouseTable.java
+++ 
b/core/src/main/java/org/apache/gravitino/connector/GenericLakehouseTable.java
@@ -19,28 +19,15 @@
 
 package org.apache.gravitino.connector;
 
+import com.google.common.collect.ImmutableMap;
+import org.apache.gravitino.rel.Table;
+
 public class GenericLakehouseTable extends BaseTable {
-  private String format;
 
   public static Builder builder() {
     return new Builder();
   }
 
-  @Override
-  public String format() {
-    return format;
-  }
-
-  @Override
-  public String location() {
-    return properties.get("location");
-  }
-
-  @Override
-  public boolean external() {
-    return properties.get("external") != null && 
Boolean.parseBoolean(properties.get("external"));
-  }
-
   @Override
   protected TableOperations newOps() throws UnsupportedOperationException {
     throw new UnsupportedOperationException("Not implemented yet");
@@ -58,10 +45,13 @@ public class GenericLakehouseTable extends BaseTable {
     @Override
     protected GenericLakehouseTable internalBuild() {
       GenericLakehouseTable genericLakehouseTable = new 
GenericLakehouseTable();
-      genericLakehouseTable.format = this.format;
       genericLakehouseTable.columns = this.columns;
       genericLakehouseTable.comment = this.comment;
-      genericLakehouseTable.properties = this.properties;
+      genericLakehouseTable.properties =
+          ImmutableMap.<String, String>builder()
+              .putAll(this.properties)
+              .put(Table.PROPERTY_TABLE_FORMAT, this.format)
+              .buildKeepingLast();
       genericLakehouseTable.auditInfo = this.auditInfo;
       genericLakehouseTable.distribution = this.distribution;
       genericLakehouseTable.indexes = this.indexes;
diff --git a/core/src/main/java/org/apache/gravitino/meta/TableEntity.java 
b/core/src/main/java/org/apache/gravitino/meta/TableEntity.java
index 795db870d9..638a1ab346 100644
--- a/core/src/main/java/org/apache/gravitino/meta/TableEntity.java
+++ b/core/src/main/java/org/apache/gravitino/meta/TableEntity.java
@@ -26,15 +26,19 @@ import java.util.List;
 import java.util.Map;
 import lombok.Getter;
 import lombok.ToString;
+import lombok.experimental.Accessors;
 import org.apache.gravitino.Auditable;
 import org.apache.gravitino.Entity;
 import org.apache.gravitino.Field;
 import org.apache.gravitino.HasIdentifier;
 import org.apache.gravitino.Namespace;
 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.expressions.transforms.Transforms;
 import org.apache.gravitino.rel.indexes.Index;
+import org.apache.gravitino.rel.indexes.Indexes;
 import org.apache.gravitino.utils.CollectionUtils;
 
 /** A class representing a table entity in Apache Gravitino. */
@@ -47,23 +51,17 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
       Field.required("audit_info", AuditInfo.class, "The audit details of the 
table");
   public static final Field COLUMNS =
       Field.optional("columns", List.class, "The columns of the table");
-
   public static final Field FORMAT = Field.optional("format", String.class, 
"The table's format");
   public static final Field PROPERTIES =
       Field.optional("properties", Map.class, "The table's properties");
-
-  public static final Field PARTITIONS =
-      Field.optional("partitions", Transform[].class, "The table's partition");
-
-  public static final Field SORT_ORDER =
+  public static final Field PARTITIONING =
+      Field.optional("partitioning", Transform[].class, "The table's 
partitioning");
+  public static final Field SORT_ORDERS =
       Field.optional("sortOrders", SortOrder[].class, "The table's sort 
order");
-
   public static final Field DISTRIBUTION =
       Field.optional("distribution", Distribution.class, "The table's 
distribution");
-
   public static final Field INDEXES =
       Field.optional("indexes", Index[].class, "The table's indexes");
-
   public static final Field COMMENT =
       Field.optional("comment", String.class, "The table's comment");
 
@@ -77,13 +75,33 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
 
   private List<ColumnEntity> columns;
 
-  @Getter private String format;
-  @Getter private Map<String, String> properties;
-  @Getter private Transform[] partitions;
-  @Getter private SortOrder[] sortOrder;
-  @Getter private Distribution distribution;
-  @Getter private Index[] indexes;
-  @Getter private String comment;
+  @Getter
+  @Accessors(fluent = true)
+  private String format;
+
+  @Getter
+  @Accessors(fluent = true)
+  private Map<String, String> properties;
+
+  @Getter
+  @Accessors(fluent = true)
+  private Transform[] partitioning;
+
+  @Getter
+  @Accessors(fluent = true)
+  private SortOrder[] sortOrders;
+
+  @Getter
+  @Accessors(fluent = true)
+  private Distribution distribution;
+
+  @Getter
+  @Accessors(fluent = true)
+  private Index[] indexes;
+
+  @Getter
+  @Accessors(fluent = true)
+  private String comment;
 
   /**
    * Returns a map of the fields and their corresponding values for this table.
@@ -97,11 +115,10 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
     fields.put(NAME, name);
     fields.put(AUDIT_INFO, auditInfo);
     fields.put(COLUMNS, columns);
-
     fields.put(FORMAT, format);
     fields.put(PROPERTIES, properties);
-    fields.put(PARTITIONS, partitions);
-    fields.put(SORT_ORDER, sortOrder);
+    fields.put(PARTITIONING, partitioning);
+    fields.put(SORT_ORDERS, sortOrders);
     fields.put(DISTRIBUTION, distribution);
     fields.put(INDEXES, indexes);
     fields.put(COMMENT, comment);
@@ -181,8 +198,8 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
         && Objects.equal(format, baseTable.format)
         // Please check the correctness of this comparison.
         && Objects.equal(properties, baseTable.properties)
-        && Arrays.equals(partitions, baseTable.partitions)
-        && Arrays.equals(sortOrder, baseTable.sortOrder)
+        && Arrays.equals(partitioning, baseTable.partitioning)
+        && Arrays.equals(sortOrders, baseTable.sortOrders)
         && Objects.equal(distribution, baseTable.distribution)
         && Arrays.equals(indexes, baseTable.indexes)
         && Objects.equal(comment, baseTable.comment);
@@ -190,7 +207,20 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(id, name, auditInfo, columns, namespace);
+    return Objects.hashCode(
+        id,
+        name,
+        auditInfo,
+        columns,
+        namespace,
+        format,
+        properties,
+        Arrays.hashCode(partitioning),
+        Arrays.hashCode(sortOrders),
+        distribution,
+        distribution,
+        Arrays.hashCode(indexes),
+        comment);
   }
 
   public static class Builder {
@@ -236,13 +266,13 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
       return this;
     }
 
-    public Builder withPartitions(Transform[] partitions) {
-      tableEntity.partitions = partitions;
+    public Builder withPartitioning(Transform[] partitioning) {
+      tableEntity.partitioning = partitioning;
       return this;
     }
 
-    public Builder withSortOrder(SortOrder[] sortOrder) {
-      tableEntity.sortOrder = sortOrder;
+    public Builder withSortOrders(SortOrder[] sortOrders) {
+      tableEntity.sortOrders = sortOrders;
       return this;
     }
 
@@ -264,25 +294,18 @@ public class TableEntity implements Entity, Auditable, 
HasIdentifier {
     public TableEntity build() {
       tableEntity.validate();
 
-      if (tableEntity.columns == null) {
-        tableEntity.columns = Collections.emptyList();
-      }
-
-      if (tableEntity.properties == null) {
-        tableEntity.properties = Collections.emptyMap();
-      }
-
-      if (tableEntity.indexes == null) {
-        tableEntity.indexes = new Index[0];
-      }
-
-      if (tableEntity.partitions == null) {
-        tableEntity.partitions = new Transform[0];
-      }
-
-      if (tableEntity.sortOrder == null) {
-        tableEntity.sortOrder = new SortOrder[0];
-      }
+      tableEntity.columns =
+          tableEntity.columns == null ? Collections.emptyList() : 
tableEntity.columns;
+      tableEntity.properties =
+          tableEntity.properties == null ? Collections.emptyMap() : 
tableEntity.properties;
+      tableEntity.indexes =
+          tableEntity.indexes == null ? Indexes.EMPTY_INDEXES : 
tableEntity.indexes;
+      tableEntity.partitioning =
+          tableEntity.partitioning == null ? Transforms.EMPTY_TRANSFORM : 
tableEntity.partitioning;
+      tableEntity.sortOrders =
+          tableEntity.sortOrders == null ? new SortOrder[0] : 
tableEntity.sortOrders;
+      tableEntity.distribution =
+          tableEntity.distribution == null ? Distributions.NONE : 
tableEntity.distribution;
 
       return tableEntity;
     }
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/utils/POConverters.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/utils/POConverters.java
index 63f46f4e11..802ce6f810 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/utils/POConverters.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/utils/POConverters.java
@@ -401,33 +401,32 @@ public class POConverters {
           .withCurrentVersion(INIT_VERSION)
           .withLastVersion(INIT_VERSION)
           .withDeletedAt(DEFAULT_DELETED_AT)
-          .withFormat(tableEntity.getFormat())
-          .withComment(tableEntity.getComment())
+          .withFormat(tableEntity.format())
+          .withComment(tableEntity.comment())
           .withProperties(
-              tableEntity.getProperties() == null
+              tableEntity.properties() == null
                   ? null
-                  : 
JsonUtils.anyFieldMapper().writeValueAsString(tableEntity.getProperties()))
+                  : 
JsonUtils.anyFieldMapper().writeValueAsString(tableEntity.properties()))
           .withIndexes(
-              tableEntity.getIndexes() == null
+              tableEntity.indexes() == null
                   ? null
                   : JsonUtils.anyFieldMapper()
-                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.getIndexes())))
+                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.indexes())))
           .withDistribution(
-              tableEntity.getDistribution() == null
+              tableEntity.distribution() == null
                   ? null
                   : JsonUtils.anyFieldMapper()
-                      
.writeValueAsString(DTOConverters.toDTO(tableEntity.getDistribution())))
+                      
.writeValueAsString(DTOConverters.toDTO(tableEntity.distribution())))
           .withSortOrders(
-              tableEntity.getSortOrder() == null
+              tableEntity.sortOrders() == null
                   ? null
                   : JsonUtils.anyFieldMapper()
-                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.getSortOrder())))
+                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.sortOrders())))
           .withPartitions(
-              tableEntity.getPartitions() == null
+              tableEntity.partitioning() == null
                   ? null
                   : JsonUtils.anyFieldMapper()
-                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.getPartitions())));
-      // TODO support partitions later
+                      
.writeValueAsString(DTOConverters.toDTOs(tableEntity.partitioning())));
       return builder.build();
     } catch (JsonProcessingException e) {
       throw new RuntimeException("Failed to serialize json object:", e);
@@ -461,33 +460,33 @@ public class POConverters {
               .withCurrentVersion(currentVersion)
               .withLastVersion(lastVersion)
               .withDeletedAt(DEFAULT_DELETED_AT)
-              .withComment(newTable.getComment())
+              .withComment(newTable.comment())
               .withProperties(
-                  newTable.getProperties() == null
+                  newTable.properties() == null
                       ? null
-                      : 
JsonUtils.anyFieldMapper().writeValueAsString(newTable.getProperties()))
+                      : 
JsonUtils.anyFieldMapper().writeValueAsString(newTable.properties()))
               .withIndexes(
-                  newTable.getIndexes() == null
+                  newTable.indexes() == null
                       ? null
                       : JsonUtils.anyFieldMapper()
-                          
.writeValueAsString(DTOConverters.toDTOs(newTable.getIndexes())))
+                          
.writeValueAsString(DTOConverters.toDTOs(newTable.indexes())))
               .withDistribution(
-                  newTable.getDistribution() == null
+                  newTable.distribution() == null
                       ? null
                       : JsonUtils.anyFieldMapper()
-                          
.writeValueAsString(DTOConverters.toDTO(newTable.getDistribution())))
+                          
.writeValueAsString(DTOConverters.toDTO(newTable.distribution())))
               .withSortOrders(
-                  newTable.getSortOrder() == null
+                  newTable.sortOrders() == null
                       ? null
                       : JsonUtils.anyFieldMapper()
-                          
.writeValueAsString(DTOConverters.toDTOs(newTable.getSortOrder())))
+                          
.writeValueAsString(DTOConverters.toDTOs(newTable.sortOrders())))
               .withPartitions(
-                  newTable.getPartitions() == null
+                  newTable.partitioning() == null
                       ? null
                       : JsonUtils.anyFieldMapper()
-                          
.writeValueAsString(DTOConverters.toDTOs(newTable.getPartitions())))
+                          
.writeValueAsString(DTOConverters.toDTOs(newTable.partitioning())))
               // TODO support partitions later
-              .withFormat(newTable.getFormat());
+              .withFormat(newTable.format());
 
       return builder.build();
     } catch (JsonProcessingException e) {
@@ -522,7 +521,7 @@ public class POConverters {
                   : DTOConverters.fromDTO(
                       JsonUtils.anyFieldMapper()
                           .readValue(tablePO.getDistribution(), 
DistributionDTO.class)))
-          .withSortOrder(
+          .withSortOrders(
               StringUtils.isBlank(tablePO.getSortOrders())
                   ? null
                   : DTOConverters.fromDTOs(
@@ -534,7 +533,7 @@ public class POConverters {
                   : DTOConverters.fromDTOs(
                       
JsonUtils.anyFieldMapper().readValue(tablePO.getIndexes(), IndexDTO[].class)))
           // TODO add field partition, distribution and sort order;
-          .withPartitions(
+          .withPartitioning(
               StringUtils.isBlank(tablePO.getPartitions())
                   ? null
                   : JsonUtils.anyFieldMapper()
diff --git a/core/src/test/java/org/apache/gravitino/meta/TestEntity.java 
b/core/src/test/java/org/apache/gravitino/meta/TestEntity.java
index 9ac22212be..b6653d11ab 100644
--- a/core/src/test/java/org/apache/gravitino/meta/TestEntity.java
+++ b/core/src/test/java/org/apache/gravitino/meta/TestEntity.java
@@ -175,7 +175,7 @@ public class TestEntity {
             .withName(tableName)
             .withAuditInfo(auditInfo)
             .withFormat(format)
-            .withSortOrder(sortOrders)
+            .withSortOrders(sortOrders)
             .withProperties(tableProperties)
             .withComment(comment)
             .withIndexes(indexes)
@@ -189,7 +189,7 @@ public class TestEntity {
     Assertions.assertEquals(format, fields.get(TableEntity.FORMAT));
     Assertions.assertEquals(tableProperties, 
fields.get(TableEntity.PROPERTIES));
     Assertions.assertEquals(comment, fields.get(TableEntity.COMMENT));
-    Assertions.assertEquals(sortOrders, fields.get(TableEntity.SORT_ORDER));
+    Assertions.assertEquals(sortOrders, fields.get(TableEntity.SORT_ORDERS));
     Assertions.assertEquals(indexes, fields.get(TableEntity.INDEXES));
     Assertions.assertEquals(distribution, 
fields.get(TableEntity.DISTRIBUTION));
   }
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/TestEntityStorage.java 
b/core/src/test/java/org/apache/gravitino/storage/TestEntityStorage.java
index ad9cd173bc..89f276724c 100644
--- a/core/src/test/java/org/apache/gravitino/storage/TestEntityStorage.java
+++ b/core/src/test/java/org/apache/gravitino/storage/TestEntityStorage.java
@@ -2710,9 +2710,9 @@ public class TestEntityStorage {
           store.get(table.nameIdentifier(), Entity.EntityType.TABLE, 
TableEntity.class);
 
       // check table properties
-      Assertions.assertEquals("/tmp/test", 
fetchedTable.getProperties().get("location"));
-      Assertions.assertEquals("lance", 
fetchedTable.getProperties().get("format"));
-      Assertions.assertEquals("This is a lance table", 
fetchedTable.getComment());
+      Assertions.assertEquals("/tmp/test", 
fetchedTable.properties().get("location"));
+      Assertions.assertEquals("lance", 
fetchedTable.properties().get("format"));
+      Assertions.assertEquals("This is a lance table", fetchedTable.comment());
       Assertions.assertEquals(1, fetchedTable.columns().size());
       Assertions.assertEquals("column1", fetchedTable.columns().get(0).name());
 
@@ -2753,9 +2753,9 @@ public class TestEntityStorage {
 
       // check updated table properties
       Assertions.assertEquals(
-          "/tmp/updated_test", 
fetchedUpdatedTable.getProperties().get("location"));
-      Assertions.assertEquals("lance", 
fetchedUpdatedTable.getProperties().get("format"));
-      Assertions.assertEquals("This is an updated lance table", 
fetchedUpdatedTable.getComment());
+          "/tmp/updated_test", 
fetchedUpdatedTable.properties().get("location"));
+      Assertions.assertEquals("lance", 
fetchedUpdatedTable.properties().get("format"));
+      Assertions.assertEquals("This is an updated lance table", 
fetchedUpdatedTable.comment());
       Assertions.assertEquals(2, fetchedUpdatedTable.columns().size());
       for (ColumnEntity column : fetchedUpdatedTable.columns()) {
         if (column.name().equals("column1")) {
@@ -2764,10 +2764,7 @@ public class TestEntityStorage {
       }
 
       Assertions.assertTrue(
-          fetchedUpdatedTable.columns().stream()
-              .filter(c -> c.name().equals("column2"))
-              .findFirst()
-              .isPresent());
+          fetchedUpdatedTable.columns().stream().anyMatch(c -> 
c.name().equals("column2")));
 
       // Test drop the table
       Assertions.assertTrue(store.delete(table.nameIdentifier(), 
Entity.EntityType.TABLE));
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
index b2916cfcaf..5cd67cc798 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
@@ -1253,7 +1253,7 @@ public class TestJDBCBackend {
     backend.insert(table, false);
 
     TableEntity fetchedTable = backend.get(table.nameIdentifier(), 
Entity.EntityType.TABLE);
-    Assertions.assertEquals("LANCE", 
fetchedTable.getProperties().get("format"));
+    Assertions.assertEquals("LANCE", fetchedTable.properties().get("format"));
 
     TableEntity updatedTable =
         TableEntity.builder()
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/utils/TestPOConverters.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/utils/TestPOConverters.java
index eea8837baf..2582b459c6 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/utils/TestPOConverters.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/utils/TestPOConverters.java
@@ -629,8 +629,8 @@ public class TestPOConverters {
             Lists.newArrayList(),
             NamespaceUtil.ofTable("test_metalake", "test_catalog", 
"test_schema"));
 
-    Assertions.assertEquals(tableEntity.getDistribution(), 
entity.getDistribution());
-    Assertions.assertArrayEquals(tableEntity.getPartitions(), 
entity.getPartitions());
+    Assertions.assertEquals(tableEntity.distribution(), entity.distribution());
+    Assertions.assertArrayEquals(tableEntity.partitioning(), 
entity.partitioning());
   }
 
   @Test
@@ -1398,7 +1398,7 @@ public class TestPOConverters {
         .withNamespace(namespace)
         .withColumns(columns)
         .withDistribution(Distributions.of(Strategy.EVEN, 10, 
NamedReference.field("key")))
-        .withSortOrder(
+        .withSortOrders(
             new SortOrder[] {SortOrders.of(NamedReference.field("col1"), 
SortDirection.ASCENDING)})
         .withAuditInfo(auditInfo)
         .build();
diff --git 
a/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
 
b/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
index f4556e43e4..28fb09fb1f 100644
--- 
a/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
+++ 
b/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
@@ -42,21 +42,21 @@ public class LanceConfig extends Config implements 
OverwriteDefaultConfig {
   public static final ConfigEntry<String> NAMESPACE_BACKEND =
       new ConfigBuilder(CONFIG_NAMESPACE_BACKEND)
           .doc("The backend implementation for namespace operations")
-          .version(ConfigConstants.VERSION_0_1_0)
+          .version(ConfigConstants.VERSION_1_1_0)
           .stringConf()
           .createWithDefault(GRAVITINO_NAMESPACE_BACKEND);
 
   public static final ConfigEntry<String> METALAKE_NAME =
       new ConfigBuilder(GRAVITINO_NAMESPACE_BACKEND + "." + CONFIG_METALAKE)
           .doc("The Metalake name for Lance Gravitino namespace backend")
-          .version(ConfigConstants.VERSION_0_1_0)
+          .version(ConfigConstants.VERSION_1_1_0)
           .stringConf()
           .create();
 
   public static final ConfigEntry<String> NAMESPACE_BACKEND_URI =
       new ConfigBuilder(GRAVITINO_NAMESPACE_BACKEND + "." + CONFIG_URI)
           .doc("The URI of the namespace backend, e.g., Gravitino server URI")
-          .version(ConfigConstants.VERSION_0_1_0)
+          .version(ConfigConstants.VERSION_1_1_0)
           .stringConf()
           .createWithDefault(GRAVITINO_URI);
 
diff --git a/mcp-server/tests/unit/tools/__init__.py 
b/mcp-server/tests/unit/tools/__init__.py
index 50752ad81a..4456ffb949 100644
--- a/mcp-server/tests/unit/tools/__init__.py
+++ b/mcp-server/tests/unit/tools/__init__.py
@@ -14,6 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+import logging
 
 from tests.unit.tools.mock_operation import (
     MockCatalogOperation,
@@ -21,3 +22,5 @@ from tests.unit.tools.mock_operation import (
     MockSchemaOperation,
     MockTableOperation,
 )
+
+logging.disable(logging.INFO)


Reply via email to