ReadonlytransactionPortable isolation levels this adapter can honestly provide.
Begin a transaction, returning a handle that can open transaction-scoped data sources as well as commit and roll back.
Optionaloptions: TransactionOptions
Optional transaction settings; omitted preserves the backend default
The transaction handle
Opens the underlying connection (pool).
Count entities matching a filter.
Entity name
Filter conditions
Optionalfilter: FilterExpressionMatching count
Entity name
Primary key field(s), defaults to ['id']
Delete an entity by primary key.
Entity name
Primary key value (scalar or composite record)
true when deleted, false if not found
Closes the underlying connection (pool).
Find a single entity by its primary key value.
Entity name
Primary key value (scalar or composite record)
The entity or null
Core findPage implementation shared between the non-transactional data
source and the transaction overlay. The getRecords thunk lets the two
callers — the committed store and the per-tx overlay — each supply their
visible row set without duplicating the cursor-handling logic.
Pipeline:
keysetPredicate,
conjoin it with the caller's own filter (when present), and apply
where / filter / orderBy in the same order as findAll.limit + 1 rows (the one-extra-row probe): if more than limit
are returned there IS a next page and the last returned row yields the
next cursor; otherwise the page is terminal and nextCursor is null.decoded.orderedValues carries the value of EVERY ordered field (in
orderBy order) from the last row of the previous page — not just key
column values. This is what keysetPredicate indexes by
position to build the "row after this one" comparison.
Entity name
Normalized page query (carries cursor, filter,
orderBy, limit, and select)
Thunk supplying the visible rows at call time
A PageResult carrying rows and the nextCursor
Returns the internal store for an entity, creating it lazily.
Entity name
Primary key field(s), defaults to ['id']
The entity store
Insert a new entity. Generates key values if absent.
Entity name
Entity data
The inserted entity; rejects when a caller-supplied primary key is already carried by a stored row
Liveness probe (M95b §3.5): the process IS the backend, so the store is
reachable exactly while this adapter is connected. Honest, not a special
case — without it the indicator would omit reachable for the one
backend it can actually vouch for.
It reports MemoryAdapter.isReady rather than an
unconditional true (M95b review): "is the backend reachable" and "am I
connected to it" are the same question for an in-process store, and a
probe that answered true for a disconnected adapter would model, for
every third-party implementor reading this as the reference, the one
pattern that makes a liveness probe lie.
Reports whether the adapter is connected and usable.
true when ready
Query entities with full filtering, sorting, and pagination.
Entity name
Normalized query options
Matching entities
Update an existing entity by primary key, merging fields.
Entity name
Primary key value (scalar or composite record)
Fields to merge
The updated entity
In-memory implementation of
IDatabaseAdapter.Stores entities in plain
Mapstructures, supporting basic CRUD, filtering, sorting, pagination, and transaction semantics.Since
0.1.0