Limitations

This is a prototype that is not meant to be used in production. The list of its main limitations can be found here.

Getting started

Installation

npm install shape-db -S

Model

For each table field there must be a corresponding class member that is accessed by the constructor.

class User { constructor { } }

Tables

The remaining step is to create on eobject for every database table. This is done through a table factory function (named "createTable" in the example code below). This function has three parameters:

The constructor of the class that corresponds to the table A function that retrieves the ID from a given object An optional parameter that overrides the default table name setting.

Read operations

Selecting all records

userTable . select ( ) . build ( ) . fork ( , )

Selecting a single field

userTable . field ( u . id ) . build ( ) . fork ( , )

Mapping records

userTable . map ( new Name ( u . firstName , u . lastName ) ) . build ( ) . fork ( , )

Filtering

userTable . select ( ) . where ( u . lastName == ' Some last name ' ) . build ( ) . fork ( , )

Grouping

userTable . select ( ) . group ( u . membership ) . build ( ) . fork ( , )

Joins

userTable . innerJoin ( configurationTable , u . id == c . id ) . map ( new UserConfiguration ( u . id , u . membership , u . setting ) ) . build ( ) . fork ( , )

Aggregation

userTable . select ( ) . group ( a . statistic . sum ( ) ) . build ( ) . fork ( , )

Distinct selection

userTable . field ( u . membership ) . distinct ( ) . build ( ) . fork ( , )

Write operations

Inserting an object

userTable . insert ( new User ( ' ID ' , ' First name ' , ' Last name ' ) ) . build ( ) . fork ( , )

Inserting objects

userTable . batchInsert ( [ new User ( ' 1 ' , ' First name A ' , ' Last name A ' ) , new User ( ' 2 ' , ' First name B ' , ' Last name B ' ) ] ) . build ( ) . fork ( , )

Updating an object

userTable . update ( new User ( ' ID ' , ' Updated first name ' , ' Updated last name ' ) ) . build ( ) . fork ( , )

Updating objects

userTable . batchUpdate ( [ new User ( ' 1 ' , ' Updated first name A ' , ' Updated last name A ' ) , new User ( ' 2 ' , ' Updated first name B ' , ' Updated last name B ' ) ] ) . build ( ) . fork ( , )

Insert selection

destinationTable . insertSelection ( sourceTable . select ( ) ) . build ( ) . fork ( , )

Delete all records