execQueryParams method

Uint8List? execQueryParams(
  1. int connectionId,
  2. String sql,
  3. Uint8List? params, {
  4. int? maxBufferBytes,
  5. int? initialBufferBytes,
  6. ResultEncoding resultEncoding = ResultEncoding.rowMajor,
  7. int fetchSize = 0,
})
inherited

Executes a SQL query with binary parameters.

The connectionId must be a valid active connection. The sql should be a parameterized SQL statement. The params should be a binary buffer containing serialized parameters. When maxBufferBytes is set, caps the result buffer size; otherwise uses the package default.

Returns binary result data on success, null on failure.

Implementation

Uint8List? execQueryParams(
  int connectionId,
  String sql,
  Uint8List? params, {
  int? maxBufferBytes,
  int? initialBufferBytes,
  ResultEncoding resultEncoding = ResultEncoding.rowMajor,
  int fetchSize = 0,
}) {
  _requireResultEncodingSupport(
    resultEncoding: resultEncoding,
    supported: _bindings.supportsExecQueryParamsOptions,
    symbol: 'odbc_exec_query_params_options',
  );
  final paramsOrEmpty =
      (params == null || params.isEmpty) ? Uint8List(0) : params;
  final useFetch = fetchSize > 0 && _bindings.supportsExecQueryParamsFetch;
  final useOptions = resultEncoding != ResultEncoding.rowMajor;
  return _withSql(
    sql,
    (sqlPtr) {
      return _withParamsBuffer(
        paramsOrEmpty,
        (paramsPtr) => callWithBuffer(
          (buf, bufLen, outWritten) {
            if (useFetch) {
              return _bindings.odbc_exec_query_params_fetch(
                connectionId,
                sqlPtr,
                paramsPtr,
                paramsOrEmpty.length,
                resultEncoding.wireCode,
                fetchSize,
                buf,
                bufLen,
                outWritten,
              );
            }
            return useOptions
                ? _bindings.odbc_exec_query_params_options(
                    connectionId,
                    sqlPtr,
                    paramsPtr,
                    paramsOrEmpty.length,
                    resultEncoding.wireCode,
                    buf,
                    bufLen,
                    outWritten,
                  )
                : _bindings.odbc_exec_query_params(
                    connectionId,
                    sqlPtr,
                    paramsPtr,
                    paramsOrEmpty.length,
                    buf,
                    bufLen,
                    outWritten,
                  );
          },
          maxSize: maxBufferBytes,
          initialSize: initialBufferBytes,
          preferTransient: preferTransientFfiBufferForParams(paramsOrEmpty),
        ),
      );
    },
  );
}