|
@@ -95,16 +95,40 @@ public class OptimizerVerificationTests extends AbstractLogicalPlanOptimizerTest
|
|
|
|
|
|
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
|
|
@@ -118,6 +142,13 @@ public class OptimizerVerificationTests extends AbstractLogicalPlanOptimizerTest
|
|
|
| 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
|
|
@@ -230,6 +261,9 @@ public class OptimizerVerificationTests extends AbstractLogicalPlanOptimizerTest
|
|
|
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(
|
|
@@ -257,24 +291,22 @@ public class OptimizerVerificationTests extends AbstractLogicalPlanOptimizerTest
|
|
|
| %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
|
|
@@ -282,7 +314,6 @@ public class OptimizerVerificationTests extends AbstractLogicalPlanOptimizerTest
|
|
|
| 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() {
|