@wowoengine/sawitdb 2.5.0 → 2.6.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.
Files changed (37) hide show
  1. package/README.md +72 -16
  2. package/bin/sawit-server.js +5 -1
  3. package/cli/benchmark.js +292 -119
  4. package/cli/local.js +26 -11
  5. package/cli/remote.js +26 -11
  6. package/cli/test.js +110 -72
  7. package/cli/test_security.js +140 -0
  8. package/docs/DB Event.md +32 -0
  9. package/docs/index.html +125 -17
  10. package/package.json +10 -7
  11. package/src/SawitClient.js +122 -98
  12. package/src/SawitServer.js +77 -464
  13. package/src/SawitWorker.js +55 -0
  14. package/src/WowoEngine.js +245 -824
  15. package/src/modules/BTreeIndex.js +54 -24
  16. package/src/modules/ClusterManager.js +78 -0
  17. package/src/modules/Env.js +33 -0
  18. package/src/modules/Pager.js +12 -9
  19. package/src/modules/QueryParser.js +233 -48
  20. package/src/modules/ThreadManager.js +84 -0
  21. package/src/modules/ThreadPool.js +154 -0
  22. package/src/server/DatabaseRegistry.js +92 -0
  23. package/src/server/auth/AuthManager.js +92 -0
  24. package/src/server/router/RequestRouter.js +278 -0
  25. package/src/server/session/ClientSession.js +19 -0
  26. package/src/services/IndexManager.js +183 -0
  27. package/src/services/QueryExecutor.js +11 -0
  28. package/src/services/TableManager.js +162 -0
  29. package/src/services/event/DBEvent.js +61 -0
  30. package/src/services/event/DBEventHandler.js +39 -0
  31. package/src/services/executors/AggregateExecutor.js +153 -0
  32. package/src/services/executors/DeleteExecutor.js +134 -0
  33. package/src/services/executors/InsertExecutor.js +113 -0
  34. package/src/services/executors/SelectExecutor.js +130 -0
  35. package/src/services/executors/UpdateExecutor.js +156 -0
  36. package/src/services/logic/ConditionEvaluator.js +75 -0
  37. package/src/services/logic/JoinProcessor.js +230 -0
@@ -0,0 +1,55 @@
1
+ const { parentPort, workerData, threadId } = require('worker_threads');
2
+ const SawitDB = require('./WowoEngine');
3
+
4
+ // Cache of DB instances: { [absolutePath]: SawitDB }
5
+ // NOTE: Since threads map to "Database Engines", they must be careful about FILE LOCKING.
6
+ // If multiple threads open the SAME file, we have the same corruption risk as processes.
7
+ // But this is the requested architecture.
8
+ const dbCache = new Map();
9
+
10
+ parentPort.on('message', async (task) => {
11
+ // task: { id: number, action: 'query', dbPath: string, sql: string, config: object }
12
+ // config can contain WAL settings etc for first open.
13
+
14
+ if (task.action === 'query') {
15
+ try {
16
+ let db = dbCache.get(task.dbPath);
17
+ if (!db) {
18
+ // Initialize DB if not open in this thread
19
+ const options = task.config || {};
20
+ db = new SawitDB(task.dbPath, options);
21
+ dbCache.set(task.dbPath, db);
22
+ // console.log(`[Thread ${threadId}] Opened DB: ${task.dbPath}`);
23
+ }
24
+
25
+ // Execute Query
26
+ // Ensure we handle async queries (SawitDB v2.5+)
27
+ let result;
28
+ if (db.query.constructor.name === 'AsyncFunction') {
29
+ result = await db.query(task.sql);
30
+ } else {
31
+ result = db.query(task.sql);
32
+ }
33
+
34
+ // Send Success
35
+ parentPort.postMessage({ id: task.id, status: 'ok', data: result });
36
+
37
+ } catch (err) {
38
+ // Send Error
39
+ parentPort.postMessage({
40
+ id: task.id,
41
+ status: 'error',
42
+ error: err.message,
43
+ stack: err.stack
44
+ });
45
+ }
46
+ } else if (task.action === 'close') {
47
+ // Close specific DB or all?
48
+ // Let's support clearing cache
49
+ dbCache.forEach(db => {
50
+ try { db.close(); } catch (e) { }
51
+ });
52
+ dbCache.clear();
53
+ parentPort.postMessage({ id: task.id, status: 'ok' });
54
+ }
55
+ });