Skip to content

Commit a6b4f48

Browse files
Minor clean up of datetime and other classes (#198)
Signed-off-by: MitchellGale-BitQuill <[email protected]> Signed-off-by: Yury-Fridlyand <[email protected]> Co-authored-by: Yury-Fridlyand <[email protected]>
1 parent 9d4a841 commit a6b4f48

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1473
-2975
lines changed

core/src/main/java/org/opensearch/sql/ast/statement/Explain.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
package org.opensearch.sql.ast.statement;
1010

1111
import lombok.Data;
12+
import lombok.EqualsAndHashCode;
1213
import org.opensearch.sql.ast.AbstractNodeVisitor;
1314

1415
/**
1516
* Explain Statement.
1617
*/
1718
@Data
19+
@EqualsAndHashCode(callSuper = false)
1820
public class Explain extends Statement {
1921

2022
private final Statement statement;

core/src/main/java/org/opensearch/sql/ast/tree/Limit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@RequiredArgsConstructor
1818
@Getter
1919
@ToString
20-
@EqualsAndHashCode
20+
@EqualsAndHashCode(callSuper = false)
2121
public class Limit extends UnresolvedPlan {
2222
private UnresolvedPlan child;
2323
private final Integer limit;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package org.opensearch.sql.data.model;
88

99
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL;
10+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
1011

1112
import com.google.common.base.Objects;
1213
import java.time.Instant;
@@ -68,7 +69,7 @@ public LocalDateTime datetimeValue() {
6869

6970
@Override
7071
public Instant timestampValue() {
71-
return ZonedDateTime.of(date, timeValue(), ExprTimestampValue.ZONE).toInstant();
72+
return ZonedDateTime.of(date, timeValue(), UTC_ZONE_ID).toInstant();
7273
}
7374

7475
@Override

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

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,34 @@
66

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

9+
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_WITH_TZ;
10+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
11+
912
import com.google.common.base.Objects;
1013
import java.time.Instant;
1114
import java.time.LocalDate;
1215
import java.time.LocalDateTime;
1316
import java.time.LocalTime;
1417
import java.time.ZonedDateTime;
1518
import java.time.format.DateTimeFormatter;
16-
import java.time.format.DateTimeFormatterBuilder;
1719
import java.time.format.DateTimeParseException;
18-
import java.time.temporal.ChronoField;
1920
import java.time.temporal.ChronoUnit;
2021
import lombok.RequiredArgsConstructor;
2122
import org.opensearch.sql.data.type.ExprCoreType;
2223
import org.opensearch.sql.data.type.ExprType;
2324
import org.opensearch.sql.exception.SemanticCheckException;
2425

26+
2527
@RequiredArgsConstructor
2628
public class ExprDatetimeValue extends AbstractExprValue {
2729
private final LocalDateTime datetime;
2830

29-
private static final DateTimeFormatter FORMATTER_VARIABLE_NANOS;
30-
private static final int MIN_FRACTION_SECONDS = 0;
31-
private static final int MAX_FRACTION_SECONDS = 9;
32-
33-
static {
34-
FORMATTER_VARIABLE_NANOS = new DateTimeFormatterBuilder()
35-
.appendPattern("uuuu-MM-dd HH:mm:ss[xxx]")
36-
.appendFraction(
37-
ChronoField.NANO_OF_SECOND,
38-
MIN_FRACTION_SECONDS,
39-
MAX_FRACTION_SECONDS,
40-
true)
41-
.toFormatter();
42-
}
43-
4431
/**
4532
* Constructor with datetime string as input.
4633
*/
4734
public ExprDatetimeValue(String datetime) {
4835
try {
49-
this.datetime = LocalDateTime.parse(datetime, FORMATTER_VARIABLE_NANOS);
36+
this.datetime = LocalDateTime.parse(datetime, DATE_TIME_FORMATTER_WITH_TZ);
5037
} catch (DateTimeParseException e) {
5138
throw new SemanticCheckException(String.format("datetime:%s in unsupported format, please "
5239
+ "use yyyy-MM-dd HH:mm:ss[.SSSSSSSSS]", datetime));
@@ -70,7 +57,7 @@ public LocalTime timeValue() {
7057

7158
@Override
7259
public Instant timestampValue() {
73-
return ZonedDateTime.of(datetime, ExprTimestampValue.ZONE).toInstant();
60+
return ZonedDateTime.of(datetime, UTC_ZONE_ID).toInstant();
7461
}
7562

7663
@Override

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
1010
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_VARIABLE_NANOS_OPTIONAL;
11+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
1112

1213
import java.time.Instant;
1314
import java.time.LocalDate;
@@ -66,7 +67,7 @@ public LocalDateTime datetimeValue(FunctionProperties functionProperties) {
6667
}
6768

6869
public Instant timestampValue(FunctionProperties functionProperties) {
69-
return ZonedDateTime.of(dateValue(functionProperties), timeValue(), ExprTimestampValue.ZONE)
70+
return ZonedDateTime.of(dateValue(functionProperties), timeValue(), UTC_ZONE_ID)
7071
.toInstant();
7172
}
7273

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

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_VARIABLE_NANOS;
1010
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_WITHOUT_NANO;
11+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
1112

1213
import java.time.Instant;
1314
import java.time.LocalDate;
1415
import java.time.LocalDateTime;
1516
import java.time.LocalTime;
16-
import java.time.ZoneId;
1717
import java.time.format.DateTimeParseException;
1818
import java.time.temporal.ChronoUnit;
1919
import java.util.Objects;
@@ -27,10 +27,6 @@
2727
*/
2828
@RequiredArgsConstructor
2929
public class ExprTimestampValue extends AbstractExprValue {
30-
/**
31-
* todo. only support UTC now.
32-
*/
33-
public static final ZoneId ZONE = ZoneId.of("UTC");
3430

3531
private final Instant timestamp;
3632

@@ -40,7 +36,7 @@ public class ExprTimestampValue extends AbstractExprValue {
4036
public ExprTimestampValue(String timestamp) {
4137
try {
4238
this.timestamp = LocalDateTime.parse(timestamp, DATE_TIME_FORMATTER_VARIABLE_NANOS)
43-
.atZone(ZONE)
39+
.atZone(UTC_ZONE_ID)
4440
.toInstant();
4541
} catch (DateTimeParseException e) {
4642
throw new SemanticCheckException(String.format("timestamp:%s in unsupported format, please "
@@ -51,9 +47,9 @@ public ExprTimestampValue(String timestamp) {
5147

5248
@Override
5349
public String value() {
54-
return timestamp.getNano() == 0 ? DATE_TIME_FORMATTER_WITHOUT_NANO.withZone(ZONE)
50+
return timestamp.getNano() == 0 ? DATE_TIME_FORMATTER_WITHOUT_NANO.withZone(UTC_ZONE_ID)
5551
.format(timestamp.truncatedTo(ChronoUnit.SECONDS))
56-
: DATE_TIME_FORMATTER_VARIABLE_NANOS.withZone(ZONE).format(timestamp);
52+
: DATE_TIME_FORMATTER_VARIABLE_NANOS.withZone(UTC_ZONE_ID).format(timestamp);
5753
}
5854

5955
@Override
@@ -68,17 +64,17 @@ public Instant timestampValue() {
6864

6965
@Override
7066
public LocalDate dateValue() {
71-
return timestamp.atZone(ZONE).toLocalDate();
67+
return timestamp.atZone(UTC_ZONE_ID).toLocalDate();
7268
}
7369

7470
@Override
7571
public LocalTime timeValue() {
76-
return timestamp.atZone(ZONE).toLocalTime();
72+
return timestamp.atZone(UTC_ZONE_ID).toLocalTime();
7773
}
7874

7975
@Override
8076
public LocalDateTime datetimeValue() {
81-
return timestamp.atZone(ZONE).toLocalDateTime();
77+
return timestamp.atZone(UTC_ZONE_ID).toLocalDateTime();
8278
}
8379

8480
@Override
@@ -88,12 +84,12 @@ public String toString() {
8884

8985
@Override
9086
public int compare(ExprValue other) {
91-
return timestamp.compareTo(other.timestampValue().atZone(ZONE).toInstant());
87+
return timestamp.compareTo(other.timestampValue().atZone(UTC_ZONE_ID).toInstant());
9288
}
9389

9490
@Override
9591
public boolean equal(ExprValue other) {
96-
return timestamp.equals(other.timestampValue().atZone(ZONE).toInstant());
92+
return timestamp.equals(other.timestampValue().atZone(UTC_ZONE_ID).toInstant());
9793
}
9894

9995
@Override

core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_LONG_YEAR;
3232
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_SHORT_YEAR;
3333
import static org.opensearch.sql.utils.DateTimeFormatters.DATE_TIME_FORMATTER_STRICT_WITH_TZ;
34+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
3435
import static org.opensearch.sql.utils.DateTimeUtils.extractDate;
3536
import static org.opensearch.sql.utils.DateTimeUtils.extractDateTime;
3637

@@ -111,6 +112,7 @@ public void register(BuiltinFunctionRepository repository) {
111112
repository.register(datediff());
112113
repository.register(datetime());
113114
repository.register(date_add());
115+
repository.register(date_format());
114116
repository.register(date_sub());
115117
repository.register(day());
116118
repository.register(dayName());
@@ -148,11 +150,10 @@ public void register(BuiltinFunctionRepository repository) {
148150
repository.register(time_to_sec());
149151
repository.register(timediff());
150152
repository.register(timestamp());
153+
repository.register(to_days());
151154
repository.register(utc_date());
152155
repository.register(utc_time());
153156
repository.register(utc_timestamp());
154-
repository.register(date_format());
155-
repository.register(to_days());
156157
repository.register(unix_timestamp());
157158
repository.register(week(BuiltinFunctionName.WEEK));
158159
repository.register(week(BuiltinFunctionName.WEEK_OF_YEAR));
@@ -962,7 +963,6 @@ private ExprValue exprConvertTZ(ExprValue startingDateTime, ExprValue fromTz, Ex
962963
return new ExprDatetimeValue(
963964
zonedDateTime.withZoneSameInstant(convertedToTz).toLocalDateTime());
964965

965-
966966
// Catches exception for invalid timezones.
967967
// ex. "+0:00" is an invalid timezone and would result in this exception being thrown.
968968
} catch (ExpressionEvaluationException | DateTimeException e) {
@@ -1010,7 +1010,6 @@ private ExprValue exprDateDiff(FunctionProperties functionProperties,
10101010
private ExprValue exprDateTime(ExprValue dateTime, ExprValue timeZone) {
10111011
String defaultTimeZone = TimeZone.getDefault().getID();
10121012

1013-
10141013
try {
10151014
LocalDateTime ldtFormatted =
10161015
LocalDateTime.parse(dateTime.stringValue(), DATE_TIME_FORMATTER_STRICT_WITH_TZ);
@@ -1124,7 +1123,7 @@ private ExprValue exprFromUnixTime(ExprValue time) {
11241123
private LocalDateTime exprFromUnixTimeImpl(ExprValue time) {
11251124
return LocalDateTime.ofInstant(
11261125
Instant.ofEpochSecond((long)Math.floor(time.doubleValue())),
1127-
ZoneId.of("UTC"))
1126+
UTC_ZONE_ID)
11281127
.withNano((int)((time.doubleValue() % 1) * 1E9));
11291128
}
11301129

@@ -1439,7 +1438,7 @@ private ExprValue exprUtcTime(FunctionProperties functionProperties) {
14391438
*/
14401439
private ExprValue exprUtcTimeStamp(FunctionProperties functionProperties) {
14411440
var zdt = ZonedDateTime.now(functionProperties.getQueryStartClock())
1442-
.withZoneSameInstant(ZoneId.of("UTC"));
1441+
.withZoneSameInstant(UTC_ZONE_ID);
14431442
return new ExprDatetimeValue(zdt.toLocalDateTime());
14441443
}
14451444

0 commit comments

Comments
 (0)