Skip to content

Commit 810465f

Browse files
throw if uneven number of columns
1 parent 3ae6621 commit 810465f

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

packages/spanner/src/transaction-request.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,18 @@ TransactionRequest.prototype.mutate_ = function(method, table, keyVals, cb) {
686686

687687
var columns = uniq(flatten(keyVals.map(Object.keys))).sort();
688688

689-
var values = keyVals.map(function(keyVal) {
689+
var values = keyVals.map(function(keyVal, index) {
690+
var keys = Object.keys(keyVal);
691+
692+
var missingColumns = columns.filter(column => keys.indexOf(column) === -1);
693+
694+
if (missingColumns.length > 0) {
695+
throw new Error([
696+
`Row at index ${index} does not contain the correct number of columns.`,
697+
`Missing columns: ${JSON.stringify(missingColumns)}`
698+
].join('\n\n'));
699+
}
700+
690701
return columns.map(function(column) {
691702
var value = keyVal[column];
692703
return codec.encode(value);

packages/spanner/test/transaction-request.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,31 @@ describe('TransactionRequest', function() {
872872
assert.strictEqual(returnValue, requestReturnValue);
873873
});
874874

875+
it('should throw when rows have incorrect amount of columns', function() {
876+
var invalidEntry = { key1: 'val' };
877+
var caughtError;
878+
879+
try {
880+
transactionRequest.mutate_(METHOD, TABLE, [
881+
invalidEntry,
882+
{ key1: 'val', key2: 'val' }
883+
], assert.ifError);
884+
} catch(e) {
885+
caughtError = e;
886+
} finally {
887+
if (!caughtError) {
888+
throw new Error('Expected error was not thrown.');
889+
}
890+
891+
var expectedErrorMessage = [
892+
'Row at index 0 does not contain the correct number of columns.',
893+
'Missing columns: ["key2"]'
894+
].join('\n\n');
895+
896+
assert.strictEqual(caughtError.message, expectedErrorMessage);
897+
}
898+
});
899+
875900
it('should push the request to the queue if a transaction', function(done) {
876901
transactionRequest.transaction = true;
877902

0 commit comments

Comments
 (0)