@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.
- package/dist/base-plugin/actions.d.ts +30 -19
- package/dist/base-plugin/actions.d.ts.map +1 -1
- package/dist/base-plugin/actions.js +12 -0
- package/dist/base-plugin/actions.js.map +1 -1
- package/dist/base-plugin/index.d.ts +11 -3
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts +5 -1
- package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts +5 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/show.d.ts +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.js +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
- package/dist/db/connect.d.ts +2 -1
- package/dist/db/connect.d.ts.map +1 -1
- package/dist/db/connect.js.map +1 -1
- package/dist/db/index.d.ts +2 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/state.d.ts +1 -1
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +3 -2
- package/dist/db/state.js.map +1 -1
- package/dist/mobile-mocks/node/vm.js +10 -9
- package/dist/model-helper.d.ts.map +1 -1
- package/dist/model-helper.js +22 -1
- package/dist/model-helper.js.map +1 -1
- package/dist/models/config.d.ts +2 -1
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/config.js.map +1 -1
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/table.d.ts +9 -5
- package/dist/models/table.d.ts.map +1 -1
- package/dist/models/table.js +26 -8
- package/dist/models/table.js.map +1 -1
- package/dist/models/trigger.d.ts +2 -1
- package/dist/models/trigger.d.ts.map +1 -1
- package/dist/models/trigger.js +1 -1
- package/dist/models/trigger.js.map +1 -1
- package/dist/models/user.d.ts +1 -0
- package/dist/models/user.d.ts.map +1 -1
- package/dist/models/user.js +7 -0
- package/dist/models/user.js.map +1 -1
- package/dist/models/view.d.ts +3 -3
- package/dist/models/view.d.ts.map +1 -1
- package/dist/models/view.js +4 -4
- package/dist/models/view.js.map +1 -1
- package/dist/models/workflow_run.d.ts.map +1 -1
- package/dist/models/workflow_run.js +39 -20
- package/dist/models/workflow_run.js.map +1 -1
- package/dist/models/workflow_step.d.ts +1 -1
- package/dist/models/workflow_step.d.ts.map +1 -1
- package/dist/tests/calc.test.js +31 -0
- package/dist/tests/calc.test.js.map +1 -1
- package/dist/tests/db.test.js +1 -1
- package/dist/tests/db.test.js.map +1 -1
- package/dist/tests/exact_views.test.js +3 -3
- package/dist/tests/exact_views.test.js.map +1 -1
- package/dist/tests/table.test.js +97 -0
- package/dist/tests/table.test.js.map +1 -1
- package/dist/tests/workflow_run.test.js +213 -0
- package/dist/tests/workflow_run.test.js.map +1 -1
- package/dist/utils.d.ts +4 -4
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/dist/utils.js.map +1 -1
- package/package.json +8 -8
package/dist/models/table.js
CHANGED
|
@@ -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
|
-
|
|
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();
|