From 76cc5ee1117a424767598c09458d6bbfd315a76c Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Fri, 27 Jun 2025 19:46:00 +0800 Subject: [PATCH] [opt][heaadless]Add user field to QueryStatement for consistency. --- .../supersonic/headless/core/pojo/QueryStatement.java | 2 ++ .../server/facade/service/impl/S2SemanticLayerService.java | 3 +++ .../headless/server/utils/ChatWorkflowEngine.java | 5 +++-- .../tencent/supersonic/headless/server/utils/DictUtils.java | 6 +++--- .../supersonic/headless/server/utils/QueryUtils.java | 3 ++- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java index 83ac4fbf9..9381cac43 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java @@ -1,5 +1,6 @@ package com.tencent.supersonic.headless.core.pojo; +import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import lombok.Data; @@ -24,6 +25,7 @@ public class QueryStatement { private SemanticSchemaResp semanticSchema; private Integer limit = 1000; private Boolean isTranslated = false; + private User user; public boolean isOk() { return StringUtils.isBlank(errMsg) && StringUtils.isNotBlank(sql); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java index c9739bf99..3d3969cb8 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java @@ -296,6 +296,9 @@ public class S2SemanticLayerService implements SemanticLayerService { queryStatement.setSql(semanticQueryReq.getSqlInfo().getQuerySQL()); queryStatement.setIsTranslated(true); } + if (queryStatement != null) { + queryStatement.setUser(user); + } return queryStatement; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java index 044fff206..05b1d582a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java @@ -178,8 +178,9 @@ public class ChatWorkflowEngine { // 如果物理SQL被修正了,更新querySQL为修正后的版本 SemanticParseInfo parseInfo = semanticQuery.getParseInfo(); if (StringUtils.isNotBlank(parseInfo.getSqlInfo().getCorrectedQuerySQL())) { - parseInfo.getSqlInfo().setQuerySQL(parseInfo.getSqlInfo().getCorrectedQuerySQL()); - log.info("Physical SQL corrected and updated querySQL: {}", + parseInfo.getSqlInfo() + .setQuerySQL(parseInfo.getSqlInfo().getCorrectedQuerySQL()); + log.info("Physical SQL corrected and updated querySQL: {}", parseInfo.getSqlInfo().getQuerySQL()); } break; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java index f11a83bb4..59713f940 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java @@ -274,7 +274,8 @@ public class DictUtils { private QuerySqlReq constructQuerySqlReq(DictItemResp dictItemResp) { ModelResp model = modelService.getModel(dictItemResp.getModelId()); - String tableStr = model.getModelDetail().getTableQuery() != null ? model.getModelDetail().getTableQuery() + String tableStr = model.getModelDetail().getTableQuery() != null + ? model.getModelDetail().getTableQuery() : "(" + model.getModelDetail().getSqlQuery() + ")"; String sqlPattern = "select %s,count(1) from %s %s group by %s order by count(1) desc limit %d"; @@ -289,8 +290,7 @@ public class DictUtils { limit = Integer.MAX_VALUE; } - String sql = - String.format(sqlPattern, dimBizName, tableStr, where, dimBizName, limit); + String sql = String.format(sqlPattern, dimBizName, tableStr, where, dimBizName, limit); Set modelIds = new HashSet<>(); modelIds.add(dictItemResp.getModelId()); QuerySqlReq querySqlReq = new QuerySqlReq(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java index e6b89a7fd..83300a5f6 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java @@ -109,7 +109,8 @@ public class QueryUtils { column.setModelId(metric.getModelId()); } // if column nameEn contains metric alias, use metric dataFormatType - if (column.getDataFormatType() == null && StringUtils.isNotEmpty(metric.getAlias())) { + if (column.getDataFormatType() == null + && StringUtils.isNotEmpty(metric.getAlias())) { for (String alias : metric.getAlias().split(",")) { if (nameEn.contains(alias)) { column.setDataFormatType(metric.getDataFormatType());