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 cd30c97 [Bugfix] Introduce getting table options interface (#155)
cd30c97 is described below
commit cd30c979ee0ee754202152ce84fad0afa0b2eb84
Author: zhoulii <[email protected]>
AuthorDate: Thu Jan 25 13:35:38 2024 +0800
[Bugfix] Introduce getting table options interface (#155)
---
.../web/server/controller/MetadataController.java | 6 ++++
.../apache/paimon/web/server/data/vo/OptionVO.java | 34 ++++++++++++++++++++++
.../paimon/web/server/service/MetadataService.java | 9 ++++++
.../server/service/impl/MetadataServiceImpl.java | 21 +++++++++++++
.../server/controller/MetadataControllerTest.java | 34 ++++++++++++++++++++++
5 files changed, 104 insertions(+)
diff --git
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java
index 566a0af..21b7d4a 100644
---
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java
+++
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/controller/MetadataController.java
@@ -22,6 +22,7 @@ import org.apache.paimon.web.server.data.dto.MetadataDTO;
import org.apache.paimon.web.server.data.result.R;
import org.apache.paimon.web.server.data.vo.DataFileVO;
import org.apache.paimon.web.server.data.vo.ManifestsVO;
+import org.apache.paimon.web.server.data.vo.OptionVO;
import org.apache.paimon.web.server.data.vo.SchemaVO;
import org.apache.paimon.web.server.data.vo.SnapshotVO;
import org.apache.paimon.web.server.service.MetadataService;
@@ -65,4 +66,9 @@ public class MetadataController {
public R<List<DataFileVO>> getDataFileInfo(@RequestBody MetadataDTO dto) {
return R.succeed(metadataService.getDataFile(dto));
}
+
+ @PostMapping("/options")
+ public R<List<OptionVO>> getOptionInfo(@RequestBody MetadataDTO dto) {
+ return R.succeed(metadataService.getOption(dto));
+ }
}
diff --git
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/OptionVO.java
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/OptionVO.java
new file mode 100644
index 0000000..5589a85
--- /dev/null
+++
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/vo/OptionVO.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.paimon.web.server.data.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/** VO of metadata table option. */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class OptionVO {
+
+ private String key;
+
+ private String value;
+}
diff --git
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java
index 86127e7..d4272ce 100644
---
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java
+++
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/MetadataService.java
@@ -21,6 +21,7 @@ package org.apache.paimon.web.server.service;
import org.apache.paimon.web.server.data.dto.MetadataDTO;
import org.apache.paimon.web.server.data.vo.DataFileVO;
import org.apache.paimon.web.server.data.vo.ManifestsVO;
+import org.apache.paimon.web.server.data.vo.OptionVO;
import org.apache.paimon.web.server.data.vo.SchemaVO;
import org.apache.paimon.web.server.data.vo.SnapshotVO;
@@ -60,4 +61,12 @@ public interface MetadataService {
* @return a list of data file objects
*/
List<DataFileVO> getDataFile(MetadataDTO dto);
+
+ /**
+ * Retrieves a list of Metadata table option.
+ *
+ * @param dto query metadata info
+ * @return a list of table option objects
+ */
+ List<OptionVO> getOption(MetadataDTO dto);
}
diff --git
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java
index e980a80..36b1f80 100644
---
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java
+++
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/MetadataServiceImpl.java
@@ -30,6 +30,7 @@ import
org.apache.paimon.web.server.data.model.MetadataFieldsModel;
import org.apache.paimon.web.server.data.model.MetadataOptionModel;
import org.apache.paimon.web.server.data.vo.DataFileVO;
import org.apache.paimon.web.server.data.vo.ManifestsVO;
+import org.apache.paimon.web.server.data.vo.OptionVO;
import org.apache.paimon.web.server.data.vo.SchemaVO;
import org.apache.paimon.web.server.data.vo.SnapshotVO;
import org.apache.paimon.web.server.service.CatalogService;
@@ -171,6 +172,26 @@ public class MetadataServiceImpl implements
MetadataService {
return result;
}
+ @Override
+ public List<OptionVO> getOption(MetadataDTO dto) {
+ initEnvironment(dto, MetadataConstant.OPTIONS);
+
+ List<OptionVO> result = new LinkedList<>();
+
+ try {
+ reader.forEachRemaining(
+ internalRow -> {
+ OptionVO optionVo = new OptionVO();
+ optionVo.setKey(internalRow.getString(0).toString());
+ optionVo.setValue(internalRow.getString(1).toString());
+ result.add(optionVo);
+ });
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return result;
+ }
+
private void initEnvironment(MetadataDTO dto, String metadataConstantType)
{
dto.setTableName(
String.format(
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 3390350..f15f3e4 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
@@ -25,6 +25,7 @@ import org.apache.paimon.web.server.data.dto.TableDTO;
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;
+import org.apache.paimon.web.server.data.vo.OptionVO;
import org.apache.paimon.web.server.util.ObjectMapperUtils;
import org.apache.paimon.web.server.util.PaimonDataType;
@@ -42,6 +43,7 @@ import
org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -298,4 +300,36 @@ public class MetadataControllerTest extends
ControllerTestBase {
R<Void> result = ObjectMapperUtils.fromJSON(response, new
TypeReference<R<Void>>() {});
assertEquals(200, result.getCode());
}
+
+ @Test
+ public void testGetOptionInfo() throws Exception {
+ MetadataDTO metadata = new MetadataDTO();
+ metadata.setCatalogId(catalogId);
+ metadata.setDatabaseName(databaseName);
+ metadata.setTableName(tableName);
+
+ String response =
+ mockMvc.perform(
+ MockMvcRequestBuilders.post(METADATA_PATH +
"/options")
+ .cookie(cookie)
+
.content(ObjectMapperUtils.toJSON(metadata))
+
.contentType(MediaType.APPLICATION_JSON_VALUE)
+
.accept(MediaType.APPLICATION_JSON_VALUE))
+ .andExpect(MockMvcResultMatchers.status().isOk())
+ .andDo(MockMvcResultHandlers.print())
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ R<List<OptionVO>> result =
+ ObjectMapperUtils.fromJSON(response, new
TypeReference<R<List<OptionVO>>>() {});
+
+ assertEquals(200, result.getCode());
+ List<OptionVO> expected =
+ Arrays.asList(
+ new OptionVO("bucket", "2"),
+ new OptionVO("FIELDS.create_time.default-value", "0"),
+ new OptionVO("FIELDS.age.default-value", "0"));
+ assertEquals(expected, result.getData());
+ }
}