@saltcorn/data 1.2.0 → 1.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/base-plugin/actions.d.ts +30 -19
  2. package/dist/base-plugin/actions.d.ts.map +1 -1
  3. package/dist/base-plugin/actions.js +12 -0
  4. package/dist/base-plugin/actions.js.map +1 -1
  5. package/dist/base-plugin/index.d.ts +11 -3
  6. package/dist/base-plugin/index.d.ts.map +1 -1
  7. package/dist/base-plugin/viewtemplates/edit.d.ts +5 -1
  8. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  9. package/dist/base-plugin/viewtemplates/filter.d.ts +5 -1
  10. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  11. package/dist/base-plugin/viewtemplates/show.d.ts +1 -1
  12. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
  13. package/dist/base-plugin/viewtemplates/viewable_fields.js +1 -1
  14. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
  15. package/dist/db/connect.d.ts +2 -1
  16. package/dist/db/connect.d.ts.map +1 -1
  17. package/dist/db/connect.js.map +1 -1
  18. package/dist/db/index.d.ts +2 -1
  19. package/dist/db/index.d.ts.map +1 -1
  20. package/dist/db/index.js.map +1 -1
  21. package/dist/db/state.d.ts +1 -1
  22. package/dist/db/state.d.ts.map +1 -1
  23. package/dist/db/state.js +3 -2
  24. package/dist/db/state.js.map +1 -1
  25. package/dist/mobile-mocks/node/vm.js +10 -9
  26. package/dist/model-helper.d.ts.map +1 -1
  27. package/dist/model-helper.js +22 -1
  28. package/dist/model-helper.js.map +1 -1
  29. package/dist/models/config.d.ts +2 -1
  30. package/dist/models/config.d.ts.map +1 -1
  31. package/dist/models/config.js.map +1 -1
  32. package/dist/models/field.d.ts.map +1 -1
  33. package/dist/models/field.js.map +1 -1
  34. package/dist/models/index.d.ts +1 -1
  35. package/dist/models/index.d.ts.map +1 -1
  36. package/dist/models/table.d.ts +9 -5
  37. package/dist/models/table.d.ts.map +1 -1
  38. package/dist/models/table.js +26 -8
  39. package/dist/models/table.js.map +1 -1
  40. package/dist/models/trigger.d.ts +2 -1
  41. package/dist/models/trigger.d.ts.map +1 -1
  42. package/dist/models/trigger.js +1 -1
  43. package/dist/models/trigger.js.map +1 -1
  44. package/dist/models/user.d.ts +1 -0
  45. package/dist/models/user.d.ts.map +1 -1
  46. package/dist/models/user.js +7 -0
  47. package/dist/models/user.js.map +1 -1
  48. package/dist/models/view.d.ts +3 -3
  49. package/dist/models/view.d.ts.map +1 -1
  50. package/dist/models/view.js +4 -4
  51. package/dist/models/view.js.map +1 -1
  52. package/dist/models/workflow_run.d.ts.map +1 -1
  53. package/dist/models/workflow_run.js +39 -20
  54. package/dist/models/workflow_run.js.map +1 -1
  55. package/dist/models/workflow_step.d.ts +1 -1
  56. package/dist/models/workflow_step.d.ts.map +1 -1
  57. package/dist/tests/calc.test.js +31 -0
  58. package/dist/tests/calc.test.js.map +1 -1
  59. package/dist/tests/db.test.js +1 -1
  60. package/dist/tests/db.test.js.map +1 -1
  61. package/dist/tests/exact_views.test.js +3 -3
  62. package/dist/tests/exact_views.test.js.map +1 -1
  63. package/dist/tests/table.test.js +97 -0
  64. package/dist/tests/table.test.js.map +1 -1
  65. package/dist/tests/workflow_run.test.js +213 -0
  66. package/dist/tests/workflow_run.test.js.map +1 -1
  67. package/dist/utils.d.ts +4 -4
  68. package/dist/utils.d.ts.map +1 -1
  69. package/dist/utils.js +3 -2
  70. package/dist/utils.js.map +1 -1
  71. package/package.json +8 -8
