code: def tds7_process_result(self):
          
          self.log_response_message('got COLMETADATA')
          r = self._reader
  
          # read number of columns and allocate the columns structure
  
          num_cols = r.get_smallint()
  
          # This can be a DUMMY results token from a cursor fetch
  
          if num_cols == -1:
              return
  
          self.param_info = None
          self.has_status = False
          self.ret_status = None
          self.skipped_to_status = False
          self.rows_affected = tds_base.TDS_NO_COUNT
          self.more_rows = True
          self.row = [None] * num_cols
          self.res_info = info = _Results()
  
          #
          # loop through the columns populating COLINFO struct from
          # server response
          #
          header_tuple = []
          for col in range(num_cols):
              curcol = tds_base.Column()
              info.columns.append(curcol)
              self.get_type_info(curcol)
  
              curcol.column_name = r.read_ucs2(r.get_byte())
              precision = curcol.serializer.precision
              scale = curcol.serializer.scale
              size = curcol.serializer.size
              header_tuple.append(
                  (curcol.column_name,
                   curcol.serializer.get_typeid(),
                   None,
                   size,
                   precision,
                   scale,
                   curcol.flags & tds_base.Column.fNullable))
          info.description = tuple(header_tuple)
          return info
docs: Reads and processes COLMETADATA stream
  
          This stream contains a list of returned columns.
          Stream format link: http://msdn.microsoft.com/en-us/library/dd357363.aspx