@budibase/server 1.0.49-alpha.7 → 1.0.50-alpha.0
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/builder/assets/{index.83c0944f.css → index.c0cc369d.css} +6 -1
- package/builder/assets/{index.b7cd931c.js → index.ff2bad21.js} +190 -190
- package/builder/assets/{vendor.d526bfe8.js → vendor.5ad9695a.js} +202 -106
- package/builder/index.html +3 -3
- package/coverage/clover.xml +195 -207
- package/coverage/coverage-final.json +4 -4
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +4 -4
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +14 -14
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +29 -116
- package/coverage/lcov-report/api/controllers/row/index.html +11 -11
- package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +41 -35
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/automations/utils.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +1 -1
- package/coverage/lcov-report/db/utils.js.html +1 -1
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +28 -28
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +14 -14
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +10 -31
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +314 -328
- package/dist/api/controllers/row/ExternalRequest.js +14 -4
- package/dist/api/controllers/row/external.js +10 -18
- package/dist/api/controllers/static/index.js +4 -7
- package/dist/api/controllers/user.js +27 -25
- package/dist/integrations/base/sql.js +49 -15
- package/dist/package.json +4 -4
- package/dist/threads/query.js +2 -8
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/scripts/integrations/mssql/data/Dockerfile +1 -1
- package/scripts/integrations/mssql/data/setup.sql +17 -4
- package/scripts/integrations/postgres/init.sql +11 -6
- package/src/api/controllers/row/ExternalRequest.ts +14 -1
- package/src/api/controllers/row/external.js +23 -52
- package/src/api/controllers/static/index.js +4 -6
- package/src/api/controllers/user.js +29 -27
- package/src/integrations/base/sql.ts +61 -22
- package/src/threads/query.js +2 -9
|
@@ -155,7 +155,7 @@ var External;
|
|
|
155
155
|
thisRow._id = generateIdForRow(row, table);
|
|
156
156
|
thisRow.tableId = table._id;
|
|
157
157
|
thisRow._rev = "rev";
|
|
158
|
-
return thisRow;
|
|
158
|
+
return utils_4.processFormulas(table, thisRow);
|
|
159
159
|
}
|
|
160
160
|
function fixArrayTypes(row, table) {
|
|
161
161
|
for (let [fieldName, schema] of Object.entries(table.schema)) {
|
|
@@ -278,14 +278,24 @@ var External;
|
|
|
278
278
|
* This iterates through the returned rows and works out what elements of the rows
|
|
279
279
|
* actually match up to another row (based on primary keys) - this is pretty specific
|
|
280
280
|
* to SQL and the way that SQL relationships are returned based on joins.
|
|
281
|
+
* This is complicated, but the idea is that when a SQL query returns all the relations
|
|
282
|
+
* will be separate rows, with all of the data in each row. We have to decipher what comes
|
|
283
|
+
* from where (which tables) and how to convert that into budibase columns.
|
|
281
284
|
*/
|
|
282
|
-
updateRelationshipColumns(row, rows, relationships) {
|
|
285
|
+
updateRelationshipColumns(table, row, rows, relationships) {
|
|
283
286
|
const columns = {};
|
|
284
287
|
for (let relationship of relationships) {
|
|
285
288
|
const linkedTable = this.tables[relationship.tableName];
|
|
286
289
|
if (!linkedTable) {
|
|
287
290
|
continue;
|
|
288
291
|
}
|
|
292
|
+
const fromColumn = `${table.name}.${relationship.from}`;
|
|
293
|
+
const toColumn = `${linkedTable.name}.${relationship.to}`;
|
|
294
|
+
// this is important when working with multiple relationships
|
|
295
|
+
// between the same tables, don't want to overlap/multiply the relations
|
|
296
|
+
if (!relationship.through && row[fromColumn] !== row[toColumn]) {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
289
299
|
let linked = basicProcessing(row, linkedTable);
|
|
290
300
|
if (!linked._id) {
|
|
291
301
|
continue;
|
|
@@ -323,7 +333,7 @@ var External;
|
|
|
323
333
|
row._id = rowId;
|
|
324
334
|
// this is a relationship of some sort
|
|
325
335
|
if (finalRows[rowId]) {
|
|
326
|
-
finalRows = this.updateRelationshipColumns(row, finalRows, relationships);
|
|
336
|
+
finalRows = this.updateRelationshipColumns(table, row, finalRows, relationships);
|
|
327
337
|
continue;
|
|
328
338
|
}
|
|
329
339
|
const thisRow = fixArrayTypes(basicProcessing(row, table), table);
|
|
@@ -332,7 +342,7 @@ var External;
|
|
|
332
342
|
}
|
|
333
343
|
finalRows[thisRow._id] = thisRow;
|
|
334
344
|
// do this at end once its been added to the final rows
|
|
335
|
-
finalRows = this.updateRelationshipColumns(row, finalRows, relationships);
|
|
345
|
+
finalRows = this.updateRelationshipColumns(table, row, finalRows, relationships);
|
|
336
346
|
}
|
|
337
347
|
return utils_4.processFormulas(table, Object.values(finalRows));
|
|
338
348
|
}
|
|
@@ -43,22 +43,20 @@ function handleRequest(operation, tableId, opts = {}) {
|
|
|
43
43
|
}
|
|
44
44
|
exports.handleRequest = handleRequest;
|
|
45
45
|
exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
const appId = ctx.appId;
|
|
47
46
|
const inputs = ctx.request.body;
|
|
48
47
|
const tableId = ctx.params.tableId;
|
|
49
48
|
const id = breakRowIdField(inputs._id);
|
|
50
49
|
// don't save the ID to db
|
|
51
50
|
delete inputs._id;
|
|
52
|
-
return handleRequest(
|
|
51
|
+
return handleRequest(DataSourceOperation.UPDATE, tableId, {
|
|
53
52
|
id,
|
|
54
53
|
row: inputs,
|
|
55
54
|
});
|
|
56
55
|
});
|
|
57
56
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
-
const appId = ctx.appId;
|
|
59
57
|
const inputs = ctx.request.body;
|
|
60
58
|
const tableId = ctx.params.tableId;
|
|
61
|
-
return handleRequest(
|
|
59
|
+
return handleRequest(DataSourceOperation.CREATE, tableId, {
|
|
62
60
|
row: inputs,
|
|
63
61
|
});
|
|
64
62
|
});
|
|
@@ -70,35 +68,31 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
70
68
|
return exports.fetch(ctx);
|
|
71
69
|
});
|
|
72
70
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
const appId = ctx.appId;
|
|
74
71
|
const tableId = ctx.params.tableId;
|
|
75
|
-
return handleRequest(
|
|
72
|
+
return handleRequest(DataSourceOperation.READ, tableId);
|
|
76
73
|
});
|
|
77
74
|
exports.find = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
-
const appId = ctx.appId;
|
|
79
75
|
const id = ctx.params.rowId;
|
|
80
76
|
const tableId = ctx.params.tableId;
|
|
81
|
-
const response = yield handleRequest(
|
|
77
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
82
78
|
id,
|
|
83
79
|
});
|
|
84
80
|
return response ? response[0] : response;
|
|
85
81
|
});
|
|
86
82
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
-
const appId = ctx.appId;
|
|
88
83
|
const tableId = ctx.params.tableId;
|
|
89
84
|
const id = ctx.request.body._id;
|
|
90
|
-
const { row } = yield handleRequest(
|
|
85
|
+
const { row } = yield handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
91
86
|
id,
|
|
92
87
|
});
|
|
93
88
|
return { response: { ok: true }, row };
|
|
94
89
|
});
|
|
95
90
|
exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
const appId = ctx.appId;
|
|
97
91
|
const { rows } = ctx.request.body;
|
|
98
92
|
const tableId = ctx.params.tableId;
|
|
99
93
|
let promises = [];
|
|
100
94
|
for (let row of rows) {
|
|
101
|
-
promises.push(handleRequest(
|
|
95
|
+
promises.push(handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
102
96
|
id: breakRowIdField(row._id),
|
|
103
97
|
}));
|
|
104
98
|
}
|
|
@@ -106,7 +100,6 @@ exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
106
100
|
return { response: { ok: true }, rows: responses.map(resp => resp.row) };
|
|
107
101
|
});
|
|
108
102
|
exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
-
const appId = ctx.appId;
|
|
110
103
|
const tableId = ctx.params.tableId;
|
|
111
104
|
const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
|
|
112
105
|
let { bookmark, limit } = params;
|
|
@@ -135,14 +128,14 @@ exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
135
128
|
[params.sort]: direction,
|
|
136
129
|
};
|
|
137
130
|
}
|
|
138
|
-
const rows = yield handleRequest(
|
|
131
|
+
const rows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
139
132
|
filters: query,
|
|
140
133
|
sort,
|
|
141
134
|
paginate: paginateObj,
|
|
142
135
|
});
|
|
143
136
|
let hasNextPage = false;
|
|
144
137
|
if (paginate && rows.length === limit) {
|
|
145
|
-
const nextRows = yield handleRequest(
|
|
138
|
+
const nextRows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
146
139
|
filters: query,
|
|
147
140
|
sort,
|
|
148
141
|
paginate: {
|
|
@@ -160,7 +153,6 @@ exports.validate = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
160
153
|
return { valid: true };
|
|
161
154
|
});
|
|
162
155
|
exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
163
|
-
const appId = ctx.appId;
|
|
164
156
|
const id = ctx.params.rowId;
|
|
165
157
|
const tableId = ctx.params.tableId;
|
|
166
158
|
const { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
@@ -170,7 +162,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
|
|
|
170
162
|
ctx.throw(400, "Datasource has not been configured for plus API.");
|
|
171
163
|
}
|
|
172
164
|
const tables = datasource.entities;
|
|
173
|
-
const response = yield handleRequest(
|
|
165
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
174
166
|
id,
|
|
175
167
|
datasource,
|
|
176
168
|
});
|
|
@@ -189,7 +181,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
|
|
|
189
181
|
const linkedTable = tables[breakExternalTableId(linkedTableId).tableName];
|
|
190
182
|
// don't support composite keys right now
|
|
191
183
|
const linkedIds = links.map(link => breakRowIdField(link._id)[0]);
|
|
192
|
-
row[fieldName] = yield handleRequest(
|
|
184
|
+
row[fieldName] = yield handleRequest(DataSourceOperation.READ, linkedTableId, {
|
|
193
185
|
tables,
|
|
194
186
|
filters: {
|
|
195
187
|
oneOf: {
|
|
@@ -21,7 +21,7 @@ const { clientLibraryPath } = require("../../../utilities");
|
|
|
21
21
|
const { upload } = require("../../../utilities/fileSystem");
|
|
22
22
|
const { attachmentsRelativeURL } = require("../../../utilities");
|
|
23
23
|
const { DocumentTypes } = require("../../../db/utils");
|
|
24
|
-
const { getAppDB } = require("@budibase/backend-core/context");
|
|
24
|
+
const { getAppDB, updateAppId } = require("@budibase/backend-core/context");
|
|
25
25
|
const AWS = require("aws-sdk");
|
|
26
26
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1";
|
|
27
27
|
function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
@@ -50,12 +50,9 @@ function getAppIdFromUrl(ctx) {
|
|
|
50
50
|
// search prod apps for a url that matches, exclude dev where id is always used
|
|
51
51
|
const apps = yield getAllApps({ dev: false });
|
|
52
52
|
const app = apps.filter(a => a.url && a.url.toLowerCase() === possibleAppUrl)[0];
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
else {
|
|
57
|
-
return ctx.params.appId;
|
|
58
|
-
}
|
|
53
|
+
const appId = app && app.appId ? app.appId : ctx.params.appId;
|
|
54
|
+
updateAppId(appId);
|
|
55
|
+
return appId;
|
|
59
56
|
});
|
|
60
57
|
}
|
|
61
58
|
exports.serveBuilder = function (ctx) {
|
|
@@ -16,7 +16,7 @@ const { isEqual } = require("lodash");
|
|
|
16
16
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
|
|
17
17
|
const { getDevelopmentAppID, getProdAppIDs, dbExists, } = require("@budibase/backend-core/db");
|
|
18
18
|
const { UserStatus } = require("@budibase/backend-core/constants");
|
|
19
|
-
const { getAppDB } = require("@budibase/backend-core/context");
|
|
19
|
+
const { getAppDB, doInAppContext } = require("@budibase/backend-core/context");
|
|
20
20
|
function rawMetadata() {
|
|
21
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22
22
|
const db = getAppDB();
|
|
@@ -97,31 +97,33 @@ exports.syncUser = function (ctx) {
|
|
|
97
97
|
if (!(yield dbExists(appId))) {
|
|
98
98
|
continue;
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
catch (err) {
|
|
107
|
-
if (deleting) {
|
|
108
|
-
continue;
|
|
100
|
+
yield doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
const db = getAppDB();
|
|
102
|
+
const metadataId = generateUserMetadataID(userId);
|
|
103
|
+
let metadata;
|
|
104
|
+
try {
|
|
105
|
+
metadata = yield db.get(metadataId);
|
|
109
106
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (deleting) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
metadata = {
|
|
112
|
+
tableId: InternalTables.USER_METADATA,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// assign the roleId for the metadata doc
|
|
116
|
+
if (roleId) {
|
|
117
|
+
metadata.roleId = roleId;
|
|
118
|
+
}
|
|
119
|
+
let combined = !deleting
|
|
120
|
+
? combineMetadataAndUser(user, metadata)
|
|
121
|
+
: Object.assign(Object.assign({}, metadata), { status: UserStatus.INACTIVE, metadata: BUILTIN_ROLE_IDS.PUBLIC });
|
|
122
|
+
// if its null then there was no updates required
|
|
123
|
+
if (combined) {
|
|
124
|
+
yield db.put(combined);
|
|
125
|
+
}
|
|
126
|
+
}));
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
ctx.body = {
|
|
@@ -159,15 +159,14 @@ class InternalBuilder {
|
|
|
159
159
|
addSorting(query, json) {
|
|
160
160
|
var _a;
|
|
161
161
|
let { sort, paginate } = json;
|
|
162
|
-
if (!sort) {
|
|
163
|
-
return query;
|
|
164
|
-
}
|
|
165
162
|
const table = (_a = json.meta) === null || _a === void 0 ? void 0 : _a.table;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
163
|
+
if (sort) {
|
|
164
|
+
for (let [key, value] of Object.entries(sort)) {
|
|
165
|
+
const direction = value === datasource_1.SortDirection.ASCENDING ? "asc" : "desc";
|
|
166
|
+
query = query.orderBy(`${table === null || table === void 0 ? void 0 : table.name}.${key}`, direction);
|
|
167
|
+
}
|
|
169
168
|
}
|
|
170
|
-
if (this.client === utils_1.SqlClients.MS_SQL &&
|
|
169
|
+
else if (this.client === utils_1.SqlClients.MS_SQL && (paginate === null || paginate === void 0 ? void 0 : paginate.limit)) {
|
|
171
170
|
// @ts-ignore
|
|
172
171
|
query = query.orderBy(`${table === null || table === void 0 ? void 0 : table.name}.${table === null || table === void 0 ? void 0 : table.primary[0]}`);
|
|
173
172
|
}
|
|
@@ -177,20 +176,55 @@ class InternalBuilder {
|
|
|
177
176
|
if (!relationships) {
|
|
178
177
|
return query;
|
|
179
178
|
}
|
|
179
|
+
const tableSets = {};
|
|
180
|
+
// aggregate into table sets (all the same to tables)
|
|
180
181
|
for (let relationship of relationships) {
|
|
181
|
-
const
|
|
182
|
-
|
|
182
|
+
const keyObj = {
|
|
183
|
+
toTable: relationship.tableName,
|
|
184
|
+
throughTable: undefined,
|
|
185
|
+
};
|
|
186
|
+
if (relationship.through) {
|
|
187
|
+
keyObj.throughTable = relationship.through;
|
|
188
|
+
}
|
|
189
|
+
const key = JSON.stringify(keyObj);
|
|
190
|
+
if (tableSets[key]) {
|
|
191
|
+
tableSets[key].push(relationship);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
tableSets[key] = [relationship];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
for (let [key, relationships] of Object.entries(tableSets)) {
|
|
198
|
+
const { toTable, throughTable } = JSON.parse(key);
|
|
199
|
+
if (!throughTable) {
|
|
183
200
|
// @ts-ignore
|
|
184
|
-
query = query.
|
|
201
|
+
query = query.join(toTable, function () {
|
|
202
|
+
for (let relationship of relationships) {
|
|
203
|
+
const from = relationship.from, to = relationship.to;
|
|
204
|
+
// @ts-ignore
|
|
205
|
+
this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`);
|
|
206
|
+
}
|
|
207
|
+
}, "left");
|
|
185
208
|
}
|
|
186
209
|
else {
|
|
187
|
-
const throughTable = relationship.through;
|
|
188
|
-
const fromPrimary = relationship.fromPrimary;
|
|
189
|
-
const toPrimary = relationship.toPrimary;
|
|
190
210
|
query = query
|
|
191
211
|
// @ts-ignore
|
|
192
|
-
.
|
|
193
|
-
|
|
212
|
+
.join(throughTable, function () {
|
|
213
|
+
for (let relationship of relationships) {
|
|
214
|
+
const fromPrimary = relationship.fromPrimary;
|
|
215
|
+
const from = relationship.from;
|
|
216
|
+
// @ts-ignore
|
|
217
|
+
this.orOn(`${fromTable}.${fromPrimary}`, "=", `${throughTable}.${from}`);
|
|
218
|
+
}
|
|
219
|
+
}, "left")
|
|
220
|
+
.join(toTable, function () {
|
|
221
|
+
for (let relationship of relationships) {
|
|
222
|
+
const toPrimary = relationship.toPrimary;
|
|
223
|
+
const to = relationship.to;
|
|
224
|
+
// @ts-ignore
|
|
225
|
+
this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`);
|
|
226
|
+
}
|
|
227
|
+
}, "left");
|
|
194
228
|
}
|
|
195
229
|
}
|
|
196
230
|
return query.limit(BASE_LIMIT);
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.49
|
|
4
|
+
"version": "1.0.49",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
"license": "GPL-3.0",
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
73
|
-
"@budibase/backend-core": "^1.0.49
|
|
74
|
-
"@budibase/client": "^1.0.49
|
|
75
|
-
"@budibase/string-templates": "^1.0.49
|
|
73
|
+
"@budibase/backend-core": "^1.0.49",
|
|
74
|
+
"@budibase/client": "^1.0.49",
|
|
75
|
+
"@budibase/string-templates": "^1.0.49",
|
|
76
76
|
"@bull-board/api": "^3.7.0",
|
|
77
77
|
"@bull-board/koa": "^3.7.0",
|
|
78
78
|
"@elastic/elasticsearch": "7.10.0",
|
package/dist/threads/query.js
CHANGED
|
@@ -14,8 +14,6 @@ const ScriptRunner = require("../utilities/scriptRunner");
|
|
|
14
14
|
const { integrations } = require("../integrations");
|
|
15
15
|
const { processStringSync } = require("@budibase/string-templates");
|
|
16
16
|
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
|
|
17
|
-
const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/);
|
|
18
|
-
const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/);
|
|
19
17
|
class QueryRunner {
|
|
20
18
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
21
19
|
this.datasource = input.datasource;
|
|
@@ -180,12 +178,8 @@ class QueryRunner {
|
|
|
180
178
|
}
|
|
181
179
|
else if (typeof fields[key] === "string") {
|
|
182
180
|
// enrich string value as normal
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (IS_HANDLEBARS.test(value) && !IS_TRIPLE_BRACE.test(value)) {
|
|
186
|
-
value = `{${value}}`;
|
|
187
|
-
}
|
|
188
|
-
enrichedQuery[key] = processStringSync(value, parameters, {
|
|
181
|
+
enrichedQuery[key] = processStringSync(fields[key], parameters, {
|
|
182
|
+
noEscaping: true,
|
|
189
183
|
noHelpers: true,
|
|
190
184
|
});
|
|
191
185
|
}
|