mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-30 17:37:26 +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);
 | |
| };
 | 
