Extends
Members
ended
Whether or not the transaction has ended. If true, make no further requests, and discard the transaction.
- Overrides:
id
The transaction ID.
- Overrides:
metadata
The raw transaction response object. It is populated after Snapshot#begin is called.
- Overrides:
readTimestamp
Snapshot only The timestamp at which all reads are performed.
- Overrides:
readTimestampProto
Snapshot only The protobuf version of Snapshot#readTimestamp. This is useful if you require microsecond precision.
- Overrides:
Methods
begin(gaxOptionsopt, callbackopt) → {Promise.<TransactionBeginResponse>}
Begin a new transaction. Typically, you need not call this unless manually creating transactions via Session objects.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
gaxOptions |
object |
<optional> |
Request configuration options, See CallOptions for more details. |
callback |
TransactionBeginCallback |
<optional> |
Callback function. |
Returns:
Type | Description |
---|---|
Promise.<TransactionBeginResponse> |
- Overrides:
- See:
Examples
transaction.begin(function(err) {
if (!err) {
// transaction began successfully.
}
});
If the callback is omitted, the function returns a Promise
transaction.begin()
.then(function(data) {
const apiResponse = data[0];
});
createReadStream(table, query) → {ReadableStream}
Create a readable object stream to receive rows from the database using key lookups and scans.
Wrapper around v1.SpannerClient#streamingRead.
Parameters:
Name | Type | Description |
---|---|---|
table |
string |
The table to read from. |
query |
ReadRequest |
Configuration object. See official
|
Returns:
Type | Description |
---|---|
ReadableStream |
A readable stream that emits rows. |
- Overrides:
- See:
Fires:
- PartialResultStream#event:response
- PartialResultStream#event:stats
Examples
transaction.createReadStream('Singers', {
keys: ['1'],
columns: ['SingerId', 'name']
})
.on('error', function(err) {})
.on('data', function(row) {
// row = [
// {
// name: 'SingerId',
// value: '1'
// },
// {
// name: 'Name',
// value: 'Eddie Wilson'
// }
// ]
})
.on('end', function() {
// All results retrieved.
});
Provide an array for `query.keys` to read with a composite key.
const query = {
keys: [
[
'Id1',
'Name1'
],
[
'Id2',
'Name2'
]
],
// ...
};
Rows are returned as an array of object arrays. Each object has a `name` and `value` property. To get a serialized object, call `toJSON()`.
transaction.createReadStream('Singers', {
keys: ['1'],
columns: ['SingerId', 'name']
})
.on('error', function(err) {})
.on('data', function(row) {
// row.toJSON() = {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
})
.on('end', function() {
// All results retrieved.
});
Alternatively, set `query.json` to `true`, and this step will perform automatically.
transaction.createReadStream('Singers', {
keys: ['1'],
columns: ['SingerId', 'name'],
json: true,
})
.on('error', function(err) {})
.on('data', function(row) {
// row = {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
})
.on('end', function() {
// All results retrieved.
});
If you anticipate many results, you can end a stream early to prevent unnecessary processing and API requests.
transaction.createReadStream('Singers', {
keys: ['1'],
columns: ['SingerId', 'name']
})
.on('data', function(row) {
this.end();
});
end()
Let the client know you're done with a particular transaction. This should mainly be called for Snapshot objects, however in certain cases you may want to call them for Transaction objects as well.
- Overrides:
Examples
Calling `end` on a read only snapshot
database.getSnapshot((err, transaction) => {
if (err) {
// Error handling omitted.
}
transaction.run('SELECT * FROM Singers', (err, rows) => {
if (err) {
// Error handling omitted.
}
// End the snapshot.
transaction.end();
});
});
Calling `end` on a read/write transaction
database.runTransaction((err, transaction) => {
if (err) {
// Error handling omitted.
}
const query = 'UPDATE Account SET Balance = 1000 WHERE Key = 1';
transaction.runUpdate(query, err => {
if (err) {
// In the event of an error, there would be nothing to rollback,
so
// instead of continuing, discard the
transaction. transaction.end(); return;
}
transaction.commit(err => {});
});
});
read(table, query, callbackopt) → {Promise.<TransactionRequestReadResponse>}
Performs a read request against the specified Table.
Wrapper around v1.SpannerClient#read.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
table |
string |
The table to read from. |
|
query |
ReadRequest |
Configuration object. See official
|
|
callback |
TransactionRequestReadCallback |
<optional> |
Callback function. |
Returns:
Type | Description |
---|---|
Promise.<TransactionRequestReadResponse> |
- Overrides:
- See:
Examples
const query = {
keys: ['1'],
columns: ['SingerId', 'name']
};
transaction.read('Singers', query, function(err, rows) {
if (err) {
// Error handling omitted.
}
const firstRow = rows[0];
// firstRow = [
// {
// name: 'SingerId',
// value: '1'
// },
// {
// name: 'Name',
// value: 'Eddie Wilson'
// }
// ]
});
Provide an array for `query.keys` to read with a composite key.
const query = {
keys: [
[
'Id1',
'Name1'
],
[
'Id2',
'Name2'
]
],
// ...
};
Rows are returned as an array of object arrays. Each object has a `name` and `value` property. To get a serialized object, call `toJSON()`.
transaction.read('Singers', query, function(err, rows) {
if (err) {
// Error handling omitted.
}
const firstRow = rows[0];
// firstRow.toJSON() = {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
});
Alternatively, set `query.json` to `true`, and this step will perform automatically.
query.json = true;
transaction.read('Singers', query, function(err, rows) {
if (err) {
// Error handling omitted.
}
const firstRow = rows[0];
// firstRow = {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
});
run(query, callbackopt) → {Promise.<RunResponse>}
Execute a SQL statement on this database inside of a transaction.
Performance Considerations:
This method wraps the streaming method, Snapshot#run for your convenience. All rows are stored in memory before releasing to your callback. If you intend to receive a lot of results from your query, consider using the streaming method, so you can free each result from memory after consuming it.
Wrapper around v1.SpannerClient#executeStreamingSql.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
query |
string | ExecuteSqlRequest |
A SQL query or ExecuteSqlRequest object. |
|
callback |
RunCallback |
<optional> |
Callback function. |
Returns:
Type | Description |
---|---|
Promise.<RunResponse> |
- Overrides:
- See:
Examples
transaction.run(query, function(err, rows) {
if (err) {
// Error handling omitted.
}
// rows = [
// {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
// ]
});
The SQL query string can contain parameter placeholders. A parameter placeholder consists of '@' followed by the parameter name.
const query = {
sql: 'SELECT * FROM Singers WHERE name = @name',
params: {
name: 'Eddie Wilson'
}
};
transaction.run(query, function(err, rows) {
if (err) {
// Error handling omitted.
}
});
If you need to enforce a specific param type, a types map can be provided. This is typically useful if your param value can be null.
const query = {
sql: 'SELECT * FROM Singers WHERE name = @name AND id = @id',
params: {
id: spanner.int(8),
name: null
},
types: {
id: 'int64',
name: 'string'
}
};
transaction.run(query, function(err, rows) {
if (err) {
// Error handling omitted.
}
});
runStream(query) → {ReadableStream}
Create a readable object stream to receive resulting rows from a SQL statement.
Wrapper around v1.SpannerClient#executeStreamingSql.
Parameters:
Name | Type | Description |
---|---|---|
query |
string | ExecuteSqlRequest |
A SQL query or ExecuteSqlRequest object. |
Returns:
Type | Description |
---|---|
ReadableStream |
- Overrides:
- See:
Fires:
- PartialResultStream#event:response
- PartialResultStream#event:stats
Examples
const query = 'SELECT * FROM Singers';
transaction.runStream(query)
.on('error', function(err) {})
.on('data', function(row) {
// row = {
// SingerId: '1',
// Name: 'Eddie Wilson'
// }
})
.on('end', function() {
// All results retrieved.
});
The SQL query string can contain parameter placeholders. A parameter placeholder consists of '@' followed by the parameter name.
const query = {
sql: 'SELECT * FROM Singers WHERE name = @name',
params: {
name: 'Eddie Wilson'
}
};
transaction.runStream(query)
.on('error', function(err) {})
.on('data', function(row) {})
.on('end', function() {});
If you anticipate many results, you can end a stream early to prevent unnecessary processing and API requests.
transaction.runStream(query)
.on('data', function(row) {
this.end();
});
runUpdate(query, callbackopt) → {Promise.<RunUpdateResponse>}
Execute a DML statement and get the affected row count. Unlike Transaction#runUpdate after using this method you should immediately discard this transaction, internally it will invoke PartitionedDml#end.
Parameters:
Name | Type | Attributes | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
query |
string | object |
A DML statement or
Properties
|
|||||||||||||
callback |
RunUpdateCallback |
<optional> |
Callback function. |
Returns:
Type | Description |
---|---|
Promise.<RunUpdateResponse> |