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
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ public List<ProjectionContext> visitCall(CallExpression call, Void context)
newArguments);

if (local) {
if (processedArguments.size() == 1 && !processedArguments.get(0).isRemote()) {
if (processedArguments.size() == 0 || (processedArguments.size() == 1 && !processedArguments.get(0).isRemote())) {
// This call and all its arguments are local
return ImmutableList.of();
}
Expand Down Expand Up @@ -330,7 +330,7 @@ public List<ProjectionContext> visitSpecialForm(SpecialFormExpression specialFor
ImmutableList.Builder<RowExpression> newArgumentsBuilder = ImmutableList.builder();
List<ProjectionContext> processedArguments = processArguments(specialForm.getArguments(), newArgumentsBuilder, true);
List<RowExpression> newArguments = newArgumentsBuilder.build();
if (processedArguments.size() == 1 && !processedArguments.get(0).isRemote()) {
if (processedArguments.size() == 0 || (processedArguments.size() == 1 && !processedArguments.get(0).isRemote())) {
// Arguments do not contain remote projection
return ImmutableList.of();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,10 @@ void testSpecialForm()
.put(planBuilder.variable("b"), planBuilder.rowExpression("x IS NULL OR y IS NULL"))
.put(planBuilder.variable("c"), planBuilder.rowExpression("IF(abs(unittest.memory.remote_foo()) > 0, x, y)"))
.put(planBuilder.variable("d"), planBuilder.rowExpression("unittest.memory.remote_foo(x + y, abs(x))"))
.put(planBuilder.variable("e"), planBuilder.rowExpression("TRUE OR FALSE"))
.build(), new PlanVariableAllocator(planBuilder.getTypes().allVariables()));
assertEquals(rewritten.size(), 4);
assertEquals(rewritten.get(3).getProjections().size(), 4);
assertEquals(rewritten.get(3).getProjections().size(), 5);
}

@Test
Expand Down Expand Up @@ -223,10 +224,10 @@ void testMixedExpressionRewrite()
p.variable("y", INTEGER);
return p.project(
Assignments.builder()
.put(p.variable("a"), p.rowExpression("unittest.memory.remote_foo(1, y + unittest.memory.remote_foo(x))")) // identity
.put(p.variable("b"), p.rowExpression("x IS NULL OR y IS NULL")) // complex expression referenced multiple times
.put(p.variable("c"), p.rowExpression("abs(unittest.memory.remote_foo()) > 0")) // complex expression referenced multiple times
.put(p.variable("d"), p.rowExpression("unittest.memory.remote_foo(x + y, abs(x))")) // literal referenced multiple times
.put(p.variable("a"), p.rowExpression("unittest.memory.remote_foo(1, y + unittest.memory.remote_foo(x))"))
.put(p.variable("b"), p.rowExpression("x IS NULL OR y IS NULL"))
.put(p.variable("c"), p.rowExpression("abs(unittest.memory.remote_foo()) > 0"))
.put(p.variable("d"), p.rowExpression("unittest.memory.remote_foo(x + y, abs(1))"))
.build(),
p.values(p.variable("x", INTEGER), p.variable("y", INTEGER)));
})
Expand Down Expand Up @@ -260,7 +261,7 @@ void testMixedExpressionRewrite()
.put("expr", PlanMatchPattern.expression("1"))
.put("b", PlanMatchPattern.expression("x IS NULL OR y is NULL"))
.put("add_10", PlanMatchPattern.expression("x + y"))
.put("abs_12", PlanMatchPattern.expression("abs(x)"))
.put("abs_12", PlanMatchPattern.expression("abs(1)"))
.build(),
values(ImmutableMap.of("x", 0, "y", 1)))))));
}
Expand Down