@budibase/server 1.1.22-alpha.0 → 1.1.22

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.2709af96.js +979 -0
  2. package/builder/assets/{index.b92b1be9.css → index.5c0ce502.css} +1 -1
  3. package/builder/assets/{vendor.b0c43a06.js → vendor.7f11b0ca.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +149 -158
  6. package/coverage/coverage-final.json +1 -1
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/index.html +18 -18
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +49 -94
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  45. package/coverage/lcov-report/api/index.html +1 -1
  46. package/coverage/lcov-report/api/index.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.html +1 -1
  58. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  75. package/coverage/lcov-report/automations/actions.js.html +1 -1
  76. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  77. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  78. package/coverage/lcov-report/automations/index.html +1 -1
  79. package/coverage/lcov-report/automations/index.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/index.html +1 -1
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/constants/index.html +1 -1
  107. package/coverage/lcov-report/constants/index.js.html +1 -1
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +1 -1
  110. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +1 -1
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  117. package/coverage/lcov-report/db/newid.js.html +1 -1
  118. package/coverage/lcov-report/db/utils.js.html +1 -1
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +1 -1
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +18 -18
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  127. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  128. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  129. package/coverage/lcov-report/middleware/index.html +1 -1
  130. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  131. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  132. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  135. package/coverage/lcov-report/threads/automation.js.html +1 -1
  136. package/coverage/lcov-report/threads/index.html +1 -1
  137. package/coverage/lcov-report/threads/query.js.html +1 -1
  138. package/coverage/lcov-report/threads/utils.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  153. package/coverage/lcov-report/utilities/security.js.html +1 -1
  154. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  158. package/coverage/lcov-report/utilities/users.js.html +1 -1
  159. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  160. package/coverage/lcov.info +288 -307
  161. package/dist/api/controllers/row/internalSearch.js +16 -30
  162. package/dist/integrations/base/sql.js +14 -43
  163. package/dist/package.json +2 -2
  164. package/dist/tsconfig.build.tsbuildinfo +1 -1
  165. package/package.json +8 -8
  166. package/src/api/controllers/row/internalSearch.js +20 -35
  167. package/src/definitions/datasource.ts +0 -3
  168. package/src/integrations/base/sql.ts +13 -44
  169. package/src/integrations/tests/sql.spec.js +4 -50
  170. package/builder/assets/index.f12fabc9.js +0 -979
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.1.22-alpha.0",
4
+ "version": "1.1.22",
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.1.22-alpha.0",
81
- "@budibase/client": "^1.1.22-alpha.0",
80
+ "@budibase/backend-core": "^1.1.22",
81
+ "@budibase/client": "^1.1.22",
82
82
  "@budibase/pro": "1.1.21",
83
- "@budibase/string-templates": "^1.1.22-alpha.0",
84
- "@budibase/types": "^1.1.22-alpha.0",
83
+ "@budibase/string-templates": "^1.1.22",
84
+ "@budibase/types": "^1.1.22",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -118,7 +118,7 @@
118
118
  "koa-send": "5.0.0",
119
119
  "koa-session": "5.12.0",
120
120
  "koa-static": "5.0.0",
121
- "koa2-ratelimit": "1.1.1",
121
+ "koa2-ratelimit": "1.1.0",
122
122
  "lodash": "4.17.21",
123
123
  "memorystream": "0.3.1",
124
124
  "mongodb": "3.6.3",
@@ -137,7 +137,7 @@
137
137
  "redis": "4",
138
138
  "server-destroy": "1.0.1",
139
139
  "snowflake-promise": "^4.5.0",
140
- "svelte": "3.49.0",
140
+ "svelte": "3.44.1",
141
141
  "swagger-parser": "10.0.3",
142
142
  "to-json-schema": "0.2.5",
143
143
  "uuid": "3.3.2",
@@ -195,5 +195,5 @@
195
195
  "optionalDependencies": {
196
196
  "oracledb": "5.3.0"
197
197
  },
198
- "gitHead": "fa012bd576e9cc892cf8ee08355251efcc090697"
198
+ "gitHead": "965a5e6a567effa57cb9a1a27a4691289cc13d47"
199
199
  }
@@ -19,7 +19,6 @@ class QueryBuilder {
19
19
  empty: {},
20
20
  notEmpty: {},
21
21
  oneOf: {},
22
- contains: {},
23
22
  ...base,
24
23
  }
25
24
  this.limit = 50
@@ -120,11 +119,6 @@ class QueryBuilder {
120
119
  return this
121
120
  }
122
121
 
