diff --git a/src/services/projects/create/options.ts b/src/services/projects/create/options.ts index 1214509be..3cda6f88e 100644 --- a/src/services/projects/create/options.ts +++ b/src/services/projects/create/options.ts @@ -30,10 +30,15 @@ export function getDialect(options: ProjectCreateOptions): ProjectCreateOptions[ const { databaseDialect: dialect, databaseConnectionURL: url } = options; if (dialect) return dialect; - if (url?.startsWith('postgres://')) return 'postgres'; - if (url?.startsWith('mssql://')) return 'mssql'; - if (url?.startsWith('mongodb')) return 'mongodb'; - if (url?.startsWith('mysql://') || url?.startsWith('mariadb://')) return 'mysql'; + + if (!url) return null; + + const [, extractedDialect] = /(.*):\/\//.exec(url); + + if (['mysql2', 'mysql', 'mariadb'].includes(extractedDialect)) return 'mysql'; + if (['mssql', 'tedious'].includes(extractedDialect)) return 'mssql'; + if (['pg', 'postgres', 'postgresql'].includes(extractedDialect)) return 'postgres'; + if (extractedDialect === 'mongodb') return 'mongodb'; return null; } diff --git a/src/services/schema/update/database.js b/src/services/schema/update/database.js index a149c95c7..98da0841d 100644 --- a/src/services/schema/update/database.js +++ b/src/services/schema/update/database.js @@ -1,3 +1,5 @@ +const { getDialect } = require('../../projects/create/options'); + class Database { constructor({ assertPresent, mongodb, Sequelize, terminator }) { assertPresent({ @@ -27,22 +29,7 @@ class Database { // eslint-disable-next-line class-methods-use-this getDialect(dbConnectionUrl, dbDialect) { - if (dbConnectionUrl) { - if (dbConnectionUrl.startsWith('postgres://')) { - return 'postgres'; - } - if (dbConnectionUrl.startsWith('mysql://')) { - return 'mysql'; - } - if (dbConnectionUrl.startsWith('mssql://')) { - return 'mssql'; - } - // NOTICE: For MongoDB can be "mongodb://" or "mongodb+srv://" - if (dbConnectionUrl.startsWith('mongodb')) { - return 'mongodb'; - } - } - return dbDialect; + return getDialect({ databaseConnectionURL: dbConnectionUrl, databaseDialect: dbDialect }); } connectToMongodb(options, isSSL) { diff --git a/test/commands/projects/create/nosql.test.js b/test/commands/projects/create/nosql.test.js index f26e695f8..662ae8ac7 100644 --- a/test/commands/projects/create/nosql.test.js +++ b/test/commands/projects/create/nosql.test.js @@ -391,6 +391,7 @@ describe('projects:create:nosql', () => { databaseUser: '', databasePassword: '', databaseSSL: false, + databaseDialect: 'mongodb', }, }, ], diff --git a/test/services/database.unit.test.js b/test/services/database.unit.test.js index 05852dc6d..8a72ea12a 100644 --- a/test/services/database.unit.test.js +++ b/test/services/database.unit.test.js @@ -86,9 +86,9 @@ describe('services > database', () => { }); describe('and no dialect is provided', () => { - it('should return undefined', () => { + it('should return null', () => { expect.assertions(1); - expect(database.getDialect()).toBeUndefined(); + expect(database.getDialect()).toBeNull(); }); }); });