@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,76 +1,40 @@
1
1
  import { SimpleError } from '@simonbackx/simple-errors';
2
- import { compileFilter, FilterCompiler, FilterDefinitions, filterDefinitionsToCompiler, RequiredFilterCompiler, StamhoofdFilter } from '@stamhoofd/structures';
3
- import { SQLExpression, SQLExpressionOptions, SQLQuery } from '../SQLExpression.js';
4
- import { SQLJoin } from '../SQLJoin.js';
2
+ import { compileFilter, filterDefinitionsToCompiler } from '@stamhoofd/structures';
3
+ import { SQLSafeValue } from '../SQLExpressions.js';
5
4
  import { SQLJsonValue } from '../SQLJsonExpressions.js';
6
- import { SQLSelect } from '../SQLSelect.js';
7
- import { SQLWhere, SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
8
- import { $equalsSQLFilterCompiler, $greaterThanSQLFilterCompiler, $inSQLFilterCompiler, $lessThanSQLFilterCompiler } from './compilers/index.js';
5
+ import { SQLWhereAnd, SQLWhereExists, SQLWhereJoin, SQLWhereNot, SQLWhereOr } from '../SQLWhere.js';
9
6
  import { $containsSQLFilterCompiler } from './compilers/contains.js';
10
- import { SQLSafeValue } from '../SQLExpressions.js';
11
-
12
- export type SQLSyncFilterRunner = (column: SQLCurrentColumn) => SQLWhere;
13
- export type SQLFilterRunner = (column: SQLCurrentColumn) => Promise<SQLWhere> | SQLWhere;
14
- export type SQLFilterCompiler = FilterCompiler<SQLFilterRunner>;
15
- export type SQLRequiredFilterCompiler = RequiredFilterCompiler<SQLFilterRunner>;
16
- export type SQLFilterDefinitions = FilterDefinitions<SQLFilterRunner>;
17
-
18
- export enum SQLValueType {
7
+ import { $equalsSQLFilterCompiler, $greaterThanSQLFilterCompiler, $inSQLFilterCompiler, $lessThanSQLFilterCompiler } from './compilers/index.js';
8
+ export var SQLValueType;
9
+ (function (SQLValueType) {
19
10
  /** At the root of a select */
20
- Table = 'Table',
21
-
11
+ SQLValueType["Table"] = "Table";
22
12
  /** Column with type string */
23
- String = 'String',
24
-
13
+ SQLValueType["String"] = "String";
25
14
  /** MySQL Datetime */
26
- Datetime = 'Datetime',
27
-
15
+ SQLValueType["Datetime"] = "Datetime";
28
16
  /** Column with type number */
29
- Number = 'Number',
30
-
17
+ SQLValueType["Number"] = "Number";
31
18
  /** Column with type boolean, meaning 1 or 0 */
32
- Boolean = 'Boolean',
33
-
19
+ SQLValueType["Boolean"] = "Boolean";
34
20
  /** True or false in JSON */
35
- JSONBoolean = 'JSONBoolean',
36
- JSONString = 'JSONString',
37
-
38
- JSONNumber = 'JSONNumber',
39
-
40
- /** [...] */
41
- JSONArray = 'JSONArray',
42
-
43
- /** {...} */
44
- JSONObject = 'JSONObject',
45
- }
46
-
47
- export type SQLCurrentColumn = {
48
- expression: SQLExpression;
49
-
50
- /**
51
- * MySQL nullable. Please fill this in correctly! If a value can be null, can not exist (=mysql null), or can be JSONNull, set this to true.
52
- *
53
- * Mainly > and < operators will make sure the behaviour is consistent with MySQL sorting (normally comparing with null will always return false in MySQL)
54
- */
55
- nullable?: boolean;
56
-
21
+ SQLValueType["JSONBoolean"] = "JSONBoolean";
22
+ SQLValueType["JSONString"] = "JSONString";
23
+ SQLValueType["JSONNumber"] = "JSONNumber";
57
24
  /**
58
- * JSON nullable
25
+ * Either boolean, string, number or null (if nullable). Only use this if you cannot determine the type at compile time.
59
26
  */
60
-
61
- /**
62
- * Type of this column, use to normalize values received from filters
63
- */
64
- type: SQLValueType;
65
- checkPermission?: (filter: StamhoofdFilter) => Promise<void>;
66
- };
67
-
68
- export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?: SQLFilterDefinitions): SQLFilterCompiler {
69
- return (filter: StamhoofdFilter) => {
27
+ SQLValueType["JSONScalar"] = "JSONScalar";
28
+ /** [...] */
29
+ SQLValueType["JSONArray"] = "JSONArray";
30
+ /** {...} */
31
+ SQLValueType["JSONObject"] = "JSONObject";
32
+ })(SQLValueType || (SQLValueType = {}));
33
+ export function createColumnFilter(column, childDefinitions) {
34
+ return (filter) => {
70
35
  const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
71
36
  const runner = $andSQLFilterCompiler(filter, compiler);
72
-
73
- return async (_: SQLCurrentColumn) => {
37
+ return async (_) => {
74
38
  if (column.checkPermission) {
75
39
  await column.checkPermission(filter);
76
40
  }
@@ -81,13 +45,11 @@ export function createColumnFilter(column: SQLCurrentColumn, childDefinitions?:
81
45
  };
82
46
  };
83
47
  }
84
-
85
- export function createWildcardColumnFilter(getColumn: (key: string) => SQLCurrentColumn, childDefinitions?: (key: string) => SQLFilterDefinitions, options?: { checkPermission?: (key: string) => Promise<void> }): SQLFilterCompiler {
86
- const wildcardCompiler = (filter: StamhoofdFilter, _, key: string) => {
48
+ export function createWildcardColumnFilter(getColumn, childDefinitions, options) {
49
+ const wildcardCompiler = (filter, _, key) => {
87
50
  const compiler = childDefinitions ? filterDefinitionsToCompiler(childDefinitions(key)) : filterDefinitionsToCompiler(baseSQLFilterCompilers);
88
51
  const runner = $andSQLFilterCompiler(filter, compiler);
89
-
90
- return async (_: SQLCurrentColumn) => {
52
+ return async (_) => {
91
53
  if (options?.checkPermission) {
92
54
  await options.checkPermission(key);
93
55
  }
@@ -101,24 +63,20 @@ export function createWildcardColumnFilter(getColumn: (key: string) => SQLCurren
101
63
  });
102
64
  };
103
65
  };
104
-
105
- return (filter: StamhoofdFilter) => {
66
+ return (filter) => {
106
67
  return $andSQLFilterCompiler(filter, wildcardCompiler);
107
68
  };
108
69
  }
109
-
110
70
  /**
111
71
  * Filter with a subquery that should return at least one result.
112
72
  */
113
- export function createExistsFilter(baseSelect: InstanceType<typeof SQLSelect> & SQLExpression, definitions: SQLFilterDefinitions): SQLFilterCompiler {
114
- return (filter: StamhoofdFilter, _: SQLFilterCompiler) => {
73
+ export function createExistsFilter(baseSelect, definitions) {
74
+ return (filter, _) => {
115
75
  if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
116
- filter = filter['$elemMatch'] as StamhoofdFilter;
76
+ filter = filter['$elemMatch'];
117
77
  }
118
-
119
78
  const runner = compileToSQLRunner(filter, definitions);
120
-
121
- return async (_: SQLCurrentColumn) => {
79
+ return async (_) => {
122
80
  const w = await runner({
123
81
  expression: SQLRootExpression,
124
82
  type: SQLValueType.Table,
@@ -131,19 +89,17 @@ export function createExistsFilter(baseSelect: InstanceType<typeof SQLSelect> &
131
89
  };
132
90
  };
133
91
  }
134
-
135
92
  /**
136
93
  * WARNING: only use this on one-to-one relations. Using it on one-to-many relations will result in duplicate results.
137
94
  *
138
95
  * By default doesRelationAlwaysExist is set to true, this means we expect the relation to always exist. This helps optimize the query (dropping the join if the where clause in the join is always true)
139
96
  */
140
- export function createJoinedRelationFilter(join: SQLJoin, definitions: SQLFilterDefinitions, options: { doesRelationAlwaysExist: boolean } = { doesRelationAlwaysExist: true }): SQLFilterCompiler {
141
- return (filter: StamhoofdFilter, _: SQLFilterCompiler) => {
97
+ export function createJoinedRelationFilter(join, definitions, options = { doesRelationAlwaysExist: true }) {
98
+ return (filter, _) => {
142
99
  if (filter !== null && typeof filter === 'object' && '$elemMatch' in filter) {
143
- filter = filter['$elemMatch'] as StamhoofdFilter;
100
+ filter = filter['$elemMatch'];
144
101
  }
145
-
146
- return async (_: SQLCurrentColumn) => {
102
+ return async (_) => {
147
103
  const w = await compileToSQLFilter(filter, definitions);
148
104
  return new SQLWhereJoin(join, w, {
149
105
  doesRelationAlwaysExist: options.doesRelationAlwaysExist,
@@ -151,77 +107,61 @@ export function createJoinedRelationFilter(join: SQLJoin, definitions: SQLFilter
151
107
  };
152
108
  };
153
109
  }
154
-
155
- export function $andSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
110
+ export function $andSQLFilterCompiler(filter, filters) {
156
111
  const runners = compileSQLFilter(filter, filters);
157
-
158
- return async (column: SQLCurrentColumn) => {
112
+ return async (column) => {
159
113
  const wheres = (await Promise.all(
160
- runners.map(runner => (runner(column))),
161
- ));
162
-
114
+ // eslint-disable-next-line @typescript-eslint/await-thenable
115
+ runners.map(runner => (runner(column)))));
163
116
  return new SQLWhereAnd(wheres);
164
117
  };
165
118
  }
166
-
167
- export function $orSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
119
+ export function $orSQLFilterCompiler(filter, filters) {
168
120
  const runners = compileSQLFilter(filter, filters);
169
-
170
- return async (column: SQLCurrentColumn) => {
121
+ return async (column) => {
171
122
  const wheres = (await Promise.all(
172
- runners.map(runner => (runner(column))),
173
- ));
174
-
123
+ // eslint-disable-next-line @typescript-eslint/await-thenable
124
+ runners.map(runner => (runner(column)))));
175
125
  return new SQLWhereOr(wheres);
176
126
  };
177
127
  }
178
-
179
- export function $notSQLFilterCompiler(filter: StamhoofdFilter, filters: SQLFilterCompiler): SQLFilterRunner {
128
+ export function $notSQLFilterCompiler(filter, filters) {
180
129
  const andRunner = $andSQLFilterCompiler(filter, filters);
181
-
182
- return async (column: SQLCurrentColumn) => {
130
+ return async (column) => {
183
131
  return new SQLWhereNot(await andRunner(column));
184
132
  };
185
133
  }
186
-
187
- function invertFilterCompiler(compiler: SQLRequiredFilterCompiler): SQLRequiredFilterCompiler {
188
- return (filter: StamhoofdFilter, parentCompiler: SQLFilterCompiler) => {
134
+ function invertFilterCompiler(compiler) {
135
+ return (filter, parentCompiler) => {
189
136
  const runner = compiler(filter, parentCompiler);
190
137
  return async (column) => {
191
138
  return new SQLWhereNot(await runner(column));
192
139
  };
193
140
  };
194
141
  }
195
-
196
- export const baseSQLFilterCompilers: SQLFilterDefinitions = {
142
+ export const baseSQLFilterCompilers = {
197
143
  $and: $andSQLFilterCompiler,
198
144
  $or: $orSQLFilterCompiler,
199
145
  $not: $notSQLFilterCompiler,
200
146
  $eq: $equalsSQLFilterCompiler,
201
147
  $neq: invertFilterCompiler($equalsSQLFilterCompiler),
202
-
203
148
  $lt: $lessThanSQLFilterCompiler,
204
149
  $gt: $greaterThanSQLFilterCompiler,
205
150
  $lte: invertFilterCompiler($greaterThanSQLFilterCompiler),
206
151
  $gte: invertFilterCompiler($lessThanSQLFilterCompiler),
207
-
208
152
  $in: $inSQLFilterCompiler,
209
-
210
153
  $contains: $containsSQLFilterCompiler,
211
154
  };
212
-
213
- const compileSQLFilter = compileFilter<SQLFilterRunner>;
214
-
215
- export const SQLRootExpression: SQLExpression = {
216
- getSQL(options?: SQLExpressionOptions): SQLQuery {
155
+ const compileSQLFilter = (compileFilter);
156
+ export const SQLRootExpression = {
157
+ getSQL(options) {
217
158
  throw new SimpleError({
218
159
  code: 'invalid_filter',
219
160
  message: 'Root level filters are not allowed to use $eq or $neq',
220
161
  });
221
162
  },
222
163
  };
223
-
224
- export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilterDefinitions): SQLFilterRunner {
164
+ export function compileToSQLRunner(filter, definitions) {
225
165
  if (filter === null) {
226
166
  return () => {
227
167
  return new SQLWhereAnd([]); // No filter, return empty where
@@ -230,43 +170,42 @@ export function compileToSQLRunner(filter: StamhoofdFilter, definitions: SQLFilt
230
170
  const compiler = filterDefinitionsToCompiler(definitions); // this compiler searches in the definition for the right compiler for the given key
231
171
  const runner = $andSQLFilterCompiler(filter, compiler);
232
172
  return runner;
233
- };
234
-
235
- export async function compileToSQLFilter(filter: StamhoofdFilter, filters: SQLFilterDefinitions): Promise<SQLWhere> {
173
+ }
174
+ ;
175
+ export async function compileToSQLFilter(filter, filters) {
236
176
  const runner = compileToSQLRunner(filter, filters);
237
177
  return await runner({
238
178
  expression: SQLRootExpression,
239
179
  type: SQLValueType.Table,
240
180
  nullable: false,
241
181
  });
242
- };
243
-
182
+ }
183
+ ;
244
184
  /**
245
185
  * Casts json strings, numbers and booleans to native MySQL types. This includes json null to mysql null.
246
186
  */
247
- export function normalizeColumn(column: SQLCurrentColumn): SQLCurrentColumn {
248
- if (column.type === SQLValueType.JSONString) {
187
+ export function normalizeColumn(column, hint) {
188
+ if (column.type === SQLValueType.JSONString || (column.type === SQLValueType.JSONScalar && typeof hint === 'string')) {
249
189
  return {
250
190
  expression: new SQLJsonValue(column.expression, 'CHAR'),
251
191
  type: SQLValueType.String,
252
192
  nullable: column.nullable,
253
193
  };
254
194
  }
255
-
256
- if (column.type === SQLValueType.JSONBoolean) {
195
+ if (column.type === SQLValueType.JSONNumber || (column.type === SQLValueType.JSONScalar && typeof hint === 'number')) {
257
196
  return {
258
- expression: new SQLJsonValue(column.expression, 'UNSIGNED'),
259
- type: SQLValueType.Boolean,
197
+ expression: new SQLJsonValue(column.expression, 'SIGNED'),
198
+ type: SQLValueType.Number,
260
199
  nullable: column.nullable,
261
200
  };
262
201
  }
263
-
264
- if (column.type === SQLValueType.JSONNumber) {
202
+ if (column.type === SQLValueType.JSONBoolean || (column.type === SQLValueType.JSONScalar && typeof hint === 'boolean')) {
265
203
  return {
266
204
  expression: new SQLJsonValue(column.expression, 'UNSIGNED'),
267
- type: SQLValueType.Number,
205
+ type: SQLValueType.Boolean,
268
206
  nullable: column.nullable,
269
207
  };
270
208
  }
271
209
  return column;
272
210
  }
211
+ //# sourceMappingURL=SQLFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLFilter.js","sourceRoot":"","sources":["../../src/filters/SQLFilter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { PlainObject } from '@simonbackx/simple-encoding';
2
- import { SortDefinition, SortList } from '@stamhoofd/structures';
3
- import { SQLExpression } from '../SQLExpression.js';
4
- import { SQLJoin } from '../SQLJoin.js';
5
- import { SQLOrderBy, SQLOrderByDirection } from '../SQLOrderBy.js';
6
- import { SQLSelect } from '../SQLSelect.js';
1
+ import type { PlainObject } from '@simonbackx/simple-encoding';
2
+ import type { SortDefinition, SortList } from '@stamhoofd/structures';
3
+ import type { SQLExpression } from '../SQLExpression.js';
4
+ import type { SQLJoin } from '../SQLJoin.js';
5
+ import type { SQLOrderBy, SQLOrderByDirection } from '../SQLOrderBy.js';
6
+ import type { SQLSelect } from '../SQLSelect.js';
7
7
  export type SQLSortDefinition<T, B extends PlainObject | Date = PlainObject | Date> = SortDefinition<T, B> & {
8
8
  toSQL(direction: SQLOrderByDirection): SQLOrderBy;
9
9
  join?: SQLJoin;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLSorter.d.ts","sourceRoot":"","sources":["../../src/filters/SQLSorter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IACzG,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QA0C5G"}
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applySQLSorter = applySQLSorter;
4
- const simple_errors_1 = require("@simonbackx/simple-errors");
5
- function applySQLSorter(selectQuery, sortBy, definitions) {
1
+ import { SimpleError } from '@simonbackx/simple-errors';
2
+ export function applySQLSorter(selectQuery, sortBy, definitions) {
6
3
  if (sortBy.length === 0) {
7
- throw new simple_errors_1.SimpleError({
4
+ throw new SimpleError({
8
5
  code: 'empty_sort',
9
6
  message: 'No sort passed',
10
7
  });
@@ -24,10 +21,10 @@ function applySQLSorter(selectQuery, sortBy, definitions) {
24
21
  const name = d.join.table.getSQL({ defaultNamespace: 'default' });
25
22
  for (const j of selectQuery._joins) {
26
23
  if (j.table.getSQL({ defaultNamespace: 'default' }) === name) {
27
- throw new simple_errors_1.SimpleError({
24
+ throw new SimpleError({
28
25
  code: 'sorter_join_overlap',
29
26
  message: 'This combination of sorters is not possible',
30
- human: $t('e328a7c2-318c-4425-b61a-61e6f4211707'),
27
+ human: $t('%GU'),
31
28
  });
32
29
  }
33
30
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLSorter.js","sourceRoot":"","sources":["../../src/filters/SQLSorter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAexD,MAAM,UAAU,cAAc,CAAC,WAA2B,EAAE,MAAgB,EAAE,WAA+B;IACzG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gBAAgB;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,kEAAkE;YAClE,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,gBAAgB;YACpB,CAAC;iBACI,CAAC;gBACF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;gBAElE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBACjC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC3D,MAAM,IAAI,WAAW,CAAC;4BAClB,IAAI,EAAE,qBAAqB;4BAC3B,OAAO,EAAE,6CAA6C;4BACtD,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;yBACnB,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACX,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { StamhoofdFilter } from '@stamhoofd/structures';
2
+ import type { SQLSyncFilterRunner } from '../SQLFilter.js';
3
+ export declare function $containsSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunner;
4
+ //# sourceMappingURL=contains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/contains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAI5E,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAmCvF"}
@@ -0,0 +1,26 @@
1
+ import { SimpleError } from '@simonbackx/simple-errors';
2
+ import { assertFilterCompareValue } from '@stamhoofd/structures';
3
+ import { scalarToSQLExpression, SQLLower, SQLNull } from '../../SQLExpressions.js';
4
+ import { SQLJsonSearch } from '../../SQLJsonExpressions.js';
5
+ import { SQLWhereEqual, SQLWhereLike, SQLWhereSign } from '../../SQLWhere.js';
6
+ import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
7
+ import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
8
+ export function $containsSQLFilterCompiler(filter) {
9
+ return (originalColumn) => {
10
+ const v = assertFilterCompareValue(filter);
11
+ const column = normalizeColumn(originalColumn, v);
12
+ const value = normalizeCompareValue(v, column.type);
13
+ if (typeof value !== 'string') {
14
+ throw new SimpleError({
15
+ code: 'invalid_filter',
16
+ message: 'Expected string at $contains filter',
17
+ });
18
+ }
19
+ if (column.type === SQLValueType.JSONArray || column.type === SQLValueType.JSONObject) {
20
+ // For JSON arrays and objects, we use JSON_CONTAINS
21
+ return new SQLWhereEqual(new SQLJsonSearch(new SQLLower(column.expression), 'one', scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%')), SQLWhereSign.NotEqual, new SQLNull());
22
+ }
23
+ return new SQLWhereLike(column.expression, scalarToSQLExpression('%' + SQLWhereLike.escape(value) + '%'));
24
+ };
25
+ }
26
+ //# sourceMappingURL=contains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contains.js","sourceRoot":"","sources":["../../../src/filters/compilers/contains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAC9D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,WAAW,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,qCAAqC;aACjD,CAAC,CAAC;QACP,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;YACpF,oDAAoD;YACpD,OAAO,IAAI,aAAa,CACpB,IAAI,aAAa,CACb,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,qBAAqB,CACjB,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CACzC,CACJ,EACD,YAAY,CAAC,QAAQ,EACrB,IAAI,OAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,YAAY,CACnB,MAAM,CAAC,UAAU,EACjB,qBAAqB,CACjB,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CACzC,CACJ,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { StamhoofdFilter } from '@stamhoofd/structures';
2
+ import type { SQLSyncFilterRunner } from '../SQLFilter.js';
3
+ export declare function $equalsSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunner;
4
+ //# sourceMappingURL=equals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/equals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAK5E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAgErF"}
@@ -0,0 +1,44 @@
1
+ import { assertFilterCompareValue } from '@stamhoofd/structures';
2
+ import { scalarToSQLExpression, SQLLower, SQLNull } from '../../SQLExpressions.js';
3
+ import { SQLJsonContains, SQLJsonSearch, SQLJsonValue } from '../../SQLJsonExpressions.js';
4
+ import { SQLWhereEqual, SQLWhereLike, SQLWhereOr, SQLWhereSign } from '../../SQLWhere.js';
5
+ import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
6
+ import { isJSONColumn } from '../helpers/isJSONColumn.js';
7
+ import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
8
+ export function $equalsSQLFilterCompiler(filter) {
9
+ return (originalColumn) => {
10
+ const v = assertFilterCompareValue(filter);
11
+ const column = normalizeColumn(originalColumn, v);
12
+ const value = normalizeCompareValue(v, column.type);
13
+ /**
14
+ * Special case, checking for equality with a JSON array.
15
+ * This should return true if the JSON array contains the value exactly.
16
+ *
17
+ * This differs from $contains, which will check for 'LIKE' inside the JSON array.
18
+ */
19
+ if (column.type === SQLValueType.JSONArray) {
20
+ let where;
21
+ if (typeof value === 'string') {
22
+ where = new SQLWhereEqual(new SQLJsonSearch(new SQLLower(column.expression), 'one', scalarToSQLExpression(SQLWhereLike.escape(value))), SQLWhereSign.NotEqual, new SQLNull());
23
+ }
24
+ else {
25
+ where = new SQLJsonContains(column.expression, scalarToSQLExpression(JSON.stringify(value)));
26
+ }
27
+ // If comparing against null, also check for native MySQL null (the column does not exist)
28
+ if (value === null) {
29
+ where = new SQLWhereOr([
30
+ where,
31
+ new SQLWhereEqual(column.expression, SQLWhereSign.Equal, new SQLNull()),
32
+ ]);
33
+ }
34
+ return where;
35
+ }
36
+ if (value === null && isJSONColumn(column)) {
37
+ // JSON values can either resolve to null or "null" in MySQL.
38
+ return new SQLWhereEqual(new SQLJsonValue(column.expression), // casts json null to null, including invalid paths
39
+ SQLWhereSign.Equal, new SQLNull());
40
+ }
41
+ return new SQLWhereEqual(column.expression, SQLWhereSign.Equal, scalarToSQLExpression(value)).setNullable(column.nullable);
42
+ };
43
+ }
44
+ //# sourceMappingURL=equals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../src/filters/compilers/equals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,wBAAwB,CAAC,MAAuB;IAC5D,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD;;;;;WAKG;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,KAAe,CAAC;YAEpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,GAAG,IAAI,aAAa,CACrB,IAAI,aAAa,CACb,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAC/B,KAAK,EACL,qBAAqB,CACjB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7B,CACJ,EACD,YAAY,CAAC,QAAQ,EACrB,IAAI,OAAO,EAAE,CAChB,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,KAAK,GAAG,IAAI,eAAe,CACvB,MAAM,CAAC,UAAU,EACjB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC/C,CAAC;YACN,CAAC;YAED,0FAA0F;YAC1F,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,KAAK,GAAG,IAAI,UAAU,CAAC;oBACnB,KAAK;oBACL,IAAI,aAAa,CACb,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,KAAK,EAClB,IAAI,OAAO,EAAE,CAChB;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzC,6DAA6D;YAC7D,OAAO,IAAI,aAAa,CACpB,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,mDAAmD;YACxF,YAAY,CAAC,KAAK,EAClB,IAAI,OAAO,EAAE,CAChB,CAAC;QACN,CAAC;QAED,OAAO,IAAI,aAAa,CACpB,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,KAAK,EAClB,qBAAqB,CAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { StamhoofdFilter } from '@stamhoofd/structures';
2
+ import type { SQLSyncFilterRunner } from '../SQLFilter.js';
3
+ export declare function $greaterThanSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunner;
4
+ //# sourceMappingURL=greater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"greater.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/greater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI7E,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAc1F"}
@@ -0,0 +1,15 @@
1
+ import { assertFilterCompareValue } from '@stamhoofd/structures';
2
+ import { scalarToSQLExpression } from '../../SQLExpressions.js';
3
+ import { SQLWhereEqual, SQLWhereSign } from '../../SQLWhere.js';
4
+ import { normalizeColumn } from '../SQLFilter.js';
5
+ import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
6
+ export function $greaterThanSQLFilterCompiler(filter) {
7
+ return (originalColumn) => {
8
+ const v = assertFilterCompareValue(filter);
9
+ const column = normalizeColumn(originalColumn, v);
10
+ const value = normalizeCompareValue(v, column.type);
11
+ const base = new SQLWhereEqual(column.expression, SQLWhereSign.Greater, scalarToSQLExpression(value)).setNullable(column.nullable);
12
+ return base;
13
+ };
14
+ }
15
+ //# sourceMappingURL=greater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"greater.js","sourceRoot":"","sources":["../../../src/filters/compilers/greater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,MAAM,UAAU,6BAA6B,CAAC,MAAuB;IACjE,OAAO,CAAC,cAAgC,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,aAAa,CAC1B,MAAM,CAAC,UAAU,EACjB,YAAY,CAAC,OAAO,EACpB,qBAAqB,CAAC,KAAK,CAAC,CAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { StamhoofdFilter } from '@stamhoofd/structures';
2
+ import type { SQLSyncFilterRunner } from '../SQLFilter.js';
3
+ export declare function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunner;
4
+ //# sourceMappingURL=in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/in.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,KAAK,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAK5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAoDjF"}
@@ -1,40 +1,34 @@
1
1
  import { SimpleError } from '@simonbackx/simple-errors';
2
- import { assertFilterCompareValue, StamhoofdFilter } from '@stamhoofd/structures';
2
+ import { assertFilterCompareValue } from '@stamhoofd/structures';
3
3
  import { scalarToSQLExpression, SQLArray } from '../../SQLExpressions.js';
4
4
  import { SQLJsonOverlaps } from '../../SQLJsonExpressions.js';
5
5
  import { SQLWhereEqual, SQLWhereOr, SQLWhereSign } from '../../SQLWhere.js';
6
- import { normalizeColumn, SQLCurrentColumn, SQLSyncFilterRunner, SQLValueType } from '../SQLFilter.js';
6
+ import { normalizeColumn, SQLValueType } from '../SQLFilter.js';
7
7
  import { normalizeCompareValue } from '../helpers/normalizeCompareValue.js';
8
8
  import { $equalsSQLFilterCompiler } from './equals.js';
9
-
10
- export function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunner {
11
- return (originalColumn: SQLCurrentColumn) => {
9
+ export function $inSQLFilterCompiler(filter) {
10
+ return (originalColumn) => {
12
11
  if (!Array.isArray(filter)) {
13
12
  throw new SimpleError({
14
13
  code: 'invalid_filter',
15
14
  message: 'Expected array at $in filter',
16
15
  });
17
16
  }
18
-
19
17
  if (filter.length > 1000) {
20
18
  throw new SimpleError({
21
19
  code: 'invalid_filter',
22
20
  message: 'Too many values in $in filter, maximum is 1000',
23
- human: $t('2f4b0c22-044e-486b-8a75-80a5b51beaf3', { count: filter.length }),
21
+ human: $t('%1HH', { count: filter.length }),
24
22
  });
25
23
  }
26
-
27
- const column = normalizeColumn(originalColumn);
28
- const values = filter.map(val => normalizeCompareValue(assertFilterCompareValue(val), column.type));
29
-
30
- if (values.length === 0) {
24
+ if (filter.length === 0) {
31
25
  // Return always false
32
26
  return new SQLWhereOr([]);
33
27
  }
34
-
28
+ const column = normalizeColumn(originalColumn, assertFilterCompareValue(filter.find(f => f !== null) ?? null));
29
+ const values = filter.map(val => normalizeCompareValue(assertFilterCompareValue(val), column.type));
35
30
  const valuesWithoutNulls = values.filter(val => val !== null);
36
31
  const hasNull = values.length !== valuesWithoutNulls.length;
37
-
38
32
  if (hasNull) {
39
33
  // We cannot 'in' check with null. On top of that, null has some special behaviour when used in JSON values (e.g. JSON null vs MySQL null).
40
34
  return new SQLWhereOr([
@@ -42,22 +36,13 @@ export function $inSQLFilterCompiler(filter: StamhoofdFilter): SQLSyncFilterRunn
42
36
  $inSQLFilterCompiler(valuesWithoutNulls)(column),
43
37
  ]);
44
38
  }
45
-
46
39
  if (column.type === SQLValueType.JSONArray) {
47
40
  const jsonValues = JSON.stringify(valuesWithoutNulls);
48
41
  const valuesExpression = scalarToSQLExpression(jsonValues);
49
-
50
- return new SQLJsonOverlaps(
51
- column.expression,
52
- valuesExpression,
53
- );
42
+ return new SQLJsonOverlaps(column.expression, valuesExpression);
54
43
  }
55
44
  const valuesExpression = valuesWithoutNulls.length === 1 ? scalarToSQLExpression(valuesWithoutNulls[0]) : new SQLArray(valuesWithoutNulls);
56
-
57
- return new SQLWhereEqual(
58
- column.expression,
59
- SQLWhereSign.Equal,
60
- valuesExpression,
61
- ).setNullable(column.nullable);
45
+ return new SQLWhereEqual(column.expression, SQLWhereSign.Equal, valuesExpression).setNullable(column.nullable);
62
46
  };
63
47
  }
48
+ //# sourceMappingURL=in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in.js","sourceRoot":"","sources":["../../../src/filters/compilers/in.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/compilers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -2,3 +2,4 @@ export * from './less.js';
2
2
  export * from './greater.js';
3
3
  export * from './equals.js';
4
4
  export * from './in.js';
5
+ //# sourceMappingURL=index.js.map