| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package org.elasticsearch.dsl.parser.helper;
- import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
- import org.elasticsearch.dsl.exception.ElasticSql2DslException;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.regex.Pattern;
- public class ElasticSqlDateParseHelper {
- public static final String DEFAULT_ES_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
- public static final Pattern SQL_DATE_REGEX_PATTERN_01 = Pattern.compile("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
- public static final Pattern SQL_DATE_REGEX_PATTERN_02 = Pattern.compile("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}");
- public static final Pattern SQL_DATE_REGEX_PATTERN_03 = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
- private enum SqlDateRegex {
- DATE_REGEX_01 {
- @Override
- Pattern getPattern() {
- return SQL_DATE_REGEX_PATTERN_01;
- }
- @Override
- String getPatternString() {
- return "yyyy-MM-dd HH:mm:ss";
- }
- },
- DATE_REGEX_02 {
- @Override
- Pattern getPattern() {
- return SQL_DATE_REGEX_PATTERN_02;
- }
- @Override
- String getPatternString() {
- return "yyyy-MM-dd HH:mm";
- }
- },
- DATE_REGEX_03 {
- @Override
- Pattern getPattern() {
- return SQL_DATE_REGEX_PATTERN_03;
- }
- @Override
- String getPatternString() {
- return "yyyy-MM-dd";
- }
- };
- abstract Pattern getPattern();
- abstract String getPatternString();
- }
- public static boolean isDateMethod(SQLMethodInvokeExpr dateMethodExpr) {
- return ElasticSqlMethodInvokeHelper.DATE_METHOD.equalsIgnoreCase(dateMethodExpr.getMethodName());
- }
- public static boolean isDateArgStringValue(String date) {
- return SqlDateRegex.DATE_REGEX_01.getPattern().matcher(date).matches()
- || SqlDateRegex.DATE_REGEX_02.getPattern().matcher(date).matches()
- || SqlDateRegex.DATE_REGEX_03.getPattern().matcher(date).matches();
- }
- public static boolean isDateArgObjectValue(Object date) {
- if (date instanceof Date) {
- return true;
- }
- return false;
- }
- public static String formatDefaultEsDateStringValue(String date) {
- if (SqlDateRegex.DATE_REGEX_01.getPattern().matcher(date).matches()) {
- return formatDefaultEsDate(SqlDateRegex.DATE_REGEX_01.getPatternString(), date);
- }
- if (SqlDateRegex.DATE_REGEX_02.getPattern().matcher(date).matches()) {
- return formatDefaultEsDate(SqlDateRegex.DATE_REGEX_02.getPatternString(), date);
- }
- if (SqlDateRegex.DATE_REGEX_03.getPattern().matcher(date).matches()) {
- return formatDefaultEsDate(SqlDateRegex.DATE_REGEX_03.getPatternString(), date);
- }
- throw new ElasticSql2DslException("[syntax error] Sql cannot support such date type: " + date);
- }
- public static String formatDefaultEsDateObjectValue(Object date) {
- if (date instanceof Date) {
- SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_ES_DATE_FORMAT);
- return dateFormat.format(date);
- }
- throw new ElasticSql2DslException("[syntax error] Sql cannot support such date type: " + date.getClass());
- }
- public static String formatDefaultEsDate(String patternArg, String timeValArg) {
- try {
- SimpleDateFormat dateFormat = new SimpleDateFormat(patternArg);
- Date date = dateFormat.parse(timeValArg);
- dateFormat = new SimpleDateFormat(DEFAULT_ES_DATE_FORMAT);
- return dateFormat.format(date);
- } catch (ParseException pex) {
- throw new ElasticSql2DslException("[syntax error] Parse time arg error: " + timeValArg);
- }
- }
- }
|