@Override public PlanWithProperties visitUnnest(UnnestNode node, PreferredProperties preferredProperties) { PreferredProperties translatedPreferred = preferredProperties.translate(symbol -> node.getReplicateSymbols().contains(symbol) ? Optional.of(symbol) : Optional.empty()); return rebaseAndDeriveProperties(node, planChild(node, translatedPreferred)); }
@Override public PlanWithProperties visitProject(ProjectNode node, PreferredProperties preferredProperties) { Map<Symbol, Symbol> identities = computeIdentityTranslations(node.getAssignments()); PreferredProperties translatedPreferred = preferredProperties.translate(symbol -> Optional.ofNullable(identities.get(symbol))); return rebaseAndDeriveProperties(node, planChild(node, translatedPreferred)); }
@Override public PlanWithProperties visitGroupId(GroupIdNode node, PreferredProperties preferredProperties) { PreferredProperties childPreference = preferredProperties.translate(translateGroupIdSymbols(node)); PlanWithProperties child = planChild(node, childPreference); return rebaseAndDeriveProperties(node, child); }
@Override public PlanWithProperties visitUnnest(UnnestNode node, Context context) { PreferredProperties translatedPreferred = context.getPreferredProperties().translate(symbol -> node.getReplicateSymbols().contains(symbol) ? Optional.of(symbol) : Optional.empty()); return rebaseAndDeriveProperties(node, planChild(node, context.withPreferredProperties(translatedPreferred))); }
@Override public PlanWithProperties visitProject(ProjectNode node, Context context) { Map<Symbol, Symbol> identities = computeIdentityTranslations(node.getAssignments()); PreferredProperties translatedPreferred = context.getPreferredProperties().translate(symbol -> Optional.ofNullable(identities.get(symbol))); return rebaseAndDeriveProperties(node, planChild(node, context.withPreferredProperties(translatedPreferred))); }