@xuda.io/xuda-dbs-plugin-xuda 1.0.50 → 1.0.52

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 (2) hide show
  1. package/package.json +1 -1
  2. package/server.js +727 -688
package/server.js CHANGED
@@ -5,7 +5,7 @@ const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
5
5
  if (!len) {
6
6
  return { code: -11, data: "table must have primary index" };
7
7
  }
8
- var found_unique;
8
+ var found_unique = undefined;
9
9
  var ret = { code: 1, data: "ok" };
10
10
 
11
11
  for await (var val of docP.udfIndex) {
@@ -187,7 +187,7 @@ const get_cast_val = async function (source, attributeP, typeP, valP) {
187
187
  );
188
188
  };
189
189
  const query_db = async function (e, db, app_id_reference, table_obj) {
190
- var key;
190
+ var key = undefined;
191
191
 
192
192
  const runtime_get_mango_data = async function () {
193
193
  const done = async function (body) {
@@ -805,7 +805,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
805
805
 
806
806
  var desc = e.desc === "true" ? true : false;
807
807
 
808
- var opt;
808
+ var opt = undefined;
809
809
  if (key) {
810
810
  opt = {
811
811
  key: key,
@@ -837,10 +837,24 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
837
837
  }
838
838
 
839
839
  try {
840
- const body = db.view(`xuda`, view, opt);
840
+ const body = await db.view(`xuda`, view, opt);
841
841
  if (e.reduce) {
842
- return { code: 1, data: body };
842
+ let rows = [];
843
+
844
+ $.each(data.rows, (key, val) => {
845
+ const arr = val.key[2];
846
+ console.log(arr);
847
+ var obj = {};
848
+ $.each(arr, (arr_key, arr_val) => {
849
+ obj[sort[arr_key]] = arr_val; //val.value;
850
+ });
851
+ obj["REDUCE_VALUE"] = val.value;
852
+
853
+ rows.push({ id: Date.now(), value: obj });
854
+ });
855
+ return { code: 1, data: rows };
843
856
  }
857
+
844
858
  var rows = [];
845
859
 
846
860
  for await (var val of body.rows) {
@@ -853,6 +867,31 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
853
867
  value: { udfData: val.doc.udfData, _id: val.id },
854
868
  });
855
869
  }
870
+
871
+ // const reduce_rows = () => {
872
+ // const reduce_obj = body.docs.reduce(
873
+ // (params, data) => {
874
+ // const fx = (val, idx) => {
875
+ // const group_by_field = data[params.sort[idx]];
876
+
877
+ // if (params.sort[idx + 1]) {
878
+ // val[group_by_field] = val[group_by_field] ?? {};
879
+ // val[group_by_field][data[params.sort[idx + 1]]] = 0;
880
+ // idx++;
881
+ // fx(val[group_by_field], idx);
882
+ // return;
883
+ // }
884
+
885
+ // val[group_by_field] = val[group_by_field] ?? 0;
886
+ // val[group_by_field] += 1;
887
+ // };
888
+ // fx(params.group, 0);
889
+
890
+ // return params;
891
+ // },
892
+ // { sort: opt.sort, group: {} }
893
+ // );}
894
+
856
895
  return { code: 1, data: { rows: rows, total_rows: rows.length } };
857
896
  } catch (error) {
858
897
  return { code: -1, data: error };
@@ -964,688 +1003,688 @@ exports.read = async (params, setup_doc, resolve, reject) => {
964
1003
 
965
1004
  return resolve(ret.data);
966
1005
 
967
- var key;
968
-
969
- const runtime_get_mango_data = async function () {
970
- const done = async function (body) {
971
- const raw_data = async function () {
972
- var rows = [];
973
-
974
- for await (var val of body.docs) {
975
- var data = {};
976
- if (e.fields) {
977
- for await (const [key2, val2] of Object.entries(
978
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
979
- )) {
980
- if (val.udfData) {
981
- data[val2] = val["udfData"]["data"][val2];
982
- } else {
983
- data[val2] = null;
984
- }
985
- }
986
- } else {
987
- for await (const [key2, val2] of Object.entries(
988
- table_obj.tableFields
989
- )) {
990
- if (val.udfData) {
991
- data[val2.data.field_id] =
992
- val["udfData"]["data"][val2.data.field_id];
993
- } else {
994
- data[val2.data.field_id] = null;
995
- }
996
- }
997
- }
998
-
999
- rows.push({
1000
- id: val._id,
1001
- value: {
1002
- udfData: { data: data },
1003
- _id: val._id,
1004
- _rev: val._rev,
1005
- },
1006
- });
1007
- }
1008
-
1009
- return resolve({ rows: rows, total_rows: rows.length });
1010
- };
1011
- const count_data = async function () {
1012
- var rows = [];
1013
- var keys_obj = {};
1014
- const table_index = find_item_by_key_root(
1015
- table_obj.tableIndexes,
1016
- "id",
1017
- e.indexId
1018
- );
1019
- if (e.indexId && table_index) {
1020
- var index_keys = table_index.data.keys;
1021
- var index_id = e.indexId;
1022
-
1023
- for await (var val of body.docs) {
1024
- var data = {};
1025
- const _tableFieldsObj = find_item_by_key(
1026
- table_obj.tableFields,
1027
- "field_id",
1028
- e.field_id
1029
- );
1030
-
1031
- for await (const [key2, val2] of Object.entries(
1032
- table_obj.tableFields
1033
- )) {
1034
- data[val2.data.field_id] =
1035
- val["udfData"]["data"][val2.data.field_id];
1036
- }
1037
-
1038
- var key_arr = [];
1039
-
1040
- for await (const [key_idx, key_name] of Object.entries(
1041
- index_keys
1042
- )) {
1043
- key_arr.push(data[key_name]);
1044
- }
1045
- keys_obj[key_arr]++;
1046
- }
1047
-
1048
- for await (const [key_arr, key_count] of Object.entries(keys_obj)) {
1049
- rows.push({
1050
- key: [e.key, index_id, key_arr],
1051
- value: body.docs.length,
1052
- });
1053
- }
1054
- } else {
1055
- // no index
1056
- rows.push({ key: "", value: body.docs.length });
1057
- }
1058
- return resolve({ rows: rows, total_rows: rows.length });
1059
- };
1060
-
1061
- const totals = async function () {
1062
- const median = (arr) => {
1063
- const mid = Math.floor(arr.length / 2),
1064
- nums = [...arr].sort((a, b) => a - b);
1065
- return arr.length % 2 !== 0
1066
- ? nums[mid]
1067
- : (nums[mid - 1] + nums[mid]) / 2;
1068
- };
1069
-
1070
- var total_fields_info = JSON.parse(e.total_fields_info);
1071
- var totals_prop = {};
1072
- var totals_obj = {};
1073
- var totals_counts = {};
1074
- var totals_arr = {};
1075
- var totals_sums = {};
1076
- var totals_group_obj = {};
1077
-
1078
- for await (const [key, val] of Object.entries(total_fields_info)) {
1079
- totals_counts[val.field_id] = 0;
1080
- totals_prop[val.field_id] = val;
1081
- totals_arr[val.field_id] = [];
1082
- totals_sums[val.field_id] = 0;
1083
- totals_group_obj[val.field_id] = {};
1084
- }
1085
-
1086
- for await (var row_data of body.docs) {
1087
- for await (const [key, val] of Object.entries(
1088
- row_data.udfData.data
1089
- )) {
1090
- var field_id = key;
1091
- var value = val;
1092
- totals_counts[field_id]++;
1093
-
1094
- switch (totals_prop[field_id].sum_type) {
1095
- case "sum":
1096
- if (typeof totals_obj[field_id] === "undefined") {
1097
- totals_obj[field_id] = value;
1098
- } else {
1099
- totals_obj[field_id] += value;
1100
- }
1101
- break;
1102
-
1103
- case "average":
1104
- totals_sums[field_id] += value;
1105
- totals_obj[field_id] =
1106
- totals_sums[field_id] / totals_counts[field_id];
1107
- break;
1108
-
1109
- case "median":
1110
- if (!totals_arr[field_id].includes(value)) {
1111
- totals_arr[field_id].push(value);
1112
- }
1113
- totals_obj[field_id] = median(totals_arr[field_id]);
1114
- break;
1115
- case "min":
1116
- if (
1117
- typeof totals_obj[field_id] === "undefined" ||
1118
- value < totals_obj[field_id]
1119
- ) {
1120
- totals_obj[field_id] = value;
1121
- }
1122
- break;
1123
- case "max":
1124
- if (
1125
- typeof totals_obj[field_id] === "undefined" ||
1126
- value > totals_obj[field_id]
1127
- ) {
1128
- totals_obj[field_id] = value;
1129
- }
1130
- break;
1131
- case "count":
1132
- if (typeof totals_obj[field_id] === "undefined") {
1133
- totals_obj[field_id] = 1;
1134
- } else {
1135
- totals_obj[field_id]++;
1136
- }
1137
- break;
1138
- case "distinct":
1139
- if (!totals_arr[field_id].includes(value)) {
1140
- totals_arr[field_id].push(value);
1141
- }
1142
- totals_obj[field_id] = totals_arr[field_id].length;
1143
- break;
1144
-
1145
- case "group":
1146
- if (!totals_obj[field_id]) {
1147
- totals_obj[field_id] = {};
1148
- }
1149
-
1150
- if (typeof totals_obj[field_id][value] === "undefined") {
1151
- totals_obj[field_id][value] = 1; //value;
1152
- } else {
1153
- totals_obj[field_id][value]++; //+= value;
1154
- }
1155
-
1156
- break;
1157
- default:
1158
- totals_obj[field_id] = null;
1159
- }
1160
- }
1161
- }
1162
- return resolve(totals_obj);
1163
- };
1164
- if (e.count === "true" || e.count === true) {
1165
- return count_data();
1166
- }
1167
- if (e.total_fields_info) {
1168
- return totals();
1169
- }
1170
- return raw_data();
1171
- };
1172
-
1173
- var limit = 99999;
1174
- var skip = 0;
1175
-
1176
- if (e.limit) {
1177
- limit = parseInt(e.limit);
1178
- }
1179
-
1180
- if (e.skip) {
1181
- skip = JSON.parse(e.skip);
1182
- }
1183
-
1184
- var fields = [];
1185
- if (e.fields) {
1186
- for await (const [key, val] of Object.entries(
1187
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
1188
- )) {
1189
- fields.push(val);
1190
- }
1191
- } else {
1192
- for await (const [key, val] of Object.entries(table_obj.tableFields)) {
1193
- fields.push(val.data.field_id);
1194
- }
1195
- }
1196
-
1197
- var data = {};
1198
- var from = e.filter_from ? JSON.parse(e.filter_from) : {};
1199
- var to = e.filter_to ? JSON.parse(e.filter_to) : {};
1200
- var sort = [];
1201
- for await (const [key, val] of Object.entries(from)) {
1202
- var field_name = key;
1203
-
1204
- sort.push(field_name);
1205
-
1206
- if (val === to[key]) {
1207
- data[field_name] = val;
1208
- } else {
1209
- data[field_name] = { $gte: val };
1210
- }
1211
- }
1212
-
1213
- for await (const [key, val] of Object.entries(to)) {
1214
- var field_name = key;
1215
-
1216
- if (val !== from[key]) {
1217
- data[field_name]["$lte"] = val;
1218
- }
1219
- }
1220
-
1221
- var selector = {};
1222
-
1223
- if (from && !_.isEmpty(from)) {
1224
- selector = data;
1225
- }
1226
-
1227
- var opt = {
1228
- selector: selector,
1229
- limit: limit,
1230
- skip: skip,
1231
- fields: fields,
1232
- };
1233
-
1234
- if (sort.length) {
1235
- opt.sort = sort;
1236
- }
1237
-
1238
- if (e.sort_fields && JSON.parse(e.sort_fields).length) {
1239
- opt.sort = JSON.parse(e.sort_fields);
1240
- if (opt.sort) {
1241
- for await (const [key, val] of Object.entries(opt.sort)) {
1242
- var field_name = val.colId;
1243
- opt.sort[key] = {
1244
- ["udfData.data." + field_name]: val.sort,
1245
- };
1246
- }
1247
- }
1248
- }
1249
-
1250
- if (e.grid_filter_info) {
1251
- for await (const [key, val] of Object.entries(
1252
- JSON.parse(e.grid_filter_info)
1253
- )) {
1254
- var field_name = key;
1255
- var condition = "$and";
1256
- const make_selector = function (val) {
1257
- var value = "";
1258
- var operator = "";
1259
- var value_to = "";
1260
- var operator_to = "";
1261
-
1262
- if (val.filterType === "date") {
1263
- var date = val.dateFrom.substr(0, 10);
1264
- switch (val.type) {
1265
- case "equals":
1266
- operator = "$regex";
1267
- value = `^${date}`;
1268
- break;
1269
-
1270
- case "greaterThan":
1271
- operator = "$gt";
1272
- value = `${date}`;
1273
- break;
1274
-
1275
- case "lessThan":
1276
- operator = "$lt";
1277
- value = `${date}`;
1278
- break;
1279
-
1280
- case "blank":
1281
- operator = "$eq";
1282
- value = "";
1283
- break;
1284
-
1285
- case "inRange":
1286
- operator = "$gte";
1287
- value = date;
1288
- operator_to = "$lte";
1289
- value_to = val.dateTo.substr(0, 10);
1290
- break;
1291
-
1292
- case "notEqual":
1293
- operator = "$regex";
1294
- value = `^((?!${date}).)*$`;
1295
- break;
1296
-
1297
- case "notBlank":
1298
- operator = "$ne";
1299
- value = "";
1300
- break;
1301
-
1302
- default:
1303
- operator = "$regex";
1304
- value = `^${date}`;
1305
- }
1306
- }
1307
-
1308
- if (val.filterType === "text") {
1309
- switch (val.type) {
1310
- case "contains":
1311
- operator = "$regex";
1312
- value = `${val.filter}`;
1313
- break;
1314
-
1315
- case "notContains":
1316
- operator = "$regex";
1317
- value = `^((?!${val.filter}).)*$`;
1318
- break;
1319
-
1320
- case "equals":
1321
- operator = "$eq";
1322
- value = `${val.filter}`;
1323
- break;
1324
-
1325
- case "notEqual":
1326
- operator = "$ne";
1327
- value = `${val.filter}`;
1328
- break;
1329
-
1330
- case "startsWith":
1331
- operator = "$regex";
1332
- value = `^${val.filter}`;
1333
- break;
1334
-
1335
- case "endsWith":
1336
- operator = "$regex";
1337
- value = `${val.filter}$`;
1338
- break;
1339
-
1340
- case "blank":
1341
- operator = "$eq";
1342
- value = "";
1343
- break;
1344
-
1345
- case "notBlank":
1346
- operator = "$ne";
1347
- value = "";
1348
- break;
1349
-
1350
- default:
1351
- value = "^" + val.filter;
1352
- }
1353
- }
1354
-
1355
- if (val.filterType === "number") {
1356
- switch (val.type) {
1357
- case "equals":
1358
- operator = "$eq";
1359
- value = val.filter;
1360
- break;
1361
-
1362
- case "notEqual":
1363
- operator = "$ne";
1364
- value = val.filter;
1365
- break;
1366
-
1367
- case "lessThanOrEqual":
1368
- operator = "$lte";
1369
- value = val.filter;
1370
- break;
1371
-
1372
- case "greaterThanOrEqual":
1373
- operator = "$gte";
1374
- value = val.filter;
1375
- break;
1376
-
1377
- case "lessThan":
1378
- operator = "$lt";
1379
- value = val.filter;
1380
- break;
1381
-
1382
- case "greaterThan":
1383
- operator = "$gt";
1384
- value = val.filter;
1385
- break;
1386
-
1387
- case "blank":
1388
- operator = "$eq";
1389
- value = 0;
1390
- break;
1391
-
1392
- case "notBlank":
1393
- operator = "$ne";
1394
- value = 0;
1395
- break;
1396
-
1397
- case "inRange":
1398
- operator = "$gte";
1399
- value = val.filter;
1400
- operator_to = "$lte";
1401
- value_to = val.filterTo;
1402
- break;
1403
-
1404
- default:
1405
- operator = "$eq";
1406
- value = val.filter;
1407
- }
1408
- }
1409
- if (!opt.selector[field_name]) {
1410
- opt.selector[field_name] = {};
1411
- }
1412
- if (!opt.selector[field_name][condition]) {
1413
- opt.selector[field_name][condition] = [];
1414
- }
1415
- opt.selector[field_name][condition].push({
1416
- [operator]: value,
1417
- });
1418
-
1419
- if (operator_to) {
1420
- opt.selector[field_name][condition].push({
1421
- [operator_to]: value_to,
1422
- });
1423
- }
1424
- };
1425
-
1426
- if (!val.condition1) {
1427
- make_selector(val);
1428
- } else {
1429
- condition = "$" + val.operator.toLowerCase();
1430
- make_selector(val.condition1);
1431
- make_selector(val.condition2);
1432
- }
1433
- }
1434
- }
1435
-
1436
- if (e.total_fields_info) {
1437
- fields = [];
1438
- for await (const [key, val] of Object.entries(
1439
- JSON.parse(e.total_fields_info)
1440
- )) {
1441
- var field_name = val.field_id;
1442
-
1443
- fields.push(field_name);
1444
- }
1445
- opt.fields = fields;
1446
- }
1447
- // fix names
1448
-
1449
- for await (const [key, val] of Object.entries(opt.fields)) {
1450
- opt.fields[key] = "udfData.data." + val;
1451
- }
1452
- if (!e.sort_fields || !JSON.parse(e.sort_fields).length) {
1453
- // added 2021 09 10
1454
- if (opt.sort) {
1455
- for await (const [key, val] of Object.entries(opt.sort)) {
1456
- opt.sort[key] = {
1457
- ["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
1458
- };
1459
- }
1460
- }
1461
- }
1462
-
1463
- var selector_new = {};
1464
-
1465
- for await (const [key, val] of Object.entries(opt.selector)) {
1466
- selector_new["udfData.data." + key] = val;
1467
- }
1468
-
1469
- if (e.viewDbQuery) {
1470
- for await (const [key, val] of Object.entries(table_obj.tableFields)) {
1471
- if (e.viewDbQuery.includes(val.id)) {
1472
- const replacer = new RegExp(val.id, "g");
1473
- e.viewDbQuery = e.viewDbQuery.replace(
1474
- replacer,
1475
- "udfData.data." + val.data.field_id
1476
- );
1477
- }
1478
- }
1479
-
1480
- let viewDbQuery = JSON.parse(e.viewDbQuery.replace(/\\/g, ""));
1481
-
1482
- for await (const [key, val] of Object.entries(viewDbQuery)) {
1483
- selector_new[key] = val;
1484
- }
1485
- }
1486
-
1487
- opt.selector = selector_new;
1488
- opt.selector["udfData.udffileid"] = e.table_id;
1489
- opt.selector.stat = e.archived ? 4 : 3;
1490
-
1491
- opt.fields.push("_id");
1492
- opt.fields.push("_rev");
1493
-
1494
- // xuda
1495
- var cache_string = JSON.stringify(opt);
1496
-
1497
- // if (__.CACHE_QUERY_REQ?.[app_id_reference]?.[e.table_id]?.[cache_string]) {
1498
- // return await done(
1499
- // __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string].doc
1500
- // );
1501
- // }
1502
- debugger;
1503
- try {
1504
- try {
1505
- const doc = await db.find(opt);
1506
- if (!__.CACHE_QUERY_REQ[app_id_reference]) {
1507
- __.CACHE_QUERY_REQ[app_id_reference] = {};
1508
- }
1509
-
1510
- if (!__.CACHE_QUERY_REQ[app_id_reference][e.table_id]) {
1511
- __.CACHE_QUERY_REQ[app_id_reference][e.table_id] = {};
1512
- }
1513
-
1514
- __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string] = {
1515
- doc: doc,
1516
- ts: Date.now(),
1517
- };
1518
-
1519
- if (doc?.warning?.includes("No matching index found")) {
1520
- const index_name = `index_${e.table_id}_${new Date()
1521
- .valueOf()
1522
- .toString()}`;
1523
- var index = [];
1524
-
1525
- for await (const [key, val] of Object.entries(opt.selector)) {
1526
- index.push(key);
1527
- }
1528
- mango_index_obj = {
1529
- index: {
1530
- fields: index,
1531
- },
1532
- name: index_name,
1533
- ddoc: `mango_index_table_${e.table_id}`,
1534
- };
1535
- db.createIndex(mango_index_obj).then((result) => {
1536
- console.log(result);
1537
- });
1538
- }
1539
- return await done(doc);
1540
- } catch (err) {
1541
- if (err.error === "no_usable_index") {
1542
- const index_name = `index_${e.table_id}_${new Date()
1543
- .valueOf()
1544
- .toString()}`;
1545
-
1546
- mango_index_obj = {
1547
- index: {
1548
- fields: opt.sort,
1549
- },
1550
- name: index_name,
1551
- ddoc: `mango_index_table_${e.table_id}`,
1552
- };
1553
-
1554
- try {
1555
- const result = await db.createIndex(mango_index_obj);
1556
-
1557
- const doc = await db.find(opt);
1558
- return await done(doc);
1559
- } catch (error) {
1560
- return reject(error);
1561
- }
1562
- } else {
1563
- return reject(err.message);
1564
- }
1565
- }
1566
- } catch (err) {
1567
- return reject(err.error);
1568
- }
1569
- };
1570
-
1571
- const runtime_get_query_data = async function () {
1572
- var limit = 99999;
1573
- var skip = 0;
1574
-
1575
- if (e.limit) {
1576
- limit = e.limitP;
1577
- }
1578
-
1579
- if (e.skipP) {
1580
- skip = e.skipP;
1581
- }
1582
-
1583
- var desc = e.desc === "true" ? true : false;
1584
-
1585
- var opt;
1586
- if (key) {
1587
- opt = {
1588
- key: key,
1589
- include_docs: !e.ids && view !== "db_index_reduce",
1590
- limit: limit,
1591
- skip: skip,
1592
- };
1593
- } else {
1594
- if (e.reduce == "true") {
1595
- opt = {
1596
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
1597
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
1598
- include_docs: false,
1599
- reduce: true,
1600
- group_level: 3,
1601
-
1602
- descending: desc,
1603
- };
1604
- } else {
1605
- opt = {
1606
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
1607
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
1608
- include_docs: !e.ids,
1609
- limit: limit,
1610
- skip: skip,
1611
- descending: desc,
1612
- };
1613
- }
1614
- }
1615
-
1616
- try {
1617
- const body = db.view(`xuda`, view, opt);
1618
- if (e.reduce) {
1619
- return resolve(body);
1620
- }
1621
- var rows = [];
1622
-
1623
- for await (var val of body.rows) {
1624
- if (e.ids) {
1625
- rows.push({ id: val.id, value: val.value._id });
1626
- return true;
1627
- }
1628
- rows.push({
1629
- id: val.id,
1630
- value: { udfData: val.doc.udfData, _id: val.id },
1631
- });
1632
- }
1633
- return resolve({ rows: rows, total_rows: rows.length });
1634
- } catch (error) {
1635
- return reject(error);
1636
- }
1637
- };
1638
-
1639
- if (e.reduce && JSON.parse(e.reduce)) {
1640
- view = "db_index_reduce";
1641
- return await runtime_get_query_data();
1642
- }
1643
- if (e.view === "db_index") {
1644
- key = e.key;
1645
- view = e.view;
1646
- return await runtime_get_query_data();
1647
- }
1648
- return await runtime_get_mango_data();
1006
+ // var key;
1007
+
1008
+ // const runtime_get_mango_data = async function () {
1009
+ // const done = async function (body) {
1010
+ // const raw_data = async function () {
1011
+ // var rows = [];
1012
+
1013
+ // for await (var val of body.docs) {
1014
+ // var data = {};
1015
+ // if (e.fields) {
1016
+ // for await (const [key2, val2] of Object.entries(
1017
+ // typeof e.fields === "string" ? e.fields.split(",") : e.fields
1018
+ // )) {
1019
+ // if (val.udfData) {
1020
+ // data[val2] = val["udfData"]["data"][val2];
1021
+ // } else {
1022
+ // data[val2] = null;
1023
+ // }
1024
+ // }
1025
+ // } else {
1026
+ // for await (const [key2, val2] of Object.entries(
1027
+ // table_obj.tableFields
1028
+ // )) {
1029
+ // if (val.udfData) {
1030
+ // data[val2.data.field_id] =
1031
+ // val["udfData"]["data"][val2.data.field_id];
1032
+ // } else {
1033
+ // data[val2.data.field_id] = null;
1034
+ // }
1035
+ // }
1036
+ // }
1037
+
1038
+ // rows.push({
1039
+ // id: val._id,
1040
+ // value: {
1041
+ // udfData: { data: data },
1042
+ // _id: val._id,
1043
+ // _rev: val._rev,
1044
+ // },
1045
+ // });
1046
+ // }
1047
+
1048
+ // return resolve({ rows: rows, total_rows: rows.length });
1049
+ // };
1050
+ // const count_data = async function () {
1051
+ // var rows = [];
1052
+ // var keys_obj = {};
1053
+ // const table_index = find_item_by_key_root(
1054
+ // table_obj.tableIndexes,
1055
+ // "id",
1056
+ // e.indexId
1057
+ // );
1058
+ // if (e.indexId && table_index) {
1059
+ // var index_keys = table_index.data.keys;
1060
+ // var index_id = e.indexId;
1061
+
1062
+ // for await (var val of body.docs) {
1063
+ // var data = {};
1064
+ // const _tableFieldsObj = find_item_by_key(
1065
+ // table_obj.tableFields,
1066
+ // "field_id",
1067
+ // e.field_id
1068
+ // );
1069
+
1070
+ // for await (const [key2, val2] of Object.entries(
1071
+ // table_obj.tableFields
1072
+ // )) {
1073
+ // data[val2.data.field_id] =
1074
+ // val["udfData"]["data"][val2.data.field_id];
1075
+ // }
1076
+
1077
+ // var key_arr = [];
1078
+
1079
+ // for await (const [key_idx, key_name] of Object.entries(
1080
+ // index_keys
1081
+ // )) {
1082
+ // key_arr.push(data[key_name]);
1083
+ // }
1084
+ // keys_obj[key_arr]++;
1085
+ // }
1086
+
1087
+ // for await (const [key_arr, key_count] of Object.entries(keys_obj)) {
1088
+ // rows.push({
1089
+ // key: [e.key, index_id, key_arr],
1090
+ // value: body.docs.length,
1091
+ // });
1092
+ // }
1093
+ // } else {
1094
+ // // no index
1095
+ // rows.push({ key: "", value: body.docs.length });
1096
+ // }
1097
+ // return resolve({ rows: rows, total_rows: rows.length });
1098
+ // };
1099
+
1100
+ // const totals = async function () {
1101
+ // const median = (arr) => {
1102
+ // const mid = Math.floor(arr.length / 2),
1103
+ // nums = [...arr].sort((a, b) => a - b);
1104
+ // return arr.length % 2 !== 0
1105
+ // ? nums[mid]
1106
+ // : (nums[mid - 1] + nums[mid]) / 2;
1107
+ // };
1108
+
1109
+ // var total_fields_info = JSON.parse(e.total_fields_info);
1110
+ // var totals_prop = {};
1111
+ // var totals_obj = {};
1112
+ // var totals_counts = {};
1113
+ // var totals_arr = {};
1114
+ // var totals_sums = {};
1115
+ // var totals_group_obj = {};
1116
+
1117
+ // for await (const [key, val] of Object.entries(total_fields_info)) {
1118
+ // totals_counts[val.field_id] = 0;
1119
+ // totals_prop[val.field_id] = val;
1120
+ // totals_arr[val.field_id] = [];
1121
+ // totals_sums[val.field_id] = 0;
1122
+ // totals_group_obj[val.field_id] = {};
1123
+ // }
1124
+
1125
+ // for await (var row_data of body.docs) {
1126
+ // for await (const [key, val] of Object.entries(
1127
+ // row_data.udfData.data
1128
+ // )) {
1129
+ // var field_id = key;
1130
+ // var value = val;
1131
+ // totals_counts[field_id]++;
1132
+
1133
+ // switch (totals_prop[field_id].sum_type) {
1134
+ // case "sum":
1135
+ // if (typeof totals_obj[field_id] === "undefined") {
1136
+ // totals_obj[field_id] = value;
1137
+ // } else {
1138
+ // totals_obj[field_id] += value;
1139
+ // }
1140
+ // break;
1141
+
1142
+ // case "average":
1143
+ // totals_sums[field_id] += value;
1144
+ // totals_obj[field_id] =
1145
+ // totals_sums[field_id] / totals_counts[field_id];
1146
+ // break;
1147
+
1148
+ // case "median":
1149
+ // if (!totals_arr[field_id].includes(value)) {
1150
+ // totals_arr[field_id].push(value);
1151
+ // }
1152
+ // totals_obj[field_id] = median(totals_arr[field_id]);
1153
+ // break;
1154
+ // case "min":
1155
+ // if (
1156
+ // typeof totals_obj[field_id] === "undefined" ||
1157
+ // value < totals_obj[field_id]
1158
+ // ) {
1159
+ // totals_obj[field_id] = value;
1160
+ // }
1161
+ // break;
1162
+ // case "max":
1163
+ // if (
1164
+ // typeof totals_obj[field_id] === "undefined" ||
1165
+ // value > totals_obj[field_id]
1166
+ // ) {
1167
+ // totals_obj[field_id] = value;
1168
+ // }
1169
+ // break;
1170
+ // case "count":
1171
+ // if (typeof totals_obj[field_id] === "undefined") {
1172
+ // totals_obj[field_id] = 1;
1173
+ // } else {
1174
+ // totals_obj[field_id]++;
1175
+ // }
1176
+ // break;
1177
+ // case "distinct":
1178
+ // if (!totals_arr[field_id].includes(value)) {
1179
+ // totals_arr[field_id].push(value);
1180
+ // }
1181
+ // totals_obj[field_id] = totals_arr[field_id].length;
1182
+ // break;
1183
+
1184
+ // case "group":
1185
+ // if (!totals_obj[field_id]) {
1186
+ // totals_obj[field_id] = {};
1187
+ // }
1188
+
1189
+ // if (typeof totals_obj[field_id][value] === "undefined") {
1190
+ // totals_obj[field_id][value] = 1; //value;
1191
+ // } else {
1192
+ // totals_obj[field_id][value]++; //+= value;
1193
+ // }
1194
+
1195
+ // break;
1196
+ // default:
1197
+ // totals_obj[field_id] = null;
1198
+ // }
1199
+ // }
1200
+ // }
1201
+ // return resolve(totals_obj);
1202
+ // };
1203
+ // if (e.count === "true" || e.count === true) {
1204
+ // return count_data();
1205
+ // }
1206
+ // if (e.total_fields_info) {
1207
+ // return totals();
1208
+ // }
1209
+ // return raw_data();
1210
+ // };
1211
+
1212
+ // var limit = 99999;
1213
+ // var skip = 0;
1214
+
1215
+ // if (e.limit) {
1216
+ // limit = parseInt(e.limit);
1217
+ // }
1218
+
1219
+ // if (e.skip) {
1220
+ // skip = JSON.parse(e.skip);
1221
+ // }
1222
+
1223
+ // var fields = [];
1224
+ // if (e.fields) {
1225
+ // for await (const [key, val] of Object.entries(
1226
+ // typeof e.fields === "string" ? e.fields.split(",") : e.fields
1227
+ // )) {
1228
+ // fields.push(val);
1229
+ // }
1230
+ // } else {
1231
+ // for await (const [key, val] of Object.entries(table_obj.tableFields)) {
1232
+ // fields.push(val.data.field_id);
1233
+ // }
1234
+ // }
1235
+
1236
+ // var data = {};
1237
+ // var from = e.filter_from ? JSON.parse(e.filter_from) : {};
1238
+ // var to = e.filter_to ? JSON.parse(e.filter_to) : {};
1239
+ // var sort = [];
1240
+ // for await (const [key, val] of Object.entries(from)) {
1241
+ // var field_name = key;
1242
+
1243
+ // sort.push(field_name);
1244
+
1245
+ // if (val === to[key]) {
1246
+ // data[field_name] = val;
1247
+ // } else {
1248
+ // data[field_name] = { $gte: val };
1249
+ // }
1250
+ // }
1251
+
1252
+ // for await (const [key, val] of Object.entries(to)) {
1253
+ // var field_name = key;
1254
+
1255
+ // if (val !== from[key]) {
1256
+ // data[field_name]["$lte"] = val;
1257
+ // }
1258
+ // }
1259
+
1260
+ // var selector = {};
1261
+
1262
+ // if (from && !_.isEmpty(from)) {
1263
+ // selector = data;
1264
+ // }
1265
+
1266
+ // var opt = {
1267
+ // selector: selector,
1268
+ // limit: limit,
1269
+ // skip: skip,
1270
+ // fields: fields,
1271
+ // };
1272
+
1273
+ // if (sort.length) {
1274
+ // opt.sort = sort;
1275
+ // }
1276
+
1277
+ // if (e.sort_fields && JSON.parse(e.sort_fields).length) {
1278
+ // opt.sort = JSON.parse(e.sort_fields);
1279
+ // if (opt.sort) {
1280
+ // for await (const [key, val] of Object.entries(opt.sort)) {
1281
+ // var field_name = val.colId;
1282
+ // opt.sort[key] = {
1283
+ // ["udfData.data." + field_name]: val.sort,
1284
+ // };
1285
+ // }
1286
+ // }
1287
+ // }
1288
+
1289
+ // if (e.grid_filter_info) {
1290
+ // for await (const [key, val] of Object.entries(
1291
+ // JSON.parse(e.grid_filter_info)
1292
+ // )) {
1293
+ // var field_name = key;
1294
+ // var condition = "$and";
1295
+ // const make_selector = function (val) {
1296
+ // var value = "";
1297
+ // var operator = "";
1298
+ // var value_to = "";
1299
+ // var operator_to = "";
1300
+
1301
+ // if (val.filterType === "date") {
1302
+ // var date = val.dateFrom.substr(0, 10);
1303
+ // switch (val.type) {
1304
+ // case "equals":
1305
+ // operator = "$regex";
1306
+ // value = `^${date}`;
1307
+ // break;
1308
+
1309
+ // case "greaterThan":
1310
+ // operator = "$gt";
1311
+ // value = `${date}`;
1312
+ // break;
1313
+
1314
+ // case "lessThan":
1315
+ // operator = "$lt";
1316
+ // value = `${date}`;
1317
+ // break;
1318
+
1319
+ // case "blank":
1320
+ // operator = "$eq";
1321
+ // value = "";
1322
+ // break;
1323
+
1324
+ // case "inRange":
1325
+ // operator = "$gte";
1326
+ // value = date;
1327
+ // operator_to = "$lte";
1328
+ // value_to = val.dateTo.substr(0, 10);
1329
+ // break;
1330
+
1331
+ // case "notEqual":
1332
+ // operator = "$regex";
1333
+ // value = `^((?!${date}).)*$`;
1334
+ // break;
1335
+
1336
+ // case "notBlank":
1337
+ // operator = "$ne";
1338
+ // value = "";
1339
+ // break;
1340
+
1341
+ // default:
1342
+ // operator = "$regex";
1343
+ // value = `^${date}`;
1344
+ // }
1345
+ // }
1346
+
1347
+ // if (val.filterType === "text") {
1348
+ // switch (val.type) {
1349
+ // case "contains":
1350
+ // operator = "$regex";
1351
+ // value = `${val.filter}`;
1352
+ // break;
1353
+
1354
+ // case "notContains":
1355
+ // operator = "$regex";
1356
+ // value = `^((?!${val.filter}).)*$`;
1357
+ // break;
1358
+
1359
+ // case "equals":
1360
+ // operator = "$eq";
1361
+ // value = `${val.filter}`;
1362
+ // break;
1363
+
1364
+ // case "notEqual":
1365
+ // operator = "$ne";
1366
+ // value = `${val.filter}`;
1367
+ // break;
1368
+
1369
+ // case "startsWith":
1370
+ // operator = "$regex";
1371
+ // value = `^${val.filter}`;
1372
+ // break;
1373
+
1374
+ // case "endsWith":
1375
+ // operator = "$regex";
1376
+ // value = `${val.filter}$`;
1377
+ // break;
1378
+
1379
+ // case "blank":
1380
+ // operator = "$eq";
1381
+ // value = "";
1382
+ // break;
1383
+
1384
+ // case "notBlank":
1385
+ // operator = "$ne";
1386
+ // value = "";
1387
+ // break;
1388
+
1389
+ // default:
1390
+ // value = "^" + val.filter;
1391
+ // }
1392
+ // }
1393
+
1394
+ // if (val.filterType === "number") {
1395
+ // switch (val.type) {
1396
+ // case "equals":
1397
+ // operator = "$eq";
1398
+ // value = val.filter;
1399
+ // break;
1400
+
1401
+ // case "notEqual":
1402
+ // operator = "$ne";
1403
+ // value = val.filter;
1404
+ // break;
1405
+
1406
+ // case "lessThanOrEqual":
1407
+ // operator = "$lte";
1408
+ // value = val.filter;
1409
+ // break;
1410
+
1411
+ // case "greaterThanOrEqual":
1412
+ // operator = "$gte";
1413
+ // value = val.filter;
1414
+ // break;
1415
+
1416
+ // case "lessThan":
1417
+ // operator = "$lt";
1418
+ // value = val.filter;
1419
+ // break;
1420
+
1421
+ // case "greaterThan":
1422
+ // operator = "$gt";
1423
+ // value = val.filter;
1424
+ // break;
1425
+
1426
+ // case "blank":
1427
+ // operator = "$eq";
1428
+ // value = 0;
1429
+ // break;
1430
+
1431
+ // case "notBlank":
1432
+ // operator = "$ne";
1433
+ // value = 0;
1434
+ // break;
1435
+
1436
+ // case "inRange":
1437
+ // operator = "$gte";
1438
+ // value = val.filter;
1439
+ // operator_to = "$lte";
1440
+ // value_to = val.filterTo;
1441
+ // break;
1442
+
1443
+ // default:
1444
+ // operator = "$eq";
1445
+ // value = val.filter;
1446
+ // }
1447
+ // }
1448
+ // if (!opt.selector[field_name]) {
1449
+ // opt.selector[field_name] = {};
1450
+ // }
1451
+ // if (!opt.selector[field_name][condition]) {
1452
+ // opt.selector[field_name][condition] = [];
1453
+ // }
1454
+ // opt.selector[field_name][condition].push({
1455
+ // [operator]: value,
1456
+ // });
1457
+
1458
+ // if (operator_to) {
1459
+ // opt.selector[field_name][condition].push({
1460
+ // [operator_to]: value_to,
1461
+ // });
1462
+ // }
1463
+ // };
1464
+
1465
+ // if (!val.condition1) {
1466
+ // make_selector(val);
1467
+ // } else {
1468
+ // condition = "$" + val.operator.toLowerCase();
1469
+ // make_selector(val.condition1);
1470
+ // make_selector(val.condition2);
1471
+ // }
1472
+ // }
1473
+ // }
1474
+
1475
+ // if (e.total_fields_info) {
1476
+ // fields = [];
1477
+ // for await (const [key, val] of Object.entries(
1478
+ // JSON.parse(e.total_fields_info)
1479
+ // )) {
1480
+ // var field_name = val.field_id;
1481
+
1482
+ // fields.push(field_name);
1483
+ // }
1484
+ // opt.fields = fields;
1485
+ // }
1486
+ // // fix names
1487
+
1488
+ // for await (const [key, val] of Object.entries(opt.fields)) {
1489
+ // opt.fields[key] = "udfData.data." + val;
1490
+ // }
1491
+ // if (!e.sort_fields || !JSON.parse(e.sort_fields).length) {
1492
+ // // added 2021 09 10
1493
+ // if (opt.sort) {
1494
+ // for await (const [key, val] of Object.entries(opt.sort)) {
1495
+ // opt.sort[key] = {
1496
+ // ["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
1497
+ // };
1498
+ // }
1499
+ // }
1500
+ // }
1501
+
1502
+ // var selector_new = {};
1503
+
1504
+ // for await (const [key, val] of Object.entries(opt.selector)) {
1505
+ // selector_new["udfData.data." + key] = val;
1506
+ // }
1507
+
1508
+ // if (e.viewDbQuery) {
1509
+ // for await (const [key, val] of Object.entries(table_obj.tableFields)) {
1510
+ // if (e.viewDbQuery.includes(val.id)) {
1511
+ // const replacer = new RegExp(val.id, "g");
1512
+ // e.viewDbQuery = e.viewDbQuery.replace(
1513
+ // replacer,
1514
+ // "udfData.data." + val.data.field_id
1515
+ // );
1516
+ // }
1517
+ // }
1518
+
1519
+ // let viewDbQuery = JSON.parse(e.viewDbQuery.replace(/\\/g, ""));
1520
+
1521
+ // for await (const [key, val] of Object.entries(viewDbQuery)) {
1522
+ // selector_new[key] = val;
1523
+ // }
1524
+ // }
1525
+
1526
+ // opt.selector = selector_new;
1527
+ // opt.selector["udfData.udffileid"] = e.table_id;
1528
+ // opt.selector.stat = e.archived ? 4 : 3;
1529
+
1530
+ // opt.fields.push("_id");
1531
+ // opt.fields.push("_rev");
1532
+
1533
+ // // xuda
1534
+ // var cache_string = JSON.stringify(opt);
1535
+
1536
+ // // if (__.CACHE_QUERY_REQ?.[app_id_reference]?.[e.table_id]?.[cache_string]) {
1537
+ // // return await done(
1538
+ // // __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string].doc
1539
+ // // );
1540
+ // // }
1541
+ // debugger;
1542
+ // try {
1543
+ // try {
1544
+ // const doc = await db.find(opt);
1545
+ // if (!__.CACHE_QUERY_REQ[app_id_reference]) {
1546
+ // __.CACHE_QUERY_REQ[app_id_reference] = {};
1547
+ // }
1548
+
1549
+ // if (!__.CACHE_QUERY_REQ[app_id_reference][e.table_id]) {
1550
+ // __.CACHE_QUERY_REQ[app_id_reference][e.table_id] = {};
1551
+ // }
1552
+
1553
+ // __.CACHE_QUERY_REQ[app_id_reference][e.table_id][cache_string] = {
1554
+ // doc: doc,
1555
+ // ts: Date.now(),
1556
+ // };
1557
+
1558
+ // if (doc?.warning?.includes("No matching index found")) {
1559
+ // const index_name = `index_${e.table_id}_${new Date()
1560
+ // .valueOf()
1561
+ // .toString()}`;
1562
+ // var index = [];
1563
+
1564
+ // for await (const [key, val] of Object.entries(opt.selector)) {
1565
+ // index.push(key);
1566
+ // }
1567
+ // mango_index_obj = {
1568
+ // index: {
1569
+ // fields: index,
1570
+ // },
1571
+ // name: index_name,
1572
+ // ddoc: `mango_index_table_${e.table_id}`,
1573
+ // };
1574
+ // db.createIndex(mango_index_obj).then((result) => {
1575
+ // console.log(result);
1576
+ // });
1577
+ // }
1578
+ // return await done(doc);
1579
+ // } catch (err) {
1580
+ // if (err.error === "no_usable_index") {
1581
+ // const index_name = `index_${e.table_id}_${new Date()
1582
+ // .valueOf()
1583
+ // .toString()}`;
1584
+
1585
+ // mango_index_obj = {
1586
+ // index: {
1587
+ // fields: opt.sort,
1588
+ // },
1589
+ // name: index_name,
1590
+ // ddoc: `mango_index_table_${e.table_id}`,
1591
+ // };
1592
+
1593
+ // try {
1594
+ // const result = await db.createIndex(mango_index_obj);
1595
+
1596
+ // const doc = await db.find(opt);
1597
+ // return await done(doc);
1598
+ // } catch (error) {
1599
+ // return reject(error);
1600
+ // }
1601
+ // } else {
1602
+ // return reject(err.message);
1603
+ // }
1604
+ // }
1605
+ // } catch (err) {
1606
+ // return reject(err.error);
1607
+ // }
1608
+ // };
1609
+
1610
+ // const runtime_get_query_data = async function () {
1611
+ // var limit = 99999;
1612
+ // var skip = 0;
1613
+
1614
+ // if (e.limit) {
1615
+ // limit = e.limitP;
1616
+ // }
1617
+
1618
+ // if (e.skipP) {
1619
+ // skip = e.skipP;
1620
+ // }
1621
+
1622
+ // var desc = e.desc === "true" ? true : false;
1623
+
1624
+ // var opt;
1625
+ // if (key) {
1626
+ // opt = {
1627
+ // key: key,
1628
+ // include_docs: !e.ids && view !== "db_index_reduce",
1629
+ // limit: limit,
1630
+ // skip: skip,
1631
+ // };
1632
+ // } else {
1633
+ // if (e.reduce == "true") {
1634
+ // opt = {
1635
+ // startkey: e.startkey ? JSON.parse(e.startkey) : "",
1636
+ // endkey: e.endkey ? JSON.parse(e.endkey) : "",
1637
+ // include_docs: false,
1638
+ // reduce: true,
1639
+ // group_level: 3,
1640
+
1641
+ // descending: desc,
1642
+ // };
1643
+ // } else {
1644
+ // opt = {
1645
+ // startkey: e.startkey ? JSON.parse(e.startkey) : "",
1646
+ // endkey: e.endkey ? JSON.parse(e.endkey) : "",
1647
+ // include_docs: !e.ids,
1648
+ // limit: limit,
1649
+ // skip: skip,
1650
+ // descending: desc,
1651
+ // };
1652
+ // }
1653
+ // }
1654
+
1655
+ // try {
1656
+ // const body = db.view(`xuda`, view, opt);
1657
+ // if (e.reduce) {
1658
+ // return resolve(body);
1659
+ // }
1660
+ // var rows = [];
1661
+
1662
+ // for await (var val of body.rows) {
1663
+ // if (e.ids) {
1664
+ // rows.push({ id: val.id, value: val.value._id });
1665
+ // return true;
1666
+ // }
1667
+ // rows.push({
1668
+ // id: val.id,
1669
+ // value: { udfData: val.doc.udfData, _id: val.id },
1670
+ // });
1671
+ // }
1672
+ // return resolve({ rows: rows, total_rows: rows.length });
1673
+ // } catch (error) {
1674
+ // return reject(error);
1675
+ // }
1676
+ // };
1677
+
1678
+ // if (e.reduce && JSON.parse(e.reduce)) {
1679
+ // view = "db_index_reduce";
1680
+ // return await runtime_get_query_data();
1681
+ // }
1682
+ // if (e.view === "db_index") {
1683
+ // key = e.key;
1684
+ // view = e.view;
1685
+ // return await runtime_get_query_data();
1686
+ // }
1687
+ // return await runtime_get_mango_data();
1649
1688
  };
1650
1689
  exports.update = async (params, setup_doc, resolve, reject) => {
1651
1690
  const e = params.e;
@@ -1655,7 +1694,7 @@ exports.update = async (params, setup_doc, resolve, reject) => {
1655
1694
  try {
1656
1695
  var doc = await db.get(e.row_id, {});
1657
1696
  let data = doc.udfData.data;
1658
- var error;
1697
+ var error = undefined;
1659
1698
  if (!e.field_id && !e.data) {
1660
1699
  error = "Invalid field_id or data object to save";
1661
1700
  return reject(error);