Fix pg numeric sort (#7261)

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
Denis Bykhov 2024-12-05 12:11:13 +05:00 committed by GitHub
parent a6c6c79f3a
commit 33295a9420
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -85,6 +85,7 @@ import {
isDataField,
isOwner,
type JoinProps,
NumericTypes,
parseDoc,
parseDocWithProjection,
parseUpdate,
@ -920,7 +921,12 @@ abstract class PostgresAdapterBase implements DbAdapter {
continue
}
if (typeof val === 'number') {
res.push(`${this.getKey(_class, baseDomain, key, joins)} ${val === 1 ? 'ASC' : 'DESC'}`)
const attr = this.hierarchy.findAttribute(_class, key)
if (attr !== undefined && NumericTypes.includes(attr.type._class)) {
res.push(`(${this.getKey(_class, baseDomain, key, joins)})::numeric ${val === 1 ? 'ASC' : 'DESC'}`)
} else {
res.push(`${this.getKey(_class, baseDomain, key, joins)} ${val === 1 ? 'ASC' : 'DESC'}`)
}
} else {
// todo handle custom sorting
}

View File

@ -64,6 +64,13 @@ export async function retryTxn (
})
}
export const NumericTypes = [
core.class.TypeNumber,
core.class.TypeTimestamp,
core.class.TypeDate,
core.class.Collection
]
export async function createTables (client: postgres.Sql, domains: string[]): Promise<void> {
const filtered = domains.filter((d) => !loadedDomains.has(d))
if (filtered.length === 0) {