Skip to content

Commit 51df102

Browse files
callmehiphopstephenplusplus
authored andcommitted
spanner: properly capture readOnly option (#2561)
1 parent de66cbc commit 51df102

6 files changed

Lines changed: 44 additions & 13 deletions

File tree

packages/spanner/src/database.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,9 +460,6 @@ Database.prototype.getTransaction = function(options, callback) {
460460
return;
461461
}
462462

463-
options = extend({}, options);
464-
delete options.readOnly;
465-
466463
var transaction = self.pool_.createTransaction_(session, options);
467464

468465
transaction.begin(function(err) {

packages/spanner/src/transaction-request.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ var PartialResultStream = require('./partial-result-stream.js');
5151
* @param {object=} options - Timestamp options.
5252
*/
5353
function TransactionRequest(options) {
54+
this.readOnly = false;
55+
5456
if (options && !is.empty(options)) {
57+
options = extend({}, options);
58+
59+
this.readOnly = !!options.readOnly;
60+
delete options.readOnly;
61+
5562
this.options = TransactionRequest.formatTimestampOptions_(options);
5663
}
5764
}

packages/spanner/src/transaction.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ Transaction.prototype.begin = function(callback) {
164164
var self = this;
165165
var options;
166166

167-
if (!this.options) {
167+
if (!this.readOnly) {
168168
options = {
169169
readWrite: {}
170170
};

packages/spanner/test/database.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,12 +1126,7 @@ describe('Database', function() {
11261126
},
11271127
createTransaction_: function(session, options) {
11281128
assert.strictEqual(session, SESSION);
1129-
1130-
var expectedOptions = extend({}, OPTIONS);
1131-
delete expectedOptions.readOnly;
1132-
1133-
assert.notStrictEqual(options, OPTIONS);
1134-
assert.deepEqual(options, expectedOptions);
1129+
assert.strictEqual(options, OPTIONS);
11351130

11361131
setImmediate(done);
11371132
return TRANSACTION;

packages/spanner/test/transaction-request.js

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,24 @@ describe('TransactionRequest', function() {
8080
});
8181

8282
describe('instantiation', function() {
83+
var formatTimestamp;
84+
85+
before(function() {
86+
formatTimestamp = TransactionRequest.formatTimestampOptions_;
87+
});
88+
89+
beforeEach(function() {
90+
TransactionRequest.formatTimestampOptions_ = function() {};
91+
});
92+
93+
after(function() {
94+
TransactionRequest.formatTimestampOptions_ = formatTimestamp;
95+
});
96+
97+
it('should default readOnly to false', function() {
98+
assert.strictEqual(transactionRequest.readOnly, false);
99+
});
100+
83101
it('should localize the transaction options', function() {
84102
var UNFORMATTED_OPTIONS = {
85103
b: 'b'
@@ -89,10 +107,9 @@ describe('TransactionRequest', function() {
89107
a: 'a'
90108
};
91109

92-
var formatTimestamp = TransactionRequest.formatTimestampOptions_;
93-
94110
TransactionRequest.formatTimestampOptions_ = function(options) {
95-
assert.strictEqual(options, UNFORMATTED_OPTIONS);
111+
assert.deepEqual(options, UNFORMATTED_OPTIONS);
112+
assert.notStrictEqual(options, UNFORMATTED_OPTIONS);
96113
return FORMATTED_OPTIONS;
97114
};
98115

@@ -115,6 +132,18 @@ describe('TransactionRequest', function() {
115132
TransactionRequest.formatTimestampOptions_ = formatTimestamp;
116133
});
117134

135+
it('should capture the readOnly option', function() {
136+
TransactionRequest.formatTimestampOptions_ = function(options) {
137+
assert.strictEqual(options.readOnly, undefined);
138+
};
139+
140+
var transaction = new TransactionRequest({
141+
readOnly: true
142+
});
143+
144+
assert.strictEqual(transaction.readOnly, true);
145+
});
146+
118147
it('should promisify all the things', function() {
119148
assert(promisified);
120149
});

packages/spanner/test/transaction.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ describe('Transaction', function() {
180180

181181
describe('begin', function() {
182182
var OPTIONS = {
183+
readOnly: true,
183184
boundOptions: true,
184185
returnReadTimestamp: true
185186
};
@@ -193,6 +194,7 @@ describe('Transaction', function() {
193194
it('should make the correct request', function(done) {
194195
var transaction = new Transaction(SESSION, OPTIONS);
195196

197+
transaction.readOnly = true;
196198
transaction.request = function(config) {
197199
assert.deepEqual(config.reqOpts, EXPECTED_REQ_OPTS);
198200
assert.strictEqual(config.method(), util.noop);
@@ -203,6 +205,7 @@ describe('Transaction', function() {
203205
});
204206

205207
it('should not require options', function(done) {
208+
transaction.readOnly = false;
206209
transaction.request = function(config) {
207210
assert.deepEqual(config.reqOpts, {
208211
options: {

0 commit comments

Comments
 (0)