9.2
Keystore
| (require keystore) | package: keystore |
A small persistent key-value store backed by SQLite. Keys and values may be arbitrary Racket values and are stored using transparent serialization.
1 Overview
The keystore provides persistent storage with automatic serialization and deserialization. Keys are additionally stored in a stringified lowercase form, which allows glob-style queries.
2 Structure
struct
(struct keystore (file path dbh))
file : any/c path : path? dbh : any/c
Represents an open keystore. The file field contains the
original argument, path is the resolved database path, and
dbh is the SQLite connection.
The keystore? predicate is altered to also check if the database connection is (still) valid.
3 Opening & Closing
Opens or creates a keystore. When file is a symbol, a cache
location is used; otherwise it is interpreted as a filesystem path.
The database schema is created automatically if it does not yet exist.
Closes the keystore. The keystore handle is invalidated after closing
the underlying storage (database).
4 Basic Operations
Stores value under key, replacing any existing value.
The function always returns #t.
Retrieves the value associated with key. If the key is not
present, the provided default value is returned when given; otherwise
the symbol 'ks-nil is returned.
Returns #t if the key exists, and #f otherwise.
Returns the number of keys in the keystore.
Removes the key from the store. The function always returns #t.
5 Enumeration
Returns all keys in the store.
Returns all key-value pairs as cons cells.
6 Glob Queries
Glob queries operate on a lowercase string representation of keys.
Returns all keys whose string form matches pattern.
procedure
(ks-key-values-glob ks pattern) → (listof (cons/c any/c any/c))
ks : keystore? pattern : string?
Returns key-value pairs whose keys match pattern.
7 Raw Access
Returns raw key rows in the form:
(list key-string str-key)
Returns raw key-value rows in the form:
(list key-string str-key value-string)
8 Transactions
Puts b1 ... in a "BEGIN/COMMIT" transaction.
It uses with-handlers exn?, so if you raise an exception,
it will do a "BEGIN/ROLLBACK" abd re-raise the exception.
Commits (part of a transaction) using COMMIT/BEGIN.
Fits in a ks-transaction form.
Begins a transaction with "BEGIN".
Commits a transaction with "COMMIT".
Aborts a transaction with "ROLLBACK".
9 Examples
9.1 Basic Usage
(define ks (ks-open 'demo)) (ks-set! ks 'a 42) (ks-set! ks "b" '(1 2 3)) (ks-get ks 'a) (ks-get ks 'missing) (ks-get ks 'missing 0)
9.2 Enumeration Example
(ks-keys ks) (ks-key-values ks)
9.3 Glob Query Example
(ks-keys-glob ks "*b*")