package org.araqne.logdb.query.command;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.araqne.logdb.Row;
import org.araqne.logdb.RowBatch;
import org.araqne.logdb.RowPipe;
import org.araqne.logdb.query.command.Join.JoinType;
import org.araqne.logdb.query.command.Sort.SortField;
import org.araqne.logdb.query.parser.JsonParser;
import org.junit.Test;
public class SortMergeJoinerTest {
private static RowBatch jsonToRowBatch(String json) {
JsonParser parser = new JsonParser();
Json rJson = (Json) parser.parse(null, json);
RowBatch rowBatch = new RowBatch();
rowBatch.rows = rJson.getLogs().toArray(new Row[0]);
rowBatch.size = rowBatch.rows.length;
return rowBatch;
}
private static Set<Map<String, Object>> jsonToMaps(String json) {
JsonParser parser = new JsonParser();
Json sJson = (Json) parser.parse(null, json);
Set<Map<String, Object>> maps = new HashSet<Map<String, Object>>();
for (Row row : sJson.getLogs()) {
maps.add(row.map());
}
return maps;
}
private static void runInnerJoin(String rTableJson, String sTableJson, String expectedResultJson) throws IOException {
SortField[] sortFields = { new SortField("_id") };
runInnerJoin(rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runInnerJoin(String rTableJson, String sTableJson, String expectedResultJson, SortField[] sortFields)
throws IOException {
runJoin(JoinType.Inner, rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runLeftJoin(String rTableJson, String sTableJson, String expectedResultJson) throws IOException {
SortField[] sortFields = { new SortField("_id") };
runLeftJoin(rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runLeftJoin(String rTableJson, String sTableJson, String expectedResultJson, SortField[] sortFields)
throws IOException {
runJoin(JoinType.Left, rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runRightJoin(String rTableJson, String sTableJson, String expectedResultJson) throws IOException {
SortField[] sortFields = { new SortField("_id") };
runRightJoin(rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runRightJoin(String rTableJson, String sTableJson, String expectedResultJson, SortField[] sortFields)
throws IOException {
runJoin(JoinType.Right, rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runFullJoin(String rTableJson, String sTableJson, String expectedResultJson) throws IOException {
SortField[] sortFields = { new SortField("_id") };
runFullJoin(rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runFullJoin(String rTableJson, String sTableJson, String expectedResultJson, SortField[] sortFields)
throws IOException {
runJoin(JoinType.Full, rTableJson, sTableJson, expectedResultJson, sortFields);
}
private static void runJoin(JoinType joinType, String rTableJson, String sTableJson, String expectedResultJson, SortField[] sortFields)
throws IOException {
RowBatch unsortedR = jsonToRowBatch(rTableJson);
Set<Map<String, Object>> unsortedS = jsonToMaps(sTableJson);
RowPipeForTest output = new RowPipeForTest();
SortMergeJoiner sortMergeJoiner = new SortMergeJoiner(joinType, sortFields, new SortMergeJoinerCallback(output));
sortMergeJoiner.setS(unsortedS.iterator());
for (Row row : unsortedR.rows) {
sortMergeJoiner.setR(row);
}
sortMergeJoiner.merge();
Set<Map<String, Object>> expectedResult = jsonToMaps(expectedResultJson);
for (Row row : output.getRows()) {
assertTrue(expectedResult.contains(row.map()));
}
assertEquals(expectedResult.size(), output.getRows().size());
}
@Test
public void sortMergeJoinerTest1() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'},"
+ "{'_id': 1, 'fieldA': 'A4'}"
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}]\"";
String innerJoinResult = "json \"["
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "]\"";
String leftJoinResult = "json \"["
+ "{'fieldA' = 'A1', _id=0}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1', 'fieldA' : 'A2'}, "
+ "{'_id': 1, 'fieldC': 'C1', 'fieldA' : 'A4'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A2'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A4'}, "
+ "{'_id': 1, 'fieldC': 'C5', 'fieldA' : 'A2'}, "
+ "{'_id': 1, 'fieldC': 'C5', 'fieldA' : 'A4'}, "
+ "{'_id': 2, 'fieldC': 'C2', 'fieldA' : 'A3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'fieldA' = 'A1', _id=0}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "{'_id'= 3, 'fieldC'= 'C4'}, "
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest2() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'},"
+ "{'_id': 1, 'fieldA': 'A4'}"
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}]\"";
String innerJoinResult = "json \"["
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "]\"";
String leftJoinResult = "json \"["
+ "{'fieldA' = 'A1', _id=0}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2}, "
+ "]\"";
String rightJoinResult = "json \"["
+ "{_id=1, 'fieldC' = 'C1', 'fieldA' = 'A2'}, "
+ "{_id=1, 'fieldC' = 'C1', 'fieldA' = 'A4'}, "
+ "{_id=1, 'fieldC' = 'C3', 'fieldA' = 'A2'}, "
+ "{_id=1, 'fieldC' = 'C3', 'fieldA' = 'A4'}, "
+ "{_id=1, 'fieldC' = 'C5', 'fieldA' = 'A2'}, "
+ "{_id=1, 'fieldC' = 'C5', 'fieldA' = 'A4'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'fieldA' = 'A1', _id=0}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2}, "
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest3() throws IOException {
String rTableJson = "json \"["
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}]\"";
String innerJoinResult = "json \"["
+ "]\"";
String leftJoinResult = "json \"["
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest4() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'},"
+ "{'_id': 1, 'fieldA': 'A4'}"
+ "]\"";
String sTableJson = "json \"["
+ "]\"";
String innerJoinResult = "json \"["
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 1, 'fieldA': 'A4'},"
+ "{'_id': 2, 'fieldA': 'A3'},"
+ "]\"";
String rightJoinResult = "json \"["
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 1, 'fieldA': 'A4'},"
+ "{'_id': 2, 'fieldA': 'A3'},"
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest5() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}, "
+ "{'_id': 3, 'fieldA': 'A5'}, "
+ "{'_id': 3, 'fieldA': 'A6'}, "
+ "{'_id': 4, 'fieldA': 'A7'}, "
+ "{'_id': 4, 'fieldA': 'A8'}, "
+ "{'_id': 5, 'fieldA': 'A9'}, "
+ "{'_id': 5, 'fieldA': 'A10'}, "
+ "{'_id': 5, 'fieldA': 'A11'}"
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}]\"";
String innerJoinResult = "json \"["
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "{'fieldA' = 'A5', _id=3, 'fieldC' = 'C4'}, "
+ "{'fieldA' = 'A6', _id=3, 'fieldC' = 'C4'}, "
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "{'fieldA' = 'A5', _id=3, 'fieldC' = 'C4'}, "
+ "{'fieldA' = 'A6', _id=3, 'fieldC' = 'C4'}, "
+ "{'_id': 4, 'fieldA': 'A7'}, "
+ "{'_id': 4, 'fieldA': 'A8'}, "
+ "{'_id': 5, 'fieldA': 'A9'}, "
+ "{'_id': 5, 'fieldA': 'A10'}, "
+ "{'_id': 5, 'fieldA': 'A11'}"
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id' = 1, 'fieldC' = 'C1', 'fieldA' = 'A2'}, "
+ "{'_id' = 1, 'fieldC' = 'C1', 'fieldA' = 'A4'}, "
+ "{'_id' = 1, 'fieldC' = 'C3', 'fieldA' = 'A2'}, "
+ "{'_id' = 1, 'fieldC' = 'C3', 'fieldA' = 'A4'}, "
+ "{'_id' = 1, 'fieldC' = 'C5', 'fieldA' = 'A2'}, "
+ "{'_id' = 1, 'fieldC' = 'C5', 'fieldA' = 'A4'}, "
+ "{'_id' = 2, 'fieldC' = 'C2', 'fieldA' = 'A3'}, "
+ "{'_id' = 3, 'fieldC' = 'C4', 'fieldA' = 'A5'}, "
+ "{'_id' = 3, 'fieldC' = 'C4', 'fieldA' = 'A6'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "{'fieldA' = 'A5', _id=3, 'fieldC' = 'C4'}, "
+ "{'fieldA' = 'A6', _id=3, 'fieldC' = 'C4'}, "
+ "{'_id': 4, 'fieldA': 'A7'}, "
+ "{'_id': 4, 'fieldA': 'A8'}, "
+ "{'_id': 5, 'fieldA': 'A9'}, "
+ "{'_id': 5, 'fieldA': 'A10'}, "
+ "{'_id': 5, 'fieldA': 'A11'}"
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest6() throws IOException {
String rTableJson = "json \"["
+ "{'temp' : 0, '_id': 0, 'fieldA': 'A1'}, "
+ "{'temp' : 0, '_id': 1, 'fieldA': 'A2'}, "
+ "{'temp' : 0, '_id': 2, 'fieldA': 'A3'}, "
+ "{'temp' : 0, '_id': 1, 'fieldA': 'A4'}, "
+ "]\"";
String sTableJson = "json \"["
+ "{'temp' : 0, '_id': 1, 'fieldC': 'C1'}, "
+ "{'temp' : 0, '_id': 2, 'fieldC': 'C2'}, "
+ "{'temp' : 0, '_id': 1, 'fieldC': 'C3'}, "
+ "{'temp' : 0, '_id': 3, 'fieldC': 'C4'}, "
+ "{'temp' : 0, '_id': 1, 'fieldC': 'C5'}]\"";
String innerJoinResult = "json \"["
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "]\"";
String leftJoinResult = "json \"["
+ "{'temp' : 0, '_id': 0, 'fieldA': 'A1'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "]\"";
String rightJoinResult = "json \"["
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C1', 'fieldA' = 'A2'}, "
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C1', 'fieldA' = 'A4'}, "
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C3', 'fieldA' = 'A2'}, "
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C3', 'fieldA' = 'A4'}, "
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C5', 'fieldA' = 'A2'}, "
+ "{'temp' = 0, '_id'=1, 'fieldC' = 'C5', 'fieldA' = 'A4'}, "
+ "{'temp' = 0, '_id'=2, 'fieldC' = 'C2', 'fieldA' = 'A3'}, "
+ "{'temp' = 0, '_id'=3, 'fieldC' = 'C4'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'temp' : 0, '_id': 0, 'fieldA': 'A1'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A2', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C1'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C3'}, "
+ "{'temp' : 0, 'fieldA' = 'A4', _id=1, 'fieldC' = 'C5'}, "
+ "{'temp' : 0, 'fieldA' = 'A3', _id=2, 'fieldC' = 'C2'}, "
+ "{'temp' = 0, '_id'=3, 'fieldC' = 'C4'}, "
+ "]\"";
SortField[] sortFields = { new SortField("_id"), new SortField("temp") };
runInnerJoin(rTableJson, sTableJson, innerJoinResult, sortFields);
runLeftJoin(rTableJson, sTableJson, leftJoinResult, sortFields);
runRightJoin(rTableJson, sTableJson, rightJoinResult, sortFields);
runFullJoin(rTableJson, sTableJson, fullJoinResult, sortFields);
}
@Test
public void sortMergeJoinerTest7() throws IOException {
String rTableJson = "json \"["
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'}"
+ "]\"";
String sTableJson = "json \"["
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'}"
+ "]\"";
String innerJoinResult = "json \"["
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id'=4, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0000F07EA104 80 - 121.225.264.29 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=2, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00022AB01065 80 - 121.265.247.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=8, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0002724BC802 80 - 61.255.240.288 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=5, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0007E913F5AD 80 - 103.241.247.26 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=9, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000B6AD52272 80 - 121.0.228.218 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=3, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=000FB0743301 80 - 123.204.294.39 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=6, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=00155889D370 80 - 121.261.33.20 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=1, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=001921F08323 80 - 125.240.40.73 UtilMind+HTTPGet 404 0 3'},"
+ "{'_id'=7, 'line'='2007-10-13 06:20:46 W3SVC1 123.223.21.233 GET /solution/1.982/asp/strawlv01982_msg.asp t=1&m=0019DB807868 80 - 124.53.263.24 UtilMind+HTTPGet 404 0 3'},"
+ "]\"";
SortField[] sortFields = { new SortField("line"), new SortField("_id") };
runInnerJoin(rTableJson, sTableJson, innerJoinResult, sortFields);
runLeftJoin(rTableJson, sTableJson, leftJoinResult, sortFields);
runRightJoin(rTableJson, sTableJson, rightJoinResult, sortFields);
runFullJoin(rTableJson, sTableJson, fullJoinResult, sortFields);
}
@Test
public void sortMergeJoinerTest8() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}]\"";
String sTableJson = "json \"["
+ "]\"";
String innerJoinResult = "json \"["
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String rightJoinResult = "json \"["
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
runInnerJoin(rTableJson, sTableJson, innerJoinResult);
runLeftJoin(rTableJson, sTableJson, leftJoinResult);
runRightJoin(rTableJson, sTableJson, rightJoinResult);
runFullJoin(rTableJson, sTableJson, fullJoinResult);
}
@Test
public void sortMergeJoinerTest9() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}, "
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String innerJoinResult = "json \"["
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}"
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}, "
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
SortField[] sortFields = { new SortField("line"), new SortField("NONE"), new SortField("id") };
runInnerJoin(rTableJson, sTableJson, innerJoinResult, sortFields);
runLeftJoin(rTableJson, sTableJson, leftJoinResult, sortFields);
runRightJoin(rTableJson, sTableJson, rightJoinResult, sortFields);
runFullJoin(rTableJson, sTableJson, fullJoinResult, sortFields);
}
@Test
public void sortMergeJoinerTest10() throws IOException {
String rTableJson = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldA': 'A2', 'intersect' : 'true'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}, "
+ "]\"";
String sTableJson = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'intersect' : 'true'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String innerJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A2', 'intersect' : 'true'}, "
+ "]\"";
String leftJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A2', 'intersect' : 'true'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}"
+ "]\"";
String rightJoinResult = "json \"["
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A2', 'intersect' : 'true'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
String fullJoinResult = "json \"["
+ "{'_id': 0, 'fieldA': 'A1'}, "
+ "{'_id': 2, 'fieldA': 'A3'}, "
+ "{'_id': 1, 'fieldA': 'A4'}, "
+ "{'_id': 1, 'fieldC': 'C1'}, "
+ "{'_id': 2, 'fieldC': 'C2'}, "
+ "{'_id': 1, 'fieldC': 'C3', 'fieldA' : 'A2', 'intersect' : 'true'}, "
+ "{'_id': 3, 'fieldC': 'C4'}, "
+ "{'_id': 1, 'fieldC': 'C5'}, "
+ "]\"";
SortField[] sortFields = { new SortField("intersect")};
runInnerJoin(rTableJson, sTableJson, innerJoinResult, sortFields);
runLeftJoin(rTableJson, sTableJson, leftJoinResult, sortFields);
runRightJoin(rTableJson, sTableJson, rightJoinResult, sortFields);
runFullJoin(rTableJson, sTableJson, fullJoinResult, sortFields);
}
public static class SortMergeJoinerCallback implements SortMergeJoinerListener {
RowPipe rowPipe;
SortMergeJoinerCallback(RowPipeForTest rowPipe) {
this.rowPipe = rowPipe;
}
@Override
public void onPushPipe(Row row) {
rowPipe.onRow(row);
}
}
public static class RowPipeForTest implements RowPipe {
private List<Row> rows;
private RowPipeForTest() {
rows = new ArrayList<Row>();
}
@Override
public boolean isThreadSafe() {
return false;
}
@Override
public void onRow(Row row) {
rows.add(row);
}
@Override
public void onRowBatch(RowBatch rowBatch) {
if (rowBatch.selectedInUse) {
for (int i = 0; i < rowBatch.size; i++) {
Row row = rowBatch.rows[rowBatch.selected[i]];
onRow(row);
}
} else {
for (int i = 0; i < rowBatch.size; i++) {
Row row = rowBatch.rows[i];
onRow(row);
}
}
}
public List<Row> getRows() {
return rows;
}
}
}