Skip to content

Commit 6815b5c

Browse files
wt0530githubgxll
authored andcommitted
[fix][dingo-calcite] Fix date_format to support timestamp type and repair date function
1 parent acb50da commit 6815b5c

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

dingo-calcite/src/main/java/io/dingodb/calcite/fun/DingoOperatorTable.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ private void init() {
255255
// Because if there are any optional operands, casting is disabled.
256256
OperandTypes.or(
257257
family(SqlTypeFamily.DATE, SqlTypeFamily.STRING),
258+
family(SqlTypeFamily.TIMESTAMP, SqlTypeFamily.STRING),
258259
OperandTypes.DATE
259260
),
260261
SqlFunctionCategory.STRING

dingo-common/src/main/java/io/dingodb/common/type/converter/DataConverter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.dingodb.common.log.LogUtils;
2020
import io.dingodb.common.type.DingoType;
2121
import io.dingodb.expr.common.type.Type;
22+
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2223
import org.checkerframework.checker.nullness.qual.NonNull;
2324

2425
import java.math.BigDecimal;
@@ -192,6 +193,8 @@ default Date convertDateFrom(@NonNull Object value) {
192193
return new Date(localDateTime.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli());
193194
} else if (value instanceof Date) {
194195
return (Date) value;
196+
} else if (value instanceof String) {
197+
return DateTimeUtils.parseDate((String) value);
195198
} else {
196199
return new Date(System.currentTimeMillis());
197200
}
@@ -206,6 +209,8 @@ default Time convertTimeFrom(@NonNull Object value) {
206209
} else if (value instanceof Timestamp) {
207210
Timestamp timestamp = (Timestamp) value;
208211
return new Time(timestamp.getTime());
212+
} else if (value instanceof String) {
213+
return DateTimeUtils.parseTime((String) value);
209214
} else {
210215
return new Time(System.currentTimeMillis());
211216
}
@@ -217,6 +222,8 @@ default Timestamp convertTimestampFrom(@NonNull Object value) {
217222
} else if (value instanceof Date) {
218223
Date date = (Date) value;
219224
return new Timestamp(date.getTime());
225+
} else if (value instanceof String) {
226+
return DateTimeUtils.parseTimestamp((String) value);
220227
} else {
221228
return new Timestamp(System.currentTimeMillis());
222229
}

dingo-exec/src/main/java/io/dingodb/exec/fun/DateFun.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.dingodb.expr.runtime.op.UnaryOp;
2323

2424
import java.io.Serial;
25-
import java.sql.Date;
2625
import java.sql.Timestamp;
2726
import java.time.DateTimeException;
2827
import java.time.LocalDate;
@@ -35,6 +34,7 @@
3534
import java.time.format.DateTimeParseException;
3635
import java.time.temporal.TemporalAccessor;
3736
import java.util.ArrayList;
37+
import java.util.Date;
3838
import java.util.List;
3939
import java.util.Locale;
4040
import java.util.regex.Matcher;
@@ -142,7 +142,7 @@ private static String handleTimestamp(Timestamp timestamp) {
142142
}
143143

144144
private static String handleLegacyDate(Date date) {
145-
return date.toInstant()
145+
return new java.util.Date(date.getTime()).toInstant()
146146
.atZone(SERVER_ZONE)
147147
.toLocalDate()
148148
.toString();

0 commit comments

Comments
 (0)