This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 18f2db6064 [feature](nereids) let minValue and maxValue in stats support for Date, CHAR and VARCHAR type (#13311) 18f2db6064 is described below commit 18f2db6064157143921de9b470eb4fb562096332 Author: minghong <minghong.z...@163.com> AuthorDate: Tue Oct 18 12:12:33 2022 +0800 [feature](nereids) let minValue and maxValue in stats support for Date, CHAR and VARCHAR type (#13311) 1. enable varchar/char type set min/max value. take first 8 chars as long, and convert to double. 2. fix bug when set min/max value for date and datav2 --- .../java/org/apache/doris/statistics/ColumnStat.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java index a8ed00b031..4b9f0e292b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStat.java @@ -34,6 +34,7 @@ import org.apache.doris.common.util.Util; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -259,18 +260,17 @@ public class ColumnStat { return Double.parseDouble(columnValue); case DATE: case DATEV2: - DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - return LocalDateTime - .parse(columnValue, timeFormatter) + return LocalDate.parse(columnValue).atStartOfDay() .atZone(ZoneId.systemDefault()).toInstant().getEpochSecond(); case DATETIMEV2: case DATETIME: - timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); return LocalDateTime .parse(columnValue, timeFormatter) .atZone(ZoneId.systemDefault()).toInstant().getEpochSecond(); case CHAR: case VARCHAR: + return convertStringToDouble(columnValue); case HLL: case BITMAP: case ARRAY: @@ -285,6 +285,17 @@ public class ColumnStat { } + private double convertStringToDouble(String s) { + long v = 0; + int pos = 0; + int len = Math.min(s.length(), 8); + while (pos < len) { + v += ((long) s.charAt(pos)) << ((7 - pos) * 8); + pos++; + } + return (double) v; + } + public ColumnStat copy() { return new ColumnStat(this); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org