@@ -105,6 +105,21 @@ emp_no:integer | language_code:integer | language_name:keyword
10510510003 | 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+
108123nonUniqueLeftKeyOnTheDataNode
109124required_capability: join_lookup_v11
110125
@@ -129,6 +144,10 @@ emp_no:integer | language_code:integer | language_name:keyword
12914410030 |0 | null
130145;
131146
147+ ###########################################################################
148+ # multiple match behavior with languages_lookup_non_unique_key index
149+ ###########################################################################
150+
132151nonUniqueRightKeyOnTheDataNode
133152required_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
167187emp_no:integer | language_code:integer | language_name:keyword | country:text
16818810001 | 1 | English | Canada
16918910001 | 1 | English | null
@@ -177,6 +197,31 @@ emp_no:integer | language_code:integer | language_name:keyword | country:text
17719710005 | 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+
180225nonUniqueRightKeyFromRow
181226required_capability: join_lookup_v11
182227
@@ -185,36 +230,22 @@ ROW language_code = 2
185230| DROP country.keyword
186231;
187232
233+ ignoreOrder:true
188234language_code:integer | country:text | language_name:keyword
1892352 | [Germany, Austria] | German
1902362 | Switzerland | German
1912372 | 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
210241required_capability: join_lookup_v11
211242
212243FROM 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
220251emp_no:integer
@@ -224,12 +255,12 @@ emp_no:integer
22425510001
225256;
226257
227- dropAllFieldsUsedInLookup
258+ dropAllFieldsUsedInLookupOnTheCoordinator
228259required_capability: join_lookup_v11
229260
230261FROM 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
24227310001
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
39051910092 | 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
12491281lookupIndexInFromRepeatedRowBug
1282+ // Test for https://github.com/elastic/elasticsearch/issues/118852
12501283required_capability: join_lookup_v11
12511284FROM languages_lookup_non_unique_key
12521285| WHERE language_code == 1
0 commit comments