@@ -379,38 +379,39 @@ def get_saved_interview_list(
379379 filenames_to_exclude .extend ([current_filename , filename_to_exclude ])
380380
381381 query_draft = """
382- SELECT DISTINCT ON (userdict.key) userdict.indexno
383- ,userdict.filename as filename
384- ,num_keys
385- ,userdictkeys.user_id as user_id
386- ,userdict.modtime as modtime
387- ,userdict.key as key
388- ,jsonstorage.data->'auto_title' as auto_title
389- ,jsonstorage.data->'title' as title
390- ,jsonstorage.data->'description' as description
391- ,jsonstorage.data->'steps' as steps
392- ,jsonstorage.data->'progress' as progress
393- ,jsonstorage.data->'original_interview_filename' as original_interview_filename
394- ,jsonstorage.data->'answer_count' as answer_count
395- ,jsonstorage.data as data
396- FROM userdict
397- NATURAL JOIN
398- (
399- SELECT key
400- ,MAX(modtime) AS modtime
401- ,COUNT(key) AS num_keys
402- FROM userdict
403- GROUP BY key
404- ) mostrecent
405- LEFT JOIN userdictkeys
406- ON userdictkeys.key = userdict.key
407- LEFT JOIN jsonstorage
408- ON userdict.key = jsonstorage.key AND (jsonstorage.tags = :metadata)
409- WHERE (userdictkeys.user_id = :user_id or :user_id is null)
410- AND (userdict.filename = :filename OR :filename is null)
411- AND (userdict.filename NOT IN :filenames_to_exclude)
412- AND (NOT :exclude_newly_started_sessions OR num_keys > 1)
413- """
382+ SELECT * FROM (
383+ SELECT DISTINCT ON (userdict.key) userdict.indexno
384+ ,userdict.filename as filename
385+ ,num_keys
386+ ,userdictkeys.user_id as user_id
387+ ,userdict.modtime as modtime
388+ ,userdict.key as key
389+ ,jsonstorage.data->'auto_title' as auto_title
390+ ,jsonstorage.data->'title' as title
391+ ,jsonstorage.data->'description' as description
392+ ,jsonstorage.data->'steps' as steps
393+ ,jsonstorage.data->'progress' as progress
394+ ,jsonstorage.data->'original_interview_filename' as original_interview_filename
395+ ,jsonstorage.data->'answer_count' as answer_count
396+ ,jsonstorage.data as data
397+ FROM userdict
398+ NATURAL JOIN
399+ (
400+ SELECT key
401+ ,MAX(modtime) AS modtime
402+ ,COUNT(key) AS num_keys
403+ FROM userdict
404+ GROUP BY key
405+ ) mostrecent
406+ LEFT JOIN userdictkeys
407+ ON userdictkeys.key = userdict.key
408+ LEFT JOIN jsonstorage
409+ ON userdict.key = jsonstorage.key AND (jsonstorage.tags = :metadata)
410+ WHERE (userdictkeys.user_id = :user_id or :user_id is null)
411+ AND (userdict.filename = :filename OR :filename is null)
412+ AND (userdict.filename NOT IN :filenames_to_exclude)
413+ AND (NOT :exclude_newly_started_sessions OR num_keys > 1)
414+ """
414415 if packages_to_exclude :
415416 query_draft += (
416417 """
@@ -424,7 +425,9 @@ def get_saved_interview_list(
424425 """
425426 )
426427 query_draft += """
427- ORDER BY modtime desc
428+ ORDER BY userdict.key, modtime DESC
429+ ) AS unique_sessions
430+ ORDER BY modtime DESC
428431 LIMIT :limit
429432 OFFSET :offset;
430433 """
@@ -589,27 +592,30 @@ def find_matching_sessions(
589592
590593 get_sessions_query = text (
591594 f"""
592- SELECT DISTINCT ON (userdict.key) userdict.indexno,
593- userdict.filename as filename,
594- num_keys,
595- userdictkeys.user_id as user_id,
596- userdict.modtime as modtime,
597- userdict.key as key,
598- { ', ' .join (f"jsonstorage.data->>{ repr (column )} as { column } " for column in metadata_column_names )} ,
599- jsonstorage.data as data
600- FROM userdict
601- NATURAL JOIN (
602- SELECT key, MAX(modtime) AS modtime, COUNT(key) AS num_keys
603- FROM userdict
604- GROUP BY key
605- ) mostrecent
606- LEFT JOIN userdictkeys ON userdictkeys.key = userdict.key
607- LEFT JOIN jsonstorage ON userdict.key = jsonstorage.key AND (jsonstorage.tags = :metadata)
608- WHERE (userdictkeys.user_id = :user_id OR :user_id is NULL)
609- AND { filename_condition }
610- AND (userdict.filename NOT IN :filenames_to_exclude)
611- AND (NOT :exclude_newly_started_sessions OR num_keys > 1)
612- AND ({ metadata_search_conditions } )
595+ SELECT * FROM (
596+ SELECT DISTINCT ON (userdict.key) userdict.indexno,
597+ userdict.filename as filename,
598+ num_keys,
599+ userdictkeys.user_id as user_id,
600+ userdict.modtime as modtime,
601+ userdict.key as key,
602+ { ', ' .join (f"jsonstorage.data->>{ repr (column )} as { column } " for column in metadata_column_names )} ,
603+ jsonstorage.data as data
604+ FROM userdict
605+ NATURAL JOIN (
606+ SELECT key, MAX(modtime) AS modtime, COUNT(key) AS num_keys
607+ FROM userdict
608+ GROUP BY key
609+ ) mostrecent
610+ LEFT JOIN userdictkeys ON userdictkeys.key = userdict.key
611+ LEFT JOIN jsonstorage ON userdict.key = jsonstorage.key AND (jsonstorage.tags = :metadata)
612+ WHERE (userdictkeys.user_id = :user_id OR :user_id is NULL)
613+ AND { filename_condition }
614+ AND (userdict.filename NOT IN :filenames_to_exclude)
615+ AND (NOT :exclude_newly_started_sessions OR num_keys > 1)
616+ AND ({ metadata_search_conditions } )
617+ ORDER BY userdict.key, modtime DESC
618+ ) AS unique_sessions
613619 ORDER BY modtime DESC
614620 LIMIT :limit OFFSET :offset;
615621 """
0 commit comments