boolean isBackwards(SqlStatisticProvider statisticProvider) { return source == target ? keys.get(0).source < keys.get(0).target // want PK on the right : cardinality(statisticProvider, source()) < cardinality(statisticProvider, target()); }
@Override public String toString() { final StringBuilder b = new StringBuilder() .append("Step(") .append(source) .append(", ") .append(target) .append(","); for (IntPair key : keys) { b.append(' ') .append(source().field(key.source).getName()) .append(':') .append(target().field(key.target).getName()); } return b.append(")") .toString(); }
@Override public String toString() { final StringBuilder b = new StringBuilder() .append("StepRef(") .append(source) .append(", ") .append(target) .append(","); for (IntPair key : step.keys) { b.append(' ') .append(step.source().field(key.source).getName()) .append(':') .append(step.target().field(key.target).getName()); } return b.append("):") .append(ordinalInQuery) .toString(); }
StepRef stepRef(TableRef source, TableRef target, List<IntPair> keys) { keys = LatticeSpace.sortUnique(keys); final Step h = new Step(source.table, target.table, keys); if (h.isBackwards(space.statisticProvider)) { final List<IntPair> keys1 = LatticeSpace.swap(h.keys); final Step h2 = space.addEdge(h.target(), h.source(), keys1); return new StepRef(target, source, h2, stepRefCount++); } else { final Step h2 = space.addEdge(h.source(), h.target(), h.keys); return new StepRef(source, target, h2, stepRefCount++); } } }