Skip to content

Listen to data using the .eq filter not working properly #319

Open
@jvlt

Description

@jvlt

Describe the bug
Maybe I am missing something, but there seems to be a bug when using the .eq filter in streaming data via realtime.

To Reproduce
Steps to reproduce the behavior:

  1. Create a table with at least one additional column (I set it to type boolean and called it col)
  2. Add some mock data
  3. Use the SDK to retrieve data with an .eq filter: supabase.from('example').stream(primaryKey: ['id']).eq('col', true);

Expected behavior
Lets say there are 2 rows where col is true. These two are delivered to the device and an event is registered everytime something changes in these rows. So far so good. But:
If a different row gets col set to true, the SDK throws the following error:
Unhandled Exception: Exception: Could not find the updated record.
The expected behavior would be for the SDK to deliver 3 rows.

Furthermore, if a row A that previously had col = true gets set to col = false, there is no event emitted. Additionally, if something changes in a row where col is still set to true, the row A will still be emitted in the event, but in the state before col was set to false.

Smartphone (please complete the following information):
Version: supabase_flutter: ^1.2.1

Additional context
Complete error message:

E/flutter (10388): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: Could not find the updated record.
E/flutter (10388): #0      SupabaseStreamBuilder._addException (package:supabase/src/supabase_stream_builder.dart:404:67)
E/flutter (10388): supabase/realtime#1      SupabaseStreamBuilder._getStreamData.<anonymous closure> (package:supabase/src/supabase_stream_builder.dart:295:9)
E/flutter (10388): supabase/realtime#2      RealtimeChannel.trigger (package:realtime_client/src/realtime_channel.dart:559:22)
E/flutter (10388): supabase/realtime#3      RealtimeClient.onConnMessage.<anonymous closure>.<anonymous closure> (package:realtime_client/src/realtime_client.dart:294:41)
E/flutter (10388): supabase/realtime#4      Iterable.forEach (dart:core/iterable.dart:325:35)
E/flutter (10388): supabase/realtime#5      RealtimeClient.onConnMessage.<anonymous closure> (package:realtime_client/src/realtime_client.dart:294:12)
E/flutter (10388): supabase/realtime#6      new RealtimeClient.<anonymous closure> (package:realtime_client/src/realtime_client.dart:100:21)
E/flutter (10388): supabase/realtime#7      RealtimeClient.onConnMessage (package:realtime_client/src/realtime_client.dart:277:11)
E/flutter (10388): supabase/realtime#8      RealtimeClient.connect.<anonymous closure> (package:realtime_client/src/realtime_client.dart:125:22)
E/flutter (10388): supabase/realtime#9      _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#10     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#11     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#12     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
E/flutter (10388): supabase/realtime#13     _HandleErrorStream._handleData (dart:async/stream_pipe.dart:253:10)
E/flutter (10388): supabase/realtime#14     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
E/flutter (10388): supabase/realtime#15     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#16     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#17     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#18     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
E/flutter (10388): supabase/realtime#19     _StreamController._add (dart:async/stream_controller.dart:648:7)
E/flutter (10388): supabase/realtime#20     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#21     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#22     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#23     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
E/flutter (10388): supabase/realtime#24     _StreamController._add (dart:async/stream_controller.dart:648:7)
E/flutter (10388): supabase/realtime#25     _StreamController.add (dart:async/stream_controller.dart:596:5)
E/flutter (10388): supabase/realtime#26     new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1144:21)
E/flutter (10388): supabase/realtime#27     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#28     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#29     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#30     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:63:11)
E/flutter (10388): supabase/realtime#31     _EventSinkWrapper.add (dart:async/stream_transformers.dart:13:11)
E/flutter (10388): supabase/realtime#32     _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:332:23)
E/flutter (10388): supabase/realtime#33     _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:226:46)
E/flutter (10388): supabase/realtime#34     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
E/flutter (10388): supabase/realtime#35     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#36     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#37     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#38     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
E/flutter (10388): supabase/realtime#39     _StreamController._add (dart:async/stream_controller.dart:648:7)
E/flutter (10388): supabase/realtime#40     _StreamController.add (dart:async/stream_controller.dart:596:5)
E/flutter (10388): supabase/realtime#41     _Socket._onData (dart:io-patch/socket_patch.dart:2324:41)
E/flutter (10388): supabase/realtime#42     _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
E/flutter (10388): supabase/realtime#43     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (10388): supabase/realtime#44     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (10388): supabase/realtime#45     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:774:19)
E/flutter (10388): supabase/realtime#46     _StreamController._add (dart:async/stream_controller.dart:648:7)
E/flutter (10388): supabase/realtime#47     _StreamController.add (dart:async/stream_controller.dart:596:5)
E/flutter (10388): supabase/realtime#48     _RawSecureSocket._sendReadEvent (dart:io/secure_socket.dart:1107:19)
E/flutter (10388): supabase/realtime#49     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
E/flutter (10388): supabase/realtime#50     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
E/flutter (10388): supabase/realtime#51     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
E/flutter (10388): supabase/realtime#52     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedThis issue is blocked by another issuebugSomething isn't workingrealtimeThis issue or pull request is related to realtime

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions