Browse Source

ESQL: Replace many version tests with features (#106293)

This replaces many of the feture comparisons in esql's csv-spec tests
with feature checks.
Nik Everett 1 year ago
parent
commit
26219564ef

+ 3 - 1
x-pack/plugin/esql/qa/testFixtures/src/main/resources/boolean.csv-spec

@@ -62,7 +62,9 @@ avg(salary):double | always_false:boolean
 ;
 
 
-in#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+in
+required_feature: esql.mv_warn
+
 from employees | keep emp_no, is_rehired, still_hired | where is_rehired in (still_hired, true) | where is_rehired != still_hired;
 ignoreOrder:true
 warning:Line 1:63: evaluation of [is_rehired in (still_hired, true)] failed, treating result as null. Only first 20 failures recorded.

+ 3 - 1
x-pack/plugin/esql/qa/testFixtures/src/main/resources/date.csv-spec

@@ -182,7 +182,9 @@ string:keyword                                          |datetime:date
 // end::to_datetime-str-result[]
 ;
 
-convertFromUnsignedLong#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertFromUnsignedLong
+required_feature:esql.convert_warn
+
 row ul = [9223372036854775808, 520128000000] | eval dt = to_datetime(ul);
 warning:Line 1:58: evaluation of [to_datetime(ul)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:58: org.elasticsearch.xpack.ql.InvalidArgumentException: [9223372036854775808] out of [long] range

+ 24 - 8
x-pack/plugin/esql/qa/testFixtures/src/main/resources/floats.csv-spec

@@ -91,7 +91,9 @@ int:integer |dbl:double
 520128      |520128
 ;
 
-lessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+lessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change < 1 | keep emp_no, salary_change | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [salary_change < 1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -105,7 +107,9 @@ emp_no:integer |salary_change:double
 10030          |-0.4
 ;
 
-greaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+greaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change > 1 | keep emp_no, salary_change | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [salary_change > 1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -119,7 +123,9 @@ emp_no:integer |salary_change:double
 10079          |7.58
 ;
 
-equalToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change == 1.19 | keep emp_no, salary_change | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change == 1.19] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -129,7 +135,9 @@ emp_no:integer |salary_change:double
 10001          |1.19
 ;
 
-equalToOrEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToOrEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change == 1.19 or salary_change == 7.58 | keep emp_no, salary_change | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -140,7 +148,9 @@ emp_no:integer |salary_change:double
 10079          |7.58
 ;
 
-inMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+inMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change in (1.19, 7.58) | keep emp_no, salary_change | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change in (1.19, 7.58)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -151,7 +161,9 @@ emp_no:integer |salary_change:double
 10079          |7.58
 ;
 
-notLessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notLessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change < 1) | keep emp_no, salary_change | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change < 1)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change < 1] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -165,7 +177,9 @@ emp_no:integer |salary_change:double
 10079          | 7.58
 ;
 
-notGreaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notGreaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change > 1) | keep emp_no, salary_change | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change > 1)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change > 1] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -179,7 +193,9 @@ emp_no:integer |salary_change:double
 10030          | -0.4
 ;
 
-notEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change == 1.19) | keep emp_no, salary_change | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change == 1.19)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change == 1.19] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]

+ 48 - 16
x-pack/plugin/esql/qa/testFixtures/src/main/resources/ints.csv-spec

@@ -1,6 +1,8 @@
 // Integral types-specific tests
 
