#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""probe_jxdy_err.py —— jxdy_hjypj 的 constraint failed 取证"""
import re, sqlite3
D = "/root/gov_crawler/"
f = "crawl_jxdy_hjypj.py"
src = open(D + f, encoding="utf-8", errors="ignore").read()
print("=== 该脚本的 INSERT/REPLACE 语句 ===")
for m in re.finditer(r"(INSERT\s+(?:OR\s+\w+\s+)?INTO\s+\w+[^\"\']{0,200})", src, re.I):
    print("  ", re.sub(r"\s+", " ", m.group(1))[:190])
print("\n=== 是否手写 gov_search ===")
for kw in ("gov_search", "DELETE FROM", "INSERT INTO gov_raw", "REPLACE INTO gov_raw"):
    print("  %-22s 出现 %d 次" % (kw, src.count(kw)))
print("\n=== gov_raw 上的触发器 ===")
c = sqlite3.connect("file:/root/search.db?mode=ro", uri=True, timeout=30)
for name, tbl, sql in c.execute("SELECT name, tbl_name, sql FROM sqlite_master WHERE type='trigger' AND tbl_name IN ('gov_raw','gov_search') LIMIT 8"):
    print("  [%s] on %s" % (name, tbl))
    print("     ", re.sub(r"\s+", " ", (sql or ""))[:260])
print("\n=== 报错原文（最近一次） ===")
r = c.execute("SELECT run_date, substr(error_detail,1,300) FROM run_logs WHERE script_name=? ORDER BY run_date DESC LIMIT 1", (f,)).fetchone()
print("  ", r[0] if r else "-", "|", (r[1] if r else "-"))
