docs: public boolean executeBatchServer(boolean mustExecuteOnMaster,
        ServerPrepareResult serverPrepareResult,
        Results results, String sql, final List<ParameterHolder[]> parametersList,
        boolean hasLongData) throws SQLException {
  
      cmdPrologue();
  
      if (options.useBulkStmts
          && !hasLongData
          && results.getAutoGeneratedKeys() == Statement.NO_GENERATED_KEYS
          && versionGreaterOrEqual(10, 2, 7)
          && executeBulkBatch(results, sql, serverPrepareResult, parametersList)) {
        return true;
      }
  
      if (!options.useBatchMultiSend) {
        return false;
      }
      initializeBatchReader();
      new AbstractMultiSend(this, writer, results, serverPrepareResult, parametersList, true, sql) {
        @Override
        public void sendCmd(PacketOutputStream writer, Results results,
            List<ParameterHolder[]> parametersList, List<String> queries, int paramCount,
            BulkStatus status,
            PrepareResult prepareResult)
            throws SQLException, IOException {
  
          ParameterHolder[] parameters = parametersList.get(status.sendCmdCounter);
  
          //validate parameter set
          if (parameters.length < paramCount) {
            throw new SQLException("Parameter at position " + (paramCount - 1) + " is not set",
                "07004");
          }
  
          //send binary data in a separate stream
          for (int i = 0; i < paramCount; i++) {
            if (parameters[i].isLongData()) {
              writer.startPacket(0);
              writer.write(COM_STMT_SEND_LONG_DATA);
              writer.writeInt(statementId);
              writer.writeShort((short) i);
              parameters[i].writeBinary(writer);
              writer.flush();
            }
          }
  
          writer.startPacket(0);
          ComStmtExecute.writeCmd(statementId, parameters, paramCount, parameterTypeHeader, writer,
              CURSOR_TYPE_NO_CURSOR);
          writer.flush();
        }
  
        @Override
        public SQLException handleResultException(SQLException qex, Results results,
            List<ParameterHolder[]> parametersList, List<String> queries, int currentCounter,
            int sendCmdCounter, int paramCount, PrepareResult prepareResult) {
          return logQuery.exceptionWithQuery(qex, prepareResult);
        }
  
        @Override
        public int getParamCount() {
          return getPrepareResult() == null ? parametersList.get(0).length
              : ((ServerPrepareResult) getPrepareResult()).getParameters().length;
        }
  
        @Override
        public int getTotalExecutionNumber() {
          return parametersList.size();
        }
  
      }.executeBatch();
      return true;
    }