-inLongAndInt#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+inLongAndInt
+required_feature: esql.mv_warn
+
 from employees | where avg_worked_seconds in (372957040, salary_change.long, 236703986) | where emp_no in (10017, emp_no - 1) | keep emp_no, avg_worked_seconds;
 warning:Line 1:24: evaluation of [avg_worked_seconds in (372957040, salary_change.long, 236703986)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -65,7 +67,9 @@ long:long                    |ul:ul
 [501379200000, 520128000000] |[501379200000, 520128000000]
 ;
 
-convertDoubleToUL#[skip:-8.11.99, reason:ql exceptions updated in 8.12]
+convertDoubleToUL
+required_feature:esql.convert_warn
+
 row d = 123.4 | eval ul = to_ul(d), overflow = to_ul(1e20);
 warning:Line 1:48: evaluation of [to_ul(1e20)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:48: org.elasticsearch.xpack.ql.InvalidArgumentException: [1.0E20] out of [unsigned_long] range
@@ -122,7 +126,9 @@ int:integer       |long:long
 [5013792, 520128] |[5013792, 520128]
 ;
 
-convertULToLong#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertULToLong
+required_feature:esql.convert_warn
+
 row ul = [9223372036854775807, 9223372036854775808] | eval long = to_long(ul);
 warning:Line 1:67: evaluation of [to_long(ul)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:67: org.elasticsearch.xpack.ql.InvalidArgumentException: [9223372036854775808] out of [long] range
@@ -163,7 +169,9 @@ str1:keyword |str2:keyword |str3:keyword |long1:long  |long2:long |long3:long
 // end::to_long-str-result[]
 ;
 
-convertDoubleToLong#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertDoubleToLong
+required_feature:esql.convert_warn
+
 row d = 123.4 | eval d2l = to_long(d), overflow = to_long(1e19);
 warning:Line 1:51: evaluation of [to_long(1e19)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:51: org.elasticsearch.xpack.ql.InvalidArgumentException: [1.0E19] out of [long] range
@@ -181,7 +189,9 @@ int:integer       |ii:integer
 [5013792, 520128] |[5013792, 520128]
 ;
 
-convertLongToInt#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertLongToInt
+required_feature:esql.convert_warn
+
 // tag::to_int-long[]
 ROW long = [5013792, 2147483647, 501379200000]
 | EVAL int = TO_INTEGER(long)
@@ -196,7 +206,9 @@ long:long                           |int:integer
 // end::to_int-long-result[]
 ;
 
-convertULToInt#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertULToInt
+required_feature:esql.convert_warn
+
 row ul = [2147483647, 9223372036854775808] | eval int = to_int(ul);
 warning:Line 1:57: evaluation of [to_int(ul)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:57: org.elasticsearch.xpack.ql.InvalidArgumentException: [9223372036854775808] out of [integer] range
@@ -226,7 +238,9 @@ int_str:keyword  |int_dbl_str:keyword |is2i:integer|ids2i:integer
 2147483647       |2147483646.2        |2147483647  |2147483646
 ;
 
-convertStringToIntFail#[skip:-8.11.99, reason:double rounding in conversion updated in 8.12]
+convertStringToIntFail
+required_feature: esql.mv_warn
+
 row str1 = "2147483647.2", str2 = "2147483648", non = "no number" | eval i1 = to_integer(str1), i2 = to_integer(str2), noi = to_integer(non);
 warning:Line 1:79: evaluation of [to_integer(str1)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:79: java.lang.NumberFormatException: For input string: \"2147483647.2\"
@@ -239,7 +253,9 @@ str1:keyword   |str2:keyword   |non:keyword    |i1:integer     |i2:integer     |
 2147483647.2   |2147483648     |no number      |null           |null           |null
 ;
 
-convertDoubleToInt#[skip:-8.11.99, reason:ql exceptions were updated in 8.12]
+convertDoubleToInt
+required_feature:esql.convert_warn
+
 row d = 123.4 | eval d2i = to_integer(d), overflow = to_integer(1e19);
 warning:Line 1:54: evaluation of [to_integer(1e19)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:54: org.elasticsearch.xpack.ql.InvalidArgumentException: [1.0E19] out of [integer] range
@@ -248,7 +264,9 @@ d:double       |d2i:integer   |overflow:integer
 123.4          |123           |null    
 ;
 
-lessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+lessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change.int < 1 | keep emp_no, salary_change.int | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [salary_change.int < 1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -262,7 +280,9 @@ emp_no:integer |salary_change.int:integer
 10030          | 0
 ;
 
-greaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+greaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change.int > 1 | keep emp_no, salary_change.int | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [salary_change.int > 1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -276,7 +296,9 @@ emp_no:integer |salary_change.int:integer
 10086          |13
 ;
 
-equalToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change.int == 0 | keep emp_no, salary_change.int | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change.int == 0] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -289,7 +311,9 @@ emp_no:integer |salary_change.int:integer
 10093          | 0
 ;
 
-equalToOrEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToOrEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change.int == 1 or salary_change.int == 8 | keep emp_no, salary_change.int | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change.int] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -300,7 +324,9 @@ emp_no:integer |salary_change.int:integer
 10044          |8
 ;
 
-inMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+inMultivalue
+required_feature: esql.mv_warn
+
 from employees | where salary_change.int in (1, 7) | keep emp_no, salary_change.int | sort emp_no;
 warning:Line 1:24: evaluation of [salary_change.int in (1, 7)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -311,7 +337,9 @@ emp_no:integer |salary_change.int:integer
 10079          |7
 ;
 
-notLessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notLessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change.int < 1) | keep emp_no, salary_change.int | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change.int < 1)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change.int < 1] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -325,7 +353,9 @@ emp_no:integer |salary_change.int:integer
 10079          | 7
 ;
 
-notGreaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notGreaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change.int > 1) | keep emp_no, salary_change.int | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change.int > 1)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change.int > 1] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -339,7 +369,9 @@ emp_no:integer |salary_change.int:integer
 10020          | -5
 ;
 
-notEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(salary_change.int == 1) | keep emp_no, salary_change.int | sort emp_no | limit 5;
 warning:Line 1:24: evaluation of [not(salary_change.int == 1)] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [salary_change.int == 1] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]

+ 36 - 12
x-pack/plugin/esql/qa/testFixtures/src/main/resources/ip.csv-spec

@@ -15,7 +15,9 @@ eth1           |epsilon        |null
 eth2           |epsilon        |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]                           |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]
 ;
 
