Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/1059#discussion_r158593827 --- Diff: exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java --- @@ -253,4 +259,52 @@ public void testDrill4196() throws Exception { .baselineValues(6000*800L) .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 testMergeLeftJoinWithEmptyTable() 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 testMergeInnerJoinWithEmptyTable() 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 testMergeRightJoinWithEmptyTable() 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 right outer join dfs.`dept.json` as dept on dept.manager = emp.`last_name`"); + assert( query.run().recordCount() == 0); + } catch (RuntimeException ex) { + fail (ex.getMessage()); --- End diff -- Suggestion: this is the sixth copy of basically the same test, with only the query text differing. Again, duplicate code is costly and is to be avoided. Now, once the tests convert to using a single server, most of the code here will disappear. More will disappear if the test file is created once. Otherwise, it would be better to define a test function, then simply have each test call the test function with the required statement.
---