@stamhoofd/sql 2.118.1 → 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 (273) 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} +32 -45
  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 +10 -6
  60. package/dist/filters/SQLFilter.d.ts.map +1 -0
  61. package/{src/filters/SQLFilter.ts → dist/filters/SQLFilter.js} +66 -127
  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 +5 -8
  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/dist/filters/compilers/contains.js +26 -0
  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} +11 -26
  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} +5 -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} +3 -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 -216
  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 -28
  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 -46
  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 -17
  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 -17
  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 -16
  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 -701
  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 -1048
  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 -463
  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 -590
  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/contains.ts +0 -43
  268. package/src/filters/compilers/equals.ts +0 -72
  269. package/src/filters/compilers/greater.ts +0 -20
  270. package/src/filters/compilers/less.ts +0 -19
  271. /package/dist/{src/SQLExpression.d.ts → SQLExpression.d.ts} +0 -0
  272. /package/dist/{src/SQLLogger.d.ts → SQLLogger.d.ts} +0 -0
  273. /package/dist/{src/filters → filters}/compilers/index.d.ts +0 -0
@@ -1,1048 +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
- };
405
- it('JSON strings match case insensitive and whole string', async () => {
406
- await (0, index_js_1.testMatch)({
407
- tableDefinition,
408
- filters,
409
- rows: [
410
- {
411
- settings: {
412
- name: 'John Doe',
413
- },
414
- },
415
- ],
416
- doMatch: [
417
- {
418
- 'settings.name': 'John Doe',
419
- },
420
- {
421
- 'settings.name': {
422
- $eq: 'John Doe',
423
- },
424
- },
425
- {
426
- 'settings.name': 'john doe',
427
- },
428
- {
429
- 'settings.name': 'jOhn dOe',
430
- },
431
- ],
432
- doNotMatch: [
433
- {
434
- 'settings.name': 'Jane Doe',
435
- },
436
- {
437
- 'settings.name': 'John',
438
- },
439
- {
440
- 'settings.name': 'john',
441
- },
442
- ],
443
- });
444
- });
445
- it('Can search strings in a string array', async () => {
446
- await (0, index_js_1.testMatch)({
447
- tableDefinition,
448
- filters,
449
- rows: [
450
- {
451
- settings: {
452
- name: 'Junior Doe',
453
- parents: [
454
- { name: 'John Doe' },
455
- { name: 'Jane Doe' },
456
- ],
457
- },
458
- },
459
- ],
460
- doMatch: [
461
- {
462
- 'settings.parents[*].name': 'John Doe',
463
- },
464
- {
465
- 'settings.parents[*].name': 'Jane Doe',
466
- },
467
- {
468
- 'settings.parents[*].name': 'jane doe',
469
- },
470
- {
471
- 'settings.parents[*].name': 'john doe',
472
- },
473
- ],
474
- doNotMatch: [
475
- {
476
- 'settings.parents[*].name': 'John',
477
- },
478
- {
479
- 'settings.parents[*].name': 'Jane',
480
- },
481
- {
482
- 'settings.parents[*].name': 'jane',
483
- },
484
- {
485
- 'settings.parents[*].name': 'john',
486
- },
487
- {
488
- 'settings.parents[*].name': 'Jane Doe ',
489
- },
490
- {
491
- 'settings.parents[*].name': 5,
492
- },
493
- {
494
- 'settings.parents[*].name': true,
495
- },
496
- ],
497
- });
498
- });
499
- it('Can search numbers in a number array', async () => {
500
- await (0, index_js_1.testMatch)({
501
- tableDefinition,
502
- filters,
503
- rows: [
504
- {
505
- settings: {
506
- name: 'Junior Doe',
507
- parents: [
508
- { name: 'John Doe', age: 50 },
509
- { name: 'Jane Doe', age: 45 },
510
- ],
511
- },
512
- },
513
- ],
514
- doMatch: [
515
- {
516
- 'settings.parents[*].age': 50,
517
- },
518
- {
519
- 'settings.parents[*].age': 45,
520
- },
521
- ],
522
- doNotMatch: [
523
- {
524
- 'settings.parents[*].age': 51,
525
- },
526
- {
527
- 'settings.parents[*].age': 49,
528
- },
529
- {
530
- 'settings.parents[*].age': 45.1,
531
- },
532
- {
533
- 'settings.parents[*].age': '49',
534
- },
535
- {
536
- 'settings.parents[*].age': 'test',
537
- },
538
- ],
539
- });
540
- });
541
- it('Can search in a mixed array', async () => {
542
- await (0, index_js_1.testMatch)({
543
- tableDefinition,
544
- filters,
545
- rows: [
546
- {
547
- settings: {
548
- name: 'Junior Doe',
549
- randomValues: [true, 0, 'tesT'],
550
- },
551
- },
552
- ],
553
- doMatch: [
554
- {
555
- 'settings.randomValues': true,
556
- },
557
- {
558
- 'settings.randomValues': 0,
559
- },
560
- {
561
- 'settings.randomValues': 'tesT',
562
- },
563
- {
564
- 'settings.randomValues': 'Test',
565
- },
566
- ],
567
- doNotMatch: [
568
- {
569
- 'settings.randomValues': false,
570
- },
571
- {
572
- 'settings.randomValues': 1,
573
- },
574
- {
575
- 'settings.randomValues': 'tes',
576
- },
577
- ],
578
- });
579
- });
580
- it('Can search null in a JSON array', async () => {
581
- await (0, index_js_1.testMatch)({
582
- tableDefinition,
583
- filters,
584
- rows: [
585
- {
586
- settings: {
587
- name: 'Junior Doe',
588
- parents: [
589
- { name: null, age: 50 },
590
- { name: 'Jane Doe', age: null },
591
- ],
592
- },
593
- },
594
- ],
595
- doMatch: [
596
- {
597
- 'settings.parents[*].age': null,
598
- },
599
- {
600
- 'settings.parents[*].name': null,
601
- },
602
- ],
603
- });
604
- await (0, index_js_1.testMatch)({
605
- tableDefinition,
606
- filters,
607
- rows: [
608
- {
609
- settings: {
610
- name: 'Junior Doe',
611
- parents: [
612
- { name: 'Set', age: 50 },
613
- { name: 'Jane Doe', age: 45 },
614
- ],
615
- },
616
- },
617
- ],
618
- doNotMatch: [
619
- {
620
- 'settings.parents[*].age': null,
621
- },
622
- {
623
- 'settings.parents[*].name': null,
624
- },
625
- ],
626
- });
627
- });
628
- it('Can check JSON booleans', async () => {
629
- await (0, index_js_1.testMatch)({
630
- tableDefinition,
631
- filters,
632
- rows: [
633
- {
634
- settings: {
635
- enabled: true,
636
- },
637
- },
638
- ],
639
- doMatch: [
640
- {
641
- 'settings.enabled': true,
642
- },
643
- {
644
- 'settings.enabled': 1,
645
- },
646
- ],
647
- doNotMatch: [
648
- {
649
- 'settings.enabled': false,
650
- },
651
- {
652
- 'settings.enabled': null,
653
- },
654
- ],
655
- });
656
- await (0, index_js_1.testMatch)({
657
- tableDefinition,
658
- filters,
659
- rows: [
660
- {
661
- settings: {
662
- enabled: false,
663
- },
664
- },
665
- ],
666
- doMatch: [
667
- {
668
- 'settings.enabled': false,
669
- },
670
- {
671
- 'settings.enabled': 0,
672
- },
673
- ],
674
- doNotMatch: [
675
- {
676
- 'settings.enabled': true,
677
- },
678
- {
679
- 'settings.enabled': null,
680
- },
681
- ],
682
- });
683
- await (0, index_js_1.testMatch)({
684
- tableDefinition,
685
- filters,
686
- rows: [
687
- {
688
- settings: {
689
- enabled: null,
690
- },
691
- },
692
- {
693
- settings: {},
694
- },
695
- {
696
- settings: null,
697
- },
698
- {
699
- settings: 'null',
700
- },
701
- ],
702
- doMatch: [
703
- {
704
- 'settings.enabled': null,
705
- },
706
- ],
707
- doNotMatch: [
708
- {
709
- 'settings.enabled': true,
710
- },
711
- {
712
- 'settings.enabled': false,
713
- },
714
- ],
715
- });
716
- });
717
- it('Can compare JSON numbers', async () => {
718
- await (0, index_js_1.testMatch)({
719
- tableDefinition,
720
- filters,
721
- rows: [
722
- {
723
- settings: {
724
- age: 10,
725
- },
726
- },
727
- ],
728
- doMatch: [
729
- {
730
- 'settings.age': 10,
731
- },
732
- ],
733
- doNotMatch: [
734
- {
735
- 'settings.age': 11,
736
- },
737
- {
738
- 'settings.age': 9,
739
- },
740
- ],
741
- });
742
- await (0, index_js_1.testMatch)({
743
- tableDefinition,
744
- filters,
745
- rows: [
746
- {
747
- settings: {
748
- age: null,
749
- },
750
- },
751
- {
752
- settings: {},
753
- },
754
- {
755
- settings: null,
756
- },
757
- {
758
- settings: 'null',
759
- },
760
- ],
761
- doMatch: [
762
- {
763
- 'settings.age': null,
764
- },
765
- ],
766
- doNotMatch: [
767
- {
768
- 'settings.age': 0,
769
- },
770
- ],
771
- });
772
- await (0, index_js_1.testMatch)({
773
- tableDefinition,
774
- filters,
775
- rows: [
776
- {
777
- settings: {
778
- enabled: null,
779
- },
780
- },
781
- {
782
- settings: {},
783
- },
784
- {
785
- settings: null,
786
- },
787
- {
788
- settings: 'null',
789
- },
790
- ],
791
- doMatch: [
792
- {
793
- 'settings.enabled': null,
794
- },
795
- ],
796
- doNotMatch: [
797
- {
798
- 'settings.enabled': true,
799
- },
800
- {
801
- 'settings.enabled': false,
802
- },
803
- ],
804
- });
805
- });
806
- it('Checking a json value for null also matches if the key does not exist', async () => {
807
- await (0, index_js_1.testMatch)({
808
- tableDefinition,
809
- filters,
810
- rows: [
811
- {
812
- settings: null,
813
- },
814
- {
815
- settings: {
816
- something: false,
817
- },
818
- },
819
- {
820
- settings: {
821
- name: null,
822
- },
823
- },
824
- {
825
- settings: {
826
- parents: [
827
- { name: null },
828
- ],
829
- },
830
- },
831
- {
832
- settings: {
833
- parents: [
834
- { age: null },
835
- ],
836
- },
837
- },
838
- ],
839
- doMatch: [
840
- {
841
- 'settings.name': null,
842
- },
843
- {
844
- 'settings.parents[*].age': null,
845
- },
846
- {
847
- 'settings.parents[*].name': null,
848
- },
849
- ],
850
- });
851
- });
852
- it('Can check if a json string is null', async () => {
853
- await (0, index_js_1.testMatch)({
854
- tableDefinition,
855
- filters,
856
- rows: [
857
- {
858
- settings: {
859
- name: null,
860
- },
861
- },
862
- {
863
- settings: null,
864
- },
865
- {
866
- settings: {},
867
- },
868
- ],
869
- doMatch: [
870
- {
871
- 'settings.name': null,
872
- },
873
- ],
874
- });
875
- });
876
- it('Can check if a json number is null', async () => {
877
- await (0, index_js_1.testMatch)({
878
- tableDefinition,
879
- filters,
880
- rows: [
881
- {
882
- settings: {
883
- age: null,
884
- },
885
- },
886
- {
887
- settings: null,
888
- },
889
- {
890
- settings: {},
891
- },
892
- ],
893
- doMatch: [
894
- {
895
- 'settings.age': null,
896
- },
897
- ],
898
- });
899
- });
900
- it('Can differentiate null string vs json null when comparing to null', async () => {
901
- await (0, index_js_1.testMatch)({
902
- tableDefinition,
903
- filters,
904
- rows: [
905
- {
906
- settings: {
907
- name: 'null',
908
- },
909
- },
910
- ],
911
- doNotMatch: [
912
- {
913
- 'settings.name': null,
914
- },
915
- ],
916
- });
917
- });
918
- it('Can differentiate 0 number vs json null when comparing to null', async () => {
919
- await (0, index_js_1.testMatch)({
920
- tableDefinition,
921
- filters,
922
- rows: [
923
- {
924
- settings: {
925
- age: 0,
926
- },
927
- },
928
- ],
929
- doNotMatch: [
930
- {
931
- 'settings.age': null,
932
- },
933
- ],
934
- });
935
- });
936
- it('can check if a json object column is null', async () => {
937
- await (0, index_js_1.testMatch)({
938
- tableDefinition,
939
- filters,
940
- rows: [
941
- {
942
- settings: 'null',
943
- },
944
- {
945
- settings: null,
946
- },
947
- ],
948
- doMatch: [
949
- {
950
- settings: {
951
- $eq: null,
952
- },
953
- },
954
- {
955
- settings: null,
956
- },
957
- ],
958
- });
959
- await (0, index_js_1.testMatch)({
960
- tableDefinition,
961
- filters,
962
- rows: [
963
- {
964
- settings: {},
965
- },
966
- ],
967
- doNotMatch: [
968
- {
969
- settings: {
970
- $eq: null,
971
- },
972
- },
973
- {
974
- settings: null,
975
- },
976
- ],
977
- });
978
- });
979
- it('can check if a JSON array column is null', async () => {
980
- await (0, index_js_1.testMatch)({
981
- tableDefinition,
982
- filters,
983
- rows: [
984
- {
985
- settings: 'null',
986
- },
987
- {
988
- settings: null,
989
- },
990
- {
991
- settings: {},
992
- },
993
- {
994
- settings: {
995
- randomValues: null,
996
- },
997
- },
998
- ],
999
- doMatch: [
1000
- {
1001
- 'settings.randomValues': {
1002
- $eq: null,
1003
- },
1004
- },
1005
- {
1006
- 'settings.randomValues': null,
1007
- },
1008
- ],
1009
- doNotMatch: [
1010
- {
1011
- 'settings.randomValues': {
1012
- $neq: null,
1013
- },
1014
- },
1015
- ],
1016
- });
1017
- await (0, index_js_1.testMatch)({
1018
- tableDefinition,
1019
- filters,
1020
- rows: [
1021
- {
1022
- settings: {
1023
- randomValues: [],
1024
- },
1025
- },
1026
- ],
1027
- doNotMatch: [
1028
- {
1029
- 'settings.randomValues': {
1030
- $eq: null,
1031
- },
1032
- },
1033
- {
1034
- 'settings.randomValues': null,
1035
- },
1036
- ],
1037
- doMatch: [
1038
- {
1039
- 'settings.randomValues': {
1040
- $neq: null,
1041
- },
1042
- },
1043
- ],
1044
- });
1045
- });
1046
- });
1047
- });
1048
- //# sourceMappingURL=$eq.test.js.map