67
67
import static org .hamcrest .Matchers .equalTo ;
68
68
import static org .hamcrest .Matchers .instanceOf ;
69
69
import static org .hamcrest .Matchers .matchesRegex ;
70
+ import static org .hamcrest .Matchers .startsWith ;
70
71
71
72
//@TestLogging(value = "org.elasticsearch.xpack.esql:TRACE,org.elasticsearch.compute:TRACE", reason = "debug")
72
73
public class VerifierTests extends ESTestCase {
@@ -1058,9 +1059,6 @@ public void testSpatialSort() {
1058
1059
"1:136: cannot sort on cartesian_shape" ,
1059
1060
error (prefix + "| EVAL shape = TO_CARTESIANSHAPE(wkt) | limit 5 | sort shape" )
1060
1061
);
1061
- assertEquals ("1:143: cannot sort on geohash" , error (prefix + "| EVAL grid = ST_GEOHASH(TO_GEOPOINT(wkt),1) | limit 5 | sort grid" ));
1062
- assertEquals ("1:143: cannot sort on geotile" , error (prefix + "| EVAL grid = ST_GEOTILE(TO_GEOPOINT(wkt),1) | limit 5 | sort grid" ));
1063
- assertEquals ("1:142: cannot sort on geohex" , error (prefix + "| EVAL grid = ST_GEOHEX(TO_GEOPOINT(wkt),1) | limit 5 | sort grid" ));
1064
1062
var airports = AnalyzerTestUtils .analyzer (loadMapping ("mapping-airports.json" , "airports" ));
1065
1063
var airportsWeb = AnalyzerTestUtils .analyzer (loadMapping ("mapping-airports_web.json" , "airports_web" ));
1066
1064
var countriesBbox = AnalyzerTestUtils .analyzer (loadMapping ("mapping-countries_bbox.json" , "countries_bbox" ));
@@ -1069,15 +1067,19 @@ public void testSpatialSort() {
1069
1067
assertEquals ("1:36: cannot sort on cartesian_point" , error ("FROM airports_web | LIMIT 5 | sort location" , airportsWeb ));
1070
1068
assertEquals ("1:38: cannot sort on geo_shape" , error ("FROM countries_bbox | LIMIT 5 | sort shape" , countriesBbox ));
1071
1069
assertEquals ("1:42: cannot sort on cartesian_shape" , error ("FROM countries_bbox_web | LIMIT 5 | sort shape" , countriesBboxWeb ));
1072
- assertEquals (
1073
- "1:67: cannot sort on geohash" ,
1074
- error ("FROM airports | LIMIT 5 | EVAL g = ST_GEOHASH(location, 1) | sort g" , airports )
1075
- );
1076
- assertEquals (
1077
- "1:67: cannot sort on geotile" ,
1078
- error ("FROM airports | LIMIT 5 | EVAL g = ST_GEOTILE(location, 1) | sort g" , airports )
1079
- );
1080
- assertEquals ("1:66: cannot sort on geohex" , error ("FROM airports | LIMIT 5 | EVAL g = ST_GEOHEX(location, 1) | sort g" , airports ));
1070
+ for (String grid : new String [] { "geohash" , "geotile" , "geohex" }) {
1071
+ String gridFunc = "ST_" + grid .toUpperCase (Locale .ROOT );
1072
+ String literalQuery = prefix + "| EVAL grid = " + gridFunc + "(TO_GEOPOINT(wkt),1) | limit 5 | sort grid" ;
1073
+ String indexQuery = "FROM airports | LIMIT 5 | EVAL grid = " + gridFunc + "(location, 1) | sort grid" ;
1074
+ String literalError = "1:" + (136 + grid .length ()) + ": cannot sort on " + grid ;
1075
+ String indexError = "1:" + (63 + grid .length ()) + ": cannot sort on " + grid ;
1076
+ if (EsqlCapabilities .Cap .SPATIAL_GRID_TYPES .isEnabled () == false ) {
1077
+ literalError = "1:95: Unknown function [" + gridFunc + "]" ;
1078
+ indexError = "1:39: Unknown function [" + gridFunc + "]" ;
1079
+ }
1080
+ assertThat (grid , error (literalQuery ), startsWith (literalError ));
1081
+ assertThat (grid , error (indexQuery , airports ), startsWith (indexError ));
1082
+ }
1081
1083
}
1082
1084
1083
1085
public void testSourceSorting () {
@@ -2073,7 +2075,9 @@ public void testChangePoint() {
2073
2075
public void testChangePoint_keySortable () {
2074
2076
assumeTrue ("change_point must be enabled" , EsqlCapabilities .Cap .CHANGE_POINT .isEnabled ());
2075
2077
List <DataType > sortableTypes = List .of (BOOLEAN , DOUBLE , DATE_NANOS , DATETIME , INTEGER , IP , KEYWORD , LONG , UNSIGNED_LONG , VERSION );
2076
- List <DataType > unsortableTypes = List .of (CARTESIAN_POINT , CARTESIAN_SHAPE , GEO_POINT , GEO_SHAPE , GEOHASH , GEOTILE , GEOHEX );
2078
+ List <DataType > unsortableTypes = EsqlCapabilities .Cap .SPATIAL_GRID_TYPES .isEnabled ()
2079
+ ? List .of (CARTESIAN_POINT , CARTESIAN_SHAPE , GEO_POINT , GEO_SHAPE , GEOHASH , GEOTILE , GEOHEX )
2080
+ : List .of (CARTESIAN_POINT , CARTESIAN_SHAPE , GEO_POINT , GEO_SHAPE );
2077
2081
for (DataType type : sortableTypes ) {
2078
2082
query (Strings .format ("ROW key=NULL::%s, value=0\n | CHANGE_POINT value ON key" , type ));
2079
2083
}
@@ -2088,21 +2092,23 @@ public void testChangePoint_keySortable() {
2088
2092
public void testChangePoint_valueNumeric () {
2089
2093
assumeTrue ("change_point must be enabled" , EsqlCapabilities .Cap .CHANGE_POINT .isEnabled ());
2090
2094
List <DataType > numericTypes = List .of (DOUBLE , INTEGER , LONG , UNSIGNED_LONG );
2091
- List <DataType > nonNumericTypes = List .of (
2092
- BOOLEAN ,
2093
- CARTESIAN_POINT ,
2094
- CARTESIAN_SHAPE ,
2095
- DATE_NANOS ,
2096
- DATETIME ,
2097
- GEO_POINT ,
2098
- GEO_SHAPE ,
2099
- GEOHASH ,
2100
- GEOTILE ,
2101
- GEOHEX ,
2102
- IP ,
2103
- KEYWORD ,
2104
- VERSION
2105
- );
2095
+ List <DataType > nonNumericTypes = EsqlCapabilities .Cap .SPATIAL_GRID_TYPES .isEnabled ()
2096
+ ? List .of (
2097
+ BOOLEAN ,
2098
+ CARTESIAN_POINT ,
2099
+ CARTESIAN_SHAPE ,
2100
+ DATE_NANOS ,
2101
+ DATETIME ,
2102
+ GEO_POINT ,
2103
+ GEO_SHAPE ,
2104
+ GEOHASH ,
2105
+ GEOTILE ,
2106
+ GEOHEX ,
2107
+ IP ,
2108
+ KEYWORD ,
2109
+ VERSION
2110
+ )
2111
+ : List .of (BOOLEAN , CARTESIAN_POINT , CARTESIAN_SHAPE , DATE_NANOS , DATETIME , GEO_POINT , GEO_SHAPE , IP , KEYWORD , VERSION );
2106
2112
for (DataType type : numericTypes ) {
2107
2113
query (Strings .format ("ROW key=0, value=NULL::%s\n | CHANGE_POINT value ON key" , type ));
2108
2114
}
0 commit comments