@relq/orm 0.1.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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +236 -0
  3. package/dist/cjs/__test-types.cjs +17 -0
  4. package/dist/cjs/addon/cursor.cjs +1473 -0
  5. package/dist/cjs/addon/pg.cjs +4969 -0
  6. package/dist/cjs/cache/index.cjs +9 -0
  7. package/dist/cjs/cache/query-cache.cjs +311 -0
  8. package/dist/cjs/condition/array-condition-builder.cjs +527 -0
  9. package/dist/cjs/condition/array-numeric-condition-builder.cjs +186 -0
  10. package/dist/cjs/condition/array-specialized-condition-builder.cjs +206 -0
  11. package/dist/cjs/condition/array-string-condition-builder.cjs +146 -0
  12. package/dist/cjs/condition/base-condition-builder.cjs +2 -0
  13. package/dist/cjs/condition/condition-collector.cjs +461 -0
  14. package/dist/cjs/condition/fulltext-condition-builder.cjs +61 -0
  15. package/dist/cjs/condition/geometric-condition-builder.cjs +228 -0
  16. package/dist/cjs/condition/index.cjs +29 -0
  17. package/dist/cjs/condition/jsonb-condition-builder.cjs +448 -0
  18. package/dist/cjs/condition/network-condition-builder.cjs +237 -0
  19. package/dist/cjs/condition/postgis-condition-builder.cjs +188 -0
  20. package/dist/cjs/condition/range-condition-builder.cjs +98 -0
  21. package/dist/cjs/core/helpers/ConnectedAggregateBuilder.cjs +132 -0
  22. package/dist/cjs/core/helpers/ConnectedCTEBuilder.cjs +53 -0
  23. package/dist/cjs/core/helpers/ConnectedCountBuilder.cjs +73 -0
  24. package/dist/cjs/core/helpers/ConnectedDeleteBuilder.cjs +65 -0
  25. package/dist/cjs/core/helpers/ConnectedInsertBuilder.cjs +112 -0
  26. package/dist/cjs/core/helpers/ConnectedInsertFromSelectBuilder.cjs +66 -0
  27. package/dist/cjs/core/helpers/ConnectedQueryBuilder.cjs +146 -0
  28. package/dist/cjs/core/helpers/ConnectedRawQueryBuilder.cjs +46 -0
  29. package/dist/cjs/core/helpers/ConnectedSelectBuilder.cjs +331 -0
  30. package/dist/cjs/core/helpers/ConnectedTransactionBuilder.cjs +105 -0
  31. package/dist/cjs/core/helpers/ConnectedUpdateBuilder.cjs +79 -0
  32. package/dist/cjs/core/helpers/PaginateBuilder.cjs +178 -0
  33. package/dist/cjs/core/helpers/ReturningExecutor.cjs +70 -0
  34. package/dist/cjs/core/helpers/capability-guard.cjs +10 -0
  35. package/dist/cjs/core/helpers/index.cjs +31 -0
  36. package/dist/cjs/core/helpers/methods.cjs +10 -0
  37. package/dist/cjs/core/helpers/query-convenience.cjs +238 -0
  38. package/dist/cjs/core/helpers/select-joins.cjs +251 -0
  39. package/dist/cjs/core/helpers/select-pagination.cjs +233 -0
  40. package/dist/cjs/core/helpers/select-types.cjs +2 -0
  41. package/dist/cjs/core/pg-family/cockroachdb-client/capabilities.cjs +31 -0
  42. package/dist/cjs/core/pg-family/cockroachdb-client/index.cjs +7 -0
  43. package/dist/cjs/core/pg-family/cockroachdb-client/relq-cockroach.cjs +16 -0
  44. package/dist/cjs/core/pg-family/dsql-client/capabilities.cjs +31 -0
  45. package/dist/cjs/core/pg-family/dsql-client/index.cjs +7 -0
  46. package/dist/cjs/core/pg-family/dsql-client/relq-dsql.cjs +16 -0
  47. package/dist/cjs/core/pg-family/index.cjs +19 -0
  48. package/dist/cjs/core/pg-family/nile-client/capabilities.cjs +31 -0
  49. package/dist/cjs/core/pg-family/nile-client/index.cjs +7 -0
  50. package/dist/cjs/core/pg-family/nile-client/relq-nile.cjs +36 -0
  51. package/dist/cjs/core/pg-family/nile-client/tenant-context.cjs +44 -0
  52. package/dist/cjs/core/pg-family/pg-client/capabilities.cjs +31 -0
  53. package/dist/cjs/core/pg-family/pg-client/index.cjs +7 -0
  54. package/dist/cjs/core/pg-family/pg-client/relq-postgres.cjs +43 -0
  55. package/dist/cjs/core/pg-family/shared/pg-base.cjs +385 -0
  56. package/dist/cjs/core/pg-family/shared/pg-dialect.cjs +67 -0
  57. package/dist/cjs/core/pg-family/shared/pg-error-parser.cjs +34 -0
  58. package/dist/cjs/core/pg-family/shared/pg-type-coercion.cjs +14 -0
  59. package/dist/cjs/core/relq-base.cjs +307 -0
  60. package/dist/cjs/core/relq-client.cjs +56 -0
  61. package/dist/cjs/core/shared/cleanup.cjs +36 -0
  62. package/dist/cjs/core/shared/column-mapping.cjs +97 -0
  63. package/dist/cjs/core/shared/errors.cjs +17 -0
  64. package/dist/cjs/core/shared/index.cjs +24 -0
  65. package/dist/cjs/core/shared/table-accessor.cjs +22 -0
  66. package/dist/cjs/core/shared/transform.cjs +35 -0
  67. package/dist/cjs/core/shared/types.cjs +2 -0
  68. package/dist/cjs/core/shared/validation.cjs +140 -0
  69. package/dist/cjs/core/types/core.types.cjs +2 -0
  70. package/dist/cjs/count/count-builder.cjs +88 -0
  71. package/dist/cjs/count/index.cjs +5 -0
  72. package/dist/cjs/delete/delete-builder.cjs +176 -0
  73. package/dist/cjs/delete/index.cjs +5 -0
  74. package/dist/cjs/explain/explain-builder.cjs +99 -0
  75. package/dist/cjs/explain/index.cjs +5 -0
  76. package/dist/cjs/index.cjs +26 -0
  77. package/dist/cjs/insert/conflict-builder.cjs +213 -0
  78. package/dist/cjs/insert/index.cjs +5 -0
  79. package/dist/cjs/insert/insert-builder.cjs +320 -0
  80. package/dist/cjs/insert/insert-from-select-builder.cjs +86 -0
  81. package/dist/cjs/pubsub/index.cjs +7 -0
  82. package/dist/cjs/pubsub/listen-notify-builder.cjs +57 -0
  83. package/dist/cjs/pubsub/listener-connection.cjs +180 -0
  84. package/dist/cjs/raw/index.cjs +8 -0
  85. package/dist/cjs/raw/raw-query-builder.cjs +27 -0
  86. package/dist/cjs/raw/sql-template.cjs +73 -0
  87. package/dist/cjs/select/aggregate-builder.cjs +179 -0
  88. package/dist/cjs/select/index.cjs +16 -0
  89. package/dist/cjs/select/join-builder.cjs +192 -0
  90. package/dist/cjs/select/join-condition-builder.cjs +189 -0
  91. package/dist/cjs/select/join-internals.cjs +5 -0
  92. package/dist/cjs/select/join-many-condition-builder.cjs +159 -0
  93. package/dist/cjs/select/scalar-query-builder.cjs +134 -0
  94. package/dist/cjs/select/scalar-select-builder.cjs +78 -0
  95. package/dist/cjs/select/select-builder.cjs +426 -0
  96. package/dist/cjs/select/sql-expression.cjs +38 -0
  97. package/dist/cjs/select/table-proxy.cjs +99 -0
  98. package/dist/cjs/shared/aws-dsql.cjs +181 -0
  99. package/dist/cjs/shared/errors/relq-errors.cjs +361 -0
  100. package/dist/cjs/shared/pg-format.cjs +383 -0
  101. package/dist/cjs/shared/types/config-types.cjs +51 -0
  102. package/dist/cjs/transaction/index.cjs +6 -0
  103. package/dist/cjs/transaction/transaction-builder.cjs +78 -0
  104. package/dist/cjs/types/aggregate-types.cjs +2 -0
  105. package/dist/cjs/types/inference-types.cjs +18 -0
  106. package/dist/cjs/types/pagination-types.cjs +7 -0
  107. package/dist/cjs/types/result-types.cjs +2 -0
  108. package/dist/cjs/types/scalar-types.cjs +2 -0
  109. package/dist/cjs/types/schema-types.cjs +2 -0
  110. package/dist/cjs/types/subscription-types.cjs +2 -0
  111. package/dist/cjs/types.cjs +2 -0
  112. package/dist/cjs/update/array-update-builder.cjs +232 -0
  113. package/dist/cjs/update/index.cjs +16 -0
  114. package/dist/cjs/update/jsonb-update-builder.cjs +219 -0
  115. package/dist/cjs/update/update-builder.cjs +274 -0
  116. package/dist/cjs/utils/addon/pg/cursor.cjs +8 -0
  117. package/dist/cjs/utils/addon/pg/pg.cjs +23 -0
  118. package/dist/cjs/utils/case-converter.cjs +58 -0
  119. package/dist/cjs/utils/env-resolver.cjs +226 -0
  120. package/dist/cjs/utils/environment-detection.cjs +124 -0
  121. package/dist/cjs/utils/fk-resolver.cjs +186 -0
  122. package/dist/cjs/utils/index.cjs +25 -0
  123. package/dist/cjs/utils/pool-defaults.cjs +91 -0
  124. package/dist/cjs/utils/type-coercion.cjs +120 -0
  125. package/dist/cjs/window/index.cjs +5 -0
  126. package/dist/cjs/window/window-builder.cjs +80 -0
  127. package/dist/esm/__test-types.js +15 -0
  128. package/dist/esm/addon/cursor.js +1440 -0
  129. package/dist/esm/addon/pg.js +4931 -0
  130. package/dist/esm/cache/index.js +1 -0
  131. package/dist/esm/cache/query-cache.js +303 -0
  132. package/dist/esm/condition/array-condition-builder.js +519 -0
  133. package/dist/esm/condition/array-numeric-condition-builder.js +182 -0
  134. package/dist/esm/condition/array-specialized-condition-builder.js +200 -0
  135. package/dist/esm/condition/array-string-condition-builder.js +142 -0
  136. package/dist/esm/condition/base-condition-builder.js +1 -0
  137. package/dist/esm/condition/condition-collector.js +452 -0
  138. package/dist/esm/condition/fulltext-condition-builder.js +53 -0
  139. package/dist/esm/condition/geometric-condition-builder.js +220 -0
  140. package/dist/esm/condition/index.js +8 -0
  141. package/dist/esm/condition/jsonb-condition-builder.js +439 -0
  142. package/dist/esm/condition/network-condition-builder.js +229 -0
  143. package/dist/esm/condition/postgis-condition-builder.js +180 -0
  144. package/dist/esm/condition/range-condition-builder.js +90 -0
  145. package/dist/esm/core/helpers/ConnectedAggregateBuilder.js +128 -0
  146. package/dist/esm/core/helpers/ConnectedCTEBuilder.js +49 -0
  147. package/dist/esm/core/helpers/ConnectedCountBuilder.js +69 -0
  148. package/dist/esm/core/helpers/ConnectedDeleteBuilder.js +61 -0
  149. package/dist/esm/core/helpers/ConnectedInsertBuilder.js +108 -0
  150. package/dist/esm/core/helpers/ConnectedInsertFromSelectBuilder.js +62 -0
  151. package/dist/esm/core/helpers/ConnectedQueryBuilder.js +142 -0
  152. package/dist/esm/core/helpers/ConnectedRawQueryBuilder.js +42 -0
  153. package/dist/esm/core/helpers/ConnectedSelectBuilder.js +327 -0
  154. package/dist/esm/core/helpers/ConnectedTransactionBuilder.js +100 -0
  155. package/dist/esm/core/helpers/ConnectedUpdateBuilder.js +75 -0
  156. package/dist/esm/core/helpers/PaginateBuilder.js +174 -0
  157. package/dist/esm/core/helpers/ReturningExecutor.js +66 -0
  158. package/dist/esm/core/helpers/capability-guard.js +7 -0
  159. package/dist/esm/core/helpers/index.js +13 -0
  160. package/dist/esm/core/helpers/methods.js +6 -0
  161. package/dist/esm/core/helpers/query-convenience.js +194 -0
  162. package/dist/esm/core/helpers/select-joins.js +246 -0
  163. package/dist/esm/core/helpers/select-pagination.js +226 -0
  164. package/dist/esm/core/helpers/select-types.js +1 -0
  165. package/dist/esm/core/pg-family/cockroachdb-client/capabilities.js +28 -0
  166. package/dist/esm/core/pg-family/cockroachdb-client/index.js +2 -0
  167. package/dist/esm/core/pg-family/cockroachdb-client/relq-cockroach.js +12 -0
  168. package/dist/esm/core/pg-family/dsql-client/capabilities.js +28 -0
  169. package/dist/esm/core/pg-family/dsql-client/index.js +2 -0
  170. package/dist/esm/core/pg-family/dsql-client/relq-dsql.js +12 -0
  171. package/dist/esm/core/pg-family/index.js +6 -0
  172. package/dist/esm/core/pg-family/nile-client/capabilities.js +28 -0
  173. package/dist/esm/core/pg-family/nile-client/index.js +2 -0
  174. package/dist/esm/core/pg-family/nile-client/relq-nile.js +32 -0
  175. package/dist/esm/core/pg-family/nile-client/tenant-context.js +40 -0
  176. package/dist/esm/core/pg-family/pg-client/capabilities.js +28 -0
  177. package/dist/esm/core/pg-family/pg-client/index.js +2 -0
  178. package/dist/esm/core/pg-family/pg-client/relq-postgres.js +39 -0
  179. package/dist/esm/core/pg-family/shared/pg-base.js +347 -0
  180. package/dist/esm/core/pg-family/shared/pg-dialect.js +63 -0
  181. package/dist/esm/core/pg-family/shared/pg-error-parser.js +29 -0
  182. package/dist/esm/core/pg-family/shared/pg-type-coercion.js +6 -0
  183. package/dist/esm/core/relq-base.js +270 -0
  184. package/dist/esm/core/relq-client.js +48 -0
  185. package/dist/esm/core/shared/cleanup.js +27 -0
  186. package/dist/esm/core/shared/column-mapping.js +90 -0
  187. package/dist/esm/core/shared/errors.js +13 -0
  188. package/dist/esm/core/shared/index.js +6 -0
  189. package/dist/esm/core/shared/table-accessor.js +19 -0
  190. package/dist/esm/core/shared/transform.js +30 -0
  191. package/dist/esm/core/shared/types.js +1 -0
  192. package/dist/esm/core/shared/validation.js +136 -0
  193. package/dist/esm/core/types/core.types.js +1 -0
  194. package/dist/esm/count/count-builder.js +81 -0
  195. package/dist/esm/count/index.js +1 -0
  196. package/dist/esm/delete/delete-builder.js +169 -0
  197. package/dist/esm/delete/index.js +1 -0
  198. package/dist/esm/explain/explain-builder.js +95 -0
  199. package/dist/esm/explain/index.js +1 -0
  200. package/dist/esm/index.js +7 -0
  201. package/dist/esm/insert/conflict-builder.js +202 -0
  202. package/dist/esm/insert/index.js +1 -0
  203. package/dist/esm/insert/insert-builder.js +313 -0
  204. package/dist/esm/insert/insert-from-select-builder.js +79 -0
  205. package/dist/esm/pubsub/index.js +1 -0
  206. package/dist/esm/pubsub/listen-notify-builder.js +48 -0
  207. package/dist/esm/pubsub/listener-connection.js +173 -0
  208. package/dist/esm/raw/index.js +2 -0
  209. package/dist/esm/raw/raw-query-builder.js +20 -0
  210. package/dist/esm/raw/sql-template.js +66 -0
  211. package/dist/esm/select/aggregate-builder.js +172 -0
  212. package/dist/esm/select/index.js +4 -0
  213. package/dist/esm/select/join-builder.js +184 -0
  214. package/dist/esm/select/join-condition-builder.js +181 -0
  215. package/dist/esm/select/join-internals.js +2 -0
  216. package/dist/esm/select/join-many-condition-builder.js +151 -0
  217. package/dist/esm/select/scalar-query-builder.js +126 -0
  218. package/dist/esm/select/scalar-select-builder.js +70 -0
  219. package/dist/esm/select/select-builder.js +419 -0
  220. package/dist/esm/select/sql-expression.js +33 -0
  221. package/dist/esm/select/table-proxy.js +91 -0
  222. package/dist/esm/shared/aws-dsql.js +140 -0
  223. package/dist/esm/shared/errors/relq-errors.js +339 -0
  224. package/dist/esm/shared/pg-format.js +375 -0
  225. package/dist/esm/shared/types/config-types.js +46 -0
  226. package/dist/esm/transaction/index.js +1 -0
  227. package/dist/esm/transaction/transaction-builder.js +70 -0
  228. package/dist/esm/types/aggregate-types.js +1 -0
  229. package/dist/esm/types/inference-types.js +12 -0
  230. package/dist/esm/types/pagination-types.js +4 -0
  231. package/dist/esm/types/result-types.js +1 -0
  232. package/dist/esm/types/scalar-types.js +1 -0
  233. package/dist/esm/types/schema-types.js +1 -0
  234. package/dist/esm/types/subscription-types.js +1 -0
  235. package/dist/esm/types.js +1 -0
  236. package/dist/esm/update/array-update-builder.js +219 -0
  237. package/dist/esm/update/index.js +3 -0
  238. package/dist/esm/update/jsonb-update-builder.js +211 -0
  239. package/dist/esm/update/update-builder.js +267 -0
  240. package/dist/esm/utils/addon/pg/cursor.js +1 -0
  241. package/dist/esm/utils/addon/pg/pg.js +2 -0
  242. package/dist/esm/utils/case-converter.js +55 -0
  243. package/dist/esm/utils/env-resolver.js +213 -0
  244. package/dist/esm/utils/environment-detection.js +114 -0
  245. package/dist/esm/utils/fk-resolver.js +178 -0
  246. package/dist/esm/utils/index.js +4 -0
  247. package/dist/esm/utils/pool-defaults.js +85 -0
  248. package/dist/esm/utils/type-coercion.js +112 -0
  249. package/dist/esm/window/index.js +1 -0
  250. package/dist/esm/window/window-builder.js +73 -0
  251. package/dist/index.cjs +1 -0
  252. package/dist/index.d.ts +7281 -0
  253. package/dist/index.js +1 -0
  254. package/package.json +52 -0
