diff --git a/packages/core/database/lib/dialects/mysql/database-inspector.js b/packages/core/database/lib/dialects/mysql/database-inspector.js index d978732f47..4138a134fe 100644 --- a/packages/core/database/lib/dialects/mysql/database-inspector.js +++ b/packages/core/database/lib/dialects/mysql/database-inspector.js @@ -1,6 +1,6 @@ 'use strict'; -const { MARIADB, MYSQL } = require('../../utils/constants'); +const { MARIADB, MYSQL, UNKNOWN } = require('../../utils/constants'); const SQL_QUERIES = { VERSION: `SELECT version() as version`, @@ -12,11 +12,20 @@ class MysqlDatabaseInspector { } async getInformation() { - const [results] = await this.db.connection.raw(SQL_QUERIES.VERSION); - const version = results[0].version; - - const [versionNumber, databaseName] = version.split('-'); - const database = databaseName && databaseName.toLowerCase() === 'mariadb' ? MARIADB : MYSQL; + let database; + let versionNumber; + try { + const [results] = await this.db.connection.raw(SQL_QUERIES.VERSION); + const versionSplit = results[0].version.split('-'); + const databaseName = versionSplit[1]; + versionNumber = versionSplit[0]; + database = databaseName && databaseName.toLowerCase() === 'mariadb' ? MARIADB : MYSQL; + throw new Error('oups'); + } catch (e) { + database = UNKNOWN; + versionNumber = UNKNOWN; + strapi.log.warn(`Database version couldn't be retrieved: ${e.message}`); + } return { database, diff --git a/packages/core/database/lib/dialects/postgresql/database-inspector.js b/packages/core/database/lib/dialects/postgresql/database-inspector.js index d52cff826f..1ec6c04f51 100644 --- a/packages/core/database/lib/dialects/postgresql/database-inspector.js +++ b/packages/core/database/lib/dialects/postgresql/database-inspector.js @@ -1,6 +1,6 @@ 'use strict'; -const { POSTGRES } = require('../../utils/constants'); +const { POSTGRES, UNKNOWN } = require('../../utils/constants'); const SQL_QUERIES = { VERSION: `SELECT current_setting('server_version') as version`, @@ -12,12 +12,18 @@ class PostgresqlDatabaseInspector { } async getInformation() { - const { rows } = await this.db.connection.raw(SQL_QUERIES.VERSION); - const version = rows[0].version; + let version; + try { + const { rows } = await this.db.connection.raw(SQL_QUERIES.VERSION); + version = rows[0].version.split(' ')[0]; + } catch (e) { + version = UNKNOWN; + strapi.log.warn(`Database version couldn't be retrieved: ${e.message}`); + } return { database: POSTGRES, - version: version.split(' ')[0], + version, }; } } diff --git a/packages/core/database/lib/dialects/sqlite/database-inspector.js b/packages/core/database/lib/dialects/sqlite/database-inspector.js index a4243d7931..8640145256 100644 --- a/packages/core/database/lib/dialects/sqlite/database-inspector.js +++ b/packages/core/database/lib/dialects/sqlite/database-inspector.js @@ -1,6 +1,6 @@ 'use strict'; -const { SQLITE } = require('../../utils/constants'); +const { SQLITE, UNKNOWN } = require('../../utils/constants'); const SQL_QUERIES = { VERSION: `SELECT sqlite_version() as version`, @@ -12,9 +12,14 @@ class SqliteDatabaseInspector { } async getInformation() { - const results = await this.db.connection.raw(SQL_QUERIES.VERSION); - const version = results[0].version; - + let version; + try { + const results = await this.db.connection.raw(SQL_QUERIES.VERSION); + version = results[0].version; + } catch (e) { + version = UNKNOWN; + strapi.log.warn(`Database version couldn't be retrieved: ${e.message}`); + } return { database: SQLITE, version, diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index 06abf74bfd..855ba93bca 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -2,7 +2,7 @@ const { map, isEmpty } = require('lodash/fp'); const semver = require('semver'); -const { MYSQL } = require('../utils/constants'); +const { MYSQL, UNKNOWN } = require('../utils/constants'); const { isBidirectional, isOneToAny, @@ -199,7 +199,12 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction // Handle databases that don't support window function ROW_NUMBER const { database, version } = strapi.db.getDatabaseInformation(); - if (database === MYSQL && semver.lt(version, '8.0.0')) { + if ( + strapi.db.dialect.client === 'mysql' && + [MYSQL, UNKNOWN].includes(database) && + (!semver.valid(version) || semver.lt(version, '8.0.0')) + ) { + console.log('DEDANS'); await cleanOrderColumnsForOldDatabases({ id, attribute, db, inverseRelIds, transaction: trx }); return; } diff --git a/packages/core/database/lib/utils/constants.js b/packages/core/database/lib/utils/constants.js index 6938187da1..cc6659c372 100644 --- a/packages/core/database/lib/utils/constants.js +++ b/packages/core/database/lib/utils/constants.js @@ -1,6 +1,7 @@ 'use strict'; module.exports = { + UNKNOWN: 'unknown', SQLITE: 'SQLite', POSTGRES: 'Postgres', MYSQL: 'MySQL',