@strapi/database 4.14.4 → 4.14.6

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 (242) hide show
  1. package/README.md +3 -0
  2. package/dist/connection.d.ts +3 -0
  3. package/dist/connection.d.ts.map +1 -0
  4. package/dist/dialects/dialect.d.ts +27 -0
  5. package/dist/dialects/dialect.d.ts.map +1 -0
  6. package/dist/dialects/index.d.ts +5 -0
  7. package/dist/dialects/index.d.ts.map +1 -0
  8. package/dist/dialects/mysql/constants.d.ts +3 -0
  9. package/dist/dialects/mysql/constants.d.ts.map +1 -0
  10. package/dist/dialects/mysql/database-inspector.d.ts +12 -0
  11. package/dist/dialects/mysql/database-inspector.d.ts.map +1 -0
  12. package/dist/dialects/mysql/index.d.ts +20 -0
  13. package/dist/dialects/mysql/index.d.ts.map +1 -0
  14. package/dist/dialects/mysql/schema-inspector.d.ts +13 -0
  15. package/dist/dialects/mysql/schema-inspector.d.ts.map +1 -0
  16. package/dist/dialects/postgresql/index.d.ts +14 -0
  17. package/dist/dialects/postgresql/index.d.ts.map +1 -0
  18. package/dist/dialects/postgresql/schema-inspector.d.ts +14 -0
  19. package/dist/dialects/postgresql/schema-inspector.d.ts.map +1 -0
  20. package/dist/dialects/sqlite/index.d.ts +19 -0
  21. package/dist/dialects/sqlite/index.d.ts.map +1 -0
  22. package/dist/dialects/sqlite/schema-inspector.d.ts +13 -0
  23. package/dist/dialects/sqlite/schema-inspector.d.ts.map +1 -0
  24. package/dist/entity-manager/entity-repository.d.ts +4 -0
  25. package/dist/entity-manager/entity-repository.d.ts.map +1 -0
  26. package/dist/entity-manager/index.d.ts +5 -0
  27. package/dist/entity-manager/index.d.ts.map +1 -0
  28. package/dist/entity-manager/morph-relations.d.ts +13 -0
  29. package/dist/entity-manager/morph-relations.d.ts.map +1 -0
  30. package/dist/entity-manager/regular-relations.d.ts +83 -0
  31. package/dist/entity-manager/regular-relations.d.ts.map +1 -0
  32. package/dist/entity-manager/relations/cloning/regular-relations.d.ts +17 -0
  33. package/dist/entity-manager/relations/cloning/regular-relations.d.ts.map +1 -0
  34. package/dist/entity-manager/relations-orderer.d.ts +73 -0
  35. package/dist/entity-manager/relations-orderer.d.ts.map +1 -0
  36. package/dist/entity-manager/types.d.ts +97 -0
  37. package/dist/entity-manager/types.d.ts.map +1 -0
  38. package/dist/errors/database.d.ts +5 -0
  39. package/dist/errors/database.d.ts.map +1 -0
  40. package/dist/errors/index.d.ts +8 -0
  41. package/dist/errors/index.d.ts.map +1 -0
  42. package/dist/errors/invalid-date.d.ts +5 -0
  43. package/dist/errors/invalid-date.d.ts.map +1 -0
  44. package/dist/errors/invalid-datetime.d.ts +5 -0
  45. package/dist/errors/invalid-datetime.d.ts.map +1 -0
  46. package/dist/errors/invalid-relation.d.ts +5 -0
  47. package/dist/errors/invalid-relation.d.ts.map +1 -0
  48. package/dist/errors/invalid-time.d.ts +5 -0
  49. package/dist/errors/invalid-time.d.ts.map +1 -0
  50. package/dist/errors/not-null.d.ts +7 -0
  51. package/dist/errors/not-null.d.ts.map +1 -0
  52. package/dist/fields/biginteger.d.ts +4 -0
  53. package/dist/fields/biginteger.d.ts.map +1 -0
  54. package/dist/fields/boolean.d.ts +6 -0
  55. package/dist/fields/boolean.d.ts.map +1 -0
  56. package/dist/fields/date.d.ts +6 -0
  57. package/dist/fields/date.d.ts.map +1 -0
  58. package/dist/fields/datetime.d.ts +6 -0
  59. package/dist/fields/datetime.d.ts.map +1 -0
  60. package/dist/fields/field.d.ts +7 -0
  61. package/dist/fields/field.d.ts.map +1 -0
  62. package/dist/fields/index.d.ts +4 -0
  63. package/dist/fields/index.d.ts.map +1 -0
  64. package/dist/fields/json.d.ts +6 -0
  65. package/dist/fields/json.d.ts.map +1 -0
  66. package/dist/fields/number.d.ts +6 -0
  67. package/dist/fields/number.d.ts.map +1 -0
  68. package/dist/fields/shared/parsers.d.ts +4 -0
  69. package/dist/fields/shared/parsers.d.ts.map +1 -0
  70. package/dist/fields/string.d.ts +6 -0
  71. package/dist/fields/string.d.ts.map +1 -0
  72. package/dist/fields/time.d.ts +6 -0
  73. package/dist/fields/time.d.ts.map +1 -0
  74. package/dist/fields/timestamp.d.ts +6 -0
  75. package/dist/fields/timestamp.d.ts.map +1 -0
  76. package/dist/index.d.ts +46 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +6211 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/index.mjs +6179 -0
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/lifecycles/index.d.ts +17 -0
  83. package/dist/lifecycles/index.d.ts.map +1 -0
  84. package/dist/lifecycles/subscribers/index.d.ts +5 -0
  85. package/dist/lifecycles/subscribers/index.d.ts.map +1 -0
  86. package/dist/lifecycles/subscribers/models-lifecycles.d.ts +6 -0
  87. package/dist/lifecycles/subscribers/models-lifecycles.d.ts.map +1 -0
  88. package/dist/lifecycles/subscribers/timestamps.d.ts +3 -0
  89. package/dist/lifecycles/subscribers/timestamps.d.ts.map +1 -0
  90. package/dist/lifecycles/types.d.ts +25 -0
  91. package/dist/lifecycles/types.d.ts.map +1 -0
  92. package/dist/metadata/index.d.ts +10 -0
  93. package/dist/metadata/index.d.ts.map +1 -0
  94. package/dist/metadata/metadata.d.ts +22 -0
  95. package/dist/metadata/metadata.d.ts.map +1 -0
  96. package/dist/metadata/relations.d.ts +16 -0
  97. package/dist/metadata/relations.d.ts.map +1 -0
  98. package/dist/migrations/index.d.ts +12 -0
  99. package/dist/migrations/index.d.ts.map +1 -0
  100. package/dist/migrations/storage.d.ts +15 -0
  101. package/dist/migrations/storage.d.ts.map +1 -0
  102. package/dist/query/helpers/index.d.ts +8 -0
  103. package/dist/query/helpers/index.d.ts.map +1 -0
  104. package/dist/query/helpers/join.d.ts +30 -0
  105. package/dist/query/helpers/join.d.ts.map +1 -0
  106. package/dist/query/helpers/order-by.d.ts +14 -0
  107. package/dist/query/helpers/order-by.d.ts.map +1 -0
  108. package/dist/query/helpers/populate/apply.d.ts +11 -0
  109. package/dist/query/helpers/populate/apply.d.ts.map +1 -0
  110. package/dist/query/helpers/populate/index.d.ts +4 -0
  111. package/dist/query/helpers/populate/index.d.ts.map +1 -0
  112. package/dist/query/helpers/populate/process.d.ts +24 -0
  113. package/dist/query/helpers/populate/process.d.ts.map +1 -0
  114. package/dist/query/helpers/search.d.ts +4 -0
  115. package/dist/query/helpers/search.d.ts.map +1 -0
  116. package/dist/query/helpers/streams/index.d.ts +2 -0
  117. package/dist/query/helpers/streams/index.d.ts.map +1 -0
  118. package/dist/query/helpers/streams/readable.d.ts +39 -0
  119. package/dist/query/helpers/streams/readable.d.ts.map +1 -0
  120. package/dist/query/helpers/transform.d.ts +8 -0
  121. package/dist/query/helpers/transform.d.ts.map +1 -0
  122. package/dist/query/helpers/where.d.ts +19 -0
  123. package/dist/query/helpers/where.d.ts.map +1 -0
  124. package/dist/query/index.d.ts +3 -0
  125. package/dist/query/index.d.ts.map +1 -0
  126. package/dist/query/query-builder.d.ts +79 -0
  127. package/dist/query/query-builder.d.ts.map +1 -0
  128. package/dist/query/types.d.ts +8 -0
  129. package/dist/query/types.d.ts.map +1 -0
  130. package/dist/schema/builder.d.ts +33 -0
  131. package/dist/schema/builder.d.ts.map +1 -0
  132. package/dist/schema/diff.d.ts +7 -0
  133. package/dist/schema/diff.d.ts.map +1 -0
  134. package/dist/schema/index.d.ts +20 -0
  135. package/dist/schema/index.d.ts.map +1 -0
  136. package/dist/schema/schema.d.ts +4 -0
  137. package/dist/schema/schema.d.ts.map +1 -0
  138. package/dist/schema/storage.d.ts +10 -0
  139. package/dist/schema/storage.d.ts.map +1 -0
  140. package/dist/schema/types.d.ts +103 -0
  141. package/dist/schema/types.d.ts.map +1 -0
  142. package/dist/transaction-context.d.ts +22 -0
  143. package/dist/transaction-context.d.ts.map +1 -0
  144. package/dist/types/index.d.ts +169 -0
  145. package/dist/types/index.d.ts.map +1 -0
  146. package/dist/utils/content-types.d.ts +13 -0
  147. package/dist/utils/content-types.d.ts.map +1 -0
  148. package/dist/utils/knex.d.ts +12 -0
  149. package/dist/utils/knex.d.ts.map +1 -0
  150. package/dist/utils/types.d.ts +10 -0
  151. package/dist/utils/types.d.ts.map +1 -0
  152. package/dist/validations/index.d.ts +6 -0
  153. package/dist/validations/index.d.ts.map +1 -0
  154. package/dist/validations/relations/bidirectional.d.ts +12 -0
  155. package/dist/validations/relations/bidirectional.d.ts.map +1 -0
  156. package/dist/validations/relations/index.d.ts +7 -0
  157. package/dist/validations/relations/index.d.ts.map +1 -0
  158. package/package.json +20 -8
  159. package/.eslintignore +0 -2
  160. package/.eslintrc.js +0 -4
  161. package/jest.config.js +0 -6
  162. package/lib/__tests__/index.test.js +0 -93
  163. package/lib/__tests__/lifecycles.test.js +0 -55
  164. package/lib/connection.js +0 -64
  165. package/lib/dialects/dialect.js +0 -63
  166. package/lib/dialects/index.js +0 -53
  167. package/lib/dialects/mysql/constants.js +0 -6
  168. package/lib/dialects/mysql/database-inspector.js +0 -37
  169. package/lib/dialects/mysql/index.js +0 -92
  170. package/lib/dialects/mysql/schema-inspector.js +0 -234
  171. package/lib/dialects/postgresql/index.js +0 -65
  172. package/lib/dialects/postgresql/schema-inspector.js +0 -283
  173. package/lib/dialects/sqlite/index.js +0 -87
  174. package/lib/dialects/sqlite/schema-inspector.js +0 -151
  175. package/lib/entity-manager/__tests__/relations-orderer.test.js +0 -186
  176. package/lib/entity-manager/__tests__/sort-connect-array.test.js +0 -79
  177. package/lib/entity-manager/entity-repository.js +0 -164
  178. package/lib/entity-manager/index.js +0 -1385
  179. package/lib/entity-manager/morph-relations.js +0 -63
  180. package/lib/entity-manager/regular-relations.js +0 -506
  181. package/lib/entity-manager/relations/cloning/regular-relations.js +0 -76
  182. package/lib/entity-manager/relations-orderer.js +0 -225
  183. package/lib/errors/database.js +0 -12
  184. package/lib/errors/index.js +0 -17
  185. package/lib/errors/invalid-date.js +0 -14
  186. package/lib/errors/invalid-datetime.js +0 -14
  187. package/lib/errors/invalid-relation.js +0 -14
  188. package/lib/errors/invalid-time.js +0 -14
  189. package/lib/errors/not-null.js +0 -15
  190. package/lib/fields/biginteger.js +0 -17
  191. package/lib/fields/boolean.js +0 -39
  192. package/lib/fields/date.js +0 -16
  193. package/lib/fields/datetime.js +0 -19
  194. package/lib/fields/field.js +0 -17
  195. package/lib/fields/index.d.ts +0 -9
  196. package/lib/fields/index.js +0 -50
  197. package/lib/fields/json.js +0 -21
  198. package/lib/fields/number.js +0 -23
  199. package/lib/fields/shared/parsers.js +0 -71
  200. package/lib/fields/string.js +0 -17
  201. package/lib/fields/time.js +0 -17
  202. package/lib/fields/timestamp.js +0 -19
  203. package/lib/index.d.ts +0 -198
  204. package/lib/index.js +0 -129
  205. package/lib/lifecycles/index.d.ts +0 -51
  206. package/lib/lifecycles/index.js +0 -90
  207. package/lib/lifecycles/subscribers/index.d.ts +0 -11
  208. package/lib/lifecycles/subscribers/models-lifecycles.js +0 -19
  209. package/lib/lifecycles/subscribers/timestamps.js +0 -65
  210. package/lib/metadata/index.js +0 -244
  211. package/lib/metadata/relations.js +0 -578
  212. package/lib/migrations/index.d.ts +0 -9
  213. package/lib/migrations/index.js +0 -75
  214. package/lib/migrations/storage.js +0 -44
  215. package/lib/query/helpers/index.js +0 -11
  216. package/lib/query/helpers/join.js +0 -96
  217. package/lib/query/helpers/order-by.js +0 -70
  218. package/lib/query/helpers/populate/apply.js +0 -664
  219. package/lib/query/helpers/populate/index.js +0 -9
  220. package/lib/query/helpers/populate/process.js +0 -102
  221. package/lib/query/helpers/search.js +0 -84
  222. package/lib/query/helpers/streams/index.js +0 -5
  223. package/lib/query/helpers/streams/readable.js +0 -174
  224. package/lib/query/helpers/transform.js +0 -84
  225. package/lib/query/helpers/where.js +0 -365
  226. package/lib/query/index.js +0 -7
  227. package/lib/query/query-builder.js +0 -514
  228. package/lib/schema/__tests__/schema-diff.test.js +0 -231
  229. package/lib/schema/builder.js +0 -386
  230. package/lib/schema/diff.js +0 -399
  231. package/lib/schema/index.d.ts +0 -49
  232. package/lib/schema/index.js +0 -94
  233. package/lib/schema/schema.js +0 -202
  234. package/lib/schema/storage.js +0 -76
  235. package/lib/transaction-context.js +0 -68
  236. package/lib/types/index.d.ts +0 -6
  237. package/lib/types/index.js +0 -35
  238. package/lib/utils/content-types.js +0 -40
  239. package/lib/utils/knex.js +0 -22
  240. package/lib/validations/index.js +0 -20
  241. package/lib/validations/relations/bidirectional.js +0 -89
  242. package/lib/validations/relations/index.js +0 -14