@@ -0,0 +1,527 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArrayConditionCollector = void 0;
7
+ exports.buildArrayConditionSQL = buildArrayConditionSQL;
8
+ const pg_format_1 = __importDefault(require("../shared/pg-format.cjs"));
9
+ const array_string_condition_builder_1 = require("./array-string-condition-builder.cjs");
10
+ const array_numeric_condition_builder_1 = require("./array-numeric-condition-builder.cjs");
11
+ const array_specialized_condition_builder_1 = require("./array-specialized-condition-builder.cjs");
12
+ class ArrayConditionCollector {
13
+ parent;
14
+ string;
15
+ numeric;
16
+ integer;
17
+ uuid;
18
+ date;
19
+ timestamp;
20
+ jsonb;
21
+ constructor(parent) {
22
+ this.parent = parent;
23
+ this.string = new array_string_condition_builder_1.ArrayStringConditionBuilder(parent);
24
+ this.numeric = new array_numeric_condition_builder_1.ArrayNumericConditionBuilder(parent);
25
+ this.integer = this.numeric;
26
+ this.uuid = new array_specialized_condition_builder_1.ArrayUuidConditionBuilder(parent);
27
+ this.date = new array_specialized_condition_builder_1.ArrayDateConditionBuilder(parent);
28
+ this.timestamp = this.date;
29
+ this.jsonb = new array_specialized_condition_builder_1.ArrayJsonbConditionBuilder(parent);
30
+ }
31
+ contains(column, values) {
32
+ this.parent.conditions.push({
33
+ method: 'array_contains',
34
+ column,
35
+ values
36
+ });
37
+ return this.parent;
38
+ }
39
+ containedBy(column, values) {
40
+ this.parent.conditions.push({
41
+ method: 'array_contained_by',
42
+ column,
43
+ values
44
+ });
45
+ return this.parent;
46
+ }
47
+ overlaps(column, values) {
48
+ this.parent.conditions.push({
49
+ method: 'array_overlaps',
50
+ column,
51
+ values
52
+ });
53
+ return this.parent;
54
+ }
55
+ equal(column, values) {
56
+ this.parent.conditions.push({
57
+ method: 'array_equal',
58
+ column,
59
+ values
60
+ });
61
+ return this.parent;
62
+ }
63
+ notEqual(column, values) {
64
+ this.parent.conditions.push({
65
+ method: 'array_not_equal',
66
+ column,
67
+ values
68
+ });
69
+ return this.parent;
70
+ }
71
+ any(column, operator, value) {
72
+ this.parent.conditions.push({
73
+ method: 'array_any',
74
+ column,
75
+ values: { operator, value }
76
+ });
77
+ return this.parent;
78
+ }
79
+ all(column, operator, value) {
80
+ this.parent.conditions.push({
81
+ method: 'array_all',
82
+ column,
83
+ values: { operator, value }
84
+ });
85
+ return this.parent;
86
+ }
87
+ length(column, length) {
88
+ this.parent.conditions.push({
89
+ method: 'array_length',
90
+ column,
91
+ values: length
92
+ });
93
+ return this.parent;
94
+ }
95
+ slice(column, start, end, values) {
96
+ this.parent.conditions.push({
97
+ method: 'array_slice',
98
+ column,
99
+ values: { start, end, values }
100
+ });
101
+ return this.parent;
102
+ }
103
+ atIndex(column, index, value) {
104
+ this.parent.conditions.push({
105
+ method: 'array_at_index',
106
+ column,
107
+ values: { index, value }
108
+ });
109
+ return this.parent;
110
+ }
111
+ containsPattern(column, pattern, matchType = 'prefix') {
112
+ this.parent.conditions.push({
113
+ method: 'array_contains_pattern',
114
+ column,
115
+ values: { pattern, matchType }
116
+ });
117
+ return this.parent;
118
+ }
119
+ containsPrefix(column, prefix) {
120
+ return this.containsPattern(column, prefix, 'prefix');
121
+ }
122
+ containsSuffix(column, suffix) {
123
+ return this.containsPattern(column, suffix, 'suffix');
124
+ }
125
+ containsSubstring(column, substring) {
126
+ return this.containsPattern(column, substring, 'contains');
127
+ }
128
+ append(column, value) {
129
+ this.parent.conditions.push({
130
+ method: 'array_append_value',
131
+ column,
132
+ values: value
133
+ });
134
+ return this.parent;
135
+ }
136
+ prepend(column, value) {
137
+ this.parent.conditions.push({
138
+ method: 'array_prepend_value',
139
+ column,
140
+ values: value
141
+ });
142
+ return this.parent;
143
+ }
144
+ remove(column, value) {
145
+ this.parent.conditions.push({
146
+ method: 'array_remove_value',
147
+ column,
148
+ values: value
149
+ });
150
+ return this.parent;
151
+ }
152
+ removePattern(column, pattern, matchType = 'prefix') {
153
+ this.parent.conditions.push({
154
+ method: 'array_remove_pattern',
155
+ column,
156
+ values: { pattern, matchType }
157
+ });
158
+ return this.parent;
159
+ }
160
+ removePrefix(column, prefix) {
161
+ return this.removePattern(column, prefix, 'prefix');
162
+ }
163
+ removeSuffix(column, suffix) {
164
+ return this.removePattern(column, suffix, 'suffix');
165
+ }
166
+ removeSubstring(column, substring) {
167
+ return this.removePattern(column, substring, 'contains');
168
+ }
169
+ updatePattern(column, pattern, replacement, matchType = 'prefix') {
170
+ this.parent.conditions.push({
171
+ method: 'array_update_pattern',
172
+ column,
173
+ values: { pattern, replacement, matchType }
174
+ });
175
+ return this.parent;
176
+ }
177
+ updatePrefix(column, prefix, replacement) {
178
+ return this.updatePattern(column, prefix, replacement, 'prefix');
179
+ }
180
+ updateSuffix(column, suffix, replacement) {
181
+ return this.updatePattern(column, suffix, replacement, 'suffix');
182
+ }
183
+ updateSubstring(column, substring, replacement) {
184
+ return this.updatePattern(column, substring, replacement, 'contains');
185
+ }
186
+ hasNonMatching(column, pattern, matchType = 'prefix') {
187
+ this.parent.conditions.push({
188
+ method: 'array_has_non_matching',
189
+ column,
190
+ values: { pattern, matchType }
191
+ });
192
+ return this.parent;
193
+ }
194
+ hasNonMatchingPrefix(column, prefix) {
195
+ return this.hasNonMatching(column, prefix, 'prefix');
196
+ }
197
+ hasNonMatchingSuffix(column, suffix) {
198
+ return this.hasNonMatching(column, suffix, 'suffix');
199
+ }
200
+ allMatch(column, pattern, matchType = 'prefix') {
201
+ this.parent.conditions.push({
202
+ method: 'array_all_match',
203
+ column,
204
+ values: { pattern, matchType }
205
+ });
206
+ return this.parent;
207
+ }
208
+ allMatchPrefix(column, prefix) {
209
+ return this.allMatch(column, prefix, 'prefix');
210
+ }
211
+ allMatchSuffix(column, suffix) {
212
+ return this.allMatch(column, suffix, 'suffix');
213
+ }
214
+ allMatchSubstring(column, substring) {
215
+ return this.allMatch(column, substring, 'contains');
216
+ }
217
+ }
218
+ exports.ArrayConditionCollector = ArrayConditionCollector;
219
+ function formatLikePattern(pattern, matchType) {
220
+ switch (matchType) {
221
+ case 'prefix':
222
+ return `${pattern}%`;
223
+ case 'suffix':
224
+ return `%${pattern}`;
225
+ case 'contains':
226
+ return `%${pattern}%`;
227
+ case 'exact':
228
+ return pattern;
229
+ default:
230
+ return `${pattern}%`;
231
+ }
232
+ }
233
+ function buildArrayConditionSQL(condition) {
234
+ const { method, column, values } = condition;
235
+ switch (method) {
236
+ case 'array_contains':
237
+ return (0, pg_format_1.default)('%I @> ARRAY[%s]', column, values.map(v => (0, pg_format_1.default)('%L', v)).join(','));
238
+ case 'array_contained_by':
239
+ return (0, pg_format_1.default)('%I <@ ARRAY[%s]', column, values.map(v => (0, pg_format_1.default)('%L', v)).join(','));
240
+ case 'array_overlaps':
241
+ return (0, pg_format_1.default)('%I && ARRAY[%s]', column, values.map(v => (0, pg_format_1.default)('%L', v)).join(','));
242
+ case 'array_equal':
243
+ return (0, pg_format_1.default)('%I = ARRAY[%s]', column, values.map(v => (0, pg_format_1.default)('%L', v)).join(','));
244
+ case 'array_not_equal':
245
+ return (0, pg_format_1.default)('%I <> ARRAY[%s]', column, values.map(v => (0, pg_format_1.default)('%L', v)).join(','));
246
+ case 'array_any': {
247
+ const { operator, value } = values;
248
+ return (0, pg_format_1.default)('%L %s ANY(%I)', value, operator, column);
249
+ }
250
+ case 'array_all': {
251
+ const { operator, value } = values;
252
+ return (0, pg_format_1.default)('%L %s ALL(%I)', value, operator, column);
253
+ }
254
+ case 'array_length':
255
+ return (0, pg_format_1.default)('array_length(%I, 1) = %L', column, values);
256
+ case 'array_slice': {
257
+ const { start, end, values: sliceValues } = values;
258
+ return (0, pg_format_1.default)('%I[%s:%s] = ARRAY[%s]', column, start, end, sliceValues.map(v => (0, pg_format_1.default)('%L', v)).join(','));
259
+ }
260
+ case 'array_at_index': {
261
+ const { index, value } = values;
262
+ return (0, pg_format_1.default)('%I[%s] = %L', column, index, value);
263
+ }
264
+ case 'array_contains_pattern': {
265
+ const { pattern, matchType } = values;
266
+ const likePattern = formatLikePattern(pattern, matchType);
267
+ if (matchType === 'exact') {
268
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %L)', column, pattern);
269
+ }
270
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem LIKE %L)', column, likePattern);
271
+ }
272
+ case 'array_has_non_matching': {
273
+ const { pattern, matchType } = values;
274
+ const likePattern = formatLikePattern(pattern, matchType);
275
+ if (matchType === 'exact') {
276
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <> %L)', column, pattern);
277
+ }
278
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, likePattern);
279
+ }
280
+ case 'array_all_match': {
281
+ const { pattern, matchType } = values;
282
+ const likePattern = formatLikePattern(pattern, matchType);
283
+ if (matchType === 'exact') {
284
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <> %L)', column, pattern);
285
+ }
286
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, likePattern);
287
+ }
288
+ case 'array_append_value':
289
+ return (0, pg_format_1.default)('array_append(%I, %L)', column, values);
290
+ case 'array_prepend_value':
291
+ return (0, pg_format_1.default)('array_prepend(%L, %I)', values, column);
292
+ case 'array_remove_value':
293
+ return (0, pg_format_1.default)('array_remove(%I, %L)', column, values);
294
+ case 'array_remove_pattern': {
295
+ const { pattern, matchType } = values;
296
+ const likePattern = formatLikePattern(pattern, matchType);
297
+ if (matchType === 'exact') {
298
+ return (0, pg_format_1.default)('ARRAY(SELECT elem FROM unnest(%I) AS elem WHERE elem <> %L)', column, pattern);
299
+ }
300
+ return (0, pg_format_1.default)('ARRAY(SELECT elem FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, likePattern);
301
+ }
302
+ case 'array_update_pattern': {
303
+ const { pattern, replacement, matchType } = values;
304
+ const likePattern = formatLikePattern(pattern, matchType);
305
+ if (matchType === 'exact') {
306
+ return (0, pg_format_1.default)('ARRAY(SELECT CASE WHEN elem = %L THEN %L ELSE elem END FROM unnest(%I) AS elem)', pattern, replacement, column);
307
+ }
308
+ return (0, pg_format_1.default)('ARRAY(SELECT CASE WHEN elem LIKE %L THEN %L ELSE elem END FROM unnest(%I) AS elem)', likePattern, replacement, column);
309
+ }
310
+ case 'array_string_starts_with': {
311
+ const { prefix } = values;
312
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem LIKE %L)', column, `${prefix}%`);
313
+ }
314
+ case 'array_string_ends_with': {
315
+ const { suffix } = values;
316
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem LIKE %L)', column, `%${suffix}`);
317
+ }
318
+ case 'array_string_contains': {
319
+ const { substring } = values;
320
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem LIKE %L)', column, `%${substring}%`);
321
+ }
322
+ case 'array_string_matches': {
323
+ const { pattern } = values;
324
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ~ %L)', column, pattern);
325
+ }
326
+ case 'array_string_imatches': {
327
+ const { pattern } = values;
328
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ~* %L)', column, pattern);
329
+ }
330
+ case 'array_string_ilike': {
331
+ const { pattern } = values;
332
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ILIKE %L)', column, pattern);
333
+ }
334
+ case 'array_string_all_start_with': {
335
+ const { prefix } = values;
336
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, `${prefix}%`);
337
+ }
338
+ case 'array_string_all_end_with': {
339
+ const { suffix } = values;
340
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, `%${suffix}`);
341
+ }
342
+ case 'array_string_all_contain': {
343
+ const { substring } = values;
344
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT LIKE %L)', column, `%${substring}%`);
345
+ }
346
+ case 'array_string_length_between': {
347
+ const { min, max } = values;
348
+ if (max !== undefined) {
349
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE length(elem) BETWEEN %s AND %s)', column, min, max);
350
+ }
351
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE length(elem) >= %s)', column, min);
352
+ }
353
+ case 'array_string_has_empty':
354
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = \'\')', column);
355
+ case 'array_string_has_non_empty':
356
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <> \'\')', column);
357
+ case 'array_string_has_uppercase':
358
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ~ \'[A-Z]\')', column);
359
+ case 'array_string_has_lowercase':
360
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ~ \'[a-z]\')', column);
361
+ case 'array_string_has_numeric':
362
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ~ \'^[0-9]+$\')', column);
363
+ case 'array_string_equals': {
364
+ const { value } = values;
365
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %L)', column, value);
366
+ }
367
+ case 'array_string_iequals': {
368
+ const { value } = values;
369
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE LOWER(elem) = LOWER(%L))', column, value);
370
+ }
371
+ case 'array_numeric_greater_than': {
372
+ const { value } = values;
373
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem > %s)', column, value);
374
+ }
375
+ case 'array_numeric_greater_than_or_equal': {
376
+ const { value } = values;
377
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem >= %s)', column, value);
378
+ }
379
+ case 'array_numeric_less_than': {
380
+ const { value } = values;
381
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem < %s)', column, value);
382
+ }
383
+ case 'array_numeric_less_than_or_equal': {
384
+ const { value } = values;
385
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <= %s)', column, value);
386
+ }
387
+ case 'array_numeric_between': {
388
+ const { min, max } = values;
389
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem BETWEEN %s AND %s)', column, min, max);
390
+ }
391
+ case 'array_numeric_all_greater_than': {
392
+ const { value } = values;
393
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <= %s)', column, value);
394
+ }
395
+ case 'array_numeric_all_less_than': {
396
+ const { value } = values;
397
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem >= %s)', column, value);
398
+ }
399
+ case 'array_numeric_all_between': {
400
+ const { min, max } = values;
401
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem NOT BETWEEN %s AND %s)', column, min, max);
402
+ }
403
+ case 'array_numeric_sum_equals': {
404
+ const { target } = values;
405
+ return (0, pg_format_1.default)('(SELECT SUM(elem) FROM unnest(%I) AS elem) = %s', column, target);
406
+ }
407
+ case 'array_numeric_sum_greater_than': {
408
+ const { target } = values;
409
+ return (0, pg_format_1.default)('(SELECT SUM(elem) FROM unnest(%I) AS elem) > %s', column, target);
410
+ }
411
+ case 'array_numeric_sum_less_than': {
412
+ const { target } = values;
413
+ return (0, pg_format_1.default)('(SELECT SUM(elem) FROM unnest(%I) AS elem) < %s', column, target);
414
+ }
415
+ case 'array_numeric_avg_equals': {
416
+ const { target } = values;
417
+ return (0, pg_format_1.default)('(SELECT AVG(elem) FROM unnest(%I) AS elem) = %s', column, target);
418
+ }
419
+ case 'array_numeric_avg_greater_than': {
420
+ const { target } = values;
421
+ return (0, pg_format_1.default)('(SELECT AVG(elem) FROM unnest(%I) AS elem) > %s', column, target);
422
+ }
423
+ case 'array_numeric_avg_less_than': {
424
+ const { target } = values;
425
+ return (0, pg_format_1.default)('(SELECT AVG(elem) FROM unnest(%I) AS elem) < %s', column, target);
426
+ }
427
+ case 'array_numeric_max_equals': {
428
+ const { target } = values;
429
+ return (0, pg_format_1.default)('(SELECT MAX(elem) FROM unnest(%I) AS elem) = %s', column, target);
430
+ }
431
+ case 'array_numeric_min_equals': {
432
+ const { target } = values;
433
+ return (0, pg_format_1.default)('(SELECT MIN(elem) FROM unnest(%I) AS elem) = %s', column, target);
434
+ }
435
+ case 'array_numeric_equals': {
436
+ const { value } = values;
437
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %s)', column, value);
438
+ }
439
+ case 'array_numeric_has_even':
440
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem %% 2 = 0)', column);
441
+ case 'array_numeric_has_odd':
442
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem %% 2 <> 0)', column);
443
+ case 'array_numeric_has_positive':
444
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem > 0)', column);
445
+ case 'array_numeric_has_negative':
446
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem < 0)', column);
447
+ case 'array_numeric_has_zero':
448
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = 0)', column);
449
+ case 'array_uuid_all_valid':
450
+ return (0, pg_format_1.default)('NOT EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem::text !~ \'^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\')', column);
451
+ case 'array_uuid_has_version': {
452
+ const { version } = values;
453
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE substring(elem::text from 15 for 1) = %L)', column, String(version));
454
+ }
455
+ case 'array_uuid_equals': {
456
+ const { uuid } = values;
457
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %L::uuid)', column, uuid);
458
+ }
459
+ case 'array_date_before': {
460
+ const { date } = values;
461
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem < %L::timestamp)', column, date);
462
+ }
463
+ case 'array_date_after': {
464
+ const { date } = values;
465
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem > %L::timestamp)', column, date);
466
+ }
467
+ case 'array_date_between': {
468
+ const { start, end } = values;
469
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem BETWEEN %L::timestamp AND %L::timestamp)', column, start, end);
470
+ }
471
+ case 'array_date_within_days': {
472
+ const { days } = values;
473
+ if (days >= 0) {
474
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem BETWEEN NOW() AND NOW() + INTERVAL \'%s days\')', column, days);
475
+ }
476
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem BETWEEN NOW() - INTERVAL \'%s days\' AND NOW())', column, Math.abs(days));
477
+ }
478
+ case 'array_date_equals': {
479
+ const { date } = values;
480
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %L::timestamp)', column, date);
481
+ }
482
+ case 'array_date_has_today':
483
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem::date = CURRENT_DATE)', column);
484
+ case 'array_date_has_past':
485
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem < NOW())', column);
486
+ case 'array_date_has_future':
487
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem > NOW())', column);
488
+ case 'array_date_has_this_week':
489
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE date_trunc(\'week\', elem) = date_trunc(\'week\', NOW()))', column);
490
+ case 'array_date_has_this_month':
491
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE date_trunc(\'month\', elem) = date_trunc(\'month\', NOW()))', column);
492
+ case 'array_date_has_this_year':
493
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE date_trunc(\'year\', elem) = date_trunc(\'year\', NOW()))', column);
494
+ case 'array_jsonb_has_key': {
495
+ const { key } = values;
496
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem ? %L)', column, key);
497
+ }
498
+ case 'array_jsonb_has_path': {
499
+ const { path } = values;
500
+ const pathArray = path.split('.').map((p) => p.trim());
501
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem #> %L IS NOT NULL)', column, `{${pathArray.join(',')}}`);
502
+ }
503
+ case 'array_jsonb_contains': {
504
+ const { value } = values;
505
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem @> %L::jsonb)', column, JSON.stringify(value));
506
+ }
507
+ case 'array_jsonb_contained_by': {
508
+ const { value } = values;
509
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem <@ %L::jsonb)', column, JSON.stringify(value));
510
+ }
511
+ case 'array_jsonb_equals': {
512
+ const { value } = values;
513
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem = %L::jsonb)', column, JSON.stringify(value));
514
+ }
515
+ case 'array_jsonb_path_equals': {
516
+ const { path, value } = values;
517
+ const pathArray = path.split('.').map((p) => p.trim());
518
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE elem #> %L = %L::jsonb)', column, `{${pathArray.join(',')}}`, JSON.stringify(value));
519
+ }
520
+ case 'array_jsonb_has_object':
521
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE jsonb_typeof(elem) = \'object\')', column);
522
+ case 'array_jsonb_has_array':
523
+ return (0, pg_format_1.default)('EXISTS (SELECT 1 FROM unnest(%I) AS elem WHERE jsonb_typeof(elem) = \'array\')', column);
524
+ default:
525
+ return '';
526
+ }
527
+ }