mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-20 06:34:55 +00:00
[improvement][Headless] Fix the caching issue in struct queries and add headless test cases. (#689)
This commit is contained in:
@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.integration;
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
|
||||
import com.tencent.supersonic.headless.server.service.QueryService;
|
||||
import java.util.HashSet;
|
||||
@@ -29,7 +30,11 @@ public class BaseTest {
|
||||
return queryService.queryByReq(buildQuerySqlReq(sql), user);
|
||||
}
|
||||
|
||||
protected QuerySqlReq buildQuerySqlReq(String sql) {
|
||||
protected SemanticQueryResp queryByReq(SemanticQueryReq queryReq, User user) throws Exception {
|
||||
return queryService.queryByReq(queryReq, user);
|
||||
}
|
||||
|
||||
protected SemanticQueryReq buildQuerySqlReq(String sql) {
|
||||
QuerySqlReq querySqlCmd = new QuerySqlReq();
|
||||
querySqlCmd.setSql(sql);
|
||||
Set<Long> modelIds = new HashSet<>();
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.tencent.supersonic.headless.integration;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class ExplainTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
public void testSumExplain() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.tencent.supersonic.headless.integration;
|
||||
|
||||
import static java.time.LocalDate.now;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.common.pojo.Aggregator;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.DateConf.DateMode;
|
||||
import com.tencent.supersonic.common.pojo.Order;
|
||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
public class QueryByStructTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
public void testSumQuery() throws Exception {
|
||||
QueryStructReq queryStructReq = buildQueryStructReq(null);
|
||||
SemanticQueryResp semanticQueryResp = queryByReq(queryStructReq, User.getFakeUser());
|
||||
assertEquals(1, semanticQueryResp.getColumns().size());
|
||||
QueryColumn queryColumn = semanticQueryResp.getColumns().get(0);
|
||||
assertEquals("访问次数", queryColumn.getName());
|
||||
assertEquals(1, semanticQueryResp.getResultList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGroupByQuery() throws Exception {
|
||||
QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("department"));
|
||||
SemanticQueryResp result = queryByReq(queryStructReq, User.getFakeUser());
|
||||
assertEquals(2, result.getColumns().size());
|
||||
QueryColumn firstColumn = result.getColumns().get(0);
|
||||
QueryColumn secondColumn = result.getColumns().get(1);
|
||||
assertEquals("部门", firstColumn.getName());
|
||||
assertEquals("访问次数", secondColumn.getName());
|
||||
assertNotNull(result.getResultList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCacheQuery() throws Exception {
|
||||
QueryStructReq queryStructReq1 = buildQueryStructReq(Arrays.asList("department"));
|
||||
QueryStructReq queryStructReq2 = buildQueryStructReq(Arrays.asList("department"));
|
||||
SemanticQueryResp result1 = queryByReq(queryStructReq1, User.getFakeUser());
|
||||
SemanticQueryResp result2 = queryByReq(queryStructReq2, User.getFakeUser());
|
||||
assertEquals(result1, result2);
|
||||
}
|
||||
|
||||
private QueryStructReq buildQueryStructReq(List<String> groups) {
|
||||
QueryStructReq queryStructReq = new QueryStructReq();
|
||||
queryStructReq.addModelId(1L);
|
||||
queryStructReq.addModelId(2L);
|
||||
queryStructReq.addModelId(3L);
|
||||
|
||||
queryStructReq.setQueryType(QueryType.METRIC);
|
||||
Aggregator aggregator = new Aggregator();
|
||||
aggregator.setFunc(AggOperatorEnum.SUM);
|
||||
aggregator.setColumn("pv");
|
||||
queryStructReq.setAggregators(Arrays.asList(aggregator));
|
||||
|
||||
if (CollectionUtils.isNotEmpty(groups)) {
|
||||
queryStructReq.setGroups(groups);
|
||||
queryStructReq.setGroups(Arrays.asList("department"));
|
||||
}
|
||||
|
||||
DateConf dateConf = new DateConf();
|
||||
dateConf.setDateMode(DateMode.BETWEEN);
|
||||
dateConf.setStartDate(now().plusDays(-1).toString());
|
||||
dateConf.setEndDate(now().plusDays(-10).toString());
|
||||
queryStructReq.setDateInfo(dateConf);
|
||||
|
||||
List<Order> orders = new ArrayList<>();
|
||||
Order order = new Order();
|
||||
order.setColumn("pv");
|
||||
orders.add(order);
|
||||
queryStructReq.setOrders(orders);
|
||||
return queryStructReq;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user