cancelQuery method

Future<void> cancelQuery()

Cancela, no servidor, a consulta em execução nesta conexão (envia um CancelRequest por uma conexão separada, como o libpq).

Não faz nada se a conexão estiver fechada. A consulta cancelada falha com o SQLSTATE PgErrorCode.queryCanceled. Se nenhuma consulta estiver em execução quando o pedido chegar ao servidor, ele é ignorado.

Implementation

Future<void> cancelQuery() async {
  if (isClosed || !_hasBackendKey) return;
  Socket socket;
  if (isUnixSocket) {
    socket = await Socket.connect(
            InternetAddress(host, type: InternetAddressType.unix), port)
        .timeout(Duration(seconds: timeoutInSeconds));
  } else {
    socket = await Socket.connect(host, port)
        .timeout(Duration(seconds: timeoutInSeconds));
  }
  try {
    if (_usingSsl) {
      final negotiation = await _negotiateSsl(socket, effectiveSslMode,
          timeout: timeoutInSeconds);
      socket = negotiation.secureSocket ?? socket;
    }
    final request = ByteData(16)
      ..setInt32(0, 16)
      ..setInt32(4, 80877102)
      ..setInt32(8, _processID)
      ..setInt32(12, _secretKey);
    socket.add(request.buffer.asUint8List());
    await socket.flush();
  } finally {
    socket.destroy();
  }
}