@stamhoofd/sql 2.119.0 → 2.120.0

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,1464 +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('$eq', () => {
7
- /**
8
- * Tests that should be repeated for all filter types
9
- */
10
- describe('Common checks', () => {
11
- it('Cannot be used at the root level', async () => {
12
- const filters = {
13
- ...SQLFilter_js_1.baseSQLFilterCompilers,
14
- };
15
- await (0, index_js_1.testMultipleErrors)({
16
- testFilters: [
17
- {
18
- $eq: 'value',
19
- },
20
- {
21
- $and: [
22
- {
23
- $eq: 'value',
24
- },
25
- ],
26
- },
27
- 'value',
28
- ],
29
- filters,
30
- error: 'Cannot compare at root level',
31
- });
32
- });
33
- });
34
- it('removes caps when filtering strings', async () => {
35
- const filters = {
36
- ...SQLFilter_js_1.baseSQLFilterCompilers,
37
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
38
- };
39
- // Caps are removed
40
- await (0, index_js_1.test)({
41
- filter: {
42
- name: {
43
- $eq: 'John Doe',
44
- },
45
- },
46
- filters,
47
- query: {
48
- query: '`default`.`name` = ?',
49
- params: ['john doe'],
50
- },
51
- });
52
- });
53
- it('converts true to 1', async () => {
54
- const filters = {
55
- ...SQLFilter_js_1.baseSQLFilterCompilers,
56
- enabled: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('enabled'), type: SQLFilter_js_1.SQLValueType.Boolean, nullable: false }),
57
- };
58
- await (0, index_js_1.testMultiple)({
59
- testFilters: [
60
- {
61
- enabled: true,
62
- },
63
- {
64
- enabled: {
65
- $eq: true,
66
- },
67
- },
68
- ],
69
- filters,
70
- query: {
71
- query: '`default`.`enabled` = ?',
72
- params: [1],
73
- },
74
- });
75
- });
76
- it('converts false to 0', async () => {
77
- const filters = {
78
- ...SQLFilter_js_1.baseSQLFilterCompilers,
79
- enabled: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('enabled'), type: SQLFilter_js_1.SQLValueType.Boolean, nullable: false }),
80
- };
81
- await (0, index_js_1.testMultiple)({
82
- testFilters: [
83
- {
84
- enabled: false,
85
- },
86
- {
87
- enabled: {
88
- $eq: false,
89
- },
90
- },
91
- ],
92
- filters,
93
- query: {
94
- query: '`default`.`enabled` = ?',
95
- params: [0],
96
- },
97
- });
98
- });
99
- it('allows 1 as true', async () => {
100
- const filters = {
101
- ...SQLFilter_js_1.baseSQLFilterCompilers,
102
- enabled: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('enabled'), type: SQLFilter_js_1.SQLValueType.Boolean, nullable: false }),
103
- };
104
- await (0, index_js_1.testMultiple)({
105
- testFilters: [
106
- {
107
- enabled: 1,
108
- },
109
- {
110
- enabled: {
111
- $eq: 1,
112
- },
113
- },
114
- ],
115
- filters,
116
- query: {
117
- query: '`default`.`enabled` = ?',
118
- params: [1],
119
- },
120
- });
121
- });
122
- it('allows 0 as false', async () => {
123
- const filters = {
124
- ...SQLFilter_js_1.baseSQLFilterCompilers,
125
- enabled: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('enabled'), type: SQLFilter_js_1.SQLValueType.Boolean, nullable: false }),
126
- };
127
- await (0, index_js_1.testMultiple)({
128
- testFilters: [
129
- {
130
- enabled: 0,
131
- },
132
- {
133
- enabled: {
134
- $eq: 0,
135
- },
136
- },
137
- ],
138
- filters,
139
- query: {
140
- query: '`default`.`enabled` = ?',
141
- params: [0],
142
- },
143
- });
144
- });
145
- it('comparing a nullable value is converted to <=> to be consistent with mysql', async () => {
146
- const filters = {
147
- ...SQLFilter_js_1.baseSQLFilterCompilers,
148
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
149
- };
150
- await (0, index_js_1.testMultiple)({
151
- testFilters: [
152
- {
153
- name: 'John Doe',
154
- },
155
- ],
156
- filters,
157
- query: {
158
- query: '`default`.`name` <=> ?',
159
- params: ['john doe'],
160
- },
161
- });
162
- });
163
- it('comparing a non-nullable value is not converted to <=>', async () => {
164
- const filters = {
165
- ...SQLFilter_js_1.baseSQLFilterCompilers,
166
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
167
- };
168
- await (0, index_js_1.testMultiple)({
169
- testFilters: [
170
- {
171
- name: 'John Doe',
172
- },
173
- ],
174
- filters,
175
- query: {
176
- query: '`default`.`name` = ?',
177
- params: ['john doe'],
178
- },
179
- });
180
- });
181
- it('not comparing a nullable value is converted to a NOT <=> to be consistent with mysql', async () => {
182
- const filters = {
183
- ...SQLFilter_js_1.baseSQLFilterCompilers,
184
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
185
- };
186
- await (0, index_js_1.testMultiple)({
187
- testFilters: [
188
- {
189
- name: {
190
- $neq: 'John Doe',
191
- },
192
- },
193
- ],
194
- filters,
195
- query: {
196
- query: 'NOT (`default`.`name` <=> ?)',
197
- params: ['john doe'],
198
- },
199
- });
200
- });
201
- it('does not allow numbers as boolean value', async () => {
202
- const filters = {
203
- ...SQLFilter_js_1.baseSQLFilterCompilers,
204
- enabled: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('enabled'), type: SQLFilter_js_1.SQLValueType.Boolean, nullable: false }),
205
- };
206
- await (0, index_js_1.testMultipleErrors)({
207
- testFilters: [
208
- {
209
- enabled: 2,
210
- },
211
- {
212
- enabled: {
213
- $eq: 2,
214
- },
215
- },
216
- {
217
- enabled: {
218
- $eq: -1,
219
- },
220
- },
221
- {
222
- enabled: {
223
- $eq: NaN,
224
- },
225
- },
226
- {
227
- enabled: {
228
- $eq: Infinity,
229
- },
230
- },
231
- ],
232
- filters,
233
- error: 'Cannot compare a number with a boolean column',
234
- });
235
- });
236
- it('cannot compare a number with a string', async () => {
237
- const filters = {
238
- ...SQLFilter_js_1.baseSQLFilterCompilers,
239
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
240
- };
241
- await (0, index_js_1.testError)({
242
- filter: {
243
- name: {
244
- $eq: 5,
245
- },
246
- },
247
- filters,
248
- error: 'Cannot compare a number with a non-number column',
249
- });
250
- });
251
- it('cannot compare a string with a number', async () => {
252
- const filters = {
253
- ...SQLFilter_js_1.baseSQLFilterCompilers,
254
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
255
- };
256
- await (0, index_js_1.testError)({
257
- filter: {
258
- age: {
259
- $eq: 'John Doe',
260
- },
261
- },
262
- filters,
263
- error: 'Cannot compare a string with a non-string column',
264
- });
265
- });
266
- it('cannot compare a number with a date', async () => {
267
- const filters = {
268
- ...SQLFilter_js_1.baseSQLFilterCompilers,
269
- createdAt: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('createdAt'), type: SQLFilter_js_1.SQLValueType.Datetime, nullable: false }),
270
- };
271
- await (0, index_js_1.testError)({
272
- filter: {
273
- createdAt: {
274
- $eq: 5,
275
- },
276
- },
277
- filters,
278
- error: 'Cannot compare a number with a non-number column',
279
- });
280
- });
281
- it('cannot compare a date with a string', async () => {
282
- const filters = {
283
- ...SQLFilter_js_1.baseSQLFilterCompilers,
284
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
285
- };
286
- await (0, index_js_1.testError)({
287
- filter: {
288
- name: {
289
- $eq: new Date(),
290
- },
291
- },
292
- filters,
293
- error: 'Cannot compare a date with a non-datetime column',
294
- });
295
- });
296
- it('cannot compare a date magic variable with a string', async () => {
297
- const filters = {
298
- ...SQLFilter_js_1.baseSQLFilterCompilers,
299
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
300
- };
301
- await (0, index_js_1.testError)({
302
- filter: {
303
- name: {
304
- $eq: {
305
- $: '$now',
306
- },
307
- },
308
- },
309
- filters,
310
- error: 'Cannot compare a date with a non-datetime column',
311
- });
312
- });
313
- it('$eq filter is interpreted automatically for numbers', async () => {
314
- const filters = {
315
- ...SQLFilter_js_1.baseSQLFilterCompilers,
316
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
317
- };
318
- await (0, index_js_1.test)({
319
- filter: {
320
- age: 5,
321
- },
322
- filters,
323
- query: {
324
- query: '`default`.`age` = ?',
325
- params: [5],
326
- },
327
- });
328
- });
329
- it('$eq filter is interpreted automatically for strings', async () => {
330
- const filters = {
331
- ...SQLFilter_js_1.baseSQLFilterCompilers,
332
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
333
- };
334
- await (0, index_js_1.test)({
335
- filter: {
336
- name: 'John Doe',
337
- },
338
- filters,
339
- query: {
340
- query: '`default`.`name` = ?',
341
- params: ['john doe'],
342
- },
343
- });
344
- });
345
- it('$eq filter is interpreted automatically for null', async () => {
346
- const filters = {
347
- ...SQLFilter_js_1.baseSQLFilterCompilers,
348
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
349
- };
350
- await (0, index_js_1.test)({
351
- filter: {
352
- name: null,
353
- },
354
- filters,
355
- query: {
356
- query: '`default`.`name` IS NULL',
357
- params: [],
358
- },
359
- });
360
- });
361
- it('$eq filter is interpreted automatically for magic variables', async () => {
362
- const filters = {
363
- ...SQLFilter_js_1.baseSQLFilterCompilers,
364
- createdAt: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('createdAt'), type: SQLFilter_js_1.SQLValueType.Datetime, nullable: false }),
365
- };
366
- jest.useFakeTimers().setSystemTime(new Date());
367
- try {
368
- await (0, index_js_1.test)({
369
- filter: {
370
- createdAt: {
371
- $: '$now',
372
- },
373
- },
374
- filters,
375
- query: {
376
- query: '`default`.`createdAt` = ?',
377
- params: [
378
- new Date(),
379
- ],
380
- },
381
- });
382
- }
383
- finally {
384
- jest.useRealTimers();
385
- }
386
- });
387
- describe('JSON', () => {
388
- const tableDefinition = {
389
- settings: {
390
- type: 'json',
391
- nullable: true,
392
- },
393
- };
394
- const filters = {
395
- ...SQLFilter_js_1.baseSQLFilterCompilers,
396
- '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: false }),
397
- // wip:
398
- 'settings.parents[*].name': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.parents[*].name'), type: SQLFilter_js_1.SQLValueType.JSONArray, nullable: false }),
399
- 'settings.parents[*].age': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.parents[*].age'), type: SQLFilter_js_1.SQLValueType.JSONArray, nullable: false }),
400
- '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 }),
401
- 'settings': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('settings'), type: SQLFilter_js_1.SQLValueType.JSONObject, nullable: true }),
402
- 'settings.enabled': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.enabled'), type: SQLFilter_js_1.SQLValueType.JSONBoolean, nullable: true }),
403
- 'settings.age': (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.jsonExtract(SQL_js_1.SQL.column('settings'), '$.age'), type: SQLFilter_js_1.SQLValueType.JSONNumber, nullable: true }),
404
- '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 }),
405
- };
406
- it('JSON scalars match case insensitive and whole string', async () => {
407
- await (0, index_js_1.testMatch)({
408
- tableDefinition,
409
- filters,
410
- rows: [
411
- {
412
- settings: {
413
- scalar: 'John Doe',
414
- },
415
- },
416
- ],
417
- doMatch: [
418
- {
419
- 'settings.scalar': 'John Doe',
420
- },
421
- {
422
- 'settings.scalar': {
423
- $eq: 'John Doe',
424
- },
425
- },
426
- {
427
- 'settings.scalar': 'john doe',
428
- },
429
- {
430
- 'settings.scalar': 'jOhn dOe',
431
- },
432
- ],
433
- doNotMatch: [
434
- {
435
- 'settings.scalar': 'Jane Doe',
436
- },
437
- {
438
- 'settings.scalar': 'John',
439
- },
440
- {
441
- 'settings.scalar': 'john',
442
- },
443
- {
444
- 'settings.scalar': 1415,
445
- },
446
- {
447
- 'settings.scalar': 14.15,
448
- },
449
- ],
450
- });
451
- });
452
- it('JSON strings match case insensitive and whole string', async () => {
453
- await (0, index_js_1.testMatch)({
454
- tableDefinition,
455
- filters,
456
- rows: [
457
- {
458
- settings: {
459
- name: 'John Doe',
460
- },
461
- },
462
- ],
463
- doMatch: [
464
- {
465
- 'settings.name': 'John Doe',
466
- },
467
- {
468
- 'settings.name': {
469
- $eq: 'John Doe',
470
- },
471
- },
472
- {
473
- 'settings.name': 'john doe',
474
- },
475
- {
476
- 'settings.name': 'jOhn dOe',
477
- },
478
- ],
479
- doNotMatch: [
480
- {
481
- 'settings.name': 'Jane Doe',
482
- },
483
- {
484
- 'settings.name': 'John',
485
- },
486
- {
487
- 'settings.name': 'john',
488
- },
489
- ],
490
- });
491
- });
492
- it('Can search strings in a string array', async () => {
493
- await (0, index_js_1.testMatch)({
494
- tableDefinition,
495
- filters,
496
- rows: [
497
- {
498
- settings: {
499
- name: 'Junior Doe',
500
- parents: [
501
- { name: 'John Doe' },
502
- { name: 'Jane Doe' },
503
- ],
504
- },
505
- },
506
- ],
507
- doMatch: [
508
- {
509
- 'settings.parents[*].name': 'John Doe',
510
- },
511
- {
512
- 'settings.parents[*].name': 'Jane Doe',
513
- },
514
- {
515
- 'settings.parents[*].name': 'jane doe',
516
- },
517
- {
518
- 'settings.parents[*].name': 'john doe',
519
- },
520
- ],
521
- doNotMatch: [
522
- {
523
- 'settings.parents[*].name': 'John',
524
- },
525
- {
526
- 'settings.parents[*].name': 'Jane',
527
- },
528
- {
529
- 'settings.parents[*].name': 'jane',
530
- },
531
- {
532
- 'settings.parents[*].name': 'john',
533
- },
534
- {
535
- 'settings.parents[*].name': 'Jane Doe ',
536
- },
537
- {
538
- 'settings.parents[*].name': 5,
539
- },
540
- {
541
- 'settings.parents[*].name': true,
542
- },
543
- ],
544
- });
545
- });
546
- it('Can search numbers in a number array', async () => {
547
- await (0, index_js_1.testMatch)({
548
- tableDefinition,
549
- filters,
550
- rows: [
551
- {
552
- settings: {
553
- name: 'Junior Doe',
554
- parents: [
555
- { name: 'John Doe', age: 50 },
556
- { name: 'Jane Doe', age: 45 },
557
- ],
558
- },
559
- },
560
- ],
561
- doMatch: [
562
- {
563
- 'settings.parents[*].age': 50,
564
- },
565
- {
566
- 'settings.parents[*].age': 45,
567
- },
568
- ],
569
- doNotMatch: [
570
- {
571
- 'settings.parents[*].age': 51,
572
- },
573
- {
574
- 'settings.parents[*].age': 49,
575
- },
576
- {
577
- 'settings.parents[*].age': 45.1,
578
- },
579
- {
580
- 'settings.parents[*].age': '49',
581
- },
582
- {
583
- 'settings.parents[*].age': 'test',
584
- },
585
- ],
586
- });
587
- });
588
- it('Can search in a mixed array', async () => {
589
- await (0, index_js_1.testMatch)({
590
- tableDefinition,
591
- filters,
592
- rows: [
593
- {
594
- settings: {
595
- name: 'Junior Doe',
596
- randomValues: [true, 0, 'tesT'],
597
- },
598
- },
599
- ],
600
- doMatch: [
601
- {
602
- 'settings.randomValues': true,
603
- },
604
- {
605
- 'settings.randomValues': 0,
606
- },
607
- {
608
- 'settings.randomValues': 'tesT',
609
- },
610
- {
611
- 'settings.randomValues': 'Test',
612
- },
613
- ],
614
- doNotMatch: [
615
- {
616
- 'settings.randomValues': false,
617
- },
618
- {
619
- 'settings.randomValues': 1,
620
- },
621
- {
622
- 'settings.randomValues': 'tes',
623
- },
624
- ],
625
- });
626
- });
627
- it('Can search null in a JSON array', async () => {
628
- await (0, index_js_1.testMatch)({
629
- tableDefinition,
630
- filters,
631
- rows: [
632
- {
633
- settings: {
634
- name: 'Junior Doe',
635
- parents: [
636
- { name: null, age: 50 },
637
- { name: 'Jane Doe', age: null },
638
- ],
639
- },
640
- },
641
- ],
642
- doMatch: [
643
- {
644
- 'settings.parents[*].age': null,
645
- },
646
- {
647
- 'settings.parents[*].name': null,
648
- },
649
- ],
650
- });
651
- await (0, index_js_1.testMatch)({
652
- tableDefinition,
653
- filters,
654
- rows: [
655
- {
656
- settings: {
657
- name: 'Junior Doe',
658
- parents: [
659
- { name: 'Set', age: 50 },
660
- { name: 'Jane Doe', age: 45 },
661
- ],
662
- },
663
- },
664
- ],
665
- doNotMatch: [
666
- {
667
- 'settings.parents[*].age': null,
668
- },
669
- {
670
- 'settings.parents[*].name': null,
671
- },
672
- ],
673
- });
674
- });
675
- it('Can check JSON booleans', async () => {
676
- await (0, index_js_1.testMatch)({
677
- tableDefinition,
678
- filters,
679
- rows: [
680
- {
681
- settings: {
682
- enabled: true,
683
- },
684
- },
685
- ],
686
- doMatch: [
687
- {
688
- 'settings.enabled': true,
689
- },
690
- {
691
- 'settings.enabled': 1,
692
- },
693
- ],
694
- doNotMatch: [
695
- {
696
- 'settings.enabled': false,
697
- },
698
- {
699
- 'settings.enabled': 0,
700
- },
701
- {
702
- 'settings.enabled': null,
703
- },
704
- ],
705
- });
706
- await (0, index_js_1.testMatch)({
707
- tableDefinition,
708
- filters,
709
- rows: [
710
- {
711
- settings: {
712
- enabled: false,
713
- },
714
- },
715
- ],
716
- doMatch: [
717
- {
718
- 'settings.enabled': false,
719
- },
720
- {
721
- 'settings.enabled': 0,
722
- },
723
- ],
724
- doNotMatch: [
725
- {
726
- 'settings.enabled': true,
727
- },
728
- {
729
- 'settings.enabled': 1,
730
- },
731
- {
732
- 'settings.enabled': null,
733
- },
734
- ],
735
- });
736
- await (0, index_js_1.testMatch)({
737
- tableDefinition,
738
- filters,
739
- rows: [
740
- {
741
- settings: {
742
- enabled: null,
743
- },
744
- },
745
- {
746
- settings: {},
747
- },
748
- {
749
- settings: null,
750
- },
751
- {
752
- settings: 'null',
753
- },
754
- ],
755
- doMatch: [
756
- {
757
- 'settings.enabled': null,
758
- },
759
- ],
760
- doNotMatch: [
761
- {
762
- 'settings.enabled': true,
763
- },
764
- {
765
- 'settings.enabled': false,
766
- },
767
- ],
768
- });
769
- });
770
- it('Can check JSON booleans as scalars', async () => {
771
- await (0, index_js_1.testMatch)({
772
- tableDefinition,
773
- filters,
774
- rows: [
775
- {
776
- settings: {
777
- scalar: true,
778
- },
779
- },
780
- {
781
- settings: {
782
- scalar: 1,
783
- },
784
- },
785
- ],
786
- doMatch: [
787
- {
788
- 'settings.scalar': true,
789
- },
790
- {
791
- 'settings.scalar': 1,
792
- },
793
- ],
794
- doNotMatch: [
795
- {
796
- 'settings.scalar': false,
797
- },
798
- {
799
- 'settings.scalar': 0,
800
- },
801
- {
802
- 'settings.scalar': null,
803
- },
804
- ],
805
- });
806
- await (0, index_js_1.testMatch)({
807
- tableDefinition,
808
- filters,
809
- rows: [
810
- {
811
- settings: {
812
- scalar: false,
813
- },
814
- },
815
- {
816
- settings: {
817
- scalar: 0,
818
- },
819
- },
820
- ],
821
- doMatch: [
822
- {
823
- 'settings.scalar': false,
824
- },
825
- {
826
- 'settings.scalar': 0,
827
- },
828
- ],
829
- doNotMatch: [
830
- {
831
- 'settings.scalar': true,
832
- },
833
- {
834
- 'settings.scalar': 1,
835
- },
836
- {
837
- 'settings.scalar': null,
838
- },
839
- ],
840
- });
841
- await (0, index_js_1.testMatch)({
842
- tableDefinition,
843
- filters,
844
- rows: [
845
- {
846
- settings: {
847
- scalar: null,
848
- },
849
- },
850
- {
851
- settings: {},
852
- },
853
- {
854
- settings: null,
855
- },
856
- {
857
- settings: 'null',
858
- },
859
- ],
860
- doMatch: [
861
- {
862
- 'settings.scalar': null,
863
- },
864
- ],
865
- doNotMatch: [
866
- {
867
- 'settings.scalar': true,
868
- },
869
- {
870
- 'settings.scalar': false,
871
- },
872
- {
873
- 'settings.scalar': 1,
874
- },
875
- {
876
- 'settings.scalar': 0,
877
- },
878
- ],
879
- });
880
- });
881
- it('Can compare JSON numbers', async () => {
882
- await (0, index_js_1.testMatch)({
883
- tableDefinition,
884
- filters,
885
- rows: [
886
- {
887
- settings: {
888
- age: 10,
889
- },
890
- },
891
- ],
892
- doMatch: [
893
- {
894
- 'settings.age': 10,
895
- },
896
- ],
897
- doNotMatch: [
898
- {
899
- 'settings.age': 11,
900
- },
901
- {
902
- 'settings.age': 9,
903
- },
904
- ],
905
- });
906
- await (0, index_js_1.testMatch)({
907
- tableDefinition,
908
- filters,
909
- rows: [
910
- {
911
- settings: {
912
- age: null,
913
- },
914
- },
915
- {
916
- settings: {},
917
- },
918
- {
919
- settings: null,
920
- },
921
- {
922
- settings: 'null',
923
- },
924
- ],
925
- doMatch: [
926
- {
927
- 'settings.age': null,
928
- },
929
- ],
930
- doNotMatch: [
931
- {
932
- 'settings.age': 0,
933
- },
934
- {
935
- 'settings.age': 15,
936
- },
937
- ],
938
- });
939
- await (0, index_js_1.testMatch)({
940
- tableDefinition,
941
- filters,
942
- rows: [
943
- {
944
- settings: {
945
- age: null,
946
- },
947
- },
948
- {
949
- settings: {},
950
- },
951
- {
952
- settings: null,
953
- },
954
- {
955
- settings: 'null',
956
- },
957
- ],
958
- doMatch: [
959
- {
960
- 'settings.age': null,
961
- },
962
- ],
963
- doNotMatch: [
964
- {
965
- 'settings.age': 1,
966
- },
967
- {
968
- 'settings.age': -5,
969
- },
970
- ],
971
- });
972
- });
973
- it('Can compare JSON numbers as scalars', async () => {
974
- await (0, index_js_1.testMatch)({
975
- tableDefinition,
976
- filters,
977
- rows: [
978
- {
979
- settings: {
980
- scalar: 10,
981
- },
982
- },
983
- ],
984
- doMatch: [
985
- {
986
- 'settings.scalar': 10,
987
- },
988
- ],
989
- doNotMatch: [
990
- {
991
- 'settings.scalar': 11,
992
- },
993
- {
994
- 'settings.scalar': 9,
995
- },
996
- ],
997
- });
998
- await (0, index_js_1.testMatch)({
999
- tableDefinition,
1000
- filters,
1001
- rows: [
1002
- {
1003
- settings: {
1004
- scalar: null,
1005
- },
1006
- },
1007
- {
1008
- settings: {},
1009
- },
1010
- {
1011
- settings: null,
1012
- },
1013
- {
1014
- settings: 'null',
1015
- },
1016
- ],
1017
- doMatch: [
1018
- {
1019
- 'settings.scalar': null,
1020
- },
1021
- ],
1022
- doNotMatch: [
1023
- {
1024
- 'settings.scalar': 0,
1025
- },
1026
- ],
1027
- });
1028
- await (0, index_js_1.testMatch)({
1029
- tableDefinition,
1030
- filters,
1031
- rows: [
1032
- {
1033
- settings: {
1034
- scalar: null,
1035
- },
1036
- },
1037
- {
1038
- settings: {},
1039
- },
1040
- {
1041
- settings: null,
1042
- },
1043
- {
1044
- settings: 'null',
1045
- },
1046
- ],
1047
- doMatch: [
1048
- {
1049
- 'settings.scalar': null,
1050
- },
1051
- ],
1052
- doNotMatch: [
1053
- {
1054
- 'settings.scalar': 1,
1055
- },
1056
- {
1057
- 'settings.scalar': -5,
1058
- },
1059
- ],
1060
- });
1061
- });
1062
- it('Checking a json value for null also matches if the key does not exist', async () => {
1063
- await (0, index_js_1.testMatch)({
1064
- tableDefinition,
1065
- filters,
1066
- rows: [
1067
- {
1068
- settings: null,
1069
- },
1070
- {
1071
- settings: {
1072
- something: false,
1073
- },
1074
- },
1075
- {
1076
- settings: {
1077
- name: null,
1078
- },
1079
- },
1080
- {
1081
- settings: {
1082
- parents: [
1083
- { name: null },
1084
- ],
1085
- },
1086
- },
1087
- {
1088
- settings: {
1089
- parents: [
1090
- { age: null },
1091
- ],
1092
- },
1093
- },
1094
- ],
1095
- doMatch: [
1096
- {
1097
- 'settings.name': null,
1098
- },
1099
- {
1100
- 'settings.parents[*].age': null,
1101
- },
1102
- {
1103
- 'settings.parents[*].name': null,
1104
- },
1105
- ],
1106
- });
1107
- });
1108
- it('Can check if a json string is null', async () => {
1109
- await (0, index_js_1.testMatch)({
1110
- tableDefinition,
1111
- filters,
1112
- rows: [
1113
- {
1114
- settings: {
1115
- name: null,
1116
- },
1117
- },
1118
- {
1119
- settings: null,
1120
- },
1121
- {
1122
- settings: {},
1123
- },
1124
- ],
1125
- doMatch: [
1126
- {
1127
- 'settings.name': null,
1128
- },
1129
- ],
1130
- });
1131
- });
1132
- it('Can check if a json number is null', async () => {
1133
- await (0, index_js_1.testMatch)({
1134
- tableDefinition,
1135
- filters,
1136
- rows: [
1137
- {
1138
- settings: {
1139
- age: null,
1140
- },
1141
- },
1142
- {
1143
- settings: null,
1144
- },
1145
- {
1146
- settings: {},
1147
- },
1148
- ],
1149
- doMatch: [
1150
- {
1151
- 'settings.age': null,
1152
- },
1153
- ],
1154
- });
1155
- });
1156
- it('Can differentiate null string vs json null when comparing to null', async () => {
1157
- await (0, index_js_1.testMatch)({
1158
- tableDefinition,
1159
- filters,
1160
- rows: [
1161
- {
1162
- settings: {
1163
- name: 'null',
1164
- },
1165
- },
1166
- ],
1167
- doNotMatch: [
1168
- {
1169
- 'settings.name': null,
1170
- },
1171
- ],
1172
- });
1173
- });
1174
- it('Can differentiate 0 number vs json null when comparing to null', async () => {
1175
- await (0, index_js_1.testMatch)({
1176
- tableDefinition,
1177
- filters,
1178
- rows: [
1179
- {
1180
- settings: {
1181
- age: 0,
1182
- },
1183
- },
1184
- ],
1185
- doNotMatch: [
1186
- {
1187
- 'settings.age': null,
1188
- },
1189
- ],
1190
- });
1191
- });
1192
- it('Can differentiate null scalar vs json null when comparing to null', async () => {
1193
- await (0, index_js_1.testMatch)({
1194
- tableDefinition,
1195
- filters,
1196
- rows: [
1197
- {
1198
- settings: {
1199
- scalar: 0,
1200
- },
1201
- },
1202
- {
1203
- settings: {
1204
- scalar: '',
1205
- },
1206
- },
1207
- {
1208
- settings: {
1209
- scalar: 'null',
1210
- },
1211
- },
1212
- {
1213
- settings: {
1214
- scalar: false,
1215
- },
1216
- },
1217
- ],
1218
- doNotMatch: [
1219
- {
1220
- 'settings.scalar': null,
1221
- },
1222
- ],
1223
- });
1224
- });
1225
- it('can check if a json object column is null', async () => {
1226
- await (0, index_js_1.testMatch)({
1227
- tableDefinition,
1228
- filters,
1229
- rows: [
1230
- {
1231
- settings: 'null',
1232
- },
1233
- {
1234
- settings: null,
1235
- },
1236
- ],
1237
- doMatch: [
1238
- {
1239
- settings: {
1240
- $eq: null,
1241
- },
1242
- },
1243
- {
1244
- settings: null,
1245
- },
1246
- ],
1247
- });
1248
- await (0, index_js_1.testMatch)({
1249
- tableDefinition,
1250
- filters,
1251
- rows: [
1252
- {
1253
- settings: {},
1254
- },
1255
- ],
1256
- doNotMatch: [
1257
- {
1258
- settings: {
1259
- $eq: null,
1260
- },
1261
- },
1262
- {
1263
- settings: null,
1264
- },
1265
- ],
1266
- });
1267
- });
1268
- it('can check if a JSON array column is null', async () => {
1269
- await (0, index_js_1.testMatch)({
1270
- tableDefinition,
1271
- filters,
1272
- rows: [
1273
- {
1274
- settings: 'null',
1275
- },
1276
- {
1277
- settings: null,
1278
- },
1279
- {
1280
- settings: {},
1281
- },
1282
- {
1283
- settings: {
1284
- randomValues: null,
1285
- },
1286
- },
1287
- ],
1288
- doMatch: [
1289
- {
1290
- 'settings.randomValues': {
1291
- $eq: null,
1292
- },
1293
- },
1294
- {
1295
- 'settings.randomValues': null,
1296
- },
1297
- ],
1298
- doNotMatch: [
1299
- {
1300
- 'settings.randomValues': {
1301
- $neq: null,
1302
- },
1303
- },
1304
- ],
1305
- });
1306
- await (0, index_js_1.testMatch)({
1307
- tableDefinition,
1308
- filters,
1309
- rows: [
1310
- {
1311
- settings: {
1312
- randomValues: [],
1313
- },
1314
- },
1315
- ],
1316
- doNotMatch: [
1317
- {
1318
- 'settings.randomValues': {
1319
- $eq: null,
1320
- },
1321
- },
1322
- {
1323
- 'settings.randomValues': null,
1324
- },
1325
- ],
1326
- doMatch: [
1327
- {
1328
- 'settings.randomValues': {
1329
- $neq: null,
1330
- },
1331
- },
1332
- ],
1333
- });
1334
- });
1335
- it('Converts number scalar to string for compare', async () => {
1336
- await (0, index_js_1.testMatch)({
1337
- tableDefinition,
1338
- filters,
1339
- rows: [
1340
- {
1341
- settings: {
1342
- scalar: 1,
1343
- },
1344
- },
1345
- ],
1346
- doMatch: [
1347
- {
1348
- 'settings.scalar': '1',
1349
- },
1350
- ],
1351
- doNotMatch: [
1352
- {
1353
- 'settings.scalar': '0',
1354
- },
1355
- {
1356
- 'settings.scalar': '1 ',
1357
- },
1358
- ],
1359
- });
1360
- });
1361
- it('Converts string scalar to number for compare', async () => {
1362
- await (0, index_js_1.testMatch)({
1363
- tableDefinition,
1364
- filters,
1365
- rows: [
1366
- {
1367
- settings: {
1368
- scalar: '15',
1369
- },
1370
- },
1371
- ],
1372
- doMatch: [
1373
- {
1374
- 'settings.scalar': 15,
1375
- },
1376
- ],
1377
- doNotMatch: [
1378
- {
1379
- 'settings.scalar': 14,
1380
- },
1381
- {
1382
- 'settings.scalar': 150,
1383
- },
1384
- ],
1385
- });
1386
- });
1387
- it('Cannot convert alpabetical string scalar to number for compare', async () => {
1388
- await (0, index_js_1.testMatch)({
1389
- tableDefinition,
1390
- filters,
1391
- rows: [
1392
- {
1393
- settings: {
1394
- scalar: 'Hello world',
1395
- },
1396
- },
1397
- ],
1398
- doMatch: [],
1399
- doNotMatch: [
1400
- {
1401
- 'settings.scalar': 0,
1402
- },
1403
- {
1404
- 'settings.scalar': false,
1405
- },
1406
- {
1407
- 'settings.scalar': null,
1408
- },
1409
- {
1410
- 'settings.scalar': 150,
1411
- },
1412
- {
1413
- 'settings.scalar': -15,
1414
- },
1415
- ],
1416
- });
1417
- });
1418
- it('Cannot convert number scalar to string for compare', async () => {
1419
- await (0, index_js_1.testMatch)({
1420
- tableDefinition,
1421
- filters,
1422
- rows: [
1423
- {
1424
- settings: {
1425
- scalar: 150,
1426
- },
1427
- },
1428
- ],
1429
- doMatch: [],
1430
- doNotMatch: [
1431
- {
1432
- 'settings.scalar': 'Hello world',
1433
- },
1434
- {
1435
- 'settings.scalar': null,
1436
- },
1437
- ],
1438
- });
1439
- });
1440
- it('Cannot convert boolean scalar to string for compare', async () => {
1441
- await (0, index_js_1.testMatch)({
1442
- tableDefinition,
1443
- filters,
1444
- rows: [
1445
- {
1446
- settings: {
1447
- scalar: false,
1448
- },
1449
- },
1450
- ],
1451
- doMatch: [],
1452
- doNotMatch: [
1453
- {
1454
- 'settings.scalar': 'Hello world',
1455
- },
1456
- {
1457
- 'settings.scalar': null,
1458
- },
1459
- ],
1460
- });
1461
- });
1462
- });
1463
- });
1464
- //# sourceMappingURL=$eq.test.js.map