cancelQuery method
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));
}
_observeDone(socket);
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();
}
}