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

nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-paimon-webui.git


The following commit(s) were added to refs/heads/main by this push:
     new f61eaf7  [Improvement] Refactor modify table interface (#141)
f61eaf7 is described below

commit f61eaf7c08e57724ed33aeef656f5b05730edfb9
Author: s7monk <[email protected]>
AuthorDate: Fri Jan 19 19:32:01 2024 +0800

    [Improvement] Refactor modify table interface (#141)
---
 .../web/server/controller/TableController.java     |  15 +-
 .../AlterTableDTO.java}                            |  22 ++-
 .../paimon/web/server/data/model/TableColumn.java  |   4 +
 .../paimon/web/server/service/TableService.java    |  13 +-
 .../web/server/service/impl/TableServiceImpl.java  | 135 +++++++++++++-----
 .../server/controller/MetadataControllerTest.java  |  40 ++++--
 .../web/server/controller/TableControllerTest.java | 153 ++++++++++++++++-----
 7 files changed, 271 insertions(+), 111 deletions(-)

diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java
index 480bd21..ac45747 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/TableController.java
@@ -18,8 +18,8 @@
 
 package org.apache.paimon.web.server.controller;
 
+import org.apache.paimon.web.server.data.dto.AlterTableDTO;
 import org.apache.paimon.web.server.data.dto.TableDTO;
-import org.apache.paimon.web.server.data.model.AlterTableRequest;
 import org.apache.paimon.web.server.data.result.R;
 import org.apache.paimon.web.server.data.result.enums.Status;
 import org.apache.paimon.web.server.data.vo.TableVO;
@@ -113,19 +113,12 @@ public class TableController {
     /**
      * Modify a column in a table.
      *
-     * @param catalogName The name of the catalog.
-     * @param databaseName The name of the database.
-     * @param tableName The name of the table.
-     * @param alterTableRequest The param of the alter table request.
+     * @param alterTableDTO the DTO containing alteration details.
      * @return A response indicating the success or failure of the operation.
      */
     @PostMapping("/alter")
-    public R<Void> alterTable(
-            @RequestParam String catalogName,
-            @RequestParam String databaseName,
-            @RequestParam String tableName,
-            @RequestBody AlterTableRequest alterTableRequest) {
-        return tableService.alterTable(catalogName, databaseName, tableName, 
alterTableRequest);
+    public R<Void> alterTable(@RequestBody AlterTableDTO alterTableDTO) {
+        return tableService.alterTable(alterTableDTO);
     }
 
     /**
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/AlterTableRequest.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/AlterTableDTO.java
similarity index 72%
rename from 
paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/AlterTableRequest.java
rename to 
paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/AlterTableDTO.java
index c537885..9eb362f 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/AlterTableRequest.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/dto/AlterTableDTO.java
@@ -16,19 +16,29 @@
  * limitations under the License.
  */
 
-package org.apache.paimon.web.server.data.model;
+package org.apache.paimon.web.server.data.dto;
+
+import org.apache.paimon.web.server.data.model.TableColumn;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-/** Alter table request. */
+import java.util.List;
+
+/** DTO of alter table. */
 @Data
-@AllArgsConstructor
+@Builder
 @NoArgsConstructor
-public class AlterTableRequest {
+@AllArgsConstructor
+public class AlterTableDTO {
+
+    private String catalogName;
+
+    private String databaseName;
 
-    private TableColumn oldColumn;
+    private String tableName;
 
-    private TableColumn newColumn;
+    private List<TableColumn> tableColumns;
 }
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/TableColumn.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/TableColumn.java
index a5363f9..f557670 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/TableColumn.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/TableColumn.java
@@ -34,6 +34,8 @@ import javax.annotation.Nullable;
 @AllArgsConstructor
 public class TableColumn {
 
+    private Integer id;
+
     private String field;
 
     private PaimonDataType dataType;
@@ -43,4 +45,6 @@ public class TableColumn {
     @Nullable private boolean isPk;
 
     @Nullable private String defaultValue;
+
+    private Integer sort;
 }
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/TableService.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/TableService.java
index f92793e..b1d59c6 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/TableService.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/TableService.java
@@ -18,8 +18,8 @@
 
 package org.apache.paimon.web.server.service;
 
+import org.apache.paimon.web.server.data.dto.AlterTableDTO;
 import org.apache.paimon.web.server.data.dto.TableDTO;
-import org.apache.paimon.web.server.data.model.AlterTableRequest;
 import org.apache.paimon.web.server.data.result.R;
 import org.apache.paimon.web.server.data.result.enums.Status;
 import org.apache.paimon.web.server.data.vo.TableVO;
@@ -61,17 +61,10 @@ public interface TableService {
     /**
      * Alters a table.
      *
-     * @param catalogName The name of the catalog.
-     * @param databaseName The name of the database.
-     * @param tableName The name of the table.
-     * @param alterTableRequest The param of the alter table request.
+     * @param alterTableDTO the DTO containing alteration details.
      * @return A response indicating the success or failure of the operation.
      */
-    R<Void> alterTable(
-            String catalogName,
-            String databaseName,
-            String tableName,
-            AlterTableRequest alterTableRequest);
+    R<Void> alterTable(AlterTableDTO alterTableDTO);
 
     /**
      * Adds options to a table.
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/TableServiceImpl.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/TableServiceImpl.java
index 62a1811..87a0f73 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/TableServiceImpl.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/TableServiceImpl.java
@@ -24,8 +24,8 @@ import org.apache.paimon.web.api.catalog.PaimonService;
 import org.apache.paimon.web.api.table.TableChange;
 import org.apache.paimon.web.api.table.metadata.ColumnMetadata;
 import org.apache.paimon.web.api.table.metadata.TableMetadata;
+import org.apache.paimon.web.server.data.dto.AlterTableDTO;
 import org.apache.paimon.web.server.data.dto.TableDTO;
-import org.apache.paimon.web.server.data.model.AlterTableRequest;
 import org.apache.paimon.web.server.data.model.CatalogInfo;
 import org.apache.paimon.web.server.data.model.TableColumn;
 import org.apache.paimon.web.server.data.result.R;
@@ -43,11 +43,14 @@ import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /** The implementation of {@link TableService}. */
 @Slf4j
@@ -173,35 +176,45 @@ public class TableServiceImpl implements TableService {
     }
 
     @Override
-    public R<Void> alterTable(
-            String catalogName,
-            String databaseName,
-            String tableName,
-            AlterTableRequest alterTableRequest) {
+    public R<Void> alterTable(AlterTableDTO alterTableDTO) {
         try {
+            String databaseName = alterTableDTO.getDatabaseName();
+            String tableName = alterTableDTO.getTableName();
             PaimonService service =
-                    
PaimonServiceUtils.getPaimonService(getCatalogInfo(catalogName));
-
-            TableColumn oldColumn = alterTableRequest.getOldColumn();
-            TableColumn newColumn = alterTableRequest.getNewColumn();
+                    PaimonServiceUtils.getPaimonService(
+                            getCatalogInfo(alterTableDTO.getCatalogName()));
 
-            List<TableChange> tableChanges = createTableChanges(oldColumn, 
newColumn);
+            Table table = service.getTable(databaseName, tableName);
+            List<DataField> fields = table.rowType().getFields();
+            Map<Integer, DataField> oldFieldsMap =
+                    fields.stream().collect(Collectors.toMap(DataField::id, 
Function.identity()));
+            Map<String, String> options = table.options();
 
-            if (!Objects.equals(newColumn.getField(), oldColumn.getField())) {
-                ColumnMetadata columnMetadata =
-                        new ColumnMetadata(
-                                oldColumn.getField(),
-                                
DataTypeConvertUtils.convert(oldColumn.getDataType()),
-                                oldColumn.getComment());
-
-                TableChange.ModifyColumnName modifyColumnName =
-                        TableChange.modifyColumnName(columnMetadata, 
newColumn.getField());
-                List<TableChange> modifyNameTableChanges = new ArrayList<>();
-                modifyNameTableChanges.add(modifyColumnName);
-                service.alterTable(databaseName, tableName, 
modifyNameTableChanges);
+            Map<Integer, Integer> fieldIdIndexMap = new HashMap<>();
+            for (int i = 0; i < fields.size(); i++) {
+                fieldIdIndexMap.put(fields.get(i).id(), i);
             }
 
-            service.alterTable(databaseName, tableName, tableChanges);
+            List<TableChange> tableChanges = new ArrayList<>();
+            List<TableColumn> tableColumns = alterTableDTO.getTableColumns();
+            tableColumns.sort(Comparator.comparing(TableColumn::getSort));
+            Map<Integer, String> tableColumnIndexMap = new HashMap<>();
+            for (int i = 0; i < tableColumns.size(); i++) {
+                tableColumnIndexMap.put(i, tableColumns.get(i).getField());
+            }
+            for (TableColumn tableColumn : tableColumns) {
+                DataField dataField = oldFieldsMap.get(tableColumn.getId());
+                addTableChanges(
+                        tableColumn,
+                        dataField,
+                        options,
+                        fieldIdIndexMap,
+                        tableColumnIndexMap,
+                        tableChanges);
+            }
+            if (!tableChanges.isEmpty()) {
+                service.alterTable(databaseName, tableName, tableChanges);
+            }
             return R.succeed();
         } catch (Exception e) {
             log.error("Exception with altering table.", e);
@@ -336,7 +349,9 @@ public class TableServiceImpl implements TableService {
                     String key = FIELDS_PREFIX + "." + field.name() + "." + 
DEFAULT_VALUE_SUFFIX;
                     TableColumn.TableColumnBuilder columnBuilder =
                             TableColumn.builder()
+                                    .id(field.id())
                                     .field(field.name())
+                                    .sort(field.id())
                                     
.dataType(DataTypeConvertUtils.fromPaimonType(field.type()))
                                     .comment(field.description());
                     if (CollectionUtils.isNotEmpty(primaryKeys)
@@ -354,25 +369,71 @@ public class TableServiceImpl implements TableService {
         return builder.build();
     }
 
-    private List<TableChange> createTableChanges(TableColumn oldColumn, 
TableColumn newColumn) {
+    private void addTableChanges(
+            TableColumn tableColumn,
+            DataField dataField,
+            Map<String, String> options,
+            Map<Integer, Integer> fieldIdIndexMap,
+            Map<Integer, String> tableColumnIndexMap,
+            List<TableChange> tableChanges) {
+        if (!Objects.equals(tableColumn.getField(), dataField.name())) {
+            ColumnMetadata columnMetadata =
+                    new ColumnMetadata(dataField.name(), dataField.type(), 
dataField.description());
+
+            TableChange.ModifyColumnName modifyColumnName =
+                    TableChange.modifyColumnName(columnMetadata, 
tableColumn.getField());
+            tableChanges.add(modifyColumnName);
+        }
+
         ColumnMetadata columnMetadata =
                 new ColumnMetadata(
-                        newColumn.getField(),
-                        DataTypeConvertUtils.convert(oldColumn.getDataType()),
-                        oldColumn.getComment());
+                        tableColumn.getField(), dataField.type(), 
dataField.description());
+
+        if 
(!DataTypeConvertUtils.convert(tableColumn.getDataType()).equals(dataField.type()))
 {
+            TableChange.ModifyColumnType modifyColumnType =
+                    TableChange.modifyColumnType(
+                            columnMetadata,
+                            
DataTypeConvertUtils.convert(tableColumn.getDataType()));
+            tableChanges.add(modifyColumnType);
+        }
 
-        TableChange.ModifyColumnType modifyColumnType =
-                TableChange.modifyColumnType(
-                        columnMetadata, 
DataTypeConvertUtils.convert(newColumn.getDataType()));
+        if (!Objects.equals(tableColumn.getComment(), 
dataField.description())) {
+            TableChange.ModifyColumnComment modifyColumnComment =
+                    TableChange.modifyColumnComment(columnMetadata, 
tableColumn.getComment());
+            tableChanges.add(modifyColumnComment);
+        }
 
-        TableChange.ModifyColumnComment modifyColumnComment =
-                TableChange.modifyColumnComment(columnMetadata, 
newColumn.getComment());
+        String key = FIELDS_PREFIX + "." + tableColumn.getField() + "." + 
DEFAULT_VALUE_SUFFIX;
+        if (options.get(key) != null) {
+            String defaultValue = options.get(key);
+            if (!Objects.equals(tableColumn.getDefaultValue(), defaultValue)) {
+                TableChange.SetOption setOption =
+                        TableChange.set(
+                                FIELDS_PREFIX
+                                        + "."
+                                        + tableColumn.getField()
+                                        + "."
+                                        + DEFAULT_VALUE_SUFFIX,
+                                tableColumn.getDefaultValue());
+                tableChanges.add(setOption);
+            }
+        }
 
-        List<TableChange> tableChanges = new ArrayList<>();
-        tableChanges.add(modifyColumnType);
-        tableChanges.add(modifyColumnComment);
+        if (tableColumn.getSort().equals(0) && 
fieldIdIndexMap.get(tableColumn.getId()) != 0) {
+            TableChange.ModifyColumnPosition modifyColumnPosition =
+                    TableChange.modifyColumnPosition(
+                            columnMetadata, 
TableChange.ColumnPosition.first());
+            tableChanges.add(modifyColumnPosition);
+        }
 
-        return tableChanges;
+        if (!tableColumn.getSort().equals(0)
+                && 
!tableColumn.getSort().equals(fieldIdIndexMap.get(tableColumn.getId()))) {
+            String referenceFieldName = 
tableColumnIndexMap.get(tableColumn.getSort() - 1);
+            TableChange.ModifyColumnPosition modifyColumnPosition =
+                    TableChange.modifyColumnPosition(
+                            columnMetadata, 
TableChange.ColumnPosition.after(referenceFieldName));
+            tableChanges.add(modifyColumnPosition);
+        }
     }
 
     /**
diff --git 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java
 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java
index 1b4c8ab..3390350 100644
--- 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java
+++ 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/MetadataControllerTest.java
@@ -118,20 +118,38 @@ public class MetadataControllerTest extends 
ControllerTestBase {
         // create table.
         List<TableColumn> tableColumns = new ArrayList<>();
         TableColumn id =
-                new TableColumn("id", 
PaimonDataType.builder().type("INT").build(), "pk", true, "");
+                TableColumn.builder()
+                        .field("id")
+                        .dataType(PaimonDataType.builder().type("INT").build())
+                        .comment("pk")
+                        .isPk(true)
+                        .defaultValue("")
+                        .build();
         TableColumn name =
-                new TableColumn(
-                        "name", 
PaimonDataType.builder().type("STRING").build(), "", false, "");
+                TableColumn.builder()
+                        .field("name")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("")
+                        .build();
         TableColumn age =
-                new TableColumn(
-                        "age", PaimonDataType.builder().type("INT").build(), 
"", false, "0");
+                TableColumn.builder()
+                        .field("age")
+                        .dataType(PaimonDataType.builder().type("INT").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("0")
+                        .build();
         TableColumn createTime =
-                new TableColumn(
-                        "create_time",
-                        PaimonDataType.builder().type("STRING").build(),
-                        "partition key",
-                        true,
-                        "");
+                TableColumn.builder()
+                        .field("create_time")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("partition key")
+                        .isPk(true)
+                        .defaultValue("0")
+                        .build();
+
         tableColumns.add(id);
         tableColumns.add(name);
         tableColumns.add(age);
diff --git 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/TableControllerTest.java
 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/TableControllerTest.java
index 6eed263..3045473 100644
--- 
a/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/TableControllerTest.java
+++ 
b/paimon-web-server/src/test/java/org/apache/paimon/web/server/controller/TableControllerTest.java
@@ -18,10 +18,10 @@
 
 package org.apache.paimon.web.server.controller;
 
+import org.apache.paimon.web.server.data.dto.AlterTableDTO;
 import org.apache.paimon.web.server.data.dto.CatalogDTO;
 import org.apache.paimon.web.server.data.dto.DatabaseDTO;
 import org.apache.paimon.web.server.data.dto.TableDTO;
-import org.apache.paimon.web.server.data.model.AlterTableRequest;
 import org.apache.paimon.web.server.data.model.CatalogInfo;
 import org.apache.paimon.web.server.data.model.TableColumn;
 import org.apache.paimon.web.server.data.result.R;
@@ -117,20 +117,37 @@ public class TableControllerTest extends 
ControllerTestBase {
         // create table.
         List<TableColumn> tableColumns = new ArrayList<>();
         TableColumn id =
-                new TableColumn("id", 
PaimonDataType.builder().type("INT").build(), "pk", true, "");
+                TableColumn.builder()
+                        .field("id")
+                        .dataType(PaimonDataType.builder().type("INT").build())
+                        .comment("pk")
+                        .isPk(true)
+                        .defaultValue("")
+                        .build();
         TableColumn name =
-                new TableColumn(
-                        "name", 
PaimonDataType.builder().type("STRING").build(), "", false, "");
+                TableColumn.builder()
+                        .field("name")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("")
+                        .build();
         TableColumn age =
-                new TableColumn(
-                        "age", PaimonDataType.builder().type("INT").build(), 
"", false, "0");
+                TableColumn.builder()
+                        .field("age")
+                        .dataType(PaimonDataType.builder().type("INT").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("0")
+                        .build();
         TableColumn createTime =
-                new TableColumn(
-                        "create_time",
-                        PaimonDataType.builder().type("STRING").build(),
-                        "partition key",
-                        true,
-                        "");
+                TableColumn.builder()
+                        .field("create_time")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("partition key")
+                        .isPk(true)
+                        .defaultValue("0")
+                        .build();
         tableColumns.add(id);
         tableColumns.add(name);
         tableColumns.add(age);
@@ -188,12 +205,13 @@ public class TableControllerTest extends 
ControllerTestBase {
     public void testAddColumn() throws Exception {
         List<TableColumn> tableColumns = new ArrayList<>();
         TableColumn address =
-                new TableColumn(
-                        "address",
-                        
PaimonDataType.builder().type("STRING").isNullable(true).build(),
-                        "",
-                        false,
-                        "");
+                TableColumn.builder()
+                        .field("address")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("")
+                        .build();
         tableColumns.add(address);
         TableDTO table =
                 TableDTO.builder()
@@ -316,26 +334,73 @@ public class TableControllerTest extends 
ControllerTestBase {
 
     @Test
     public void testAlterTable() throws Exception {
-        TableColumn oldColumn =
-                new TableColumn(
-                        "age", PaimonDataType.builder().type("INT").build(), 
"", false, "0");
+        // before modification.
+        List<TableColumn> columns = getColumns();
+        assertEquals(4, columns.size());
+        List<String> actualColumnNames =
+                
columns.stream().map(TableColumn::getField).collect(Collectors.toList());
+        List<String> expectedColumnNamesList = Arrays.asList("id", "name", 
"age", "create_time");
+        assertEquals(expectedColumnNamesList, actualColumnNames);
 
-        TableColumn newColumn =
-                new TableColumn(
-                        "age", 
PaimonDataType.builder().type("BIGINT").build(), "", false, "0");
+        List<TableColumn> tableColumns = new ArrayList<>();
+        TableColumn id =
+                TableColumn.builder()
+                        .id(0)
+                        .field("id")
+                        .dataType(PaimonDataType.builder().type("INT").build())
+                        .comment("pk")
+                        .isPk(true)
+                        .defaultValue("")
+                        .sort(2)
+                        .build();
+        TableColumn name =
+                TableColumn.builder()
+                        .id(1)
+                        .field("name")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("")
+                        .sort(3)
+                        .build();
+        TableColumn age =
+                TableColumn.builder()
+                        .id(2)
+                        .field("age1")
+                        
.dataType(PaimonDataType.builder().type("BIGINT").build())
+                        .comment("")
+                        .isPk(false)
+                        .defaultValue("0")
+                        .sort(0)
+                        .build();
+        TableColumn createTime =
+                TableColumn.builder()
+                        .id(3)
+                        .field("create_time")
+                        
.dataType(PaimonDataType.builder().type("STRING").build())
+                        .comment("partition key")
+                        .isPk(true)
+                        .defaultValue("1970-01-01 00:00:00")
+                        .sort(1)
+                        .build();
+        tableColumns.add(id);
+        tableColumns.add(name);
+        tableColumns.add(age);
+        tableColumns.add(createTime);
 
-        AlterTableRequest alterTableRequest = new AlterTableRequest();
-        alterTableRequest.setOldColumn(oldColumn);
-        alterTableRequest.setNewColumn(newColumn);
+        AlterTableDTO alterTableDTO =
+                AlterTableDTO.builder()
+                        .catalogName(catalogName)
+                        .databaseName(databaseName)
+                        .tableName(tableName)
+                        .tableColumns(tableColumns)
+                        .build();
 
         String responseString =
                 mockMvc.perform(
                                 MockMvcRequestBuilders.post(tablePath + 
"/alter")
                                         .cookie(cookie)
-                                        .param("catalogName", catalogName)
-                                        .param("databaseName", databaseName)
-                                        .param("tableName", tableName)
-                                        
.content(ObjectMapperUtils.toJSON(alterTableRequest))
+                                        
.content(ObjectMapperUtils.toJSON(alterTableDTO))
                                         
.contentType(MediaType.APPLICATION_JSON_VALUE)
                                         
.accept(MediaType.APPLICATION_JSON_VALUE))
                         .andExpect(MockMvcResultMatchers.status().isOk())
@@ -347,13 +412,29 @@ public class TableControllerTest extends 
ControllerTestBase {
         R<Void> r = ObjectMapperUtils.fromJSON(responseString, new 
TypeReference<R<Void>>() {});
         assertEquals(200, r.getCode());
 
-        List<TableColumn> columns = getColumns();
-        TableColumn ageColumn =
+        // after modification.
+        columns = getColumns();
+        List<String> afterActualColumnNames =
+                
columns.stream().map(TableColumn::getField).collect(Collectors.toList());
+        List<String> afterExpectedColumnNamesList =
+                Arrays.asList("age1", "create_time", "id", "name");
+        assertEquals(afterExpectedColumnNamesList, afterActualColumnNames);
+
+        TableColumn age1Column =
+                columns.stream()
+                        .filter(column -> "age1".equals(column.getField()))
+                        .findFirst()
+                        .orElse(null);
+        assert age1Column != null;
+        assertEquals("BIGINT", age1Column.getDataType().getType());
+
+        TableColumn createTimeColumn =
                 columns.stream()
-                        .filter(column -> "age".equals(column.getField()))
+                        .filter(column -> 
"create_time".equals(column.getField()))
                         .findFirst()
-                        .orElseThrow(() -> new AssertionError("Column 'age' 
not found"));
-        assertEquals("BIGINT", ageColumn.getDataType().getType());
+                        .orElse(null);
+        assert createTimeColumn != null;
+        assertEquals("1970-01-01 00:00:00", 
createTimeColumn.getDefaultValue());
     }
 
     @Test

Reply via email to