• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase-flutter / 35862863159
94%

Build:
DEFAULT BRANCH: main
Ran 23 Sep 2026 12:49PM UTC
Jobs 11
Files 167
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Sep 2026 12:48PM UTC coverage: 90.616% (+0.004%) from 90.612%
35862863159

push

github

web-flow
fix(postgrest): escape reserved characters in quantified pattern lists (#1869)

## What

The four quantified pattern filters join their patterns with a bare
comma:

```dart
'like(all).{${patterns.join(',')}}'
```

Every other list or array filter in this same builder escapes its
members through `_cleanFilterList`, including `not()` with the very same
operator. So today these two calls disagree:

```dart
.likeAllOf('name', ['a,b'])          // name=like(all).{a,b}
.not('name', 'like(all)', ['a,b'])   // name=not.like(all).{"a,b"}
```

The second one is right. PostgREST does not parse the `{...}` of a
quantified operator itself: `pSingleVal` takes the rest of the value
verbatim and `pgFmtFilter` renders it as `LIKE ALL($1)` with `$1` an
unknown-typed literal, which Postgres then coerces to `text[]`. Postgres
array-literal rules therefore apply in full, and unescaped input breaks
them:

- `['a,b']` becomes the two patterns `a` and `b`. Under `all` nothing
matches, under `any` too much does. No error either way, just wrong
rows.
- `[r'50\%']` loses its backslash to the array parser, so LIKE sees
`50%` and the wildcard the caller escaped fires anyway.
- `['a}b']` closes the literal early and `['a"b']` opens a quote inside
it, so the request fails in Postgres rather than returning wrong rows.
- `['']` collapses to `{}`, an empty array, which `LIKE ALL` treats as
vacuously true for every row.

This is the same bug #1481 fixed for `in.(...)`, in the four places that
were not part of it. The typed builder added in #1857 already gets it
right (`postgrest_filter_operators_test.dart` asserts
`content=like(any).{"a,b",c}`), so this also stops the two surfaces from
disagreeing about the same query.

## How

`_cleanFilterList(patterns)` in place of `patterns.join(',')` at the
four sites. No new helper and no behaviour change for a pattern that
needs no quoting, since `"%supa%"` and `%supa%` are the same array
element.

## Tests

Five in `packages/postgrest/test/filt... (continued)

8 of 8 new or added lines in 1 file covered. (100.0%)

8324 of 9186 relevant lines covered (90.62%)

4.88 hits per line

Jobs
ID Job ID Ran Files Coverage
3 supabase_auth - 35862863159.3 23 Sep 2026 12:53PM UTC 32
92.0
GitHub Action Run
4 supabase - 35862863159.4 23 Sep 2026 12:53PM UTC 17
93.3
GitHub Action Run
5 postgrest - 35862863159.5 23 Sep 2026 12:53PM UTC 25
92.17
GitHub Action Run
6 supabase_flutter - 35862863159.6 23 Sep 2026 12:50PM UTC 14
78.5
GitHub Action Run
7 supabase_storage - 35862863159.7 23 Sep 2026 12:53PM UTC 9
97.61
GitHub Action Run
8 supabase_functions - 35862863159.8 23 Sep 2026 12:49PM UTC 4
93.81
GitHub Action Run
9 supabase_realtime - 35862863159.9 23 Sep 2026 12:53PM UTC 13
90.66
GitHub Action Run
10 iceberg - 35862863159.10 23 Sep 2026 12:50PM UTC 6
68.52
GitHub Action Run
11 supabase_typegen - 35862863159.11 23 Sep 2026 12:51PM UTC 24
94.96
GitHub Action Run
2 yet_another_json_isolate - 35608843571.2 21 Sep 2026 01:58PM UTC 1
98.44
GitHub Action Run
3 supabase_common - 35624013119.3 21 Sep 2026 04:13PM UTC 22
87.36
GitHub Action Run
Source Files on build 35862863159
  • Tree
  • List 167
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35862863159
  • 8871b84b on github
  • Prev Build on main (#35861666412)
  • Next Build on main (#35872440279)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc