-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
99 lines (80 loc) · 2.03 KB
/
index.js
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var path = require('path');
var crypto = require('crypto');
var ultradb = require('./build/Release/ultradb.node');
//var ultradb = require('./build/Debug/ultradb.node');
var onExit = require('./onExit');
var defaultPageSize = 16384;
var retries = 100;
var dbs = {};
onExit(function() {
var path;
for (path in dbs) {
try {
dbs[path]._close();
} catch (error) {
console.log(' === ERROR while closing: ' + path + ' ===');
console.log(error);
}
}
});
function getDb(path, pageSize) {
var db;
for (var i = 0; i < retries; i++) {
db = ultradb(path, pageSize, () => {
return crypto.randomBytes(8);
});
if (db !== false) return db;
}
throw {from: 'ultradb', source: "CreateObject", sourceDetails: "getDb", message: "all retries failed", messageDetails: rootPath + ':' + path};
}
var UltraDB = function(dbPath, pageSize) {
dbPath = path.resolve(dbPath);
var db = dbs[dbPath];
if (db) {
db._connections++;
return db;
}
pageSize = pageSize || defaultPageSize;
var db = getDb(dbPath, pageSize);
db._connections = 1;
db._path = dbPath;
db.close = function() {
if (db._connections == 1) {
db._close();
delete db._connections;
delete db._close;
delete db.close;
delete dbs[dbPath];
} else {
db._connections--;
}
}
db.default = function(dataFormat) {
for (methodName in this) {
if (methodName.includes(dataFormat)) {
this[methodName.replace(dataFormat, '')] = this[methodName];
}
}
return this;
}
dbs[dbPath] = db;
return db;
}
UltraDB.prepareMultiTransaction = function() {
return Array.prototype.slice.call(arguments).sort(function(a, b) {
return a._key - b._key;
});
}
UltraDB.start = function(multiTransaction) {
var t = 0, l = multiTransaction.length;
for (; t < l; t++) {
multiTransaction[t].start();
}
}
UltraDB.stop = function(multiTransaction) {
var t = multiTransaction.length;
for (; t >=0; --t) {
multiTransaction[t].stop();
}
}
module.exports = UltraDB;