code: protected FieldDescriptor[] buildFieldsForSelect(ClassDescriptor cld)
      {
          DescriptorRepository repository = cld.getRepository();
          Set fields = new ListOrderedSet();   // keep the order of the fields
          
          // add Standard Fields
          // MBAIRD: if the object being queried on has multiple classes mapped to the table,
          // then we will get all the fields that are a unique set across all those classes so if we need to
          // we can materialize an extent
          FieldDescriptor fds[] = repository.getFieldDescriptorsForMultiMappedTable(cld);
          for (int i = 0; i < fds.length; i++)
          {
              fields.add(fds[i]);
          }
  
          // add inherited Fields. This is important when querying for a class having a super-reference
          fds = cld.getFieldDescriptor(true);
          for (int i = 0; i < fds.length; i++)
          {
              fields.add(fds[i]);
          }
  
          // add Fields of joined subclasses
          Class[] multiJoinedClasses = repository.getSubClassesMultipleJoinedTables(cld, true);
          for (int c = 0; c < multiJoinedClasses.length; c++)
          {
              ClassDescriptor subCld = repository.getDescriptorFor(multiJoinedClasses[c]);
              fds = subCld.getFieldDescriptions();
              for (int i = 0; i < fds.length; i++)
              {
                  fields.add(fds[i]);
              }
          }
  
          FieldDescriptor[] result = new FieldDescriptor[fields.size()];
          fields.toArray(result);
          return result;
      }
docs: Return the Fields to be selected.
  
  @param cld the ClassDescriptor
  @return the Fields to be selected