@budibase/server 1.0.49-alpha.8 → 1.0.50
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.94a9250f.js → index.ee035348.js} +190 -190
- package/builder/assets/{vendor.d526bfe8.js → vendor.5ad9695a.js} +202 -106
- package/builder/index.html +3 -3
- package/coverage/clover.xml +140 -144
- package/coverage/coverage-final.json +3 -3
- 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 +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- 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 +22 -22
- 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 +225 -231
- package/dist/api/controllers/row/ExternalRequest.js +14 -4
- 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/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
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.50",
|
|
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.
|
|
74
|
-
"@budibase/client": "^1.0.
|
|
75
|
-
"@budibase/string-templates": "^1.0.
|
|
73
|
+
"@budibase/backend-core": "^1.0.50",
|
|
74
|
+
"@budibase/client": "^1.0.50",
|
|
75
|
+
"@budibase/string-templates": "^1.0.50",
|
|
76
76
|
"@bull-board/api": "^3.7.0",
|
|
77
77
|
"@bull-board/koa": "^3.7.0",
|
|
78
78
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -168,5 +168,5 @@
|
|
|
168
168
|
"optionalDependencies": {
|
|
169
169
|
"oracledb": "^5.3.0"
|
|
170
170
|
},
|
|
171
|
-
"gitHead": "
|
|
171
|
+
"gitHead": "fc00b828d81df5fa1d936bd5503703a27162ced1"
|
|
172
172
|
}
|
|
@@ -48,7 +48,20 @@ INSERT tasks
|
|
|
48
48
|
VALUES
|
|
49
49
|
('Processing', 1);
|
|
50
50
|
|
|
51
|
-
INSERT people
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
('
|
|
51
|
+
INSERT INTO people (name, age)
|
|
52
|
+
VALUES ('Bob', '30'),
|
|
53
|
+
('Bert', '10'),
|
|
54
|
+
('Jack', '12'),
|
|
55
|
+
('Mike', '31'),
|
|
56
|
+
('Dave', '44'),
|
|
57
|
+
('Jim', '43'),
|
|
58
|
+
('Kerry', '32'),
|
|
59
|
+
('Julie', '12'),
|
|
60
|
+
('Kim', '55'),
|
|
61
|
+
('Andy', '33'),
|
|
62
|
+
('John', '22'),
|
|
63
|
+
('Ruth', '66'),
|
|
64
|
+
('Robert', '88'),
|
|
65
|
+
('Bobert', '99'),
|
|
66
|
+
('Jan', '22'),
|
|
67
|
+
('Megan', '11');
|
|
@@ -9,12 +9,16 @@ CREATE TABLE Persons (
|
|
|
9
9
|
);
|
|
10
10
|
CREATE TABLE Tasks (
|
|
11
11
|
TaskID SERIAL PRIMARY KEY,
|
|
12
|
-
|
|
12
|
+
ExecutorID INT,
|
|
13
|
+
QaID INT,
|
|
13
14
|
Completed BOOLEAN,
|
|
14
15
|
TaskName varchar(255),
|
|
15
|
-
CONSTRAINT
|
|
16
|
-
FOREIGN KEY(
|
|
17
|
-
REFERENCES Persons(PersonID)
|
|
16
|
+
CONSTRAINT fkexecutor
|
|
17
|
+
FOREIGN KEY(ExecutorID)
|
|
18
|
+
REFERENCES Persons(PersonID),
|
|
19
|
+
CONSTRAINT fkqa
|
|
20
|
+
FOREIGN KEY(QaID)
|
|
21
|
+
REFERENCES Persons(PersonID)
|
|
18
22
|
);
|
|
19
23
|
CREATE TABLE Products (
|
|
20
24
|
ProductID SERIAL PRIMARY KEY,
|
|
@@ -32,8 +36,9 @@ CREATE TABLE Products_Tasks (
|
|
|
32
36
|
PRIMARY KEY (ProductID, TaskID)
|
|
33
37
|
);
|
|
34
38
|
INSERT INTO Persons (FirstName, LastName, Address, City) VALUES ('Mike', 'Hughes', '123 Fake Street', 'Belfast');
|
|
35
|
-
INSERT INTO
|
|
36
|
-
INSERT INTO Tasks (
|
|
39
|
+
INSERT INTO Persons (FirstName, LastName, Address, City) Values ('John', 'Smith', '64 Updown Road', 'Dublin');
|
|
40
|
+
INSERT INTO Tasks (ExecutorID, QaID, TaskName, Completed) VALUES (1, 2, 'assembling', TRUE);
|
|
41
|
+
INSERT INTO Tasks (ExecutorID, QaID, TaskName, Completed) VALUES (2, 1, 'processing', FALSE);
|
|
37
42
|
INSERT INTO Products (ProductName) VALUES ('Computers');
|
|
38
43
|
INSERT INTO Products (ProductName) VALUES ('Laptops');
|
|
39
44
|
INSERT INTO Products (ProductName) VALUES ('Chairs');
|
|
@@ -184,7 +184,7 @@ module External {
|
|
|
184
184
|
thisRow._id = generateIdForRow(row, table)
|
|
185
185
|
thisRow.tableId = table._id
|
|
186
186
|
thisRow._rev = "rev"
|
|
187
|
-
return thisRow
|
|
187
|
+
return processFormulas(table, thisRow)
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
function fixArrayTypes(row: Row, table: Table) {
|
|
@@ -327,8 +327,12 @@ module External {
|
|
|
327
327
|
* This iterates through the returned rows and works out what elements of the rows
|
|
328
328
|
* actually match up to another row (based on primary keys) - this is pretty specific
|
|
329
329
|
* to SQL and the way that SQL relationships are returned based on joins.
|
|
330
|
+
* This is complicated, but the idea is that when a SQL query returns all the relations
|
|
331
|
+
* will be separate rows, with all of the data in each row. We have to decipher what comes
|
|
332
|
+
* from where (which tables) and how to convert that into budibase columns.
|
|
330
333
|
*/
|
|
331
334
|
updateRelationshipColumns(
|
|
335
|
+
table: Table,
|
|
332
336
|
row: Row,
|
|
333
337
|
rows: { [key: string]: Row },
|
|
334
338
|
relationships: RelationshipsJson[]
|
|
@@ -339,6 +343,13 @@ module External {
|
|
|
339
343
|
if (!linkedTable) {
|
|
340
344
|
continue
|
|
341
345
|
}
|
|
346
|
+
const fromColumn = `${table.name}.${relationship.from}`
|
|
347
|
+
const toColumn = `${linkedTable.name}.${relationship.to}`
|
|
348
|
+
// this is important when working with multiple relationships
|
|
349
|
+
// between the same tables, don't want to overlap/multiply the relations
|
|
350
|
+
if (!relationship.through && row[fromColumn] !== row[toColumn]) {
|
|
351
|
+
continue
|
|
352
|
+
}
|
|
342
353
|
let linked = basicProcessing(row, linkedTable)
|
|
343
354
|
if (!linked._id) {
|
|
344
355
|
continue
|
|
@@ -386,6 +397,7 @@ module External {
|
|
|
386
397
|
// this is a relationship of some sort
|
|
387
398
|
if (finalRows[rowId]) {
|
|
388
399
|
finalRows = this.updateRelationshipColumns(
|
|
400
|
+
table,
|
|
389
401
|
row,
|
|
390
402
|
finalRows,
|
|
391
403
|
relationships
|
|
@@ -399,6 +411,7 @@ module External {
|
|
|
399
411
|
finalRows[thisRow._id] = thisRow
|
|
400
412
|
// do this at end once its been added to the final rows
|
|
401
413
|
finalRows = this.updateRelationshipColumns(
|
|
414
|
+
table,
|
|
402
415
|
row,
|
|
403
416
|
finalRows,
|
|
404
417
|
relationships
|
|
@@ -16,7 +16,7 @@ const { clientLibraryPath } = require("../../../utilities")
|
|
|
16
16
|
const { upload } = require("../../../utilities/fileSystem")
|
|
17
17
|
const { attachmentsRelativeURL } = require("../../../utilities")
|
|
18
18
|
const { DocumentTypes } = require("../../../db/utils")
|
|
19
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
19
|
+
const { getAppDB, updateAppId } = require("@budibase/backend-core/context")
|
|
20
20
|
const AWS = require("aws-sdk")
|
|
21
21
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1"
|
|
22
22
|
|
|
@@ -49,11 +49,9 @@ async function getAppIdFromUrl(ctx) {
|
|
|
49
49
|
a => a.url && a.url.toLowerCase() === possibleAppUrl
|
|
50
50
|
)[0]
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return ctx.params.appId
|
|
56
|
-
}
|
|
52
|
+
const appId = app && app.appId ? app.appId : ctx.params.appId
|
|
53
|
+
updateAppId(appId)
|
|
54
|
+
return appId
|
|
57
55
|
}
|
|
58
56
|
|
|
59
57
|
exports.serveBuilder = async function (ctx) {
|
|
@@ -14,7 +14,7 @@ const {
|
|
|
14
14
|
dbExists,
|
|
15
15
|
} = require("@budibase/backend-core/db")
|
|
16
16
|
const { UserStatus } = require("@budibase/backend-core/constants")
|
|
17
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
17
|
+
const { getAppDB, doInAppContext } = require("@budibase/backend-core/context")
|
|
18
18
|
|
|
19
19
|
async function rawMetadata() {
|
|
20
20
|
const db = getAppDB()
|
|
@@ -105,34 +105,36 @@ exports.syncUser = async function (ctx) {
|
|
|
105
105
|
if (!(await dbExists(appId))) {
|
|
106
106
|
continue
|
|
107
107
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
108
|
+
await doInAppContext(appId, async () => {
|
|
109
|
+
const db = getAppDB()
|
|
110
|
+
const metadataId = generateUserMetadataID(userId)
|
|
111
|
+
let metadata
|
|
112
|
+
try {
|
|
113
|
+
metadata = await db.get(metadataId)
|
|
114
|
+
} catch (err) {
|
|
115
|
+
if (deleting) {
|
|
116
|
+
return
|
|
117
|
+
}
|
|
118
|
+
metadata = {
|
|
119
|
+
tableId: InternalTables.USER_METADATA,
|
|
120
|
+
}
|
|
116
121
|
}
|
|
117
|
-
metadata
|
|
118
|
-
|
|
122
|
+
// assign the roleId for the metadata doc
|
|
123
|
+
if (roleId) {
|
|
124
|
+
metadata.roleId = roleId
|
|
119
125
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
// if its null then there was no updates required
|
|
133
|
-
if (combined) {
|
|
134
|
-
await db.put(combined)
|
|
135
|
-
}
|
|
126
|
+
let combined = !deleting
|
|
127
|
+
? combineMetadataAndUser(user, metadata)
|
|
128
|
+
: {
|
|
129
|
+
...metadata,
|
|
130
|
+
status: UserStatus.INACTIVE,
|
|
131
|
+
metadata: BUILTIN_ROLE_IDS.PUBLIC,
|
|
132
|
+
}
|
|
133
|
+
// if its null then there was no updates required
|
|
134
|
+
if (combined) {
|
|
135
|
+
await db.put(combined)
|
|
136
|
+
}
|
|
137
|
+
})
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
140
|
ctx.body = {
|
|
@@ -166,15 +166,13 @@ class InternalBuilder {
|
|
|
166
166
|
|
|
167
167
|
addSorting(query: KnexQuery, json: QueryJson): KnexQuery {
|
|
168
168
|
let { sort, paginate } = json
|
|
169
|
-
if (!sort) {
|
|
170
|
-
return query
|
|
171
|
-
}
|
|
172
169
|
const table = json.meta?.table
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
170
|
+
if (sort) {
|
|
171
|
+
for (let [key, value] of Object.entries(sort)) {
|
|
172
|
+
const direction = value === SortDirection.ASCENDING ? "asc" : "desc"
|
|
173
|
+
query = query.orderBy(`${table?.name}.${key}`, direction)
|
|
174
|
+
}
|
|
175
|
+
} else if (this.client === SqlClients.MS_SQL && paginate?.limit) {
|
|
178
176
|
// @ts-ignore
|
|
179
177
|
query = query.orderBy(`${table?.name}.${table?.primary[0]}`)
|
|
180
178
|
}
|
|
@@ -191,29 +189,70 @@ class InternalBuilder {
|
|
|
191
189
|
if (!relationships) {
|
|
192
190
|
return query
|
|
193
191
|
}
|
|
192
|
+
const tableSets: Record<string, [any]> = {}
|
|
193
|
+
// aggregate into table sets (all the same to tables)
|
|
194
194
|
for (let relationship of relationships) {
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
195
|
+
const keyObj: { toTable: string; throughTable: string | undefined } = {
|
|
196
|
+
toTable: relationship.tableName,
|
|
197
|
+
throughTable: undefined,
|
|
198
|
+
}
|
|
199
|
+
if (relationship.through) {
|
|
200
|
+
keyObj.throughTable = relationship.through
|
|
201
|
+
}
|
|
202
|
+
const key = JSON.stringify(keyObj)
|
|
203
|
+
if (tableSets[key]) {
|
|
204
|
+
tableSets[key].push(relationship)
|
|
205
|
+
} else {
|
|
206
|
+
tableSets[key] = [relationship]
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
for (let [key, relationships] of Object.entries(tableSets)) {
|
|
210
|
+
const { toTable, throughTable } = JSON.parse(key)
|
|
211
|
+
if (!throughTable) {
|
|
199
212
|
// @ts-ignore
|
|
200
|
-
query = query.
|
|
213
|
+
query = query.join(
|
|
201
214
|
toTable,
|
|
202
|
-
|
|
203
|
-
|
|
215
|
+
function () {
|
|
216
|
+
for (let relationship of relationships) {
|
|
217
|
+
const from = relationship.from,
|
|
218
|
+
to = relationship.to
|
|
219
|
+
// @ts-ignore
|
|
220
|
+
this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`)
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"left"
|
|
204
224
|
)
|
|
205
225
|
} else {
|
|
206
|
-
const throughTable = relationship.through
|
|
207
|
-
const fromPrimary = relationship.fromPrimary
|
|
208
|
-
const toPrimary = relationship.toPrimary
|
|
209
226
|
query = query
|
|
210
227
|
// @ts-ignore
|
|
211
|
-
.
|
|
228
|
+
.join(
|
|
212
229
|
throughTable,
|
|
213
|
-
|
|
214
|
-
|
|
230
|
+
function () {
|
|
231
|
+
for (let relationship of relationships) {
|
|
232
|
+
const fromPrimary = relationship.fromPrimary
|
|
233
|
+
const from = relationship.from
|
|
234
|
+
// @ts-ignore
|
|
235
|
+
this.orOn(
|
|
236
|
+
`${fromTable}.${fromPrimary}`,
|
|
237
|
+
"=",
|
|
238
|
+
`${throughTable}.${from}`
|
|
239
|
+
)
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"left"
|
|
243
|
+
)
|
|
244
|
+
.join(
|
|
245
|
+
toTable,
|
|
246
|
+
function () {
|
|
247
|
+
for (let relationship of relationships) {
|
|
248
|
+
const toPrimary = relationship.toPrimary
|
|
249
|
+
const to = relationship.to
|
|
250
|
+
// @ts-ignore
|
|
251
|
+
this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`)
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"left"
|
|
215
255
|
)
|
|
216
|
-
.leftJoin(toTable, `${toTable}.${toPrimary}`, `${throughTable}.${to}`)
|
|
217
256
|
}
|
|
218
257
|
}
|
|
219
258
|
return query.limit(BASE_LIMIT)
|
package/src/threads/query.js
CHANGED
|
@@ -5,9 +5,6 @@ const { integrations } = require("../integrations")
|
|
|
5
5
|
const { processStringSync } = require("@budibase/string-templates")
|
|
6
6
|
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
7
7
|
|
|
8
|
-
const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/)
|
|
9
|
-
const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/)
|
|
10
|
-
|
|
11
8
|
class QueryRunner {
|
|
12
9
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
13
10
|
this.datasource = input.datasource
|
|
@@ -188,12 +185,8 @@ class QueryRunner {
|
|
|
188
185
|
enrichedQuery[key] = this.enrichQueryFields(fields[key], parameters)
|
|
189
186
|
} else if (typeof fields[key] === "string") {
|
|
190
187
|
// enrich string value as normal
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (IS_HANDLEBARS.test(value) && !IS_TRIPLE_BRACE.test(value)) {
|
|
194
|
-
value = `{${value}}`
|
|
195
|
-
}
|
|
196
|
-
enrichedQuery[key] = processStringSync(value, parameters, {
|
|
188
|
+
enrichedQuery[key] = processStringSync(fields[key], parameters, {
|
|
189
|
+
noEscaping: true,
|
|
197
190
|
noHelpers: true,
|
|
198
191
|
})
|
|
199
192
|
} else {
|