Skip to content

Commit b715b58

Browse files
authored
QFIX: PG object query (#8283)
Signed-off-by: Andrey Sobolev <[email protected]>
1 parent fdec550 commit b715b58

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

server/postgres/src/storage.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ abstract class PostgresAdapterBase implements DbAdapter {
726726
})) as FindResult<T>
727727
} catch (err) {
728728
const sqlFull = vars.injectVars(fquery)
729-
ctx.error('Error in findAll', { err, sql: fquery, sqlFull })
729+
ctx.error('Error in findAll', { err, sql: fquery, sqlFull, query })
730730
throw err
731731
}
732732
},
@@ -1316,6 +1316,7 @@ abstract class PostgresAdapterBase implements DbAdapter {
13161316
} else if (typeof value === 'object' && !Array.isArray(value)) {
13171317
// we can have multiple criteria for one field
13181318
const res: string[] = []
1319+
const nonOperator: Record<string, any> = {}
13191320
for (const operator in value) {
13201321
let val = value[operator]
13211322
if (tkeyData && (Array.isArray(val) || (typeof val !== 'object' && typeof val !== 'string'))) {
@@ -1402,10 +1403,14 @@ abstract class PostgresAdapterBase implements DbAdapter {
14021403
}
14031404
break
14041405
default:
1405-
res.push(`${tkey} @> '[${JSON.stringify(value)}]'`)
1406+
nonOperator[operator] = value[operator]
14061407
break
14071408
}
14081409
}
1410+
if (Object.keys(nonOperator).length > 0) {
1411+
const qkey = tkey.replace('#>>', '->').replace('{', '').replace('}', '')
1412+
res.push(`(${qkey} @> '${JSON.stringify(nonOperator)}' or ${qkey} @> '[${JSON.stringify(nonOperator)}]')`)
1413+
}
14091414
return res.length === 0 ? undefined : res.join(' AND ')
14101415
}
14111416

0 commit comments

Comments
 (0)