@Override
public SQLBuffer toNativeJoin(Join join) {
if (join.getType() != Join.TYPE_OUTER)
return toTraditionalJoin(join);
ForeignKey fk = join.getForeignKey();
if (fk == null)
return null;
boolean inverse = join.isForeignKeyInversed();
Column[] from = (inverse) ? fk.getPrimaryKeyColumns()
: fk.getColumns();
Column[] to = (inverse) ? fk.getColumns()
: fk.getPrimaryKeyColumns();
// do column joins
SQLBuffer buf = new SQLBuffer(this);
int count = 0;
for (int i = 0; i < from.length; i++, count++) {
if (count > 0)
buf.append(" AND ");
buf.append(join.getAlias1()).append(".").append(from[i]);
buf.append(" = ");
buf.append(join.getAlias2()).append(".").append(to[i]);
buf.append("(+)");
}
// check constant joins
if (fk.getConstantColumns().length > 0)
throw new StoreException(_loc.get("oracle-constant",
join.getTable1(), join.getTable2())).setFatal(true);
if (fk.getConstantPrimaryKeyColumns().length > 0)
throw new StoreException(_loc.get("oracle-constant",
join.getTable1(), join.getTable2())).setFatal(true);
return buf;
}