123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- const {defaultSettings} = require('./util/default.json');
- const sqlite3 = require('sqlite3').verbose();
- const mode = ( process.env.READONLY ? sqlite3.OPEN_READONLY : sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE );
- const schema = [`
- BEGIN TRANSACTION;
- CREATE TABLE patreons (
- patreon TEXT PRIMARY KEY
- UNIQUE
- NOT NULL,
- count INTEGER NOT NULL
- );
- CREATE INDEX idx_patreons_patreon ON patreons (
- patreon
- );
- CREATE TABLE discord (
- main TEXT UNIQUE
- CHECK (main = guild),
- guild TEXT NOT NULL
- REFERENCES discord (main) ON DELETE CASCADE,
- channel TEXT,
- wiki TEXT NOT NULL
- DEFAULT [${defaultSettings.wiki}],
- lang TEXT NOT NULL
- DEFAULT [${defaultSettings.lang}],
- role TEXT,
- inline INTEGER,
- prefix TEXT NOT NULL
- DEFAULT [${process.env.prefix}],
- patreon TEXT REFERENCES patreons (patreon) ON DELETE SET NULL,
- voice INTEGER,
- UNIQUE (
- guild,
- channel
- )
- );
- CREATE INDEX idx_discord_channel ON discord (
- guild,
- channel DESC
- );
- CREATE INDEX idx_discord_patreon ON discord (
- patreon
- )
- WHERE patreon IS NOT NULL;
- CREATE INDEX idx_discord_voice ON discord (
- voice
- )
- WHERE voice IS NOT NULL;
- CREATE TABLE verification (
- guild TEXT NOT NULL
- REFERENCES discord (main) ON DELETE CASCADE,
- configid INTEGER NOT NULL,
- channel TEXT NOT NULL,
- role TEXT NOT NULL,
- editcount INTEGER NOT NULL
- DEFAULT [0],
- usergroup TEXT NOT NULL
- DEFAULT [user],
- accountage INTEGER NOT NULL
- DEFAULT [0],
- rename INTEGER NOT NULL
- DEFAULT [0],
- UNIQUE (
- guild,
- configid
- )
- );
- CREATE INDEX idx_verification_config ON verification (
- guild,
- configid ASC,
- channel
- );
- CREATE TABLE rcgcdw (
- guild TEXT NOT NULL
- REFERENCES discord (main) ON DELETE CASCADE,
- configid INTEGER NOT NULL,
- webhook TEXT NOT NULL
- UNIQUE,
- wiki TEXT NOT NULL,
- lang TEXT NOT NULL
- DEFAULT [${defaultSettings.lang}],
- display INTEGER NOT NULL
- DEFAULT [1],
- wikiid INTEGER,
- rcid INTEGER,
- postid TEXT,
- UNIQUE (
- guild,
- configid
- )
- );
- CREATE INDEX idx_rcgcdw_wiki ON rcgcdw (
- wiki
- );
- CREATE INDEX idx_rcgcdw_webhook ON rcgcdw (
- webhook
- );
- CREATE INDEX idx_rcgcdw_config ON rcgcdw (
- guild,
- configid ASC
- );
- CREATE TABLE blocklist (
- wiki TEXT UNIQUE
- NOT NULL,
- reason TEXT
- );
- CREATE INDEX idx_blocklist_wiki ON blocklist (
- wiki
- );
- COMMIT TRANSACTION;
- PRAGMA user_version = 1;
- `];
- module.exports = new Promise( (resolve, reject) => {
- const db = new sqlite3.Database( './wikibot.db', mode, dberror => {
- if ( dberror ) {
- console.log( '- Error while connecting to the database: ' + dberror );
- return reject();
- }
- db.get( 'PRAGMA user_version;', (error, row) => {
- if ( error ) {
- console.log( '- Error while getting the database version: ' + error );
- return reject();
- }
- if ( row.user_version > schema.length ) {
- console.log( '- Invalid database version: ' + row.user_version );
- return reject();
- }
- if ( row.user_version === schema.length ) {
- console.log( '- The database is up to date: ' + row.user_version );
- db.close( cerror => {
- if ( cerror ) {
- console.log( '- Error while closing the database connection: ' + cerror );
- return cerror;
- }
- } );
- return resolve();
- }
- console.log( '- The database outdated: ' + row.user_version );
- if ( process.env.READONLY ) return reject();
- db.exec( schema.filter( (sql, version) => {
- return ( row.user_version > version );
- } ).join('\n'), exerror => {
- if ( exerror ) {
- console.log( '- Error while updating the database: ' + exerror );
- return reject();
- }
- console.log( '- The database has been updated to: ' + schema.length );
- db.close( cerror => {
- if ( cerror ) {
- console.log( '- Error while closing the database connection: ' + cerror );
- return cerror;
- }
- } );
- return resolve();
- } );
- } );
- } );
- } );
|