Skip to content

Commit 77db9f4

Browse files
committed
Update docs/changelog/133309.yaml
1 parent 0b56eec commit 77db9f4

File tree

24 files changed

+71
-34
lines changed

24 files changed

+71
-34
lines changed

docs/changelog/133309.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 133309
2+
summary: support DATE_RANGE field type
3+
area: ES|QL
4+
type: enhancement
5+
issues: []

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/expression/TypeResolutions.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.elasticsearch.xpack.esql.core.type.DataType.AGGREGATE_METRIC_DOUBLE;
2222
import static org.elasticsearch.xpack.esql.core.type.DataType.BOOLEAN;
2323
import static org.elasticsearch.xpack.esql.core.type.DataType.DATETIME;
24+
import static org.elasticsearch.xpack.esql.core.type.DataType.DATE_RANGE;
2425
import static org.elasticsearch.xpack.esql.core.type.DataType.DENSE_VECTOR;
2526
import static org.elasticsearch.xpack.esql.core.type.DataType.IP;
2627
import static org.elasticsearch.xpack.esql.core.type.DataType.NULL;
@@ -85,10 +86,10 @@ public static TypeResolution isRepresentableExceptCountersDenseVectorAndAggregat
8586
) {
8687
return isType(
8788
e,
88-
dt -> isRepresentable(dt) && dt != DENSE_VECTOR && dt != AGGREGATE_METRIC_DOUBLE,
89+
dt -> isRepresentable(dt) && dt != DENSE_VECTOR && dt != AGGREGATE_METRIC_DOUBLE && dt != DATE_RANGE,
8990
operationName,
9091
paramOrd,
91-
"any type except counter types, dense_vector, or aggregate_metric_double"
92+
"any type except counter types, dense_vector, aggregate_metric_double or date_range"
9293
);
9394
}
9495

@@ -99,10 +100,14 @@ public static TypeResolution isRepresentableExceptCountersSpatialDenseVectorAndA
99100
) {
100101
return isType(
101102
e,
102-
(t) -> isSpatialOrGrid(t) == false && DataType.isRepresentable(t) && t != DENSE_VECTOR && t != AGGREGATE_METRIC_DOUBLE,
103+
(t) -> isSpatialOrGrid(t) == false
104+
&& DataType.isRepresentable(t)
105+
&& t != DENSE_VECTOR
106+
&& t != AGGREGATE_METRIC_DOUBLE
107+
&& t != DATE_RANGE,
103108
operationName,
104109
paramOrd,
105-
"any type except counter, spatial types, dense_vector, or aggregate_metric_double"
110+
"any type except counter, spatial types, dense_vector, aggregate_metric_double or date_range"
106111
);
107112
}
108113

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/DateRangeBlock.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@ public sealed interface DateRangeBlock extends Block permits DateRangeArrayBlock
3333
* equals method works properly across different implementations of the AggregateMetricDoubleBlock interface.
3434
*/
3535
static boolean equals(DateRangeBlock lhs, DateRangeBlock rhs) {
36-
if (lhs == rhs) return true;
37-
if (lhs.getPositionCount() != rhs.getPositionCount()) return false;
36+
if (lhs == rhs) {
37+
return true;
38+
}
39+
if (lhs.getPositionCount() != rhs.getPositionCount()) {
40+
return false;
41+
}
3842
return LongBlock.equals(lhs.getFromBlock(), rhs.getFromBlock()) && LongBlock.equals(lhs.getToBlock(), rhs.getToBlock());
3943
}
4044

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/enrich/EnrichPolicyResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ private Tuple<ResolvedEnrichPolicy, String> mergeLookupResults(
289289
// field and then added as a first-class ESQL field type. So in enrichment over clusters it may appear as
290290
// DATE_RANGE VS UNSUPPORTED, even though it's still the same type.
291291
private boolean typeMismatch(DataType old, DataType field) {
292-
if (old == DataType.DATE_RANGE && field == DataType.UNSUPPORTED) return false;
292+
if (old == DataType.DATE_RANGE && field == DataType.UNSUPPORTED) {
293+
return false;
294+
}
293295
return old.equals(field) == false;
294296
}
295297

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/aggregate/Absent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ protected TypeResolution resolveType() {
132132
dt -> dt.isCounter() == false && dt != DataType.DENSE_VECTOR && dt != DataType.DATE_RANGE,
133133
sourceText(),
134134
DEFAULT,
135-
"any type except counter types or dense_vector / date_range"
135+
"any type except counter types, dense_vector or date_range"
136136
);
137137
}
138138

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/aggregate/Count.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ protected TypeResolution resolveType() {
149149
dt -> dt.isCounter() == false && dt != DataType.DENSE_VECTOR && dt != DataType.DATE_RANGE,
150150
sourceText(),
151151
DEFAULT,
152-
"any type except counter types or dense_vector / date_range"
152+
"any type except counter types, dense_vector or date_range"
153153
);
154154
}
155155

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToStringFromDateRangeEvaluator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.elasticsearch.compute.operator.EvalOperator;
1818
import org.elasticsearch.core.Releasables;
1919
import org.elasticsearch.xpack.esql.core.tree.Source;
20+
import org.elasticsearch.xpack.esql.type.EsqlDataTypeConverter;
2021

