SqlPointerCache class
LRU cache of native UTF-8 pointers keyed by their original Dart String.
Eliminates the per-call toNativeUtf8 + malloc.free round-trip when the
same SQL string is executed repeatedly (hot loops, prepared statement
rewrite paths, etc.). Cache hits return the previously-allocated pointer
directly; misses allocate, register, and return.
Lifecycle
- The pointer is owned by the cache. Callers MUST NOT free it.
- When an entry is evicted (because maxSize was reached), its pointer is
freed via
malloc.free. - dispose releases every cached pointer; call once when the owning
OdbcNativeis disposed.
Concurrency
Each OdbcNative owns its own cache, and the FFI mutex serializes calls
through a single connection. Sharing one cache across isolates would
require explicit synchronization and is not the intended design.
Sizing
Default 256 entries × average ~512 bytes per SQL ≈ 128 KB. Workloads with larger SQL or wider hot sets should pass a custom maxSize.
Constructors
- SqlPointerCache({int maxSize = _defaultMaxSize})
Properties
- hashCode → int
-
The hash code for this object.
no setterinherited
- length → int
-
Number of entries currently held by the cache.
no setter
- maxSize → int
-
Maximum number of cached entries. Once full, the oldest entry is freed
to make room for the new one (LRU policy via LinkedHashMap insertion
order).
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- stats → ({int evictions, int hits, int misses})
-
Diagnostic counters since construction. Useful for benchmarks and
regression tests; do not export through telemetry without rolling.
no setter
Methods
-
acquire(
String sql) → Pointer< Utf8> -
Returns a native UTF-8 pointer for
sql, allocating if necessary. -
containsSql(
String sql) → bool -
Whether the cache contains an entry for
sql. -
dispose(
) → void - Frees every cached pointer. Safe to call multiple times. The cache is reusable after dispose if a new instance is constructed.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
resetStats(
) → void - Resets the diagnostic counters without touching the cached entries.
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited