Skip to content

Commit b410903

Browse files
committed
Address comments pt1
1 parent 95a0990 commit b410903

File tree

14 files changed

+61
-58
lines changed

14 files changed

+61
-58
lines changed

x-pack/plugin/sql/qa/src/main/resources/date.csv-spec

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@ DAY_OF_WEEK(CAST(birth_date AS DATE)) dw,
1010
DAY_OF_YEAR(CAST(birth_date AS DATE)) dy,
1111
ISO_DAY_OF_WEEK(CAST(birth_date AS DATE)) iso_dw,
1212
WEEK(CAST(birth_date AS DATE)) w,
13-
QUARTER(CAST(hire_date AS DATE)) q,
13+
IW(CAST(birth_date AS DATE)) iso_w,
14+
QUARTER(CAST(birth_date AS DATE)) q,
1415
YEAR(CAST(birth_date AS DATE)) y,
1516
birth_date, last_name l FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;
1617

17-
d:i | dm:i | dw:i | dy:i | iso_dw:i | w:i | q:i | y:i | birth_date:ts | l:s
18-
2 |2 |4 |245 |3 |36 |2 |1953 |1953-09-02T00:00:00Z |Facello
19-
2 |2 |3 |154 |2 |23 |4 |1964 |1964-06-02T00:00:00Z |Simmel
20-
3 |3 |5 |337 |4 |49 |3 |1959 |1959-12-03T00:00:00Z |Bamford
21-
1 |1 |7 |121 |6 |18 |4 |1954 |1954-05-01T00:00:00Z |Koblick
22-
21 |21 |6 |21 |5 |4 |3 |1955 |1955-01-21T00:00:00Z |Maliniak
23-
20 |20 |2 |110 |1 |17 |2 |1953 |1953-04-20T00:00:00Z |Preusig
24-
23 |23 |5 |143 |4 |21 |1 |1957 |1957-05-23T00:00:00Z |Zielinski
25-
19 |19 |4 |50 |3 |8 |3 |1958 |1958-02-19T00:00:00Z |Kalloufi
26-
19 |19 |7 |110 |6 |16 |1 |1952 |1952-04-19T00:00:00Z |Peac
18+
d:i | dm:i | dw:i | dy:i | iso_dw:i | w:i |iso_w:i | q:i | y:i | birth_date:ts | l:s
19+
2 |2 |4 |245 |3 |36 |35 |3 |1953 |1953-09-02T00:00:00Z |Facello
20+
2 |2 |3 |154 |2 |23 |22 |2 |1964 |1964-06-02T00:00:00Z |Simmel
21+
3 |3 |5 |337 |4 |49 |49 |4 |1959 |1959-12-03T00:00:00Z |Bamford
22+
1 |1 |7 |121 |6 |18 |18 |2 |1954 |1954-05-01T00:00:00Z |Koblick
23+
21 |21 |6 |21 |5 |4 |3 |1 |1955 |1955-01-21T00:00:00Z |Maliniak
24+
20 |20 |2 |110 |1 |17 |16 |2 |1953 |1953-04-20T00:00:00Z |Preusig
25+
23 |23 |5 |143 |4 |21 |21 |2 |1957 |1957-05-23T00:00:00Z |Zielinski
26+
19 |19 |4 |50 |3 |8 |8 |1 |1958 |1958-02-19T00:00:00Z |Kalloufi
27+
19 |19 |7 |110 |6 |16 |16 |2 |1952 |1952-04-19T00:00:00Z |Peac
2728
;
2829

2930

@@ -82,7 +83,7 @@ null |100445
8283
;
8384

8485
dateAndInterval
85-
SELECT YEAR(CAST('2019-01-21' AS DATE) + INTERVAL '1-2' YEAR TO MONTH) AS y, MONTH(CAST('2019-01-21' AS DATE) + INTERVAL '1-2' YEAR TO MONTH) AS m;
86+
SELECT YEAR(CAST('2019-01-21' AS DATE) + INTERVAL '1-2' YEAR TO MONTH) AS y, MONTH(INTERVAL '1-2' YEAR TO MONTH + CAST('2019-01-21' AS DATE)) AS m;
8687

8788
y:i | m:i
8889
2020 | 3

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/Expressions.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66
package org.elasticsearch.xpack.sql.expression;
77

