From b7a5c192d84b369f24b5cafbf19b6110078b6213 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sat, 18 Nov 2023 18:23:16 +0100 Subject: [PATCH] [backend] Improve postgres FTS mention filter query --- .../src/server/api/common/generate-fts-query.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/backend/src/server/api/common/generate-fts-query.ts b/packages/backend/src/server/api/common/generate-fts-query.ts index b3453ad49..324c90207 100644 --- a/packages/backend/src/server/api/common/generate-fts-query.ts +++ b/packages/backend/src/server/api/common/generate-fts-query.ts @@ -97,14 +97,16 @@ function fromFilterInverse(query: SelectQueryBuilder, filter: string, id: n function mentionFilter(query: SelectQueryBuilder, filter: string, id: number) { const userQuery = generateUserSubquery(filter, id); - query.andWhere(`note.mentions @> array[(${userQuery.getQuery()})]`); - query.setParameters(userQuery.getParameters()); + query.addCommonTableExpression(userQuery.getQuery(), `cte_${id}`, { materialized: true }) + query.andWhere(`note.mentions @> array[(SELECT * FROM cte_${id})]::varchar[]`); + query.setParameters(userQuery.getParameters()); } function mentionFilterInverse(query: SelectQueryBuilder, filter: string, id: number) { const userQuery = generateUserSubquery(filter, id); - query.andWhere(`NOT (note.mentions @> array[(${userQuery.getQuery()})])`); - query.setParameters(userQuery.getParameters()); + query.addCommonTableExpression(userQuery.getQuery(), `cte_${id}`, { materialized: true }) + query.andWhere(`NOT (note.mentions @> array[(SELECT * FROM cte_${id})]::varchar[])`); + query.setParameters(userQuery.getParameters()); } function replyFilter(query: SelectQueryBuilder, filter: string, id: number) {