Skip to content

Commit 9626e05

Browse files
wt0530githubgxll
authored andcommitted
[fix][runtime] Fix datetime extraction null failure
1 parent e4f326d commit 9626e05

File tree

10 files changed

+56
-0
lines changed

10 files changed

+56
-0
lines changed

runtime/src/main/java/io/dingodb/expr/runtime/op/date/DayFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Timestamp;
@@ -49,6 +50,10 @@ static int extractDay(String value, @NonNull ExprConfig config) {
4950
return DateTimeUtils.extractDay(date);
5051
}
5152

53+
static @Nullable Object extractDay(Void value, @NonNull ExprConfig config) {
54+
return null;
55+
}
56+
5257
@Override
5358
public @NonNull String getName() {
5459
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/HourFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Time;
@@ -55,6 +56,10 @@ static int extractHour(String value, @NonNull ExprConfig config) {
5556
return DateTimeUtils.extractHour(time);
5657
}
5758

59+
static @Nullable Object extractHour(Void value, @NonNull ExprConfig config) {
60+
return null;
61+
}
62+
5863
@Override
5964
public @NonNull String getName() {
6065
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/MillisecondFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Timestamp;
@@ -39,6 +40,10 @@ static int extractMillisecond(@NonNull Timestamp value, ExprConfig config) {
3940
return TimestampUtils.extractMinuteSecond(value);
4041
}
4142

43+
static @Nullable Object extractMillisecond(Void value, @NonNull ExprConfig config) {
44+
return null;
45+
}
46+
4247
@Override
4348
public @NonNull String getName() {
4449
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/MinuteFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Time;
@@ -52,6 +53,10 @@ static int extractMinute(String value, @NonNull ExprConfig config) {
5253
return DateTimeUtils.extractMinute(time);
5354
}
5455

56+
static @Nullable Object extractMinute(Void value, @NonNull ExprConfig config) {
57+
return null;
58+
}
59+
5560
@Override
5661
public @NonNull String getName() {
5762
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/MonthFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Timestamp;
@@ -48,6 +49,10 @@ static int extractMonth(String value, @NonNull ExprConfig config) {
4849
return DateTimeUtils.extractMonth(date);
4950
}
5051

52+
static @Nullable Object extractMonth(Void value, @NonNull ExprConfig config) {
53+
return null;
54+
}
55+
5156
@Override
5257
public @NonNull String getName() {
5358
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/QuarterFun.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.io.Serial;
2728
import java.sql.Date;
@@ -41,6 +42,18 @@ static int extractQuarter(@NonNull Timestamp value, ExprConfig config) {
4142
return TimestampUtils.extractQuarter(value);
4243
}
4344

45+
static int extractQuarter(String value, @NonNull ExprConfig config) {
46+
Date date = DateTimeUtils.parseDate(value, config.getParseDateAndTimestampFormatters());
47+
if (date == null) {
48+
return 0;
49+
}
50+
return DateTimeUtils.extractQuarter(date);
51+
}
52+
53+
static @Nullable Object extractQuarter(Void value, @NonNull ExprConfig config) {
54+
return null;
55+
}
56+
4457
@Override
4558
public @NonNull String getName() {
4659
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/SecondFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Time;
@@ -52,6 +53,10 @@ static int extractSecond(String value, @NonNull ExprConfig config) {
5253
return DateTimeUtils.extractSecond(time);
5354
}
5455

56+
static @Nullable Object extractSecond(Void value, @NonNull ExprConfig config) {
57+
return null;
58+
}
59+
5560
@Override
5661
public @NonNull String getName() {
5762
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/WeekFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Timestamp;
@@ -48,6 +49,10 @@ static int extractWeek(String value, @NonNull ExprConfig config) {
4849
return DateTimeUtils.extractWeek(date);
4950
}
5051

52+
static @Nullable Object extractWeek(Void value, @NonNull ExprConfig config) {
53+
return null;
54+
}
55+
5156
@Override
5257
public @NonNull String getName() {
5358
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/date/YearFun.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.dingodb.expr.runtime.utils.DateTimeUtils;
2323
import io.dingodb.expr.runtime.utils.TimestampUtils;
2424
import org.checkerframework.checker.nullness.qual.NonNull;
25+
import org.checkerframework.checker.nullness.qual.Nullable;
2526

2627
import java.sql.Date;
2728
import java.sql.Timestamp;
@@ -47,6 +48,10 @@ static int extractYear(String value, @NonNull ExprConfig config) {
4748
return DateTimeUtils.extractYear(date);
4849
}
4950

51+
static @Nullable Object extractYear(Void value, @NonNull ExprConfig config) {
52+
return null;
53+
}
54+
5055
@Override
5156
public @NonNull String getName() {
5257
return NAME;

runtime/src/main/java/io/dingodb/expr/runtime/op/special/IfNullFun.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ static Timestamp ifNull(Timestamp value0, Timestamp value1) {
7676
}
7777

7878
static Object ifNull(Object value0, Object value1) {
79+
if (value0 instanceof Float && (value1 instanceof Double || value1 instanceof BigDecimal)) {
80+
return new BigDecimal(value0.toString()).doubleValue();
81+
}
7982
return value0 == null ? value1 : value0;
8083
}
8184

0 commit comments

Comments
 (0)