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.
---