2122
public class ToStringFromDateRangeEvaluator extends AbstractConvertFunction.AbstractEvaluator {
2223
private static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(ToStringFromDateRangeEvaluator.class);
@@ -39,7 +40,11 @@ protected Block evalVector(Vector v) {
3940
}
4041

4142
private static BytesRef evalValue(DateRangeBlock block, int idx) {
42-
return new BytesRef((block.getFromBlock().getLong(idx) + ".." + block.getToBlock().getLong(idx)));
43+
return new BytesRef(
44+
(EsqlDataTypeConverter.dateTimeToString(block.getFromBlock().getLong(idx))
45+
+ ".."
46+
+ EsqlDataTypeConverter.dateTimeToString(block.getToBlock().getLong(idx)))
47+
);
4348
}
4449

4550
@Override

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/action/EsqlQueryResponseTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ private ColumnInfoImpl randomColumnInfo() {
196196
|| t == DataType.TIME_DURATION
197197
|| t == DataType.PARTIAL_AGG
198198
|| t == DataType.AGGREGATE_METRIC_DOUBLE
199-
|| t == DataType.TSID_DATA_TYPE,
199+
|| t == DataType.TSID_DATA_TYPE
200+
|| t == DataType.DATE_RANGE,
200201
() -> randomFrom(DataType.types())
201202
).widenSmallNumeric();
202203
return new ColumnInfoImpl(randomAlphaOfLength(10), type.esType(), randomOriginalTypes());

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/analysis/VerifierTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,7 @@ public void testAggregateOnCounter() {
11341134
assertThat(
11351135
error("FROM tests | STATS count(network.bytes_out)", tsdb),
11361136
equalTo(
1137-
"1:20: argument of [count(network.bytes_out)] must be [any type except counter types or dense_vector],"
1137+
"1:20: argument of [count(network.bytes_out)] must be [any type except counter types, dense_vector or date_range],"
11381138
+ " found value [network.bytes_out] type [counter_long]"
11391139
)
11401140
);

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/AbstractAggregationTestCase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ protected static String standardAggregatorName(String prefix, DataType type) {
560560
case IP -> "Ip";
561561
case DATETIME, DATE_NANOS, LONG, COUNTER_LONG, UNSIGNED_LONG, GEOHASH, GEOTILE, GEOHEX -> "Long";
562562
case AGGREGATE_METRIC_DOUBLE -> "AggregateMetricDouble";
563+
case DATE_RANGE -> "DateRange";
563564
case NULL -> "Null";
564565
default -> throw new UnsupportedOperationException("name for [" + type + "]");
565566
};

0 commit comments

Comments
 (0)