code: def _handle_select(self, parts, result_metadata=None):
          
          self.rowcount = -1
          if result_metadata is not None:
              # Select was prepared and we can use the already received metadata
              self.description, self._column_types = self._handle_result_metadata(result_metadata)
  
          for part in parts:
              if part.kind == part_kinds.RESULTSETID:
                  self._resultset_id = part.value
              elif part.kind == part_kinds.RESULTSETMETADATA:
                  self.description, self._column_types = self._handle_result_metadata(part)
              elif part.kind == part_kinds.RESULTSET:
                  self._buffer = part.unpack_rows(self._column_types, self.connection)
                  self._received_last_resultset_part = part.attribute & 1
                  self._executed = True
              elif part.kind in (part_kinds.STATEMENTCONTEXT, part_kinds.TRANSACTIONFLAGS, part_kinds.PARAMETERMETADATA):
                  pass
              else:
                  raise InterfaceError("Prepared select statement response, unexpected part kind %d." % part.kind)
docs: Handle reply messages from SELECT statements