(fix)(chat)Fix WhereCorrector's handling of time dimensions of weeks and months (#372)

This commit is contained in:
yangde
2023-11-13 21:06:49 +08:00
committed by GitHub
parent 551a376b00
commit 805abeb261
2 changed files with 17 additions and 1 deletions

View File

@@ -70,7 +70,7 @@ public class WhereCorrector extends BaseSemanticCorrector {
private void addDateIfNotExist(SemanticParseInfo semanticParseInfo) { private void addDateIfNotExist(SemanticParseInfo semanticParseInfo) {
String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL(); String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL();
List<String> whereFields = SqlParserSelectHelper.getWhereFields(correctS2SQL); List<String> whereFields = SqlParserSelectHelper.getWhereFields(correctS2SQL);
if (CollectionUtils.isEmpty(whereFields) || !whereFields.contains(TimeDimensionEnum.DAY.getChName())) { if (CollectionUtils.isEmpty(whereFields) || !TimeDimensionEnum.containsZhTimeDimension(whereFields)) {
String currentDate = S2SQLDateHelper.getReferenceDate(semanticParseInfo.getModelId()); String currentDate = S2SQLDateHelper.getReferenceDate(semanticParseInfo.getModelId());
if (StringUtils.isNotBlank(currentDate)) { if (StringUtils.isNotBlank(currentDate)) {
correctS2SQL = SqlParserAddHelper.addParenthesisToWhere(correctS2SQL); correctS2SQL = SqlParserAddHelper.addParenthesisToWhere(correctS2SQL);

View File

@@ -1,5 +1,7 @@
package com.tencent.supersonic.common.pojo.enums; package com.tencent.supersonic.common.pojo.enums;
import cn.hutool.core.collection.CollectionUtil;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -37,4 +39,18 @@ public enum TimeDimensionEnum {
public String getChName() { public String getChName() {
return chName; return chName;
} }
/**
* Determine if a time dimension field is included in a Chinese text field
* @param fields field
* @return true/fase
*/
public static boolean containsZhTimeDimension(List<String> fields) {
if (CollectionUtil.isEmpty(fields)) {
return false;
}
return fields.contains(TimeDimensionEnum.DAY.getChName())
|| fields.contains(TimeDimensionEnum.WEEK.getChName())
|| fields.contains(TimeDimensionEnum.MONTH.getChName());
}
} }