From 6e251ad8c0d555a0d1728888a6405d21a81dfa8b Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 3 Jun 2026 09:52:32 +0200 Subject: [PATCH 1/2] chore: Revisiting implementations for ieee754compatible --- postgres/lib/PostgresService.js | 5 ++++- sqlite/lib/SQLiteService.js | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/postgres/lib/PostgresService.js b/postgres/lib/PostgresService.js index 916af2877..7bb7d999f 100644 --- a/postgres/lib/PostgresService.js +++ b/postgres/lib/PostgresService.js @@ -578,9 +578,12 @@ GROUP BY k Association: e => `jsonb(${e})`, struct: e => `jsonb(${e})`, array: e => `jsonb(${e})`, + // REVISIT: Didn't our recent analyses show that PostgreSQL drivers are doing that already by default? + // So, why do we have to do anything here at all? // Reading int64 as string to not loose precision Int64: cds.env.features.ieee754compatible ? expr => `cast(${expr} as varchar)` : undefined, - // REVISIT: always cast to string in next major + // REVISIT: Didn't our recent analyses show that PostgreSQL drivers are doing that already by default? + // So, why do we have to do anything here at all? // Reading decimal as string to not loose precision Decimal: cds.env.features.ieee754compatible ? (expr, elem) => elem?.scale ? `to_char(${expr},'FM${'0'.padStart(elem.precision, '9')}${'D'.padEnd(elem.scale + 1, '0')}')` diff --git a/sqlite/lib/SQLiteService.js b/sqlite/lib/SQLiteService.js index bf5447ce8..b7c8f568b 100644 --- a/sqlite/lib/SQLiteService.js +++ b/sqlite/lib/SQLiteService.js @@ -275,7 +275,9 @@ class SQLiteService extends SQLService { ? (expr, elem) => elem?.scale ? `CASE WHEN ${expr} IS NULL THEN NULL ELSE format('%.${elem.scale}f', ${expr}) END` - : `CASE WHEN ${expr} IS NULL THEN NULL ELSE rtrim(rtrim(format('%.999f', ${expr}), '0'), '.') END` + : `CAST(${expr} as TEXT)` // or: `(''||${expr})` + // REVISIT: thinking twice, should we really attempt to guarantee the scale-padding here? + // For whom / which use cases do we need that? -> cross-database tests only? : undefined, // Binary is not allowed in json objects Binary: expr => `${expr} || ''`, From dc73394e9d754c63a17a72713879b1caa5de0ec5 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 3 Jun 2026 10:11:26 +0200 Subject: [PATCH 2/2] copy error --- sqlite/lib/SQLiteService.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/sqlite/lib/SQLiteService.js b/sqlite/lib/SQLiteService.js index b7c8f568b..ccd4e4b19 100644 --- a/sqlite/lib/SQLiteService.js +++ b/sqlite/lib/SQLiteService.js @@ -276,8 +276,6 @@ class SQLiteService extends SQLService { elem?.scale ? `CASE WHEN ${expr} IS NULL THEN NULL ELSE format('%.${elem.scale}f', ${expr}) END` : `CAST(${expr} as TEXT)` // or: `(''||${expr})` - // REVISIT: thinking twice, should we really attempt to guarantee the scale-padding here? - // For whom / which use cases do we need that? -> cross-database tests only? : undefined, // Binary is not allowed in json objects Binary: expr => `${expr} || ''`,