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

Commit

Permalink
feat: add in_ filter on stream() (#191)
Browse files Browse the repository at this point in the history
* add in_ filter on stream()

* add comment docs for in_

* rename in_ to inFilter

* add double quotes when filter using in with string
  • Loading branch information
dshukertjr committed Apr 12, 2023
1 parent a36db10 commit 9757207
Showing 1 changed file with 37 additions and 3 deletions.
40 changes: 37 additions & 3 deletions lib/src/supabase_stream_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'dart:async';
import 'package:rxdart/rxdart.dart';
import 'package:supabase/supabase.dart';

enum _FilterType { eq, neq, lt, lte, gt, gte }
enum _FilterType { eq, neq, lt, lte, gt, gte, inFilter }

class _StreamPostgrestFilter {
_StreamPostgrestFilter({
Expand Down Expand Up @@ -198,6 +198,26 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
return this;
}

/// Filters the results where [column] is included in [value].
///
/// Only one filter can be applied to `.stream()`.
///
/// ```dart
/// supabase.from('users').stream(primaryKey: ['id']).inFilter('name', ['Andy', 'Amy', 'Terry']);
/// ```
SupabaseStreamBuilder inFilter(String column, List<dynamic> values) {
assert(
_streamFilter == null,
'Only one filter can be applied to `.stream()`',
);
_streamFilter = _StreamPostgrestFilter(
type: _FilterType.inFilter,
column: column,
value: values,
);
return this;
}

/// Orders the result with the specified [column].
///
/// When `ascending` value is true, the result will be in ascending order.
Expand Down Expand Up @@ -261,8 +281,19 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
_streamData = [];
String? realtimeFilter;
if (currentStreamFilter != null) {
realtimeFilter =
'${currentStreamFilter.column}=${currentStreamFilter.type.name}.${currentStreamFilter.value}';
if (currentStreamFilter.type == _FilterType.inFilter) {
final value = currentStreamFilter.value;
if (value is List<String>) {
realtimeFilter =
'${currentStreamFilter.column}=in.(${value.map((s) => '"$s"').join(',')})';
} else {
realtimeFilter =
'${currentStreamFilter.column}=in.(${value.join(',')})';
}
} else {
realtimeFilter =
'${currentStreamFilter.column}=${currentStreamFilter.type.name}.${currentStreamFilter.value}';
}
}

_channel = _realtimeClient.channel(_realtimeTopic);
Expand Down Expand Up @@ -335,6 +366,9 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
case _FilterType.gte:
query = query.gte(_streamFilter!.column, _streamFilter!.value);
break;
case _FilterType.inFilter:
query = query.in_(_streamFilter!.column, _streamFilter!.value);
break;
}
}
PostgrestTransformBuilder? transformQuery;
Expand Down

0 comments on commit 9757207

Please sign in to comment.