Commit 361c7fa
fix(service-analytics): compile the $icontains ASCII fold per dialect — translate() is not a SQLite function
All three of this package's SQL compilers spelled the #6520 fold as
`translate(col, 'ABC…', 'abc…')` on EVERY dialect. `translate()` is
PostgreSQL/Oracle; SQLite has none, so on a SQLite datasource an analytics
`where` carrying `$icontains` — and an ADR-0021 D-C read scope carrying it —
compiled a statement the engine refuses to parse. Measured on sql.js 1.14.1
(SQLite 3.49.1, the engine driver-sqlite-wasm runs): `SELECT
translate('ABC','ABC','abc')` answers `no such function: translate`.
`$icontains` now goes through `text-match-sql.ts`'s per-dialect construct table
with one `fold` flag, set on that operator alone:
- sqlite → `lower(col) GLOB lower(?)`, ASCII-only there (`lower('CAFÉ')` is
`cafÉ`), which is the #4706 Q1 = A boundary rather than an
approximation of it.
- postgres → `translate()`, byte-identical to before. Never broken.
- unknown → `translate()`, byte-identical to before. The residue keeps the
shape it had; note this diverges from driver-sql, whose unknown
arm folds with LOWER(), and neither face claims the other's.
- mysql → the nested-REPLACE fold over CAST(… AS BINARY), matching
driver-sql. TEXT ONLY — no MySQL server is provisionable here.
The `sql` keyword field on `ObjectQLStrategy`'s LIKE_SQL_OPS lost its last
reader in this move and is removed: a dead field named `sql` beside a compiler
invites exactly the misreading this defect was.
#15684's `$icontains` control asserted "the fold arm still emits translate() on
every dialect". That was a PROXY for the property it protected — the two text
families must not collapse onto one path — and this change makes the fold
dialect-DEPENDENT by design, so the proxy no longer states the property. It is
re-aimed rather than deleted or loosened: `$icontains` and `$contains` must now
compile to DIFFERENT text on each dialect, and `$contains` must carry no fold in
any of its three spellings. That discriminates against the collapse in both
directions where dialect-invariance discriminated against one.
Fixes #15780
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpTx2tbq3pZRYAdoGt6E6Y1 parent f7db8f4 commit 361c7fa
8 files changed
Lines changed: 644 additions & 138 deletions
File tree
- .changeset
- packages/services/service-analytics/src
- __tests__
- strategies
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
Lines changed: 345 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 62 additions & 25 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
54 | 54 | | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
65 | 87 | | |
66 | 88 | | |
67 | 89 | | |
| |||
234 | 256 | | |
235 | 257 | | |
236 | 258 | | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
242 | 269 | | |
243 | | - | |
244 | | - | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
249 | 283 | | |
250 | | - | |
251 | | - | |
252 | | - | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
253 | 290 | | |
254 | 291 | | |
255 | 292 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
111 | | - | |
| 111 | + | |
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
121 | 123 | | |
122 | 124 | | |
123 | 125 | | |
| |||
177 | 179 | | |
178 | 180 | | |
179 | 181 | | |
180 | | - | |
181 | | - | |
182 | | - | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
183 | 193 | | |
184 | 194 | | |
185 | 195 | | |
| |||
199 | 209 | | |
200 | 210 | | |
201 | 211 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
220 | 234 | | |
221 | 235 | | |
222 | 236 | | |
| |||
Lines changed: 20 additions & 12 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
800 | 800 | | |
801 | 801 | | |
802 | 802 | | |
| 803 | + | |
803 | 804 | | |
804 | 805 | | |
805 | 806 | | |
806 | 807 | | |
807 | 808 | | |
808 | 809 | | |
809 | 810 | | |
| 811 | + | |
810 | 812 | | |
811 | 813 | | |
812 | 814 | | |
| |||
1331 | 1333 | | |
1332 | 1334 | | |
1333 | 1335 | | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
1334 | 1350 | | |
1335 | | - | |
| 1351 | + | |
1336 | 1352 | | |
1337 | | - | |
1338 | | - | |
1339 | | - | |
1340 | | - | |
1341 | | - | |
1342 | | - | |
1343 | | - | |
1344 | | - | |
1345 | | - | |
1346 | | - | |
| 1353 | + | |
| 1354 | + | |
1347 | 1355 | | |
1348 | 1356 | | |
1349 | 1357 | | |
| |||
0 commit comments