code: def _execute_command(self, command, sql):
          
          if not self._sock:
              raise err.InterfaceError("(0, '')")
  
          # If the last query was unbuffered, make sure it finishes before
          # sending new commands
          if self._result is not None:
              if self._result.unbuffered_active:
                  warnings.warn("Previous unbuffered result was left incomplete")
                  self._result._finish_unbuffered_query()
              while self._result.has_next:
                  self.next_result()
              self._result = None
  
          if isinstance(sql, text_type):
              sql = sql.encode(self.encoding)
  
          packet_size = min(MAX_PACKET_LEN, len(sql) + 1)  # +1 is for command
  
          # tiny optimization: build first packet manually instead of
          # calling self..write_packet()
          prelude = struct.pack('<iB', packet_size, command)
          packet = prelude + sql[:packet_size-1]
          self._write_bytes(packet)
          if DEBUG: dump_packet(packet)
          self._next_seq_id = 1
  
          if packet_size < MAX_PACKET_LEN:
              return
  
          sql = sql[packet_size-1:]
          while True:
              packet_size = min(MAX_PACKET_LEN, len(sql))
              self.write_packet(sql[:packet_size])
              sql = sql[packet_size:]
              if not sql and packet_size < MAX_PACKET_LEN:
                  break
docs: :raise InterfaceError: If the connection is closed.
          :raise ValueError: If no username was specified.