Skip to content

manekshms/relational-algebra-evaluator

Repository files navigation

Relational Algebra Evaluator

🔥 Relational algebra evaluator

Example Application

Table of Contents

Install

npm i relational-algebra-evaluator

Usage

import { Rae } from 'relational-algebra-evaluator';

// create an instance of Rae
const rae = Rae.getInstance();

// relational algebra expression
const expression = 'P/title,author/(book)';

// execute the expression
const result = rae.execute(expression);

API

Rae.getInstance(options)

Generate new Instance of Rae

options

Key value description
dataDir ../data/ Location to save the temporary data for current session
sessionId null Session Id of current session

Rae.setDataDir

Set session data directory

// create an instance of Rae
const rae = Rae.getInstance();
rae.setDataDir('../data');

Rae.addRelations

Add Custom relations to session data

// create an instance of Rae
const rae = Rae.getInstance();
const customRelations = {
  users: [
    { id: '1', name: 'Jack' },
    { id: '2', name: 'Bob' },
  ],
};

rae.addRelations(JSON.stringify(customRelations));

Rae.getAllRelations

Get All Relations

// create an instance of Rae
const rae = Rae.getInstance();
const relations = rae.getAllRelations();

Rae.execute

Execute relational Algebric expression

// create an instance of Rae
const rae = Rae.getInstance();

// relational algebra expression
const expression = 'P/title,author/(book)';

// execute the expression
const result = rae.execute(expression);

Guides

Adding your own relations

There are some relations already added for the current session. To add a custom relation to the current session, addRelations method help to add custom relations to current session. Custom relations should be a json format, sample schema for the json file is given below.

{
	"relation-name-here":  [
	  { "key": "value" }
    ...
  ]
}

View All Relations

To view all relations via executing command

show relations

View Relation/Variable Data

To view all data in a relation or variable by executing command view Example:

view relation-name

Creating variable

Creating variables can be helpful for the user to save the result of one operation and it can be used in future. Example:

  var userLocation = P/name, address/(users)
  P/name/(userLocation)

In the above example, the name and address column from users’ relation is projected then saved the result to a variable. In the second command, it takes the name column from the variable userLocation using projection.

Working with nested Relational Algebraic Operations

A Relational Algebraic Evaluator can execute operators recursively. If the entered relation algebraic expression contains a nested operation, then the system will go deep into the last nested operation and start to evaluate it until it reaches the parent expression. Example:

S/name=Bob/( ( P/name, address/(users) ) )

In the above command initially, it will do the nested projection operation and then it will execute the selection operation.

Operations

Projection

Example:

P/title,author,publication/(book)

Selection

Example:

S/publication=AMC/(book)

Cartesian Product

Example:

X(maleTable,femaleTable)

Union

Example:

U( (P/id,name/( (S/city=Pune/(salesPeople)) )), ( P/id,name/( (S/city=Pune/(customers)) ) ) )

Set Difference

Example:

SD(tableA, tableB)

Rename

Example:

R/newRelationName/(users)

Author

Maneksh M S