public String details() { return "[#" + index + " " + mode + " " + rel.name() + " (" + from + "/" + from2 + "->" + to + "/" + to2 + ")"; }
int fromN = join.rel.fromSize(); if (minSize >= fromN && inner(join.mode)) { minSize = fromN; int toN = join.rel.toSize(); if (minSize >= toN && inner(join.mode)) { minSize = toN; Numbers ids = minJoin.rel.froms(); sides[minJoin.from].futureIds = IDS.futureIds(ids); } else { Numbers ids = minJoin.rel.tos(); sides[minJoin.to].futureIds = IDS.futureIds(ids);
private boolean has(AJoin join, long[] combo, JoinSide[] sides) { long from = combo[join.from2]; long to = combo[join.to2]; FutureIds fromIds = sides[join.from2].futureIds; FutureIds toIds = sides[join.to2].futureIds; Numbers filterFroms = fromIds.optional() ? null : fromIds.fetch(); Numbers filterTos = toIds.optional() ? null : toIds.fetch(); boolean lefty = to == -1 && from >= 0 && (filterTos == null || !join.rel.linksFrom(from).hasAny(filterTos)); boolean righty = from == -1 && to >= 0 && (filterFroms == null || !join.rel.linksTo(to).hasAny(filterFroms)); boolean linked = join.rel.hasLink(from, to); switch (join.mode) { case INNER: return hasInfo(linked, from, to, join.rel); case LEFT_OUTER: return hasInfo(U.xor(lefty, linked), from, to, join.rel); case RIGHT_OUTER: return hasInfo(U.xor(righty, linked), from, to, join.rel); case FULL_OUTER: return hasInfo(U.xor(U.xor(lefty, righty), linked), from, to, join.rel); } throw Errors.notExpected(); }
@Override public Numbers reach(long[] combo, int level, FutureIds futureIds) { Numbers src = futureIds.optional() ? null : futureIds.fetch(); for (JoinBridgeRel bridgeRel : fromRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksTo(id); src = inter(src, filter); } for (JoinBridgeRel bridgeRel : toRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksFrom(id); src = inter(src, filter); } if (src == null) { src = futureIds.fetch(); } return src; }
int fromN = join.rel.fromSize(); if (minSize >= fromN && inner(join.mode)) { minSize = fromN; int toN = join.rel.toSize(); if (minSize >= toN && inner(join.mode)) { minSize = toN; Numbers ids = minJoin.rel.froms(); sides[minJoin.from].futureIds = IDS.futureIds(ids); } else { Numbers ids = minJoin.rel.tos(); sides[minJoin.to].futureIds = IDS.futureIds(ids);
private boolean has(AJoin join, long[] combo, JoinSide[] sides) { long from = combo[join.from2]; long to = combo[join.to2]; FutureIds fromIds = sides[join.from2].futureIds; FutureIds toIds = sides[join.to2].futureIds; Numbers filterFroms = fromIds.optional() ? null : fromIds.fetch(); Numbers filterTos = toIds.optional() ? null : toIds.fetch(); boolean lefty = to == -1 && from >= 0 && (filterTos == null || !join.rel.linksFrom(from).hasAny(filterTos)); boolean righty = from == -1 && to >= 0 && (filterFroms == null || !join.rel.linksTo(to).hasAny(filterFroms)); boolean linked = join.rel.hasLink(from, to); switch (join.mode) { case INNER: return hasInfo(linked, from, to, join.rel); case LEFT_OUTER: return hasInfo(U.xor(lefty, linked), from, to, join.rel); case RIGHT_OUTER: return hasInfo(U.xor(righty, linked), from, to, join.rel); case FULL_OUTER: return hasInfo(U.xor(U.xor(lefty, righty), linked), from, to, join.rel); } throw Errors.notExpected(); }
@Override public Numbers reach(long[] combo, int level, FutureIds futureIds) { Numbers src = futureIds.optional() ? null : futureIds.fetch(); for (JoinBridgeRel bridgeRel : fromRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksTo(id); src = inter(src, filter); } for (JoinBridgeRel bridgeRel : toRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksFrom(id); src = inter(src, filter); } if (src == null) { src = futureIds.fetch(); } return src; }
int fromN = join.rel.fromSize(); if (minSize >= fromN && inner(join.mode)) { minSize = fromN; int toN = join.rel.toSize(); if (minSize >= toN && inner(join.mode)) { minSize = toN; Numbers ids = minJoin.rel.froms(); sides[minJoin.from].futureIds = IDS.futureIds(ids); } else { Numbers ids = minJoin.rel.tos(); sides[minJoin.to].futureIds = IDS.futureIds(ids);
private boolean has(AJoin join, long[] combo, JoinSide[] sides) { long from = combo[join.from2]; long to = combo[join.to2]; FutureIds fromIds = sides[join.from2].futureIds; FutureIds toIds = sides[join.to2].futureIds; Numbers filterFroms = fromIds.optional() ? null : fromIds.fetch(); Numbers filterTos = toIds.optional() ? null : toIds.fetch(); boolean lefty = to == -1 && from >= 0 && (filterTos == null || !join.rel.linksFrom(from).hasAny(filterTos)); boolean righty = from == -1 && to >= 0 && (filterFroms == null || !join.rel.linksTo(to).hasAny(filterFroms)); boolean linked = join.rel.hasLink(from, to); switch (join.mode) { case INNER: return hasInfo(linked, from, to, join.rel); case LEFT_OUTER: return hasInfo(U.xor(lefty, linked), from, to, join.rel); case RIGHT_OUTER: return hasInfo(U.xor(righty, linked), from, to, join.rel); case FULL_OUTER: return hasInfo(U.xor(U.xor(lefty, righty), linked), from, to, join.rel); } throw Errors.notExpected(); }
@Override public Numbers reach(long[] combo, int level, FutureIds futureIds) { Numbers src = futureIds.optional() ? null : futureIds.fetch(); for (JoinBridgeRel bridgeRel : fromRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksTo(id); src = inter(src, filter); } for (JoinBridgeRel bridgeRel : toRels) { long id = combo[bridgeRel.index]; Numbers filter = bridgeRel.rel.linksFrom(id); src = inter(src, filter); } if (src == null) { src = futureIds.fetch(); } return src; }
@Override public String toString() { return mode + "(#" + from + " " + rel.name() + " #" + to + ")"; }