rxdbi:
An RxJs Database Interface using TypeScript annotations Heavily inspired from JDBI
Currenly at the stage of a prototype - comments welcome!
Example
Write SQL directly - no ORM here!
import { Observable } from '@reactivex/rxjs';
import { Database } from 'sqlite3';
import { SqlQuery, SqlProxy, DatabaseAdapter, SqlUpdate, SqlUpdateResult } from 'rxdbi/query';
import { Sqlite3QueryAdapter } from 'rxdbi/query-sqlite';
interface LoremRecord {
id: number;
info: string;
}
class LoremDao implements SqlProxy {
constructor(public database: DatabaseAdapter) { }
@SqlUpdate(`
CREATE TABLE lorem (id NUMBER, info TEXT)
`)
createTable(): Observable<SqlUpdateResult> { throw '' }
@SqlUpdate(`
INSERT INTO lorem (id, info)
VALUES ($id, $info)
`)
insert(id: number, info: string): Observable<SqlUpdateResult> { throw '' }
@SqlQuery(`
SELECT id, info
FROM lorem
WHERE id = $id
`)
getById(id: number): Observable<LoremRecord> { throw '' }
@SqlQuery(`
SELECT id, info
FROM lorem
`)
getAll(): Observable<LoremRecord> { throw '' }
}
const dbAdapter = new Sqlite3QueryAdapter(new Database(':memory:'));
const dao = new LoremDao(dbAdapter);
dao.createTable().subscribe({
complete: () => {
Observable
.range(1, 10)
.flatMap((i: number) => dao.insert(i, `lorem ${i}`))
.subscribe(
(r: SqlUpdateResult) => console.log(`created entry ${JSON.stringify(r)}`),
err => console.error(err),
() => {
console.log('Now querying...')
dao.getAll().subscribe(val => console.log(val),
err => console.error(err),
() => {
console.log('Got them all... now cheching #5');
dao.getById(5)
.subscribe(val => console.log(val));
});
});
}
});