diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2ql/LLMRequestService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2ql/LLMRequestService.java index 8a720988f..a610deffd 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2ql/LLMRequestService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/llm/s2ql/LLMRequestService.java @@ -23,6 +23,7 @@ import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.knowledge.service.SchemaService; import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem; import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -134,18 +135,18 @@ public class LLMRequestService { } public LLMResp requestLLM(LLMReq llmReq, Long modelId) { - String questUrl = llmParserConfig.getUrl() + llmParserConfig.getQueryToSqlPath(); long startTime = System.currentTimeMillis(); log.info("requestLLM request, modelId:{},llmReq:{}", modelId, llmReq); try { + URL url = new URL(new URL(llmParserConfig.getUrl()), llmParserConfig.getQueryToSqlPath()); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity entity = new HttpEntity<>(JsonUtil.toString(llmReq), headers); - ResponseEntity responseEntity = restTemplate.exchange(questUrl, HttpMethod.POST, entity, + ResponseEntity responseEntity = restTemplate.exchange(url.toString(), HttpMethod.POST, entity, LLMResp.class); log.info("requestLLM response,cost:{}, questUrl:{} \n entity:{} \n body:{}", - System.currentTimeMillis() - startTime, questUrl, entity, responseEntity.getBody()); + System.currentTimeMillis() - startTime, url.toString(), entity, responseEntity.getBody()); return responseEntity.getBody(); } catch (Exception e) { log.error("requestLLM error", e); diff --git a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/FunctionAliasReplaceVisitor.java b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/FunctionAliasReplaceVisitor.java index ccc8a6821..3d719bbf1 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/FunctionAliasReplaceVisitor.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/FunctionAliasReplaceVisitor.java @@ -15,7 +15,11 @@ public class FunctionAliasReplaceVisitor extends SelectItemVisitorAdapter { public void visit(SelectExpressionItem selectExpressionItem) { if (selectExpressionItem.getExpression() instanceof Function) { Function function = (Function) selectExpressionItem.getExpression(); - if (Objects.nonNull(selectExpressionItem.getAlias())) { + String columnName = SqlParserSelectHelper.getColumnName(function); + //1.exist alias. as + //2.alias's fieldName not equal. "sum(pv) as pv" cannot be replaced. + if (Objects.nonNull(selectExpressionItem.getAlias()) && !selectExpressionItem.getAlias().getName() + .equalsIgnoreCase(columnName)) { aliasToActualExpression.put(selectExpressionItem.getAlias().getName(), function.toString()); selectExpressionItem.setAlias(null); } diff --git a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserAddHelperTest.java b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserAddHelperTest.java index 02eb32de5..4b63a7a79 100644 --- a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserAddHelperTest.java +++ b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserAddHelperTest.java @@ -203,6 +203,18 @@ class SqlParserAddHelperTest { "SELECT department, sum(pv) FROM t_1 WHERE (sum(pv) > 1 AND department = 'HR') AND " + "sys_imp_date = '2023-09-11' GROUP BY department ORDER BY sum(pv) DESC LIMIT 10", replaceSql); + + sql = "select department, sum(pv) as pv from t_1 where sys_imp_date = '2023-09-11' GROUP BY " + + "department order by pv desc limit 10"; + replaceSql = SqlParserReplaceHelper.replaceAlias(sql); + replaceSql = SqlParserAddHelper.addAggregateToField(replaceSql, filedNameToAggregate); + replaceSql = SqlParserAddHelper.addGroupBy(replaceSql, groupByFields); + + Assert.assertEquals( + "SELECT department, sum(pv) AS pv " + + "FROM t_1 WHERE sys_imp_date = '2023-09-11' GROUP BY department " + + "ORDER BY sum(pv) DESC LIMIT 10", + replaceSql); } @Test diff --git a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelperTest.java b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelperTest.java index 505066dde..6fe02a9e3 100644 --- a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelperTest.java +++ b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelperTest.java @@ -396,6 +396,16 @@ class SqlParserReplaceHelperTest { + "GROUP BY 部门 ORDER BY sum(访问次数) DESC LIMIT 10", replaceSql); + sql = "select 部门, sum(访问次数) as 访问次数 from 超音数 where " + + "(datediff('day', 数据日期, '2023-09-05') <= 3) and 数据日期 = '2023-10-10' " + + "group by 部门 order by 访问次数 desc limit 10"; + replaceSql = SqlParserReplaceHelper.replaceAlias(sql); + System.out.println(replaceSql); + Assert.assertEquals( + "SELECT 部门, sum(访问次数) AS 访问次数 FROM 超音数 WHERE (datediff('day', 数据日期, " + + "'2023-09-05') <= 3) AND 数据日期 = '2023-10-10' GROUP BY 部门 ORDER BY 访问次数 DESC LIMIT 10", + replaceSql); + } private Map initParams() {