Fix pg set null (#7159)

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
Denis Bykhov 2024-11-12 12:36:58 +05:00 committed by GitHub
parent b1c50bb8c2
commit 8bec20e0c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 9 additions and 5 deletions

View File

@ -233,7 +233,7 @@ export type ArrayMoveDescriptor<T extends object> = {
* @public
*/
export type NumberProperties<T extends object> = {
[P in keyof T]: T[P] extends number | undefined ? T[P] : never
[P in keyof T]: T[P] extends number | undefined | null ? T[P] : never
}
/**

View File

@ -177,9 +177,13 @@ describe('postgres operations', () => {
})
const doc = (await client.findAll<Task>(taskPlugin.class.Task, {}))[0]
await operations.updateDoc(doc._class, doc.space, doc._id, { rate: null })
let tasks = await client.findAll<Task>(taskPlugin.class.Task, {})
expect(tasks.length).toEqual(1)
expect(tasks[0].rate).toBeNull()
await operations.updateDoc(doc._class, doc.space, doc._id, { rate: 30 })
let tasks = await client.findAll<Task>(taskPlugin.class.Task, {})
tasks = await client.findAll<Task>(taskPlugin.class.Task, {})
expect(tasks.length).toEqual(1)
expect(tasks[0].rate).toEqual(30)
@ -205,7 +209,7 @@ describe('postgres operations', () => {
expect(tasks[0].arr?.length).toEqual(2)
expect(tasks[0].arr?.[0]).toEqual(1)
expect(tasks[0].arr?.[1]).toEqual(3)
})
}, 1000000)
it('check remove', async () => {
for (let i = 0; i < 10; i++) {

View File

@ -34,7 +34,7 @@ export enum TaskReproduce {
export interface Task extends Doc {
name: string
description: string
rate?: number
rate?: number | null
status?: TaskStatus
reproduce?: TaskReproduce
eta?: TaskEstimate | null

View File

@ -1492,7 +1492,7 @@ class PostgresAdapter extends PostgresAdapterBase {
for (const key in remainingData) {
if (ops[key] === undefined) continue
const val = (remainingData as any)[key]
from = `jsonb_set(${from}, '{${key}}', to_jsonb($${paramsIndex++}${inferType(val)}) , true)`
from = `jsonb_set(${from}, '{${key}}', coalesce(to_jsonb($${paramsIndex++}${inferType(val)}), 'null') , true)`
params.push(val)
dataUpdated = true
}