@budibase/server 1.0.56 → 1.0.58-alpha.2

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.
Files changed (202) hide show
  1. package/builder/assets/index.38a1fb0a.css +6 -0
  2. package/builder/assets/{index.e2695470.js → index.57fc07aa.js} +240 -239
  3. package/builder/assets/{vendor.5ad9695a.js → vendor.20f80cec.js} +215 -189
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +86 -86
  6. package/coverage/coverage-final.json +7 -7
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/integration.js.html +2 -5
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +12 -12
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +13 -13
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +20 -2
  26. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +13 -4
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +1 -1
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  83. package/coverage/lcov-report/automations/actions.js.html +1 -1
  84. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  85. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  86. package/coverage/lcov-report/automations/index.html +1 -1
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/index.html +1 -1
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  115. package/coverage/lcov-report/automations/utils.js.html +1 -1
  116. package/coverage/lcov-report/constants/index.html +1 -1
  117. package/coverage/lcov-report/constants/index.js.html +1 -1
  118. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  119. package/coverage/lcov-report/constants/screens.js.html +1 -1
  120. package/coverage/lcov-report/db/client.js.html +1 -1
  121. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  122. package/coverage/lcov-report/db/index.html +1 -1
  123. package/coverage/lcov-report/db/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  128. package/coverage/lcov-report/db/newid.js.html +1 -1
  129. package/coverage/lcov-report/db/utils.js.html +1 -1
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +1 -1
  133. package/coverage/lcov-report/events/utils.js.html +1 -1
  134. package/coverage/lcov-report/index.html +17 -17
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  139. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  140. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  141. package/coverage/lcov-report/middleware/index.html +15 -15
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +11 -11
  143. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  144. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  145. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  146. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +1 -1
  149. package/coverage/lcov-report/threads/index.js.html +12 -12
  150. package/coverage/lcov-report/threads/query.js.html +65 -44
  151. package/coverage/lcov-report/threads/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  154. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  155. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  156. package/coverage/lcov-report/utilities/global.js.html +1 -1
  157. package/coverage/lcov-report/utilities/index.html +1 -1
  158. package/coverage/lcov-report/utilities/index.js.html +1 -1
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  167. package/coverage/lcov-report/utilities/security.js.html +1 -1
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  173. package/coverage/lcov-report/utilities/users.js.html +1 -1
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  175. package/coverage/lcov.info +132 -132
  176. package/dist/api/controllers/integration.js +0 -1
  177. package/dist/api/controllers/query/validation.js +6 -0
  178. package/dist/api/controllers/row/ExternalRequest.js +2 -1
  179. package/dist/api/controllers/view/exporters.js +5 -2
  180. package/dist/integrations/base/sql.js +6 -6
  181. package/dist/integrations/dynamodb.js +4 -6
  182. package/dist/integrations/index.js +5 -2
  183. package/dist/package.json +4 -4
  184. package/dist/tests/utilities/TestConfiguration.js +1 -0
  185. package/dist/threads/query.js +3 -0
  186. package/dist/tsconfig.tsbuildinfo +1 -1
  187. package/package.json +5 -5
  188. package/scripts/dev/manage.js +6 -6
  189. package/scripts/integrations/mssql/data/setup.sql +2 -6
  190. package/scripts/integrations/mysql/init.sql +6 -0
  191. package/scripts/likeCypress.ts +1 -1
  192. package/src/api/controllers/integration.js +0 -1
  193. package/src/api/controllers/query/validation.js +6 -0
  194. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  195. package/src/api/controllers/view/exporters.js +5 -2
  196. package/src/api/routes/tests/query.spec.js +13 -5
  197. package/src/integrations/base/sql.ts +28 -40
  198. package/src/integrations/dynamodb.ts +4 -6
  199. package/src/integrations/index.ts +6 -2
  200. package/src/tests/utilities/TestConfiguration.js +1 -0
  201. package/src/threads/query.js +11 -4
  202. package/builder/assets/index.c0cc369d.css +0 -6
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.56",
4
+ "version": "1.0.58-alpha.2",
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.56",
74
- "@budibase/client": "^1.0.56",
75
- "@budibase/string-templates": "^1.0.56",
73
+ "@budibase/backend-core": "^1.0.58-alpha.2",
74
+ "@budibase/client": "^1.0.58-alpha.2",
75
+ "@budibase/string-templates": "^1.0.58-alpha.2",
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": "dc9d8b926198fc581281654cbb756fa58b17e3f8"
171
+ "gitHead": "d3f4c4a68b8abef15ef812381965b99ff6425d63"
172
172
  }
