From 1120ad337480a3ce3eecd3d048116cf4312078af Mon Sep 17 00:00:00 2001 From: Bob den Os Date: Mon, 30 Jun 2025 09:12:01 +0200 Subject: [PATCH 1/4] Start using limit place holder again with hints --- hana/lib/HANAService.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/hana/lib/HANAService.js b/hana/lib/HANAService.js index 58f18a503..26fa8a3cc 100644 --- a/hana/lib/HANAService.js +++ b/hana/lib/HANAService.js @@ -154,8 +154,9 @@ class HANAService extends SQLService { // REVISIT: add prepare options when param:true is used let sqlScript = isLockQuery || isSimple ? sql : this.wrapTemporary(temporary, withclause, blobs) - const { hints } = query.SELECT - if (hints) sqlScript += ` WITH HINT (${hints.join(',')})` + const { hints = [] } = query.SELECT + hints.push('prelimit_rule_with_sql_parameters') + sqlScript += ` WITH HINT (${hints.join(',')})` let rows if (values?.length || blobs.length > 0 || isStream) { const ps = await this.prepare(sqlScript, blobs.length) @@ -931,11 +932,6 @@ SELECT ${mixing} FROM JSON_TABLE(SRC.JSON, '$' COLUMNS(${extraction}) ERROR ON E }) } - limit({ rows, offset }) { - rows = { param: false, __proto__: rows } - return super.limit({ rows, offset }) - } - where(xpr) { xpr = { xpr, top: true } const suffix = this.is_comparator(xpr) From fbe420146198cd9cd41ec968398427ebd1bbcc98 Mon Sep 17 00:00:00 2001 From: Bob den Os Date: Mon, 30 Jun 2025 09:27:50 +0200 Subject: [PATCH 2/4] Allow custom hints to overwrite default hints --- hana/lib/HANAService.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hana/lib/HANAService.js b/hana/lib/HANAService.js index 26fa8a3cc..f3e56b401 100644 --- a/hana/lib/HANAService.js +++ b/hana/lib/HANAService.js @@ -154,9 +154,8 @@ class HANAService extends SQLService { // REVISIT: add prepare options when param:true is used let sqlScript = isLockQuery || isSimple ? sql : this.wrapTemporary(temporary, withclause, blobs) - const { hints = [] } = query.SELECT - hints.push('prelimit_rule_with_sql_parameters') - sqlScript += ` WITH HINT (${hints.join(',')})` + const { hints = ['prelimit_rule_with_sql_parameters'] } = query.SELECT + if (hints) sqlScript += ` WITH HINT (${hints.join(',')})` let rows if (values?.length || blobs.length > 0 || isStream) { const ps = await this.prepare(sqlScript, blobs.length) From 68662e5e8e9eaf6eaaef97ba66512f19d216a782 Mon Sep 17 00:00:00 2001 From: Bob den Os Date: Tue, 15 Jul 2025 12:58:53 +0200 Subject: [PATCH 3/4] Check HANA version and limit_hint config for compatibility --- hana/lib/HANAService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hana/lib/HANAService.js b/hana/lib/HANAService.js index f3e56b401..c71305479 100644 --- a/hana/lib/HANAService.js +++ b/hana/lib/HANAService.js @@ -154,7 +154,7 @@ class HANAService extends SQLService { // REVISIT: add prepare options when param:true is used let sqlScript = isLockQuery || isSimple ? sql : this.wrapTemporary(temporary, withclause, blobs) - const { hints = ['prelimit_rule_with_sql_parameters'] } = query.SELECT + const { hints = HANAVERSION <= 2 || this.options.limit_hint !== true ? [] : ['prelimit_rule_with_sql_parameters'] } = query.SELECT if (hints) sqlScript += ` WITH HINT (${hints.join(',')})` let rows if (values?.length || blobs.length > 0 || isStream) { From 9357366697a8e14ad89a5df427061252be9e20ba Mon Sep 17 00:00:00 2001 From: Bob den Os Date: Thu, 17 Jul 2025 10:20:49 +0200 Subject: [PATCH 4/4] Improve hints check with length --- hana/lib/HANAService.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hana/lib/HANAService.js b/hana/lib/HANAService.js index c71305479..13b3f48a4 100644 --- a/hana/lib/HANAService.js +++ b/hana/lib/HANAService.js @@ -154,8 +154,8 @@ class HANAService extends SQLService { // REVISIT: add prepare options when param:true is used let sqlScript = isLockQuery || isSimple ? sql : this.wrapTemporary(temporary, withclause, blobs) - const { hints = HANAVERSION <= 2 || this.options.limit_hint !== true ? [] : ['prelimit_rule_with_sql_parameters'] } = query.SELECT - if (hints) sqlScript += ` WITH HINT (${hints.join(',')})` + const { hints = HANAVERSION <= 2 || this.options.limit_hint !== true ? null : ['prelimit_rule_with_sql_parameters'] } = query.SELECT + if (hints?.length) sqlScript += ` WITH HINT (${hints.join(',')})` let rows if (values?.length || blobs.length > 0 || isStream) { const ps = await this.prepare(sqlScript, blobs.length)