-
Notifications
You must be signed in to change notification settings - Fork 16
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);
}
};