@xuda.io/xuda-dbs-plugin-xuda 1.0.78 → 1.0.80
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/package.json +1 -1
- package/server.js +56 -754
package/package.json
CHANGED
package/server.js
CHANGED
@@ -57,7 +57,7 @@ const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
|
|
57
57
|
"check_unique",
|
58
58
|
valSegment,
|
59
59
|
_fieldType,
|
60
|
-
val.keyValue[keySegment]
|
60
|
+
val.keyValue[Number(keySegment)]
|
61
61
|
);
|
62
62
|
keyValue.push(_val);
|
63
63
|
}
|
@@ -195,10 +195,10 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
195
195
|
const raw_data = async function () {
|
196
196
|
var rows = [];
|
197
197
|
|
198
|
-
for
|
198
|
+
for (var val of body.docs) {
|
199
199
|
var data = {};
|
200
200
|
if (e.fields) {
|
201
|
-
for
|
201
|
+
for (const [key2, val2] of Object.entries(
|
202
202
|
typeof e.fields === "string" ? e.fields.split(",") : e.fields
|
203
203
|
)) {
|
204
204
|
if (val.udfData) {
|
@@ -208,9 +208,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
208
208
|
}
|
209
209
|
}
|
210
210
|
} else {
|
211
|
-
for
|
212
|
-
table_obj.tableFields
|
213
|
-
)) {
|
211
|
+
for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
|
214
212
|
if (val.udfData) {
|
215
213
|
data[val2.data.field_id] =
|
216
214
|
val["udfData"]["data"][val2.data.field_id];
|
@@ -223,11 +221,6 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
223
221
|
rows.push({
|
224
222
|
id: val._id,
|
225
223
|
value: data,
|
226
|
-
// value: {
|
227
|
-
// udfData: { data: data },
|
228
|
-
// _id: val._id,
|
229
|
-
// _rev: val._rev,
|
230
|
-
// },
|
231
224
|
});
|
232
225
|
}
|
233
226
|
|
@@ -245,7 +238,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
245
238
|
var index_keys = table_index.data.keys;
|
246
239
|
var index_id = e.indexId;
|
247
240
|
|
248
|
-
for
|
241
|
+
for (var val of body.docs) {
|
249
242
|
var data = {};
|
250
243
|
const _tableFieldsObj = find_item_by_key(
|
251
244
|
table_obj.tableFields,
|
@@ -253,24 +246,20 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
253
246
|
e.field_id
|
254
247
|
);
|
255
248
|
|
256
|
-
for
|
257
|
-
table_obj.tableFields
|
258
|
-
)) {
|
249
|
+
for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
|
259
250
|
data[val2.data.field_id] =
|
260
251
|
val["udfData"]["data"][val2.data.field_id];
|
261
252
|
}
|
262
253
|
|
263
254
|
var key_arr = [];
|
264
255
|
|
265
|
-
for
|
266
|
-
index_keys
|
267
|
-
)) {
|
256
|
+
for (const [key_idx, key_name] of Object.entries(index_keys)) {
|
268
257
|
key_arr.push(data[key_name]);
|
269
258
|
}
|
270
259
|
keys_obj[key_arr]++;
|
271
260
|
}
|
272
261
|
|
273
|
-
for
|
262
|
+
for (const [key_arr, key_count] of Object.entries(keys_obj)) {
|
274
263
|
rows.push({
|
275
264
|
key: [e.key, index_id, key_arr],
|
276
265
|
value: body.docs.length,
|
@@ -300,7 +289,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
300
289
|
var totals_sums = {};
|
301
290
|
var totals_group_obj = {};
|
302
291
|
|
303
|
-
for
|
292
|
+
for (const [key, val] of Object.entries(total_fields_info)) {
|
304
293
|
totals_counts[val.field_id] = 0;
|
305
294
|
totals_prop[val.field_id] = val;
|
306
295
|
totals_arr[val.field_id] = [];
|
@@ -308,10 +297,8 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
308
297
|
totals_group_obj[val.field_id] = {};
|
309
298
|
}
|
310
299
|
|
311
|
-
for
|
312
|
-
for
|
313
|
-
row_data.udfData.data
|
314
|
-
)) {
|
300
|
+
for (var row_data of body.docs) {
|
301
|
+
for (const [key, val] of Object.entries(row_data.udfData.data)) {
|
315
302
|
var field_id = key;
|
316
303
|
var value = val;
|
317
304
|
totals_counts[field_id]++;
|
@@ -386,7 +373,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
386
373
|
}
|
387
374
|
return { code: 1, data: totals_obj };
|
388
375
|
};
|
389
|
-
if (e.count
|
376
|
+
if (e.count) {
|
390
377
|
return count_data();
|
391
378
|
}
|
392
379
|
if (e.total_fields_info) {
|
@@ -408,13 +395,13 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
408
395
|
|
409
396
|
var fields = [];
|
410
397
|
if (e.fields) {
|
411
|
-
for
|
398
|
+
for (const [key, val] of Object.entries(
|
412
399
|
typeof e.fields === "string" ? e.fields.split(",") : e.fields
|
413
400
|
)) {
|
414
401
|
fields.push(val);
|
415
402
|
}
|
416
403
|
} else {
|
417
|
-
for
|
404
|
+
for (const [key, val] of Object.entries(table_obj.tableFields)) {
|
418
405
|
fields.push(val.data.field_id);
|
419
406
|
}
|
420
407
|
}
|
@@ -423,7 +410,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
423
410
|
var from = e.filter_from ? JSON.parse(e.filter_from) : {};
|
424
411
|
var to = e.filter_to ? JSON.parse(e.filter_to) : {};
|
425
412
|
var sort = [];
|
426
|
-
for
|
413
|
+
for (const [key, val] of Object.entries(from)) {
|
427
414
|
var field_name = key;
|
428
415
|
|
429
416
|
sort.push(field_name);
|
@@ -435,7 +422,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
435
422
|
}
|
436
423
|
}
|
437
424
|
|
438
|
-
for
|
425
|
+
for (const [key, val] of Object.entries(to)) {
|
439
426
|
var field_name = key;
|
440
427
|
|
441
428
|
if (val !== from[key]) {
|
@@ -463,7 +450,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
463
450
|
if (e.sort_fields && JSON.parse(e.sort_fields).length) {
|
464
451
|
opt.sort = JSON.parse(e.sort_fields);
|
465
452
|
if (opt.sort) {
|
466
|
-
for
|
453
|
+
for (const [key, val] of Object.entries(opt.sort)) {
|
467
454
|
var field_name = val.colId;
|
468
455
|
opt.sort[key] = {
|
469
456
|
["udfData.data." + field_name]: val.sort,
|
@@ -473,9 +460,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
473
460
|
}
|
474
461
|
|
475
462
|
if (e.grid_filter_info) {
|
476
|
-
for
|
477
|
-
JSON.parse(e.grid_filter_info)
|
478
|
-
)) {
|
463
|
+
for (const [key, val] of Object.entries(JSON.parse(e.grid_filter_info))) {
|
479
464
|
var field_name = key;
|
480
465
|
var condition = "$and";
|
481
466
|
const make_selector = function (val) {
|
@@ -660,7 +645,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
660
645
|
|
661
646
|
if (e.total_fields_info) {
|
662
647
|
fields = [];
|
663
|
-
for
|
648
|
+
for (const [key, val] of Object.entries(
|
664
649
|
JSON.parse(e.total_fields_info)
|
665
650
|
)) {
|
666
651
|
var field_name = val.field_id;
|
@@ -671,13 +656,13 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
671
656
|
}
|
672
657
|
// fix names
|
673
658
|
|
674
|
-
for
|
659
|
+
for (const [key, val] of Object.entries(opt.fields)) {
|
675
660
|
opt.fields[key] = "udfData.data." + val;
|
676
661
|
}
|
677
662
|
if (!e.sort_fields || !JSON.parse(e.sort_fields).length) {
|
678
663
|
// added 2021 09 10
|
679
664
|
if (opt.sort) {
|
680
|
-
for
|
665
|
+
for (const [key, val] of Object.entries(opt.sort)) {
|
681
666
|
opt.sort[key] = {
|
682
667
|
["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
|
683
668
|
};
|
@@ -687,12 +672,12 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
687
672
|
|
688
673
|
var selector_new = {};
|
689
674
|
|
690
|
-
for
|
675
|
+
for (const [key, val] of Object.entries(opt.selector)) {
|
691
676
|
selector_new["udfData.data." + key] = val;
|
692
677
|
}
|
693
678
|
|
694
679
|
if (e.viewDbQuery) {
|
695
|
-
for
|
680
|
+
for (const [key, val] of Object.entries(table_obj.tableFields)) {
|
696
681
|
if (e.viewDbQuery.includes(val.id)) {
|
697
682
|
const replacer = new RegExp(val.id, "g");
|
698
683
|
e.viewDbQuery = e.viewDbQuery.replace(
|
@@ -704,7 +689,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
704
689
|
|
705
690
|
let viewDbQuery = JSON.parse(e.viewDbQuery.replace(/\\/g, ""));
|
706
691
|
|
707
|
-
for
|
692
|
+
for (const [key, val] of Object.entries(viewDbQuery)) {
|
708
693
|
selector_new[key] = val;
|
709
694
|
}
|
710
695
|
}
|
@@ -717,29 +702,10 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
717
702
|
opt.fields.push("_rev");
|
718
703
|
|
719
704
|
// xuda
|
720
|
-
var cache_string = JSON.stringify(opt);
|
721
|
-
|
722
|
-
if (__.CACHE_QUERY_REQ?.[app_id_reference]?.[e.table_id]?.[cache_string]) {
|
723
|
-
return await done(
|
724
|
-
__.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string].doc
|
725
|
-
);
|
726
|
-
}
|
727
705
|
|
728
706
|
try {
|
729
707
|
try {
|
730
708
|
const doc = await db.find(opt);
|
731
|
-
if (!__.CACHE_QUERY_REQ[app_id_reference]) {
|
732
|
-
__.CACHE_QUERY_REQ[app_id_reference] = {};
|
733
|
-
}
|
734
|
-
|
735
|
-
if (!__.CACHE_QUERY_REQ[app_id_reference][e.table_id]) {
|
736
|
-
__.CACHE_QUERY_REQ[app_id_reference][e.table_id] = {};
|
737
|
-
}
|
738
|
-
|
739
|
-
__.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string] = {
|
740
|
-
doc: doc,
|
741
|
-
ts: Date.now(),
|
742
|
-
};
|
743
709
|
|
744
710
|
if (doc?.warning?.includes("No matching index found")) {
|
745
711
|
const index_name = `index_${e.table_id}_${new Date()
|
@@ -747,7 +713,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
747
713
|
.toString()}`;
|
748
714
|
var index = [];
|
749
715
|
|
750
|
-
for
|
716
|
+
for (const [key, val] of Object.entries(opt.selector)) {
|
751
717
|
index.push(key);
|
752
718
|
}
|
753
719
|
mango_index_obj = {
|
@@ -781,15 +747,15 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
781
747
|
|
782
748
|
const doc = await db.find(opt);
|
783
749
|
return await done(doc);
|
784
|
-
} catch (
|
785
|
-
return { code: -1, data:
|
750
|
+
} catch (err) {
|
751
|
+
return { code: -1, data: err.message };
|
786
752
|
}
|
787
753
|
} else {
|
788
754
|
return { code: -1, data: err.message };
|
789
755
|
}
|
790
756
|
}
|
791
757
|
} catch (err) {
|
792
|
-
return { code: -1, data: err.
|
758
|
+
return { code: -1, data: err.message };
|
793
759
|
}
|
794
760
|
};
|
795
761
|
|
@@ -805,8 +771,6 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
805
771
|
skip = e.skipP;
|
806
772
|
}
|
807
773
|
|
808
|
-
var desc = e.desc === "true" ? true : false;
|
809
|
-
|
810
774
|
var opt = undefined;
|
811
775
|
if (key) {
|
812
776
|
opt = {
|
@@ -816,7 +780,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
816
780
|
skip: skip,
|
817
781
|
};
|
818
782
|
} else {
|
819
|
-
if (e.reduce
|
783
|
+
if (e.reduce) {
|
820
784
|
opt = {
|
821
785
|
startkey: e.startkey ? JSON.parse(e.startkey) : "",
|
822
786
|
endkey: e.endkey ? JSON.parse(e.endkey) : "",
|
@@ -824,7 +788,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
824
788
|
reduce: true,
|
825
789
|
group_level: 3,
|
826
790
|
|
827
|
-
descending: desc,
|
791
|
+
descending: e.desc,
|
828
792
|
};
|
829
793
|
} else {
|
830
794
|
opt = {
|
@@ -833,7 +797,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
833
797
|
include_docs: !e.ids,
|
834
798
|
limit: limit,
|
835
799
|
skip: skip,
|
836
|
-
descending: desc,
|
800
|
+
descending: e.desc,
|
837
801
|
};
|
838
802
|
}
|
839
803
|
}
|
@@ -854,7 +818,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
854
818
|
|
855
819
|
var obj = {};
|
856
820
|
for await (const [arr_key, arr_val] of Object.entries(arr)) {
|
857
|
-
let field_id = table_index.data.keys[arr_key];
|
821
|
+
let field_id = table_index.data.keys[Number(arr_key)];
|
858
822
|
|
859
823
|
const _tableFieldsObj = find_item_by_key(
|
860
824
|
table_obj.tableFields,
|
@@ -883,7 +847,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
883
847
|
for await (var val of body.rows) {
|
884
848
|
if (e.ids) {
|
885
849
|
rows.push({ id: val.id, value: val.value._id });
|
886
|
-
|
850
|
+
continue;
|
887
851
|
}
|
888
852
|
rows.push({
|
889
853
|
id: val.id,
|
@@ -917,9 +881,24 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
917
881
|
// );}
|
918
882
|
|
919
883
|
return { code: 1, data: { rows: rows, total_rows: rows.length } };
|
920
|
-
} catch (
|
921
|
-
return { code: -1, data:
|
884
|
+
} catch (err) {
|
885
|
+
return { code: -1, data: err.message };
|
886
|
+
}
|
887
|
+
};
|
888
|
+
|
889
|
+
const count_tables = async function () {
|
890
|
+
var opt = {
|
891
|
+
reduce: true,
|
892
|
+
group_level: 1,
|
893
|
+
};
|
894
|
+
|
895
|
+
if (e.table_id) {
|
896
|
+
opt.key = e.table_id;
|
922
897
|
}
|
898
|
+
|
899
|
+
const body = await db.view(`xuda`, "db_table_counts", opt);
|
900
|
+
|
901
|
+
return { code: 1, data: body };
|
923
902
|
};
|
924
903
|
|
925
904
|
if (e.reduce && JSON.parse(e.reduce)) {
|
@@ -931,6 +910,12 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
|
|
931
910
|
view = e.view;
|
932
911
|
return await runtime_get_query_data();
|
933
912
|
}
|
913
|
+
|
914
|
+
if (e.count && !e.filter_from) {
|
915
|
+
// count tables
|
916
|
+
return await count_tables();
|
917
|
+
}
|
918
|
+
|
934
919
|
return await runtime_get_mango_data();
|
935
920
|
};
|
936
921
|
|
@@ -1026,689 +1011,6 @@ exports.read = async (params, setup_doc, resolve, reject) => {
|
|
1026
1011
|
}
|
1027
1012
|
|
1028
1013
|
return resolve(ret.data);
|
1029
|
-
|
1030
|
-
// var key;
|
1031
|
-
|
1032
|
-
// const runtime_get_mango_data = async function () {
|
1033
|
-
// const done = async function (body) {
|
1034
|
-
// const raw_data = async function () {
|
1035
|
-
// var rows = [];
|
1036
|
-
|
1037
|
-
// for await (var val of body.docs) {
|
1038
|
-
// var data = {};
|
1039
|
-
// if (e.fields) {
|
1040
|
-
// for await (const [key2, val2] of Object.entries(
|
1041
|
-
// typeof e.fields === "string" ? e.fields.split(",") : e.fields
|
1042
|
-
// )) {
|
1043
|
-
// if (val.udfData) {
|
1044
|
-
// data[val2] = val["udfData"]["data"][val2];
|
1045
|
-
// } else {
|
1046
|
-
// data[val2] = null;
|
1047
|
-
// }
|
1048
|
-
// }
|
1049
|
-
// } else {
|
1050
|
-
// for await (const [key2, val2] of Object.entries(
|
1051
|
-
// table_obj.tableFields
|
1052
|
-
// )) {
|
1053
|
-
// if (val.udfData) {
|
1054
|
-
// data[val2.data.field_id] =
|
1055
|
-
// val["udfData"]["data"][val2.data.field_id];
|
1056
|
-
// } else {
|
1057
|
-
// data[val2.data.field_id] = null;
|
1058
|
-
// }
|
1059
|
-
// }
|
1060
|
-
// }
|
1061
|
-
|
1062
|
-
// rows.push({
|
1063
|
-
// id: val._id,
|
1064
|
-
// value: {
|
1065
|
-
// udfData: { data: data },
|
1066
|
-
// _id: val._id,
|
1067
|
-
// _rev: val._rev,
|
1068
|
-
// },
|
1069
|
-
// });
|
1070
|
-
// }
|
1071
|
-
|
1072
|
-
// return resolve({ rows: rows, total_rows: rows.length });
|
1073
|
-
// };
|
1074
|
-
// const count_data = async function () {
|
1075
|
-
// var rows = [];
|
1076
|
-
// var keys_obj = {};
|
1077
|
-
// const table_index = find_item_by_key_root(
|
1078
|
-
// table_obj.tableIndexes,
|
1079
|
-
// "id",
|
1080
|
-
// e.indexId
|
1081
|
-
// );
|
1082
|
-
// if (e.indexId && table_index) {
|
1083
|
-
// var index_keys = table_index.data.keys;
|
1084
|
-
// var index_id = e.indexId;
|
1085
|
-
|
1086
|
-
// for await (var val of body.docs) {
|
1087
|
-
// var data = {};
|
1088
|
-
// const _tableFieldsObj = find_item_by_key(
|
1089
|
-
// table_obj.tableFields,
|
1090
|
-
// "field_id",
|
1091
|
-
// e.field_id
|
1092
|
-
// );
|
1093
|
-
|
1094
|
-
// for await (const [key2, val2] of Object.entries(
|
1095
|
-
// table_obj.tableFields
|
1096
|
-
// )) {
|
1097
|
-
// data[val2.data.field_id] =
|
1098
|
-
// val["udfData"]["data"][val2.data.field_id];
|
1099
|
-
// }
|
1100
|
-
|
1101
|
-
// var key_arr = [];
|
1102
|
-
|
1103
|
-
// for await (const [key_idx, key_name] of Object.entries(
|
1104
|
-
// index_keys
|
1105
|
-
// )) {
|
1106
|
-
// key_arr.push(data[key_name]);
|
1107
|
-
// }
|
1108
|
-
// keys_obj[key_arr]++;
|
1109
|
-
// }
|
1110
|
-
|
1111
|
-
// for await (const [key_arr, key_count] of Object.entries(keys_obj)) {
|
1112
|
-
// rows.push({
|
1113
|
-
// key: [e.key, index_id, key_arr],
|
1114
|
-
// value: body.docs.length,
|
1115
|
-
// });
|
1116
|
-
// }
|
1117
|
-
// } else {
|
1118
|
-
// // no index
|
1119
|
-
// rows.push({ key: "", value: body.docs.length });
|
1120
|
-
// }
|
1121
|
-
// return resolve({ rows: rows, total_rows: rows.length });
|
1122
|
-
// };
|
1123
|
-
|
1124
|
-
// const totals = async function () {
|
1125
|
-
// const median = (arr) => {
|
1126
|
-
// const mid = Math.floor(arr.length / 2),
|
1127
|
-
// nums = [...arr].sort((a, b) => a - b);
|
1128
|
-
// return arr.length % 2 !== 0
|
1129
|
-
// ? nums[mid]
|
1130
|
-
// : (nums[mid - 1] + nums[mid]) / 2;
|
1131
|
-
// };
|
1132
|
-
|
1133
|
-
// var total_fields_info = JSON.parse(e.total_fields_info);
|
1134
|
-
// var totals_prop = {};
|
1135
|
-
// var totals_obj = {};
|
1136
|
-
// var totals_counts = {};
|
1137
|
-
// var totals_arr = {};
|
1138
|
-
// var totals_sums = {};
|
1139
|
-
// var totals_group_obj = {};
|
1140
|
-
|
1141
|
-
// for await (const [key, val] of Object.entries(total_fields_info)) {
|
1142
|
-
// totals_counts[val.field_id] = 0;
|
1143
|
-
// totals_prop[val.field_id] = val;
|
1144
|
-
// totals_arr[val.field_id] = [];
|
1145
|
-
// totals_sums[val.field_id] = 0;
|
1146
|
-
// totals_group_obj[val.field_id] = {};
|
1147
|
-
// }
|
1148
|
-
|
1149
|
-
// for await (var row_data of body.docs) {
|
1150
|
-
// for await (const [key, val] of Object.entries(
|
1151
|
-
// row_data.udfData.data
|
1152
|
-
// )) {
|
1153
|
-
// var field_id = key;
|
1154
|
-
// var value = val;
|
1155
|
-
// totals_counts[field_id]++;
|
1156
|
-
|
1157
|
-
// switch (totals_prop[field_id].sum_type) {
|
1158
|
-
// case "sum":
|
1159
|
-
// if (typeof totals_obj[field_id] === "undefined") {
|
1160
|
-
// totals_obj[field_id] = value;
|
1161
|
-
// } else {
|
1162
|
-
// totals_obj[field_id] += value;
|
1163
|
-
// }
|
1164
|
-
// break;
|
1165
|
-
|
1166
|
-
// case "average":
|
1167
|
-
// totals_sums[field_id] += value;
|
1168
|
-
// totals_obj[field_id] =
|
1169
|
-
// totals_sums[field_id] / totals_counts[field_id];
|
1170
|
-
// break;
|
1171
|
-
|
1172
|
-
// case "median":
|
1173
|
-
// if (!totals_arr[field_id].includes(value)) {
|
1174
|
-
// totals_arr[field_id].push(value);
|
1175
|
-
// }
|
1176
|
-
// totals_obj[field_id] = median(totals_arr[field_id]);
|
1177
|
-
// break;
|
1178
|
-
// case "min":
|
1179
|
-
// if (
|
1180
|
-
// typeof totals_obj[field_id] === "undefined" ||
|
1181
|
-
// value < totals_obj[field_id]
|
1182
|
-
// ) {
|
1183
|
-
// totals_obj[field_id] = value;
|
1184
|
-
// }
|
1185
|
-
// break;
|
1186
|
-
// case "max":
|
1187
|
-
// if (
|
1188
|
-
// typeof totals_obj[field_id] === "undefined" ||
|
1189
|
-
// value > totals_obj[field_id]
|
1190
|
-
// ) {
|
1191
|
-
// totals_obj[field_id] = value;
|
1192
|
-
// }
|
1193
|
-
// break;
|
1194
|
-
// case "count":
|
1195
|
-
// if (typeof totals_obj[field_id] === "undefined") {
|
1196
|
-
// totals_obj[field_id] = 1;
|
1197
|
-
// } else {
|
1198
|
-
// totals_obj[field_id]++;
|
1199
|
-
// }
|
1200
|
-
// break;
|
1201
|
-
// case "distinct":
|
1202
|
-
// if (!totals_arr[field_id].includes(value)) {
|
1203
|
-
// totals_arr[field_id].push(value);
|
1204
|
-
// }
|
1205
|
-
// totals_obj[field_id] = totals_arr[field_id].length;
|
1206
|
-
// break;
|
1207
|
-
|
1208
|
-
// case "group":
|
1209
|
-
// if (!totals_obj[field_id]) {
|
1210
|
-
// totals_obj[field_id] = {};
|
1211
|
-
// }
|
1212
|
-
|
1213
|
-
// if (typeof totals_obj[field_id][value] === "undefined") {
|
1214
|
-
// totals_obj[field_id][value] = 1; //value;
|
1215
|
-
// } else {
|
1216
|
-
// totals_obj[field_id][value]++; //+= value;
|
1217
|
-
// }
|
1218
|
-
|
1219
|
-
// break;
|
1220
|
-
// default:
|
1221
|
-
// totals_obj[field_id] = null;
|
1222
|
-
// }
|
1223
|
-
// }
|
1224
|
-
// }
|
1225
|
-
// return resolve(totals_obj);
|
1226
|
-
// };
|
1227
|
-
// if (e.count === "true" || e.count === true) {
|
1228
|
-
// return count_data();
|
1229
|
-
// }
|
1230
|
-
// if (e.total_fields_info) {
|
1231
|
-
// return totals();
|
1232
|
-
// }
|
1233
|
-
// return raw_data();
|
1234
|
-
// };
|
1235
|
-
|
1236
|
-
// var limit = 99999;
|
1237
|
-
// var skip = 0;
|
1238
|
-
|
1239
|
-
// if (e.limit) {
|
1240
|
-
// limit = parseInt(e.limit);
|
1241
|
-
// }
|
1242
|
-
|
1243
|
-
// if (e.skip) {
|
1244
|
-
// skip = JSON.parse(e.skip);
|
1245
|
-
// }
|
1246
|
-
|
1247
|
-
// var fields = [];
|
1248
|
-
// if (e.fields) {
|
1249
|
-
// for await (const [key, val] of Object.entries(
|
1250
|
-
// typeof e.fields === "string" ? e.fields.split(",") : e.fields
|
1251
|
-
// )) {
|
1252
|
-
// fields.push(val);
|
1253
|
-
// }
|
1254
|
-
// } else {
|
1255
|
-
// for await (const [key, val] of Object.entries(table_obj.tableFields)) {
|
1256
|
-
// fields.push(val.data.field_id);
|
1257
|
-
// }
|
1258
|
-
// }
|
1259
|
-
|
1260
|
-
// var data = {};
|
1261
|
-
// var from = e.filter_from ? JSON.parse(e.filter_from) : {};
|
1262
|
-
// var to = e.filter_to ? JSON.parse(e.filter_to) : {};
|
1263
|
-
// var sort = [];
|
1264
|
-
// for await (const [key, val] of Object.entries(from)) {
|
1265
|
-
// var field_name = key;
|
1266
|
-
|
1267
|
-
// sort.push(field_name);
|
1268
|
-
|
1269
|
-
// if (val === to[key]) {
|
1270
|
-
// data[field_name] = val;
|
1271
|
-
// } else {
|
1272
|
-
// data[field_name] = { $gte: val };
|
1273
|
-
// }
|
1274
|
-
// }
|
1275
|
-
|
1276
|
-
// for await (const [key, val] of Object.entries(to)) {
|
1277
|
-
// var field_name = key;
|
1278
|
-
|
1279
|
-
// if (val !== from[key]) {
|
1280
|
-
// data[field_name]["$lte"] = val;
|
1281
|
-
// }
|
1282
|
-
// }
|
1283
|
-
|
1284
|
-
// var selector = {};
|
1285
|
-
|
1286
|
-
// if (from && !_.isEmpty(from)) {
|
1287
|
-
// selector = data;
|
1288
|
-
// }
|
1289
|
-
|
1290
|
-
// var opt = {
|
1291
|
-
// selector: selector,
|
1292
|
-
// limit: limit,
|
1293
|
-
// skip: skip,
|
1294
|
-
// fields: fields,
|
1295
|
-
// };
|
1296
|
-
|
1297
|
-
// if (sort.length) {
|
1298
|
-
// opt.sort = sort;
|
1299
|
-
// }
|
1300
|
-
|
1301
|
-
// if (e.sort_fields && JSON.parse(e.sort_fields).length) {
|
1302
|
-
// opt.sort = JSON.parse(e.sort_fields);
|
1303
|
-
// if (opt.sort) {
|
1304
|
-
// for await (const [key, val] of Object.entries(opt.sort)) {
|
1305
|
-
// var field_name = val.colId;
|
1306
|
-
// opt.sort[key] = {
|
1307
|
-
// ["udfData.data." + field_name]: val.sort,
|
1308
|
-
// };
|
1309
|
-
// }
|
1310
|
-
// }
|
1311
|
-
// }
|
1312
|
-
|
1313
|
-
// if (e.grid_filter_info) {
|
1314
|
-
// for await (const [key, val] of Object.entries(
|
1315
|
-
// JSON.parse(e.grid_filter_info)
|
1316
|
-
// )) {
|
1317
|
-
// var field_name = key;
|
1318
|
-
// var condition = "$and";
|
1319
|
-
// const make_selector = function (val) {
|
1320
|
-
// var value = "";
|
1321
|
-
// var operator = "";
|
1322
|
-
// var value_to = "";
|
1323
|
-
// var operator_to = "";
|
1324
|
-
|
1325
|
-
// if (val.filterType === "date") {
|
1326
|
-
// var date = val.dateFrom.substr(0, 10);
|
1327
|
-
// switch (val.type) {
|
1328
|
-
// case "equals":
|
1329
|
-
// operator = "$regex";
|
1330
|
-
// value = `^${date}`;
|
1331
|
-
// break;
|
1332
|
-
|
1333
|
-
// case "greaterThan":
|
1334
|
-
// operator = "$gt";
|
1335
|
-
// value = `${date}`;
|
1336
|
-
// break;
|
1337
|
-
|
1338
|
-
// case "lessThan":
|
1339
|
-
// operator = "$lt";
|
1340
|
-
// value = `${date}`;
|
1341
|
-
// break;
|
1342
|
-
|
1343
|
-
// case "blank":
|
1344
|
-
// operator = "$eq";
|
1345
|
-
// value = "";
|
1346
|
-
// break;
|
1347
|
-
|
1348
|
-
// case "inRange":
|
1349
|
-
// operator = "$gte";
|
1350
|
-
// value = date;
|
1351
|
-
// operator_to = "$lte";
|
1352
|
-
// value_to = val.dateTo.substr(0, 10);
|
1353
|
-
// break;
|
1354
|
-
|
1355
|
-
// case "notEqual":
|
1356
|
-
// operator = "$regex";
|
1357
|
-
// value = `^((?!${date}).)*$`;
|
1358
|
-
// break;
|
1359
|
-
|
1360
|
-
// case "notBlank":
|
1361
|
-
// operator = "$ne";
|
1362
|
-
// value = "";
|
1363
|
-
// break;
|
1364
|
-
|
1365
|
-
// default:
|
1366
|
-
// operator = "$regex";
|
1367
|
-
// value = `^${date}`;
|
1368
|
-
// }
|
1369
|
-
// }
|
1370
|
-
|
1371
|
-
// if (val.filterType === "string") {
|
1372
|
-
// switch (val.type) {
|
1373
|
-
// case "contains":
|
1374
|
-
// operator = "$regex";
|
1375
|
-
// value = `${val.filter}`;
|
1376
|
-
// break;
|
1377
|
-
|
1378
|
-
// case "notContains":
|
1379
|
-
// operator = "$regex";
|
1380
|
-
// value = `^((?!${val.filter}).)*$`;
|
1381
|
-
// break;
|
1382
|
-
|
1383
|
-
// case "equals":
|
1384
|
-
// operator = "$eq";
|
1385
|
-
// value = `${val.filter}`;
|
1386
|
-
// break;
|
1387
|
-
|
1388
|
-
// case "notEqual":
|
1389
|
-
// operator = "$ne";
|
1390
|
-
// value = `${val.filter}`;
|
1391
|
-
// break;
|
1392
|
-
|
1393
|
-
// case "startsWith":
|
1394
|
-
// operator = "$regex";
|
1395
|
-
// value = `^${val.filter}`;
|
1396
|
-
// break;
|
1397
|
-
|
1398
|
-
// case "endsWith":
|
1399
|
-
// operator = "$regex";
|
1400
|
-
// value = `${val.filter}$`;
|
1401
|
-
// break;
|
1402
|
-
|
1403
|
-
// case "blank":
|
1404
|
-
// operator = "$eq";
|
1405
|
-
// value = "";
|
1406
|
-
// break;
|
1407
|
-
|
1408
|
-
// case "notBlank":
|
1409
|
-
// operator = "$ne";
|
1410
|
-
// value = "";
|
1411
|
-
// break;
|
1412
|
-
|
1413
|
-
// default:
|
1414
|
-
// value = "^" + val.filter;
|
1415
|
-
// }
|
1416
|
-
// }
|
1417
|
-
|
1418
|
-
// if (val.filterType === "number") {
|
1419
|
-
// switch (val.type) {
|
1420
|
-
// case "equals":
|
1421
|
-
// operator = "$eq";
|
1422
|
-
// value = val.filter;
|
1423
|
-
// break;
|
1424
|
-
|
1425
|
-
// case "notEqual":
|
1426
|
-
// operator = "$ne";
|
1427
|
-
// value = val.filter;
|
1428
|
-
// break;
|
1429
|
-
|
1430
|
-
// case "lessThanOrEqual":
|
1431
|
-
// operator = "$lte";
|
1432
|
-
// value = val.filter;
|
1433
|
-
// break;
|
1434
|
-
|
1435
|
-
// case "greaterThanOrEqual":
|
1436
|
-
// operator = "$gte";
|
1437
|
-
// value = val.filter;
|
1438
|
-
// break;
|
1439
|
-
|
1440
|
-
// case "lessThan":
|
1441
|
-
// operator = "$lt";
|
1442
|
-
// value = val.filter;
|
1443
|
-
// break;
|
1444
|
-
|
1445
|
-
// case "greaterThan":
|
1446
|
-
// operator = "$gt";
|
1447
|
-
// value = val.filter;
|
1448
|
-
// break;
|
1449
|
-
|
1450
|
-
// case "blank":
|
1451
|
-
// operator = "$eq";
|
1452
|
-
// value = 0;
|
1453
|
-
// break;
|
1454
|
-
|
1455
|
-
// case "notBlank":
|
1456
|
-
// operator = "$ne";
|
1457
|
-
// value = 0;
|
1458
|
-
// break;
|
1459
|
-
|
1460
|
-
// case "inRange":
|
1461
|
-
// operator = "$gte";
|
1462
|
-
// value = val.filter;
|
1463
|
-
// operator_to = "$lte";
|
1464
|
-
// value_to = val.filterTo;
|
1465
|
-
// break;
|
1466
|
-
|
1467
|
-
// default:
|
1468
|
-
// operator = "$eq";
|
1469
|
-
// value = val.filter;
|
1470
|
-
// }
|
1471
|
-
// }
|
1472
|
-
// if (!opt.selector[field_name]) {
|
1473
|
-
// opt.selector[field_name] = {};
|
1474
|
-
// }
|
1475
|
-
// if (!opt.selector[field_name][condition]) {
|
1476
|
-
// opt.selector[field_name][condition] = [];
|
1477
|
-
// }
|
1478
|
-
// opt.selector[field_name][condition].push({
|
1479
|
-
// [operator]: value,
|
1480
|
-
// });
|
1481
|
-
|
1482
|
-
// if (operator_to) {
|
1483
|
-
// opt.selector[field_name][condition].push({
|
1484
|
-
// [operator_to]: value_to,
|
1485
|
-
// });
|
1486
|
-
// }
|
1487
|
-
// };
|
1488
|
-
|
1489
|
-
// if (!val.condition1) {
|
1490
|
-
// make_selector(val);
|
1491
|
-
// } else {
|
1492
|
-
// condition = "$" + val.operator.toLowerCase();
|
1493
|
-
// make_selector(val.condition1);
|
1494
|
-
// make_selector(val.condition2);
|
1495
|
-
// }
|
1496
|
-
// }
|
1497
|
-
// }
|
1498
|
-
|
1499
|
-
// if (e.total_fields_info) {
|
1500
|
-
// fields = [];
|
1501
|
-
// for await (const [key, val] of Object.entries(
|
1502
|
-
// JSON.parse(e.total_fields_info)
|
1503
|
-
// )) {
|
1504
|
-
// var field_name = val.field_id;
|
1505
|
-
|
1506
|
-
// fields.push(field_name);
|
1507
|
-
// }
|
1508
|
-
// opt.fields = fields;
|
1509
|
-
// }
|
1510
|
-
// // fix names
|
1511
|
-
|
1512
|
-
// for await (const [key, val] of Object.entries(opt.fields)) {
|
1513
|
-
// opt.fields[key] = "udfData.data." + val;
|
1514
|
-
// }
|
1515
|
-
// if (!e.sort_fields || !JSON.parse(e.sort_fields).length) {
|
1516
|
-
// // added 2021 09 10
|
1517
|
-
// if (opt.sort) {
|
1518
|
-
// for await (const [key, val] of Object.entries(opt.sort)) {
|
1519
|
-
// opt.sort[key] = {
|
1520
|
-
// ["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
|
1521
|
-
// };
|
1522
|
-
// }
|
1523
|
-
// }
|
1524
|
-
// }
|
1525
|
-
|
1526
|
-
// var selector_new = {};
|
1527
|
-
|
1528
|
-
// for await (const [key, val] of Object.entries(opt.selector)) {
|
1529
|
-
// selector_new["udfData.data." + key] = val;
|
1530
|
-
// }
|
1531
|
-
|
1532
|
-
// if (e.viewDbQuery) {
|
1533
|
-
// for await (const [key, val] of Object.entries(table_obj.tableFields)) {
|
1534
|
-
// if (e.viewDbQuery.includes(val.id)) {
|
1535
|
-
// const replacer = new RegExp(val.id, "g");
|
1536
|
-
// e.viewDbQuery = e.viewDbQuery.replace(
|
1537
|
-
// replacer,
|
1538
|
-
// "udfData.data." + val.data.field_id
|
1539
|
-
// );
|
1540
|
-
// }
|
1541
|
-
// }
|
1542
|
-
|
1543
|
-
// let viewDbQuery = JSON.parse(e.viewDbQuery.replace(/\\/g, ""));
|
1544
|
-
|
1545
|
-
// for await (const [key, val] of Object.entries(viewDbQuery)) {
|
1546
|
-
// selector_new[key] = val;
|
1547
|
-
// }
|
1548
|
-
// }
|
1549
|
-
|
1550
|
-
// opt.selector = selector_new;
|
1551
|
-
// opt.selector["udfData.udffileid"] = e.table_id;
|
1552
|
-
// opt.selector.stat = e.archived ? 4 : 3;
|
1553
|
-
|
1554
|
-
// opt.fields.push("_id");
|
1555
|
-
// opt.fields.push("_rev");
|
1556
|
-
|
1557
|
-
// // xuda
|
1558
|
-
// var cache_string = JSON.stringify(opt);
|
1559
|
-
|
1560
|
-
// // if (__.CACHE_QUERY_REQ?.[app_id_reference]?.[e.table_id]?.[cache_string]) {
|
1561
|
-
// // return await done(
|
1562
|
-
// // __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string].doc
|
1563
|
-
// // );
|
1564
|
-
// // }
|
1565
|
-
// debugger;
|
1566
|
-
// try {
|
1567
|
-
// try {
|
1568
|
-
// const doc = await db.find(opt);
|
1569
|
-
// if (!__.CACHE_QUERY_REQ[app_id_reference]) {
|
1570
|
-
// __.CACHE_QUERY_REQ[app_id_reference] = {};
|
1571
|
-
// }
|
1572
|
-
|
1573
|
-
// if (!__.CACHE_QUERY_REQ[app_id_reference][e.table_id]) {
|
1574
|
-
// __.CACHE_QUERY_REQ[app_id_reference][e.table_id] = {};
|
1575
|
-
// }
|
1576
|
-
|
1577
|
-
// __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string] = {
|
1578
|
-
// doc: doc,
|
1579
|
-
// ts: Date.now(),
|
1580
|
-
// };
|
1581
|
-
|
1582
|
-
// if (doc?.warning?.includes("No matching index found")) {
|
1583
|
-
// const index_name = `index_${e.table_id}_${new Date()
|
1584
|
-
// .valueOf()
|
1585
|
-
// .toString()}`;
|
1586
|
-
// var index = [];
|
1587
|
-
|
1588
|
-
// for await (const [key, val] of Object.entries(opt.selector)) {
|
1589
|
-
// index.push(key);
|
1590
|
-
// }
|
1591
|
-
// mango_index_obj = {
|
1592
|
-
// index: {
|
1593
|
-
// fields: index,
|
1594
|
-
// },
|
1595
|
-
// name: index_name,
|
1596
|
-
// ddoc: `mango_index_table_${e.table_id}`,
|
1597
|
-
// };
|
1598
|
-
// db.createIndex(mango_index_obj).then((result) => {
|
1599
|
-
// console.log(result);
|
1600
|
-
// });
|
1601
|
-
// }
|
1602
|
-
// return await done(doc);
|
1603
|
-
// } catch (err) {
|
1604
|
-
// if (err.error === "no_usable_index") {
|
1605
|
-
// const index_name = `index_${e.table_id}_${new Date()
|
1606
|
-
// .valueOf()
|
1607
|
-
// .toString()}`;
|
1608
|
-
|
1609
|
-
// mango_index_obj = {
|
1610
|
-
// index: {
|
1611
|
-
// fields: opt.sort,
|
1612
|
-
// },
|
1613
|
-
// name: index_name,
|
1614
|
-
// ddoc: `mango_index_table_${e.table_id}`,
|
1615
|
-
// };
|
1616
|
-
|
1617
|
-
// try {
|
1618
|
-
// const result = await db.createIndex(mango_index_obj);
|
1619
|
-
|
1620
|
-
// const doc = await db.find(opt);
|
1621
|
-
// return await done(doc);
|
1622
|
-
// } catch (error) {
|
1623
|
-
// return reject(error);
|
1624
|
-
// }
|
1625
|
-
// } else {
|
1626
|
-
// return reject(err.message);
|
1627
|
-
// }
|
1628
|
-
// }
|
1629
|
-
// } catch (err) {
|
1630
|
-
// return reject(err.error);
|
1631
|
-
// }
|
1632
|
-
// };
|
1633
|
-
|
1634
|
-
// const runtime_get_query_data = async function () {
|
1635
|
-
// var limit = 99999;
|
1636
|
-
// var skip = 0;
|
1637
|
-
|
1638
|
-
// if (e.limit) {
|
1639
|
-
// limit = e.limitP;
|
1640
|
-
// }
|
1641
|
-
|
1642
|
-
// if (e.skipP) {
|
1643
|
-
// skip = e.skipP;
|
1644
|
-
// }
|
1645
|
-
|
1646
|
-
// var desc = e.desc === "true" ? true : false;
|
1647
|
-
|
1648
|
-
// var opt;
|
1649
|
-
// if (key) {
|
1650
|
-
// opt = {
|
1651
|
-
// key: key,
|
1652
|
-
// include_docs: !e.ids && view !== "db_index_reduce",
|
1653
|
-
// limit: limit,
|
1654
|
-
// skip: skip,
|
1655
|
-
// };
|
1656
|
-
// } else {
|
1657
|
-
// if (e.reduce == "true") {
|
1658
|
-
// opt = {
|
1659
|
-
// startkey: e.startkey ? JSON.parse(e.startkey) : "",
|
1660
|
-
// endkey: e.endkey ? JSON.parse(e.endkey) : "",
|
1661
|
-
// include_docs: false,
|
1662
|
-
// reduce: true,
|
1663
|
-
// group_level: 3,
|
1664
|
-
|
1665
|
-
// descending: desc,
|
1666
|
-
// };
|
1667
|
-
// } else {
|
1668
|
-
// opt = {
|
1669
|
-
// startkey: e.startkey ? JSON.parse(e.startkey) : "",
|
1670
|
-
// endkey: e.endkey ? JSON.parse(e.endkey) : "",
|
1671
|
-
// include_docs: !e.ids,
|
1672
|
-
// limit: limit,
|
1673
|
-
// skip: skip,
|
1674
|
-
// descending: desc,
|
1675
|
-
// };
|
1676
|
-
// }
|
1677
|
-
// }
|
1678
|
-
|
1679
|
-
// try {
|
1680
|
-
// const body = db.view(`xuda`, view, opt);
|
1681
|
-
// if (e.reduce) {
|
1682
|
-
// return resolve(body);
|
1683
|
-
// }
|
1684
|
-
// var rows = [];
|
1685
|
-
|
1686
|
-
// for await (var val of body.rows) {
|
1687
|
-
// if (e.ids) {
|
1688
|
-
// rows.push({ id: val.id, value: val.value._id });
|
1689
|
-
// return true;
|
1690
|
-
// }
|
1691
|
-
// rows.push({
|
1692
|
-
// id: val.id,
|
1693
|
-
// value: { udfData: val.doc.udfData, _id: val.id },
|
1694
|
-
// });
|
1695
|
-
// }
|
1696
|
-
// return resolve({ rows: rows, total_rows: rows.length });
|
1697
|
-
// } catch (error) {
|
1698
|
-
// return reject(error);
|
1699
|
-
// }
|
1700
|
-
// };
|
1701
|
-
|
1702
|
-
// if (e.reduce && JSON.parse(e.reduce)) {
|
1703
|
-
// view = "db_index_reduce";
|
1704
|
-
// return await runtime_get_query_data();
|
1705
|
-
// }
|
1706
|
-
// if (e.view === "db_index") {
|
1707
|
-
// key = e.key;
|
1708
|
-
// view = e.view;
|
1709
|
-
// return await runtime_get_query_data();
|
1710
|
-
// }
|
1711
|
-
// return await runtime_get_mango_data();
|
1712
1014
|
};
|
1713
1015
|
exports.update = async (params, setup_doc, resolve, reject) => {
|
1714
1016
|
const e = params.e;
|