jerryshao commented on code in PR #5078:
URL: https://github.com/apache/gravitino/pull/5078#discussion_r1796500696
##########
core/src/main/java/org/apache/gravitino/storage/relational/service/TableMetaService.java:
##########
@@ -144,30 +153,47 @@ public <E extends Entity & HasIdentifier> TableEntity
updateTable(
CommonMetaService.getInstance().getParentEntityIdByNamespace(identifier.namespace());
TablePO oldTablePO = getTablePOBySchemaIdAndName(schemaId, tableName);
- TableEntity oldTableEntity = POConverters.fromTablePO(oldTablePO,
identifier.namespace());
- TableEntity newEntity = (TableEntity) updater.apply((E) oldTableEntity);
+ List<ColumnPO> oldTableColumns =
+ TableColumnMetaService.getInstance()
+ .getColumnsByTableIdAndVersion(oldTablePO.getTableId(),
oldTablePO.getCurrentVersion());
+ TableEntity oldTableEntity =
+ POConverters.fromTableAndColumnPOs(oldTablePO, oldTableColumns,
identifier.namespace());
+
+ TableEntity newTableEntity = (TableEntity) updater.apply((E)
oldTableEntity);
Preconditions.checkArgument(
- Objects.equals(oldTableEntity.id(), newEntity.id()),
+ Objects.equals(oldTableEntity.id(), newTableEntity.id()),
"The updated table entity id: %s should be same with the table entity
id before: %s",
- newEntity.id(),
+ newTableEntity.id(),
oldTableEntity.id());
- Integer updateResult;
+ boolean isColumnChanged =
+ TableColumnMetaService.getInstance().isColumnUpdated(oldTableEntity,
newTableEntity);
+ TablePO newTablePO =
+ POConverters.updateTablePOWithVersion(oldTablePO, newTableEntity,
isColumnChanged);
+
+ final AtomicInteger updateResult = new AtomicInteger(0);
try {
- updateResult =
- SessionUtils.doWithCommitAndFetchResult(
- TableMetaMapper.class,
- mapper ->
- mapper.updateTableMeta(
- POConverters.updateTablePOWithVersion(oldTablePO,
newEntity), oldTablePO));
+ SessionUtils.doMultipleWithCommit(
+ () ->
+ updateResult.set(
Review Comment:
> Maybe Fileset's update / delete operation can improve like this too.
I can do this in a separate PR.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]