@xuda.io/xuda-dbs-plugin-xuda 1.0.49 → 1.0.51

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 +692 -691
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,7 +837,7 @@ 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
842
  return { code: 1, data: body };
843
843
  }
@@ -964,688 +964,688 @@ exports.read = async (params, setup_doc, resolve, reject) => {
964
964
 
965
965
  return resolve(ret.data);
966
966
 
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();
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();
1649
1649
  };
1650
1650
  exports.update = async (params, setup_doc, resolve, reject) => {
1651
1651
  const e = params.e;
@@ -1653,9 +1653,9 @@ exports.update = async (params, setup_doc, resolve, reject) => {
1653
1653
  const app_id_reference = params.app_id_reference;
1654
1654
  const table_obj = params.table_obj;
1655
1655
  try {
1656
- const doc = await db.get(e.row_id, {});
1656
+ var doc = await db.get(e.row_id, {});
1657
1657
  let data = doc.udfData.data;
1658
- var error;
1658
+ var error = undefined;
1659
1659
  if (!e.field_id && !e.data) {
1660
1660
  error = "Invalid field_id or data object to save";
1661
1661
  return reject(error);
@@ -1671,15 +1671,16 @@ exports.update = async (params, setup_doc, resolve, reject) => {
1671
1671
  return reject("Error:" + e.field_id + " - field not found");
1672
1672
  }
1673
1673
 
1674
- data[e.field_id] = await get_cast_val(
1674
+ doc.udfData.data[e.field_id] = await get_cast_val(
1675
1675
  "dbs_update",
1676
1676
  e.field_id,
1677
1677
  _tableFieldsObj.props.fieldType,
1678
1678
  e.field_value
1679
1679
  );
1680
1680
  }
1681
+ // object value save
1681
1682
  if (e.data) {
1682
- data = {};
1683
+ // data = {};
1683
1684
  for await (const [key, val] of Object.entries(e.data)) {
1684
1685
  let _tableFieldsObj = find_item_by_key(
1685
1686
  table_obj.tableFields,
@@ -1691,7 +1692,7 @@ exports.update = async (params, setup_doc, resolve, reject) => {
1691
1692
  break;
1692
1693
  }
1693
1694
 
1694
- data[key] = await get_cast_val(
1695
+ doc.udfData.data[key] = await get_cast_val(
1695
1696
  "dbs_update",
1696
1697
  key,
1697
1698
  _tableFieldsObj.props.fieldType,