123
- addContains(key, value) {
124
- this.query.contains[key] = value
125
- return this
126
- }
127
-
128
122
  /**
129
123
  * Preprocesses a value before going into a lucene search.
130
124
  * Transforms strings to lowercase and wraps strings and bools in quotes.
@@ -170,31 +164,6 @@ class QueryBuilder {
170
164
  return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`
171
165
  }
172
166
 
173
- const contains = (key, value) => {
174
- if (!value && value !== 0) {
175
- return null
176
- }
177
- return `${key}:${builder.preprocess(value, { escape: true })}`
178
- }
179
-
180
- const oneOf = (key, value) => {
181
- if (!Array.isArray(value)) {
182
- if (typeof value === "string") {
183
- value = value.split(",")
184
- } else {
185
- return ""
186
- }
187
- }
188
- let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`
189
- for (let i = 1; i < value.length; i++) {
190
- orStatement += ` OR ${builder.preprocess(
191
- value[i],
192
- allPreProcessingOpts
193
- )}`
194
- }
195
- return `${key}:(${orStatement})`
196
- }
197
-
198
167
  function build(structure, queryFn) {
199
168
  for (let [key, value] of Object.entries(structure)) {
200
169
  key = builder.preprocess(key.replace(/ /g, "_"), {
@@ -270,10 +239,26 @@ class QueryBuilder {
270
239
  build(this.query.notEmpty, key => `${key}:["" TO *]`)
271
240
  }
272
241
  if (this.query.oneOf) {
273
- build(this.query.oneOf, oneOf)
274
- }
275
- if (this.query.contains) {
276
- build(this.query.contains, contains)
242
+ build(this.query.oneOf, (key, value) => {
243
+ if (!Array.isArray(value)) {
244
+ if (typeof value === "string") {
245
+ value = value.split(",")
246
+ } else {
247
+ return ""
248
+ }
249
+ }
250
+ let orStatement = `${builder.preprocess(
251
+ value[0],
252
+ allPreProcessingOpts
253
+ )}`
254
+ for (let i = 1; i < value.length; i++) {
255
+ orStatement += ` OR ${builder.preprocess(
256
+ value[i],
257
+ allPreProcessingOpts
258
+ )}`
259
+ }
260
+ return `${key}:(${orStatement})`
261
+ })
277
262
  }
278
263
  // make sure table ID is always added as an AND
279
264
  if (tableId) {
@@ -131,9 +131,6 @@ export interface SearchFilters {
131
131
  oneOf?: {
132
132
  [key: string]: any[]
133
133
  }
134
- contains?: {
135
- [key: string]: any
136
- }
137
134
  }
138
135
 
139
136
  export interface SortJson {
@@ -142,21 +142,6 @@ class InternalBuilder {
142
142
  }
143
143
  }
144
144
  }
145
-
146
- const like = (key: string, value: any) => {
147
- const fnc = allOr ? "orWhere" : "where"
148
- // postgres supports ilike, nothing else does
149
- if (this.client === SqlClients.POSTGRES) {
150
- query = query[fnc](key, "ilike", `%${value}%`)
151
- } else {
152
- const rawFnc = `${fnc}Raw`
153
- // @ts-ignore
154
- query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
155
- `%${value}%`,
156
- ])
157
- }
158
- }
159
-
160
145
  if (!filters) {
161
146
  return query
162
147
  }
@@ -183,7 +168,19 @@ class InternalBuilder {
183
168
  })
184
169
  }
185
170
  if (filters.fuzzy) {
186
- iterate(filters.fuzzy, like)
171
+ iterate(filters.fuzzy, (key, value) => {
172
+ const fnc = allOr ? "orWhere" : "where"
173
+ // postgres supports ilike, nothing else does
174
+ if (this.client === SqlClients.POSTGRES) {
175
+ query = query[fnc](key, "ilike", `%${value}%`)
176
+ } else {
177
+ const rawFnc = `${fnc}Raw`
178
+ // @ts-ignore
179
+ query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
180
+ `%${value}%`,
181
+ ])
182
+ }
183
+ })
187
184
  }
188
185
  if (filters.range) {
189
186
  iterate(filters.range, (key, value) => {
@@ -226,34 +223,6 @@ class InternalBuilder {
226
223
  query = query[fnc](key)
227
224
  })
228
225
  }
229
- if (filters.contains) {
230
- const fnc = allOr ? "orWhere" : "where"
231
- const rawFnc = `${fnc}Raw`
232
- if (this.client === SqlClients.POSTGRES) {
233
- iterate(filters.contains, (key: string, value: any) => {
234
- const fieldNames = key.split(/\./g)
235
- const tableName = fieldNames[0]
236
- const columnName = fieldNames[1]
237
- if (typeof value === "string") {
238
- value = `"${value}"`
239
- }
240
- // @ts-ignore
241
- query = query[rawFnc](
242
- `"${tableName}"."${columnName}"::jsonb @> '[${value}]'`
243
- )
244
- })
245
- } else if (this.client === SqlClients.MY_SQL) {
246
- iterate(filters.contains, (key: string, value: any) => {
247
- if (typeof value === "string") {
248
- value = `"${value}"`
249
- }
250
- // @ts-ignore
251
- query = query[rawFnc](`JSON_CONTAINS(${key}, '${value}')`)
252
- })
253
- } else {
254
- iterate(filters.contains, like)
255
- }
256
- }
257
226
  return query
258
227
  }
259
228
 
@@ -1,5 +1,4 @@
1
1
  const Sql = require("../base/sql")
2
- const { SqlClients } = require("../utils")
3
2
 
4
3
  const TABLE_NAME = "test"
5
4
 
@@ -47,7 +46,7 @@ function generateDeleteJson(table = TABLE_NAME, filters = {}) {
47
46
 
48
47
  describe("SQL query builder", () => {
49
48
  const limit = 500
50
- const client = SqlClients.POSTGRES
49
+ const client = "pg"
51
50
  let sql
52
51
 
53
52
  beforeEach(() => {
@@ -174,15 +173,15 @@ describe("SQL query builder", () => {
174
173
  })
175
174
 
176
175
  it("should work with MS-SQL", () => {
177
- const query = new Sql(SqlClients.MS_SQL, 10)._query(generateReadJson())
176
+ const query = new Sql("mssql", 10)._query(generateReadJson())
178
177
  expect(query).toEqual({
179
178
  bindings: [10],
180
179
  sql: `select * from (select top (@p0) * from [${TABLE_NAME}]) as [${TABLE_NAME}]`
181
180
  })
182
181
  })
183
182
 
184
- it("should work with MySQL", () => {
185
- const query = new Sql(SqlClients.MY_SQL, 10)._query(generateReadJson())
183
+ it("should work with mySQL", () => {
184
+ const query = new Sql("mysql", 10)._query(generateReadJson())
186
185
  expect(query).toEqual({
187
186
  bindings: [10],
188
187
  sql: `select * from (select * from \`${TABLE_NAME}\` limit ?) as \`${TABLE_NAME}\``
@@ -239,49 +238,4 @@ describe("SQL query builder", () => {
239
238
  sql: `select * from (select * from "${TABLE_NAME}" where "${TABLE_NAME}"."property" > $1 limit $2) as "${TABLE_NAME}"`
240
239
  })
241
240
  })
242
-
243
- it("should use like expression for MS-SQL when filter is contains", () => {
244
- const query = new Sql(SqlClients.MS_SQL, 10)._query(generateReadJson({
245
- filters: {
246
- contains: {
247
- age: 20,
248
- name: "John"
249
- }
250
- }
251
- }))
252
- expect(query).toEqual({
253
- bindings: [10, "%20%", "%John%"],
254
- sql: `select * from (select top (@p0) * from [${TABLE_NAME}] where LOWER(${TABLE_NAME}.age) LIKE @p1 and LOWER(${TABLE_NAME}.name) LIKE @p2) as [${TABLE_NAME}]`
255
- })
256
- })
257
-
258
- it("should use JSON_CONTAINS expression for MySQL when filter is contains", () => {
259
- const query = new Sql(SqlClients.MY_SQL, 10)._query(generateReadJson({
260
- filters: {
261
- contains: {
262
- age: 20,
263
- name: "John"
264
- }
265
- }
266
- }))
267
- expect(query).toEqual({
268
- bindings: [10],
269
- sql: `select * from (select * from \`${TABLE_NAME}\` where JSON_CONTAINS(${TABLE_NAME}.age, '20') and JSON_CONTAINS(${TABLE_NAME}.name, '"John"') limit ?) as \`${TABLE_NAME}\``
270
- })
271
- })
272
-
273
- it("should use jsonb operator expression for PostgreSQL when filter is contains", () => {
274
- const query = new Sql(SqlClients.POSTGRES, 10)._query(generateReadJson({
275
- filters: {
276
- contains: {
277
- age: 20,
278
- name: "John"
279
- }
280
- }
281
- }))
282
- expect(query).toEqual({
283
- bindings: [10],
284
- sql: `select * from (select * from \"${TABLE_NAME}\" where \"${TABLE_NAME}\".\"age\"::jsonb @> '[20]' and \"${TABLE_NAME}\".\"name\"::jsonb @> '["John"]' limit $1) as \"${TABLE_NAME}\"`
285
- })
286
- })
287
241
  })