stats method

Future<DatabaseStats> stats(
  1. Pointer<MDB_txn> txn, {
  2. String? dbName,
  3. LMDBFlagSet? flags,
})

Gets statistics for a specific database using an explicit transaction.

Parameters:

  • txn - Active transaction
  • dbName - Optional named database
  • flags - Optional operation flags

Returns detailed database statistics.

Example:

final txn = await db.txnStart(flags: LMDBFlagSet()..add(MDB_RDONLY));
try {
  final stats = await db.stats(txn);
  print('Entries: ${stats.entries}');
  print('Tree depth: ${stats.depth}');
  await db.txnCommit(txn);
} catch (e) {
  await db.txnAbort(txn);
  rethrow;
}

Throws StateError if database is closed Throws LMDBException if operation fails

Implementation

Future<DatabaseStats> stats(
  Pointer<MDB_txn> txn, {
  String? dbName,
  LMDBFlagSet? flags,
}) async {
  if (!isInitialized) throw StateError(_errDbNotInitialized);

  final dbi = await _getDatabase(txn, name: dbName, flags: flags);
  final statPtr = calloc<MDB_stat>();

  try {
    final result = _lib.mdb_stat(
      txn,
      dbi,
      statPtr,
    );

    if (result != 0) {
      throw LMDBException('Failed to get statistics', result);
    }

    return DatabaseStats(
      pageSize: statPtr.ref.ms_psize,
      depth: statPtr.ref.ms_depth,
      branchPages: statPtr.ref.ms_branch_pages,
      leafPages: statPtr.ref.ms_leaf_pages,
      overflowPages: statPtr.ref.ms_overflow_pages,
      entries: statPtr.ref.ms_entries,
    );
  } finally {
    calloc.free(statPtr);
  }
}