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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 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 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" import * as typeorm from "typeorm" import { Knex, knex } from "knex" import { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, } from "../settings/serverSettings" import { registerExitHandler } from "./cleanup" let typeormConnection: typeorm.Connection export const getConnection = async (): Promise<typeorm.Connection> => { if (typeormConnection) return typeormConnection try { typeormConnection = typeorm.getConnection() } catch (err) { if (err instanceof Error && err.name === "ConnectionNotFoundError") typeormConnection = await typeorm.createConnection() else throw err } registerExitHandler(async () => { if (typeormConnection) await typeormConnection.close() }) return typeormConnection } export class TransactionContext { manager: typeorm.EntityManager constructor(manager: typeorm.EntityManager) { this.manager = manager } execute(queryStr: string, params?: any[]): Promise<any> { return this.manager.query( params ? mysql.format(queryStr, params) : queryStr ) } query(queryStr: string, params?: any[]): Promise<any> { return this.manager.query( params ? mysql.format(queryStr, params) : queryStr ) } } export const transaction = async <T>( callback: (t: TransactionContext) => Promise<T> ): Promise<T> => (await getConnection()).transaction(async (manager) => callback(new TransactionContext(manager)) ) export const queryMysql = async ( queryStr: string, params?: any[] ): Promise<any> => { const conn = await getConnection() return conn.query(params ? mysql.format(queryStr, params) : queryStr) } // For operations that modify data (TODO: handling to check query isn't used for this) export const execute = queryMysql // Return the first match from a mysql query export const mysqlFirst = async ( queryStr: string, params?: any[] ): Promise<any> => { return (await queryMysql(queryStr, params))[0] } export const closeTypeOrmAndKnexConnections = async (): Promise<void> => { if (typeormConnection) await typeormConnection.close() if (_knexInstance) await _knexInstance.destroy() } let _knexInstance: Knex export const knexInstance = (): Knex<any, any[]> => { if (_knexInstance) return _knexInstance _knexInstance = knex({ client: "mysql", connection: { host: DB_HOST, user: DB_USER, password: DB_PASS, database: DB_NAME, port: DB_PORT, typeCast: (field: any, next: any) => { if (field.type === "TINY" && field.length === 1) { return field.string() === "1" // 1 = true, 0 = false } return next() }, }, }) registerExitHandler(async () => { if (_knexInstance) await _knexInstance.destroy() }) return _knexInstance } export const knexTable = (table: string): Knex.QueryBuilder => knexInstance().table(table) export const knexRaw = (str: string): Knex.Raw => knexInstance().raw(str) |