public PropertyPattern<F, T> capturedAs(Capture<T> capture) { Pattern<T> matchAll = (Pattern<T>) Pattern.any(); return matching(matchAll.capturedAs(capture)); }
@Override public <T> Match<T> match(Pattern<T> pattern, Object object, Captures captures) { if (pattern.previous() != null) { Match<?> match = match(pattern.previous(), object, captures); return match.flatMap((value) -> pattern.accept(this, value, match.captures())); } else { return pattern.accept(this, object, captures); } }
@Override public void visitWith(WithPattern<?> pattern) { visitPrevious(pattern); appendLine("with(%s)", pattern.getProperty().getName()); level += 1; pattern.getPattern().accept(this); level -= 1; }
@Override public Pattern<PlanNode> getPattern() { return Pattern.typeOf(PlanNode.class); }
@Override public String toString() { DefaultPrinter printer = new DefaultPrinter(); accept(printer); return printer.result(); } }
public static Property<LateralJoinNode, PlanNode> subquery() { return property("subquery", LateralJoinNode::getSubquery); } }
@Override public <U> Match<U> map(Function<? super T, ? extends U> mapper) { return empty(); }
@Override public Match<T> accept(Matcher matcher, Object object, Captures captures) { return matcher.matchCapture(this, object, captures); }
@Override public Match<T> accept(Matcher matcher, Object object, Captures captures) { return matcher.matchWith(this, object, captures); }
@Override public void accept(PatternVisitor patternVisitor) { patternVisitor.visitTypeOf(this); } }
@Override public Match<T> accept(Matcher matcher, Object object, Captures captures) { return matcher.matchEquals(this, object, captures); }
@Override public void accept(PatternVisitor patternVisitor) { patternVisitor.visitEquals(this); } }
@Override public void accept(PatternVisitor patternVisitor) { patternVisitor.visitCapture(this); } }
public static Property<LimitNode, Long> count() { return property("count", LimitNode::getCount); } }
public static Property<SampleNode, SampleNode.Type> sampleType() { return property("sampleType", SampleNode::getSampleType); } }
public static Property<TopNNode, TopNNode.Step> step() { return property("step", TopNNode::getStep); } }