Skip to content
This repository was archived by the owner on May 13, 2023. It is now read-only.

Commit bc0db3a

Browse files
authored
Merge pull request #85 from Vinzent03/issue201
fix/contains list
2 parents 65cd589 + a82f8ef commit bc0db3a

File tree

5 files changed

+260
-155
lines changed

5 files changed

+260
-155
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## [1.0.0-dev.3]
22

33
- fix: maybeSingle [#84](https://github.com/supabase-community/postgrest-dart/pull/84)
4+
- fix: `List` as value in any filter [#85](https://github.com/supabase-community/postgrest-dart/pull/85)
45

56
## [1.0.0-dev.2]
67

lib/src/postgrest_filter_builder.dart

+18-14
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
55

66
/// Convert list filter to query params string
77
String _cleanFilterArray(List filter) {
8-
if (filter is List<int> || filter is List<double> || filter is List<num>) {
8+
if (filter.every((element) => element is num)) {
99
return filter.map((s) => '$s').join(',');
1010
} else {
1111
return filter.map((s) => '"$s"').join(',');
@@ -19,16 +19,15 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
1919
/// ```
2020
PostgrestFilterBuilder not(String column, String operator, dynamic value) {
2121
if (value is List) {
22-
if (operator == 'cs') {
23-
// `cs` filter requires postgrest array type `{}`
22+
if (operator == "in") {
2423
appendSearchParams(
2524
column,
26-
'not.$operator.{${_cleanFilterArray(value)}}',
25+
'not.$operator.(${_cleanFilterArray(value)})',
2726
);
2827
} else {
2928
appendSearchParams(
3029
column,
31-
'not.$operator.(${_cleanFilterArray(value)})',
30+
'not.$operator.{${_cleanFilterArray(value)}}',
3231
);
3332
}
3433
} else {
@@ -55,7 +54,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
5554
/// ```
5655
PostgrestFilterBuilder eq(String column, dynamic value) {
5756
if (value is List) {
58-
appendSearchParams(column, 'eq.(${_cleanFilterArray(value)})');
57+
appendSearchParams(column, 'eq.{${_cleanFilterArray(value)}}');
5958
} else {
6059
appendSearchParams(column, 'eq.$value');
6160
}
@@ -69,7 +68,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
6968
/// ```
7069
PostgrestFilterBuilder neq(String column, dynamic value) {
7170
if (value is List) {
72-
appendSearchParams(column, 'neq.(${_cleanFilterArray(value)})');
71+
appendSearchParams(column, 'neq.{${_cleanFilterArray(value)}}');
7372
} else {
7473
appendSearchParams(column, 'neq.$value');
7574
}
@@ -171,7 +170,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
171170
appendSearchParams(column, 'cs.$value');
172171
} else if (value is List) {
173172
// array
174-
appendSearchParams(column, 'cs.(${_cleanFilterArray(value)})');
173+
appendSearchParams(column, 'cs.{${_cleanFilterArray(value)}}');
175174
} else {
176175
// json
177176
appendSearchParams(column, 'cs.${json.encode(value)}');
@@ -191,7 +190,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
191190
appendSearchParams(column, 'cd.$value');
192191
} else if (value is List) {
193192
// array
194-
appendSearchParams(column, 'cd.(${_cleanFilterArray(value)})');
193+
appendSearchParams(column, 'cd.{${_cleanFilterArray(value)}}');
195194
} else {
196195
// json
197196
appendSearchParams(column, 'cd.${json.encode(value)}');
@@ -261,7 +260,7 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
261260
appendSearchParams(column, 'ov.$value');
262261
} else if (value is List) {
263262
// array
264-
appendSearchParams(column, 'ov.(${_cleanFilterArray(value)})');
263+
appendSearchParams(column, 'ov.{${_cleanFilterArray(value)}}');
265264
}
266265
return this;
267266
}
@@ -301,11 +300,16 @@ class PostgrestFilterBuilder extends PostgrestTransformBuilder {
301300
/// ```
302301
PostgrestFilterBuilder filter(String column, String operator, dynamic value) {
303302
if (value is List) {
304-
if (operator == 'cs') {
305-
// `cs` filter requires postgrest array type `{}`
306-
appendSearchParams(column, '$operator.{${_cleanFilterArray(value)}}');
303+
if (operator == "in") {
304+
appendSearchParams(
305+
column,
306+
'$operator.(${_cleanFilterArray(value)})',
307+
);
307308
} else {
308-
appendSearchParams(column, '$operator.(${_cleanFilterArray(value)})');
309+
appendSearchParams(
310+
column,
311+
'$operator.{${_cleanFilterArray(value)}}',
312+
);
309313
}
310314
} else {
311315
appendSearchParams(column, '$operator.$value');

test/basic_test.dart

+8-4
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,13 @@ void main() {
127127
});
128128

129129
test('basic update', () async {
130-
final res = await postgrest.from('messages').update(
131-
{'channel_id': 2},
132-
).select();
130+
final res = await postgrest
131+
.from('messages')
132+
.update(
133+
{'channel_id': 2},
134+
)
135+
.is_("data", null)
136+
.select();
133137
expect(res, [
134138
{
135139
'id': 1,
@@ -171,7 +175,7 @@ void main() {
171175
test('basic delete', () async {
172176
final res = await postgrest
173177
.from('messages')
174-
.delete(returning: ReturningOption.minimal)
178+
.delete()
175179
.eq('message', 'Supabase Launch Week is on fire')
176180
.select();
177181
expect(res, [

0 commit comments

Comments
 (0)