diff --git a/Whatsapp_Chat_Exporter/android_handler.py b/Whatsapp_Chat_Exporter/android_handler.py index f6c12ea..72ace63 100644 --- a/Whatsapp_Chat_Exporter/android_handler.py +++ b/Whatsapp_Chat_Exporter/android_handler.py @@ -80,7 +80,8 @@ def messages(db, data, media_folder, timezone_offset, filter_date, filter_chat, try: content_cursor = _get_messages_cursor_legacy(c, filter_empty, filter_date, filter_chat) table_message = False - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + logger.debug(f'Got sql error "{e}" in _get_message_cursor_legacy trying fallback.\n') try: content_cursor = _get_messages_cursor_new( c, @@ -125,7 +126,9 @@ def _get_message_count(cursor, filter_empty, filter_date, filter_chat, jid_map_e {date_filter} {include_filter} {exclude_filter}""") - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + logger.debug(f'Got sql error "{e}" in _get_message_count trying fallback.\n') + empty_filter = get_cond_for_empty(filter_empty, "key_remote_jid", "broadcast") date_filter = f'AND timestamp {filter_date}' if filter_date is not None else '' remote_jid_selection, group_jid_selection = get_jid_map_selection(jid_map_exists) @@ -309,7 +312,11 @@ def _fetch_row_safely(cursor): try: content = cursor.fetchone() return content - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + # Not sure how often this might happen, but this check should reduce the overhead + # if DEBUG flag is not set. + if logger.isEnabledFor(logging.DEBUG): + logger.debug(f'Got sql error "{e}" in _fetch_row_safely ignoring row.\n') continue @@ -587,7 +594,8 @@ def media(db, data, media_folder, filter_date, filter_chat, filter_empty, separa total_row_number = _get_media_count(c, filter_empty, filter_date, filter_chat) try: content_cursor = _get_media_cursor_legacy(c, filter_empty, filter_date, filter_chat) - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + logger.debug(f'Got sql error "{e}" in _get_media_cursor_legacy trying fallback.\n') content_cursor = _get_media_cursor_new(c, filter_empty, filter_date, filter_chat) content = content_cursor.fetchone() @@ -628,7 +636,8 @@ def _get_media_count(cursor, filter_empty, filter_date, filter_chat): {date_filter} {include_filter} {exclude_filter}""") - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + logger.debug(f'Got sql error "{e}" in _get_media_count trying fallback.\n') empty_filter = get_cond_for_empty(filter_empty, "jid.raw_string", "broadcast") date_filter = f'AND message.timestamp {filter_date}' if filter_date is not None else '' include_filter = get_chat_condition( @@ -804,7 +813,8 @@ def vcard(db, data, media_folder, filter_date, filter_chat, filter_empty): c = db.cursor() try: rows = _execute_vcard_query_modern(c, filter_date, filter_chat, filter_empty) - except sqlite3.OperationalError: + except sqlite3.OperationalError as e: + logger.debug(f'Got sql error "{e}" in _execute_vcard_query_modern trying fallback.\n') rows = _execute_vcard_query_legacy(c, filter_date, filter_chat, filter_empty) total_row_number = len(rows)