@saltcorn/data 0.9.5-beta.5 → 0.9.5-beta.7
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.map +1 -1
- package/dist/base-plugin/actions.js +1 -0
- package/dist/base-plugin/actions.js.map +1 -1
- package/dist/base-plugin/index.d.ts +14 -0
- package/dist/base-plugin/index.d.ts.map +1 -1
- package/dist/base-plugin/types.d.ts +16 -0
- package/dist/base-plugin/types.d.ts.map +1 -1
- package/dist/base-plugin/types.js +3 -0
- package/dist/base-plugin/types.js.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/filter.js +5 -5
- package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
- package/dist/base-plugin/viewtemplates/list.js +4 -3
- package/dist/base-plugin/viewtemplates/list.js.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
- package/dist/base-plugin/viewtemplates/viewable_fields.js +8 -7
- package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
- package/dist/db/state.d.ts +1 -0
- package/dist/db/state.d.ts.map +1 -1
- package/dist/db/state.js +1 -0
- package/dist/db/state.js.map +1 -1
- package/dist/models/field.d.ts +1 -1
- package/dist/models/field.d.ts.map +1 -1
- package/dist/models/field.js +8 -7
- package/dist/models/field.js.map +1 -1
- package/dist/models/table.d.ts +3 -2
- package/dist/models/table.d.ts.map +1 -1
- package/dist/models/table.js +54 -16
- package/dist/models/table.js.map +1 -1
- package/dist/plugin-helper.d.ts +4 -3
- package/dist/plugin-helper.d.ts.map +1 -1
- package/dist/plugin-helper.js +41 -2
- package/dist/plugin-helper.js.map +1 -1
- package/dist/tests/field.test.js +13 -1
- package/dist/tests/field.test.js.map +1 -1
- package/dist/tests/list.test.js +1 -1
- package/dist/tests/list.test.js.map +1 -1
- package/dist/tests/mocks.d.ts +30 -2
- package/dist/tests/mocks.d.ts.map +1 -1
- package/dist/tests/mocks.js +37 -0
- package/dist/tests/mocks.js.map +1 -1
- package/dist/tests/table.test.js +93 -0
- package/dist/tests/table.test.js.map +1 -1
- package/dist/tests/view.test.js +8 -0
- package/dist/tests/view.test.js.map +1 -1
- package/dist/utils.d.ts +2 -2
- package/package.json +9 -9
package/dist/models/table.d.ts
CHANGED
|
@@ -296,6 +296,7 @@ declare class Table implements AbstractTable {
|
|
|
296
296
|
* @returns {Promise<void>}
|
|
297
297
|
*/
|
|
298
298
|
getRows(where?: Where, selopts?: SelectOptions & ForUserRequest): Promise<Row[]>;
|
|
299
|
+
processSelectOptions(selopts?: SelectOptions & ForUserRequest): SelectOptions & ForUserRequest;
|
|
299
300
|
/**
|
|
300
301
|
* Count the number of rows in db table. The argument is a where-expression with conditions the
|
|
301
302
|
* counted rows should match. countRows returns the number of matching rows wrapped in a promise.
|
|
@@ -361,7 +362,7 @@ declare class Table implements AbstractTable {
|
|
|
361
362
|
* @returns
|
|
362
363
|
*/
|
|
363
364
|
updateRow(v_in: any, id: any, user?: Row, noTrigger?: boolean, resultCollector?: object, restore_of_version?: any, syncTimestamp?: Date): Promise<string | void>;
|
|
364
|
-
|
|
365
|
+
insert_history_row(v0: any, retry?: number): Promise<void>;
|
|
365
366
|
latestSyncInfo(id: any): Promise<any>;
|
|
366
367
|
latestSyncInfos(ids: any[]): Promise<any>;
|
|
367
368
|
private insertSyncInfo;
|
|
@@ -504,7 +505,7 @@ declare class Table implements AbstractTable {
|
|
|
504
505
|
* @param id
|
|
505
506
|
* @returns {Promise<*>}
|
|
506
507
|
*/
|
|
507
|
-
get_history(id
|
|
508
|
+
get_history(id?: number): Promise<Row[]>;
|
|
508
509
|
/**
|
|
509
510
|
* Enable constraints
|
|
510
511
|
* @returns {Promise<void>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../models/table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../models/table.ts"],"names":[],"mappings":"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"}
|
package/dist/models/table.js
CHANGED
|
@@ -500,10 +500,28 @@ class Table {
|
|
|
500
500
|
*/
|
|
501
501
|
static async create(name, options = {}, //TODO not selectoptions
|
|
502
502
|
id) {
|
|
503
|
+
let pk_type = "Integer";
|
|
504
|
+
let pk_sql_type = db_1.default.isSQLite ? "integer" : "serial";
|
|
505
|
+
if (options?.fields && Array.isArray(options.fields)) {
|
|
506
|
+
const pk_field = options.fields.find?.((f) => typeof f !== "string" && f?.primary_key);
|
|
507
|
+
pk_type =
|
|
508
|
+
(typeof pk_field === "string"
|
|
509
|
+
? pk_field
|
|
510
|
+
: typeof pk_field?.type === "string"
|
|
511
|
+
? pk_field?.type
|
|
512
|
+
: pk_field?.type?.name) || "Integer";
|
|
513
|
+
}
|
|
514
|
+
if (pk_type !== "Integer") {
|
|
515
|
+
const { getState } = require("../db/state");
|
|
516
|
+
const type = getState().types[pk_type];
|
|
517
|
+
pk_sql_type = type.sql_name;
|
|
518
|
+
if (type.primaryKey?.default_sql)
|
|
519
|
+
pk_sql_type = `${type.sql_name} default ${type.primaryKey?.default_sql}`;
|
|
520
|
+
}
|
|
503
521
|
const schema = db_1.default.getTenantSchemaPrefix();
|
|
504
522
|
// create table in database
|
|
505
523
|
if (!options.provider_name)
|
|
506
|
-
await db_1.default.query(`create table ${schema}"${(0, internal_1.sqlsanitize)(name)}" (id ${
|
|
524
|
+
await db_1.default.query(`create table ${schema}"${(0, internal_1.sqlsanitize)(name)}" (id ${pk_sql_type} primary key)`);
|
|
507
525
|
// populate table definition row
|
|
508
526
|
const tblrow = {
|
|
509
527
|
name,
|
|
@@ -524,7 +542,7 @@ class Table {
|
|
|
524
542
|
// add primary key column ID
|
|
525
543
|
if (!options.provider_name) {
|
|
526
544
|
const insfldres = await db_1.default.query(`insert into ${schema}_sc_fields(table_id, name, label, type, attributes, required, is_unique,primary_key)
|
|
527
|
-
values($1,'id','ID','
|
|
545
|
+
values($1,'id','ID','${pk_type}', '{}', true, true, true) returning id`, [id]);
|
|
528
546
|
pk_fld_id = insfldres.rows[0].id;
|
|
529
547
|
}
|
|
530
548
|
}
|
|
@@ -535,7 +553,7 @@ class Table {
|
|
|
535
553
|
? [] //TODO look up
|
|
536
554
|
: [
|
|
537
555
|
new field_1.default({
|
|
538
|
-
type:
|
|
556
|
+
type: pk_type,
|
|
539
557
|
name: "id",
|
|
540
558
|
label: "ID",
|
|
541
559
|
primary_key: true,
|
|
@@ -799,7 +817,7 @@ class Table {
|
|
|
799
817
|
const fields = this.fields;
|
|
800
818
|
const { forUser, forPublic, ...selopts1 } = selopts;
|
|
801
819
|
const role = forUser ? forUser.role_id : forPublic ? 100 : null;
|
|
802
|
-
const row = await db_1.default.selectMaybeOne(this.name, where, selopts1);
|
|
820
|
+
const row = await db_1.default.selectMaybeOne(this.name, where, this.processSelectOptions(selopts1));
|
|
803
821
|
if (!row || !this.fields)
|
|
804
822
|
return null;
|
|
805
823
|
if (role && role > this.min_role_read) {
|
|
@@ -857,7 +875,7 @@ class Table {
|
|
|
857
875
|
this.updateWhereWithOwnership(where, fields, forUser || { role_id: 100 }, true)?.notAuthorized) {
|
|
858
876
|
return [];
|
|
859
877
|
}
|
|
860
|
-
let rows = await db_1.default.select(this.name, where, selopts1);
|
|
878
|
+
let rows = await db_1.default.select(this.name, where, this.processSelectOptions(selopts1));
|
|
861
879
|
if (role && role > this.min_role_read) {
|
|
862
880
|
//check ownership
|
|
863
881
|
if (forPublic)
|
|
@@ -873,6 +891,18 @@ class Table {
|
|
|
873
891
|
}
|
|
874
892
|
return apply_calculated_fields(rows.map((r) => this.readFromDB(r)), this.fields, !!selopts.ignore_errors);
|
|
875
893
|
}
|
|
894
|
+
processSelectOptions(selopts = {}) {
|
|
895
|
+
if (typeof selopts?.orderBy === "object" &&
|
|
896
|
+
"operator" in selopts?.orderBy &&
|
|
897
|
+
typeof selopts.orderBy.operator === "string") {
|
|
898
|
+
const field = this.getField(selopts.orderBy.field);
|
|
899
|
+
if (!(0, common_types_1.instanceOfType)(field?.type))
|
|
900
|
+
return selopts;
|
|
901
|
+
const operator = field?.type?.distance_operators?.[selopts.orderBy.operator];
|
|
902
|
+
selopts.orderBy.operator = operator;
|
|
903
|
+
}
|
|
904
|
+
return selopts;
|
|
905
|
+
}
|
|
876
906
|
/**
|
|
877
907
|
* Count the number of rows in db table. The argument is a where-expression with conditions the
|
|
878
908
|
* counted rows should match. countRows returns the number of matching rows wrapped in a promise.
|
|
@@ -1114,20 +1144,26 @@ class Table {
|
|
|
1114
1144
|
await trigPromise;
|
|
1115
1145
|
}
|
|
1116
1146
|
}
|
|
1117
|
-
async insert_history_row(
|
|
1147
|
+
async insert_history_row(v0, retry = 0) {
|
|
1118
1148
|
// sometimes there is a race condition in history inserts
|
|
1119
1149
|
// https://dba.stackexchange.com/questions/212580/concurrent-transactions-result-in-race-condition-with-unique-constraint-on-inser
|
|
1120
1150
|
// solution: retry 3 times, if fails run with on conflict do nothing
|
|
1151
|
+
//legacy workaround: delete calc fields which may be in row
|
|
1152
|
+
const calcFields = this.fields.filter((f) => f.calculated && !f.stored);
|
|
1153
|
+
const v1 = { ...v0 };
|
|
1154
|
+
calcFields.forEach((f) => {
|
|
1155
|
+
// delete v1[f.name];
|
|
1156
|
+
});
|
|
1121
1157
|
if (retry < 3) {
|
|
1122
1158
|
try {
|
|
1123
|
-
await db_1.default.insert(this.name + "__history",
|
|
1159
|
+
await db_1.default.insert(this.name + "__history", v1);
|
|
1124
1160
|
}
|
|
1125
1161
|
catch (error) {
|
|
1126
|
-
await this.insert_history_row(
|
|
1162
|
+
await this.insert_history_row(v1, retry + 1);
|
|
1127
1163
|
}
|
|
1128
1164
|
}
|
|
1129
1165
|
else {
|
|
1130
|
-
await db_1.default.insert(this.name + "__history",
|
|
1166
|
+
await db_1.default.insert(this.name + "__history", v1, {
|
|
1131
1167
|
onConflictDoNothing: true,
|
|
1132
1168
|
});
|
|
1133
1169
|
}
|
|
@@ -1509,7 +1545,9 @@ class Table {
|
|
|
1509
1545
|
async create_history_table() {
|
|
1510
1546
|
const schemaPrefix = db_1.default.getTenantSchemaPrefix();
|
|
1511
1547
|
const fields = this.fields;
|
|
1512
|
-
const flds = fields
|
|
1548
|
+
const flds = fields
|
|
1549
|
+
.filter((f) => !f.calculated || f.stored)
|
|
1550
|
+
.map((f) => `,"${(0, internal_1.sqlsanitize)(f.name)}" ${f.sql_bare_type}`);
|
|
1513
1551
|
const pk = fields.find((f) => f.primary_key)?.name;
|
|
1514
1552
|
if (!pk) {
|
|
1515
1553
|
throw new Error("Unable to find a field with a primary key.");
|
|
@@ -1682,7 +1720,7 @@ class Table {
|
|
|
1682
1720
|
* @returns {Promise<*>}
|
|
1683
1721
|
*/
|
|
1684
1722
|
async get_history(id) {
|
|
1685
|
-
return await db_1.default.select(`${(0, internal_1.sqlsanitize)(this.name)}__history`, { id }, { orderBy: "_version" });
|
|
1723
|
+
return await db_1.default.select(`${(0, internal_1.sqlsanitize)(this.name)}__history`, id ? { id } : {}, { orderBy: "_version" });
|
|
1686
1724
|
}
|
|
1687
1725
|
/**
|
|
1688
1726
|
* Enable constraints
|
|
@@ -2503,20 +2541,20 @@ class Table {
|
|
|
2503
2541
|
const whereObj = prefixFieldsInWhere(opts.where, "a");
|
|
2504
2542
|
const { where, values } = (0, internal_1.mkWhere)(whereObj, db_1.default.isSQLite);
|
|
2505
2543
|
(0, query_1.process_aggregations)(this, aggregations, fldNms, values, schema);
|
|
2506
|
-
const selectopts = {
|
|
2544
|
+
const selectopts = this.processSelectOptions({
|
|
2507
2545
|
limit: opts.limit,
|
|
2508
2546
|
orderBy: opts.orderBy &&
|
|
2509
|
-
((0, internal_1.orderByIsObject)(opts.orderBy)
|
|
2547
|
+
((0, internal_1.orderByIsObject)(opts.orderBy) || (0, internal_1.orderByIsOperator)(opts.orderBy)
|
|
2510
2548
|
? opts.orderBy
|
|
2511
2549
|
: joinFields[opts.orderBy] || aggregations[opts.orderBy]
|
|
2512
2550
|
? opts.orderBy
|
|
2513
|
-
: opts.orderBy.toLowerCase() === "random()"
|
|
2551
|
+
: opts.orderBy.toLowerCase?.() === "random()"
|
|
2514
2552
|
? opts.orderBy
|
|
2515
2553
|
: "a." + opts.orderBy),
|
|
2516
2554
|
orderDesc: opts.orderDesc,
|
|
2517
2555
|
offset: opts.offset,
|
|
2518
|
-
};
|
|
2519
|
-
const sql = `SELECT ${fldNms.join()} FROM ${schema}"${(0, internal_1.sqlsanitize)(this.name)}" a ${joinq} ${where} ${(0, internal_1.mkSelectOptions)(selectopts)}`;
|
|
2556
|
+
});
|
|
2557
|
+
const sql = `SELECT ${fldNms.join()} FROM ${schema}"${(0, internal_1.sqlsanitize)(this.name)}" a ${joinq} ${where} ${(0, internal_1.mkSelectOptions)(selectopts, values, db_1.default.is_sqlite)}`;
|
|
2520
2558
|
return { sql, values, joinFields };
|
|
2521
2559
|
}
|
|
2522
2560
|
/**
|