Skip to content

Commit 0866aea

Browse files
kirrg001chris-brown
authored andcommitted
improvement: migrations (#7000)
closes #6972, #6574 - run each database version as top level transaction - run migrations in correct order
1 parent 71282a2 commit 0866aea

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+954
-924
lines changed

core/server/data/db/connection.js

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ var knex = require('knex'),
22
config = require('../../config'),
33
knexInstance;
44

5+
// @TODO:
6+
// - if you require this file before config file was loaded,
7+
// - then this file is cached and you have no chance to connect to the db anymore
8+
// - bring dynamic into this file (db.connect())
59
function configure(dbConfig) {
610
var client = dbConfig.client,
711
pg;
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
var commands = require('../../schema').commands,
2-
db = require('../../db'),
1+
var Promise = require('bluebird'),
2+
commands = require('../../schema').commands,
3+
table = 'users',
4+
column = 'tour',
5+
message = 'Adding column: ' + table + '.' + column;
36

4-
table = 'users',
5-
column = 'tour',
6-
message = 'Adding column: ' + table + '.' + column;
7+
module.exports = function addTourColumnToUsers(options, logger) {
8+
var transaction = options.transacting;
79

8-
module.exports = function addTourColumnToUsers(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
11-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
12-
if (!exists) {
13-
logger.info(message);
14-
return commands.addColumn(table, column);
15-
} else {
16-
logger.warn(message);
17-
}
18-
});
19-
} else {
20-
// @TODO: this should probably be an error
21-
logger.warn(message);
22-
}
23-
});
10+
return transaction.schema.hasTable(table)
11+
.then(function (exists) {
12+
if (!exists) {
13+
return Promise.reject(new Error('Table does not exist!'));
14+
}
15+
16+
return transaction.schema.hasColumn(table, column);
17+
})
18+
.then(function (exists) {
19+
if (!exists) {
20+
logger.info(message);
21+
return commands.addColumn(table, column, transaction);
22+
} else {
23+
logger.warn(message);
24+
}
25+
});
2426
};
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
var commands = require('../../schema').commands,
2-
db = require('../../db'),
1+
var Promise = require('bluebird'),
2+
commands = require('../../schema').commands,
3+
table = 'posts_tags',
4+
column = 'sort_order',
5+
message = 'Adding column: ' + table + '.' + column;
36

4-
table = 'posts_tags',
5-
column = 'sort_order',
6-
message = 'Adding column: ' + table + '.' + column;
7+
module.exports = function addSortOrderColumnToPostsTags(options, logger) {
8+
var transaction = options.transacting;
79

8-
module.exports = function addSortOrderColumnToPostsTags(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
11-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
12-
if (!exists) {
13-
logger.info(message);
14-
return commands.addColumn(table, column);
15-
} else {
16-
logger.warn(message);
17-
}
18-
});
19-
} else {
20-
// @TODO: this should probably be an error
21-
logger.warn(message);
22-
}
23-
});
10+
return transaction.schema.hasTable(table)
11+
.then(function (exists) {
12+
if (!exists) {
13+
return Promise.reject(new Error('Table does not exist!'));
14+
}
15+
16+
return transaction.schema.hasColumn(table, column);
17+
})
18+
.then(function (exists) {
19+
if (!exists) {
20+
logger.info(message);
21+
return commands.addColumn(table, column, transaction);
22+
} else {
23+
logger.warn(message);
24+
}
25+
});
2426
};
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
1-
var Promise = require('bluebird'),
1+
var Promise = require('bluebird'),
22
commands = require('../../schema').commands,
3-
db = require('../../db'),
3+
table = 'clients',
4+
columns = ['redirection_uri', 'logo', 'status', 'type', 'description'];
45

