docs: protected boolean addSortColumn( QueryContext context,
                                       PlanNode node,
                                       Column sortColumn ) {
          boolean added = false;
          if (node.getSelectors().contains(sortColumn.selectorName())) {
              // Get the existing projected columns ...
              List<Column> columns = node.getPropertyAsList(Property.PROJECT_COLUMNS, Column.class);
              List<String> types = node.getPropertyAsList(Property.PROJECT_COLUMN_TYPES, String.class);
              if (columns != null && addIfMissing(context, sortColumn, columns, types)) {
                  node.setProperty(Property.PROJECT_COLUMNS, columns);
                  node.setProperty(Property.PROJECT_COLUMN_TYPES, types);
                  added = true;
              }
          }
  
          // Apply recursively ...
          for (PlanNode child : node) {
              addSortColumn(context, child, sortColumn);
          }
  
          if (node.is(Type.SORT)) {
              // Get the child node, which should be a PROJECT ...
              PlanNode child = node.findAtOrBelow(Type.PROJECT);
              if (child != null && !child.getSelectors().contains(sortColumn.selectorName())) {
                  // Make sure the PROJECT includes the missing columns, even when the selector is not included ...
                  List<Column> columns = child.getPropertyAsList(Property.PROJECT_COLUMNS, Column.class);
                  List<String> types = child.getPropertyAsList(Property.PROJECT_COLUMN_TYPES, String.class);
                  if (columns != null && addIfMissing(context, sortColumn, columns, types)) {
                      child.setProperty(Property.PROJECT_COLUMNS, columns);
                      child.setProperty(Property.PROJECT_COLUMN_TYPES, types);
                      added = true;
                  }
              }
          }
          return added;
      }