@push.rocks/smartdb 1.0.1 → 2.0.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/.smartconfig.json +7 -4
- package/dist_rust/rustdb_linux_amd64 +0 -0
- package/dist_rust/rustdb_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/ts_local/classes.localsmartdb.d.ts +5 -5
- package/dist_ts/ts_local/classes.localsmartdb.js +5 -6
- package/dist_ts/ts_local/plugins.d.ts +1 -2
- package/dist_ts/ts_local/plugins.js +3 -3
- package/dist_ts/ts_smartdb/index.d.ts +1 -24
- package/dist_ts/ts_smartdb/index.js +4 -29
- package/dist_ts/ts_smartdb/plugins.d.ts +2 -10
- package/dist_ts/ts_smartdb/plugins.js +3 -13
- package/dist_ts/ts_smartdb/rust-db-bridge.d.ts +43 -0
- package/dist_ts/ts_smartdb/rust-db-bridge.js +98 -0
- package/dist_ts/ts_smartdb/server/SmartdbServer.d.ts +8 -37
- package/dist_ts/ts_smartdb/server/SmartdbServer.js +49 -204
- package/dist_ts/ts_smartdb/server/index.d.ts +0 -4
- package/dist_ts/ts_smartdb/server/index.js +1 -5
- package/license +3 -1
- package/package.json +9 -12
- package/readme.md +84 -171
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/ts_local/classes.localsmartdb.ts +5 -6
- package/ts/ts_local/plugins.ts +1 -3
- package/ts/ts_smartdb/index.ts +3 -41
- package/ts/ts_smartdb/plugins.ts +2 -15
- package/ts/ts_smartdb/rust-db-bridge.ts +138 -0
- package/ts/ts_smartdb/server/SmartdbServer.ts +53 -248
- package/ts/ts_smartdb/server/index.ts +0 -7
- package/dist_ts/ts_smartdb/engine/AggregationEngine.d.ts +0 -66
- package/dist_ts/ts_smartdb/engine/AggregationEngine.js +0 -189
- package/dist_ts/ts_smartdb/engine/IndexEngine.d.ts +0 -97
- package/dist_ts/ts_smartdb/engine/IndexEngine.js +0 -678
- package/dist_ts/ts_smartdb/engine/QueryEngine.d.ts +0 -54
- package/dist_ts/ts_smartdb/engine/QueryEngine.js +0 -271
- package/dist_ts/ts_smartdb/engine/QueryPlanner.d.ts +0 -64
- package/dist_ts/ts_smartdb/engine/QueryPlanner.js +0 -308
- package/dist_ts/ts_smartdb/engine/SessionEngine.d.ts +0 -117
- package/dist_ts/ts_smartdb/engine/SessionEngine.js +0 -232
- package/dist_ts/ts_smartdb/engine/TransactionEngine.d.ts +0 -85
- package/dist_ts/ts_smartdb/engine/TransactionEngine.js +0 -287
- package/dist_ts/ts_smartdb/engine/UpdateEngine.d.ts +0 -47
- package/dist_ts/ts_smartdb/engine/UpdateEngine.js +0 -461
- package/dist_ts/ts_smartdb/errors/SmartdbErrors.d.ts +0 -100
- package/dist_ts/ts_smartdb/errors/SmartdbErrors.js +0 -155
- package/dist_ts/ts_smartdb/server/CommandRouter.d.ts +0 -87
- package/dist_ts/ts_smartdb/server/CommandRouter.js +0 -222
- package/dist_ts/ts_smartdb/server/WireProtocol.d.ts +0 -117
- package/dist_ts/ts_smartdb/server/WireProtocol.js +0 -298
- package/dist_ts/ts_smartdb/server/handlers/AdminHandler.d.ts +0 -100
- package/dist_ts/ts_smartdb/server/handlers/AdminHandler.js +0 -668
- package/dist_ts/ts_smartdb/server/handlers/AggregateHandler.d.ts +0 -31
- package/dist_ts/ts_smartdb/server/handlers/AggregateHandler.js +0 -277
- package/dist_ts/ts_smartdb/server/handlers/DeleteHandler.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/DeleteHandler.js +0 -95
- package/dist_ts/ts_smartdb/server/handlers/FindHandler.d.ts +0 -31
- package/dist_ts/ts_smartdb/server/handlers/FindHandler.js +0 -291
- package/dist_ts/ts_smartdb/server/handlers/HelloHandler.d.ts +0 -11
- package/dist_ts/ts_smartdb/server/handlers/HelloHandler.js +0 -62
- package/dist_ts/ts_smartdb/server/handlers/IndexHandler.d.ts +0 -20
- package/dist_ts/ts_smartdb/server/handlers/IndexHandler.js +0 -183
- package/dist_ts/ts_smartdb/server/handlers/InsertHandler.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/InsertHandler.js +0 -79
- package/dist_ts/ts_smartdb/server/handlers/UpdateHandler.d.ts +0 -24
- package/dist_ts/ts_smartdb/server/handlers/UpdateHandler.js +0 -296
- package/dist_ts/ts_smartdb/server/handlers/index.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/index.js +0 -10
- package/dist_ts/ts_smartdb/storage/FileStorageAdapter.d.ts +0 -85
- package/dist_ts/ts_smartdb/storage/FileStorageAdapter.js +0 -465
- package/dist_ts/ts_smartdb/storage/IStorageAdapter.d.ts +0 -145
- package/dist_ts/ts_smartdb/storage/IStorageAdapter.js +0 -2
- package/dist_ts/ts_smartdb/storage/MemoryStorageAdapter.d.ts +0 -67
- package/dist_ts/ts_smartdb/storage/MemoryStorageAdapter.js +0 -378
- package/dist_ts/ts_smartdb/storage/OpLog.d.ts +0 -93
- package/dist_ts/ts_smartdb/storage/OpLog.js +0 -221
- package/dist_ts/ts_smartdb/storage/WAL.d.ts +0 -117
- package/dist_ts/ts_smartdb/storage/WAL.js +0 -286
- package/dist_ts/ts_smartdb/types/interfaces.d.ts +0 -363
- package/dist_ts/ts_smartdb/types/interfaces.js +0 -2
- package/dist_ts/ts_smartdb/utils/checksum.d.ts +0 -30
- package/dist_ts/ts_smartdb/utils/checksum.js +0 -77
- package/dist_ts/ts_smartdb/utils/index.d.ts +0 -1
- package/dist_ts/ts_smartdb/utils/index.js +0 -2
- package/ts/ts_smartdb/engine/AggregationEngine.ts +0 -283
- package/ts/ts_smartdb/engine/IndexEngine.ts +0 -798
- package/ts/ts_smartdb/engine/QueryEngine.ts +0 -301
- package/ts/ts_smartdb/engine/QueryPlanner.ts +0 -393
- package/ts/ts_smartdb/engine/SessionEngine.ts +0 -292
- package/ts/ts_smartdb/engine/TransactionEngine.ts +0 -351
- package/ts/ts_smartdb/engine/UpdateEngine.ts +0 -506
- package/ts/ts_smartdb/errors/SmartdbErrors.ts +0 -181
- package/ts/ts_smartdb/server/CommandRouter.ts +0 -289
- package/ts/ts_smartdb/server/WireProtocol.ts +0 -416
- package/ts/ts_smartdb/server/handlers/AdminHandler.ts +0 -719
- package/ts/ts_smartdb/server/handlers/AggregateHandler.ts +0 -342
- package/ts/ts_smartdb/server/handlers/DeleteHandler.ts +0 -115
- package/ts/ts_smartdb/server/handlers/FindHandler.ts +0 -330
- package/ts/ts_smartdb/server/handlers/HelloHandler.ts +0 -78
- package/ts/ts_smartdb/server/handlers/IndexHandler.ts +0 -207
- package/ts/ts_smartdb/server/handlers/InsertHandler.ts +0 -97
- package/ts/ts_smartdb/server/handlers/UpdateHandler.ts +0 -344
- package/ts/ts_smartdb/server/handlers/index.ts +0 -10
- package/ts/ts_smartdb/storage/FileStorageAdapter.ts +0 -562
- package/ts/ts_smartdb/storage/IStorageAdapter.ts +0 -208
- package/ts/ts_smartdb/storage/MemoryStorageAdapter.ts +0 -455
- package/ts/ts_smartdb/storage/OpLog.ts +0 -282
- package/ts/ts_smartdb/storage/WAL.ts +0 -375
- package/ts/ts_smartdb/types/interfaces.ts +0 -433
- package/ts/ts_smartdb/utils/checksum.ts +0 -88
- package/ts/ts_smartdb/utils/index.ts +0 -1
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import type { IStorageAdapter } from '../storage/IStorageAdapter.js';
|
|
3
|
-
import type { IStoredDocument, ITransactionOptions } from '../types/interfaces.js';
|
|
4
|
-
/**
|
|
5
|
-
* Transaction state
|
|
6
|
-
*/
|
|
7
|
-
export interface ITransactionState {
|
|
8
|
-
id: string;
|
|
9
|
-
sessionId: string;
|
|
10
|
-
startTime: plugins.bson.Timestamp;
|
|
11
|
-
status: 'active' | 'committed' | 'aborted';
|
|
12
|
-
readSet: Map<string, Set<string>>;
|
|
13
|
-
writeSet: Map<string, Map<string, {
|
|
14
|
-
op: 'insert' | 'update' | 'delete';
|
|
15
|
-
doc?: IStoredDocument;
|
|
16
|
-
originalDoc?: IStoredDocument;
|
|
17
|
-
}>>;
|
|
18
|
-
snapshots: Map<string, IStoredDocument[]>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Transaction engine for ACID transaction support
|
|
22
|
-
*/
|
|
23
|
-
export declare class TransactionEngine {
|
|
24
|
-
private storage;
|
|
25
|
-
private transactions;
|
|
26
|
-
private txnCounter;
|
|
27
|
-
constructor(storage: IStorageAdapter);
|
|
28
|
-
/**
|
|
29
|
-
* Start a new transaction
|
|
30
|
-
*/
|
|
31
|
-
startTransaction(sessionId: string, options?: ITransactionOptions): string;
|
|
32
|
-
/**
|
|
33
|
-
* Get a transaction by ID
|
|
34
|
-
*/
|
|
35
|
-
getTransaction(txnId: string): ITransactionState | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* Check if a transaction is active
|
|
38
|
-
*/
|
|
39
|
-
isActive(txnId: string): boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Get or create a snapshot for a namespace
|
|
42
|
-
*/
|
|
43
|
-
getSnapshot(txnId: string, dbName: string, collName: string): Promise<IStoredDocument[]>;
|
|
44
|
-
/**
|
|
45
|
-
* Record a read operation
|
|
46
|
-
*/
|
|
47
|
-
recordRead(txnId: string, dbName: string, collName: string, docIds: string[]): void;
|
|
48
|
-
/**
|
|
49
|
-
* Record a write operation (insert)
|
|
50
|
-
*/
|
|
51
|
-
recordInsert(txnId: string, dbName: string, collName: string, doc: IStoredDocument): void;
|
|
52
|
-
/**
|
|
53
|
-
* Record a write operation (update)
|
|
54
|
-
*/
|
|
55
|
-
recordUpdate(txnId: string, dbName: string, collName: string, originalDoc: IStoredDocument, updatedDoc: IStoredDocument): void;
|
|
56
|
-
/**
|
|
57
|
-
* Record a write operation (delete)
|
|
58
|
-
*/
|
|
59
|
-
recordDelete(txnId: string, dbName: string, collName: string, doc: IStoredDocument): void;
|
|
60
|
-
/**
|
|
61
|
-
* Commit a transaction
|
|
62
|
-
*/
|
|
63
|
-
commitTransaction(txnId: string): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* Abort a transaction
|
|
66
|
-
*/
|
|
67
|
-
abortTransaction(txnId: string): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* End a transaction (cleanup)
|
|
70
|
-
*/
|
|
71
|
-
endTransaction(txnId: string): void;
|
|
72
|
-
/**
|
|
73
|
-
* Get all pending writes for a namespace
|
|
74
|
-
*/
|
|
75
|
-
getPendingWrites(txnId: string, dbName: string, collName: string): Map<string, {
|
|
76
|
-
op: 'insert' | 'update' | 'delete';
|
|
77
|
-
doc?: IStoredDocument;
|
|
78
|
-
}> | undefined;
|
|
79
|
-
/**
|
|
80
|
-
* Execute a callback within a transaction, with automatic retry on conflict
|
|
81
|
-
*/
|
|
82
|
-
withTransaction<T>(sessionId: string, callback: (txnId: string) => Promise<T>, options?: ITransactionOptions & {
|
|
83
|
-
maxRetries?: number;
|
|
84
|
-
}): Promise<T>;
|
|
85
|
-
}
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { SmartdbTransactionError, SmartdbWriteConflictError } from '../errors/SmartdbErrors.js';
|
|
3
|
-
/**
|
|
4
|
-
* Transaction engine for ACID transaction support
|
|
5
|
-
*/
|
|
6
|
-
export class TransactionEngine {
|
|
7
|
-
storage;
|
|
8
|
-
transactions = new Map();
|
|
9
|
-
txnCounter = 0;
|
|
10
|
-
constructor(storage) {
|
|
11
|
-
this.storage = storage;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Start a new transaction
|
|
15
|
-
*/
|
|
16
|
-
startTransaction(sessionId, options) {
|
|
17
|
-
this.txnCounter++;
|
|
18
|
-
const txnId = `txn_${sessionId}_${this.txnCounter}`;
|
|
19
|
-
const transaction = {
|
|
20
|
-
id: txnId,
|
|
21
|
-
sessionId,
|
|
22
|
-
startTime: new plugins.bson.Timestamp({ t: Math.floor(Date.now() / 1000), i: this.txnCounter }),
|
|
23
|
-
status: 'active',
|
|
24
|
-
readSet: new Map(),
|
|
25
|
-
writeSet: new Map(),
|
|
26
|
-
snapshots: new Map(),
|
|
27
|
-
};
|
|
28
|
-
this.transactions.set(txnId, transaction);
|
|
29
|
-
return txnId;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get a transaction by ID
|
|
33
|
-
*/
|
|
34
|
-
getTransaction(txnId) {
|
|
35
|
-
return this.transactions.get(txnId);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Check if a transaction is active
|
|
39
|
-
*/
|
|
40
|
-
isActive(txnId) {
|
|
41
|
-
const txn = this.transactions.get(txnId);
|
|
42
|
-
return txn?.status === 'active';
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Get or create a snapshot for a namespace
|
|
46
|
-
*/
|
|
47
|
-
async getSnapshot(txnId, dbName, collName) {
|
|
48
|
-
const txn = this.transactions.get(txnId);
|
|
49
|
-
if (!txn || txn.status !== 'active') {
|
|
50
|
-
throw new SmartdbTransactionError('Transaction is not active');
|
|
51
|
-
}
|
|
52
|
-
const ns = `${dbName}.${collName}`;
|
|
53
|
-
if (!txn.snapshots.has(ns)) {
|
|
54
|
-
const snapshot = await this.storage.createSnapshot(dbName, collName);
|
|
55
|
-
txn.snapshots.set(ns, snapshot);
|
|
56
|
-
}
|
|
57
|
-
// Apply transaction writes to snapshot
|
|
58
|
-
const snapshot = txn.snapshots.get(ns);
|
|
59
|
-
const writes = txn.writeSet.get(ns);
|
|
60
|
-
if (!writes) {
|
|
61
|
-
return snapshot;
|
|
62
|
-
}
|
|
63
|
-
// Create a modified view of the snapshot
|
|
64
|
-
const result = [];
|
|
65
|
-
const deletedIds = new Set();
|
|
66
|
-
const modifiedDocs = new Map();
|
|
67
|
-
for (const [idStr, write] of writes) {
|
|
68
|
-
if (write.op === 'delete') {
|
|
69
|
-
deletedIds.add(idStr);
|
|
70
|
-
}
|
|
71
|
-
else if (write.op === 'update' || write.op === 'insert') {
|
|
72
|
-
if (write.doc) {
|
|
73
|
-
modifiedDocs.set(idStr, write.doc);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Add existing documents (not deleted, possibly modified)
|
|
78
|
-
for (const doc of snapshot) {
|
|
79
|
-
const idStr = doc._id.toHexString();
|
|
80
|
-
if (deletedIds.has(idStr)) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
if (modifiedDocs.has(idStr)) {
|
|
84
|
-
result.push(modifiedDocs.get(idStr));
|
|
85
|
-
modifiedDocs.delete(idStr);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
result.push(doc);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// Add new documents (inserts)
|
|
92
|
-
for (const doc of modifiedDocs.values()) {
|
|
93
|
-
result.push(doc);
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Record a read operation
|
|
99
|
-
*/
|
|
100
|
-
recordRead(txnId, dbName, collName, docIds) {
|
|
101
|
-
const txn = this.transactions.get(txnId);
|
|
102
|
-
if (!txn || txn.status !== 'active')
|
|
103
|
-
return;
|
|
104
|
-
const ns = `${dbName}.${collName}`;
|
|
105
|
-
if (!txn.readSet.has(ns)) {
|
|
106
|
-
txn.readSet.set(ns, new Set());
|
|
107
|
-
}
|
|
108
|
-
const readSet = txn.readSet.get(ns);
|
|
109
|
-
for (const id of docIds) {
|
|
110
|
-
readSet.add(id);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Record a write operation (insert)
|
|
115
|
-
*/
|
|
116
|
-
recordInsert(txnId, dbName, collName, doc) {
|
|
117
|
-
const txn = this.transactions.get(txnId);
|
|
118
|
-
if (!txn || txn.status !== 'active') {
|
|
119
|
-
throw new SmartdbTransactionError('Transaction is not active');
|
|
120
|
-
}
|
|
121
|
-
const ns = `${dbName}.${collName}`;
|
|
122
|
-
if (!txn.writeSet.has(ns)) {
|
|
123
|
-
txn.writeSet.set(ns, new Map());
|
|
124
|
-
}
|
|
125
|
-
txn.writeSet.get(ns).set(doc._id.toHexString(), {
|
|
126
|
-
op: 'insert',
|
|
127
|
-
doc,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Record a write operation (update)
|
|
132
|
-
*/
|
|
133
|
-
recordUpdate(txnId, dbName, collName, originalDoc, updatedDoc) {
|
|
134
|
-
const txn = this.transactions.get(txnId);
|
|
135
|
-
if (!txn || txn.status !== 'active') {
|
|
136
|
-
throw new SmartdbTransactionError('Transaction is not active');
|
|
137
|
-
}
|
|
138
|
-
const ns = `${dbName}.${collName}`;
|
|
139
|
-
if (!txn.writeSet.has(ns)) {
|
|
140
|
-
txn.writeSet.set(ns, new Map());
|
|
141
|
-
}
|
|
142
|
-
const idStr = originalDoc._id.toHexString();
|
|
143
|
-
const existing = txn.writeSet.get(ns).get(idStr);
|
|
144
|
-
// If we already have a write for this document, update it
|
|
145
|
-
if (existing) {
|
|
146
|
-
existing.doc = updatedDoc;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
txn.writeSet.get(ns).set(idStr, {
|
|
150
|
-
op: 'update',
|
|
151
|
-
doc: updatedDoc,
|
|
152
|
-
originalDoc,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Record a write operation (delete)
|
|
158
|
-
*/
|
|
159
|
-
recordDelete(txnId, dbName, collName, doc) {
|
|
160
|
-
const txn = this.transactions.get(txnId);
|
|
161
|
-
if (!txn || txn.status !== 'active') {
|
|
162
|
-
throw new SmartdbTransactionError('Transaction is not active');
|
|
163
|
-
}
|
|
164
|
-
const ns = `${dbName}.${collName}`;
|
|
165
|
-
if (!txn.writeSet.has(ns)) {
|
|
166
|
-
txn.writeSet.set(ns, new Map());
|
|
167
|
-
}
|
|
168
|
-
const idStr = doc._id.toHexString();
|
|
169
|
-
const existing = txn.writeSet.get(ns).get(idStr);
|
|
170
|
-
if (existing && existing.op === 'insert') {
|
|
171
|
-
// If we inserted and then deleted, just remove the write
|
|
172
|
-
txn.writeSet.get(ns).delete(idStr);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
txn.writeSet.get(ns).set(idStr, {
|
|
176
|
-
op: 'delete',
|
|
177
|
-
originalDoc: doc,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Commit a transaction
|
|
183
|
-
*/
|
|
184
|
-
async commitTransaction(txnId) {
|
|
185
|
-
const txn = this.transactions.get(txnId);
|
|
186
|
-
if (!txn) {
|
|
187
|
-
throw new SmartdbTransactionError('Transaction not found');
|
|
188
|
-
}
|
|
189
|
-
if (txn.status !== 'active') {
|
|
190
|
-
throw new SmartdbTransactionError(`Cannot commit transaction in state: ${txn.status}`);
|
|
191
|
-
}
|
|
192
|
-
// Check for write conflicts
|
|
193
|
-
for (const [ns, writes] of txn.writeSet) {
|
|
194
|
-
const [dbName, collName] = ns.split('.');
|
|
195
|
-
const ids = Array.from(writes.keys()).map(id => new plugins.bson.ObjectId(id));
|
|
196
|
-
const hasConflicts = await this.storage.hasConflicts(dbName, collName, ids, txn.startTime);
|
|
197
|
-
if (hasConflicts) {
|
|
198
|
-
txn.status = 'aborted';
|
|
199
|
-
throw new SmartdbWriteConflictError();
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
// Apply all writes
|
|
203
|
-
for (const [ns, writes] of txn.writeSet) {
|
|
204
|
-
const [dbName, collName] = ns.split('.');
|
|
205
|
-
for (const [idStr, write] of writes) {
|
|
206
|
-
switch (write.op) {
|
|
207
|
-
case 'insert':
|
|
208
|
-
if (write.doc) {
|
|
209
|
-
await this.storage.insertOne(dbName, collName, write.doc);
|
|
210
|
-
}
|
|
211
|
-
break;
|
|
212
|
-
case 'update':
|
|
213
|
-
if (write.doc) {
|
|
214
|
-
await this.storage.updateById(dbName, collName, new plugins.bson.ObjectId(idStr), write.doc);
|
|
215
|
-
}
|
|
216
|
-
break;
|
|
217
|
-
case 'delete':
|
|
218
|
-
await this.storage.deleteById(dbName, collName, new plugins.bson.ObjectId(idStr));
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
txn.status = 'committed';
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Abort a transaction
|
|
227
|
-
*/
|
|
228
|
-
async abortTransaction(txnId) {
|
|
229
|
-
const txn = this.transactions.get(txnId);
|
|
230
|
-
if (!txn) {
|
|
231
|
-
throw new SmartdbTransactionError('Transaction not found');
|
|
232
|
-
}
|
|
233
|
-
if (txn.status !== 'active') {
|
|
234
|
-
// Already committed or aborted, just return
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
// Simply discard all buffered writes
|
|
238
|
-
txn.writeSet.clear();
|
|
239
|
-
txn.readSet.clear();
|
|
240
|
-
txn.snapshots.clear();
|
|
241
|
-
txn.status = 'aborted';
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* End a transaction (cleanup)
|
|
245
|
-
*/
|
|
246
|
-
endTransaction(txnId) {
|
|
247
|
-
this.transactions.delete(txnId);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Get all pending writes for a namespace
|
|
251
|
-
*/
|
|
252
|
-
getPendingWrites(txnId, dbName, collName) {
|
|
253
|
-
const txn = this.transactions.get(txnId);
|
|
254
|
-
if (!txn)
|
|
255
|
-
return undefined;
|
|
256
|
-
const ns = `${dbName}.${collName}`;
|
|
257
|
-
return txn.writeSet.get(ns);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Execute a callback within a transaction, with automatic retry on conflict
|
|
261
|
-
*/
|
|
262
|
-
async withTransaction(sessionId, callback, options) {
|
|
263
|
-
const maxRetries = options?.maxRetries ?? 3;
|
|
264
|
-
let lastError;
|
|
265
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
266
|
-
const txnId = this.startTransaction(sessionId, options);
|
|
267
|
-
try {
|
|
268
|
-
const result = await callback(txnId);
|
|
269
|
-
await this.commitTransaction(txnId);
|
|
270
|
-
this.endTransaction(txnId);
|
|
271
|
-
return result;
|
|
272
|
-
}
|
|
273
|
-
catch (error) {
|
|
274
|
-
await this.abortTransaction(txnId);
|
|
275
|
-
this.endTransaction(txnId);
|
|
276
|
-
if (error instanceof SmartdbWriteConflictError && attempt < maxRetries - 1) {
|
|
277
|
-
// Retry on write conflict
|
|
278
|
-
lastError = error;
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
throw error;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
throw lastError || new SmartdbTransactionError('Transaction failed after max retries');
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25FbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy90c19zbWFydGRiL2VuZ2luZS9UcmFuc2FjdGlvbkVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWVoRzs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsT0FBTyxDQUFrQjtJQUN6QixZQUFZLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUV2QixZQUFZLE9BQXdCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsT0FBNkI7UUFDL0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLE9BQU8sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBc0I7WUFDckMsRUFBRSxFQUFFLEtBQUs7WUFDVCxTQUFTO1lBQ1QsU0FBUyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvRixNQUFNLEVBQUUsUUFBUTtZQUNoQixPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDbEIsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ25CLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUNyQixDQUFDO1FBRUYsSUFB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
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { Document, IStoredDocument } from '../types/interfaces.js';
|
|
2
|
-
/**
|
|
3
|
-
* Update engine for MongoDB-compatible update operations
|
|
4
|
-
*/
|
|
5
|
-
export declare class UpdateEngine {
|
|
6
|
-
/**
|
|
7
|
-
* Apply an update specification to a document
|
|
8
|
-
* Returns the updated document or null if no update was applied
|
|
9
|
-
*/
|
|
10
|
-
static applyUpdate(document: IStoredDocument, update: Document, arrayFilters?: Document[]): IStoredDocument;
|
|
11
|
-
/**
|
|
12
|
-
* Apply $setOnInsert for upsert operations
|
|
13
|
-
*/
|
|
14
|
-
static applySetOnInsert(document: IStoredDocument, setOnInsert: Document): IStoredDocument;
|
|
15
|
-
/**
|
|
16
|
-
* Deep clone a document
|
|
17
|
-
*/
|
|
18
|
-
private static deepClone;
|
|
19
|
-
/**
|
|
20
|
-
* Set a nested value
|
|
21
|
-
*/
|
|
22
|
-
private static setNestedValue;
|
|
23
|
-
/**
|
|
24
|
-
* Get a nested value
|
|
25
|
-
*/
|
|
26
|
-
private static getNestedValue;
|
|
27
|
-
/**
|
|
28
|
-
* Delete a nested value
|
|
29
|
-
*/
|
|
30
|
-
private static deleteNestedValue;
|
|
31
|
-
private static applySet;
|
|
32
|
-
private static applyUnset;
|
|
33
|
-
private static applyInc;
|
|
34
|
-
private static applyMul;
|
|
35
|
-
private static applyMin;
|
|
36
|
-
private static applyMax;
|
|
37
|
-
private static applyRename;
|
|
38
|
-
private static applyCurrentDate;
|
|
39
|
-
private static applyPush;
|
|
40
|
-
private static applyPop;
|
|
41
|
-
private static applyPull;
|
|
42
|
-
private static applyPullAll;
|
|
43
|
-
private static applyAddToSet;
|
|
44
|
-
private static applyBit;
|
|
45
|
-
private static compareValues;
|
|
46
|
-
private static valuesEqual;
|
|
47
|
-
}
|