mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-12 06:27:10 +03:00
added ability to query mysql database
This commit is contained in:
27
src/databases/Mysql.js
Normal file
27
src/databases/Mysql.js
Normal file
@@ -0,0 +1,27 @@
|
||||
var MysqlInterface = require('sync-mysql');
|
||||
|
||||
class Mysql {
|
||||
constructor(config) {
|
||||
this.connection = new MysqlInterface(config);
|
||||
}
|
||||
|
||||
exec(query) {
|
||||
this.prepare('run', query, []);
|
||||
}
|
||||
|
||||
prepare (type, query, params) {
|
||||
console.log("prepare (mysql): type: " + type + ", query: " + query + ", params: " + params);
|
||||
if (type === 'get') {
|
||||
return this.connection.query(query, params)[0];
|
||||
} else if (type === 'run') {
|
||||
this.connection.query(query, params);
|
||||
} else if (type === 'all') {
|
||||
return this.connection.query(query, params);
|
||||
} else {
|
||||
console.log('returning undefined...')
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Mysql;
|
||||
32
src/databases/Sqlite.js
Normal file
32
src/databases/Sqlite.js
Normal file
@@ -0,0 +1,32 @@
|
||||
const { db } = require("./databases");
|
||||
|
||||
class Sqlite {
|
||||
constructor(connection) {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
getConnection() {
|
||||
return this.connection;
|
||||
}
|
||||
|
||||
prepare(type, query, params) {
|
||||
//console.log("prepare: type: " + type + ", query: " + query + ", params: " + params);
|
||||
if (type === 'get') {
|
||||
return this.connection.prepare(query).get(...params);
|
||||
} else if (type === 'run') {
|
||||
this.connection.prepare(query).run(...params);
|
||||
} else if (type === 'all') {
|
||||
return this.connection.prepare(query).all(...params);
|
||||
} else {
|
||||
console.log('returning undefined...')
|
||||
console.log("prepare: type: " + type + ", query: " + query + ", params: " + params);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
exec(query) {
|
||||
return this.connection.exec(query);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Sqlite;
|
||||
@@ -2,58 +2,67 @@ var config = require('../config.js');
|
||||
var Sqlite3 = require('better-sqlite3');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var Sqlite = require('./Sqlite.js')
|
||||
var Mysql = require('./Mysql.js')
|
||||
|
||||
let options = {
|
||||
readonly: config.readOnly,
|
||||
fileMustExist: !config.createDatabaseIfNotExist
|
||||
};
|
||||
|
||||
// Make dirs if required
|
||||
if (!fs.existsSync(path.join(config.db, "../"))) {
|
||||
fs.mkdirSync(path.join(config.db, "../"));
|
||||
}
|
||||
if (!fs.existsSync(path.join(config.privateDB, "../"))) {
|
||||
fs.mkdirSync(path.join(config.privateDB, "../"));
|
||||
}
|
||||
if (config.mysql) {
|
||||
module.exports = {
|
||||
db: new Mysql(config.mysql),
|
||||
privateDB: new Mysql(config.privateMysql)
|
||||
};
|
||||
} else {
|
||||
// Make dirs if required
|
||||
if (!fs.existsSync(path.join(config.db, "../"))) {
|
||||
fs.mkdirSync(path.join(config.db, "../"));
|
||||
}
|
||||
if (!fs.existsSync(path.join(config.privateDB, "../"))) {
|
||||
fs.mkdirSync(path.join(config.privateDB, "../"));
|
||||
}
|
||||
|
||||
var db = new Sqlite3(config.db, options);
|
||||
var privateDB = new Sqlite3(config.privateDB, options);
|
||||
var db = new Sqlite3(config.db, options);
|
||||
var privateDB = new Sqlite3(config.privateDB, options);
|
||||
|
||||
if (config.createDatabaseIfNotExist && !config.readOnly) {
|
||||
if (fs.existsSync(config.dbSchema)) db.exec(fs.readFileSync(config.dbSchema).toString());
|
||||
if (fs.existsSync(config.privateDBSchema)) privateDB.exec(fs.readFileSync(config.privateDBSchema).toString());
|
||||
}
|
||||
if (config.createDatabaseIfNotExist && !config.readOnly) {
|
||||
if (fs.existsSync(config.dbSchema)) db.exec(fs.readFileSync(config.dbSchema).toString());
|
||||
if (fs.existsSync(config.privateDBSchema)) privateDB.exec(fs.readFileSync(config.privateDBSchema).toString());
|
||||
}
|
||||
|
||||
// Upgrade database if required
|
||||
if (!config.readOnly) {
|
||||
ugradeDB(db, "sponsorTimes");
|
||||
ugradeDB(privateDB, "private")
|
||||
}
|
||||
// Upgrade database if required
|
||||
if (!config.readOnly) {
|
||||
ugradeDB(db, "sponsorTimes");
|
||||
ugradeDB(privateDB, "private")
|
||||
}
|
||||
|
||||
// Enable WAL mode checkpoint number
|
||||
if (!config.readOnly && config.mode === "production") {
|
||||
db.exec("PRAGMA journal_mode=WAL;");
|
||||
db.exec("PRAGMA wal_autocheckpoint=1;");
|
||||
}
|
||||
// Enable WAL mode checkpoint number
|
||||
if (!config.readOnly && config.mode === "production") {
|
||||
db.exec("PRAGMA journal_mode=WAL;");
|
||||
db.exec("PRAGMA wal_autocheckpoint=1;");
|
||||
}
|
||||
|
||||
// Enable Memory-Mapped IO
|
||||
db.exec("pragma mmap_size= 500000000;");
|
||||
privateDB.exec("pragma mmap_size= 500000000;");
|
||||
// Enable Memory-Mapped IO
|
||||
db.exec("pragma mmap_size= 500000000;");
|
||||
privateDB.exec("pragma mmap_size= 500000000;");
|
||||
|
||||
module.exports = {
|
||||
db: db,
|
||||
privateDB: privateDB
|
||||
};
|
||||
module.exports = {
|
||||
db: new Sqlite(db),
|
||||
privateDB: new Sqlite(privateDB)
|
||||
};
|
||||
|
||||
function ugradeDB(db, prefix) {
|
||||
let versionCodeInfo = db.prepare("SELECT value FROM config WHERE key = ?").get("version");
|
||||
let versionCode = versionCodeInfo ? versionCodeInfo.value : 0;
|
||||
function ugradeDB(db, prefix) {
|
||||
let versionCodeInfo = db.prepare("SELECT value FROM config WHERE key = ?").get("version");
|
||||
let versionCode = versionCodeInfo ? versionCodeInfo.value : 0;
|
||||
|
||||
let path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql";
|
||||
while (fs.existsSync(path)) {
|
||||
db.exec(fs.readFileSync(path).toString());
|
||||
let path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql";
|
||||
while (fs.existsSync(path)) {
|
||||
db.exec(fs.readFileSync(path).toString());
|
||||
|
||||
versionCode = db.prepare("SELECT value FROM config WHERE key = ?").get("version").value;
|
||||
path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql";
|
||||
versionCode = db.prepare("SELECT value FROM config WHERE key = ?").get("version").value;
|
||||
path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user