Skip to content
/ qldb Public

QLDB driver for node built on top of Amazon's QLDB Javascript Driver

Notifications You must be signed in to change notification settings

Lepozepo/qldb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QLDB Bridge for Node

This is a simplified solution of the QLDB driver for AWS

How to use

  • Import QLDB and instantiate a client
  • Run queries using execute
import QLDB from 'qldb';

const QuantumClient = new QLDB({
  accessKey,
  secretKey,
  region,
  ledger,
});

// Later in your code
const stuff = await QuantumClient.execute('SELECT * from Stuff');

Inserting Documents

To insert a document you need to convert it to ion structures as describe here. This package provides a helper to convert javascript objects and array into ion structures.

  • Import ionize from qldb
  • Pass an array or object through the function
  • Run an insert or update statement
import QLDB, { ionize } from 'qldb';

const QuantumClient = new QLDB({
  accessKey,
  secretKey,
  region,
  ledger,
});

// Later in your code
const doc = { id: 'someId', key: 'value', n: 1, fl: 1.2, obj: { s: 's' }, arr: [1, 2] };
const stuff = await QuantumClient.execute(`INSERT INTO collection ${ionize(doc)}`);

Acid Transactions

To run multiple operations within an acid transaction, use the transaction command and pass a function to it. Whatever you return from the transaction function will be the result set from the transaction operation. All data created during the transaction will return an object as it would during normal execution.

import QLDB, { ionize } from 'qldb';

const QuantumClient = new QLDB({
  accessKey,
  secretKey,
  region,
  ledger,
});

// Later in your code
const docs = [{ id: 'someId', value: '1' }, { id: 'otherId', value: '2' }];
const [doc1, doc2] = await QuantumClient.transaction((txn) => {
  const d1 = await txn.execute(`INSERT INTO collection ${ionize(docs[0])}`);
  const d2 = await txn.execute(`INSERT INTO collection ${ionize(docs[1])}`);
  return [d1, d2];
});

// NOTE: You can iterate and use a Promise.all as well if you don't care to use the output of one entry for another

Validating documents

To validate documents as described here you can use the Quantum Client's validate function. The validate function can only take a query string that returns QLDB history.

import QuantumClient from './your/configured/QLDB/instance';

const isValid = await QuantumClient.validate(`SELECT * FROM _ql_committed_Vehicle WHERE data.VIN = '1HVBBAANXWH544237'`);

About

QLDB driver for node built on top of Amazon's QLDB Javascript Driver

Resources

Stars

Watchers

Forks

Packages

No packages published