@stamhoofd/sql 2.119.0 → 2.120.1

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 (272) hide show
  1. package/dist/{src/ModelCache.d.ts → ModelCache.d.ts} +1 -1
  2. package/dist/ModelCache.d.ts.map +1 -0
  3. package/{src/ModelCache.ts → dist/ModelCache.js} +8 -16
  4. package/dist/ModelCache.js.map +1 -0
  5. package/dist/{src/QueryableModel.d.ts → QueryableModel.d.ts} +7 -6
  6. package/dist/QueryableModel.d.ts.map +1 -0
  7. package/dist/{src/QueryableModel.js → QueryableModel.js} +9 -13
  8. package/dist/QueryableModel.js.map +1 -0
  9. package/dist/{src/SQL.d.ts → SQL.d.ts} +7 -5
  10. package/dist/SQL.d.ts.map +1 -0
  11. package/dist/SQL.js +100 -0
  12. package/dist/SQL.js.map +1 -0
  13. package/dist/{src/SQLDelete.d.ts → SQLDelete.d.ts} +2 -2
  14. package/dist/SQLDelete.d.ts.map +1 -0
  15. package/dist/{src/SQLDelete.js → SQLDelete.js} +8 -12
  16. package/dist/SQLDelete.js.map +1 -0
  17. package/dist/SQLExpression.d.ts.map +1 -0
  18. package/dist/{src/SQLExpression.js → SQLExpression.js} +3 -8
  19. package/dist/SQLExpression.js.map +1 -0
  20. package/dist/{src/SQLExpressions.d.ts → SQLExpressions.d.ts} +2 -2
  21. package/dist/SQLExpressions.d.ts.map +1 -0
  22. package/dist/{src/SQLExpressions.js → SQLExpressions.js} +78 -115
  23. package/dist/SQLExpressions.js.map +1 -0
  24. package/dist/{src/SQLInsert.d.ts → SQLInsert.d.ts} +3 -2
  25. package/dist/SQLInsert.d.ts.map +1 -0
  26. package/dist/{src/SQLInsert.js → SQLInsert.js} +17 -21
  27. package/dist/SQLInsert.js.map +1 -0
  28. package/dist/{src/SQLJoin.d.ts → SQLJoin.d.ts} +1 -1
  29. package/dist/SQLJoin.d.ts.map +1 -0
  30. package/{src/SQLJoin.ts → dist/SQLJoin.js} +15 -18
  31. package/dist/SQLJoin.js.map +1 -0
  32. package/dist/{src/SQLJsonExpressions.d.ts → SQLJsonExpressions.d.ts} +2 -2
  33. package/dist/SQLJsonExpressions.d.ts.map +1 -0
  34. package/dist/{src/SQLJsonExpressions.js → SQLJsonExpressions.js} +31 -44
  35. package/dist/SQLJsonExpressions.js.map +1 -0
  36. package/dist/SQLLogger.d.ts.map +1 -0
  37. package/dist/{src/SQLLogger.js → SQLLogger.js} +5 -8
  38. package/dist/SQLLogger.js.map +1 -0
  39. package/dist/{src/SQLOrderBy.d.ts → SQLOrderBy.d.ts} +1 -1
  40. package/dist/SQLOrderBy.d.ts.map +1 -0
  41. package/dist/{src/SQLOrderBy.js → SQLOrderBy.js} +8 -13
  42. package/dist/SQLOrderBy.js.map +1 -0
  43. package/dist/{src/SQLSelect.d.ts → SQLSelect.d.ts} +3 -3
  44. package/dist/SQLSelect.d.ts.map +1 -0
  45. package/dist/{src/SQLSelect.js → SQLSelect.js} +24 -29
  46. package/dist/SQLSelect.js.map +1 -0
  47. package/dist/{src/SQLTranslatedStringHelper.d.ts → SQLTranslatedStringHelper.d.ts} +3 -2
  48. package/dist/SQLTranslatedStringHelper.d.ts.map +1 -0
  49. package/dist/SQLTranslatedStringHelper.js +33 -0
  50. package/dist/SQLTranslatedStringHelper.js.map +1 -0
  51. package/dist/{src/SQLUpdate.d.ts → SQLUpdate.d.ts} +3 -2
  52. package/dist/SQLUpdate.d.ts.map +1 -0
  53. package/{src/SQLUpdate.ts → dist/SQLUpdate.js} +18 -35
  54. package/dist/SQLUpdate.js.map +1 -0
  55. package/dist/{src/SQLWhere.d.ts → SQLWhere.d.ts} +3 -3
  56. package/dist/SQLWhere.d.ts.map +1 -0
  57. package/dist/{src/SQLWhere.js → SQLWhere.js} +42 -56
  58. package/dist/SQLWhere.js.map +1 -0
  59. package/dist/{src/filters → filters}/SQLFilter.d.ts +5 -5
  60. package/dist/filters/SQLFilter.d.ts.map +1 -0
  61. package/{src/filters/SQLFilter.ts → dist/filters/SQLFilter.js} +55 -121
  62. package/dist/filters/SQLFilter.js.map +1 -0
  63. package/dist/{src/filters → filters}/SQLSorter.d.ts +6 -6
  64. package/dist/filters/SQLSorter.d.ts.map +1 -0
  65. package/dist/{src/filters → filters}/SQLSorter.js +4 -7
  66. package/dist/filters/SQLSorter.js.map +1 -0
  67. package/dist/filters/compilers/contains.d.ts +4 -0
  68. package/dist/filters/compilers/contains.d.ts.map +1 -0
  69. package/{src/filters/compilers/contains.ts → dist/filters/compilers/contains.js} +7 -25
  70. package/dist/filters/compilers/contains.js.map +1 -0
  71. package/dist/filters/compilers/equals.d.ts +4 -0
  72. package/dist/filters/compilers/equals.d.ts.map +1 -0
  73. package/dist/filters/compilers/equals.js +44 -0
  74. package/dist/filters/compilers/equals.js.map +1 -0
  75. package/dist/filters/compilers/greater.d.ts +4 -0
  76. package/dist/filters/compilers/greater.d.ts.map +1 -0
  77. package/dist/filters/compilers/greater.js +15 -0
  78. package/dist/filters/compilers/greater.js.map +1 -0
  79. package/dist/filters/compilers/in.d.ts +4 -0
  80. package/dist/filters/compilers/in.d.ts.map +1 -0
  81. package/{src/filters/compilers/in.ts → dist/filters/compilers/in.js} +7 -21
  82. package/dist/filters/compilers/in.js.map +1 -0
  83. package/dist/filters/compilers/index.d.ts.map +1 -0
  84. package/{src/filters/compilers/index.ts → dist/filters/compilers/index.js} +1 -0
  85. package/dist/filters/compilers/index.js.map +1 -0
  86. package/dist/filters/compilers/less.d.ts +4 -0
  87. package/dist/filters/compilers/less.d.ts.map +1 -0
  88. package/dist/filters/compilers/less.js +15 -0
  89. package/dist/filters/compilers/less.js.map +1 -0
  90. package/dist/filters/helpers/isJSONColumn.d.ts +5 -0
  91. package/dist/filters/helpers/isJSONColumn.d.ts.map +1 -0
  92. package/{src/filters/helpers/isJSONColumn.ts → dist/filters/helpers/isJSONColumn.js} +4 -5
  93. package/dist/filters/helpers/isJSONColumn.js.map +1 -0
  94. package/dist/{src/filters → filters}/helpers/normalizeCompareValue.d.ts +1 -1
  95. package/dist/filters/helpers/normalizeCompareValue.d.ts.map +1 -0
  96. package/{src/filters/helpers/normalizeCompareValue.ts → dist/filters/helpers/normalizeCompareValue.js} +2 -20
  97. package/dist/filters/helpers/normalizeCompareValue.js.map +1 -0
  98. package/dist/index.d.ts +14 -14
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +14 -25
  101. package/dist/index.js.map +1 -1
  102. package/package.json +6 -6
  103. package/dist/src/ModelCache.d.ts.map +0 -1
  104. package/dist/src/ModelCache.js +0 -57
  105. package/dist/src/ModelCache.js.map +0 -1
  106. package/dist/src/QueryableModel.d.ts.map +0 -1
  107. package/dist/src/QueryableModel.js.map +0 -1
  108. package/dist/src/SQL.d.ts.map +0 -1
  109. package/dist/src/SQL.js +0 -103
  110. package/dist/src/SQL.js.map +0 -1
  111. package/dist/src/SQLDelete.d.ts.map +0 -1
  112. package/dist/src/SQLDelete.js.map +0 -1
  113. package/dist/src/SQLExpression.d.ts.map +0 -1
  114. package/dist/src/SQLExpression.js.map +0 -1
  115. package/dist/src/SQLExpressions.d.ts.map +0 -1
  116. package/dist/src/SQLExpressions.js.map +0 -1
  117. package/dist/src/SQLInsert.d.ts.map +0 -1
  118. package/dist/src/SQLInsert.js.map +0 -1
  119. package/dist/src/SQLJoin.d.ts.map +0 -1
  120. package/dist/src/SQLJoin.js +0 -61
  121. package/dist/src/SQLJoin.js.map +0 -1
  122. package/dist/src/SQLJsonExpressions.d.ts.map +0 -1
  123. package/dist/src/SQLJsonExpressions.js.map +0 -1
  124. package/dist/src/SQLLogger.d.ts.map +0 -1
  125. package/dist/src/SQLLogger.js.map +0 -1
  126. package/dist/src/SQLOrderBy.d.ts.map +0 -1
  127. package/dist/src/SQLOrderBy.js.map +0 -1
  128. package/dist/src/SQLSelect.d.ts.map +0 -1
  129. package/dist/src/SQLSelect.js.map +0 -1
  130. package/dist/src/SQLTranslatedStringHelper.d.ts.map +0 -1
  131. package/dist/src/SQLTranslatedStringHelper.js +0 -37
  132. package/dist/src/SQLTranslatedStringHelper.js.map +0 -1
  133. package/dist/src/SQLUpdate.d.ts.map +0 -1
  134. package/dist/src/SQLUpdate.js +0 -60
  135. package/dist/src/SQLUpdate.js.map +0 -1
  136. package/dist/src/SQLWhere.d.ts.map +0 -1
  137. package/dist/src/SQLWhere.js.map +0 -1
  138. package/dist/src/filters/SQLFilter.d.ts.map +0 -1
  139. package/dist/src/filters/SQLFilter.js +0 -220
  140. package/dist/src/filters/SQLFilter.js.map +0 -1
  141. package/dist/src/filters/SQLSorter.d.ts.map +0 -1
  142. package/dist/src/filters/SQLSorter.js.map +0 -1
  143. package/dist/src/filters/compilers/contains.d.ts +0 -4
  144. package/dist/src/filters/compilers/contains.d.ts.map +0 -1
  145. package/dist/src/filters/compilers/contains.js +0 -29
  146. package/dist/src/filters/compilers/contains.js.map +0 -1
  147. package/dist/src/filters/compilers/equals.d.ts +0 -4
  148. package/dist/src/filters/compilers/equals.d.ts.map +0 -1
  149. package/dist/src/filters/compilers/equals.js +0 -47
  150. package/dist/src/filters/compilers/equals.js.map +0 -1
  151. package/dist/src/filters/compilers/greater.d.ts +0 -4
  152. package/dist/src/filters/compilers/greater.d.ts.map +0 -1
  153. package/dist/src/filters/compilers/greater.js +0 -18
  154. package/dist/src/filters/compilers/greater.js.map +0 -1
  155. package/dist/src/filters/compilers/in.d.ts +0 -4
  156. package/dist/src/filters/compilers/in.d.ts.map +0 -1
  157. package/dist/src/filters/compilers/in.js +0 -51
  158. package/dist/src/filters/compilers/in.js.map +0 -1
  159. package/dist/src/filters/compilers/index.d.ts.map +0 -1
  160. package/dist/src/filters/compilers/index.js +0 -8
  161. package/dist/src/filters/compilers/index.js.map +0 -1
  162. package/dist/src/filters/compilers/less.d.ts +0 -4
  163. package/dist/src/filters/compilers/less.d.ts.map +0 -1
  164. package/dist/src/filters/compilers/less.js +0 -18
  165. package/dist/src/filters/compilers/less.js.map +0 -1
  166. package/dist/src/filters/helpers/isJSONColumn.d.ts +0 -4
  167. package/dist/src/filters/helpers/isJSONColumn.d.ts.map +0 -1
  168. package/dist/src/filters/helpers/isJSONColumn.js +0 -17
  169. package/dist/src/filters/helpers/isJSONColumn.js.map +0 -1
  170. package/dist/src/filters/helpers/normalizeCompareValue.d.ts.map +0 -1
  171. package/dist/src/filters/helpers/normalizeCompareValue.js +0 -87
  172. package/dist/src/filters/helpers/normalizeCompareValue.js.map +0 -1
  173. package/dist/tests/filters/$and.test.d.ts +0 -2
  174. package/dist/tests/filters/$and.test.d.ts.map +0 -1
  175. package/dist/tests/filters/$and.test.js +0 -216
  176. package/dist/tests/filters/$and.test.js.map +0 -1
  177. package/dist/tests/filters/$contains.test.d.ts +0 -2
  178. package/dist/tests/filters/$contains.test.d.ts.map +0 -1
  179. package/dist/tests/filters/$contains.test.js +0 -917
  180. package/dist/tests/filters/$contains.test.js.map +0 -1
  181. package/dist/tests/filters/$eq.test.d.ts +0 -2
  182. package/dist/tests/filters/$eq.test.d.ts.map +0 -1
  183. package/dist/tests/filters/$eq.test.js +0 -1464
  184. package/dist/tests/filters/$eq.test.js.map +0 -1
  185. package/dist/tests/filters/$gt.test.d.ts +0 -2
  186. package/dist/tests/filters/$gt.test.d.ts.map +0 -1
  187. package/dist/tests/filters/$gt.test.js +0 -641
  188. package/dist/tests/filters/$gt.test.js.map +0 -1
  189. package/dist/tests/filters/$gte.test.d.ts +0 -2
  190. package/dist/tests/filters/$gte.test.d.ts.map +0 -1
  191. package/dist/tests/filters/$gte.test.js +0 -433
  192. package/dist/tests/filters/$gte.test.js.map +0 -1
  193. package/dist/tests/filters/$in.test.d.ts +0 -2
  194. package/dist/tests/filters/$in.test.d.ts.map +0 -1
  195. package/dist/tests/filters/$in.test.js +0 -773
  196. package/dist/tests/filters/$in.test.js.map +0 -1
  197. package/dist/tests/filters/$lt.test.d.ts +0 -2
  198. package/dist/tests/filters/$lt.test.d.ts.map +0 -1
  199. package/dist/tests/filters/$lt.test.js +0 -433
  200. package/dist/tests/filters/$lt.test.js.map +0 -1
  201. package/dist/tests/filters/$lte.test.d.ts +0 -2
  202. package/dist/tests/filters/$lte.test.d.ts.map +0 -1
  203. package/dist/tests/filters/$lte.test.js +0 -472
  204. package/dist/tests/filters/$lte.test.js.map +0 -1
  205. package/dist/tests/filters/$neq.test.d.ts +0 -2
  206. package/dist/tests/filters/$neq.test.d.ts.map +0 -1
  207. package/dist/tests/filters/$neq.test.js +0 -32
  208. package/dist/tests/filters/$neq.test.js.map +0 -1
  209. package/dist/tests/filters/$not.test.d.ts +0 -2
  210. package/dist/tests/filters/$not.test.d.ts.map +0 -1
  211. package/dist/tests/filters/$not.test.js +0 -50
  212. package/dist/tests/filters/$not.test.js.map +0 -1
  213. package/dist/tests/filters/$or.test.d.ts +0 -2
  214. package/dist/tests/filters/$or.test.d.ts.map +0 -1
  215. package/dist/tests/filters/$or.test.js +0 -185
  216. package/dist/tests/filters/$or.test.js.map +0 -1
  217. package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts +0 -2
  218. package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts.map +0 -1
  219. package/dist/tests/filters/SQLTranslatedStringHelper.test.js +0 -491
  220. package/dist/tests/filters/SQLTranslatedStringHelper.test.js.map +0 -1
  221. package/dist/tests/filters/dot-syntax.test.d.ts +0 -2
  222. package/dist/tests/filters/dot-syntax.test.d.ts.map +0 -1
  223. package/dist/tests/filters/dot-syntax.test.js +0 -210
  224. package/dist/tests/filters/dot-syntax.test.js.map +0 -1
  225. package/dist/tests/filters/exists.test.d.ts +0 -2
  226. package/dist/tests/filters/exists.test.d.ts.map +0 -1
  227. package/dist/tests/filters/exists.test.js +0 -96
  228. package/dist/tests/filters/exists.test.js.map +0 -1
  229. package/dist/tests/filters/joined-relations.test.d.ts +0 -2
  230. package/dist/tests/filters/joined-relations.test.d.ts.map +0 -1
  231. package/dist/tests/filters/joined-relations.test.js +0 -167
  232. package/dist/tests/filters/joined-relations.test.js.map +0 -1
  233. package/dist/tests/filters/special-cases.test.d.ts +0 -2
  234. package/dist/tests/filters/special-cases.test.d.ts.map +0 -1
  235. package/dist/tests/filters/special-cases.test.js +0 -114
  236. package/dist/tests/filters/special-cases.test.js.map +0 -1
  237. package/dist/tests/filters/wildcard.test.d.ts +0 -2
  238. package/dist/tests/filters/wildcard.test.d.ts.map +0 -1
  239. package/dist/tests/filters/wildcard.test.js +0 -67
  240. package/dist/tests/filters/wildcard.test.js.map +0 -1
  241. package/dist/tests/jest.global.setup.d.ts +0 -3
  242. package/dist/tests/jest.global.setup.d.ts.map +0 -1
  243. package/dist/tests/jest.global.setup.js +0 -7
  244. package/dist/tests/jest.global.setup.js.map +0 -1
  245. package/dist/tests/jest.setup.d.ts +0 -2
  246. package/dist/tests/jest.setup.d.ts.map +0 -1
  247. package/dist/tests/jest.setup.js +0 -5
  248. package/dist/tests/jest.setup.js.map +0 -1
  249. package/dist/tests/utils/index.d.ts +0 -57
  250. package/dist/tests/utils/index.d.ts.map +0 -1
  251. package/dist/tests/utils/index.js +0 -206
  252. package/dist/tests/utils/index.js.map +0 -1
  253. package/dist/tsconfig.tsbuildinfo +0 -1
  254. package/src/QueryableModel.ts +0 -134
  255. package/src/SQL.ts +0 -128
  256. package/src/SQLDelete.ts +0 -73
  257. package/src/SQLExpression.ts +0 -34
  258. package/src/SQLExpressions.ts +0 -587
  259. package/src/SQLInsert.ts +0 -113
  260. package/src/SQLJsonExpressions.ts +0 -283
  261. package/src/SQLLogger.ts +0 -82
  262. package/src/SQLOrderBy.ts +0 -69
  263. package/src/SQLSelect.ts +0 -520
  264. package/src/SQLTranslatedStringHelper.ts +0 -40
  265. package/src/SQLWhere.ts +0 -744
  266. package/src/filters/SQLSorter.ts +0 -60
  267. package/src/filters/compilers/equals.ts +0 -73
  268. package/src/filters/compilers/greater.ts +0 -21
  269. package/src/filters/compilers/less.ts +0 -20
  270. /package/dist/{src/SQLExpression.d.ts → SQLExpression.d.ts} +0 -0
  271. /package/dist/{src/SQLLogger.d.ts → SQLLogger.d.ts} +0 -0
  272. /package/dist/{src/filters → filters}/compilers/index.d.ts +0 -0
