@budibase/server 1.2.23 → 1.2.26-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/__mocks__/node-fetch.ts +8 -1
- package/builder/assets/index.d4c0ea11.js +977 -0
- package/builder/assets/{index.08dd0c5e.css → index.f1c7e247.css} +1 -1
- package/builder/index.html +2 -2
- package/coverage/clover.xml +385 -380
- package/coverage/coverage-final.json +9 -9
- package/coverage/lcov-report/api/controllers/apikeys.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 +1 -1
- 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 +1 -1
- 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/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 +25 -25
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +209 -191
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -18
- 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 +2 -2
- 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/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +19 -19
- 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/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/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/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.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/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.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/delay.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/loop.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/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +30 -30
- 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/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 +3 -3
- package/coverage/lcov-report/db/utils.js.html +61 -61
- 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 +19 -19
- 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/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/publicApi.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/utils.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 +16 -16
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +23 -23
- 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/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +7 -7
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +598 -593
- package/dist/api/controllers/row/internalSearch.js +5 -0
- package/dist/api/controllers/row/utils.js +3 -1
- package/dist/api/controllers/table/external.js +1 -1
- package/dist/automations/logging/index.js +3 -0
- package/dist/integrations/base/query.js +27 -0
- package/dist/integrations/base/sql.js +5 -4
- package/dist/integrations/base/utils.js +13 -27
- package/dist/integrations/microsoftSqlServer.js +5 -2
- package/dist/integrations/mysql.js +2 -2
- package/dist/integrations/postgres.js +5 -2
- package/dist/package.json +7 -7
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/api/controllers/row/internalSearch.js +6 -0
- package/src/api/controllers/row/utils.js +4 -1
- package/src/api/controllers/table/external.js +1 -1
- package/src/api/routes/tests/internalSearch.spec.js +157 -0
- package/src/automations/logging/index.ts +3 -0
- package/src/integrations/base/query.ts +17 -0
- package/src/integrations/base/sql.ts +5 -4
- package/src/integrations/base/utils.ts +9 -19
- package/src/integrations/microsoftSqlServer.ts +3 -2
- package/src/integrations/mysql.ts +1 -1
- package/src/integrations/postgres.ts +2 -1
- package/src/integrations/queries/sql.ts +0 -1
- package/src/integrations/tests/sql.spec.js +1 -1
- package/builder/assets/index.80b7f5b3.js +0 -975
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.26-alpha.0",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"license": "GPL-3.0",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
80
|
-
"@budibase/backend-core": "
|
|
81
|
-
"@budibase/client": "
|
|
82
|
-
"@budibase/pro": "1.2.
|
|
83
|
-
"@budibase/string-templates": "
|
|
84
|
-
"@budibase/types": "
|
|
80
|
+
"@budibase/backend-core": "1.2.26-alpha.0",
|
|
81
|
+
"@budibase/client": "1.2.26-alpha.0",
|
|
82
|
+
"@budibase/pro": "1.2.25",
|
|
83
|
+
"@budibase/string-templates": "1.2.26-alpha.0",
|
|
84
|
+
"@budibase/types": "1.2.26-alpha.0",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"google-auth-library": "7.12.0",
|
|
107
107
|
"google-spreadsheet": "3.2.0",
|
|
108
108
|
"jimp": "0.16.1",
|
|
109
|
-
"joi": "17.
|
|
109
|
+
"joi": "17.6.0",
|
|
110
110
|
"js-yaml": "4.1.0",
|
|
111
111
|
"jsonschema": "1.4.0",
|
|
112
112
|
"knex": "0.95.15",
|
|
@@ -195,5 +195,5 @@
|
|
|
195
195
|
"optionalDependencies": {
|
|
196
196
|
"oracledb": "5.3.0"
|
|
197
197
|
},
|
|
198
|
-
"gitHead": "
|
|
198
|
+
"gitHead": "5efb77d1fe6dc5fe86115cda7a0cb297efefd0e9"
|
|
199
199
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const { SearchIndexes } = require("../../../db/utils")
|
|
2
|
+
const { removeKeyNumbering } = require("./utils")
|
|
2
3
|
const fetch = require("node-fetch")
|
|
3
4
|
const { getCouchInfo } = require("@budibase/backend-core/db")
|
|
4
5
|
const { getAppId } = require("@budibase/backend-core/context")
|
|
@@ -197,6 +198,8 @@ class QueryBuilder {
|
|
|
197
198
|
|
|
198
199
|
function build(structure, queryFn) {
|
|
199
200
|
for (let [key, value] of Object.entries(structure)) {
|
|
201
|
+
// check for new format - remove numbering if needed
|
|
202
|
+
key = removeKeyNumbering(key)
|
|
200
203
|
key = builder.preprocess(key.replace(/ /g, "_"), {
|
|
201
204
|
escape: true,
|
|
202
205
|
})
|
|
@@ -310,6 +313,9 @@ class QueryBuilder {
|
|
|
310
313
|
}
|
|
311
314
|
}
|
|
312
315
|
|
|
316
|
+
// exported for unit testing
|
|
317
|
+
exports.QueryBuilder = QueryBuilder
|
|
318
|
+
|
|
313
319
|
/**
|
|
314
320
|
* Executes a lucene search query.
|
|
315
321
|
* @param url The query URL
|
|
@@ -3,8 +3,9 @@ const { cloneDeep } = require("lodash/fp")
|
|
|
3
3
|
const { InternalTables } = require("../../../db/utils")
|
|
4
4
|
const userController = require("../user")
|
|
5
5
|
const { FieldTypes } = require("../../../constants")
|
|
6
|
-
const { makeExternalQuery } = require("../../../integrations/base/utils")
|
|
7
6
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
7
|
+
const { makeExternalQuery } = require("../../../integrations/base/query")
|
|
8
|
+
const { removeKeyNumbering } = require("../../../integrations/base/utils")
|
|
8
9
|
|
|
9
10
|
validateJs.extend(validateJs.validators.datetime, {
|
|
10
11
|
parse: function (value) {
|
|
@@ -16,6 +17,8 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
16
17
|
},
|
|
17
18
|
})
|
|
18
19
|
|
|
20
|
+
exports.removeKeyNumbering = removeKeyNumbering
|
|
21
|
+
|
|
19
22
|
exports.getDatasourceAndQuery = async json => {
|
|
20
23
|
const datasourceId = json.endpoint.datasourceId
|
|
21
24
|
const db = getAppDB()
|
|
@@ -14,7 +14,7 @@ const {
|
|
|
14
14
|
FieldTypes,
|
|
15
15
|
RelationshipTypes,
|
|
16
16
|
} = require("../../../constants")
|
|
17
|
-
const { makeExternalQuery } = require("../../../integrations/base/
|
|
17
|
+
const { makeExternalQuery } = require("../../../integrations/base/query")
|
|
18
18
|
const { cloneDeep } = require("lodash/fp")
|
|
19
19
|
const csvParser = require("../../../utilities/csvParser")
|
|
20
20
|
const { handleRequest } = require("../row/external")
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
const search = require("../../controllers/row/internalSearch")
|
|
2
|
+
// this will be mocked out for _search endpoint
|
|
3
|
+
const fetch = require("node-fetch")
|
|
4
|
+
const PARAMS = {
|
|
5
|
+
tableId: "ta_12345679abcdef",
|
|
6
|
+
version: "1",
|
|
7
|
+
bookmark: null,
|
|
8
|
+
sort: null,
|
|
9
|
+
sortOrder: "ascending",
|
|
10
|
+
sortType: "string",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function checkLucene(resp, expected, params = PARAMS) {
|
|
14
|
+
const query = resp.rows[0].query
|
|
15
|
+
const json = JSON.parse(query)
|
|
16
|
+
if (PARAMS.sort) {
|
|
17
|
+
expect(json.sort).toBe(`${PARAMS.sort}<${PARAMS.sortType}>`)
|
|
18
|
+
}
|
|
19
|
+
if (PARAMS.bookmark) {
|
|
20
|
+
expect(json.bookmark).toBe(PARAMS.bookmark)
|
|
21
|
+
}
|
|
22
|
+
expect(json.include_docs).toBe(true)
|
|
23
|
+
expect(json.q).toBe(`(${expected}) AND tableId:"${params.tableId}"`)
|
|
24
|
+
expect(json.limit).toBe(params.limit || 50)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
describe("internal search", () => {
|
|
28
|
+
it("default query", async () => {
|
|
29
|
+
const response = await search.paginatedSearch({
|
|
30
|
+
}, PARAMS)
|
|
31
|
+
checkLucene(response, `*:*`)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it("test equal query", async () => {
|
|
35
|
+
const response = await search.paginatedSearch({
|
|
36
|
+
equal: {
|
|
37
|
+
"column": "1",
|
|
38
|
+
}
|
|
39
|
+
}, PARAMS)
|
|
40
|
+
checkLucene(response, `*:* AND column:"1"`)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it("test notEqual query", async () => {
|
|
44
|
+
const response = await search.paginatedSearch({
|
|
45
|
+
notEqual: {
|
|
46
|
+
"column": "1",
|
|
47
|
+
}
|
|
48
|
+
}, PARAMS)
|
|
49
|
+
checkLucene(response, `*:* AND !column:"1"`)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it("test OR query", async () => {
|
|
53
|
+
const response = await search.paginatedSearch({
|
|
54
|
+
allOr: true,
|
|
55
|
+
equal: {
|
|
56
|
+
"column": "2",
|
|
57
|
+
},
|
|
58
|
+
notEqual: {
|
|
59
|
+
"column": "1",
|
|
60
|
+
}
|
|
61
|
+
}, PARAMS)
|
|
62
|
+
checkLucene(response, `column:"2" OR !column:"1"`)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it("test AND query", async () => {
|
|
66
|
+
const response = await search.paginatedSearch({
|
|
67
|
+
equal: {
|
|
68
|
+
"column": "2",
|
|
69
|
+
},
|
|
70
|
+
notEqual: {
|
|
71
|
+
"column": "1",
|
|
72
|
+
}
|
|
73
|
+
}, PARAMS)
|
|
74
|
+
checkLucene(response, `*:* AND column:"2" AND !column:"1"`)
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it("test pagination query", async () => {
|
|
78
|
+
const updatedParams = {
|
|
79
|
+
...PARAMS,
|
|
80
|
+
limit: 100,
|
|
81
|
+
bookmark: "awd",
|
|
82
|
+
sort: "column",
|
|
83
|
+
}
|
|
84
|
+
const response = await search.paginatedSearch({
|
|
85
|
+
string: {
|
|
86
|
+
"column": "2",
|
|
87
|
+
},
|
|
88
|
+
}, updatedParams)
|
|
89
|
+
checkLucene(response, `*:* AND column:2*`, updatedParams)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it("test range query", async () => {
|
|
93
|
+
const response = await search.paginatedSearch({
|
|
94
|
+
range: {
|
|
95
|
+
"column": { low: 1, high: 2 },
|
|
96
|
+
},
|
|
97
|
+
}, PARAMS)
|
|
98
|
+
checkLucene(response, `*:* AND column:[1 TO 2]`, PARAMS)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it("test empty query", async () => {
|
|
102
|
+
const response = await search.paginatedSearch({
|
|
103
|
+
empty: {
|
|
104
|
+
"column": "",
|
|
105
|
+
},
|
|
106
|
+
}, PARAMS)
|
|
107
|
+
checkLucene(response, `*:* AND !column:["" TO *]`, PARAMS)
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it("test notEmpty query", async () => {
|
|
111
|
+
const response = await search.paginatedSearch({
|
|
112
|
+
notEmpty: {
|
|
113
|
+
"column": "",
|
|
114
|
+
},
|
|
115
|
+
}, PARAMS)
|
|
116
|
+
checkLucene(response, `*:* AND column:["" TO *]`, PARAMS)
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it("test oneOf query", async () => {
|
|
120
|
+
const response = await search.paginatedSearch({
|
|
121
|
+
oneOf: {
|
|
122
|
+
"column": ["a", "b"],
|
|
123
|
+
},
|
|
124
|
+
}, PARAMS)
|
|
125
|
+
checkLucene(response, `*:* AND column:("a" OR "b")`, PARAMS)
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it("test contains query", async () => {
|
|
129
|
+
const response = await search.paginatedSearch({
|
|
130
|
+
contains: {
|
|
131
|
+
"column": "a",
|
|
132
|
+
},
|
|
133
|
+
}, PARAMS)
|
|
134
|
+
checkLucene(response, `*:* AND column:a`, PARAMS)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it("test multiple of same column", async () => {
|
|
138
|
+
const response = await search.paginatedSearch({
|
|
139
|
+
allOr: true,
|
|
140
|
+
equal: {
|
|
141
|
+
"1:column": "a",
|
|
142
|
+
"2:column": "b",
|
|
143
|
+
"3:column": "c",
|
|
144
|
+
},
|
|
145
|
+
}, PARAMS)
|
|
146
|
+
checkLucene(response, `column:"a" OR column:"b" OR column:"c"`, PARAMS)
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
it("check a weird case for lucene building", async () => {
|
|
150
|
+
const response = await search.paginatedSearch({
|
|
151
|
+
equal: {
|
|
152
|
+
"1:1:column": "a",
|
|
153
|
+
},
|
|
154
|
+
}, PARAMS)
|
|
155
|
+
checkLucene(response, `*:* AND 1\\:column:"a"`, PARAMS)
|
|
156
|
+
})
|
|
157
|
+
})
|
|
@@ -23,6 +23,9 @@ export async function checkAppMetadata(apps: App[]) {
|
|
|
23
23
|
for (let [key, errors] of Object.entries(metadata.automationErrors)) {
|
|
24
24
|
const updated = []
|
|
25
25
|
for (let error of errors) {
|
|
26
|
+
if (!error) {
|
|
27
|
+
continue
|
|
28
|
+
}
|
|
26
29
|
const startDate = error.split(dbUtils.SEPARATOR)[2]
|
|
27
30
|
if (startDate > maxStartDate) {
|
|
28
31
|
updated.push(error)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { QueryJson } from "../../definitions/datasource"
|
|
2
|
+
import { Datasource } from "../../definitions/common"
|
|
3
|
+
const { integrations } = require("../index")
|
|
4
|
+
|
|
5
|
+
export async function makeExternalQuery(
|
|
6
|
+
datasource: Datasource,
|
|
7
|
+
json: QueryJson
|
|
8
|
+
) {
|
|
9
|
+
const Integration = integrations[datasource.source]
|
|
10
|
+
// query is the opinionated function
|
|
11
|
+
if (Integration.prototype.query) {
|
|
12
|
+
const integration = new Integration(datasource.config)
|
|
13
|
+
return integration.query(json)
|
|
14
|
+
} else {
|
|
15
|
+
throw "Datasource does not support query."
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { isIsoDateString, SqlClients } from "../utils"
|
|
11
11
|
import SqlTableQueryBuilder from "./sqlTable"
|
|
12
12
|
import environment from "../../environment"
|
|
13
|
+
import { removeKeyNumbering } from "./utils"
|
|
13
14
|
|
|
14
15
|
const envLimit = environment.SQL_MAX_ROWS
|
|
15
16
|
? parseInt(environment.SQL_MAX_ROWS)
|
|
@@ -133,12 +134,13 @@ class InternalBuilder {
|
|
|
133
134
|
fn: (key: string, value: any) => void
|
|
134
135
|
) {
|
|
135
136
|
for (let [key, value] of Object.entries(structure)) {
|
|
136
|
-
const
|
|
137
|
+
const updatedKey = removeKeyNumbering(key)
|
|
138
|
+
const isRelationshipField = updatedKey.includes(".")
|
|
137
139
|
if (!opts.relationship && !isRelationshipField) {
|
|
138
|
-
fn(`${opts.tableName}.${
|
|
140
|
+
fn(`${opts.tableName}.${updatedKey}`, value)
|
|
139
141
|
}
|
|
140
142
|
if (opts.relationship && isRelationshipField) {
|
|
141
|
-
fn(
|
|
143
|
+
fn(updatedKey, value)
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
}
|
|
@@ -582,4 +584,3 @@ class SqlQueryBuilder extends SqlTableQueryBuilder {
|
|
|
582
584
|
}
|
|
583
585
|
|
|
584
586
|
export default SqlQueryBuilder
|
|
585
|
-
module.exports = SqlQueryBuilder
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
import { Datasource } from "../../definitions/common"
|
|
1
|
+
const QUERY_START_REGEX = /\d[0-9]*:/g
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// query is the opinionated function
|
|
13
|
-
if (Integration.prototype.query) {
|
|
14
|
-
const integration = new Integration(datasource.config)
|
|
15
|
-
return integration.query(json)
|
|
16
|
-
} else {
|
|
17
|
-
throw "Datasource does not support query."
|
|
18
|
-
}
|
|
3
|
+
export function removeKeyNumbering(key: any): string {
|
|
4
|
+
if (typeof key === "string" && key.match(QUERY_START_REGEX) != null) {
|
|
5
|
+
const parts = key.split(":")
|
|
6
|
+
// remove the number
|
|
7
|
+
parts.shift()
|
|
8
|
+
return parts.join(":")
|
|
9
|
+
} else {
|
|
10
|
+
return key
|
|
19
11
|
}
|
|
20
|
-
|
|
21
|
-
module.exports.makeExternalQuery = makeExternalQuery
|
|
22
12
|
}
|
|
@@ -15,10 +15,10 @@ import {
|
|
|
15
15
|
} from "./utils"
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
17
|
import { Table, TableSchema } from "../definitions/common"
|
|
18
|
+
import Sql from "./base/sql"
|
|
18
19
|
|
|
19
20
|
module MSSQLModule {
|
|
20
21
|
const sqlServer = require("mssql")
|
|
21
|
-
const Sql = require("./base/sql")
|
|
22
22
|
const DEFAULT_SCHEMA = "dbo"
|
|
23
23
|
|
|
24
24
|
interface MSSQLConfig {
|
|
@@ -96,7 +96,8 @@ module MSSQLModule {
|
|
|
96
96
|
class SqlServerIntegration extends Sql implements DatasourcePlus {
|
|
97
97
|
private readonly config: MSSQLConfig
|
|
98
98
|
private index: number = 0
|
|
99
|
-
|
|
99
|
+
private readonly pool: any
|
|
100
|
+
private client: any
|
|
100
101
|
public tables: Record<string, Table> = {}
|
|
101
102
|
public schemaErrors: Record<string, string> = {}
|
|
102
103
|
|
|
@@ -16,10 +16,10 @@ import {
|
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
17
|
import dayjs from "dayjs"
|
|
18
18
|
const { NUMBER_REGEX } = require("../utilities")
|
|
19
|
+
import Sql from "./base/sql"
|
|
19
20
|
|
|
20
21
|
module MySQLModule {
|
|
21
22
|
const mysql = require("mysql2/promise")
|
|
22
|
-
const Sql = require("./base/sql")
|
|
23
23
|
|
|
24
24
|
interface MySQLConfig {
|
|
25
25
|
host: string
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
SqlClients,
|
|
15
15
|
} from "./utils"
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
|
+
import Sql from "./base/sql"
|
|
17
18
|
|
|
18
19
|
module PostgresModule {
|
|
19
20
|
const { Client, types } = require("pg")
|
|
20
|
-
const Sql = require("./base/sql")
|
|
21
21
|
const { escapeDangerousCharacters } = require("../utilities")
|
|
22
22
|
|
|
23
23
|
// Return "date" and "timestamp" types as plain strings.
|
|
@@ -117,6 +117,7 @@ module PostgresModule {
|
|
|
117
117
|
private readonly client: any
|
|
118
118
|
private readonly config: PostgresConfig
|
|
119
119
|
private index: number = 1
|
|
120
|
+
private open: boolean
|
|
120
121
|
public tables: Record<string, Table> = {}
|
|
121
122
|
public schemaErrors: Record<string, string> = {}
|
|
122
123
|
|