message: support recursive CTE and setop nodes in macro
diff: #include "duckdb/parser/expression/subquery_expression.hpp"
  #include "duckdb/parser/parsed_expression_iterator.hpp"
  #include "duckdb/parser/query_node.hpp"
  +#include "duckdb/parser/query_node/recursive_cte_node.hpp"
  +#include "duckdb/parser/query_node/select_node.hpp"
  +#include "duckdb/parser/query_node/set_operation_node.hpp"
  #include "duckdb/parser/tableref/list.hpp"
  namespace duckdb {
  @@ -127,6 +130,14 @@ void ExpressionBinder::UnfoldQueryNode(ParsedExpression &expr, QueryNode &node,
  if (node.type != QueryNodeType::SELECT_NODE) {
  throw BinderException(binder.FormatError(expr, "Macro's with non-SELECT sub-queries are not supported."));
  }
  + switch (node.type) {
  + case QueryNodeType::RECURSIVE_CTE_NODE: {
  + auto &rcte_node = (RecursiveCTENode &)node;
  + UnfoldQueryNode(expr, *rcte_node.left, macro_binding);
  + UnfoldQueryNode(expr, *rcte_node.right, macro_binding);
  + break;
  + }
  + case QueryNodeType::SELECT_NODE: {
  auto &sel_node = (SelectNode &)node;
  for (idx_t i = 0; i < sel_node.select_list.size(); i++) {
  sel_node.select_list[i] = UnfoldMacroRecursive(move(sel_node.select_list[i]), macro_binding);
  @@ -149,6 +160,17 @@ void ExpressionBinder::UnfoldQueryNode(ParsedExpression &expr, QueryNode &node,
  auto &tf_ref = (TableFunctionRef &)*sel_node.from_table;
  tf_ref.function = UnfoldMacroRecursive(move(tf_ref.function), macro_binding);
  }
  + break;
  + }
  + case QueryNodeType::SET_OPERATION_NODE: {
  + auto &setop_node = (SetOperationNode &)node;
  + UnfoldQueryNode(expr, *setop_node.left, macro_binding);
  + UnfoldQueryNode(expr, *setop_node.right, macro_binding);
  + break;
  + }
  + default:
  + throw BinderException(binder.FormatError(expr, "Unsupported subquery type found in macro."));
  + }
  }
  BindResult ExpressionBinder::BindMacro(FunctionExpression &expr) {
  