@@ -351,20 +351,29 @@ async def update_session_state(self, session_id: str, state: "dict[str, Any]") -
351351 """
352352 await async_ (self ._update_session_state )(session_id , state )
353353
354- def _list_sessions (self , app_name : str , user_id : str ) -> "list[SessionRecord]" :
354+ def _list_sessions (self , app_name : str , user_id : " str | None" ) -> "list[SessionRecord]" :
355355 """Synchronous implementation of list_sessions."""
356356 table_name = self ._get_full_table_name (self ._session_table )
357- sql = f"""
358- SELECT id, app_name, user_id, JSON_VALUE(state) as state, create_time, update_time
359- FROM { table_name }
360- WHERE app_name = @app_name AND user_id = @user_id
361- ORDER BY update_time DESC
362- """
363357
364- params = [
365- ScalarQueryParameter ("app_name" , "STRING" , app_name ),
366- ScalarQueryParameter ("user_id" , "STRING" , user_id ),
367- ]
358+ if user_id is None :
359+ sql = f"""
360+ SELECT id, app_name, user_id, JSON_VALUE(state) as state, create_time, update_time
361+ FROM { table_name }
362+ WHERE app_name = @app_name
363+ ORDER BY update_time DESC
364+ """
365+ params = [ScalarQueryParameter ("app_name" , "STRING" , app_name )]
366+ else :
367+ sql = f"""
368+ SELECT id, app_name, user_id, JSON_VALUE(state) as state, create_time, update_time
369+ FROM { table_name }
370+ WHERE app_name = @app_name AND user_id = @user_id
371+ ORDER BY update_time DESC
372+ """
373+ params = [
374+ ScalarQueryParameter ("app_name" , "STRING" , app_name ),
375+ ScalarQueryParameter ("user_id" , "STRING" , user_id ),
376+ ]
368377
369378 with self ._config .provide_connection () as conn :
370379 job_config = QueryJobConfig (query_parameters = params )
@@ -383,18 +392,18 @@ def _list_sessions(self, app_name: str, user_id: str) -> "list[SessionRecord]":
383392 for row in results
384393 ]
385394
386- async def list_sessions (self , app_name : str , user_id : str ) -> "list[SessionRecord]" :
387- """List all sessions for a user in an app .
395+ async def list_sessions (self , app_name : str , user_id : str | None = None ) -> "list[SessionRecord]" :
396+ """List sessions for an app, optionally filtered by user .
388397
389398 Args:
390399 app_name: Application name.
391- user_id: User identifier.
400+ user_id: User identifier. If None, lists all sessions for the app.
392401
393402 Returns:
394403 List of session records ordered by update_time DESC.
395404
396405 Notes:
397- Uses clustering on (app_name, user_id) for efficiency.
406+ Uses clustering on (app_name, user_id) when user_id is provided for efficiency.
398407 """
399408 return await async_ (self ._list_sessions )(app_name , user_id )
400409
0 commit comments