From cad6a8da1cd04f82f7f5e5017c494653d6b4c7c8 Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Fri, 11 Nov 2022 12:16:55 +0000 Subject: [PATCH 1/5] fix(entity-manager): knex withSchema.raw error --- .../lib/entity-manager/regular-relations.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index a7fe4a3e005..844c0d59974 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -242,21 +242,23 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction ) .transacting(trx); break; - default: - await db - .getConnection() + default: { + const dbConnection = + strapi.db.dialect.client === 'postgres' ? db.connection : db.getConnection(); + await dbConnection .raw( `UPDATE ?? as a - SET ${update.join(', ')} - FROM ( - SELECT ${select.join(', ')} - FROM ?? - WHERE ${where.join(' OR ')} - ) AS b - WHERE b.id = a.id`, + SET ${update.join(', ')} + FROM ( + SELECT ${select.join(', ')} + FROM ?? + WHERE ${where.join(' OR ')} + ) AS b + WHERE b.id = a.id`, [joinTable.name, ...updateBinding, ...selectBinding, joinTable.name, ...whereBinding] ) .transacting(trx); + } /* `UPDATE :joinTable: as a SET :orderColumn: = b.src_order, :inverseOrderColumn: = b.inv_order From 0f7eb70fd2555745e7efdeb8067fa378ca725515 Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Tue, 15 Nov 2022 13:28:35 +0000 Subject: [PATCH 2/5] fix(database): refactor getConnection to not use schemas --- .../core/database/lib/entity-manager/regular-relations.js | 5 ++--- packages/core/database/lib/index.js | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index 844c0d59974..68ec93dc4db 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -243,9 +243,8 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction .transacting(trx); break; default: { - const dbConnection = - strapi.db.dialect.client === 'postgres' ? db.connection : db.getConnection(); - await dbConnection + await db + .getConnection() .raw( `UPDATE ?? as a SET ${update.join(', ')} diff --git a/packages/core/database/lib/index.js b/packages/core/database/lib/index.js index 3e003fcbf74..ee9060ce28c 100644 --- a/packages/core/database/lib/index.js +++ b/packages/core/database/lib/index.js @@ -48,9 +48,7 @@ class Database { } getConnection(tableName) { - const schema = this.connection.getSchemaName(); - const connection = tableName ? this.connection(tableName) : this.connection; - return schema ? connection.withSchema(schema) : connection; + return tableName ? this.connection(tableName) : this.connection; } getSchemaConnection(trx = this.connection) { From 5553538c1818abc43714293ad7db304bbe8a4bb8 Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Tue, 15 Nov 2022 13:37:18 +0000 Subject: [PATCH 3/5] chore --- packages/core/database/lib/entity-manager/regular-relations.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index 68ec93dc4db..a21ca847fd6 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -242,7 +242,7 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction ) .transacting(trx); break; - default: { + default: await db .getConnection() .raw( @@ -257,7 +257,6 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction [joinTable.name, ...updateBinding, ...selectBinding, joinTable.name, ...whereBinding] ) .transacting(trx); - } /* `UPDATE :joinTable: as a SET :orderColumn: = b.src_order, :inverseOrderColumn: = b.inv_order From 4b1f8101e658ff41961c8a8b274e087221eabffb Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Wed, 16 Nov 2022 09:34:08 +0000 Subject: [PATCH 4/5] fix(entity-manager): use db.connection for .raw() chore(database): revert getConnection() --- .../lib/entity-manager/regular-relations.js | 17 +++++++++++------ packages/core/database/lib/index.js | 4 +++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index a21ca847fd6..282a7f7139b 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -226,8 +226,7 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction // https://github.com/knex/knex/issues/2504 switch (strapi.db.dialect.client) { case 'mysql': - await db - .getConnection() + await db.connection .raw( `UPDATE ?? as a, @@ -242,9 +241,14 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction ) .transacting(trx); break; - default: - await db - .getConnection() + default: { + const schemaName = db.connection.getSchemaName(); + let joinTableName = joinTable.name; + if (schemaName) { + joinTableName = `${schemaName}.${joinTableName}`; + } + + await db.connection .raw( `UPDATE ?? as a SET ${update.join(', ')} @@ -254,9 +258,10 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction WHERE ${where.join(' OR ')} ) AS b WHERE b.id = a.id`, - [joinTable.name, ...updateBinding, ...selectBinding, joinTable.name, ...whereBinding] + [joinTableName, ...updateBinding, ...selectBinding, joinTableName, ...whereBinding] ) .transacting(trx); + } /* `UPDATE :joinTable: as a SET :orderColumn: = b.src_order, :inverseOrderColumn: = b.inv_order diff --git a/packages/core/database/lib/index.js b/packages/core/database/lib/index.js index ee9060ce28c..3e003fcbf74 100644 --- a/packages/core/database/lib/index.js +++ b/packages/core/database/lib/index.js @@ -48,7 +48,9 @@ class Database { } getConnection(tableName) { - return tableName ? this.connection(tableName) : this.connection; + const schema = this.connection.getSchemaName(); + const connection = tableName ? this.connection(tableName) : this.connection; + return schema ? connection.withSchema(schema) : connection; } getSchemaConnection(trx = this.connection) { From 04295573f1270121f7598bc08dcac2f22fed03bf Mon Sep 17 00:00:00 2001 From: Jamie Howard Date: Wed, 16 Nov 2022 11:22:22 +0000 Subject: [PATCH 5/5] chore(entity-manager): revert to not handle multiple pg schemas --- .../database/lib/entity-manager/regular-relations.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/core/database/lib/entity-manager/regular-relations.js b/packages/core/database/lib/entity-manager/regular-relations.js index 282a7f7139b..7b1e69ce04e 100644 --- a/packages/core/database/lib/entity-manager/regular-relations.js +++ b/packages/core/database/lib/entity-manager/regular-relations.js @@ -241,13 +241,7 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction ) .transacting(trx); break; - default: { - const schemaName = db.connection.getSchemaName(); - let joinTableName = joinTable.name; - if (schemaName) { - joinTableName = `${schemaName}.${joinTableName}`; - } - + default: await db.connection .raw( `UPDATE ?? as a @@ -258,10 +252,9 @@ const cleanOrderColumns = async ({ id, attribute, db, inverseRelIds, transaction WHERE ${where.join(' OR ')} ) AS b WHERE b.id = a.id`, - [joinTableName, ...updateBinding, ...selectBinding, joinTableName, ...whereBinding] + [joinTable.name, ...updateBinding, ...selectBinding, joinTable.name, ...whereBinding] ) .transacting(trx); - } /* `UPDATE :joinTable: as a SET :orderColumn: = b.src_order, :inverseOrderColumn: = b.inv_order