lmdb-patch v1.0.4
lmdb-patch
Provides a patch method for LMDB to do partial object updates.
Installation
npm install lmdb-patchUsage
lmdb-patch exports patch and a utility function to bind it to a database, e.g.
import {open} from "lmdb";
import {withExtensions} from "lmdb-patch";
const db = withExtensions(open("test", {create: true}));API
async db.patch(key:lmdbKey,value:any,version:number,ifVersion:number) - returns boolean
From a call interface perspective, patch works the same way as the LMDB put function.
If value is a primitive and there is no existing value, the function returns false. Otherwise, the old value is potentially replaced using the same version semantics as put with these additional constraints:
- If
valueis a function, it will be called with the existing value as an argument and the return value will be used as the patched value. You could use this for a counter. - If the existing value is not the same type as
valueor if thevalueis a primitive, the existing value will be replaced. - If the
valueis an object, it will be merged with the existing value viaObject.assign. Then, the passed invaluewill be walked for any properties and child properties that are explicitlyundefinedand these properties will be deleted from the merged value.
For example:
// assume person1 = {name:"Joe",housing:{homeowner:true}}
await db.patch("person1",{housing:{homeowner:undefined,renter:true}})
// now person1 = {name:"Joe",housing:{renter:true}}withExtensions(db:lmdbDatabase,extenstions:object) - returns lmdbDatabase`
Extends an LMDB database and any child databases it opens to have the extensions provided as well as any child databases it opens. This utility is common to other lmdb extensions like lmdb-copy, lmdb-move.
Automatically adds patch.
Testing
Testing is conducted using Jest.
| File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
|---|---|---|---|---|---|
| All files | 100 | 100 | 100 | 100 | |
| index.js | 100 | 100 | 100 | 100 |
Release Notes (Reverse Chronological Order)
2023-04-27 v1.0.4 Simplified use of withExtensions.
2023-04-23 v1.0.3 Documentation formatting
2023-04-19 v1.0.2 Simplified database augmentation by adding withExtensions from lmdb-extend.
2023-04-19 v1.0.1 Documentation updates.
2023-04-14 v1.0.0 Updated documentation. 100% test coverage.
2023-04-14 v0.0.1 Initial release.