From e88e3813025748c05dc61321b7d3424a2238894f Mon Sep 17 00:00:00 2001 From: ylhh353 <41932386+ylhh353@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:13:01 +0800 Subject: [PATCH] An error occurs when the time expression contains keywords (#1527) --- .../core/utils/SysTimeDimensionBuilder.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java index 53a50d7b9..0ac9b99a3 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SysTimeDimensionBuilder.java @@ -8,6 +8,8 @@ import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptor; import lombok.extern.slf4j.Slf4j; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * generate system time dimension tools @@ -15,6 +17,11 @@ import java.util.List; @Slf4j public class SysTimeDimensionBuilder { + // Defines the regular expression pattern for the time keyword + private static final Pattern TIME_KEYWORD_PATTERN = + Pattern.compile("\\b(DATE|TIME|TIMESTAMP|YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)\\b", + Pattern.CASE_INSENSITIVE); + public static void addSysTimeDimension(List dims, DbAdaptor engineAdaptor) { log.debug("addSysTimeDimension before:{}, engineAdaptor:{}", dims, engineAdaptor); Dim timeDim = getTimeDim(dims); @@ -65,10 +72,22 @@ public class SysTimeDimensionBuilder { return dim; } + private static boolean containsTimeKeyword(String fieldName) { + Matcher matcher = TIME_KEYWORD_PATTERN.matcher(fieldName); + return matcher.find(); + } + + // Check whether the time field contains keywords,Generation time expression private static String generateTimeExpr(Dim timeDim, String dateType, DbAdaptor engineAdaptor) { String bizName = timeDim.getBizName(); String dateFormat = timeDim.getDateFormat(); - return engineAdaptor.getDateFormat(dateType, dateFormat, bizName); + if (containsTimeKeyword(bizName)) { + String bizNameWithBackticks = String.format("`%s`", bizName); + return engineAdaptor.getDateFormat(dateType, dateFormat, bizNameWithBackticks); + } else { + return engineAdaptor.getDateFormat(dateType, dateFormat, bizName); + } + } private static Dim getTimeDim(List timeDims) {