Skip to content

Commit

Permalink
fix: make CommitStats a non-breaking change
Browse files Browse the repository at this point in the history
  • Loading branch information
skuruppu committed Jan 7, 2021
1 parent 037b4ae commit 7bd46a5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 15 deletions.
22 changes: 12 additions & 10 deletions src/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1427,9 +1427,9 @@ export class Transaction extends Dml {
return undefined;
}

commit(options?: CommitOptions): Promise<CommitResponse>;
commit(options?: CommitOptions | CallOptions): Promise<CommitResponse>;
commit(callback: CommitCallback): void;
commit(options: CommitOptions, callback: CommitCallback): void;
commit(options: CommitOptions | CallOptions, callback: CommitCallback): void;
/**
* @typedef {object} CommitOptions
* @property {boolean} returnCommitStats Include statistics related to the
Expand Down Expand Up @@ -1489,15 +1489,17 @@ export class Transaction extends Dml {
* });
*/
commit(
optionsOrCallback?: CommitOptions | CommitCallback,
optionsOrCallback?: CommitOptions | CallOptions | CommitCallback,
cb?: CommitCallback
): void | Promise<CommitResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!;
const options =
typeof optionsOrCallback === 'object'
? optionsOrCallback
: ({} as CommitOptions);
const gaxOpts =
'gaxOptions' in options
? (options as CommitOptions).gaxOptions
: options;

const mutations = this._queuedMutations;
const session = this.session.formattedName_!;
Expand All @@ -1509,16 +1511,16 @@ export class Transaction extends Dml {
reqOpts.singleUseTransaction = this._options;
}

if (options.returnCommitStats) {
reqOpts.returnCommitStats = options.returnCommitStats;
if ('returnCommitStats' in options && (options as CommitOptions).returnCommitStats) {
reqOpts.returnCommitStats = (options as CommitOptions).returnCommitStats;
}

this.request(
{
client: 'SpannerClient',
method: 'commit',
reqOpts,
gaxOpts: options.gaxOptions,
gaxOpts: gaxOpts,
headers: this.resourceHeader_,
},
(err: null | Error, resp: spannerClient.spanner.v1.ICommitResponse) => {
Expand Down
15 changes: 10 additions & 5 deletions test/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1267,6 +1267,8 @@ describe('Transaction', () => {
});

describe('commit', () => {
const DEADLINE_EXCEEDED_STATUS_CODE = 4;

it('should make the correct request', () => {
const stub = sandbox.stub(transaction, 'request');

Expand All @@ -1281,13 +1283,17 @@ describe('Transaction', () => {
assert.deepStrictEqual(headers, transaction.resourceHeader_);
});

it('should accept gaxOptions', done => {
const options = {gaxOptions: {}};
it('should accept gaxOptions as CallOptions', done => {
const gaxOptions = {
retry: {
retryCodes: [DEADLINE_EXCEEDED_STATUS_CODE],
},
};
transaction.request = config => {
assert.strictEqual(config.gaxOpts, options.gaxOptions);
assert.strictEqual(config.gaxOpts, gaxOptions);
done();
};
transaction.commit(options, assert.ifError);
transaction.commit(gaxOptions, assert.ifError);
});

it('should accept commit options', done => {
Expand All @@ -1300,7 +1306,6 @@ describe('Transaction', () => {
});

it('should accept commit and gaxOptions', done => {
const DEADLINE_EXCEEDED_STATUS_CODE = 4;
const gaxOptions = {
retry: {
retryCodes: [DEADLINE_EXCEEDED_STATUS_CODE],
Expand Down

0 comments on commit 7bd46a5

Please sign in to comment.