diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java index 5b4069ae8e..2d0c7ec66e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java @@ -81,7 +81,7 @@ public class MetadataGenerator { private static final Logger LOG = LogManager.getLogger(MetadataGenerator.class); public static TFetchSchemaTableDataResult getMetadataTable(TFetchSchemaTableDataRequest request) throws TException { - if (!request.isSetMetadaTableParams()) { + if (!request.isSetMetadaTableParams() || !request.getMetadaTableParams().isSetMetadataType()) { return errorResult("Metadata table params is not set. "); } TFetchSchemaTableDataResult result; diff --git a/fe/fe-core/src/test/java/org/apache/doris/service/FrontendServiceImplTest.java b/fe/fe-core/src/test/java/org/apache/doris/service/FrontendServiceImplTest.java index 90b26321c0..318926167c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/service/FrontendServiceImplTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/service/FrontendServiceImplTest.java @@ -27,8 +27,17 @@ import org.apache.doris.catalog.Partition; import org.apache.doris.common.Config; import org.apache.doris.common.FeConstants; import org.apache.doris.qe.ConnectContext; +import org.apache.doris.tablefunction.BackendsTableValuedFunction; +import org.apache.doris.thrift.TBackendsMetadataParams; import org.apache.doris.thrift.TCreatePartitionRequest; import org.apache.doris.thrift.TCreatePartitionResult; +import org.apache.doris.thrift.TFetchSchemaTableDataRequest; +import org.apache.doris.thrift.TFetchSchemaTableDataResult; +import org.apache.doris.thrift.TGetDbsParams; +import org.apache.doris.thrift.TGetDbsResult; +import org.apache.doris.thrift.TMetadataTableRequestParams; +import org.apache.doris.thrift.TMetadataType; +import org.apache.doris.thrift.TSchemaTableName; import org.apache.doris.thrift.TStatusCode; import org.apache.doris.thrift.TStringLiteral; import org.apache.doris.utframe.UtFrameUtils; @@ -42,8 +51,11 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; public class FrontendServiceImplTest { private static String runningDir = "fe/mocked/FrontendServiceImplTest/" + UUID.randomUUID().toString() + "/"; @@ -156,4 +168,56 @@ public class FrontendServiceImplTest { List pbs = (List) table.getAllPartitions(); Assert.assertEquals(pbs.size(), 1); } + + @Test + public void testGetDBNames() throws Exception { + // create database + String createDbStmtStr = "create database `test_`;"; + CreateDbStmt createDbStmt = (CreateDbStmt) UtFrameUtils.parseAndAnalyzeStmt(createDbStmtStr, connectContext); + Env.getCurrentEnv().createDb(createDbStmt); + + FrontendServiceImpl impl = new FrontendServiceImpl(exeEnv); + TGetDbsParams params = new TGetDbsParams(); + params.setPattern("tes%"); + params.setCurrentUserIdent(connectContext.getCurrentUserIdentity().toThrift()); + TGetDbsResult dbNames = impl.getDbNames(params); + + Assert.assertEquals(dbNames.getDbs().size(), 2); + Assert.assertEquals(dbNames.getDbs(), Arrays.asList("test", "test_")); + } + + @Test + public void fetchSchemaTableData() throws Exception { + FrontendServiceImpl impl = new FrontendServiceImpl(exeEnv); + + TFetchSchemaTableDataRequest request = new TFetchSchemaTableDataRequest(); + request.setSchemaTableName(TSchemaTableName.METADATA_TABLE); + + TFetchSchemaTableDataResult result = impl.fetchSchemaTableData(request); + Assert.assertEquals(result.getStatus().getStatusCode(), TStatusCode.INTERNAL_ERROR); + Assert.assertEquals(result.getStatus().getErrorMsgs().get(0), "Metadata table params is not set. "); + + TMetadataTableRequestParams params = new TMetadataTableRequestParams(); + request.setMetadaTableParams(params); + result = impl.fetchSchemaTableData(request); + Assert.assertEquals(result.getStatus().getStatusCode(), TStatusCode.INTERNAL_ERROR); + Assert.assertEquals(result.getStatus().getErrorMsgs().get(0), "Metadata table params is not set. "); + + params.setMetadataType(TMetadataType.BACKENDS); + request.setMetadaTableParams(params); + result = impl.fetchSchemaTableData(request); + Assert.assertEquals(result.getStatus().getStatusCode(), TStatusCode.INTERNAL_ERROR); + Assert.assertEquals(result.getStatus().getErrorMsgs().get(0), "backends metadata param is not set."); + + params.setMetadataType(TMetadataType.BACKENDS); + TBackendsMetadataParams backendsMetadataParams = new TBackendsMetadataParams(); + backendsMetadataParams.setClusterName(""); + params.setBackendsMetadataParams(backendsMetadataParams); + params.setColumnsName((new BackendsTableValuedFunction(new HashMap())).getTableColumns() + .stream().map(c -> c.getName()).collect(Collectors.toList())); + request.setMetadaTableParams(params); + result = impl.fetchSchemaTableData(request); + Assert.assertEquals(result.getStatus().getStatusCode(), TStatusCode.OK); + Assert.assertEquals(result.getDataBatchSize(), 1); + } }