-equals#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equals
+required_feature: esql.mv_warn
+
 from hosts | sort host, card | where ip0 == ip1 | keep card, host, ip0, ip1;
 warning:Line 1:38: evaluation of [ip0 == ip1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:38: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -57,7 +59,9 @@ eth0           |gamma          |fe80::cae2:65ff:fece:feb9
 eth2           |epsilon        |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]|[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]
 ;
 
-lessThan#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+lessThan
+required_feature: esql.mv_warn
+
 from hosts | sort host, card | where ip0 < ip1 | keep card, host, ip0, ip1;
 warning:Line 1:38: evaluation of [ip0 < ip1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:38: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -68,7 +72,9 @@ eth1           |beta           |127.0.0.1                |128.0.0.1
 lo0            |gamma          |fe80::cae2:65ff:fece:feb9|fe81::cae2:65ff:fece:feb9
 ;
 
-notEquals#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notEquals
+required_feature: esql.mv_warn
+
 from hosts | sort host, card, ip1 | where ip0 != ip1 | keep card, host, ip0, ip1;
 warning:Line 1:43: evaluation of [ip0 != ip1] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:43: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -118,7 +124,9 @@ ip0:ip         |ip1:ip
 null           |[127.0.0.1, 127.0.0.2, 127.0.0.3]
 ;
 
-conditional#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+conditional
+required_feature: esql.mv_warn
+
 from hosts | eval eq=case(ip0==ip1, ip0, ip1) | keep eq, ip0, ip1;
 ignoreOrder:true
 warning:Line 1:27: evaluation of [ip0==ip1] failed, treating result as null. Only first 20 failures recorded.
@@ -137,7 +145,9 @@ fe80::cae2:65ff:fece:fec1                             |[fe80::cae2:65ff:fece:feb
 [fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]|[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]                           |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]
 ;
 
-in#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+in
+required_feature: esql.mv_warn
+
 from hosts | eval eq=case(ip0==ip1, ip0, ip1) | where eq in (ip0, ip1) | keep card, host, ip0, ip1, eq;
 ignoreOrder:true
 warning:Line 1:27: evaluation of [ip0==ip1] failed, treating result as null. Only first 20 failures recorded.
@@ -156,7 +166,9 @@ eth0           |gamma          |fe80::cae2:65ff:fece:feb9
 eth0           |epsilon        |[fe80::cae2:65ff:fece:feb9, fe80::cae2:65ff:fece:fec0, fe80::cae2:65ff:fece:fec1]|fe80::cae2:65ff:fece:fec1|fe80::cae2:65ff:fece:fec1
 ;
 
-cidrMatchSimple#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+cidrMatchSimple
+required_feature: esql.mv_warn
+
 from hosts | where cidr_match(ip1, "127.0.0.2/32") | keep card, host, ip0, ip1;
 warning:Line 1:20: evaluation of [cidr_match(ip1, \"127.0.0.2/32\")] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:20: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -165,7 +177,9 @@ card:keyword   |host:keyword   |ip0:ip         |ip1:ip
 eth1           |beta           |127.0.0.1      |127.0.0.2
 ;
 
-cidrMatchNullField#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+cidrMatchNullField
+required_feature: esql.mv_warn
+
 from hosts | where cidr_match(ip0, "127.0.0.2/32") is null | keep card, host, ip0, ip1;
 ignoreOrder:true
 warning:Line 1:20: evaluation of [cidr_match(ip0, \"127.0.0.2/32\")] failed, treating result as null. Only first 20 failures recorded.
@@ -177,7 +191,9 @@ eth1           |epsilon        |null
 eth2           |epsilon        |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]                           |[fe81::cae2:65ff:fece:feb9, fe82::cae2:65ff:fece:fec0]
 ;
 
-cdirMatchMultipleArgs#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+cdirMatchMultipleArgs
+required_feature: esql.mv_warn
+
 //tag::cdirMatchMultipleArgs[]
 FROM hosts 
 | WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") 
@@ -195,7 +211,9 @@ eth0           |gamma          |fe80::cae2:65ff:fece:feb9|127.0.0.3
 //end::cdirMatchMultipleArgs-result[]
 ;
 
-cidrMatchFunctionArg#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+cidrMatchFunctionArg
+required_feature: esql.mv_warn
+
 from hosts | where cidr_match(ip1, concat("127.0.0.2", "/32"), "127.0.0.3/32") | keep card, host, ip0, ip1;
 ignoreOrder:true
 warning:Line 1:20: evaluation of [cidr_match(ip1, concat(\"127.0.0.2\", \"/32\"), \"127.0.0.3/32\")] failed, treating result as null. Only first 20 failures recorded.
@@ -206,7 +224,9 @@ eth1           |beta           |127.0.0.1                |127.0.0.2
 eth0           |gamma          |fe80::cae2:65ff:fece:feb9|127.0.0.3
 ;
 
-cidrMatchFieldArg#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+cidrMatchFieldArg
+required_feature: esql.mv_warn
+
 from hosts | eval cidr="127.0.0.2" | where cidr_match(ip1, cidr, "127.0.0.3/32") | keep card, host, ip0, ip1;
 ignoreOrder:true
 warning:Line 1:44: evaluation of [cidr_match(ip1, cidr, \"127.0.0.3/32\")] failed, treating result as null. Only first 20 failures recorded.
@@ -252,7 +272,9 @@ eth1           |alpha          |::1        |::1
 eth0           |beta           |127.0.0.1  |::1
 ;
 
-pushDownIPWithIn#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+pushDownIPWithIn
+required_feature: esql.mv_warn
+
 from hosts | where ip1 in (to_ip("::1"), to_ip("127.0.0.1")) | keep card, host, ip0, ip1;
 ignoreOrder:true
 warning:Line 1:20: evaluation of [ip1 in (to_ip(\"::1\"), to_ip(\"127.0.0.1\"))] failed, treating result as null. Only first 20 failures recorded.
@@ -264,7 +286,9 @@ eth1           |alpha          |::1         |::1
 eth0           |beta           |127.0.0.1   |::1
 ;
 
-pushDownIPWithComparision#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+pushDownIPWithComparision
+required_feature: esql.mv_warn
+
 from hosts | where ip1 > to_ip("127.0.0.1") | keep card, ip1;
 ignoreOrder:true
 warning:Line 1:20: evaluation of [ip1 > to_ip(\"127.0.0.1\")] failed, treating result as null. Only first 20 failures recorded.

+ 30 - 10
x-pack/plugin/esql/qa/testFixtures/src/main/resources/math.csv-spec

@@ -200,7 +200,9 @@ height:double | s:double
 1.53          | 0.34
 ;
 
-powSalarySquared#[skip:-8.11.99,reason:return type changed in 8.12]
+powSalarySquared
+required_feature: esql.pow_double
+
 from employees | eval s = pow(to_long(salary) - 75000, 2) + 10000 | keep salary, s | sort salary desc | limit 4;
 
 salary:integer | s:double
@@ -615,7 +617,9 @@ base:double | exponent:integer | result:double
 // end::powDI-result[]
 ;
 
-powIntInt#[skip:-8.11.99,reason:return type changed in 8.12]
+powIntInt
+required_feature: esql.pow_double
+
 ROW base = 2, exponent = 2
 | EVAL s = POW(base, exponent)
 ;
@@ -624,7 +628,9 @@ base:integer | exponent:integer | s:double
 2            | 2                | 4.0
 ;
 
-powIntIntPlusInt#[skip:-8.11.99,reason:return type changed in 8.12]
+powIntIntPlusInt
+required_feature: esql.pow_double
+
 row s = 1 + pow(2, 2);
 
 s:double
@@ -638,21 +644,27 @@ s:double
 5
 ;
 
-powIntUL#[skip:-8.11.99,reason:return type changed in 8.12]
+powIntUL
+required_feature: esql.pow_double
+
 row x = pow(1, 9223372036854775808);
 
 x:double
 1
 ;
 
-powLongUL#[skip:-8.11.99,reason:return type changed in 8.12]
+powLongUL
+required_feature: esql.pow_double
+
 row x = to_long(1) | eval x = pow(x, 9223372036854775808);
 
 x:double
 1
 ;
 
-powUnsignedLongUL#[skip:-8.11.99,reason:return type changed in 8.12]
+powUnsignedLongUL
+required_feature: esql.pow_double
+
 row x = to_ul(1) | eval x = pow(x, 9223372036854775808);
 
 x:double
@@ -675,14 +687,18 @@ x:double
 null
 ;
 
-powULInt#[skip:-8.11.99,reason:return type changed in 8.12]
+powULInt
+required_feature: esql.pow_double
+
 row x = pow(to_unsigned_long(9223372036854775807), 1);
 
 x:double
 9223372036854775807
 ;
 
-powULIntOverrun#[skip:-8.11.99,reason:return type changed in 8.12]
+powULIntOverrun
+required_feature: esql.pow_double
+
 ROW x = POW(9223372036854775808, 2)
 ;
 
@@ -702,14 +718,18 @@ x:double
 // end::pow2d-result[]
 ;
 
-powULLong#[skip:-8.11.99,reason:return type changed in 8.12]
+powULLong
+required_feature: esql.pow_double
+
 row x = to_long(10) | eval x = pow(to_unsigned_long(10), x);
 
 x:double
 10000000000
 ;
 
-powULLongOverrun#[skip:-8.11.99,reason:return type changed in 8.12]
+powULLongOverrun
+required_feature: esql.pow_double
+
 row x = to_long(100) | eval x = pow(to_unsigned_long(10), x);
 
 x:double

+ 3 - 1
x-pack/plugin/esql/qa/testFixtures/src/main/resources/spatial.csv-spec

@@ -2,7 +2,9 @@
 # Tests for GEO_POINT type
 #
 
-convertFromStringQuantize#[skip:-8.11.99, reason:spatial type geo_point only added in 8.12]
+convertFromStringQuantize
+required_feature: esql.geo_point
+
 row wkt = "POINT(42.97109629958868 14.7552534006536)"
 | eval pt = to_geopoint(wkt);
 

+ 37 - 13
x-pack/plugin/esql/qa/testFixtures/src/main/resources/string.csv-spec

@@ -300,7 +300,7 @@ emp_no:integer | name:keyword
 
 // Note: no matches in MV returned
 in
-required_feature: esql.mv_load
+required_feature: esql.mv_warn
 
 from employees | where job_positions in ("Internship", first_name) | keep emp_no, job_positions;
 ignoreOrder:true
@@ -491,7 +491,9 @@ emp_no:integer |positions:keyword
 10005          |null                                                                  |null                                                                  
 ;
 
-lessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+lessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where job_positions < "C" | keep emp_no, job_positions | sort emp_no;
 warning:Line 1:24: evaluation of [job_positions < \"C\"] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -502,7 +504,9 @@ emp_no:integer |job_positions:keyword
 10068          |Architect
 ;
 
-greaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+greaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where job_positions > "C" | keep emp_no, job_positions | sort emp_no | limit 6;
 warning:Line 1:24: evaluation of [job_positions > \"C\"] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -517,7 +521,9 @@ emp_no:integer |job_positions:keyword
 10021          |Support Engineer
 ;
 
-equalToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where job_positions == "Accountant" | keep emp_no, job_positions | sort emp_no;
 warning:Line 1:24: evaluation of [job_positions == \"Accountant\"] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -527,7 +533,9 @@ emp_no:integer |job_positions:keyword
 10025          |Accountant
 ;
 
-equalToOrEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+equalToOrEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where job_positions == "Accountant" or job_positions == "Tech Lead" | keep emp_no, job_positions | sort emp_no;
 warning:Line 1:24: evaluation of [job_positions] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -538,7 +546,9 @@ emp_no:integer |job_positions:keyword
 10025          |Accountant
 ;
 
-inMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+inMultivalue
+required_feature: esql.mv_warn
+
 from employees | where job_positions in ("Accountant", "Tech Lead") | keep emp_no, job_positions | sort emp_no;
 warning:Line 1:24: evaluation of [job_positions in (\"Accountant\", \"Tech Lead\")] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -549,7 +559,9 @@ emp_no:integer |job_positions:keyword
 10025          |Accountant
 ;
 
-notLessThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notLessThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(job_positions < "C") | keep emp_no, job_positions | sort emp_no | limit 6;
 warning:Line 1:24: evaluation of [not(job_positions < \"C\")] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [job_positions < \"C\"] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -564,7 +576,9 @@ emp_no:integer |job_positions:keyword
 10021          |Support Engineer
 ;
 
-notGreaterThanMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notGreaterThanMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(job_positions > "C") | keep emp_no, job_positions | sort emp_no | limit 6;
 warning:Line 1:24: evaluation of [not(job_positions > \"C\")] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [job_positions > \"C\"] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -575,7 +589,9 @@ emp_no:integer |job_positions:keyword
 10068          |Architect
 ;
 
-notEqualToMultivalue#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+notEqualToMultivalue
+required_feature: esql.mv_warn
+
 from employees | where not(job_positions == "Accountant") | keep emp_no, job_positions | sort emp_no | limit 6;
 warning:Line 1:24: evaluation of [not(job_positions == \"Accountant\")] failed, treating result as null. Only first 20 failures recorded.#[Emulated:Line 1:28: evaluation of [job_positions == \"Accountant\"] failed, treating result as null. Only first 20 failures recorded.]
 warning:Line 1:24: java.lang.IllegalArgumentException: single-value function encountered multi-value#[Emulated:Line 1:28: java.lang.IllegalArgumentException: single-value function encountered multi-value]
@@ -775,7 +791,9 @@ beta             | Kubernetes cluster       | beta k8s server
 beta             | Kubernetes cluster       | [beta k8s server, beta k8s server2]
 ;
 
-lengthOfText#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+lengthOfText
+required_feature: esql.mv_warn
+
 from hosts | where host=="epsilon" | eval l1 = length(host_group), l2 = length(description) | keep l1, l2;
 ignoreOrder:true
 warning:Line 1:73: evaluation of [length(description)] failed, treating result as null. Only first 20 failures recorded.
@@ -787,7 +805,9 @@ null                   | 19
 17                     | null
 ;
 
-startsWithText#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+startsWithText
+required_feature: esql.mv_warn
+
 from hosts | where host=="epsilon" | eval l1 = starts_with(host_group, host), l2 = starts_with(description, host) | keep l1, l2;
 ignoreOrder:true
 warning:Line 1:84: evaluation of [starts_with(description, host)] failed, treating result as null. Only first 20 failures recorded.
@@ -799,7 +819,9 @@ false                  | null
 false                  | null
 ;
 
-substringOfText#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+substringOfText
+required_feature: esql.mv_warn
+
 from hosts | where host=="epsilon" | eval l1 = substring(host_group, 0, 5), l2 = substring(description, 0, 5) | keep l1, l2;
 ignoreOrder:true
 warning:Line 1:82: evaluation of [substring(description, 0, 5)] failed, treating result as null. Only first 20 failures recorded.
@@ -811,7 +833,9 @@ Gatew                  | null
 Gatew                  | null
 ;
 
-concatOfText#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+concatOfText
+required_feature: esql.mv_warn
+
 from hosts | where host == "epsilon" | eval l1 = concat(host, "/", host_group), l2 = concat(host_group, "/", description) | sort l1 |  keep l1, l2;
 warning:Line 1:86: evaluation of [concat(host_group, \"/\", description)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:86: java.lang.IllegalArgumentException: single-value function encountered multi-value

+ 24 - 8
x-pack/plugin/esql/qa/testFixtures/src/main/resources/unsigned_long.csv-spec

@@ -45,7 +45,9 @@ from ul_logs | sort bytes_in desc nulls last, id | limit 12;
 2017-11-10T20:26:21.000Z|17067060651018256448|1722789377000665830 |67             |OK
 ;
 
-filterPushDownGT#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+filterPushDownGT
+required_feature: esql.mv_warn
+
 from ul_logs | where bytes_in >= to_ul(74330435873664882) | sort bytes_in | eval div = bytes_in / to_ul(pow(10., 15)) | keep bytes_in, div, id | limit 12;
 warning:Line 1:22: evaluation of [bytes_in >= to_ul(74330435873664882)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:22: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -65,7 +67,9 @@ warning:Line 1:22: java.lang.IllegalArgumentException: single-value function enc
 2703254959364209157|2703           |18
 ;
 
-filterPushDownRange#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+filterPushDownRange
+required_feature: esql.mv_warn
+
 from ul_logs | where bytes_in >= to_ul(74330435873664882) | where bytes_in <= to_ul(316080452389500167)  | sort bytes_in | eval div = bytes_in / to_ul(pow(10., 15)) | keep bytes_in, div, id | limit 12;
 warning:Line 1:22: evaluation of [bytes_in >= to_ul(74330435873664882)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:22: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -79,7 +83,9 @@ warning:#[Emulated:Line 1:67: java.lang.IllegalArgumentException: single-value f
 316080452389500167 |316            |25
 ;
 
-filterPushDownIn#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+filterPushDownIn
+required_feature: esql.mv_warn
+
 // TODO: testing framework doesn't perform implicit conversion to UL of given values, needs explicit conversion
 from ul_logs | where bytes_in in (to_ul(74330435873664882), to_ul(154551962150890564), to_ul(195161570976258241)) | sort bytes_in | keep bytes_in, id;
 warning:Line 1:22: evaluation of [bytes_in in (to_ul(74330435873664882), to_ul(154551962150890564), to_ul(195161570976258241))] failed, treating result as null. Only first 20 failures recorded.
@@ -91,7 +97,9 @@ warning:Line 1:22: java.lang.IllegalArgumentException: single-value function enc
 195161570976258241 |88
 ;
 
-filterOnFieldsEquality#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+filterOnFieldsEquality
+required_feature: esql.mv_warn
+
 from ul_logs | where bytes_in == bytes_out;
 warning:Line 1:22: evaluation of [bytes_in == bytes_out] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:22: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -100,7 +108,9 @@ warning:Line 1:22: java.lang.IllegalArgumentException: single-value function enc
 2017-11-10T21:12:17.000Z|16002960716282089759|16002960716282089759|34             |OK
 ;
 
-filterOnFieldsInequality#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+filterOnFieldsInequality
+required_feature: esql.mv_warn
+
 from ul_logs | sort id | where bytes_in < bytes_out | eval b_in = bytes_in / to_ul(pow(10.,15)), b_out = bytes_out / to_ul(pow(10.,15)) | limit 5;
 warning:Line 1:32: evaluation of [bytes_in < bytes_out] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:32: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -129,7 +139,9 @@ from ul_logs | stats c = count(bytes_in) by bytes_in | sort c desc, bytes_in des
 1              |18317075104972913640
 ;
 
-case#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+case
+required_feature: esql.mv_warn
+
 from ul_logs | where case(bytes_in == to_ul(154551962150890564), true, false);
 warning:Line 1:27: evaluation of [bytes_in == to_ul(154551962150890564)] failed, treating result as null. Only first 20 failures recorded.
 warning:Line 1:27: java.lang.IllegalArgumentException: single-value function encountered multi-value
@@ -152,7 +164,9 @@ FROM ul_logs
 2017-11-10T20:34:43.000Z | 17764691215469285192 | 1.75E19
 ;
 
-toDegrees#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+toDegrees
+required_feature: esql.mv_warn
+
 FROM ul_logs | WHERE bytes_in == bytes_out | EVAL deg = TO_DEGREES(bytes_in) | KEEP bytes_in, deg
 ;
 warning:Line 1:22: evaluation of [bytes_in == bytes_out] failed, treating result as null. Only first 20 failures recorded.
@@ -162,7 +176,9 @@ warning:Line 1:22: java.lang.IllegalArgumentException: single-value function enc
 16002960716282089759 | 9.169021087566165E20
 ;
 
-toRadians#[skip:-8.11.99, reason:Lucene multivalue warning introduced in 8.12 only]
+toRadians
+required_feature: esql.mv_warn
+
 FROM ul_logs | WHERE bytes_in == bytes_out | EVAL rad = TO_RADIANS(bytes_in) | KEEP bytes_in, rad
 ;
 warning:Line 1:22: evaluation of [bytes_in == bytes_out] failed, treating result as null. Only first 20 failures recorded.

+ 32 - 2
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/EsqlFeatures.java

@@ -14,13 +14,43 @@ import org.elasticsearch.features.NodeFeature;
 import java.util.Map;
 
 public class EsqlFeatures implements FeatureSpecification {
-    private static final NodeFeature MV_LOAD = new NodeFeature("esql.mv_load");
+    /**
+     * When we added the warnings for multivalued fields emitting {@code null}
+     * when they touched multivalued fields. Added in #102417.
+     */
+    private static final NodeFeature MV_WARN = new NodeFeature("esql.mv_warn");
+
+    /**
+     * Support for loading {@code geo_point} fields. Added in #102177.
+     */
+    private static final NodeFeature GEO_POINT_SUPPORT = new NodeFeature("esql.geo_point");
+
+    /**
+     * When we added the warnings when conversion functions fail. Like {@code TO_INT('foo')}.
+     * Added in ESQL-1183.
+     */
+    private static final NodeFeature CONVERT_WARN = new NodeFeature("esql.convert_warn");
+
+    /**
+     * When we flipped the return type of {@code POW} to always return a double. Changed
+     * in #102183.
+     */
+    private static final NodeFeature POW_DOUBLE = new NodeFeature("esql.pow_double");
+
+    // /**
+    // * Support for loading {@code geo_point} fields.
+    // */
+    // private static final NodeFeature GEO_SHAPE_SUPPORT = new NodeFeature("esql.geo_shape");
 
     @Override
     public Map<NodeFeature, Version> getHistoricalFeatures() {
         return Map.ofEntries(
             Map.entry(TransportEsqlStatsAction.ESQL_STATS_FEATURE, Version.V_8_11_0),
-            Map.entry(MV_LOAD, Version.V_8_12_0)
+            Map.entry(MV_WARN, Version.V_8_12_0),
+            Map.entry(GEO_POINT_SUPPORT, Version.V_8_12_0),
+            Map.entry(CONVERT_WARN, Version.V_8_12_0),
+            Map.entry(POW_DOUBLE, Version.V_8_12_0)
+            // Map.entry(GEO_SHAPE_SUPPORT, Version.V_8_13_0)
         );
     }
 }