From 54d2efb00cfa4b5f188dc01bd350f3ccaca8986b Mon Sep 17 00:00:00 2001 From: Bob den Os <108393871+BobdenOs@users.noreply.github.com> Date: Mon, 22 Apr 2024 10:58:05 +0200 Subject: [PATCH] fix(hana): Align not found behavior in @cap-js/hana (#603) --- hana/lib/HANAService.js | 2 +- hana/lib/drivers/base.js | 6 ------ hana/lib/drivers/hana-client.js | 20 +++++++++++++++++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/hana/lib/HANAService.js b/hana/lib/HANAService.js index 7f91dbb46..0400b43ed 100644 --- a/hana/lib/HANAService.js +++ b/hana/lib/HANAService.js @@ -153,7 +153,7 @@ class HANAService extends SQLService { // REVISIT: the runtime always expects that the count is preserved with .map, required for renaming in mocks return HANAService._arrayWithCount(rows, await this.count(query, rows)) } - return cqn.SELECT.one || query.SELECT.from.ref?.[0].cardinality?.max === 1 ? rows[0] || null : rows + return cqn.SELECT.one || query.SELECT.from.ref?.[0].cardinality?.max === 1 ? rows[0] : rows } async onINSERT({ query, data }) { diff --git a/hana/lib/drivers/base.js b/hana/lib/drivers/base.js index 3a7eb3009..d41e49fd9 100644 --- a/hana/lib/drivers/base.js +++ b/hana/lib/drivers/base.js @@ -31,12 +31,6 @@ class HANADriver { const stmt = await prep let changes = await prom(stmt, 'exec')(values) await this._sendStreams(stmt, streams) - // REVISIT: hana-client does not return any changes when doing an update with streams - // This causes the best assumption to be that the changes are one - // To get the correct information it is required to send a count with the update where clause - if (streams.length && changes === 0) { - changes = 1 - } return { changes } }, runBatch: async params => { diff --git a/hana/lib/drivers/hana-client.js b/hana/lib/drivers/hana-client.js index d63cd88d3..f63ee7fee 100644 --- a/hana/lib/drivers/hana-client.js +++ b/hana/lib/drivers/hana-client.js @@ -74,7 +74,7 @@ class HANAClientDriver extends driver { rsStreamsProm.resolve = resolve rsStreamsProm.reject = reject }) - rsStreams.catch(() => {}) + rsStreams.catch(() => { }) rs._rowPosition = -1 const _next = prom(rs, 'next') @@ -110,6 +110,20 @@ class HANAClientDriver extends driver { } } + ret.run = async params => { + const { values, streams } = this._extractStreams(params) + const stmt = await ret._prep + let changes = await prom(stmt, 'exec')(values) + await this._sendStreams(stmt, streams) + // REVISIT: hana-client does not return any changes when doing an update with streams + // This causes the best assumption to be that the changes are one + // To get the correct information it is required to send a count with the update where clause + if (streams.length && changes === 0) { + changes = 1 + } + return { changes } + } + ret.proc = async (data, outParameters) => { const stmt = await ret._prep const rows = await prom(stmt, 'execQuery')(data) @@ -161,7 +175,7 @@ class HANAClientDriver extends driver { } const resultSet = Array.isArray(rows) ? rows[0] : rows - + // merge table output params into scalar params const params = Array.isArray(outParameters) && outParameters.filter(md => !(md.PARAMETER_NAME in result)) if (params && params.length) { @@ -174,7 +188,7 @@ class HANAClientDriver extends driver { resultSet.nextResult() } } - + return result }