@@ -22,21 +22,21 @@ const Commands = {
22
22
  }
23
23
 
24
24
  async function init() {
25
- // generate envoy file, always do this incase it has changed
25
+ // generate nginx file, always do this incase it has changed
26
26
  const hostingPath = path.join(process.cwd(), "..", "..", "hosting")
27
- const envoyHbsPath = path.join(hostingPath, "envoy.dev.yaml.hbs")
28
- const envoyOutputPath = path.join(hostingPath, ".generated-envoy.dev.yaml")
29
- const contents = fs.readFileSync(envoyHbsPath, "utf8")
27
+ const nginxHbsPath = path.join(hostingPath, "nginx.dev.conf.hbs")
28
+ const nginxOutputPath = path.join(hostingPath, ".generated-nginx.dev.conf")
29
+ const contents = fs.readFileSync(nginxHbsPath, "utf8")
30
30
  const config = {
31
31
  address: isLinux() ? "172.17.0.1" : "host.docker.internal",
32
32
  }
33
- fs.writeFileSync(envoyOutputPath, processStringSync(contents, config))
33
+ fs.writeFileSync(nginxOutputPath, processStringSync(contents, config))
34
34
 
35
35
  const envFilePath = path.join(process.cwd(), ".env")
36
36
  if (!fs.existsSync(envFilePath)) {
37
37
  const envFileJson = {
38
38
  PORT: 4001,
39
- MINIO_URL: "http://localhost:10000/",
39
+ MINIO_URL: "http://localhost:4004",
40
40
  COUCH_DB_URL: "http://budibase:budibase@localhost:10000/db/",
41
41
  REDIS_URL: "localhost:6379",
42
42
  WORKER_URL: "http://localhost:4002",
@@ -36,13 +36,9 @@ CREATE TABLE people
36
36
  INSERT products
37
37
  (name, description)
38
38
  VALUES
39
- ('Bananas', 'Fruit thing');
40
-
41
- INSERT products
42
- (name, description)
43
- VALUES
39
+ ('Bananas', 'Fruit thing'),
44
40
  ('Meat', 'Animal thing');
45
-
41
+
46
42
  INSERT tasks
47
43
  (taskname, productid)
48
44
  VALUES
@@ -19,6 +19,12 @@ CREATE TABLE Tasks (
19
19
  FOREIGN KEY(PersonID)
20
20
  REFERENCES Persons(PersonID)
21
21
  );
22
+ CREATE TABLE Products (
23
+ id serial primary key,
24
+ name text,
25
+ updated time
26
+ );
22
27
  INSERT INTO Persons (FirstName, LastName, Age, Address, City, CreatedAt) VALUES ('Mike', 'Hughes', 28.2, '123 Fake Street', 'Belfast', '2021-01-19 03:14:07');
23
28
  INSERT INTO Tasks (PersonID, TaskName) VALUES (1, 'assembling');
24
29
  INSERT INTO Tasks (PersonID, TaskName) VALUES (1, 'processing');
30
+ INSERT INTO Products (name, updated) VALUES ('Meat', '11:00:22'), ('Fruit', '10:00:00');
@@ -17,7 +17,7 @@ process.env.JWT_SECRET = "budibase"
17
17
  process.env.COUCH_URL = `leveldb://${tmpdir}/.data/`
18
18
  process.env.SELF_HOSTED = "1"
19
19
  process.env.WORKER_URL = `http://localhost:${WORKER_PORT}/`
20
- process.env.MINIO_URL = `http://localhost:${MAIN_PORT}/`
20
+ process.env.MINIO_URL = `http://localhost:4004`
21
21
  process.env.MINIO_ACCESS_KEY = "budibase"
22
22
  process.env.MINIO_SECRET_KEY = "budibase"
23
23
  process.env.COUCH_DB_USER = "budibase"
@@ -1,7 +1,6 @@
1
1
  const { definitions } = require("../../integrations")
2
2
 
3
3
  exports.fetch = async function (ctx) {
4
- // TODO: fetch these from a github repo etc
5
4
  ctx.status = 200
6
5
  ctx.body = definitions
7
6
  }
@@ -31,8 +31,14 @@ exports.generateQueryValidation = () => {
31
31
  exports.generateQueryPreviewValidation = () => {
32
32
  // prettier-ignore
33
33
  return joiValidator.body(Joi.object({
34
+ _id: Joi.string().optional(),
35
+ _rev: Joi.string().optional(),
36
+ readable: Joi.boolean().optional(),
34
37
  fields: Joi.object().required(),
35
38
  queryVerb: Joi.string().allow().required(),
39
+ name: Joi.string().required(),
40
+ flags: Joi.object().optional(),
41
+ schema: Joi.object().optional(),
36
42
  extra: Joi.object().optional(),
37
43
  datasourceId: Joi.string().required(),
38
44
  transformer: Joi.string().optional(),
@@ -541,7 +541,7 @@ module External {
541
541
  if (!linkTable || !linkPrimary) {
542
542
  return
543
543
  }
544
- const rows = related[key].rows || []
544
+ const rows = related[key]?.rows || []
545
545
  const found = rows.find(
546
546
  (row: { [key: string]: any }) =>
547
547
  row[linkPrimary] === relationship.id ||
@@ -5,8 +5,11 @@ exports.csv = function (headers, rows) {
5
5
  csv = `${csv}\n${headers
6
6
  .map(header => {
7
7
  let val = row[header]
8
- val = typeof val === "object" ? JSON.stringify(val) : val
9
- return `"${val}"`.trim()
8
+ val =
9
+ typeof val === "object"
10
+ ? `"${JSON.stringify(val).replace(/"/g, "'")}"`
11
+ : `"${val}"`
12
+ return val.trim()
10
13
  })
11
14
  .join(",")}`
12
15
  }
@@ -169,6 +169,7 @@ describe("/queries", () => {
169
169
  parameters: {},
170
170
  fields: {},
171
171
  queryVerb: "read",
172
+ name: datasource.name,
172
173
  })
173
174
  .set(config.defaultHeaders())
174
175
  .expect("Content-Type", /json/)
@@ -230,7 +231,6 @@ describe("/queries", () => {
230
231
  })
231
232
 
232
233
  describe("variables", () => {
233
-
234
234
  async function preview(datasource, fields) {
235
235
  return config.previewQuery(request, config, datasource, fields)
236
236
  }
@@ -262,9 +262,13 @@ describe("/queries", () => {
262
262
  })
263
263
 
264
264
  it("check that it automatically retries on fail with cached dynamics", async () => {
265
- const { datasource, query: base } = await config.dynamicVariableDatasource()
265
+ const { datasource, query: base } =
266
+ await config.dynamicVariableDatasource()
266
267
  // preview once to cache
267
- await preview(datasource, { path: "www.google.com", queryString: "test={{ variable3 }}" })
268
+ await preview(datasource, {
269
+ path: "www.google.com",
270
+ queryString: "test={{ variable3 }}",
271
+ })
268
272
  // check its in cache
269
273
  const contents = await checkCacheForDynamicVariable(base._id, "variable3")
270
274
  expect(contents.rows.length).toEqual(1)
@@ -277,9 +281,13 @@ describe("/queries", () => {
277
281
  })
278
282
 
279
283
  it("deletes variables when linked query is deleted", async () => {
280
- const { datasource, query: base } = await config.dynamicVariableDatasource()
284
+ const { datasource, query: base } =
285
+ await config.dynamicVariableDatasource()
281
286
  // preview once to cache
282
- await preview(datasource, { path: "www.google.com", queryString: "test={{ variable3 }}" })
287
+ await preview(datasource, {
288
+ path: "www.google.com",
289
+ queryString: "test={{ variable3 }}",
290
+ })
283
291
  // check its in cache
284
292
  let contents = await checkCacheForDynamicVariable(base._id, "variable3")
285
293
  expect(contents.rows.length).toEqual(1)
@@ -210,49 +210,37 @@ class InternalBuilder {
210
210
  const { toTable, throughTable } = JSON.parse(key)
211
211
  if (!throughTable) {
212
212
  // @ts-ignore
213
- query = query.join(
214
- toTable,
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"
224
- )
213
+ query = query.leftJoin(toTable, function () {
214
+ for (let relationship of relationships) {
215
+ const from = relationship.from,
216
+ to = relationship.to
217
+ // @ts-ignore
218
+ this.orOn(`${fromTable}.${from}`, "=", `${toTable}.${to}`)
219
+ }
220
+ })
225
221
  } else {
226
222
  query = query
227
223
  // @ts-ignore
228
- .join(
229
- throughTable,
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"
255
- )
224
+ .leftJoin(throughTable, function () {
225
+ for (let relationship of relationships) {
226
+ const fromPrimary = relationship.fromPrimary
227
+ const from = relationship.from
228
+ // @ts-ignore
229
+ this.orOn(
230
+ `${fromTable}.${fromPrimary}`,
231
+ "=",
232
+ `${throughTable}.${from}`
233
+ )
234
+ }
235
+ })
236
+ .leftJoin(toTable, function () {
237
+ for (let relationship of relationships) {
238
+ const toPrimary = relationship.toPrimary
239
+ const to = relationship.to
240
+ // @ts-ignore
241
+ this.orOn(`${toTable}.${toPrimary}`, `${throughTable}.${to}`)
242
+ }
243
+ })
256
244
  }
257
245
  }
258
246
  return query.limit(BASE_LIMIT)
@@ -169,13 +169,11 @@ module DynamoModule {
169
169
  IndexName: query.index ? query.index : undefined,
170
170
  ...query.json,
171
171
  }
172
- if (query.index) {
173
- const response = await this.client.query(params).promise()
174
- if (response.Items) {
175
- return response.Items
176
- }
177
- return response
172
+ const response = await this.client.query(params).promise()
173
+ if (response.Items) {
174
+ return response.Items
178
175
  }
176
+ return response
179
177
  }
180
178
 
181
179
  async scan(query: { table: string; json: object; index: null | string }) {
@@ -11,6 +11,7 @@ const arangodb = require("./arangodb")
11
11
  const rest = require("./rest")
12
12
  const googlesheets = require("./googlesheets")
13
13
  const { SourceNames } = require("../definitions/datasource")
14
+ const environment = require("../environment")
14
15
 
15
16
  const DEFINITIONS = {
16
17
  [SourceNames.POSTGRES]: postgres.schema,
@@ -24,7 +25,6 @@ const DEFINITIONS = {
24
25
  [SourceNames.MYSQL]: mysql.schema,
25
26
  [SourceNames.ARANGODB]: arangodb.schema,
26
27
  [SourceNames.REST]: rest.schema,
27
- [SourceNames.GOOGLE_SHEETS]: googlesheets.schema,
28
28
  }
29
29
 
30
30
  const INTEGRATIONS = {
@@ -39,7 +39,6 @@ const INTEGRATIONS = {
39
39
  [SourceNames.MYSQL]: mysql.integration,
40
40
  [SourceNames.ARANGODB]: arangodb.integration,
41
41
  [SourceNames.REST]: rest.integration,
42
- [SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
43
42
  }
44
43
 
45
44
  // optionally add oracle integration if the oracle binary can be installed
@@ -49,6 +48,11 @@ if (!(process.arch === "arm64" && process.platform === "darwin")) {
49
48
  INTEGRATIONS[SourceNames.ORACLE] = oracle.integration
50
49
  }
51
50
 
51
+ if (environment.SELF_HOSTED) {
52
+ DEFINITIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.schema
53
+ INTEGRATIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.integration
54
+ }
55
+
52
56
  module.exports = {
53
57
  definitions: DEFINITIONS,
54
58
  integrations: INTEGRATIONS,
@@ -393,6 +393,7 @@ class TestConfiguration {
393
393
  parameters: {},
394
394
  fields,
395
395
  queryVerb: "read",
396
+ name: datasource.name,
396
397
  })
397
398
  .set(config.defaultHeaders())
398
399
  .expect("Content-Type", /json/)
@@ -161,10 +161,16 @@ class QueryRunner {
161
161
  const responses = await Promise.all(dynamics)
162
162
  for (let i = 0; i < foundVars.length; i++) {
163
163
  const variable = foundVars[i]
164
- parameters[variable.name] = processStringSync(variable.value, {
165
- data: responses[i].rows,
166
- info: responses[i].extra,
167
- })
164
+ parameters[variable.name] = processStringSync(
165
+ variable.value,
166
+ {
167
+ data: responses[i].rows,
168
+ info: responses[i].extra,
169
+ },
170
+ {
171
+ escapeNewlines: true,
172
+ }
173
+ )
168
174
  // make sure its known that this uses dynamic variables in case it fails
169
175
  this.hasDynamicVariables = true
170
176
  }
@@ -188,6 +194,7 @@ class QueryRunner {
188
194
  enrichedQuery[key] = processStringSync(fields[key], parameters, {
189
195
  noEscaping: true,
190
196
  noHelpers: true,
197
+ escapeNewlines: true,
191
198
  })
192
199
  } else {
193
200
  enrichedQuery[key] = fields[key]