0.0.20 • Published 5 years ago

cache-simple-orm v0.0.20

Weekly downloads
3
License
ISC
Repository
github
Last release
5 years ago

ODM for intersystems Caché

Object document mapping for intersystems Caché database. Write node.js code just like you would write ObjectScript.

Current status

Alpha quality

Check out the example below.

const Persistent = require('../js/Persistent');
const Session = require('../js/Session');
const Reader = require('../js/Reader');
const ft = require('../js/functools');

require('console.table');

const log = require('../js/logger');
log.level = 'info';

const aviationDescription = {
    namespace: 'Aviation',
};

class Crew extends Persistent {};
Crew.description = aviationDescription;

class Aircraft extends Persistent {};
Aircraft.description = aviationDescription;

const eventId = '20010608X01122';
const aircraftKey = 1;
const crewNumber = 1;

const id = {
    'EventId': eventId,
    'AircraftKey': aircraftKey,
    'CrewNumber': crewNumber,
};

Session.transact(() => 
    Crew.openId(id)
    .tap(result => {
        console.table(result);
        console.log('updating incident info');
    })
    .flatMap(result => {
        const injury = result.Injury;
        result.Injury = injury === 'fatal' ? 'critical' : 'fatal';

        return result.save();
    })
).then(() => 
    Session.transact(() => 
        Crew.openId(id)
        .tap(result => {
            console.table(result);
            console.log('incident info updated');
        }) 
    )
).then(() => 
    Session.transact(() => 
        Crew.findBy({
            'Injury': 'fatal',
            'Category': 'Co-Pilot',
            'Sex': 'M',
        }, ['Age', 'Sex', 'Aircraft'])
        .tap(deadMaleCoPilots => {
            console.log('Dead male copilots');
            console.table(deadMaleCoPilots);
        })
        .flatMap(deadMaleCoPilots => 
            Reader.sequence(deadMaleCoPilots
                .filter(copilot => copilot.Age < 30)
                .map(copilot => copilot.Aircraft)
                .map(aircraftId => Aircraft.findBy({
                    'ID': aircraftId
                }, ['ID', 'AircraftModel'])
                .tap(aircraftId => {
                    console.log('Found aircraft id');
                    console.table(aircraftId);
                }))))
        .map(airplanes => ft.flat(airplanes))
        .tap(airplanes => {
            console.log('Result of search');
            console.table(airplanes);
        }))
).then(() => 
    Session.exec(() => Aircraft.call('Extent'))
        .tap(result => {
            console.log(`Called Aircarft's Extent classmethod`);
            console.table(result.slice(0, 10));
        })
).finally(() => Session.destroy());

Current Status

See the https://github.com/theconst/aodbc for configuration details. Work in progress. Not ready for use as a standalone module.

Configuration

Change configuration options in config.json

OptionDescritpion
dsnDSN for ODBC connection to use
poolSizeMinMinimum size of connection pool
poolSizeMaxMaximum size of connection pool
cacheSizeSize of query cache per connection
evictionIntervalConnection pool eviction interval
0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

5 years ago

0.0.17

5 years ago

0.0.16

5 years ago

0.0.15

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago