// this is a horrible script i use and edit for db revisions and migrations. i hate it. // i should have a db migration plan but this is not, and probably never will be, big // enough of a project to really warrant it. const sqlite = require("better-sqlite3"); const showdown = require("showdown"); const db = new sqlite('the_big_db.db', { verbose: console.log }); const converter = new showdown.Converter(); const createPages = db.prepare(` create table if not exists pages ( id integer primary key, number integer autoincrement, title varchar(255), description text, html text, time timestamp default current_timestamp, author integer ) `); const createUsers = db.prepare(` create table if not exists users ( id integer primary key, name varchar(64) unique, password varchar(128) ) `); function migratePages() { console.log("moving old table to a temporary"); console.log(db.prepare(`alter table pages rename to old_pages`).run()) console.log("creating new page table") console.log(createPages.run()); console.log('iterating over old pages'); rows = db.prepare(`select * from old_pages`).all(); const insertPage = db.prepare(`insert into pages (number, title, description, html) values (:id, :title, :description, :html)`); rows.forEach((pageData) => { const {id, title, description, html} = pageData; console.log(`rendering page number ${id}`) const renderedPage = converter.makeHtml(description); insertPage.run({...pageData, html: renderedPage}); }); console.log("getting rid of old table"); console.log(db.prepare("drop table old_pages").run()); } db.transaction(migratePages)(); function migrateUsers() { console.log("moving old users"); console.log(db.prepare("alter table users rename to old_users").run()); console.log("creating new users table"); console.log(createUsers.run()); const insertUser = db.prepare("insert into users (name, password) values (:name, :password)") db.prepare("select * from old_users").all().forEach((user) => { console.log(insertUser.run(user)); }); console.log("clearing old table"); console.log(db.prepare("drop table old_users").run()); } db.transaction(migrateUsers)();