Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import * as mysql from "mysql" class TransactionContext { conn: mysql.PoolConnection constructor(conn: mysql.PoolConnection) { this.conn = conn } execute(queryStr: string, params?: any[]): Promise<any> { return new Promise((resolve, reject) => { this.conn.query(queryStr, params, (err, rows) => { if (err) return reject(err) resolve(rows) }) }) } query(queryStr: string, params?: any[]): Promise<any> { return new Promise((resolve, reject) => { this.conn.query(queryStr, params, (err, rows) => { if (err) return reject(err) resolve(rows) }) }) } } // Promise wrapper for node-mysql with transaction support and some shorthands export class DatabaseConnection { config: mysql.PoolConfig pool!: mysql.Pool constructor(config: mysql.PoolConfig) { this.config = config } async connect(): Promise<void> { this.pool = mysql.createPool(this.config) await this.getConnection() } getConnection(): Promise<mysql.PoolConnection> { return new Promise((resolve, reject) => { this.pool.getConnection((poolerr, conn) => { if (poolerr) { reject(poolerr) } else { resolve(conn) } }) }) } async transaction<T>( callback: (t: TransactionContext) => Promise<T> ): Promise<T> { const conn = await this.getConnection() const transactionContext = new TransactionContext(conn) try { await transactionContext.execute("START TRANSACTION") const result = await callback(transactionContext) await transactionContext.execute("COMMIT") return result } catch (err) { await transactionContext.execute("ROLLBACK") throw err } finally { transactionContext.conn.release() } } query(queryStr: string, params?: any[]): Promise<any> { return new Promise((resolve, reject) => { this.pool.query(queryStr, params, (err, rows) => { if (err) { console.log(`ERROR with query::\n${queryStr}\n::ERROR`) return reject(err) } resolve(rows) }) }) } async get(queryStr: string, params?: any[]): Promise<any> { return (await this.query(queryStr, params))[0] } end(): void { this.pool.end() } } |