acquire method

Pointer<Utf8> acquire(
  1. String sql
)

Returns a native UTF-8 pointer for sql, allocating if necessary.

Refreshes the LRU position on hit so frequently-used SQL never gets evicted while a colder string holds a slot. The returned pointer remains valid until the entry is evicted or dispose runs.

Implementation

ffi.Pointer<bindings.Utf8> acquire(String sql) {
  final cached = _entries.remove(sql);
  if (cached != null) {
    _entries[sql] = cached;
    _hits++;
    return cached;
  }
  _misses++;

  final ptr = sql.toNativeUtf8().cast<bindings.Utf8>();
  if (_entries.length >= maxSize) {
    final oldestKey = _entries.keys.first;
    final oldestPtr = _entries.remove(oldestKey)!;
    malloc.free(oldestPtr.cast<Utf8>());
    _evictions++;
  }
  _entries[sql] = ptr;
  return ptr;
}