Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/1059#discussion_r158593785
--- Diff:
exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestHashJoinAdvanced.java
---
@@ -160,4 +166,51 @@ public void testJoinWithMapAndDotField() throws
Exception {
.baselineValues("1", "2", "1", null, "a")
.go();
}
+
+ private void buildFile(String fileName, String[] data, File testDir)
throws IOException {
+ try(PrintWriter out = new PrintWriter(new FileWriter(new File(testDir,
fileName)))) {
+ for (String line : data) {
+ out.println(line);
+ }
+ }
+ }
+
+ @Test
+ public void testHashLeftJoinWithEmptyTable() throws Exception {
+ try (ClusterFixture cluster =
ClusterFixture.builder(dirTestWatcher).build();
+ ClientFixture client = cluster.clientFixture()) {
+ File testDir = dirTestWatcher.getRootDir();
+ buildFile("dept.json", new String[0], testDir);
+ QueryBuilder query = client.queryBuilder().sql("select * from
cp.`employee.json` emp left outer join dfs.`dept.json` as dept on dept.manager
= emp.`last_name`");
+ assert(query.run().recordCount() == 1155);
+ } catch (RuntimeException ex) {
+ fail(ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testHashInnerJoinWithEmptyTable() throws Exception {
+ try (ClusterFixture cluster =
ClusterFixture.builder(dirTestWatcher).build();
+ ClientFixture client = cluster.clientFixture()) {
+ File testDir = dirTestWatcher.getRootDir();
+ buildFile("dept.json", new String[0], testDir);
+ QueryBuilder query = client.queryBuilder().sql("select * from
cp.`employee.json` emp inner join dfs.`dept.json` as dept on dept.manager =
emp.`last_name`");
+ assert(query.run().recordCount() == 0);
+ } catch (RuntimeException ex) {
+ fail(ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testHashRightJoinWithEmptyTable() throws Exception {
+ try (ClusterFixture cluster =
ClusterFixture.builder(dirTestWatcher).build();
--- End diff --
All three tests use the same server setup. The current code starts the
server three times. That's fine if the tests needed a different config for
each. But, here it would be faster to derive from `ClusterTest` and use the
methods provided to start the server once, sharing the same server for all
tests.
Upon further inspection, there is a deeper problem. Two servers are
running. See note below.
---