5-
table = 'clients',
6-
columns = ['redirection_uri', 'logo', 'status', 'type', 'description'];
6+
module.exports = function addManyColumnsToClients(options, logger) {
7+
var transaction = options.transacting;
8+
9+
return transaction.schema.hasTable(table)
10+
.then(function (exists) {
11+
if (!exists) {
12+
return Promise.reject(new Error('Table does not exist!'));
13+
}
714

8-
module.exports = function addManyColumnsToClients(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
1115
return Promise.mapSeries(columns, function (column) {
1216
var message = 'Adding column: ' + table + '.' + column;
13-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
14-
if (!exists) {
15-
logger.info(message);
16-
return commands.addColumn(table, column);
17-
} else {
18-
logger.warn(message);
19-
}
20-
});
17+
18+
return transaction.schema.hasColumn(table, column)
19+
.then(function (exists) {
20+
if (!exists) {
21+
logger.info(message);
22+
return commands.addColumn(table, column, transaction);
23+
} else {
24+
logger.warn(message);
25+
}
26+
});
2127
});
22-
} else {
23-
// @TODO: this should probably be an error
24-
logger.warn('Adding columns to table: ' + table);
25-
}
26-
});
28+
});
2729
};
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
var commands = require('../../schema').commands,
2-
db = require('../../db'),
2+
table = 'client_trusted_domains',
3+
message = 'Creating table: ' + table;
34

4-
table = 'client_trusted_domains',
5-
message = 'Creating table: ' + table;
5+
module.exports = function addClientTrustedDomainsTable(options, logger) {
6+
var transaction = options.transacting;
67

7-
module.exports = function addClientTrustedDomainsTable(logger) {
8-
return db.knex.schema.hasTable(table).then(function (exists) {
9-
if (!exists) {
10-
logger.info(message);
11-
return commands.createTable(table);
12-
} else {
13-
logger.warn(message);
14-
}
15-
});
8+
return transaction.schema.hasTable(table)
9+
.then(function (exists) {
10+
if (!exists) {
11+
logger.info(message);
12+
return commands.createTable(table, transaction);
13+
} else {
14+
logger.warn(message);
15+
}
16+
});
1617
};
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
var commands = require('../../schema').commands,
2-
db = require('../../db'),
1+
var Promise = require('bluebird'),
2+
commands = require('../../schema').commands,
3+
table = 'clients',
4+
column = 'secret',
5+
message = 'Dropping unique on: ' + table + '.' + column;
36

4-
table = 'clients',
5-
column = 'secret',
6-
message = 'Dropping unique on: ' + table + '.' + column;
7+
module.exports = function dropUniqueOnClientsSecret(options, logger) {
8+
var transaction = options.transacting;
79

8-
module.exports = function dropUniqueOnClientsSecret(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
11-
return commands.getIndexes(table).then(function (indexes) {
12-
if (indexes.indexOf(table + '_' + column + '_unique') > -1) {
13-
logger.info(message);
14-
return commands.dropUnique(table, column);
15-
} else {
16-
logger.warn(message);
17-
}
18-
});
19-
} else {
20-
// @TODO: this should probably be an error
21-
logger.warn(message);
22-
}
23-
});
10+
return transaction.schema.hasTable(table)
11+
.then(function (exists) {
12+
if (!exists) {
13+
return Promise.reject(new Error('Table does not exist!'));
14+
}
15+
16+
return commands.getIndexes(table, transaction);
17+
})
18+
.then(function (indexes) {
19+
if (indexes.indexOf(table + '_' + column + '_unique') > -1) {
20+
logger.info(message);
21+
return commands.dropUnique(table, column, transaction);
22+
} else {
23+
logger.warn(message);
24+
}
25+
});
2426
};
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
var commands = require('../../schema').commands,
2-
db = require('../../db'),
1+
var Promise = require('bluebird'),
2+
commands = require('../../schema').commands,
3+
table = 'tags',
4+
column = 'hidden',
5+
message = 'Removing column: ' + table + '.' + column;
36

