es-entity
Version:
ORM framework for Node js based on Ecmascript 6 and Typescript.
104 lines (89 loc) • 2.6 kB
text/typescript
// @ts-ignore
import sqlite from 'sqlite3';
import stream from 'stream';
import * as bean from '../bean/index.js';
import * as sql from '../sql/index.js';
import Handler from './Handler.js';
const sqliteDriver = await import('sqlite3');
export default class SQlite extends Handler {
connectionPool!: sqlite.Database;
async init() {
this.connectionPool = await new Promise((res, rej) => {
let temp = new sqliteDriver.Database(this.config.database, err => {
if (err) rej(err);
});
res(temp);
});
}
async getConnection() {
return this.connectionPool;
}
async initTransaction(conn: sqlite.Database): Promise<void> {
await new Promise((res, rej) => {
conn.run('BEGIN TRANSACTION', (data: any, err: any) => {
if (err) rej(err);
else res(data);
});
});
}
async commit(conn: sqlite.Database): Promise<void> {
await new Promise((res, rej) => {
conn.run('COMMIT', (data: any, err: any) => {
if (err) rej(err);
else res(data);
});
});
}
async rollback(conn: sqlite.Database): Promise<void> {
await new Promise((res, rej) => {
conn.run('ROLLBACK', (data: any, err: any) => {
if (err) rej(err);
else res(data);
});
});
}
async close(conn: sqlite.Database): Promise<void> {
// await new Promise<void>((res, rej) => {
// conn.close((err: any) => {
// if (err) rej(err);
// else res();
// });
// });
}
async end(): Promise<void> {}
async run(queryStmt: string | sql.Statement | sql.Statement[], connection?: sqlite.Database) {
let { query, dataArgs } = this.prepareQuery(queryStmt);
let conn = connection ?? this.connectionPool;
let data: any[] = await new Promise((resolve, reject) => {
conn.all(query, dataArgs, function (err, r) {
if (err) {
reject(err);
} else {
resolve(r);
}
});
});
let result = new bean.ResultSet();
result.rows = data;
result.rowCount = data.length;
return result;
}
async stream(queryStmt: string | sql.Statement | sql.Statement[], connection?: sqlite.Database) {
let { query, dataArgs } = this.prepareQuery(queryStmt);
let conn = connection ?? this.connectionPool;
let dataStream = new stream.Duplex();
conn.each(
query,
dataArgs,
(err, row: any) => {
if (err) throw err;
dataStream.write(row);
},
(err, count) => {
if (err) throw err;
dataStream.write(null);
}
);
return dataStream;
}
}