code: @Override
      @InterfaceAudience.Public
      public QueryEnumerator run() throws CouchbaseLiteException {
          waitForRows();
  
          if (rows == null) {
              return null;
          } else {
              // Have to return a copy because the enumeration has to start at item #0 every time
              return new QueryEnumerator(rows);
          }
      }
docs: Sends the query to the server and returns an enumerator over the result rows (Synchronous).
  Note: In a LiveQuery you should consider adding a ChangeListener and calling start() instead.