Now we can build or database by reading schema files. Also added doc strings to all the functions. This is a much better definition of a database script for our usecases..

This commit is contained in:
2017-12-01 10:19:22 +01:00
parent 2b772e3017
commit ac6bbe6ac6

View File

@@ -4,30 +4,80 @@ const sqlite = require('sqlite');
class SqliteDatabase {
constructor(host) {
this.host = host;
this.connection = sqlite;
constructor(host) {
this.host = host;
this.connection = sqlite;
this.schemaDirectory = path.join(__dirname, 'schemas');
}
// this.schemaDirectory = path.join(__dirname, 'schemas');
}
/**
* Connect to the database.
* @returns {Promise} succeeds if connection was established
*/
connect() {
return Promise.resolve()
.then(() => sqlite.open(this.host))
.then(() => sqlite.exec('pragma foreign_keys = on;'));
}
connect() {
return Promise.resolve()
.then(() => sqlite.open(this.host))
.then(() => sqlite.exec('pragma foreign_keys = on;'));
}
/**
* Run a SQL query against the database.
* @param {String} sql SQL query
* @param {Array} parameters in the SQL query
* @returns {Promise}
*/
run(sql, parameters) {
return this.connection.run(sql, parameters);
}
all(sql, parameters) {
return this.connection.all(sql, parameters);
}
/**
* Run a SQL query against the database and retrieve all the rows.
* @param {String} sql SQL query
* @param {Array} parameters in the SQL query
* @returns {Promise}
*/
all(sql, parameters) {
return this.connection.all(sql, parameters);
}
get(sql, parameters) {
return this.connection.get(sql, parameters);
}
/**
* Run a SQL query against the database and retrieve one row.
* @param {String} sql SQL query
* @param {Array} parameters in the SQL query
* @returns {Promise}
*/
get(sql, parameters) {
return this.connection.get(sql, parameters);
}
run(sql, parameters) {
return this.connection.run(sql, parameters);
}
/**
* Run a SQL query against the database and retrieve the status.
* @param {String} sql SQL query
* @param {Array} parameters in the SQL query
* @returns {Promise}
*/
execute(sql) {
return this.connection.exec(sql);
}
/**
* Setup the database by running setup.sql file in schemas/.
* @returns {Promise}
*/
setUp() {
const setupSchema = this.readSqlFile('setup.sql');
return this.execute(setupSchema);
}
/**
* Returns the file contents of a SQL file in schemas/.
* @returns {String}
*/
readSqlFile(filename) {
const schemaPath = path.join(this.schemaDirectory, filename);
const schema = fs.readFileSync(schemaPath).toString('utf-8');
return schema;
}
}
module.exports = SqliteDatabase;