From 4614218afd4b3d06fc89709e0fb41ec195e38192 Mon Sep 17 00:00:00 2001 From: Emile Filteau-Tessier Date: Fri, 8 Aug 2025 19:04:29 -0400 Subject: [PATCH 1/2] Remove defaulting to empty string in tablePivot --- packages/cubejs-client-core/src/ResultSet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cubejs-client-core/src/ResultSet.ts b/packages/cubejs-client-core/src/ResultSet.ts index a6586b06c1a66..3f5527df16305 100644 --- a/packages/cubejs-client-core/src/ResultSet.ts +++ b/packages/cubejs-client-core/src/ResultSet.ts @@ -784,7 +784,7 @@ export default class ResultSet = any> { [ ...(normalizedPivotConfig.x).map((key, index): [string, string | number] => [ key, - xValues[index] ?? '' + xValues[index] ]), ...(isMeasuresPresent ? yValuesArray.map(([yValues, measure]): [string, string | number] => [ From e97967fa3acef9cc62b6f07be6560475e9555823 Mon Sep 17 00:00:00 2001 From: Emile Filteau-Tessier Date: Mon, 11 Aug 2025 08:54:35 -0400 Subject: [PATCH 2/2] Added a regression test --- .../cubejs-client-core/test/ResultSet.test.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/cubejs-client-core/test/ResultSet.test.ts b/packages/cubejs-client-core/test/ResultSet.test.ts index b090df65a667f..7a79644dff45a 100644 --- a/packages/cubejs-client-core/test/ResultSet.test.ts +++ b/packages/cubejs-client-core/test/ResultSet.test.ts @@ -1807,5 +1807,28 @@ describe('ResultSet', () => { ] ); }); + + test('keeps null values on non-matching rows', () => { + const resultSet = new ResultSet({ + query: { + dimensions: [ + 'User.name', + 'Friend.name' + ], + }, + data: [ + { + 'User.name': 'Bob', + 'Friend.name': null, + } + ], + } as any); + + expect(resultSet.tablePivot()).toEqual( + [ + { 'User.name': 'Bob', 'Friend.name': null }, + ] + ); + }); }); });