From 07f10bee6610135d8583e8faa12f56c44938496b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Henr=C3=ADquez?= Date: Mon, 10 Jan 2022 03:23:00 -0300 Subject: [PATCH 1/4] Allows publishing on systems with table prefixes Found a bug. I'm using typeorm in multiple systems sharing the same database, so I need my burdy install to have it's tables prefixed (i.e. `blog_posts`). Turns out that typeorm doesn't support table aliases when updating (and won't support them in the future): https://github.com/typeorm/typeorm/issues/1798. This PR fixes it. I'm getting a "Unknown column 'post.id' in 'where clause" error when attempting to publish/unpublish items. Generated query: UPDATE `blog_post` SET `publishedAt` = '2022-01-10 03:03:15.945', `status` = 'published', `publishedFrom` = '2022-01-10 03:03:15.945', `publishedUntil` = NULL, `updatedAt` = '2022-01-10 03:03:15.945' WHERE post.id IN (1, 2, 3) Steps to reproduce: - Set up a table prefix with the `TYPEORM_ENTITY_PREFIX` - Attempt to publish a post. --- src/server/controllers/post.controller.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/controllers/post.controller.ts b/src/server/controllers/post.controller.ts index fd7d9e1..3043583 100644 --- a/src/server/controllers/post.controller.ts +++ b/src/server/controllers/post.controller.ts @@ -451,7 +451,8 @@ app.put( let posts = await postRepository.findByIds(ids); if (!(posts?.length > 0)) throw new BadRequestError('invalid_ids'); - const qb = postRepository.createQueryBuilder('post').update(Post); + const alias = postRepository.metadata.tableName; + const qb = postRepository.createQueryBuilder(alias).update(Post); const now = new Date(); if (publish) { qb.set({ @@ -485,11 +486,11 @@ app.put( }); }) ); - qb.where('post.id IN (:...ids)', { + qb.where(`${alias}.id IN (:...ids)`, { ids: all.map((post) => post.id), }); } else { - qb.where('post.id IN (:...ids)', { + qb.where(`${alias}.id IN (:...ids)`, { ids: posts.map((post) => post.id), }); } From 7cf68d1bc66e9e941af01c3b850db6e3872a53e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Henr=C3=ADquez?= Date: Tue, 11 Jan 2022 10:01:57 -0300 Subject: [PATCH 2/4] Fixes post update table name issue --- src/server/controllers/post.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/controllers/post.controller.ts b/src/server/controllers/post.controller.ts index 3043583..fff9562 100644 --- a/src/server/controllers/post.controller.ts +++ b/src/server/controllers/post.controller.ts @@ -559,7 +559,7 @@ app.put( await transactionManager.query( getReplaceChildrenQuery( - 'post', + postRepository.metadata.tableName, 'slugPath', oldSlugPath, newSlugPath From 218e1374376234c15a2b94f9e1cb3d4cd3ca96b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Henr=C3=ADquez?= Date: Tue, 11 Jan 2022 10:04:04 -0300 Subject: [PATCH 3/4] Fixes asset renaming (entity table name) --- src/server/controllers/asset.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/controllers/asset.controller.ts b/src/server/controllers/asset.controller.ts index c2123a1..3872d91 100644 --- a/src/server/controllers/asset.controller.ts +++ b/src/server/controllers/asset.controller.ts @@ -386,7 +386,7 @@ app.put( await tManager.save(Asset, asset); const result = await tManager.query( - getReplaceChildrenQuery('asset', 'npath', originalNPath, npath) + getReplaceChildrenQuery(tManager.getRepository(Asset).metadata.tableName, 'npath', originalNPath, npath) ); // if not at least one entry (the very object we're renaming) was updated, then the query or the data is wrong From e99385d3641e1fcb22ad2bfacf9403653b94f24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Henr=C3=ADquez?= Date: Tue, 11 Jan 2022 10:05:04 -0300 Subject: [PATCH 4/4] Fixes tag update table name --- src/server/controllers/tag.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/controllers/tag.controller.ts b/src/server/controllers/tag.controller.ts index 2137b1d..6ad35b8 100644 --- a/src/server/controllers/tag.controller.ts +++ b/src/server/controllers/tag.controller.ts @@ -142,7 +142,7 @@ app.put( tag.slugPath = newSlugPath; await transactionManager.query( - getReplaceChildrenQuery('tag', 'slugPath', oldSlugPath, newSlugPath) + getReplaceChildrenQuery(tagRepository.metadata.tableName, 'slugPath', oldSlugPath, newSlugPath) ); }