code: @Override
      public CompletableFuture<RootExecutionResultNode> execute(ExecutionContext context, FieldSubSelection fieldSubSelection) {
          return resolveSubSelection(context, fieldSubSelection)
                  .thenApply(RootExecutionResultNode::new);
      }
docs: /*
  the fundamental algorithm is:
  - fetch sub selection and analyze it
  - convert the fetched value analysis into result node
  - get all unresolved result nodes and resolve the sub selection (start again recursively)