From 1166a9bda474443720e9d6b16ac08539b7a38a73 Mon Sep 17 00:00:00 2001 From: Aashish Patil Date: Thu, 30 Jul 2026 07:35:11 -0700 Subject: [PATCH] fix(sql_connect): queries are not single instanced for execute --- .../lib/src/core/ref.dart | 1 + .../lib/src/firebase_data_connect.dart | 4 ++- .../test/src/firebase_data_connect_test.dart | 33 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/firebase_data_connect/firebase_data_connect/lib/src/core/ref.dart b/packages/firebase_data_connect/firebase_data_connect/lib/src/core/ref.dart index e118e439e7cc..85ecf29dc476 100644 --- a/packages/firebase_data_connect/firebase_data_connect/lib/src/core/ref.dart +++ b/packages/firebase_data_connect/firebase_data_connect/lib/src/core/ref.dart @@ -342,6 +342,7 @@ class QueryRef extends OperationRef { _serverStreamSubscription?.cancel(); _serverStreamSubscription = null; _serverStream = null; + _streamController = null; } Stream> subscribe() { diff --git a/packages/firebase_data_connect/firebase_data_connect/lib/src/firebase_data_connect.dart b/packages/firebase_data_connect/firebase_data_connect/lib/src/firebase_data_connect.dart index 165b6f5d62fb..ea23c0c5ebd7 100644 --- a/packages/firebase_data_connect/firebase_data_connect/lib/src/firebase_data_connect.dart +++ b/packages/firebase_data_connect/firebase_data_connect/lib/src/firebase_data_connect.dart @@ -144,7 +144,7 @@ class FirebaseDataConnect extends FirebasePlugin { if (ref != null) { return ref; } else { - return QueryRef( + final newRef = QueryRef( this, operationName, transport!, @@ -153,6 +153,8 @@ class FirebaseDataConnect extends FirebasePlugin { varsSerializer, vars, ); + _queryManager.trackedQueries[queryId] = newRef; + return newRef; } } diff --git a/packages/firebase_data_connect/firebase_data_connect/test/src/firebase_data_connect_test.dart b/packages/firebase_data_connect/firebase_data_connect/test/src/firebase_data_connect_test.dart index eabf82393de8..4252f88ecc12 100644 --- a/packages/firebase_data_connect/firebase_data_connect/test/src/firebase_data_connect_test.dart +++ b/packages/firebase_data_connect/firebase_data_connect/test/src/firebase_data_connect_test.dart @@ -254,5 +254,38 @@ void main() { expect(routingTransport.websocket.auth, equals(mockAuth)); expect(routingTransport.websocket.appCheck, equals(mockAppCheck)); }); + + test('query returns identical QueryRef instance for identical queries', () { + final dynamicApp = DynamicMockFirebaseApp( + name: 'queryRefAppName', + options: const FirebaseOptions( + apiKey: 'fake_api_key', + appId: 'fake_app_id', + messagingSenderId: 'fake_messaging_sender_id', + projectId: 'fake_project_id', + ), + ); + + final instance = FirebaseDataConnect( + app: dynamicApp, + connectorConfig: mockConnectorConfig, + ); + + final ref1 = instance.query( + 'listMovies', + (json) => json, + emptySerializer, + null, + ); + + final ref2 = instance.query( + 'listMovies', + (json) => json, + emptySerializer, + null, + ); + + expect(identical(ref1, ref2), isTrue); + }); }); }