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