// select Log -> Person -> Log
@Test
public void testSelectAndThenReverseJoin() throws Exception {
Session s = getSession();
s.getDatabase().getMainSchema().addReverseConstraints();
CommandBuilder cb = new CommandBuilder(s);
Table log = s.getDatabase().getMainSchema().findTableOrView("Log");
ConstraintReferential logToPerson = (ConstraintReferential) log
.getConstraintByName("parentfk");
Table person = s.getDatabase().getMainSchema().findTableOrView("PERSON");
ConstraintReferential personToLog = (ConstraintReferential) person
.getConstraintByName("Rev parentfk");
cb.getSelect().updateTable(log);
cb.fireDirty();
Comparison c = new Comparison(s);
cb.getSelect().addCondition(c);
cb.fireDirty();
ExpressionColumn left = (ExpressionColumn) c.getLeft();
left.selectConstraintRef(logToPerson);
cb.fireDirty();
assertEquals(
"SELECT \nFROM Log x0\nINNER JOIN PERSON x1 ON x0.parent = x1.id\nWHERE (x1.id = ?)",
cb.getSelect().getSQL(new ArrayList()));
left.selectConstraintRef(personToLog);
// ValueChangeEvent.fire(left, left.getColumn());
cb.getSelect().onDirty(); // TODO 20 need this to make unit test work, async issue?
cb.fireDirty(); // XXX bad encapsulation, causes garbage collection
assertEquals(
"SELECT \nFROM Log x0\nWHERE (x0.id = ?)",
cb.getSelect().getSQL(new ArrayList()));
}