1.0.5 • Published 1 year ago

@multiple-transaction-manager/pg v1.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@multiple-transaction-manager/pg

PostgreSQL context implementation for multiple-transaction-manager library.

API

Classes

PgDBContext

constructor(txnMngr, connPool)

  • txnMngr: {MultiTxnMngr} The multiple transaction manager to to bind with the context.
  • connPool: {Pool} The PostgreSQL connection pool obtain the session from.
  • Returns: {PgDBContext} The created PgDBContext instance.

addFunctionTask(execFunc)

Adds a task to the transaction manager.

  • execFunc: {execFunc: (txn: PoolClient, task: Task) => Promise<unknown | undefined>) | undefined} The function to be executes in promise. PostgreSQL connection is provided to the function.
  • Returns: {PgDBTask} Returns the created PgDBTask instance.

addTask(querySql: string, params?: unknown | undefined)

A shortcut to add a SQL task to the transaction manager.

  • querySql: {string} The query string to be executes in promise.
  • params: {unknown | undefined} Optional parameter object to bind SQL statement variables.
  • Returns: {PgDBTask} The created PgDBTask instance.

PgDBTask

constructor(context, querySql, params, execFunc)

  • context: {PgDBContext} The PgDBContext to to bind with the task.
  • querySql: {string} The query string to be executes in promise. Ignored if execFunc parameter is provided.
  • params: {unknown | undefined} Optional parameter object to bind SQL statement variables. Ignored if execFunc parameter is provided.
  • execFunc: {execFunc: (txn: PoolClient, task: Task) => Promise<unknown | undefined>) | undefined} The function to be executes in promise. PostgreSQL connection is provided to the function.
  • Returns: {PgDBTask} The created PgDBTask instance.

Example

https://github.com/kaplanke/mtxn-pg/blob/master/test/mtxn.pg.test.ts

    // init manager & context
    const txnMngr: MultiTxnMngr = new MultiTxnMngr();
    const pgContext = new PgDBContext(txnMngr, pool);
    const functionContext = new FunctionContext(txnMngr);

    // Add first step
    pgContext.addTask("DELETE FROM test_table");

    // Add second step
    pgContext.addTask("INSERT INTO test_table(id, name) VALUES (:id, :name)", { "id": 1, "name": "Dave" });

    // Add third step
    functionContext.addTask(
        (task) => { return new Promise((resolve, _) => { console.log("All done."); resolve(task); }); },
        null, // optional params
        (task) => { return new Promise((resolve, _) => { console.log("On Txn Commit..."); resolve(task); }); },
        (task) => { return new Promise((resolve, _) => { console.log("On Txn Rollback..."); resolve(task); }); }
    );


    await expect(txnMngr.exec()).resolves.not.toBeNull();