diff --git a/localcache2.py b/localcache2.py index 7af05a0..0b29098 100644 --- a/localcache2.py +++ b/localcache2.py @@ -783,6 +783,22 @@ def insert_usefulinfo_record(parsed): pass print("[usefulinfo][tag-link-failed] summary_id=", summary_id, " tag=", t, " error=", str(ex_tag_link)) + # Determine schema variant for events (legacy column vs link table) + has_event_summary_col = False + has_link_table = True + try: + CUR.execute("SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='useful_info_event' AND column_name='summary_id')") + row = CUR.fetchone() + has_event_summary_col = bool(row[0]) if row else False + except Exception as ex_chk1: + print('[usefulinfo][diag] failed to probe useful_info_event.summary_id:', str(ex_chk1)) + try: + CUR.execute("SELECT to_regclass('useful_info_summary_event')") + row = CUR.fetchone() + has_link_table = bool(row and row[0]) + except Exception as ex_chk2: + print('[usefulinfo][diag] failed to probe useful_info_summary_event presence:', str(ex_chk2)) + # Events if summary_id and isinstance(events, list): for idx, e in enumerate(events, start=1): @@ -830,29 +846,40 @@ def insert_usefulinfo_record(parsed): try: CUR.execute("SAVEPOINT sp_event") - CUR.execute( - """ - INSERT INTO useful_info_event (dt, length, title, description) - VALUES (%s, %s, %s, %s) - RETURNING id - """, - (raw_dt, raw_len, raw_title, raw_desc) - ) + if has_event_summary_col: + CUR.execute( + """ + INSERT INTO useful_info_event (summary_id, dt, length, title, description) + VALUES (%s, %s, %s, %s, %s) + RETURNING id + """, + (summary_id, raw_dt, raw_len, raw_title, raw_desc) + ) + else: + CUR.execute( + """ + INSERT INTO useful_info_event (dt, length, title, description) + VALUES (%s, %s, %s, %s) + RETURNING id + """, + (raw_dt, raw_len, raw_title, raw_desc) + ) evrow = CUR.fetchone() if evrow and evrow[0]: - try: - CUR.execute("SAVEPOINT sp_evlink") - CUR.execute( - "INSERT INTO useful_info_summary_event (summary_id, event_id) VALUES (%s, %s) ON CONFLICT DO NOTHING", - (summary_id, evrow[0]) - ) - CUR.execute("RELEASE SAVEPOINT sp_evlink") - except Exception as ex_evlink: + if has_link_table: try: - CUR.execute("ROLLBACK TO SAVEPOINT sp_evlink") - except Exception: - pass - print("[usefulinfo][event-link-failed] summary_id=", summary_id, " event_id=", evrow[0], " error=", str(ex_evlink)) + CUR.execute("SAVEPOINT sp_evlink") + CUR.execute( + "INSERT INTO useful_info_summary_event (summary_id, event_id) VALUES (%s, %s) ON CONFLICT DO NOTHING", + (summary_id, evrow[0]) + ) + CUR.execute("RELEASE SAVEPOINT sp_evlink") + except Exception as ex_evlink: + try: + CUR.execute("ROLLBACK TO SAVEPOINT sp_evlink") + except Exception: + pass + print("[usefulinfo][event-link-failed] summary_id=", summary_id, " event_id=", evrow[0], " error=", str(ex_evlink)) print(f"[usefulinfo] inserted event id={evrow[0]} (summary_id={summary_id}) dt='{dt_str}' parsed={parsed_ok} iso='{parsed_iso}' all_day={all_day} minutes={computed_minutes} title='{raw_title}'") else: print(f"[usefulinfo][warn] no event id returned for dt='{dt_str}' title='{raw_title}'")