Skip to content

Commit 819ec9e

Browse files
authored
ESQL: Fix lookup test result ordering (#120622) (#120695)
Fix #120600 Fix #120601 Fix #120602 Fix #120603 Fix #120658 Fix #120659 While I was at it, I moved the LOOKUP JOINs test cases with multiple right keys next to the test cases with multivalues and nulls in keys to be consistent and make stuff more easy to find. (cherry picked from commit b985b3e) # Conflicts: # muted-tests.yml
1 parent 3e71bb5 commit 819ec9e

File tree

1 file changed

+149
-116
lines changed

1 file changed

+149
-116
lines changed

x-pack/plugin/esql/qa/testFixtures/src/main/resources/lookup-join.csv-spec

Lines changed: 149 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,21 @@ emp_no:integer | language_code:integer | language_name:keyword
105105
10003 | 4 | German
106106
;
107107

108+
repeatedIndexOnFrom
109+
required_capability: join_lookup_v11
110+
111+
FROM languages_lookup
112+
| LOOKUP JOIN languages_lookup ON language_code
113+
| SORT language_code
114+
;
115+
116+
language_code:integer | language_name:keyword
117+
1 | English
118+
2 | French
119+
3 | Spanish
120+
4 | German
121+
;
122+
108123
nonUniqueLeftKeyOnTheDataNode
109124
required_capability: join_lookup_v11
110125

@@ -129,6 +144,10 @@ emp_no:integer | language_code:integer | language_name:keyword
129144
10030 |0 | null
130145
;
131146

147+
###########################################################################
148+
# multiple match behavior with languages_lookup_non_unique_key index
149+
###########################################################################
150+
132151
nonUniqueRightKeyOnTheDataNode
133152
required_capability: join_lookup_v11
134153

@@ -164,6 +183,7 @@ FROM employees
164183
| KEEP emp_no, language_code, language_name, country
165184
;
166185

186+
ignoreOrder:true
167187
emp_no:integer | language_code:integer | language_name:keyword | country:text
168188
10001 | 1 | English | Canada
169189
10001 | 1 | English | null
@@ -177,6 +197,31 @@ emp_no:integer | language_code:integer | language_name:keyword | country:text
177197
10005 | 5 | null | Atlantis
178198
;
179199

200+
nonUniqueRightKeyOnTheCoordinatorCorrectOrdering
201+
// Same as above, but don't ignore the order completely. At least the emp_no col must remain correctly ordered.
202+
required_capability: join_lookup_v11
203+
204+
FROM employees
205+
| SORT emp_no
206+
| LIMIT 5
207+
| EVAL language_code = emp_no % 10
208+
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
209+
| KEEP emp_no, language_code
210+
;
211+
212+
emp_no:integer | language_code:integer
213+
10001 | 1
214+
10001 | 1
215+
10001 | 1
216+
10001 | 1
217+
10002 | 2
218+
10002 | 2
219+
10002 | 2
220+
10003 | 3
221+
10004 | 4
222+
10005 | 5
223+
;
224+
180225
nonUniqueRightKeyFromRow
181226
required_capability: join_lookup_v11
182227

@@ -185,36 +230,22 @@ ROW language_code = 2
185230
| DROP country.keyword
186231
;
187232

233+
ignoreOrder:true
188234
language_code:integer | country:text | language_name:keyword
189235
2 | [Germany, Austria] | German
190236
2 | Switzerland | German
191237
2 | null | German
192238
;
193239

194-
repeatedIndexOnFrom
195-
required_capability: join_lookup_v11
196-
197-
FROM languages_lookup
198-
| LOOKUP JOIN languages_lookup ON language_code
199-
| SORT language_code
200-
;
201-
202-
language_code:integer | language_name:keyword
203-
1 | English
204-
2 | French
205-
3 | Spanish
206-
4 | German
207-
;
208-
209-
keepFieldNotInLookup
240+
keepFieldNotInLookupOnTheDataNode
210241
required_capability: join_lookup_v11
211242

212243
FROM employees
213244
| EVAL language_code = emp_no % 10
214245
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
215246
| WHERE emp_no == 10001
216247
| SORT emp_no
217-
| keep emp_no
248+
| KEEP emp_no
218249
;
219250

220251
emp_no:integer
@@ -224,12 +255,12 @@ emp_no:integer
224255
10001
225256
;
226257

227-
dropAllFieldsUsedInLookup
258+
dropAllFieldsUsedInLookupOnTheCoordinator
228259
required_capability: join_lookup_v11
229260

230261
FROM employees
231262
| WHERE emp_no == 10001
232-
| keep emp_no
263+
| KEEP emp_no
233264
| EVAL language_code = emp_no % 10
234265
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
235266
| DROP language_*, country*
@@ -242,6 +273,104 @@ emp_no:integer
242273
10001
243274
;
244275

276+
###########################################################################
277+
# null and multi-value behavior with languages_lookup_non_unique_key index
278+
###########################################################################
279+
280+
nullJoinKeyOnTheDataNode
281+
required_capability: join_lookup_v11
282+
283+
FROM employees
284+
| WHERE emp_no < 10004
285+
| EVAL language_code = emp_no % 10, language_code = CASE(language_code == 3, null, language_code)
286+
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
287+
| SORT emp_no, language_code, language_name
288+
| KEEP emp_no, language_code, language_name
289+
;
290+
291+
emp_no:integer | language_code:integer | language_name:keyword
292+
10001 | 1 | English
293+
10001 | 1 | English
294+
10001 | 1 | English
295+
10001 | 1 | null
296+
10002 | 2 | German
297+
10002 | 2 | German
298+
10002 | 2 | German
299+
10003 | null | null
300+
;
301+
302+
mvJoinKeyOnTheLookupIndex
303+
required_capability: join_lookup_v11
304+
305+
FROM employees
306+
| WHERE 10003 < emp_no AND emp_no < 10008
307+
| EVAL language_code = emp_no % 10
308+
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
309+
| SORT emp_no, language_name
310+
| KEEP emp_no, language_code, language_name
311+
;
312+
313+
emp_no:integer | language_code:integer | language_name:keyword
314+
10004 | 4 | Quenya
315+
10005 | 5 | null
316+
10006 | 6 | Mv-Lang
317+
10007 | 7 | Mv-Lang
318+
10007 | 7 | Mv-Lang2
319+
;
320+
321+
mvJoinKeyOnFrom
322+
required_capability: join_lookup_v11
323+
required_capability: join_lookup_skip_mv
324+
325+
FROM employees
326+
| WHERE emp_no < 10006
327+
| EVAL language_code = salary_change.int
328+
| LOOKUP JOIN languages_lookup ON language_code
329+
| SORT emp_no
330+
| KEEP emp_no, language_code, language_name
331+
;
332+
333+
emp_no:integer | language_code:integer | language_name:keyword
334+
10001 | 1 | English
335+
10002 | [-7, 11] | null
336+
10003 | [12, 14] | null
337+
10004 | [0, 1, 3, 13] | null
338+
10005 | [-2, 13] | null
339+
;
340+
341+
mvJoinKeyFromRow
342+
required_capability: join_lookup_v11
343+
required_capability: join_lookup_skip_mv
344+
345+
ROW language_code = [4, 5, 6, 7]
346+
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
347+
| KEEP language_code, language_name, country
348+
| SORT language_code, language_name, country
349+
;
350+
351+
language_code:integer | language_name:keyword | country:text
352+
[4, 5, 6, 7] | null | null
353+
;
354+
355+
mvJoinKeyFromRowExpanded
356+
required_capability: join_lookup_v11
357+
358+
ROW language_code = [4, 5, 6, 7, 8]
359+
| MV_EXPAND language_code
360+
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
361+
| KEEP language_code, language_name, country
362+
| SORT language_code, language_name, country
363+
;
364+
365+
language_code:integer | language_name:keyword | country:text
366+
4 | Quenya | null
367+
5 | null | Atlantis
368+
6 | Mv-Lang | Mv-Land
369+
7 | Mv-Lang | Mv-Land
370+
7 | Mv-Lang2 | Mv-Land2
371+
8 | Mv-Lang2 | Mv-Land2
372+
;
373+
245374
###############################################
246375
# Filtering tests with languages_lookup index
247376
###############################################
@@ -390,103 +519,6 @@ emp_no:integer | language_code:integer | language_name:keyword
390519
10092 | 1 | English
391520
;
392521

393-
###########################################################################
394-
# null and multi-value behavior with languages_lookup_non_unique_key index
395-
###########################################################################
396-
397-
nullJoinKeyOnTheDataNode
398-
required_capability: join_lookup_v11
399-
400-
FROM employees
401-
| WHERE emp_no < 10004
402-
| EVAL language_code = emp_no % 10, language_code = CASE(language_code == 3, null, language_code)
403-
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
404-
| SORT emp_no, language_code, language_name
405-
| KEEP emp_no, language_code, language_name
406-
;
407-
408-
emp_no:integer | language_code:integer | language_name:keyword
409-
10001 | 1 | English
410-
10001 | 1 | English
411-
10001 | 1 | English
412-
10001 | 1 | null
413-
10002 | 2 | German
414-
10002 | 2 | German
415-
10002 | 2 | German
416-
10003 | null | null
417-
;
418-
419-
mvJoinKeyOnTheLookupIndex
420-
required_capability: join_lookup_v11
421-
422-
FROM employees
423-
| WHERE 10003 < emp_no AND emp_no < 10008
424-
| EVAL language_code = emp_no % 10
425-
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
426-
| SORT emp_no, language_name
427-
| KEEP emp_no, language_code, language_name
428-
;
429-
430-
emp_no:integer | language_code:integer | language_name:keyword
431-
10004 | 4 | Quenya
432-
10005 | 5 | null
433-
10006 | 6 | Mv-Lang
434-
10007 | 7 | Mv-Lang
435-
10007 | 7 | Mv-Lang2
436-
;
437-
438-
mvJoinKeyOnFrom
439-
required_capability: join_lookup_v11
440-
441-
FROM employees
442-
| WHERE emp_no < 10006
443-
| EVAL language_code = salary_change.int
444-
| LOOKUP JOIN languages_lookup ON language_code
445-
| SORT emp_no
446-
| KEEP emp_no, language_code, language_name
447-
;
448-
449-
emp_no:integer | language_code:integer | language_name:keyword
450-
10001 | 1 | English
451-
10002 | [-7, 11] | null
452-
10003 | [12, 14] | null
453-
10004 | [0, 1, 3, 13] | null
454-
10005 | [-2, 13] | null
455-
;
456-
457-
mvJoinKeyFromRow
458-
required_capability: join_lookup_v11
459-
required_capability: join_lookup_skip_mv
460-
461-
ROW language_code = [4, 5, 6, 7]
462-
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
463-
| KEEP language_code, language_name, country
464-
| SORT language_code, language_name, country
465-
;
466-
467-
language_code:integer | language_name:keyword | country:text
468-
[4, 5, 6, 7] | null | null
469-
;
470-
471-
mvJoinKeyFromRowExpanded
472-
required_capability: join_lookup_v11
473-
474-
ROW language_code = [4, 5, 6, 7, 8]
475-
| MV_EXPAND language_code
476-
| LOOKUP JOIN languages_lookup_non_unique_key ON language_code
477-
| KEEP language_code, language_name, country
478-
| SORT language_code, language_name, country
479-
;
480-
481-
language_code:integer | language_name:keyword | country:text
482-
4 | Quenya | null
483-
5 | null | Atlantis
484-
6 | Mv-Lang | Mv-Land
485-
7 | Mv-Lang | Mv-Land
486-
7 | Mv-Lang2 | Mv-Land2
487-
8 | Mv-Lang2 | Mv-Land2
488-
;
489-
490522
###########################################################################
491523
# nested field join behavior with languages_nested_fields index
492524
###########################################################################
@@ -1247,6 +1279,7 @@ ignoreOrder:true
12471279
;
12481280

12491281
lookupIndexInFromRepeatedRowBug
1282+
// Test for https://github.com/elastic/elasticsearch/issues/118852
12501283
required_capability: join_lookup_v11
12511284
FROM languages_lookup_non_unique_key
12521285
| WHERE language_code == 1

0 commit comments

Comments
 (0)