mirror of
https://github.com/strapi/strapi.git
synced 2025-07-25 18:05:07 +00:00
84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
// Public node modules
|
|
const inquirer = require('inquirer');
|
|
|
|
const hasResults = rows => {
|
|
if (!rows || rows.length === 0) return true;
|
|
return false;
|
|
};
|
|
|
|
const checkDatabaseIsEmpty = {
|
|
postgres: client =>
|
|
client
|
|
.select('tablename')
|
|
.from('pg_tables')
|
|
.where('schemaname', 'public')
|
|
.then(hasResults),
|
|
|
|
mysql: (client, { database }) =>
|
|
client
|
|
.select()
|
|
.from('information_schema.tables')
|
|
.where('table_schema', database)
|
|
.then(hasResults),
|
|
|
|
sqlite: client =>
|
|
client
|
|
.select()
|
|
.from('sqlite_master')
|
|
.then(hasResults),
|
|
};
|
|
|
|
module.exports = async ({ scope, connection }) => {
|
|
const knex = require('knex');
|
|
|
|
const { settings } = connection;
|
|
const client = knex({
|
|
client: settings.client,
|
|
connection: Object.assign({}, settings, {
|
|
user: settings.username,
|
|
}),
|
|
useNullAsDefault: true,
|
|
});
|
|
|
|
const destroyClientAndThrow = err => {
|
|
return client.destroy().then(
|
|
() => {
|
|
throw err;
|
|
},
|
|
() => {
|
|
throw err;
|
|
}
|
|
);
|
|
};
|
|
|
|
await client.raw('select 1+1 as result').catch(destroyClientAndThrow);
|
|
|
|
return checkDatabaseIsEmpty[settings.client](client, settings)
|
|
.then(isEmpty => {
|
|
if (isEmpty) return;
|
|
if (scope.dbforce) return;
|
|
|
|
console.log();
|
|
console.error(
|
|
'It seems that your database is not empty.\nStrapi automatically creates tables and columns which might corrupt the data already present in your database.'
|
|
);
|
|
|
|
return inquirer
|
|
.prompt([
|
|
{
|
|
type: 'confirm',
|
|
name: 'confirm',
|
|
message: `Are you sure you want to continue with the ${settings.database} database:`,
|
|
},
|
|
])
|
|
.then(({ confirm }) => {
|
|
// send restart flag to retry
|
|
if (!confirm) return { shouldRetry: true };
|
|
});
|
|
})
|
|
.then(res => client.destroy().then(() => res))
|
|
.catch(destroyClientAndThrow);
|
|
};
|