4-
table = 'tags',
5-
column = 'hidden',
6-
message = 'Removing column: ' + table + '.' + column;
7+
module.exports = function dropHiddenColumnFromTags(options, logger) {
8+
var transaction = options.transacting;
79

8-
module.exports = function dropHiddenColumnFromTags(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
11-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
12-
if (exists) {
13-
logger.info(message);
14-
return commands.dropColumn(table, column);
15-
} else {
16-
logger.warn(message);
17-
}
18-
});
19-
} else {
20-
// @TODO: this should probably be an error
21-
logger.warn(message);
22-
}
23-
});
10+
return transaction.schema.hasTable(table)
11+
.then(function (exists) {
12+
if (!exists) {
13+
return Promise.reject(new Error('Table does not exist!'));
14+
}
15+
16+
return transaction.schema.hasColumn(table, column);
17+
})
18+
.then(function (exists) {
19+
if (exists) {
20+
logger.info(message);
21+
return commands.dropColumn(table, column, transaction);
22+
} else {
23+
logger.warn(message);
24+
}
25+
});
2426
};
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
1-
var Promise = require('bluebird'),
1+
var Promise = require('bluebird'),
22
commands = require('../../schema').commands,
3-
db = require('../../db'),
3+
tables = ['posts', 'tags', 'users'],
4+
column = 'visibility';
45

5-
tables = ['posts', 'tags', 'users'],
6-
column = 'visibility';
6+
module.exports = function addVisibilityColumnToKeyTables(options, logger) {
7+
var transaction = options.transacting;
78

8-
module.exports = function addVisibilityColumnToKeyTables(logger) {
99
return Promise.mapSeries(tables, function (table) {
10-
var message = 'Adding column: ' + table + '.' + column;
11-
return db.knex.schema.hasTable(table).then(function (exists) {
12-
if (exists) {
13-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
14-
if (!exists) {
15-
logger.info(message);
16-
return commands.addColumn(table, column);
17-
} else {
18-
logger.warn(message);
19-
}
20-
});
21-
} else {
22-
// @TODO: this should probably be an error
23-
logger.warn(message);
24-
}
25-
});
10+
var message = 'Adding column: ' + table + '.' + column;
11+
12+
return transaction.schema.hasTable(table)
13+
.then(function (exists) {
14+
if (!exists) {
15+
return Promise.reject(new Error('Table does not exist!'));
16+
}
17+
18+
return transaction.schema.hasColumn(table, column);
19+
})
20+
.then(function (exists) {
21+
if (!exists) {
22+
logger.info(message);
23+
return commands.addColumn(table, column, transaction);
24+
} else {
25+
logger.warn(message);
26+
}
27+
});
2628
});
2729
};
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
var commands = require('../../schema').commands,
2-
db = require('../../db'),
1+
var Promise = require('bluebird'),
2+
commands = require('../../schema').commands,
3+
table = 'posts',
4+
column = 'mobiledoc',
5+
message = 'Adding column: ' + table + '.' + column;
36

4-
table = 'posts',
5-
column = 'mobiledoc',
6-
message = 'Adding column: ' + table + '.' + column;
7+
module.exports = function addMobiledocColumnToPosts(options, logger) {
8+
var transaction = options.transacting;
79

8-
module.exports = function addMobiledocColumnToPosts(logger) {
9-
return db.knex.schema.hasTable(table).then(function (exists) {
10-
if (exists) {
11-
return db.knex.schema.hasColumn(table, column).then(function (exists) {
12-
if (!exists) {
13-
logger.info(message);
14-
return commands.addColumn(table, column);
15-
} else {
16-
logger.warn(message);
17-
}
18-
});
19-
} else {
20-
// @TODO: this should probably be an error
21-
logger.warn(message);
22-
}
23-
});
10+
return transaction.schema.hasTable(table)
11+
.then(function (exists) {
12+
if (!exists) {
13+
return Promise.reject(new Error('Table does not exist!'));
14+
}
15+
16+
return transaction.schema.hasColumn(table, column);
17+
})
18+
.then(function (exists) {
19+
if (!exists) {
20+
logger.info(message);
21+
return commands.addColumn(table, column, transaction);
22+
} else {
23+
logger.warn(message);
24+
}
25+
});
2426
};

0 commit comments

Comments
 (0)