@@ -1095,12 +1095,12 @@ class Table {
1095
1095
  // migrating to options arg
1096
1096
  if (typeof noTrigger === "object") {
1097
1097
  const extraOptions = noTrigger;
1098
- noTrigger = extraOptions.noTrigger;
1099
1098
  resultCollector = extraOptions.resultCollector;
1100
1099
  restore_of_version = extraOptions.restore_of_version;
1101
1100
  syncTimestamp = extraOptions.syncTimestamp;
1102
1101
  additionalTriggerValues = extraOptions.additionalTriggerValues;
1103
1102
  autoRecalcIterations = extraOptions.autoRecalcIterations;
1103
+ noTrigger = extraOptions.noTrigger;
1104
1104
  }
1105
1105
  if (typeof autoRecalcIterations === "number" && autoRecalcIterations > 5)
1106
1106
  return;
@@ -1284,6 +1284,20 @@ class Table {
1284
1284
  const really_changed_field_names = existing
1285
1285
  ? new Set(Object.keys(v).filter((k) => v[k] !== existing[k]))
1286
1286
  : changedFieldNames;
1287
+ let keyChanged = false;
1288
+ for (const fnm of really_changed_field_names || []) {
1289
+ const field = this.getField(fnm);
1290
+ if (field?.is_fkey) {
1291
+ keyChanged = true;
1292
+ break;
1293
+ }
1294
+ }
1295
+ if (!existing && really_changed_field_names.size && keyChanged)
1296
+ existing = await this.getJoinedRow({
1297
+ where: { [pk_name]: id },
1298
+ forUser: user,
1299
+ joinFields,
1300
+ });
1287
1301
  await db_1.default.update(this.name, v, id, {
1288
1302
  pk_name,
1289
1303
  ...sqliteJsonCols,
@@ -1296,8 +1310,11 @@ class Table {
1296
1310
  await this.insertSyncInfo(id, syncTimestamp);
1297
1311
  }
1298
1312
  const newRow = { ...existing, ...v, [pk_name]: id };
1299
- if (really_changed_field_names.size > 0)
1300
- await this.auto_update_calc_aggregations(newRow, !existing, (autoRecalcIterations || 0) + 1, really_changed_field_names);
1313
+ if (really_changed_field_names.size > 0) {
1314
+ await this.auto_update_calc_aggregations(newRow, !existing, (autoRecalcIterations || 0) + 1, really_changed_field_names, keyChanged);
1315
+ if (existing && keyChanged)
1316
+ await this.auto_update_calc_aggregations(existing, !existing, (autoRecalcIterations || 0) + 1, really_changed_field_names, keyChanged);
1317
+ }
1301
1318
  if (!noTrigger) {
1302
1319
  const trigPromise = trigger_1.default.runTableTriggers("Update", this, { ...(additionalTriggerValues || {}), ...newRow }, resultCollector, role === 100 ? undefined : user, { old_row: existing, updated_fields: v_in });
1303
1320
  if (resultCollector)
@@ -1608,7 +1625,7 @@ class Table {
1608
1625
  }
1609
1626
  return id;
1610
1627
  }
1611
- async auto_update_calc_aggregations(v0, refetch, iterations = 1, changedFields) {
1628
+ async auto_update_calc_aggregations(v0, refetch, iterations = 1, changedFields, keyChanged = false) {
1612
1629
  const state = require("../db/state").getState();
1613
1630
  const pk_name = this.pk_name;
1614
1631
  state.log(6, `auto_update_calc_aggregations table=${this.name} id=${v0[pk_name]} iters=${iterations}${changedFields ? ` changedFields=${[...(changedFields || [])]}` : ""}`);
@@ -1636,7 +1653,7 @@ class Table {
1636
1653
  const updated = {};
1637
1654
  for (const calc_field of calc_agg_fields) {
1638
1655
  const agg_field_name = calc_field.attributes.agg_field.split("@")[0];
1639
- if (changedFields && !changedFields.has(agg_field_name))
1656
+ if (changedFields && !changedFields.has(agg_field_name) && !keyChanged)
1640
1657
  continue;
1641
1658
  const refTable = Table.findOne({ id: calc_field.table_id });
1642
1659
  if (!refTable || !v[calc_field.attributes.ref])
@@ -2299,7 +2316,7 @@ class Table {
2299
2316
  else if (headers.map((h) => field_1.default.labelToName(h)).includes(f.name)) {
2300
2317
  okHeaders[f.name] = f;
2301
2318
  renames.push({
2302
- from: headers.find((h) => field_1.default.labelToName(h) === f.name),
2319
+ from: headers.find((h) => field_1.default.labelToName(h) === f.name) || "",
2303
2320
  to: f.name,
2304
2321
  });
2305
2322
  }
@@ -2493,7 +2510,8 @@ class Table {
2493
2510
  await client.query("ROLLBACK");
2494
2511
  if (!db_1.default.isSQLite)
2495
2512
  await client.release(true);
2496
- reject({ error: `${e.message} in row ${i}` });
2513
+ if (e instanceof Error)
2514
+ reject({ error: `${e.message} in row ${i}` });
2497
2515
  }
2498
2516
  }, (err) => {
2499
2517
  reject({ error: !err ? err : err.message || err });
@@ -3327,7 +3345,7 @@ async function dump_table_to_json_file(filePath, tableName) {
3327
3345
  const writeStream = (0, fs_1.createWriteStream)(filePath);
3328
3346
  const client = db_1.default.isSQLite ? db_1.default : await db_1.default.getClient();
3329
3347
  writeStream.write("[");
3330
- await db_1.default.copyToJson(writeStream, tableName, client);
3348
+ db_1.default.copyToJson && (await db_1.default.copyToJson(writeStream, tableName, client));
3331
3349
  if (!db_1.default.isSQLite)
3332
3350
  await client.release(true);
3333
3351
  writeStream.destroy();