public void executeQuery(CompiledQuery query, CompiledQueryMix queryMix) {
    double timeInSeconds;

    String queryString = query.getQueryString();
    String parametrizedQueryString = query.getParametrizedQueryString();
    String encodedParamString = query.getEncodedParamString();
    byte queryType = query.getQueryType();
    int queryNr = query.getNr();
    NetQuery qe;
    if (query.source.isParametrized)
      qe =
          new NetQuery(
              serverURL,
              parametrizedQueryString,
              encodedParamString,
              queryType,
              defaultGraph,
              timeout);
    else qe = new NetQuery(serverURL, queryString, "", queryType, defaultGraph, timeout);
    int queryMixRun = queryMix.getRun() + 1;

    InputStream is = qe.exec();

    if (is == null) { // then Timeout!
      double t = this.timeout / 1000.0;
      System.out.println("Query " + queryNr + ": " + t + " seconds timeout!");
      queryMix.reportTimeOut(); // inc. timeout counter
      queryMix.setCurrent(0, t);
      qe.close();
      return;
    }

    int resultCount = 0;

    try {
      // Write XML result into result
      if (queryType == Query.SELECT_TYPE) resultCount = countResults(is);
      else resultCount = countBytes(is);

      timeInSeconds = qe.getExecutionTimeInSeconds();
    } catch (SocketTimeoutException e) {
      double t = this.timeout / 1000.0;
      System.out.println("Query " + queryNr + ": " + t + " seconds timeout!");
      queryMix.reportTimeOut(); // inc. timeout counter
      queryMix.setCurrent(0, t);
      qe.close();
      return;
    }

    if (logger.isEnabledFor(Level.ALL) && queryMixRun > 0)
      logResultInfo(queryNr, queryMixRun, timeInSeconds, queryString, queryType, resultCount);

    queryMix.setCurrent(resultCount, timeInSeconds);
    qe.close();
  }