code: def execute(self):
          
          with SMCSocketProtocol(self, **self.sockopt) as protocol:
              for result in protocol.receive():
                  yield result
docs: Execute the query with optional timeout. The response to the execute
          query is the raw payload received from the websocket and will contain
          multiple dict keys and values. It is more common to call query.fetch_XXX
          which will filter the return result based on the method. Each result set
          will have a max batch size of 200 records. This method will also
          continuously return results until terminated. To make a single bounded
          fetch, call :meth:`.fetch_batch` or :meth:`.fetch_raw`.
          
          :param int sock_timeout: event loop interval
          :return: raw dict returned from query
          :rtype: dict(list)