| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- import sqlite3
- from pathlib import Path
- DB = Path("data/telephony.sqlite3")
- con = sqlite3.connect(DB)
- con.execute("PRAGMA foreign_keys = ON")
- # Neue direkte Beziehung zum echten 3CX-CDR-Datensatz.
- cols = {
- row[1]
- for row in con.execute("PRAGMA table_info(transcripts)")
- }
- if "cdr_row_id" not in cols:
- con.execute("""
- ALTER TABLE transcripts
- ADD COLUMN cdr_row_id INTEGER
- """)
- # call_id darf künftig NULL sein.
- # SQLite erlaubt keine direkte Änderung von NOT NULL.
- # Bestehende 0 wird deshalb als "nicht verknüpft" behandelt.
- # Die echte Beziehung läuft über cdr_row_id.
- analysis_cols = {
- row[1]
- for row in con.execute("PRAGMA table_info(analyses)")
- }
- if "cdr_row_id" not in analysis_cols:
- con.execute("""
- ALTER TABLE analyses
- ADD COLUMN cdr_row_id INTEGER
- """)
- con.execute("""
- CREATE INDEX IF NOT EXISTS idx_transcripts_cdr_row_id
- ON transcripts(cdr_row_id)
- """)
- con.execute("""
- CREATE INDEX IF NOT EXISTS idx_analyses_cdr_row_id
- ON analyses(cdr_row_id)
- """)
- # Das bereits analysierte Recording 4648 eindeutig zuordnen.
- cdr = con.execute("""
- SELECT id
- FROM cdr_calls
- WHERE src_rec_id = 4648
- OR dst_rec_id = 4648
- ORDER BY id
- LIMIT 1
- """).fetchone()
- if cdr:
- cdr_row_id = cdr[0]
- con.execute("""
- UPDATE transcripts
- SET cdr_row_id = ?
- WHERE rec_id = 4648
- """, (cdr_row_id,))
- con.execute("""
- UPDATE analyses
- SET cdr_row_id = ?
- WHERE transcript_id IN (
- SELECT id
- FROM transcripts
- WHERE rec_id = 4648
- )
- """, (cdr_row_id,))
- print(f"recId 4648 → cdr_calls.id {cdr_row_id}")
- else:
- print("WARNUNG: CDR für recId 4648 nicht gefunden.")
- con.commit()
- print()
- print("=== VERKNÜPFUNG ===")
- row = con.execute("""
- SELECT
- t.id AS transcript_id,
- t.cdr_row_id,
- t.rec_id,
- a.id AS analysis_id,
- c.cdr_id,
- c.start_time,
- c.source_caller_id,
- c.src_rec_id
- FROM transcripts t
- LEFT JOIN analyses a
- ON a.transcript_id = t.id
- LEFT JOIN cdr_calls c
- ON c.id = t.cdr_row_id
- WHERE t.rec_id = 4648
- ORDER BY t.id DESC
- LIMIT 1
- """).fetchone()
- if row:
- print(
- "transcript_id =", row[0],
- "| cdr_row_id =", row[1],
- "| rec_id =", row[2],
- "| analysis_id =", row[3],
- "| cdr_id =", row[4],
- "| start =", row[5],
- "| caller =", row[6],
- "| recording =", row[7],
- )
- con.close()
|