Skip to content

Commit 7a120db

Browse files
committed
Support following datetime casts in v2:
date str -> timestamp timestamp str -> date timestamp str -> time Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 21fd14c commit 7a120db

3 files changed

Lines changed: 9 additions & 14 deletions

File tree

core/src/main/java/org/opensearch/sql/data/model/ExprDateValue.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,15 @@
55

66
package org.opensearch.sql.data.model;
77

8-
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL;
9-
108
import com.google.common.base.Objects;
119
import java.time.Instant;
1210
import java.time.LocalDate;
1311
import java.time.LocalTime;
1412
import java.time.ZoneOffset;
1513
import java.time.ZonedDateTime;
1614
import java.time.format.DateTimeFormatter;
17-
import java.time.format.DateTimeParseException;
1815
import lombok.RequiredArgsConstructor;
16+
import org.opensearch.sql.calcite.utils.datetime.DateTimeParser;
1917
import org.opensearch.sql.data.type.ExprCoreType;
2018
import org.opensearch.sql.data.type.ExprType;
2119
import org.opensearch.sql.exception.SemanticCheckException;
@@ -29,8 +27,8 @@ public class ExprDateValue extends AbstractExprValue {
2927
/** Constructor of ExprDateValue. */
3028
public ExprDateValue(String date) {
3129
try {
32-
this.date = LocalDate.parse(date, DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL);
33-
} catch (DateTimeParseException e) {
30+
this.date = DateTimeParser.parseDateOrTimestamp(date).toLocalDate();
31+
} catch (SemanticCheckException e) {
3432
throw new SemanticCheckException(
3533
String.format("date:%s in unsupported format, please use 'yyyy-MM-dd'", date));
3634
}

core/src/main/java/org/opensearch/sql/data/model/ExprTimeValue.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@
66
package org.opensearch.sql.data.model;
77

88
import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
9-
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL;
109

1110
import java.time.Instant;
1211
import java.time.LocalDate;
1312
import java.time.LocalTime;
1413
import java.time.ZoneOffset;
1514
import java.time.ZonedDateTime;
16-
import java.time.format.DateTimeParseException;
1715
import java.util.Objects;
1816
import lombok.RequiredArgsConstructor;
17+
import org.opensearch.sql.calcite.utils.datetime.DateTimeParser;
1918
import org.opensearch.sql.data.type.ExprCoreType;
2019
import org.opensearch.sql.data.type.ExprType;
2120
import org.opensearch.sql.exception.SemanticCheckException;
@@ -30,8 +29,8 @@ public class ExprTimeValue extends AbstractExprValue {
3029
/** Constructor of ExprTimeValue. */
3130
public ExprTimeValue(String time) {
3231
try {
33-
this.time = LocalTime.parse(time, DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL);
34-
} catch (DateTimeParseException e) {
32+
this.time = DateTimeParser.parseTimeOrTimestamp(time).toLocalTime();
33+
} catch (SemanticCheckException e) {
3534
throw new SemanticCheckException(
3635
String.format("time:%s in unsupported format, please use 'HH:mm:ss[.SSSSSSSSS]'", time));
3736
}

core/src/main/java/org/opensearch/sql/data/model/ExprTimestampValue.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import java.time.LocalDateTime;
1414
import java.time.LocalTime;
1515
import java.time.ZoneOffset;
16-
import java.time.format.DateTimeParseException;
1716
import java.time.temporal.ChronoUnit;
1817
import java.util.Objects;
1918
import lombok.RequiredArgsConstructor;
19+
import org.opensearch.sql.calcite.utils.datetime.DateTimeParser;
2020
import org.opensearch.sql.data.type.ExprCoreType;
2121
import org.opensearch.sql.data.type.ExprType;
2222
import org.opensearch.sql.exception.SemanticCheckException;
@@ -31,10 +31,8 @@ public class ExprTimestampValue extends AbstractExprValue {
3131
public ExprTimestampValue(String timestamp) {
3232
try {
3333
this.timestamp =
34-
LocalDateTime.parse(timestamp, DATE_TIME_FORMATTER_VARIABLE_NANOS)
35-
.atZone(ZoneOffset.UTC)
36-
.toInstant();
37-
} catch (DateTimeParseException e) {
34+
DateTimeParser.parseDateOrTimestamp(timestamp).atZone(ZoneOffset.UTC).toInstant();
35+
} catch (SemanticCheckException e) {
3836
throw new SemanticCheckException(
3937
String.format(
4038
"timestamp:%s in unsupported format, please use 'yyyy-MM-dd HH:mm:ss[.SSSSSSSSS]'",

0 commit comments

Comments
 (0)