lidavidm commented on code in PR #13782: URL: https://github.com/apache/arrow/pull/13782#discussion_r974198545
########## cpp/src/arrow/compute/exec/expression.h: ########## @@ -277,6 +279,53 @@ ARROW_EXPORT Expression or_(Expression lhs, Expression rhs); ARROW_EXPORT Expression or_(const std::vector<Expression>&); ARROW_EXPORT Expression not_(Expression operand); +/// Modify an Expression with pre-order and post-order visitation. +/// `pre` will be invoked on each Expression. `pre` will visit Calls before their +/// arguments, `post_call` will visit Calls (and no other Expressions) after their +/// arguments. Visitors should return the Identical expression to indicate no change; this +/// will prevent unnecessary construction in the common case where a modification is not +/// possible/necessary/... +/// +/// If an argument was modified, `post_call` visits a reconstructed Call with the modified +/// arguments but also receives a pointer to the unmodified Expression as a second +/// argument. If no arguments were modified the unmodified Expression* will be nullptr. +template <typename PreVisit, typename PostVisitCall> +Result<Expression> Modify(Expression expr, const PreVisit& pre, Review Comment: Probably because those weren't declared `static`, only `inline` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org