Skip to content

Commit 679bf19

Browse files
Update DATE_ADD/ADDDATE and DATE_SUB/SUBDATE functions. (#122)
* Rework on `DATE_ADD`/`ADDDATE` and `DATE_SUB`/`SUBDATE` functions. Signed-off-by: Yury-Fridlyand <[email protected]>
1 parent 64a3794 commit 679bf19

23 files changed

+1207
-642
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.time.LocalDate;
1414
import java.time.LocalDateTime;
1515
import java.time.LocalTime;
16-
import java.time.ZoneId;
1716
import java.time.ZonedDateTime;
1817
import java.time.format.DateTimeFormatter;
1918
import java.time.format.DateTimeParseException;
@@ -69,7 +68,7 @@ public LocalDateTime datetimeValue() {
6968

7069
@Override
7170
public Instant timestampValue() {
72-
return ZonedDateTime.of(date, timeValue(), ZoneId.systemDefault()).toInstant();
71+
return ZonedDateTime.of(date, timeValue(), ExprTimestampValue.ZONE).toInstant();
7372
}
7473

7574
@Override

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.time.LocalDate;
1212
import java.time.LocalDateTime;
1313
import java.time.LocalTime;
14-
import java.time.ZoneId;
1514
import java.time.ZonedDateTime;
1615
import java.time.format.DateTimeFormatter;
1716
import java.time.format.DateTimeFormatterBuilder;
@@ -71,7 +70,7 @@ public LocalTime timeValue() {
7170

7271
@Override
7372
public Instant timestampValue() {
74-
return ZonedDateTime.of(datetime, ZoneId.of("UTC")).toInstant();
73+
return ZonedDateTime.of(datetime, ExprTimestampValue.ZONE).toInstant();
7574
}
7675

7776
@Override

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
import java.time.LocalDate;
1414
import java.time.LocalDateTime;
1515
import java.time.LocalTime;
16-
import java.time.ZoneId;
1716
import java.time.ZonedDateTime;
1817
import java.time.format.DateTimeParseException;
1918
import java.util.Objects;
2019
import lombok.RequiredArgsConstructor;
2120
import org.opensearch.sql.data.type.ExprCoreType;
2221
import org.opensearch.sql.data.type.ExprType;
2322
import org.opensearch.sql.exception.SemanticCheckException;
23+
import org.opensearch.sql.expression.function.FunctionProperties;
2424

2525
/**
2626
* Expression Time Value.
@@ -57,6 +57,19 @@ public LocalTime timeValue() {
5757
return time;
5858
}
5959

60+
public LocalDate dateValue(FunctionProperties functionProperties) {
61+
return LocalDate.now(functionProperties.getQueryStartClock());
62+
}
63+
64+
public LocalDateTime datetimeValue(FunctionProperties functionProperties) {
65+
return LocalDateTime.of(dateValue(functionProperties), timeValue());
66+
}
67+
68+
public Instant timestampValue(FunctionProperties functionProperties) {
69+
return ZonedDateTime.of(dateValue(functionProperties), timeValue(), ExprTimestampValue.ZONE)
70+
.toInstant();
71+
}
72+
6073
@Override
6174
public String toString() {
6275
return String.format("TIME '%s'", value());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ExprTimestampValue extends AbstractExprValue {
3030
/**
3131
* todo. only support UTC now.
3232
*/
33-
private static final ZoneId ZONE = ZoneId.of("UTC");
33+
public static final ZoneId ZONE = ZoneId.of("UTC");
3434

3535
private final Instant timestamp;
3636

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

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

9+
import java.time.Instant;
10+
import java.time.LocalDate;
11+
import java.time.LocalDateTime;
12+
import java.time.LocalTime;
913
import java.time.temporal.TemporalAmount;
1014
import java.util.ArrayList;
1115
import java.util.LinkedHashMap;
@@ -61,6 +65,22 @@ public static ExprValue intervalValue(TemporalAmount value) {
6165
return new ExprIntervalValue(value);
6266
}
6367

68+
public static ExprValue dateValue(LocalDate value) {
69+
return new ExprDateValue(value);
70+
}
71+
72+
public static ExprValue datetimeValue(LocalDateTime value) {
73+
return new ExprDatetimeValue(value);
74+
}
75+
76+
public static ExprValue timeValue(LocalTime value) {
77+
return new ExprTimeValue(value);
78+
}
79+
80+
public static ExprValue timestampValue(Instant value) {
81+
return new ExprTimestampValue(value);
82+
}
83+
6484
/**
6585
* {@link ExprTupleValue} constructor.
6686
*/
@@ -115,6 +135,16 @@ public static ExprValue fromObjectValue(Object o) {
115135
return stringValue((String) o);
116136
} else if (o instanceof Float) {
117137
return floatValue((Float) o);
138+
} else if (o instanceof LocalDate) {
139+
return dateValue((LocalDate) o);
140+
} else if (o instanceof LocalDateTime) {
141+
return datetimeValue((LocalDateTime) o);
142+
} else if (o instanceof LocalTime) {
143+
return timeValue((LocalTime) o);
144+
} else if (o instanceof Instant) {
145+
return timestampValue((Instant) o);
146+
} else if (o instanceof TemporalAmount) {
147+
return intervalValue((TemporalAmount) o);
118148
} else {
119149
throw new ExpressionEvaluationException("unsupported object " + o.getClass());
120150
}

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,6 @@ public static FunctionExpression multiply(Expression... expressions) {
290290
return compile(FunctionProperties.None, BuiltinFunctionName.MULTIPLY, expressions);
291291
}
292292

293-
public static FunctionExpression adddate(Expression... expressions) {
294-
return compile(FunctionProperties.None, BuiltinFunctionName.ADDDATE, expressions);
295-
}
296-
297293
public static FunctionExpression convert_tz(Expression... expressions) {
298294
return compile(FunctionProperties.None, BuiltinFunctionName.CONVERT_TZ, expressions);
299295
}
@@ -306,14 +302,6 @@ public static FunctionExpression datetime(Expression... expressions) {
306302
return compile(FunctionProperties.None, BuiltinFunctionName.DATETIME, expressions);
307303
}
308304

309-
public static FunctionExpression date_add(Expression... expressions) {
310-
return compile(FunctionProperties.None, BuiltinFunctionName.DATE_ADD, expressions);
311-
}
312-
313-
public static FunctionExpression date_sub(Expression... expressions) {
314-
return compile(FunctionProperties.None, BuiltinFunctionName.DATE_SUB, expressions);
315-
}
316-
317305
public static FunctionExpression day(Expression... expressions) {
318306
return compile(FunctionProperties.None, BuiltinFunctionName.DAY, expressions);
319307
}
@@ -374,10 +362,6 @@ public static FunctionExpression second(Expression... expressions) {
374362
return compile(FunctionProperties.None, BuiltinFunctionName.SECOND, expressions);
375363
}
376364

377-
public static FunctionExpression subdate(Expression... expressions) {
378-
return compile(FunctionProperties.None, BuiltinFunctionName.SUBDATE, expressions);
379-
}
380-
381365
public static FunctionExpression time(Expression... expressions) {
382366
return compile(FunctionProperties.None, BuiltinFunctionName.TIME, expressions);
383367
}

0 commit comments

Comments
 (0)