- 
                Notifications
    You must be signed in to change notification settings 
- Fork 17
Drivers
        Thiago Delgado Pinto edited this page Jul 3, 2018 
        ·
        8 revisions
      
    This page lists currently known drivers and some brief instructions on creating new drivers.
- ActiveX Data Objects - Windows only
- CSV files
- Excel files
- Firebase
- INI files
- JSON files
- MySQL
- MS SQL Server
- PostgreSQL
- SQLite
Writing a new wrapper around an existing database implementation in Node is fairly straight forward. The database-js-mysql wrapper is a good place to start. Generally the pattern will be like this:
var baseDriver = require('base-driver');
class Wrapper {
    constructor(connection) {
        this.connection = connection;
        this.transacton = false; // only needed if the database supports transactions
    }
    query(sql) {
        var self = this;
        return new Promise((resolve, reject) => {
            self.connection.query(sql, (error, data, fields) => {
                if (error) {
                    reject(error);
                } else {
                    resolve(data);
                }                
            });
        });
    }
    execute(sql) {
        return new Promise((resolve, reject) => {
            self.connection.execute(sql, (error, data, fields) => {
                if (error) {
                    reject(error);
                } else {
                    resolve(data);
                }                
            });
        });
    }
    close() {
        var self = this;
        return new Promise((resolve, reject) => {
            self.connection.close((err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve();
                }
            });
        });
    }
    /** From here down is only required for transaction support **/
    isTransactionSupported() {
        return true;
    }
    inTransaction() {
        return this.transaction;
    }
    beginTransaction() {
        var self = this;
        return new Promise((resolve, reject) => {
            this.execute("START TRANSACTION")
            .then(() => {
                self.transaction = true;
                resolve(true);
            })
            .catch((error) => {
                reject(error);
            });
        });
    }
    commit() {
        var self = this;
        return new Promise((resolve, reject) => {
            this.execute("COMMIT")
            .then(() => {
                self.transaction = false;
                resolve(true);
            })
            .catch((error) => {
                reject(error);
            });
        });
    }
    rollback() {
        var self = this;
        return new Promise((resolve, reject) => {
            this.execute("ROLLBACK")
            .then(() => {
                self.transaction = false;
                resolve(true);
            })
            .catch((error) => {
                reject(error);
            });
        });
    }
}
module.exports = {
    open: function(connection) {
        let base = baseDriver.createConnection({
            host: connection.Hostname || 'localhost',
            port: parseInt(connection.Port) || 3306,
            user: connection.Username,
            password: connection.Password,
            database: connection.Database
        })
        return new Wrapper(base);
    }
};