@@ -1,773 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const SQLFilter_js_1 = require("../../src/filters/SQLFilter.js");
4
- const SQL_js_1 = require("../../src/SQL.js");
5
- const index_js_1 = require("../utils/index.js");
6
- describe('$in', () => {
7
- /**
8
- * Tests that should be repeated for all filter types
9
- */
10
- describe('Common checks', () => {
11
- // todo
12
- });
13
- it('throws when not passing an array', async () => {
14
- const filters = {
15
- ...SQLFilter_js_1.baseSQLFilterCompilers,
16
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
17
- };
18
- await (0, index_js_1.testError)({
19
- filter: {
20
- age: {
21
- $in: 18,
22
- },
23
- },
24
- filters,
25
- error: 'Expected array at $in filter',
26
- });
27
- });
28
- it('throws when passing more than 1000 values to the filter', async () => {
29
- const filters = {
30
- ...SQLFilter_js_1.baseSQLFilterCompilers,
31
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
32
- };
33
- await (0, index_js_1.testError)({
34
- filter: {
35
- age: {
36
- $in: Array.from({ length: 1001 }, (_, i) => i + 1),
37
- },
38
- },
39
- filters,
40
- error: 'Too many values in $in filter, maximum is 1000',
41
- });
42
- });
43
- it('can filter on $in', async () => {
44
- const filters = {
45
- ...SQLFilter_js_1.baseSQLFilterCompilers,
46
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
47
- };
48
- await (0, index_js_1.test)({
49
- filter: {
50
- age: {
51
- $in: [18, 19, 20],
52
- },
53
- },
54
- filters,
55
- query: {
56
- query: '`default`.`age` IN (?)',
57
- params: [
58
- [18, 19, 20],
59
- ],
60
- },
61
- });
62
- });
63
- it('can filter on single $in', async () => {
64
- const filters = {
65
- ...SQLFilter_js_1.baseSQLFilterCompilers,
66
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
67
- };
68
- await (0, index_js_1.test)({
69
- filter: {
70
- age: {
71
- $in: [18],
72
- },
73
- },
74
- filters,
75
- query: {
76
- query: '`default`.`age` = ?',
77
- params: [18],
78
- },
79
- });
80
- });
81
- it('can filter on empty $in', async () => {
82
- const filters = {
83
- ...SQLFilter_js_1.baseSQLFilterCompilers,
84
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
85
- };
86
- await (0, index_js_1.test)({
87
- filter: {
88
- age: {
89
- $in: [],
90
- },
91
- },
92
- filters,
93
- query: {
94
- query: '',
95
- params: [],
96
- },
97
- });
98
- });
99
- it('can invert $in inside', async () => {
100
- const filters = {
101
- ...SQLFilter_js_1.baseSQLFilterCompilers,
102
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
103
- };
104
- await (0, index_js_1.test)({
105
- filter: {
106
- age: {
107
- $not: {
108
- $in: [18, 19, 20],
109
- },
110
- },
111
- },
112
- filters,
113
- query: {
114
- query: '`default`.`age` NOT IN (?)',
115
- params: [
116
- [18, 19, 20],
117
- ],
118
- },
119
- });
120
- });
121
- it('can invert $in outside', async () => {
122
- const filters = {
123
- ...SQLFilter_js_1.baseSQLFilterCompilers,
124
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
125
- };
126
- await (0, index_js_1.test)({
127
- filter: {
128
- $not: {
129
- age: {
130
- $in: [18, 19, 20],
131
- },
132
- },
133
- },
134
- filters,
135
- query: {
136
- query: '`default`.`age` NOT IN (?)',
137
- params: [
138
- [18, 19, 20],
139
- ],
140
- },
141
- });
142
- });
143
- it('splits up when using null', async () => {
144
- const filters = {
145
- ...SQLFilter_js_1.baseSQLFilterCompilers,
146
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
147
- };
148
- await (0, index_js_1.test)({
149
- filter: {
150
- age: {
151
- $in: [18, 19, 20, null],
152
- },
153
- },
154
- filters,
155
- query: {
156
- query: '`default`.`age` IS NULL OR `default`.`age` IN (?)',
157
- params: [
158
- [18, 19, 20],
159
- ],
160
- },
161
- });
162
- });
163
- it('works when only including null', async () => {
164
- const filters = {
165
- ...SQLFilter_js_1.baseSQLFilterCompilers,
166
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
167
- };
168
- await (0, index_js_1.test)({
169
- filter: {
170
- age: {
171
- $in: [null],
172
- },
173
- },
174
- filters,
175
- query: {
176
- query: '`default`.`age` IS NULL',
177
- params: [],
178
- },
179
- });
180
- });
181
- it('throws an error when trying to search in json objects', async () => {
182
- const filters = {
183
- ...SQLFilter_js_1.baseSQLFilterCompilers,
184
- settings: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('settings'), type: SQLFilter_js_1.SQLValueType.JSONObject, nullable: false }),
185
- };
186
- await (0, index_js_1.testError)({
187
- filter: {
188
- settings: {
189
- $in: ['apple', 'banana'],
190
- },
191
- },
192
- filters,
193
- error: 'Cannot compare with a JSON object',
194
- });
195
- });
196
- describe('JSON', () => {
197
- const tableDefinition = {
198
- settings: {
199
- type: 'json',
200
- nullable: true,
201
- },
202
- };
203
- const filters = {
204
- ...SQLFilter_js_1.baseSQLFilterCompilers,
205
- 'settings.randomValues': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.randomValues'), type: SQLFilter_js_1.SQLValueType.JSONArray, nullable: true }),
206
- 'settings.name': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.name'), type: SQLFilter_js_1.SQLValueType.JSONString, nullable: true }),
207
- };
208
- it('Can check if a string is in a JSON string array, case insensitive', async () => {
209
- await (0, index_js_1.testMatch)({
210
- tableDefinition,
211
- filters,
212
- rows: [
213
- {
214
- settings: {
215
- randomValues: [
216
- 'apple',
217
- 'Banana',
218
- 'cherrY',
219
- ],
220
- },
221
- },
222
- ],
223
- doMatch: [
224
- {
225
- 'settings.randomValues': {
226
- $in: ['apple', 'banana', 'cherry', 'other'],
227
- },
228
- },
229
- {
230
- 'settings.randomValues': {
231
- $in: ['apple', 'banana', 'other'],
232
- },
233
- },
234
- {
235
- 'settings.randomValues': {
236
- $in: ['Apple', 'banana', 'other'],
237
- },
238
- },
239
- ],
240
- doNotMatch: [
241
- {
242
- 'settings.randomValues': {
243
- $in: ['orange', 'kiwi'],
244
- },
245
- },
246
- {
247
- 'settings.randomValues': {
248
- $in: ['pple'],
249
- },
250
- },
251
- {
252
- 'settings.randomValues': {
253
- $in: ['àpple'],
254
- },
255
- },
256
- ],
257
- });
258
- });
259
- it('Can check if a JSON string equals values, case insensitive', async () => {
260
- await (0, index_js_1.testMatch)({
261
- tableDefinition,
262
- filters,
263
- rows: [
264
- {
265
- settings: {
266
- name: 'aPple',
267
- },
268
- },
269
- {
270
- settings: {
271
- name: 'apple',
272
- },
273
- },
274
- {
275
- settings: {
276
- name: 'APPLE',
277
- },
278
- },
279
- ],
280
- doMatch: [
281
- {
282
- 'settings.name': {
283
- $in: ['apple', 'banana', 'other'],
284
- },
285
- },
286
- {
287
- 'settings.name': {
288
- $in: ['apple'],
289
- },
290
- },
291
- {
292
- 'settings.name': {
293
- $in: ['Apple', 'other'],
294
- },
295
- },
296
- ],
297
- doNotMatch: [],
298
- });
299
- });
300
- it('Can check if an emoji is in a JSON string array', async () => {
301
- await (0, index_js_1.testMatch)({
302
- tableDefinition,
303
- filters,
304
- rows: [
305
- {
306
- settings: {
307
- randomValues: [
308
- '🍎',
309
- '🍌',
310
- '👩🏽‍🎤',
311
- ],
312
- },
313
- },
314
- ],
315
- doMatch: [
316
- {
317
- 'settings.randomValues': {
318
- $in: ['🍎', '🍌', '👩🏽‍🎤', 'other'],
319
- },
320
- },
321
- {
322
- 'settings.randomValues': {
323
- $in: ['🍎', '🍌', 'other'],
324
- },
325
- },
326
- {
327
- 'settings.randomValues': {
328
- $in: ['👩🏽‍🎤', 'other'],
329
- },
330
- },
331
- {
332
- 'settings.randomValues': {
333
- $in: ['👩🏽‍🎤'],
334
- },
335
- },
336
- ],
337
- doNotMatch: [
338
- {
339
- 'settings.randomValues': {
340
- $in: ['other'],
341
- },
342
- },
343
- {
344
- 'settings.randomValues': {
345
- $in: ['👩🏽'],
346
- },
347
- },
348
- {
349
- 'settings.randomValues': {
350
- $in: ['👩🏻‍🎤'],
351
- },
352
- },
353
- ],
354
- });
355
- });
356
- it('Can check if null is in a JSON array', async () => {
357
- await (0, index_js_1.testMatch)({
358
- tableDefinition,
359
- filters,
360
- rows: [
361
- {
362
- settings: {
363
- randomValues: [
364
- null,
365
- 'Banana',
366
- false,
367
- 0,
368
- ],
369
- },
370
- },
371
- ],
372
- doMatch: [
373
- {
374
- 'settings.randomValues': {
375
- $in: ['apple', null],
376
- },
377
- },
378
- ],
379
- doNotMatch: [
380
- {
381
- 'settings.randomValues': {
382
- $in: ['apple'],
383
- },
384
- },
385
- ],
386
- });
387
- });
388
- it('Including null will also check on key existence for json arrays', async () => {
389
- await (0, index_js_1.testMatch)({
390
- tableDefinition,
391
- filters,
392
- rows: [
393
- {
394
- settings: null,
395
- },
396
- {
397
- settings: {},
398
- },
399
- {
400
- settings: {
401
- randomValues: null,
402
- },
403
- },
404
- ],
405
- doMatch: [
406
- {
407
- 'settings.randomValues': {
408
- $in: ['apple', null],
409
- },
410
- },
411
- {
412
- 'settings.randomValues': {
413
- $in: [null],
414
- },
415
- },
416
- ],
417
- doNotMatch: [
418
- {
419
- 'settings.randomValues': {
420
- $in: ['apple'],
421
- },
422
- },
423
- ],
424
- });
425
- });
426
- it('If a json array exists and does not contain null, it is not included when checking for null', async () => {
427
- await (0, index_js_1.testMatch)({
428
- tableDefinition,
429
- filters,
430
- rows: [
431
- {
432
- settings: {
433
- randomValues: [
434
- 'Banana',
435
- false,
436
- 0,
437
- ],
438
- },
439
- },
440
- ],
441
- doMatch: [
442
- {
443
- 'settings.randomValues': {
444
- $in: [false],
445
- },
446
- },
447
- ],
448
- doNotMatch: [
449
- {
450
- 'settings.randomValues': {
451
- $in: ['apple', null],
452
- },
453
- },
454
- ],
455
- });
456
- });
457
- it('Including null also matches when a JSON path does not exist', async () => {
458
- await (0, index_js_1.testMatch)({
459
- tableDefinition,
460
- filters,
461
- rows: [
462
- {
463
- settings: {},
464
- },
465
- ],
466
- doMatch: [
467
- {
468
- 'settings.randomValues': {
469
- $in: ['apple', 'banana', 'cherry', null],
470
- },
471
- },
472
- ],
473
- doNotMatch: [
474
- {
475
- 'settings.randomValues': {
476
- $in: ['apple', 'banana', 'cherry'],
477
- },
478
- },
479
- ],
480
- });
481
- });
482
- it('Can search numbers in a JSON array', async () => {
483
- await (0, index_js_1.testMatch)({
484
- tableDefinition,
485
- filters,
486
- rows: [
487
- {
488
- settings: {
489
- randomValues: [
490
- null,
491
- 'Banana',
492
- false,
493
- 0,
494
- 5,
495
- 15,
496
- ],
497
- },
498
- },
499
- ],
500
- doMatch: [
501
- {
502
- 'settings.randomValues': {
503
- $in: [5, 15],
504
- },
505
- },
506
- {
507
- 'settings.randomValues': {
508
- $in: [5],
509
- },
510
- },
511
- {
512
- 'settings.randomValues': {
513
- $in: [15],
514
- },
515
- },
516
- {
517
- 'settings.randomValues': {
518
- $in: [99, 15],
519
- },
520
- },
521
- ],
522
- doNotMatch: [
523
- {
524
- 'settings.randomValues': {
525
- $in: [6, 10],
526
- },
527
- },
528
- {
529
- 'settings.randomValues': {
530
- $in: [99, 14],
531
- },
532
- },
533
- {
534
- 'settings.randomValues': {
535
- $in: [],
536
- },
537
- },
538
- ],
539
- });
540
- });
541
- it('Can search booleans in a JSON array', async () => {
542
- await (0, index_js_1.testMatch)({
543
- tableDefinition,
544
- filters,
545
- rows: [
546
- {
547
- settings: {
548
- randomValues: [
549
- null,
550
- 'Banana',
551
- false,
552
- 1,
553
- ],
554
- },
555
- },
556
- ],
557
- doMatch: [
558
- {
559
- 'settings.randomValues': {
560
- $in: [false, true],
561
- },
562
- },
563
- {
564
- 'settings.randomValues': {
565
- $in: [false],
566
- },
567
- },
568
- ],
569
- doNotMatch: [
570
- {
571
- 'settings.randomValues': {
572
- $in: [true],
573
- },
574
- },
575
- {
576
- 'settings.randomValues': {
577
- $in: [0],
578
- },
579
- },
580
- {
581
- 'settings.randomValues': {
582
- $in: [],
583
- },
584
- },
585
- ],
586
- });
587
- });
588
- });
589
- describe('JSON scalars', () => {
590
- const tableDefinition = {
591
- settings: {
592
- type: 'json',
593
- nullable: true,
594
- },
595
- };
596
- const filters = {
597
- ...SQLFilter_js_1.baseSQLFilterCompilers,
598
- 'settings.scalar': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.scalar'), type: SQLFilter_js_1.SQLValueType.JSONScalar, nullable: true }),
599
- };
600
- it('Can compare with number scalars', async () => {
601
- await (0, index_js_1.testMatch)({
602
- tableDefinition,
603
- filters,
604
- rows: [
605
- {
606
- settings: {
607
- scalar: 5,
608
- },
609
- },
610
- ],
611
- doMatch: [
612
- {
613
- 'settings.scalar': {
614
- $in: [5, 6, 7],
615
- },
616
- },
617
- ],
618
- doNotMatch: [
619
- {
620
- 'settings.scalar': {
621
- $in: [4, 6, 7],
622
- },
623
- },
624
- ],
625
- });
626
- });
627
- it('Can compare case insensitive with string scalars', async () => {
628
- await (0, index_js_1.testMatch)({
629
- tableDefinition,
630
- filters,
631
- rows: [
632
- {
633
- settings: {
634
- scalar: 'Hello world',
635
- },
636
- },
637
- ],
638
- doMatch: [
639
- {
640
- 'settings.scalar': {
641
- $in: ['hello world'],
642
- },
643
- },
644
- {
645
- 'settings.scalar': {
646
- $in: ['Hello world'],
647
- },
648
- },
649
- ],
650
- doNotMatch: [
651
- {
652
- 'settings.scalar': {
653
- $in: ['hello', 'world'],
654
- },
655
- },
656
- {
657
- 'settings.scalar': {
658
- $in: [null],
659
- },
660
- },
661
- ],
662
- });
663
- });
664
- it('Can compare with null', async () => {
665
- await (0, index_js_1.testMatch)({
666
- tableDefinition,
667
- filters,
668
- rows: [
669
- {
670
- settings: {
671
- scalar: null,
672
- },
673
- },
674
- {
675
- settings: {
676
- other: 5,
677
- },
678
- },
679
- {
680
- settings: null,
681
- },
682
- ],
683
- doMatch: [
684
- {
685
- 'settings.scalar': {
686
- $in: [5, 6, 7, null],
687
- },
688
- },
689
- {
690
- 'settings.scalar': {
691
- // regression: when first
692
- $in: [null, 5, 6, 7],
693
- },
694
- },
695
- ],
696
- doNotMatch: [
697
- {
698
- 'settings.scalar': {
699
- $in: [5, 6, 7],
700
- },
701
- },
702
- ],
703
- });
704
- });
705
- it('Converts column to first provided value type (number)', async () => {
706
- await (0, index_js_1.testMatch)({
707
- tableDefinition,
708
- filters,
709
- rows: [
710
- {
711
- settings: {
712
- scalar: '5',
713
- },
714
- },
715
- {
716
- settings: {
717
- scalar: '6',
718
- },
719
- },
720
- {
721
- settings: {
722
- scalar: '07',
723
- },
724
- },
725
- ],
726
- doMatch: [
727
- {
728
- 'settings.scalar': {
729
- $in: [5, 6, 7],
730
- },
731
- },
732
- ],
733
- doNotMatch: [
734
- {
735
- 'settings.scalar': {
736
- $in: [-5, -6, -7],
737
- },
738
- },
739
- ],
740
- });
741
- });
742
- it('Throws when mixing types', async () => {
743
- await (0, index_js_1.testError)({
744
- filter: {
745
- 'settings.scalar': {
746
- $in: [18, 'hello'],
747
- },
748
- },
749
- filters,
750
- error: 'Cannot compare a string with a non-string column',
751
- });
752
- await (0, index_js_1.testError)({
753
- filter: {
754
- 'settings.scalar': {
755
- $in: [18, '17'],
756
- },
757
- },
758
- filters,
759
- error: 'Cannot compare a string with a non-string column',
760
- });
761
- await (0, index_js_1.testError)({
762
- filter: {
763
- 'settings.scalar': {
764
- $in: ['hello', 18],
765
- },
766
- },
767
- filters,
768
- error: 'Cannot compare a number with a non-number column',
769
- });
770
- });
771
- });
772
- });
773
- //# sourceMappingURL=$in.test.js.map