/** Adds a value generator to satisfy the correlating variables used by * a relational expression, if those variables are not already provided by * its input. */ private Frame maybeAddValueGenerator(RelNode rel, Frame frame) { final CorelMap cm1 = new CorelMapBuilder().build(frame.r, rel); if (!cm1.mapRefRelToCorRef.containsKey(rel)) { return frame; } final Collection<CorRef> needs = cm1.mapRefRelToCorRef.get(rel); final ImmutableSortedSet<CorDef> haves = frame.corDefOutputs.keySet(); if (hasAll(needs, haves)) { return frame; } return decorrelateInputWithValueGenerator(rel, frame); }
/** Adds a value generator to satisfy the correlating variables used by * a relational expression, if those variables are not already provided by * its input. */ private Frame maybeAddValueGenerator(RelNode rel, Frame frame) { final CorelMap cm1 = new CorelMapBuilder().build(frame.r, rel); if (!cm1.mapRefRelToCorRef.containsKey(rel)) { return frame; } final Collection<CorRef> needs = cm1.mapRefRelToCorRef.get(rel); final ImmutableSortedSet<CorDef> haves = frame.corDefOutputs.keySet(); if (hasAll(needs, haves)) { return frame; } return decorrelateInputWithValueGenerator(rel, frame); }
frame = decorrelateInputWithValueGenerator(rel, frame);
frame = decorrelateInputWithValueGenerator(rel, frame);
/** Adds a value generator to satisfy the correlating variables used by * a relational expression, if those variables are not already provided by * its input. */ private Frame maybeAddValueGenerator(RelNode rel, Frame frame) { final CorelMap cm1 = new CorelMapBuilder().build(frame.r, rel); if (!cm1.mapRefRelToCorRef.containsKey(rel)) { return frame; } final Collection<CorRef> needs = cm1.mapRefRelToCorRef.get(rel); final ImmutableSortedSet<CorDef> haves = frame.corDefOutputs.keySet(); if (hasAll(needs, haves)) { return frame; } return decorrelateInputWithValueGenerator(rel, frame); }
frame = decorrelateInputWithValueGenerator(rel, frame);