@budibase/server 1.0.207-alpha.6 → 1.0.207-alpha.9

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 (170) hide show
  1. package/builder/assets/{index.4dcc0e96.js → index.650b000d.js} +151 -151
  2. package/builder/assets/{index.c6df2367.css → index.937e02c1.css} +1 -1
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +35 -27
  5. package/coverage/coverage-final.json +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +1 -1
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +55 -10
  25. package/coverage/lcov-report/api/controllers/row/index.html +14 -14
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +1 -1
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +1 -1
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +14 -14
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/threads/automation.js.html +1 -1
  135. package/coverage/lcov-report/threads/index.html +1 -1
  136. package/coverage/lcov-report/threads/query.js.html +1 -1
  137. package/coverage/lcov-report/threads/utils.js.html +1 -1
  138. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  139. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  140. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  141. package/coverage/lcov-report/utilities/global.js.html +1 -1
  142. package/coverage/lcov-report/utilities/index.html +1 -1
  143. package/coverage/lcov-report/utilities/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  151. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  152. package/coverage/lcov-report/utilities/security.js.html +1 -1
  153. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  157. package/coverage/lcov-report/utilities/users.js.html +1 -1
  158. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  159. package/coverage/lcov.info +48 -36
  160. package/dist/api/controllers/row/external.js +17 -3
  161. package/dist/integrations/base/sql.js +20 -3
  162. package/dist/package.json +6 -6
  163. package/dist/tsconfig.build.tsbuildinfo +1 -1
  164. package/package.json +7 -7
  165. package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
  166. package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +23 -0
  167. package/scripts/integrations/oracle/instantclient/linux/install.sh +10 -0
  168. package/src/api/controllers/row/external.js +18 -3
  169. package/src/definitions/common.ts +1 -0
  170. package/src/integrations/base/sql.ts +25 -11
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.207-alpha.6",
4
+ "version": "1.0.207-alpha.9",
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": "^1.0.207-alpha.6",
81
- "@budibase/client": "^1.0.207-alpha.6",
82
- "@budibase/pro": "1.0.207-alpha.5",
83
- "@budibase/string-templates": "^1.0.207-alpha.6",
84
- "@budibase/types": "^1.0.207-alpha.6",
80
+ "@budibase/backend-core": "^1.0.207-alpha.9",
81
+ "@budibase/client": "^1.0.207-alpha.9",
82
+ "@budibase/pro": "1.0.207-alpha.8",
83
+ "@budibase/string-templates": "^1.0.207-alpha.9",
84
+ "@budibase/types": "^1.0.207-alpha.9",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -196,5 +196,5 @@
196
196
  "optionalDependencies": {
197
197
  "oracledb": "5.3.0"
198
198
  },
