@proteinjs/db 1.50.2 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.js +1 -1
- package/dist/generated/test/index.js.map +1 -1
- package/dist/src/Db.d.ts +35 -0
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +169 -19
- package/dist/src/Db.js.map +1 -1
- package/dist/src/services/DbService.d.ts +7 -0
- package/dist/src/services/DbService.d.ts.map +1 -1
- package/dist/src/services/DbService.js +13 -1
- package/dist/src/services/DbService.js.map +1 -1
- package/dist/test/DbServiceRetryDeclaration.test.d.ts +2 -0
- package/dist/test/DbServiceRetryDeclaration.test.d.ts.map +1 -0
- package/dist/test/DbServiceRetryDeclaration.test.js +139 -0
- package/dist/test/DbServiceRetryDeclaration.test.js.map +1 -0
- package/dist/test/InsertMany.test.d.ts +2 -0
- package/dist/test/InsertMany.test.d.ts.map +1 -0
- package/dist/test/InsertMany.test.js +475 -0
- package/dist/test/InsertMany.test.js.map +1 -0
- package/dist/test/TableServiceAuth.test.js +12 -0
- package/dist/test/TableServiceAuth.test.js.map +1 -1
- package/dist/test/reusable/CrudTests.d.ts.map +1 -1
- package/dist/test/reusable/CrudTests.js +44 -0
- package/dist/test/reusable/CrudTests.js.map +1 -1
- package/dist/test/reusable/TransactionTests.d.ts.map +1 -1
- package/dist/test/reusable/TransactionTests.js +90 -0
- package/dist/test/reusable/TransactionTests.js.map +1 -1
- package/generated/index.ts +1 -1
- package/generated/test/index.ts +1 -1
- package/package.json +4 -4
- package/src/Db.ts +102 -0
- package/src/services/DbService.ts +13 -1
- package/test/DbServiceRetryDeclaration.test.ts +105 -0
- package/test/InsertMany.test.ts +298 -0
- package/test/TableServiceAuth.test.ts +12 -0
- package/test/reusable/CrudTests.ts +30 -0
- package/test/reusable/TransactionTests.ts +46 -0
|
@@ -88,6 +88,52 @@ export const transactionTests = (
|
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
+
test('Insert many inside a transaction: a refused row rolls the whole batch back, and the writes before it', async () => {
|
|
92
|
+
const emplyeeTable: Table<TransactionEmployee> = transactionTestTables.TransactionEmployee;
|
|
93
|
+
let singleId: string | undefined;
|
|
94
|
+
let batchIds: string[] = [];
|
|
95
|
+
|
|
96
|
+
await expect(
|
|
97
|
+
db.runTransaction(async () => {
|
|
98
|
+
const single = await db.insert(emplyeeTable, { name: 'Veronica', department: 'Engineering' });
|
|
99
|
+
singleId = single.id;
|
|
100
|
+
// The third row reuses the first row's id: the statement is refused as a whole.
|
|
101
|
+
const rows: Omit<TransactionEmployee, keyof Record>[] = [
|
|
102
|
+
{ name: 'Ada', department: 'Engineering' },
|
|
103
|
+
{ name: 'Sean', department: 'Engineering' },
|
|
104
|
+
{ name: 'Cassidy', department: 'Engineering' },
|
|
105
|
+
];
|
|
106
|
+
const first = await db.insertMany(emplyeeTable, [rows[0]]);
|
|
107
|
+
batchIds = [first[0].id];
|
|
108
|
+
await db.insertMany(emplyeeTable, [
|
|
109
|
+
rows[1],
|
|
110
|
+
{ ...rows[2], id: first[0].id } as Omit<TransactionEmployee, keyof Record>,
|
|
111
|
+
]);
|
|
112
|
+
})
|
|
113
|
+
).rejects.toThrow();
|
|
114
|
+
|
|
115
|
+
expect(singleId).toBeDefined();
|
|
116
|
+
expect(await db.get(emplyeeTable, { id: singleId })).toBeFalsy();
|
|
117
|
+
expect(await db.get(emplyeeTable, { id: batchIds[0] })).toBeFalsy();
|
|
118
|
+
expect(await db.query(emplyeeTable, { department: 'Engineering' })).toHaveLength(0);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test('Insert many outside a transaction is one unit: a refused row lands none of the batch', async () => {
|
|
122
|
+
const emplyeeTable: Table<TransactionEmployee> = transactionTestTables.TransactionEmployee;
|
|
123
|
+
const anchor = await db.insert(emplyeeTable, { name: 'Veronica', department: 'Sales' });
|
|
124
|
+
|
|
125
|
+
await expect(
|
|
126
|
+
db.insertMany(emplyeeTable, [
|
|
127
|
+
{ name: 'Ada', department: 'Sales' },
|
|
128
|
+
{ name: 'Sean', department: 'Sales', id: anchor.id } as Omit<TransactionEmployee, keyof Record>,
|
|
129
|
+
])
|
|
130
|
+
).rejects.toThrow();
|
|
131
|
+
|
|
132
|
+
const sales = await db.query(emplyeeTable, { department: 'Sales' });
|
|
133
|
+
expect(sales.map((employee) => employee.name)).toEqual(['Veronica']);
|
|
134
|
+
await db.delete(emplyeeTable, { id: anchor.id });
|
|
135
|
+
});
|
|
136
|
+
|
|
91
137
|
test('Nested transactions are not allowed', async () => {
|
|
92
138
|
const testEmployee: Omit<TransactionEmployee, keyof Record> = {
|
|
93
139
|
name: 'Veronica',
|