Skip to content

Commit 1ec69b5

Browse files
author
mmoczulski
committed
* Added simple report generation to CSV file
1 parent 896d212 commit 1ec69b5

File tree

4 files changed

+87
-5
lines changed

4 files changed

+87
-5
lines changed

lib/csvReport.js

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
"use strict";
2+
3+
var HEADER = "Table,Column,Before,After,Changes";
4+
var fs = require("fs");
5+
var os = require("os");
6+
var constants = require("./constants");
7+
var format = require("util").format;
8+
9+
var LABELS = {};
10+
var DIFF_WRITERS = {};
11+
12+
13+
LABELS[constants.ADDED_COLUMN] = "Added";
14+
DIFF_WRITERS[constants.ADDED_COLUMN] = function (stream, tableName, difference) {
15+
stream.write(format("%s,%s,,,%s", tableName, difference.definition,
16+
LABELS[constants.ADDED_COLUMN]));
17+
};
18+
19+
LABELS[constants.ADDED_TABLE] = "Table added";
20+
DIFF_WRITERS[constants.ADDED_TABLE] = function (stream, tableName, difference) {
21+
stream.write(format("%s,%s,,,%s", tableName, tableName, LABELS[constants.ADDED_TABLE]));
22+
};
23+
24+
LABELS[constants.CHANGED_COLUMN_NAME] = "Name";
25+
DIFF_WRITERS[constants.CHANGED_COLUMN_NAME] = function (stream, tableName, difference) {
26+
stream.write(format("%s,%s,%s,,%s", tableName, difference.name, difference.from,
27+
LABELS[constants.CHANGED_COLUMN_NAME]));
28+
};
29+
30+
LABELS[constants.CHANGED_COLUMN_OBLIGATION] = "Essentiality type";
31+
DIFF_WRITERS[constants.CHANGED_COLUMN_OBLIGATION] = function (stream, tableName, difference) {
32+
stream.write(format("%s,%s,%s,%s,%s", tableName, difference.name, nullability(difference.from),
33+
nullability(difference.to), LABELS[constants.CHANGED_COLUMN_OBLIGATION]));
34+
};
35+
function nullability(isMandatory) {
36+
return isMandatory ? "NOT NULL" : "NULL";
37+
}
38+
39+
LABELS[constants.CHANGED_COLUMN_TYPE] = "Data type";
40+
DIFF_WRITERS[constants.CHANGED_COLUMN_TYPE] = function (stream, tableName, difference) {
41+
stream.write(format("%s,%s,%s,%s,%s", tableName, difference.name, difference.from, difference.to,
42+
LABELS[constants.CHANGED_COLUMN_TYPE]));
43+
};
44+
45+
LABELS[constants.REMOVED_COLUMN] = "Removed";
46+
DIFF_WRITERS[constants.REMOVED_COLUMN] = function (stream, tableName, difference) {
47+
stream.write(format("%s,%s,,,%s", tableName, difference.name, LABELS[constants.REMOVED_COLUMN]));
48+
};
49+
50+
51+
LABELS[constants.REMOVED_TABLE] = "Table removed";
52+
DIFF_WRITERS[constants.REMOVED_TABLE] = function (stream, tableName, difference) {
53+
stream.write(format("%s,%s,,,%s", tableName, tableName, LABELS[constants.REMOVED_TABLE]));
54+
};
55+
56+
exports.generate = function (differences, fileName, done) {
57+
58+
var stream = fs.createWriteStream(fileName);
59+
60+
stream.write(HEADER + os.EOL);
61+
62+
differences.forEach(function (differencesInTable) {
63+
differencesInTable.forEach(function (difference) {
64+
DIFF_WRITERS[difference.type](stream, differencesInTable.tableName, difference);
65+
stream.write(os.EOL);
66+
});
67+
});
68+
stream.end();
69+
70+
done(null);
71+
};

lib/diff.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@
22

33
var loader = require("./definitionLoader");
44
var processor = require("./diffProcessor");
5+
var reporter = require("./csvReport");
56

67
exports.findDifferences = function (options) {
78
loader.loadSqlFiles(options.left, options.right, function(sqlDefinitions) {
89

9-
var differences = sqlDefinitions.map(processor.loadSqlFiles);
10+
var differences = sqlDefinitions.map(processor.processSqlDefinitions);
1011

11-
options.done(differences);
12+
reporter.generate(differences, options.output, function (err) {
13+
if (err) {
14+
console.error("An error occurred during generation of report", err);
15+
process.exit(-1);
16+
}
17+
18+
options.done();
19+
});
1220
});
1321
};

lib/diffProcessor.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
var constants = require("./constants");
44

5-
exports.loadSqlFiles = function(sqlDefinition) {
5+
exports.processSqlDefinitions = function(sqlDefinition) {
66
var diff = [];
7+
diff.tableName = sqlDefinition.newTableName;
78

89
if (sqlDefinition.newTableName !== sqlDefinition.oldTableName) {
910
diff.push({

sql-diff.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ var fs = require("fs");
44
var async = require("async");
55
var path = require("path");
66
var args = require("optimist").
7-
usage("Usage: $0 --left [path] --right [path]").
8-
demand(["left", "right"]).
7+
usage("Usage: $0 --output [path] --left [path] --right [path]").
8+
demand(["left", "right", "output"]).
99
describe("left", "Left folder (earlier one) to compare").
1010
describe("right", "Right folder (later one) to compare").
11+
describe("output", "The name of file, to which report will be generated").
1112
argv;
1213

1314

@@ -40,6 +41,7 @@ async.each([leftDir, rightDir], directoryExists, function(err) {
4041
diff.findDifferences({
4142
left: leftDirectory,
4243
right: rightDirectory,
44+
output: args.output,
4345
done: function () {
4446
console.log("Job finished successfully");
4547
}

0 commit comments

Comments
 (0)