Notes/compare.js

60 lines
1.5 KiB
JavaScript
Raw Normal View History

2017-11-23 23:19:45 -05:00
"use strict";
require('colors');
const jsdiff = require('diff');
const sqlite = require('sqlite');
const sql = require('./sql');
function printDiff(one, two) {
const diff = jsdiff.diffChars(one, two);
diff.forEach(function(part){
// green for additions, red for deletions
// grey for common parts
const color = part.added ? 'green' :
part.removed ? 'red' : 'grey';
process.stderr.write(part.value[color]);
});
}
function compareRows(rs1, rs2) {
const len = Math.max(rs1.length, rs2.length);
for (let i = 0; i < len; i++) {
const r1 = JSON.stringify(rs1[i], null, 2);
const r2 = JSON.stringify(rs2[i], null, 2);
if (r1 !== r2) {
console.log("Row #" + i + " differs:");
console.log("First: ", r1);
console.log("Second: ", r2);
printDiff(r1, r2);
process.exit(1);
}
}
}
async function main() {
const db1Path = process.argv[2];
const db2Path = process.argv[3];
const db1 = await sqlite.open(db1Path, { Promise });
const db2 = await sqlite.open(db2Path, { Promise });
async function compare(query) {
const rs1 = await sql.getResults(db1, query);
const rs2 = await sql.getResults(db2, query);
compareRows(rs1, rs2);
}
await compare("SELECT note_id, note_title, note_text, date_modified, is_protected, is_deleted FROM notes ORDER BY note_id");
}
(async () => {
try {
await main();
} catch (e) {
console.error(e);
}
})();