Skip to content

Commit 30ac276

Browse files
Minor clean up of datetime and other classes (#198) (opensearch-project#1310) (opensearch-project#1567)
* Minor clean up of datetime and other classes (#198) --------- Signed-off-by: MitchellGale-BitQuill <[email protected]> Signed-off-by: Yury-Fridlyand <[email protected]> (cherry picked from commit bc29a8a) Co-authored-by: Yury-Fridlyand <[email protected]>
1 parent aa5b3e0 commit 30ac276

Some content is hidden

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

45 files changed

+1466
-2813
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
@@ -93,12 +89,12 @@ public String toString() {
9389

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

9995
@Override
10096
public boolean equal(ExprValue other) {
101-
return timestamp.equals(other.timestampValue().atZone(ZONE).toInstant());
97+
return timestamp.equals(other.timestampValue().atZone(UTC_ZONE_ID).toInstant());
10298
}
10399

104100
@Override

core/src/main/java/org/opensearch/sql/expression/DSL.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,6 @@ public static FunctionExpression to_seconds(Expression... expressions) {
501501
return to_seconds(FunctionProperties.None, expressions);
502502
}
503503

504-
505504
public static FunctionExpression week(
506505
FunctionProperties functionProperties, Expression... expressions) {
507506
return compile(functionProperties, BuiltinFunctionName.WEEK, expressions);

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import static org.opensearch.sql.utils.DateTimeFormatters.SHORT_DATE_LENGTH;
4444
import static org.opensearch.sql.utils.DateTimeFormatters.SINGLE_DIGIT_MONTH_DATE_LENGTH;
4545
import static org.opensearch.sql.utils.DateTimeFormatters.SINGLE_DIGIT_YEAR_DATE_LENGTH;
46+
import static org.opensearch.sql.utils.DateTimeUtils.UTC_ZONE_ID;
4647
import static org.opensearch.sql.utils.DateTimeUtils.extractDate;
4748
import static org.opensearch.sql.utils.DateTimeUtils.extractDateTime;
4849

@@ -67,14 +68,12 @@
6768
import java.time.format.TextStyle;
6869
import java.time.temporal.ChronoUnit;
6970
import java.time.temporal.TemporalAmount;
70-
import java.util.Arrays;
7171
import java.util.Locale;
7272
import java.util.Map;
7373
import java.util.TimeZone;
7474
import java.util.concurrent.TimeUnit;
7575
import java.util.stream.Stream;
7676
import lombok.experimental.UtilityClass;
77-
import org.apache.commons.lang3.StringUtils;
7877
import org.apache.commons.lang3.tuple.Pair;
7978
import org.opensearch.sql.data.model.ExprDateValue;
8079
import org.opensearch.sql.data.model.ExprDatetimeValue;
@@ -84,11 +83,9 @@
8483
import org.opensearch.sql.data.model.ExprNullValue;
8584
import org.opensearch.sql.data.model.ExprStringValue;
8685
import org.opensearch.sql.data.model.ExprTimeValue;
87-
import org.opensearch.sql.data.model.ExprTimestampValue;
8886
import org.opensearch.sql.data.model.ExprValue;
8987
import org.opensearch.sql.data.type.ExprCoreType;
9088
import org.opensearch.sql.exception.ExpressionEvaluationException;
91-
import org.opensearch.sql.exception.SemanticCheckException;
9289
import org.opensearch.sql.expression.function.BuiltinFunctionName;
9390
import org.opensearch.sql.expression.function.BuiltinFunctionRepository;
9491
import org.opensearch.sql.expression.function.DefaultFunctionResolver;
@@ -191,6 +188,7 @@ public void register(BuiltinFunctionRepository repository) {
191188
repository.register(datediff());
192189
repository.register(datetime());
193190
repository.register(date_add());
191+
repository.register(date_format());
194192
repository.register(date_sub());
195193
repository.register(day());
196194
repository.register(dayName());
@@ -236,13 +234,12 @@ public void register(BuiltinFunctionRepository repository) {
236234
repository.register(timestamp());
237235
repository.register(timestampadd());
238236
repository.register(timestampdiff());
239-
repository.register(utc_date());
240-
repository.register(utc_time());
241-
repository.register(utc_timestamp());
242-
repository.register(date_format());
243237
repository.register(to_days());
244238
repository.register(to_seconds());
245239
repository.register(unix_timestamp());
240+
repository.register(utc_date());
241+
repository.register(utc_time());
242+
repository.register(utc_timestamp());
246243
repository.register(week(BuiltinFunctionName.WEEK));
247244
repository.register(week(BuiltinFunctionName.WEEKOFYEAR));
248245
repository.register(week(BuiltinFunctionName.WEEK_OF_YEAR));
@@ -1286,7 +1283,6 @@ private ExprValue exprConvertTZ(ExprValue startingDateTime, ExprValue fromTz, Ex
12861283
return new ExprDatetimeValue(
12871284
zonedDateTime.withZoneSameInstant(convertedToTz).toLocalDateTime());
12881285

1289-
12901286
// Catches exception for invalid timezones.
12911287
// ex. "+0:00" is an invalid timezone and would result in this exception being thrown.
12921288
} catch (ExpressionEvaluationException | DateTimeException e) {
@@ -1334,7 +1330,6 @@ private ExprValue exprDateDiff(FunctionProperties functionProperties,
13341330
private ExprValue exprDateTime(ExprValue dateTime, ExprValue timeZone) {
13351331
String defaultTimeZone = TimeZone.getDefault().getID();
13361332

1337-
13381333
try {
13391334
LocalDateTime ldtFormatted =
13401335
LocalDateTime.parse(dateTime.stringValue(), DATE_TIME_FORMATTER_STRICT_WITH_TZ);
@@ -1490,7 +1485,7 @@ private ExprValue exprFromUnixTime(ExprValue time) {
14901485
private LocalDateTime exprFromUnixTimeImpl(ExprValue time) {
14911486
return LocalDateTime.ofInstant(
14921487
Instant.ofEpochSecond((long)Math.floor(time.doubleValue())),
1493-
ZoneId.of("UTC"))
1488+
UTC_ZONE_ID)
14941489
.withNano((int)((time.doubleValue() % 1) * 1E9));
14951490
}
14961491

@@ -1994,7 +1989,7 @@ private ExprValue exprUtcTime(FunctionProperties functionProperties) {
19941989
*/
19951990
private ExprValue exprUtcTimeStamp(FunctionProperties functionProperties) {
19961991
var zdt = ZonedDateTime.now(functionProperties.getQueryStartClock())
1997-
.withZoneSameInstant(ZoneId.of("UTC"));
1992+
.withZoneSameInstant(UTC_ZONE_ID);
19981993
return new ExprDatetimeValue(zdt.toLocalDateTime());
19991994
}
20001995

0 commit comments

Comments
 (0)