-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransaction_chain.ts
44 lines (36 loc) · 1.85 KB
/
transaction_chain.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { driver, initYDBdriver } from '../utils/ydb-functions';
import { Session } from 'ydb-sdk';
/*
Подготовка:
Запустите пример из basic-example-new-way
На выходе Вы получите несколько таблиц с данными
Запускайте пример
результат проверяйте в консоли:
https://console.cloud.yandex.ru/
*/
/*
Данный пример показывает как передавать transactionID в цепочке запросов и комитить транзакцию на последнем запросе
*/
(async function run() {
await initYDBdriver(); // если не удалось инициализация - то внутри идет process.exit
await driver.tableClient.withSession(async (session: Session) => {
// первый запрос - начинаем транзакцию, но не комитим ее, используем хелпер
const data = await session.executeQueryQuick(
"upsert into series (series_id, title) values (11,'11')", // query
{}, // params
{ txType: 'serializableReadWrite', commitTx: false }
);
// по завершении запроса мы получим ID транзакции в data.txMeta.id;
if (!data.txMeta?.id) {
throw new Error('не удалось открыть транзакцию');
}
// второй запрос - посылаем второй запрос и закрываем транзакцию
const data2 = await session.executeQuery(
"upsert into series (series_id, title) values (12,'12')", // query
{}, // params
{ txId: data.txMeta.id, commitTx: true } // txControl
);
console.log(data2);
});
await driver.destroy();
})();