Package Exports
- @slimio/sqlite-transaction
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@slimio/sqlite-transaction) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
sqlite-transaction
SQLite transaction manager for SlimIO events addon. Designed to work with the sqlite npm package.
Requirements
- Node.js v12 or higher
Getting Started
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @slimio/sqlite-transaction
# or
$ yarn add @slimio/sqlite-transactionUsage example
Take the following example with an SQLite DB (with a table users).
const tM = new TransactionManager(db, {
interval: 500,
verbose: true
});
tM.registerSubject("user", {
insert: "INSERT INTO users (username, password) VALUES (?, ?)"
});
tM.once("user.insert", (openAt, data, aData) => {
console.log(`User insertion requested at: ${new Date(openAt)}, now successfully inserted!`);
});
const tId = tM.open("insert", "user", ["fraxken", "admin"]);
const ret = tM.attachData(tId, { foo: "bar" });API
constructor< S >(db: sqlite.Database, options?: TransactionManager.ConstructorOptions)
Create a new SQLite transaction manager. The first argument must be an SQLite db (from the npm package sqlite). Available options are described by the following interface:
interface ConstructorOptions {
interval?: number;
verbose?: boolean;
}Default values are interval 5000 (milliseconds) and verbose false.
const sqlite = require("sqlite");
const transactionManager = require("@slimio/sqlite-transaction");
const db = await sqlite.open("./db.sqlite");
const tM = new transactionManager(db, { interval: 1000 });registerSubject(name: TransactionManager.Subject, actions: TransactionManager.Actions): this
Register a new Subject on the Transaction Manager object. The subject name must be typeof string or symbol. The actions argument must be described by a JavaScript Object as follow:
interface Actions {
insert?: string;
delete?: string;
update?: string;
}tM.registerSubject("test", {
update: "...",
delete: "..."
});loadSubjectsFromFile(fileLocation: string): Promise< void >
Load subjects from a given .json file. The file must be indented as follow:
{
"subjectName": {
"insert": "INSERT INTO table (field) VALUES ('val')",
"update": "..."
}
}Example
await tM.loadSubjectsFromFile("./subjects.json");open(action: TransactionManager.Action, subject: keyof S, data: any[]): string
Open a new request that will be queue and handled in a SQLite transaction. action and subject arguments are not mandatory and must be valid. Action must be either insert, update or delete.
The action must exist on the given subject.
attachData(transactId: string, data: any): boolean
close(transactId: string): boolean
exit(): void
Roadmap
- Ability to lock/unlock requests (db handle priority).
- Reduce/Agregate same requests (alarm with row occurence for example).
Dependencies
| Name | Refactoring | Security Risk | Usage |
|---|---|---|---|
| @slimio/timer | Minor | Low | Driftless Timer |
License
MIT