diff --git a/src/chunktransformer.js b/src/chunktransformer.js index 41217fa13..b1cb209f9 100644 --- a/src/chunktransformer.js +++ b/src/chunktransformer.js @@ -211,7 +211,7 @@ class ChunkTransformer extends Transform { errorMessage = 'A commit happened but the same key followed'; } else if (!chunk.familyName) { errorMessage = 'A family must be set'; - } else if (!chunk.qualifier) { + } else if (chunk.qualifier === null || chunk.qualifier === undefined) { errorMessage = 'A column qualifier must be set'; } if (errorMessage) { @@ -247,7 +247,10 @@ class ChunkTransformer extends Transform { return; } } - if (chunk.familyName && !chunk.qualifier) { + if ( + chunk.familyName && + (chunk.qualifier === null || chunk.qualifier === undefined) + ) { this.destroy( new TransformError({ message: 'A qualifier must be specified', diff --git a/system-test/read-rows-acceptance-test.json b/system-test/read-rows-acceptance-test.json index e0cd829ad..62c78a368 100644 --- a/system-test/read-rows-acceptance-test.json +++ b/system-test/read-rows-acceptance-test.json @@ -872,4 +872,4 @@ "ts": 0 }] }] -} \ No newline at end of file +} diff --git a/test/chunktransformer.js b/test/chunktransformer.js index a39d8bdcc..c38d5d838 100644 --- a/test/chunktransformer.js +++ b/test/chunktransformer.js @@ -468,6 +468,53 @@ describe('Bigtable/ChunkTransformer', function() { 'state mismatch' ); }); + it('chunk with familyName and empty qualifier should produce row', function() { + chunkTransformer.qualifiers = []; + chunkTransformer.family = { + qualifier: chunkTransformer.qualifiers, + }; + chunkTransformer.row = { + key: 'key', + data: { + family: chunkTransformer.family, + }, + }; + const chunk = { + commitRow: true, + familyName: {value: 'family2'}, + qualifier: '', + value: 'value', + timestampMicros: 0, + labels: [], + valueSize: 0, + }; + chunkTransformer.processRowInProgress(chunk); + assert(commitSpy.called, 'did not call commit'); + assert(resetSpy.called, 'did not call reset'); + assert.strictEqual(rows.length, 1, 'wrong call to push'); + const expectedRow = { + key: 'key', + data: { + family: { + qualifier: [ + { + value: 'value', + timestamp: 0, + labels: [], + }, + ], + }, + family2: {}, + }, + }; + const row = rows[0]; + assert.deepStrictEqual(row, expectedRow, 'row mismatch'); + assert.strictEqual( + chunkTransformer.state, + RowStateEnum.NEW_ROW, + 'state mismatch' + ); + }); it('chunk with new family and commitRow should produce row', function() { chunkTransformer.qualifiers = []; chunkTransformer.family = {