code: function buildMapColumnExtractFnNames(columns, fetchAsString)
  {
    var fnNameGetColumnValue = 'getColumnValue';
    var fnNameGetColumnValueAsString = 'getColumnValueAsString';
  
    var index, length, column;
    var mapColumnIdToExtractFnName = {};
  
    // if no native types need to be retrieved as strings, extract values normally
    if (!Util.exists(fetchAsString))
    {
      for (index = 0, length = columns.length; index < length; index++)
      {
        column = columns[index];
        mapColumnIdToExtractFnName[column.getId()] = fnNameGetColumnValue;
      }
    }
    else
    {
      // build a map that contains all the native types that need to be
      // retrieved as strings when extracting column values from rows
      var nativeTypesMap = {};
      for (index = 0, length = fetchAsString.length; index < length; index++)
      {
        nativeTypesMap[fetchAsString[index].toUpperCase()] = true;
      }
  
      // for each column, pick the appropriate extract function
      // based on whether the value needs to be retrieved as a string
      for (index = 0, length = columns.length; index < length; index++)
      {
        column = columns[index];
        mapColumnIdToExtractFnName[column.getId()] =
            nativeTypesMap[DataTypes.toNativeType(column.getType())] ?
                fnNameGetColumnValueAsString : fnNameGetColumnValue;
      }
    }
  
    return mapColumnIdToExtractFnName;
  }
docs: Builds a map in which the keys are column ids and the values are the names of
  the extract functions to use when retrieving row values for the corresponding
  columns.
  
  @param {Object[]} columns
  @param {String[]} fetchAsString the native types that should be retrieved as
  strings.
  
  @returns {Object}