From 618a38e6d73c5b5e9f285d3514024e3a085d364f Mon Sep 17 00:00:00 2001 From: Hieuzest Date: Mon, 18 Dec 2023 00:32:36 +0800 Subject: [PATCH] fix(core): ignore undefined value in `model.format` (#66) --- packages/core/src/driver.ts | 4 +++- packages/core/src/model.ts | 1 + packages/tests/src/update.ts | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/src/driver.ts b/packages/core/src/driver.ts index e78cdcf4..57a447ac 100644 --- a/packages/core/src/driver.ts +++ b/packages/core/src/driver.ts @@ -154,7 +154,9 @@ export class Database { if (primary.some(key => key in update)) { throw new TypeError(`cannot modify primary key`) } - return await sel._action('set', sel.model.format(update)).execute() + update = sel.model.format(update) + if (Object.keys(update).length === 0) return {} + return await sel._action('set', update).execute() } async remove>(table: T, query: Query): Promise { diff --git a/packages/core/src/model.ts b/packages/core/src/model.ts index a38630f8..82250c7c 100644 --- a/packages/core/src/model.ts +++ b/packages/core/src/model.ts @@ -160,6 +160,7 @@ export class Model { const fields = Object.keys(this.fields) Object.entries(source).map(([key, value]) => { key = prefix + key + if (value === undefined) return if (fields.includes(key)) { result[key] = this.resolveValue(key, value) return diff --git a/packages/tests/src/update.ts b/packages/tests/src/update.ts index e4a9442c..d05d162c 100644 --- a/packages/tests/src/update.ts +++ b/packages/tests/src/update.ts @@ -163,6 +163,14 @@ namespace OrmOperations { await expect(database.get('temp2', {})).to.eventually.have.shape(table) }) + it('noop', async () => { + const table = await setup(database, 'temp2', barTable) + await database.set('temp2', {}, {}) + await expect(database.get('temp2', {})).to.eventually.have.shape(table) + await database.set('temp2', {}, { text: undefined }) + await expect(database.get('temp2', {})).to.eventually.have.shape(table) + }) + it('using expressions', async () => { const table = await setup(database, 'temp2', barTable) table[1].num = table[1].id * 2