8-
import org.elasticsearch.common.Strings;
98
import org.elasticsearch.xpack.sql.SqlIllegalArgumentException;
109
import org.elasticsearch.xpack.sql.expression.Expression.TypeResolution;
1110
import org.elasticsearch.xpack.sql.expression.gen.pipeline.Pipe;
@@ -16,6 +15,7 @@
1615
import java.util.Collection;
1716
import java.util.List;
1817
import java.util.Locale;
18+
import java.util.StringJoiner;
1919
import java.util.function.Predicate;
2020

2121
import static java.lang.String.format;
@@ -173,11 +173,11 @@ public static TypeResolution typeMustBeString(Expression e, String operationName
173173
return typeMustBe(e, DataType::isString, operationName, paramOrd, "string");
174174
}
175175

176-
public static TypeResolution typeMustBeDateOrDateTime(Expression e, String operationName, ParamOrdinal paramOrd) {
176+
public static TypeResolution typeMustBeDate(Expression e, String operationName, ParamOrdinal paramOrd) {
177177
return typeMustBe(e, dt -> dt == DATETIME || dt == DATE, operationName, paramOrd, "datetime, date");
178178
}
179179

180-
public static TypeResolution typeMustBeNumericOrDateTimeOrDate(Expression e, String operationName, ParamOrdinal paramOrd) {
180+
public static TypeResolution typeMustBeNumericOrDate(Expression e, String operationName, ParamOrdinal paramOrd) {
181181
return typeMustBe(e, dt -> dt.isNumeric() || dt == DATETIME, operationName, paramOrd, "numeric", "datetime", "date");
182182
}
183183

@@ -191,8 +191,20 @@ public static TypeResolution typeMustBe(Expression e,
191191
new TypeResolution(format(Locale.ROOT, "[%s]%s argument must be [%s], found value [%s] type [%s]",
192192
operationName,
193193
paramOrd == null || paramOrd == ParamOrdinal.DEFAULT ? "" : " " + paramOrd.name().toLowerCase(Locale.ROOT),
194-
Strings.arrayToDelimitedString(acceptedTypes, " or "),
194+
acceptedTypesForErrorMsg(acceptedTypes),
195195
Expressions.name(e),
196196
e.dataType().esType));
197197
}
198+
199+
private static String acceptedTypesForErrorMsg(String... acceptedTypes) {
200+
StringJoiner sj = new StringJoiner(", ");
201+
for (int i = 0; i < acceptedTypes.length - 1; i++) {
202+
sj.add(acceptedTypes[i]);
203+
}
204+
if (acceptedTypes.length > 1) {
205+
return sj.toString() + " or " + acceptedTypes[acceptedTypes.length - 1];
206+
} else {
207+
return acceptedTypes[0];
208+
}
209+
}
198210
}

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/Literal.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ public Literal(Source source, Object value, DataType dataType) {
3838
public Literal(Source source, String name, Object value, DataType dataType) {
3939
super(source, name == null ? source.text() : name, emptyList(), null);
4040
this.dataType = dataType;
41-
// if (dataType == DATE) {
42-
// this.value = value;
43-
// } else {
44-
this.value = DataTypeConversion.convert(value, dataType);
45-
// }
41+
this.value = DataTypeConversion.convert(value, dataType);
4642
}
4743

4844
@Override

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/aggregate/Max.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ public String innerName() {
4545

4646
@Override
4747
protected TypeResolution resolveType() {
48-
return Expressions.typeMustBeNumericOrDateTimeOrDate(field(), sourceText(), ParamOrdinal.DEFAULT);
48+
return Expressions.typeMustBeNumericOrDate(field(), sourceText(), ParamOrdinal.DEFAULT);
4949
}
5050
}

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/aggregate/Min.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@ public String innerName() {
4848

4949
@Override
5050
protected TypeResolution resolveType() {
51-
return Expressions.typeMustBeNumericOrDateTimeOrDate(field(), sourceText(), ParamOrdinal.DEFAULT);
51+
return Expressions.typeMustBeNumericOrDate(field(), sourceText(), ParamOrdinal.DEFAULT);
5252
}
5353
}

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/grouping/Histogram.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public ZoneId zoneId() {
3939

4040
@Override
4141
protected TypeResolution resolveType() {
42-
TypeResolution resolution = Expressions.typeMustBeNumericOrDateTimeOrDate(field(), "HISTOGRAM", ParamOrdinal.FIRST);
42+
TypeResolution resolution = Expressions.typeMustBeNumericOrDate(field(), "HISTOGRAM", ParamOrdinal.FIRST);
4343
if (resolution == TypeResolution.TYPE_RESOLVED) {
4444
// interval must be Literal interval
4545
if (field().dataType() == DataType.DATETIME) {

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/BaseDateTimeFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected final NodeInfo<BaseDateTimeFunction> info() {
3535

3636
@Override
3737
protected TypeResolution resolveType() {
38-
return Expressions.typeMustBeDateOrDateTime(field(), sourceText(), ParamOrdinal.DEFAULT);
38+
return Expressions.typeMustBeDate(field(), sourceText(), ParamOrdinal.DEFAULT);
3939
}
4040

4141
public ZoneId zoneId() {

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ public Literal visitDateEscapedLiteral(DateEscapedLiteralContext ctx) {
795795
} catch(IllegalArgumentException ex) {
796796
throw new ParsingException(source, "Invalid date received; {}", ex.getMessage());
797797
}
798-
return new Literal(source, DateUtils.asDate(dt), DataType.DATE);
798+
return new Literal(source, DateUtils.asDateOnly(dt), DataType.DATE);
799799
}
800800

801801
@Override

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypeConversion.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,23 +76,23 @@ public static DataType commonType(DataType left, DataType right) {
7676
}
7777

7878
// interval and dates
79-
if (left == DATETIME) {
80-
if (right == DATE || DataTypes.isInterval(right)) {
79+
if (left == DATE) {
80+
if (DataTypes.isInterval(right)) {
8181
return left;
8282
}
8383
}
84-
if (right == DATETIME) {
85-
if (left == DATE || DataTypes.isInterval(left)) {
84+
if (right == DATE) {
85+
if (DataTypes.isInterval(left)) {
8686
return right;
8787
}
8888
}
89-
if (left == DATE) {
90-
if (DataTypes.isInterval(right)) {
89+
if (left == DATETIME) {
90+
if (right == DATE || DataTypes.isInterval(right)) {
9191
return left;
9292
}
9393
}
94-
if (right == DATE) {
95-
if (DataTypes.isInterval(left)) {
94+
if (right == DATETIME) {
95+
if (left == DATE || DataTypes.isInterval(left)) {
9696
return right;
9797
}
9898
}
@@ -497,7 +497,7 @@ public enum Conversion {
497497
RATIONAL_TO_DATE(toDate(RATIONAL_TO_LONG)),
498498
INTEGER_TO_DATE(toDate(INTEGER_TO_LONG)),
499499
BOOL_TO_DATE(toDate(BOOL_TO_INT)),
500-
STRING_TO_DATE(fromString(DateUtils::asDate, "date")),
500+
STRING_TO_DATE(fromString(DateUtils::asDateOnly, "date")),
501501
DATETIME_TO_DATE(fromDatetimeToDate()),
502502

503503
RATIONAL_TO_DATETIME(toDateTime(RATIONAL_TO_LONG)),
@@ -559,11 +559,11 @@ private static Function<Object, Object> toDateTime(Conversion conversion) {
559559
}
560560

561561
private static Function<Object, Object> toDate(Conversion conversion) {
562-
return l -> DateUtils.asDate(((Number) conversion.convert(l)).longValue());
562+
return l -> DateUtils.asDateOnly(((Number) conversion.convert(l)).longValue());
563563
}
564564

565565
private static Function<Object, Object> fromDatetimeToDate() {
566-
return l -> DateUtils.asDate((ZonedDateTime) l);
566+
return l -> DateUtils.asDateOnly((ZonedDateTime) l);
567567
}
568568

569569
public Object convert(Object l) {

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/type/DataTypes.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,10 @@
88
import org.elasticsearch.xpack.sql.SqlIllegalArgumentException;
99
import org.elasticsearch.xpack.sql.expression.literal.Interval;
1010

11-
import java.time.LocalDateTime;
1211
import java.time.ZonedDateTime;
1312

1413
import static org.elasticsearch.xpack.sql.type.DataType.BOOLEAN;
1514
import static org.elasticsearch.xpack.sql.type.DataType.BYTE;
16-
import static org.elasticsearch.xpack.sql.type.DataType.DATE;
1715
import static org.elasticsearch.xpack.sql.type.DataType.DATETIME;
1816
import static org.elasticsearch.xpack.sql.type.DataType.DOUBLE;
1917
import static org.elasticsearch.xpack.sql.type.DataType.FLOAT;
@@ -69,9 +67,6 @@ public static DataType fromJava(Object value) {
6967
if (value instanceof Short) {
7068
return SHORT;
7169
}
72-
if (value instanceof LocalDateTime) {
73-
return DATE;
74-
}
7570
if (value instanceof ZonedDateTime) {
7671
return DATETIME;
7772
}

0 commit comments

Comments
 (0)