acquire method
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;
}