Skip to content
This repository was archived by the owner on Oct 9, 2025. It is now read-only.

Commit 8ba6cb8

Browse files
authored
Merge pull request #166 from supabase/fix/special-characters-filter-values
fix: handle postgrest special characters in filters
2 parents e5f5dfa + 5c36f1d commit 8ba6cb8

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/lib/PostgrestFilterBuilder.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import PostgrestTransformBuilder from './PostgrestTransformBuilder'
44
* Filters
55
*/
66

7-
const cleanFilterArray = <T>(filter: T[keyof T][]) => filter.map((s) => `${s}`).join(',')
8-
97
type FilterOperator =
108
| 'eq'
119
| 'neq'
@@ -171,7 +169,15 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
171169
* @param values The values to filter with.
172170
*/
173171
in(column: keyof T, values: T[keyof T][]): this {
174-
this.url.searchParams.append(`${column}`, `in.(${cleanFilterArray(values)})`)
172+
const cleanedValues = values
173+
.map((s) => {
174+
// handle postgrest reserved characters
175+
// https://postgrest.org/en/v7.0.0/api.html#reserved-characters
176+
if (typeof s === 'string' && new RegExp('[,()]').test(s)) return `"${s}"`
177+
else return `${s}`
178+
})
179+
.join(',')
180+
this.url.searchParams.append(`${column}`, `in.(${cleanedValues})`)
175181
return this
176182
}
177183

@@ -189,7 +195,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
189195
this.url.searchParams.append(`${column}`, `cs.${value}`)
190196
} else if (Array.isArray(value)) {
191197
// array
192-
this.url.searchParams.append(`${column}`, `cs.{${cleanFilterArray(value)}}`)
198+
this.url.searchParams.append(`${column}`, `cs.{${value.join(',')}}`)
193199
} else {
194200
// json
195201
this.url.searchParams.append(`${column}`, `cs.${JSON.stringify(value)}`)
@@ -210,7 +216,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
210216
this.url.searchParams.append(`${column}`, `cd.${value}`)
211217
} else if (Array.isArray(value)) {
212218
// array
213-
this.url.searchParams.append(`${column}`, `cd.{${cleanFilterArray(value)}}`)
219+
this.url.searchParams.append(`${column}`, `cd.{${value.join(',')}}`)
214220
} else {
215221
// json
216222
this.url.searchParams.append(`${column}`, `cd.${JSON.stringify(value)}`)
@@ -291,7 +297,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
291297
this.url.searchParams.append(`${column}`, `ov.${value}`)
292298
} else {
293299
// array
294-
this.url.searchParams.append(`${column}`, `ov.{${cleanFilterArray(value)}}`)
300+
this.url.searchParams.append(`${column}`, `ov.{${value.join(',')}}`)
295301
}
296302
return this
297303
}

0 commit comments

Comments
 (0)