199
- "gitHead": "053305b21229099be32626de511f62d457b312cf"
199
+ "gitHead": "4875a4be1b7faa3aa5edd36f28667b9499411f2b"
200
200
  }
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+
3
+ # Must be root to continue
4
+ if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi
5
+
6
+ # Allow for re-runs
7
+ rm -rf /opt/oracle
8
+
9
+ echo "Installing oracle instant client"
10
+
11
+ # copy and unzip package
12
+ mkdir -p /opt/oracle
13
+ cp scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip /opt/oracle
14
+ cd /opt/oracle
15
+ unzip -qq basiclite-19.10.zip -d .
16
+ rm *.zip
17
+ mv instantclient* instantclient
18
+
19
+ # update runtime link path
20
+ sh -c "echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf"
21
+ ldconfig /etc/ld.so.conf.d
22
+
23
+ echo "Installation complete"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"
3
+ if [[ $TARGETARCH == arm* ]] ;
4
+ then
5
+ echo "Installing ARM Oracle instant client..."
6
+ $SCRIPT_DIR/arm64/install.sh
7
+ else
8
+ echo "Installing x86-64 Oracle instant client..."
9
+ $SCRIPT_DIR/x86-64/install.sh
10
+ fi
@@ -157,7 +157,8 @@ exports.validate = async () => {
157
157
  exports.exportRows = async ctx => {
158
158
  const { datasourceId } = breakExternalTableId(ctx.params.tableId)
159
159
  const db = getAppDB()
160
- let format = ctx.query.format
160
+ const format = ctx.query.format
161
+ const { columns } = ctx.request.body
161
162
  const datasource = await db.get(datasourceId)
162
163
  if (!datasource || !datasource.entities) {
163
164
  ctx.throw(400, "Datasource has not been configured for plus API.")
@@ -171,13 +172,27 @@ exports.exportRows = async ctx => {
171
172
  }
172
173
 
173
174
  let result = await exports.search(ctx)
174
- let headers = Object.keys(result.rows[0])
175
+ let rows = []
176
+
177
+ // Filter data to only specified columns if required
178
+ if (columns && columns.length) {
179
+ for (let i = 0; i < result.rows.length; i++) {
180
+ rows[i] = {}
181
+ for (let column of columns) {
182
+ rows[i][column] = result.rows[i][column]
183
+ }
184
+ }
185
+ } else {
186
+ rows = result.rows
187
+ }
188
+
189
+ let headers = Object.keys(rows[0])
175
190
  const exporter = exporters[format]
176
191
  const filename = `export.${format}`
177
192
 
178
193
  // send down the file
179
194
  ctx.attachment(filename)
180
- return apiFileReturn(exporter(headers, result.rows))
195
+ return apiFileReturn(exporter(headers, rows))
181
196
  }
182
197
 
183
198
  exports.fetchEnrichedRow = async ctx => {
@@ -12,6 +12,7 @@ export interface Application extends Base {
12
12
  export interface FieldSchema {
13
13
  // TODO: replace with field types enum when done
14
14
  type: string
15
+ externalType?: string
15
16
  fieldName?: string
16
17
  name: string
17
18
  tableId?: string
@@ -89,6 +89,28 @@ function parseFilters(filters: SearchFilters | undefined): SearchFilters {
89
89
  return filters
90
90
  }
91
91
 
92
+ function generateSelectStatement(
93
+ json: QueryJson,
94
+ knex: Knex
95
+ ): (string | Knex.Raw)[] {
96
+ const { resource, meta } = json
97
+ const schema = meta?.table?.schema
98
+ return resource.fields.map(field => {
99
+ const fieldNames = field.split(/\./g)
100
+ const tableName = fieldNames[0]
101
+ const columnName = fieldNames[1]
102
+ if (columnName && knex.client.config.client === SqlClients.POSTGRES) {
103
+ const externalType = schema?.[columnName].externalType
104
+ if (externalType?.includes("money")) {
105
+ return knex.raw(
106
+ `"${tableName}"."${columnName}"::money::numeric as "${field}"`
107
+ )
108
+ }
109
+ }
110
+ return `${field} as ${field}`
111
+ })
112
+ }
113
+
92
114
  class InternalBuilder {
93
115
  private readonly client: string
94
116
 
@@ -216,9 +238,7 @@ class InternalBuilder {
216
238
  }
217
239
 
218
240
  addRelationships(
219
- knex: Knex,
220
241
  query: KnexQuery,
221
- fields: string | string[],
222
242
  fromTable: string,
223
243
  relationships: RelationshipsJson[] | undefined
224
244
  ): KnexQuery {
@@ -323,12 +343,12 @@ class InternalBuilder {
323
343
  if (!resource) {
324
344
  resource = { fields: [] }
325
345
  }
326
- let selectStatement: string | string[] = "*"
346
+ let selectStatement: string | (string | Knex.Raw)[] = "*"
327
347
  // handle select
328
348
  if (resource.fields && resource.fields.length > 0) {
329
349
  // select the resources as the format "table.columnName" - this is what is provided
330
350
  // by the resource builder further up
331
- selectStatement = resource.fields.map(field => `${field} as ${field}`)
351
+ selectStatement = generateSelectStatement(json, knex)
332
352
  }
333
353
  let foundLimit = limit || BASE_LIMIT
334
354
  // handle pagination
@@ -363,13 +383,7 @@ class InternalBuilder {
363
383
  preQuery = this.addSorting(preQuery, json)
364
384
  }
365
385
  // handle joins
366
- query = this.addRelationships(
367
- knex,
368
- preQuery,
369
- selectStatement,
370
- tableName,
371
- relationships
372
- )
386
+ query = this.addRelationships(preQuery, tableName, relationships)
373
387
  return this.addFilters(query, filters, { relationship: true })
374
388
  }
375
389