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());
+    }
 }

Reply via email to