diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts index 976ea8fd731..0515131be30 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts @@ -280,6 +280,65 @@ describe('align frames', () => { ] `); }); + + it('should perform an inner join with empty values', () => { + const out = joinDataFrames({ + frames: [ + toDataFrame({ + fields: [ + { + name: 'A', + type: FieldType.string, + values: [], + }, + { + name: 'B', + type: FieldType.string, + values: [], + }, + ], + }), + toDataFrame({ + fields: [ + { + name: 'A', + type: FieldType.string, + values: [], + }, + { + name: 'C', + type: FieldType.string, + values: [], + }, + ], + }), + ], + joinBy: fieldMatchers.get(FieldMatcherID.byName).get('A'), + mode: JoinMode.inner, + })!; + + expect( + out.fields.map((f) => ({ + name: f.name, + values: f.values, + })) + ).toMatchInlineSnapshot(` + [ + { + "name": "A", + "values": [], + }, + { + "name": "B", + "values": [], + }, + { + "name": "C", + "values": [], + }, + ] + `); + }); }); it('unsorted input keep indexes', () => { diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts index a2e5f0ad080..6f8f592f36c 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts @@ -424,7 +424,8 @@ function joinInner(tables: AlignedData[]): Array count + (table.length - 1), 1); + return Array.from({ length: fieldCount }, () => []); } // Transpose the joined tables to get the desired output format.