From 398f6b477b0adb83ed7fc95dee3318de31b43cdc Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Thu, 26 Sep 2024 19:04:09 +0500 Subject: [PATCH] Fix sql lookup (#6744) Signed-off-by: Denis Bykhov --- server/postgres/src/storage.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/postgres/src/storage.ts b/server/postgres/src/storage.ts index 7f50259e79..332964e3bd 100644 --- a/server/postgres/src/storage.ts +++ b/server/postgres/src/storage.ts @@ -512,8 +512,9 @@ abstract class PostgresAdapterBase implements DbAdapter { if (val.classes !== undefined) { if (val.classes.length === 1) { res.push(`AND ${val.toAlias}._class = '${val.classes[0]}'`) + } else { + res.push(`AND ${val.toAlias}._class IN (${val.classes.map((c) => `'${c}'`).join(', ')})`) } - res.push(`AND ${val.toAlias}._class IN (${val.classes.map((c) => `'${c}'`).join(', ')})`) } } return res.join(' ') @@ -863,8 +864,16 @@ abstract class PostgresAdapterBase implements DbAdapter { private getProjectionsAliases (join: JoinProps): string[] { if (join.table === DOMAIN_MODEL) return [] if (join.isReverse) { + let classsesQuery = '' + if (join.classes !== undefined) { + if (join.classes.length === 1) { + classsesQuery = ` AND ${join.toAlias}._class = '${join.classes[0]}'` + } else { + classsesQuery = ` AND ${join.toAlias}._class IN (${join.classes.map((c) => `'${c}'`).join(', ')})` + } + } return [ - `(SELECT jsonb_agg(${join.toAlias}.*) FROM ${join.table} AS ${join.toAlias} WHERE ${join.fromAlias}.${join.fromField} = ${join.toAlias}."${join.toField}") AS ${join.toAlias}` + `(SELECT jsonb_agg(${join.toAlias}.*) FROM ${join.table} AS ${join.toAlias} WHERE ${join.fromAlias}.${join.fromField} = ${join.toAlias}."${join.toField}" ${classsesQuery}) AS ${join.toAlias}` ] } const res: string[] = []