@@ -1,365 +0,0 @@
1
- 'use strict';
2
-
3
- const { isArray, castArray, keys, isPlainObject } = require('lodash/fp');
4
-
5
- const { isOperatorOfType } = require('@strapi/utils');
6
- const types = require('../../types');
7
- const { createField } = require('../../fields');
8
- const { createJoin } = require('./join');
9
- const { toColumnName } = require('./transform');
10
- const { isKnexQuery } = require('../../utils/knex');
11
-
12
- const castValue = (value, attribute) => {
13
- if (!attribute) {
14
- return value;
15
- }
16
-
17
- if (types.isScalar(attribute.type) && !isKnexQuery(value)) {
18
- const field = createField(attribute);
19
-
20
- return value === null ? null : field.toDB(value);
21
- }
22
-
23
- return value;
24
- };
25
-
26
- const processAttributeWhere = (attribute, where, operator = '$eq') => {
27
- if (isArray(where)) {
28
- return where.map((sub) => processAttributeWhere(attribute, sub, operator));
29
- }
30
-
31
- if (!isPlainObject(where)) {
32
- if (isOperatorOfType('cast', operator)) {
33
- return castValue(where, attribute);
34
- }
35
-
36
- return where;
37
- }
38
-
39
- const filters = {};
40
-
41
- for (const key of Object.keys(where)) {
42
- const value = where[key];
43
-
44
- if (!isOperatorOfType('where', key)) {
45
- throw new Error(`Undefined attribute level operator ${key}`);
46
- }
47
-
48
- filters[key] = processAttributeWhere(attribute, value, key);
49
- }
50
-
51
- return filters;
52
- };
53
-
54
- /**
55
- * Process where parameter
56
- * @param {Object} where
57
- * @param {Object} ctx
58
- * @param {number} depth
59
- * @returns {Object}
60
- */
61
- const processWhere = (where, ctx) => {
62
- if (!isArray(where) && !isPlainObject(where)) {
63
- throw new Error('Where must be an array or an object');
64
- }
65
-
66
- if (isArray(where)) {
67
- return where.map((sub) => processWhere(sub, ctx));
68
- }
69
-
70
- const processNested = (where, ctx) => {
71
- if (!isPlainObject(where)) {
72
- return where;
73
- }
74
-
75
- return processWhere(where, ctx);
76
- };
77
-
78
- const { db, uid, qb, alias } = ctx;
79
- const meta = db.metadata.get(uid);
80
-
81
- const filters = {};
82
-
83
- // for each key in where
84
- for (const key of Object.keys(where)) {
85
- const value = where[key];
86
-
87
- // if operator $and $or then loop over them
88
- if (isOperatorOfType('group', key)) {
89
- filters[key] = value.map((sub) => processNested(sub, ctx));
90
- continue;
91
- }
92
-
93
- if (key === '$not') {
94
- filters[key] = processNested(value, ctx);
95
- continue;
96
- }
97
-
98
- if (isOperatorOfType('where', key)) {
99
- throw new Error(
100
- `Only $and, $or and $not can only be used as root level operators. Found ${key}.`
101
- );
102
- }
103
-
104
- const attribute = meta.attributes[key];
105
-
106
- if (!attribute) {
107
- filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);
108
- continue;
109
- }
110
-
111
- if (types.isRelation(attribute.type)) {
112
- // attribute
113
- const subAlias = createJoin(ctx, {
114
- alias: alias || qb.alias,
115
- uid,
116
- attributeName: key,
117
- attribute,
118
- });
119
-
120
- let nestedWhere = processNested(value, {
121
- db,
122
- qb,
123
- alias: subAlias,
124
- uid: attribute.target,
125
- });
126
-
127
- if (!isPlainObject(nestedWhere) || isOperatorOfType('where', keys(nestedWhere)[0])) {
128
- nestedWhere = { [qb.aliasColumn('id', subAlias)]: nestedWhere };
129
- }
130
-
131
- // TODO: use a better merge logic (push to $and when collisions)
132
- Object.assign(filters, nestedWhere);
133
-
134
- continue;
135
- }
136
-
137
- if (types.isScalar(attribute.type)) {
138
- const columnName = toColumnName(meta, key);
139
- const aliasedColumnName = qb.aliasColumn(columnName, alias);
140
-
141
- filters[aliasedColumnName] = processAttributeWhere(attribute, value);
142
-
143
- continue;
144
- }
145
-
146
- throw new Error(`You cannot filter on ${attribute.type} types`);
147
- }
148
-
149
- return filters;
150
- };
151
-
152
- // TODO: add type casting per operator at some point
153
- const applyOperator = (qb, column, operator, value) => {
154
- if (Array.isArray(value) && !isOperatorOfType('array', operator)) {
155
- return qb.where((subQB) => {
156
- value.forEach((subValue) =>
157
- subQB.orWhere((innerQB) => {
158
- applyOperator(innerQB, column, operator, subValue);
159
- })
160
- );
161
- });
162
- }
163
-
164
- switch (operator) {
165
- case '$not': {
166
- qb.whereNot((qb) => applyWhereToColumn(qb, column, value));
167
- break;
168
- }
169
-
170
- case '$in': {
171
- qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));
172
- break;
173
- }
174
-
175
- case '$notIn': {
176
- qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));
177
- break;
178
- }
179
-
180
- case '$eq': {
181
- if (value === null) {
182
- qb.whereNull(column);
183
- break;
184
- }
185
-
186
- qb.where(column, value);
187
- break;
188
- }
189
-
190
- case '$eqi': {
191
- if (value === null) {
192
- qb.whereNull(column);
193
- break;
194
- }
195
- qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}`]);
196
- break;
197
- }
198
- case '$ne': {
199
- if (value === null) {
200
- qb.whereNotNull(column);
201
- break;
202
- }
203
-
204
- qb.where(column, '<>', value);
205
- break;
206
- }
207
- case '$nei': {
208
- if (value === null) {
209
- qb.whereNotNull(column);
210
- break;
211
- }
212
- qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `${value}`]);
213
- break;
214
- }
215
- case '$gt': {
216
- qb.where(column, '>', value);
217
- break;
218
- }
219
- case '$gte': {
220
- qb.where(column, '>=', value);
221
- break;
222
- }
223
- case '$lt': {
224
- qb.where(column, '<', value);
225
- break;
226
- }
227
- case '$lte': {
228
- qb.where(column, '<=', value);
229
- break;
230
- }
231
- case '$null': {
232
- if (value) {
233
- qb.whereNull(column);
234
- } else {
235
- qb.whereNotNull(column);
236
- }
237
- break;
238
- }
239
- case '$notNull': {
240
- if (value) {
241
- qb.whereNotNull(column);
242
- } else {
243
- qb.whereNull(column);
244
- }
245
- break;
246
- }
247
- case '$between': {
248
- qb.whereBetween(column, value);
249
- break;
250
- }
251
- case '$startsWith': {
252
- qb.where(column, 'like', `${value}%`);
253
- break;
254
- }
255
- case '$startsWithi': {
256
- qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}%`]);
257
- break;
258
- }
259
- case '$endsWith': {
260
- qb.where(column, 'like', `%${value}`);
261
- break;
262
- }
263
- case '$endsWithi': {
264
- qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}`]);
265
- break;
266
- }
267
- case '$contains': {
268
- qb.where(column, 'like', `%${value}%`);
269
- break;
270
- }
271
-
272
- case '$notContains': {
273
- qb.whereNot(column, 'like', `%${value}%`);
274
- break;
275
- }
276
-
277
- case '$containsi': {
278
- qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}%`]);
279
- break;
280
- }
281
-
282
- case '$notContainsi': {
283
- qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `%${value}%`]);
284
- break;
285
- }
286
-
287
- // Experimental, only for internal use
288
- // Only on MySQL, PostgreSQL and CockroachDB.
289
- // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof
290
- case '$jsonSupersetOf': {
291
- qb.whereJsonSupersetOf(column, value);
292
- break;
293
- }
294
-
295
- // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf
296
-
297
- // TODO: relational operators every/some/exists/size ...
298
-
299
- default: {
300
- throw new Error(`Undefined attribute level operator ${operator}`);
301
- }
302
- }
303
- };
304
-
305
- const applyWhereToColumn = (qb, column, columnWhere) => {
306
- if (!isPlainObject(columnWhere)) {
307
- if (Array.isArray(columnWhere)) {
308
- return qb.whereIn(column, columnWhere);
309
- }
310
-
311
- return qb.where(column, columnWhere);
312
- }
313
-
314
- Object.keys(columnWhere).forEach((operator) => {
315
- const value = columnWhere[operator];
316
-
317
- applyOperator(qb, column, operator, value);
318
- });
319
- };
320
-
321
- const applyWhere = (qb, where) => {
322
- if (!isArray(where) && !isPlainObject(where)) {
323
- throw new Error('Where must be an array or an object');
324
- }
325
-
326
- if (isArray(where)) {
327
- return qb.where((subQB) => where.forEach((subWhere) => applyWhere(subQB, subWhere)));
328
- }
329
-
330
- Object.keys(where).forEach((key) => {
331
- const value = where[key];
332
-
333
- if (key === '$and') {
334
- return qb.where((subQB) => {
335
- value.forEach((v) => applyWhere(subQB, v));
336
- });
337
- }
338
-
339
- if (key === '$or') {
340
- return qb.where((subQB) => {
341
- value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));
342
- });
343
- }
344
-
345
- if (key === '$not') {
346
- return qb.whereNot((qb) => applyWhere(qb, value));
347
- }
348
-
349
- applyWhereToColumn(qb, key, value);
350
- });
351
- };
352
-
353
- const fieldLowerFn = (qb) => {
354
- // Postgres requires string to be passed
355
- if (qb.client.config.client === 'postgres') {
356
- return 'LOWER(CAST(?? AS VARCHAR))';
357
- }
358
-
359
- return 'LOWER(??)';
360
- };
361
-
362
- module.exports = {
363
- applyWhere,
364
- processWhere,
365
- };
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- const createQueryBuilder = require('./query-builder');
4
-
5
- module.exports = {
6
- createQueryBuilder,
7
- };