execute method

Uint8List? execute(
  1. int stmtId, [
  2. Uint8List? params,
  3. int timeoutOverrideMs = 0,
  4. int fetchSize = 1000,
  5. int? maxBufferBytes,
  6. int? initialBufferBytes,
  7. ResultEncoding resultEncoding = ResultEncoding.rowMajor,
])
inherited

Executes a prepared statement with optional binary parameters.

The stmtId must be a valid prepared statement identifier. The params should be a binary buffer containing serialized parameters, or null if no parameters are needed. The timeoutOverrideMs overrides statement timeout (0 = use stored). The fetchSize specifies rows per batch (default: 1000). When maxBufferBytes is set, caps the result buffer size.

Returns binary result data on success, null on failure.

Implementation

Uint8List? execute(
  int stmtId, [
  Uint8List? params,
  int timeoutOverrideMs = 0,
  int fetchSize = 1000,
  int? maxBufferBytes,
  int? initialBufferBytes,
  ResultEncoding resultEncoding = ResultEncoding.rowMajor,
]) {
  if (resultEncoding != ResultEncoding.rowMajor) {
    _requireResultEncodingSupport(
      resultEncoding: resultEncoding,
      supported: _bindings.supportsExecuteOptions,
      symbol: 'odbc_execute_options',
    );
  }
  int invoke(
    ffi.Pointer<ffi.Uint8> buf,
    int bufLen,
    ffi.Pointer<ffi.Uint32> outWritten,
    ffi.Pointer<ffi.Uint8>? paramsPtr,
    int paramsLen,
  ) {
    if (resultEncoding != ResultEncoding.rowMajor) {
      return _bindings.odbc_execute_options(
        stmtId,
        paramsPtr,
        paramsLen,
        timeoutOverrideMs,
        fetchSize,
        resultEncoding.wireCode,
        buf,
        bufLen,
        outWritten,
      );
    }
    return _bindings.odbc_execute(
      stmtId,
      paramsPtr,
      paramsLen,
      timeoutOverrideMs,
      fetchSize,
      buf,
      bufLen,
      outWritten,
    );
  }

  if (params == null || params.isEmpty) {
    return callWithBuffer(
      (buf, bufLen, outWritten) =>
          invoke(buf, bufLen, outWritten, ffi.nullptr, 0),
      maxSize: maxBufferBytes,
      initialSize: initialBufferBytes,
    );
  }
  return _withParamsBuffer(
    params,
    (paramsPtr) => callWithBuffer(
      (buf, bufLen, outWritten) =>
          invoke(buf, bufLen, outWritten, paramsPtr, params.length),
      maxSize: maxBufferBytes,
      initialSize: initialBufferBytes,
      preferTransient: preferTransientFfiBufferForParams(params),
    ),
  );
}