getStructuredErrorForConnection method

StructuredError? getStructuredErrorForConnection(
  1. int connectionId
)

Gets structured error for a specific connection (per-connection isolation).

When connectionId != 0, returns only that connection's error. Returns null when API is unavailable, no error for this connection, or on FFI failure.

Implementation

StructuredError? getStructuredErrorForConnection(int connectionId) {
  if (!_bindings.supportsStructuredErrorForConnection) {
    return null;
  }

  var size = initialBufferSize;
  const limit = maxBufferSize;
  while (size <= limit) {
    final buf = malloc<ffi.Uint8>(size);
    final outWritten = malloc<ffi.Uint32>()..value = 0;
    try {
      final code = _bindings.odbc_get_structured_error_for_connection(
        connectionId,
        buf,
        size,
        outWritten,
      );
      if (code == null) return null;
      if (code == 1) return null; // No structured error for this connection
      if (code == -1) return null; // FFI error
      if (code == -2) {
        size *= 2;
        continue;
      }
      if (code == 0) {
        final n = outWritten.value;
        if (n == 0) return null;
        final data = Uint8List.fromList(buf.asTypedList(n));
        return StructuredError.deserialize(data);
      }
      return null;
    } finally {
      malloc
        ..free(buf)
        ..free(outWritten);
    }
  }
  return null;
}