Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/133064.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 133064
summary: Mark LOOKUP JOIN as `ExecutesOn.Any` by default
area: ES|QL
type: bug
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ public boolean isRemote() {

@Override
public ExecuteLocation executesOn() {
return isRemote ? ExecuteLocation.REMOTE : ExecuteLocation.COORDINATOR;
return isRemote ? ExecuteLocation.REMOTE : ExecuteLocation.ANY;
}

private void checkRemoteJoin(Failures failures) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,40 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {

String err;

// Remote enrich is ok after limit
plan("""
FROM test
| LIMIT 10
| EVAL language_code = languages
| ENRICH _remote:languages ON language_code
| STATS count(*) BY language_name
""", analyzer);

// Remote enrich is ok after topn
plan("""
FROM test
| EVAL language_code = languages
| SORT languages
| ENRICH _remote:languages ON language_code
""", analyzer);
plan("""
FROM test
| EVAL language_code = languages
| SORT languages
| LIMIT 2
| ENRICH _remote:languages ON language_code
""", analyzer);

// Remote enrich is ok before pipeline breakers
plan("""
FROM test
| EVAL language_code = languages
| ENRICH _remote:languages ON language_code
| LIMIT 10
""", analyzer);

plan("""
FROM test
| EVAL language_code = languages
| ENRICH _remote:languages ON language_code
| STATS count(*) BY language_name
Expand All @@ -117,6 +141,13 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {
| LIMIT 10
""", analyzer);

plan("""
FROM test
| EVAL language_code = languages
| ENRICH _remote:languages ON language_code
| SORT language_name
""", analyzer);

err = error("""
FROM test
| EVAL language_code = languages
Expand Down Expand Up @@ -227,6 +258,9 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [CHANGE_POINT salary ON languages]@2:3"));
}

/**
* The validation should not trigger for remote enrich after a lookup join. Lookup joins can be executed anywhere.
*/
public void testRemoteEnrichAfterLookupJoin() {
EnrichResolution enrichResolution = new EnrichResolution();
loadEnrichPolicyResolution(
Expand Down Expand Up @@ -254,32 +288,29 @@ public void testRemoteEnrichAfterLookupJoin() {
| %s
""", lookupCommand), analyzer);

String err = error(Strings.format("""
plan(Strings.format("""
FROM test
| EVAL language_code = languages
| %s
| ENRICH _remote:languages ON language_code
""", lookupCommand), analyzer);
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));

err = error(Strings.format("""
plan(Strings.format("""
FROM test
| EVAL language_code = languages
| %s
| ENRICH _remote:languages ON language_code
| %s
""", lookupCommand, lookupCommand), analyzer);
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));

err = error(Strings.format("""
plan(Strings.format("""
FROM test
| EVAL language_code = languages
| %s
| EVAL x = 1
| MV_EXPAND language_code
| ENRICH _remote:languages ON language_code
""", lookupCommand), analyzer);
assertThat(err, containsString("6:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));
}

public void testRemoteLookupJoinWithPipelineBreaker() {
Expand Down