All files / src MySQLDatabase.ts

80% Statements 16/20
0% Branches 0/2
85.71% Functions 6/7
80% Lines 16/20

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                              1x 1x 1x 1x   1x       7x 7x       1x       2x 2x       1x 1x       2x 2x 2x 2x                      
// Copyright (C) 2017  Norman Breau
 
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import {Database} from './Database';
import {MySQLConnection} from './MySQLConnection';
import * as MySQL from 'mysql';
import {getApplicationLogger} from './instance';
 
export class MySQLDatabase extends Database {
    private cluster: MySQL.PoolCluster;
 
    constructor() {
        super();
        this.cluster = MySQL.createPoolCluster();
    }
 
    public escape(query: string): string {
        return MySQL.escape(query);
    }
 
    protected _addNode(nodeID: string, config: MySQL.PoolConfig): void {
        getApplicationLogger().trace(`Adding node to connection pool: "${nodeID}"`);
        this.cluster.add(nodeID, config);
    }
 
    protected _removeNode(nodeID: string): void {
        getApplicationLogger().trace(`Removing node to connection pool: "${nodeID}"`);
        this.cluster.remove(nodeID);
    }
 
    protected _getConnection(query: string, requireWriteAccess: boolean): Promise<MySQLConnection> {
        getApplicationLogger().trace(`Querying connection pool for "${query}".`);
        return new Promise<MySQLConnection>((resolve, reject) => {
            let instantationStack: string = new Error().stack;
            this.cluster.getConnection(query, (error: MySQL.MysqlError, connection: MySQL.PoolConnection) => {
                if (error) {
                    reject(error);
                    return;
                }
 
                resolve(new MySQLConnection(connection, instantationStack, !requireWriteAccess));
            });
        });
    }
}