w-orm-lmdb 1.0.1
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/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +55 -0
- package/.jsdoc +25 -0
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +15 -0
- package/dist/w-orm-lmdb.umd.js +7 -0
- package/dist/w-orm-lmdb.umd.js.map +1 -0
- package/docs/WOrmLmdb.html +1406 -0
- package/docs/WOrmLmdb.mjs.html +633 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/index.html +84 -0
- package/docs/scripts/collapse.js +39 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +99 -0
- package/docs/styles/jsdoc.css +776 -0
- package/docs/styles/prettify.css +80 -0
- package/g-basic.mjs +169 -0
- package/package.json +32 -0
- package/script.txt +18 -0
- package/src/WOrmLmdb.mjs +561 -0
- package/test/basic.test.mjs +395 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +4 -0
- package/toolg/gDistRollup.mjs +23 -0
- package/toolg/modifyReadme.mjs +4 -0
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>WOrmLmdb.mjs - Documentation</title>
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
<script src="scripts/prettify/prettify.js"></script>
|
|
10
|
+
<script src="scripts/prettify/lang-css.js"></script>
|
|
11
|
+
<!--[if lt IE 9]>
|
|
12
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
13
|
+
<![endif]-->
|
|
14
|
+
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
|
|
15
|
+
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
|
|
16
|
+
<script src="scripts/nav.js" defer></script>
|
|
17
|
+
|
|
18
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
|
|
22
|
+
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
|
23
|
+
<label for="nav-trigger" class="navicon-button x">
|
|
24
|
+
<div class="navicon"></div>
|
|
25
|
+
</label>
|
|
26
|
+
|
|
27
|
+
<label for="nav-trigger" class="overlay"></label>
|
|
28
|
+
|
|
29
|
+
<nav >
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmLmdb.html">WOrmLmdb</a><ul class='methods'><li data-type='method'><a href="WOrmLmdb.html#.del">del</a></li><li data-type='method'><a href="WOrmLmdb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmLmdb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmLmdb.html#.save">save</a></li><li data-type='method'><a href="WOrmLmdb.html#.select">select</a></li></ul></li></ul>
|
|
33
|
+
|
|
34
|
+
</nav>
|
|
35
|
+
|
|
36
|
+
<div id="main">
|
|
37
|
+
|
|
38
|
+
<h1 class="page-title">WOrmLmdb.mjs</h1>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<section>
|
|
47
|
+
<article>
|
|
48
|
+
<pre class="prettyprint source linenums"><code>import { open } from 'lmdb'
|
|
49
|
+
import { Query } from 'mingo'
|
|
50
|
+
import size from 'lodash-es/size.js'
|
|
51
|
+
import get from 'lodash-es/get.js'
|
|
52
|
+
import each from 'lodash-es/each.js'
|
|
53
|
+
import map from 'lodash-es/map.js'
|
|
54
|
+
import merge from 'lodash-es/merge.js'
|
|
55
|
+
import isEqual from 'lodash-es/isEqual.js'
|
|
56
|
+
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
57
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
58
|
+
import isarr from 'wsemi/src/isarr.mjs'
|
|
59
|
+
import isearr from 'wsemi/src/isearr.mjs'
|
|
60
|
+
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
61
|
+
import haskey from 'wsemi/src/haskey.mjs'
|
|
62
|
+
import evem from 'wsemi/src/evem.mjs'
|
|
63
|
+
import genID from 'wsemi/src/genID.mjs'
|
|
64
|
+
import pmSeries from 'wsemi/src/pmSeries.mjs'
|
|
65
|
+
import waitFun from 'wsemi/src/waitFun.mjs'
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 操作資料庫(LMDB)
|
|
70
|
+
*
|
|
71
|
+
* @class
|
|
72
|
+
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
73
|
+
* @param {String} [opt.url='_db'] 輸入資料庫用資料夾字串,預設'_db'
|
|
74
|
+
* @param {String} [opt.db='worm'] 輸入使用資料庫名稱字串,預設'worm'
|
|
75
|
+
* @param {String} [opt.cl='test'] 輸入使用資料表名稱字串,預設'test'
|
|
76
|
+
* @returns {Object} 回傳操作資料庫物件,各事件功能詳見說明
|
|
77
|
+
*/
|
|
78
|
+
function WOrmLmdb(opt = {}) {
|
|
79
|
+
|
|
80
|
+
//url
|
|
81
|
+
let url = get(opt, 'url')
|
|
82
|
+
if (!isestr(url)) {
|
|
83
|
+
url = './_db'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//db
|
|
87
|
+
let db = get(opt, 'db')
|
|
88
|
+
if (!isestr(db)) {
|
|
89
|
+
db = 'worm'
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
//cl
|
|
93
|
+
let cl = get(opt, 'cl')
|
|
94
|
+
if (!isestr(cl)) {
|
|
95
|
+
cl = 'test'
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//storage
|
|
99
|
+
let storage = `${url}/${db}/${cl}`
|
|
100
|
+
// console.log('storage',storage)
|
|
101
|
+
|
|
102
|
+
// client
|
|
103
|
+
let client = open({
|
|
104
|
+
path: storage,
|
|
105
|
+
compression: true,
|
|
106
|
+
useVersions: true,
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
//ee
|
|
110
|
+
let ee = evem()
|
|
111
|
+
|
|
112
|
+
//getData
|
|
113
|
+
let getData = async() => {
|
|
114
|
+
let errTemp = null
|
|
115
|
+
|
|
116
|
+
//waitFun
|
|
117
|
+
await waitFun(() => {
|
|
118
|
+
if (client.status === 'closed') {
|
|
119
|
+
console.log(`client.status[${client.status}], level is closed`)
|
|
120
|
+
}
|
|
121
|
+
return client.status === 'open'
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
// console.log('client.status',client.status)
|
|
125
|
+
let ltdt = []
|
|
126
|
+
for await (let { value: dt } of client.getRange()) {
|
|
127
|
+
// console.log('dt',dt)
|
|
128
|
+
ltdt.push(dt)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (errTemp !== null) {
|
|
132
|
+
return Promise.reject(errTemp)
|
|
133
|
+
}
|
|
134
|
+
return ltdt
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
//getValue
|
|
138
|
+
let getValue = async (key) => {
|
|
139
|
+
let value = null
|
|
140
|
+
try {
|
|
141
|
+
value = await client.get(key)
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
// if (err.notFound) {
|
|
145
|
+
// console.log('資料不存在')
|
|
146
|
+
// }
|
|
147
|
+
// else {
|
|
148
|
+
// console.log('其他錯誤:', err)
|
|
149
|
+
// }
|
|
150
|
+
}
|
|
151
|
+
return value
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* 查詢數據
|
|
156
|
+
*
|
|
157
|
+
* @memberOf WOrmLmdb
|
|
158
|
+
* @param {Object} [find={}] 輸入查詢條件物件
|
|
159
|
+
* @returns {Promise} 回傳Promise,resolve回傳數據,reject回傳錯誤訊息
|
|
160
|
+
*/
|
|
161
|
+
async function select(find = {}) {
|
|
162
|
+
let isErr = false
|
|
163
|
+
let res = null
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
|
|
167
|
+
//ltdt
|
|
168
|
+
let ltdt = await getData()
|
|
169
|
+
// console.log('select ltdt',ltdt)
|
|
170
|
+
|
|
171
|
+
//filter
|
|
172
|
+
if (iseobj(find)) {
|
|
173
|
+
|
|
174
|
+
//q
|
|
175
|
+
let q = new Query(find)
|
|
176
|
+
// console.log('q', q)
|
|
177
|
+
|
|
178
|
+
//find
|
|
179
|
+
res = q.find(ltdt).all()
|
|
180
|
+
// console.log('select(find) ltdt',res)
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
res = ltdt
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//check
|
|
188
|
+
if (!isarr(res)) {
|
|
189
|
+
isErr = true
|
|
190
|
+
res = `can not select by find[${JSON.stringify(find)}]`
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
isErr = true
|
|
196
|
+
res = err
|
|
197
|
+
}
|
|
198
|
+
// console.log('res', res)
|
|
199
|
+
|
|
200
|
+
//check
|
|
201
|
+
if (isErr) {
|
|
202
|
+
return Promise.reject(res)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return res
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* 插入數據
|
|
210
|
+
*
|
|
211
|
+
* @memberOf WOrmLmdb
|
|
212
|
+
* @param {Object|Array} data 輸入數據物件或陣列
|
|
213
|
+
* @returns {Promise} 回傳Promise,resolve回傳插入結果,reject回傳錯誤訊息
|
|
214
|
+
*/
|
|
215
|
+
async function insert(data) {
|
|
216
|
+
let isErr = false
|
|
217
|
+
|
|
218
|
+
//check
|
|
219
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
220
|
+
return {
|
|
221
|
+
n: 0,
|
|
222
|
+
nInserted: 0,
|
|
223
|
+
ok: 1,
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
//cloneDeep, 與外部數據脫勾
|
|
228
|
+
data = cloneDeep(data)
|
|
229
|
+
|
|
230
|
+
//res
|
|
231
|
+
let res = null
|
|
232
|
+
try {
|
|
233
|
+
|
|
234
|
+
//check
|
|
235
|
+
if (!isarr(data)) {
|
|
236
|
+
data = [data]
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
//check id
|
|
240
|
+
data = map(data, function(v) {
|
|
241
|
+
if (!isestr(v.id)) {
|
|
242
|
+
v.id = genID()
|
|
243
|
+
}
|
|
244
|
+
return v
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
//each
|
|
248
|
+
let nAll = size(data)
|
|
249
|
+
let nPush = 0
|
|
250
|
+
for (let v of data) {
|
|
251
|
+
// console.log(v)
|
|
252
|
+
|
|
253
|
+
//查找資料表內v.id
|
|
254
|
+
let vv = await getValue(v.id) //不會有catch
|
|
255
|
+
// console.log('getValue',vv)
|
|
256
|
+
|
|
257
|
+
//check
|
|
258
|
+
if (!iseobj(vv)) {
|
|
259
|
+
//未存在v.id
|
|
260
|
+
|
|
261
|
+
//put
|
|
262
|
+
await client.put(v.id, v)
|
|
263
|
+
|
|
264
|
+
nPush++
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
//已存在v.id則不push
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
//res
|
|
273
|
+
res = {
|
|
274
|
+
n: nAll,
|
|
275
|
+
nInserted: nPush,
|
|
276
|
+
ok: 1,
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
//emit
|
|
280
|
+
ee.emit('change', 'insert', data, res)
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
isErr = true
|
|
285
|
+
res = err
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (isErr) {
|
|
289
|
+
return Promise.reject(res)
|
|
290
|
+
}
|
|
291
|
+
return res
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* 儲存數據
|
|
296
|
+
*
|
|
297
|
+
* @memberOf WOrmLmdb
|
|
298
|
+
* @param {Object|Array} data 輸入數據物件或陣列
|
|
299
|
+
* @param {Object} [option={}] 輸入設定物件,預設為{}
|
|
300
|
+
* @param {boolean} [option.autoInsert=true] 輸入是否於儲存時發現原本無數據,則自動改以插入處理,預設為true
|
|
301
|
+
* @returns {Promise} 回傳Promise,resolve回傳儲存結果,reject回傳錯誤訊息
|
|
302
|
+
*/
|
|
303
|
+
async function save(data, option = {}) {
|
|
304
|
+
let isErr = false
|
|
305
|
+
|
|
306
|
+
//check
|
|
307
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
308
|
+
return []
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
//cloneDeep, 與外部數據脫勾
|
|
312
|
+
data = cloneDeep(data)
|
|
313
|
+
|
|
314
|
+
//autoInsert
|
|
315
|
+
let autoInsert = get(option, 'autoInsert', true)
|
|
316
|
+
|
|
317
|
+
//res
|
|
318
|
+
let res = null
|
|
319
|
+
try {
|
|
320
|
+
|
|
321
|
+
//check
|
|
322
|
+
if (!isarr(data)) {
|
|
323
|
+
data = [data]
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
//check id
|
|
327
|
+
data = map(data, function(v) {
|
|
328
|
+
if (!isestr(v.id)) {
|
|
329
|
+
v.id = genID()
|
|
330
|
+
}
|
|
331
|
+
return v
|
|
332
|
+
})
|
|
333
|
+
|
|
334
|
+
//pmSeries
|
|
335
|
+
res = await pmSeries(data, async(v) => {
|
|
336
|
+
|
|
337
|
+
//rest
|
|
338
|
+
let rest = null
|
|
339
|
+
|
|
340
|
+
//查找資料表內v.id
|
|
341
|
+
let vv = await getValue(v.id) //不會有catch
|
|
342
|
+
|
|
343
|
+
//check
|
|
344
|
+
if (iseobj(vv)) {
|
|
345
|
+
//已存在v.id
|
|
346
|
+
if (isEqual(v, vv)) {
|
|
347
|
+
//內容相同不更新
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
//內容不同須更新
|
|
351
|
+
|
|
352
|
+
//merge and put
|
|
353
|
+
await client.put(v.id, merge(vv, v))
|
|
354
|
+
|
|
355
|
+
rest = { update: true }
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
//rest
|
|
360
|
+
if (iseobj(rest)) {
|
|
361
|
+
rest = {
|
|
362
|
+
n: 1,
|
|
363
|
+
nModified: 1,
|
|
364
|
+
ok: 1,
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
rest = {
|
|
369
|
+
n: 0,
|
|
370
|
+
nModified: 0,
|
|
371
|
+
ok: 1,
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
//autoInsert
|
|
376
|
+
if (autoInsert && rest.n === 0) {
|
|
377
|
+
rest = await insert(v)
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return rest
|
|
381
|
+
})
|
|
382
|
+
|
|
383
|
+
//emit
|
|
384
|
+
ee.emit('change', 'save', data, res)
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
isErr = true
|
|
389
|
+
res = err
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (isErr) {
|
|
393
|
+
return Promise.reject(res)
|
|
394
|
+
}
|
|
395
|
+
return res
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* 刪除數據
|
|
400
|
+
*
|
|
401
|
+
* @memberOf WOrmLmdb
|
|
402
|
+
* @param {Object|Array} data 輸入數據物件或陣列
|
|
403
|
+
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
404
|
+
*/
|
|
405
|
+
async function del(data) {
|
|
406
|
+
let isErr = false
|
|
407
|
+
|
|
408
|
+
//check
|
|
409
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
410
|
+
return []
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
//cloneDeep, 與外部數據脫勾
|
|
414
|
+
data = cloneDeep(data)
|
|
415
|
+
|
|
416
|
+
//res
|
|
417
|
+
let res = null
|
|
418
|
+
try {
|
|
419
|
+
|
|
420
|
+
//check
|
|
421
|
+
if (!isarr(data)) {
|
|
422
|
+
data = [data]
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
//pmSeries
|
|
426
|
+
res = await pmSeries(data, async(v) => {
|
|
427
|
+
|
|
428
|
+
//rest
|
|
429
|
+
let rest = null
|
|
430
|
+
|
|
431
|
+
//id
|
|
432
|
+
let id = get(v, 'id', '')
|
|
433
|
+
|
|
434
|
+
//check
|
|
435
|
+
if (isestr(id)) {
|
|
436
|
+
|
|
437
|
+
//查找資料表內v.id
|
|
438
|
+
let vv = await getValue(v.id) //不會有catch
|
|
439
|
+
|
|
440
|
+
//check
|
|
441
|
+
if (iseobj(vv)) {
|
|
442
|
+
//已存在v.id則須刪除
|
|
443
|
+
|
|
444
|
+
//del
|
|
445
|
+
await client.del(v.id)
|
|
446
|
+
|
|
447
|
+
//rest
|
|
448
|
+
rest = {
|
|
449
|
+
n: 1,
|
|
450
|
+
nDeleted: 1,
|
|
451
|
+
ok: 1,
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
//不存在v.id則不刪除
|
|
457
|
+
|
|
458
|
+
//rest
|
|
459
|
+
rest = {
|
|
460
|
+
n: 1,
|
|
461
|
+
nDeleted: 0,
|
|
462
|
+
ok: 1,
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
//未給v.id則不刪除
|
|
470
|
+
|
|
471
|
+
//rest
|
|
472
|
+
rest = {
|
|
473
|
+
n: 1,
|
|
474
|
+
nDeleted: 0,
|
|
475
|
+
ok: 0, //未給v.id視為有問題數據, 故ok給0
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
return rest
|
|
481
|
+
})
|
|
482
|
+
|
|
483
|
+
//emit
|
|
484
|
+
ee.emit('change', 'del', data, res)
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
catch (err) {
|
|
488
|
+
isErr = true
|
|
489
|
+
res = err
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (isErr) {
|
|
493
|
+
return Promise.reject(res)
|
|
494
|
+
}
|
|
495
|
+
return res
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* 刪除全部數據,需與del分開,避免未傳數據導致直接刪除全表
|
|
500
|
+
*
|
|
501
|
+
* @memberOf WOrmLmdb
|
|
502
|
+
* @param {Object} [find={}] 輸入刪除條件物件
|
|
503
|
+
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
504
|
+
*/
|
|
505
|
+
async function delAll(find = {}) {
|
|
506
|
+
let isErr = false
|
|
507
|
+
|
|
508
|
+
//res
|
|
509
|
+
let res = null
|
|
510
|
+
try {
|
|
511
|
+
|
|
512
|
+
//ltdt
|
|
513
|
+
let ltdt = await getData()
|
|
514
|
+
|
|
515
|
+
//filter
|
|
516
|
+
let nAll = size(ltdt)
|
|
517
|
+
let nDel = 0
|
|
518
|
+
if (iseobj(find)) {
|
|
519
|
+
|
|
520
|
+
//q
|
|
521
|
+
let q = new Query(find)
|
|
522
|
+
// console.log('q', q)
|
|
523
|
+
|
|
524
|
+
//find
|
|
525
|
+
let _res = q.find(ltdt).all()
|
|
526
|
+
// console.log('_res', _res)
|
|
527
|
+
|
|
528
|
+
//nDel
|
|
529
|
+
nDel = size(_res)
|
|
530
|
+
// console.log('nDel', nDel)
|
|
531
|
+
|
|
532
|
+
if (nDel === 0) {
|
|
533
|
+
//未有find結果等於不刪除
|
|
534
|
+
}
|
|
535
|
+
else if (nAll === nDel) {
|
|
536
|
+
//全在find結果內等於全部刪除
|
|
537
|
+
|
|
538
|
+
//empty
|
|
539
|
+
for (let v of ltdt) {
|
|
540
|
+
await client.del(v.id)
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
//部份在find結果內
|
|
546
|
+
|
|
547
|
+
//_kp
|
|
548
|
+
let _kp = {}
|
|
549
|
+
each(_res, (v, k) => {
|
|
550
|
+
_kp[v.id] = { k, v }
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
//del
|
|
554
|
+
for (let v of ltdt) {
|
|
555
|
+
if (haskey(_kp, v.id)) {
|
|
556
|
+
//在find結果內代表須刪除
|
|
557
|
+
await client.del(v.id)
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
|
|
565
|
+
//nDel
|
|
566
|
+
nDel = nAll
|
|
567
|
+
|
|
568
|
+
//empty
|
|
569
|
+
for (let v of ltdt) {
|
|
570
|
+
await client.del(v.id)
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
//res
|
|
576
|
+
res = {
|
|
577
|
+
n: nAll,
|
|
578
|
+
nDeleted: nDel,
|
|
579
|
+
ok: 1,
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
//emit
|
|
583
|
+
ee.emit('change', 'delAll', null, res)
|
|
584
|
+
|
|
585
|
+
}
|
|
586
|
+
catch (err) {
|
|
587
|
+
isErr = true
|
|
588
|
+
res = err
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
if (isErr) {
|
|
592
|
+
return Promise.reject(res)
|
|
593
|
+
}
|
|
594
|
+
return res
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
//save
|
|
598
|
+
ee.select = select
|
|
599
|
+
ee.insert = insert
|
|
600
|
+
ee.save = save
|
|
601
|
+
ee.del = del
|
|
602
|
+
ee.delAll = delAll
|
|
603
|
+
|
|
604
|
+
return ee
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
export default WOrmLmdb
|
|
609
|
+
</code></pre>
|
|
610
|
+
</article>
|
|
611
|
+
</section>
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
</div>
|
|
619
|
+
|
|
620
|
+
<br class="clear">
|
|
621
|
+
|
|
622
|
+
<footer>
|
|
623
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Sun May 11 2025 23:16:04 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
624
|
+
</footer>
|
|
625
|
+
|
|
626
|
+
<script>prettyPrint();</script>
|
|
627
|
+
<script src="scripts/polyfill.js"></script>
|
|
628
|
+
<script src="scripts/linenumber.js"></script>
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
</body>
|
|
633
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|