Skip to content

Commit a52bf04

Browse files
author
mmoczulski
committedOct 28, 2013
* Added 'added and removed' tables to comparison and report
* Small fixes regarding empty column arrays (for added and removed tables)
1 parent 1647104 commit a52bf04

File tree

3 files changed

+61
-17
lines changed

3 files changed

+61
-17
lines changed
 

‎lib/csvReport.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ DIFF_WRITERS[constants.ADDED_COLUMN] = function (stream, tableName, difference)
1818

1919
LABELS[constants.ADDED_TABLE] = "Table added";
2020
DIFF_WRITERS[constants.ADDED_TABLE] = function (stream, tableName, difference) {
21-
stream.write(format("%s,%s,,,%s", tableName, tableName, LABELS[constants.ADDED_TABLE]));
21+
stream.write(format("%s,%s,,,%s", difference.name, difference.name, LABELS[constants.ADDED_TABLE]));
2222
};
2323

2424
LABELS[constants.CHANGED_COLUMN_NAME] = "Name";
2525
DIFF_WRITERS[constants.CHANGED_COLUMN_NAME] = function (stream, tableName, difference) {
26-
stream.write(format("%s,%s,%s,,%s", tableName, difference.name, difference.from,
26+
stream.write(format("%s,%s,%s,,%s", tableName, difference.to, difference.from,
2727
LABELS[constants.CHANGED_COLUMN_NAME]));
2828
};
2929

@@ -47,10 +47,15 @@ DIFF_WRITERS[constants.REMOVED_COLUMN] = function (stream, tableName, difference
4747
stream.write(format("%s,%s,,,%s", tableName, difference.name, LABELS[constants.REMOVED_COLUMN]));
4848
};
4949

50-
5150
LABELS[constants.REMOVED_TABLE] = "Table removed";
5251
DIFF_WRITERS[constants.REMOVED_TABLE] = function (stream, tableName, difference) {
53-
stream.write(format("%s,%s,,,%s", tableName, tableName, LABELS[constants.REMOVED_TABLE]));
52+
stream.write(format("%s,%s,,,%s", difference.name, difference.name, LABELS[constants.REMOVED_TABLE]));
53+
};
54+
55+
LABELS[constants.CHANGED_TABLE_NAME] = "Table renamed";
56+
DIFF_WRITERS[constants.CHANGED_TABLE_NAME] = function (stream, tableName, difference) {
57+
stream.write(format("%s,%s,%s,,%s", tableName, difference.to, difference.from,
58+
LABELS[constants.CHANGED_TABLE_NAME]));
5459
};
5560

5661
exports.generate = function (differences, fileName, done) {

‎lib/definitionLoader.js

+34-5
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,24 @@ exports.loadSqlFiles = function(leftFiles, rightFiles, done) {
99

1010
var commonFiles = findCommonFilesInTwoDirectories();
1111

12-
done(commonFiles.map(loadSqlDefinition));
12+
var addedFiles = rightFiles.filter(function (file) {
13+
return leftFileNames.indexOf(path.basename(file)) === -1;
14+
});
15+
var removedFiles = leftFiles.filter(function (file) {
16+
return rightFileNames.indexOf(path.basename(file)) === -1;
17+
});
18+
19+
done(commonFiles.map(loadComparableSqlDefinition).
20+
concat(addedFiles.map(loadAddedSqlDefinition)).
21+
concat(removedFiles.map(loadRemovedSqlDefinition)).
22+
sort(function(a, b) {
23+
return (a.newTableName || a.oldTableName).localeCompare(b.newTableName || b.oldTableName);
24+
}));
1325

1426
function findCommonFilesInTwoDirectories() {
1527
return leftFileNames.filter(function (fileName) {
1628
return rightFileNames.indexOf(fileName) !== -1;
17-
}).sort().map(toFileInfo.bind(null, leftFiles, rightFiles));
29+
}).map(toFileInfo.bind(null, leftFiles, rightFiles));
1830
}
1931
};
2032

@@ -31,9 +43,9 @@ function filterByName(fileName, filePath) {
3143
return path.basename(filePath) === fileName;
3244
}
3345

34-
function loadSqlDefinition(commonFile) {
35-
var leftFile = readSqlDefinitionFrom(commonFile.left);
36-
var rightFile = readSqlDefinitionFrom(commonFile.right);
46+
function loadComparableSqlDefinition(twoFiles) {
47+
var leftFile = readSqlDefinitionFrom(twoFiles.left);
48+
var rightFile = readSqlDefinitionFrom(twoFiles.right);
3749

3850
var leftColumnNames = leftFile.columns.map(toColumnName);
3951
var rightColumnNames = rightFile.columns.map(toColumnName);
@@ -63,6 +75,23 @@ function loadSqlDefinition(commonFile) {
6375
};
6476
}
6577

78+
function loadRemovedSqlDefinition(fileName) {
79+
var file = readSqlDefinitionFrom(fileName);
80+
81+
return {
82+
oldTableName: file.name
83+
};
84+
}
85+
86+
function loadAddedSqlDefinition(fileName) {
87+
var file = readSqlDefinitionFrom(fileName);
88+
89+
return {
90+
newTableName: file.name,
91+
addedColumns: file.columns
92+
};
93+
}
94+
6695
function toColumnName(column) {
6796
return column.name;
6897
}

‎lib/diffProcessor.js

+18-8
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ var constants = require("./constants");
55
exports.processRenamedColumns = function(sqlDefinition, renamingDictionary) {
66
var potentialRenamings = Object.keys(renamingDictionary);
77
var columnsWithChangesNames = [];
8-
var addedColumnNames = sqlDefinition.addedColumns.map(function (column) {
8+
var addedColumnNames = (sqlDefinition.addedColumns || []).map(function (column) {
99
return column.name;
1010
});
11-
var removedColumnNames = sqlDefinition.removedColumns.map(function (column) {
11+
var removedColumnNames = (sqlDefinition.removedColumns || []).map(function (column) {
1212
return column.name;
1313
});
1414

@@ -36,40 +36,50 @@ exports.processRenamedColumns = function(sqlDefinition, renamingDictionary) {
3636
removedColumnNames.splice(removedColumnNames.indexOf(duplicate.from.name), 1);
3737
});
3838

39-
sqlDefinition.columnsWithSameNames = sqlDefinition.columnsWithSameNames.concat(columnsWithChangesNames);
39+
sqlDefinition.columnsWithSameNames = (sqlDefinition.columnsWithSameNames || []).concat(columnsWithChangesNames);
4040
};
4141

4242
exports.processSqlDefinitions = function(sqlDefinition) {
4343
var diff = [];
4444
diff.tableName = sqlDefinition.newTableName;
4545

46-
if (sqlDefinition.newTableName !== sqlDefinition.oldTableName) {
46+
if (typeof(sqlDefinition.newTableName) === "string" && typeof(sqlDefinition.oldTableName) === "undefined") {
47+
diff.push({
48+
type: constants.ADDED_TABLE,
49+
name: sqlDefinition.newTableName
50+
});
51+
} else if (typeof(sqlDefinition.oldTableName) === "string" && typeof(sqlDefinition.newTableName) === "undefined") {
52+
diff.push({
53+
type: constants.REMOVED_TABLE,
54+
name: sqlDefinition.oldTableName
55+
});
56+
} else if (sqlDefinition.newTableName !== sqlDefinition.oldTableName) {
4757
diff.push({
4858
type: constants.CHANGED_TABLE_NAME,
4959
from: sqlDefinition.oldTableName,
5060
to: sqlDefinition.newTableName
5161
});
5262
}
5363

54-
sqlDefinition.addedColumns.forEach(function (addedColumn) {
64+
(sqlDefinition.addedColumns || []).forEach(function (addedColumn) {
5565
diff.push({
5666
type: constants.ADDED_COLUMN,
5767
definition: addedColumn.columnDefinition,
5868
name: addedColumn.name
5969
});
6070
});
61-
sqlDefinition.removedColumns.forEach(function (removedColumn) {
71+
(sqlDefinition.removedColumns || []).forEach(function (removedColumn) {
6272
diff.push({
6373
type: constants.REMOVED_COLUMN,
6474
name: removedColumn.name
6575
});
6676
});
6777

68-
sqlDefinition.columnsWithSameNames.forEach(function (changedColumn) {
78+
(sqlDefinition.columnsWithSameNames || []).forEach(function (changedColumn) {
6979
if (changedColumn.from.name !== changedColumn.to.name) {
7080
diff.push({
7181
type: constants.CHANGED_COLUMN_NAME,
72-
name: changedColumn.to.name,
82+
to: changedColumn.to.name,
7383
from: changedColumn.from.name
7484
});
7585
}

0 commit comments

Comments
 (0)
Please sign in to comment.