
    j                       S r SSKJr  SSKrSSKrSSKrSSKJr  \" \5      R                  5       R                  r\" \R                  R                  S5      =(       d    \S-  5      rSrS
S jr\S	:X  a  \R$                  " \" 5       5        gg)u  
ERGON F8 migration - Tabla `documentos` + indices.

Schema del prompt Sesion F §4.2:
    documentos (id, obra_id FK, categoria enum(8), titulo, tags CSV,
                blob_path, mime_type, size_bytes, sha256,
                fecha_doc, subido_por, notas, created_at)
    idx_docs_obra_cat (obra_id, categoria)
    idx_docs_sha      (sha256)

Idempotente: CREATE TABLE IF NOT EXISTS + chequeo por pragma. Se puede re-correr
multiples veces sin efectos secundarios.

Uso:
    python db/migrate_f8.py
    )annotationsN)PathDATABASE_PATHzergon.dbaO  
CREATE TABLE IF NOT EXISTS documentos (
  id              INTEGER PRIMARY KEY AUTOINCREMENT,
  obra_id         INTEGER NOT NULL REFERENCES obras(id) ON DELETE CASCADE,
  categoria       TEXT NOT NULL CHECK (categoria IN
                    ('plano','contrato','certificado','acta',
                     'orden_pago','informe','foto','garantia')),
  titulo          TEXT NOT NULL,
  tags            TEXT,
  blob_path       TEXT NOT NULL,
  mime_type       TEXT NOT NULL,
  size_bytes      INTEGER NOT NULL CHECK (size_bytes >= 0),
  sha256          TEXT NOT NULL,
  fecha_doc       TEXT,
  subido_por      TEXT,
  notas           TEXT,
  created_at      TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_docs_obra_cat ON documentos (obra_id, categoria);
CREATE INDEX IF NOT EXISTS idx_docs_sha      ON documentos (sha256);
c                    [         R                  5       (       d8  [        S[          3[        R                  S9  [        S[        R                  S9  g[
        R                  " [        [         5      5      n  U R                  [        5        U R                  5         U R                  S5      nUR                  5       (       d*  [        S[        R                  S9   U R                  5         gU R                  S5      R                  5       S   nU R                  S	5      R                  5       n[        S
 U 5       5      n[        SU SSR!                  U5       35         U R                  5         g! [
        R"                   a5  n[        SU 3[        R                  S9   S nAU R                  5         gS nAff = f! U R                  5         f = f)Nz[ERROR] DB no existe: )filezCorra db/init_db.py primero.   zGSELECT name FROM sqlite_master WHERE type='table' AND name='documentos'z#[ERROR] tabla documentos no se creozSELECT COUNT(*) FROM documentosr   zKSELECT name FROM sqlite_master WHERE type='index' AND tbl_name='documentos'c              3  `   #    U  H$  oS    R                  S5      (       a  M  US    v   M&     g7f)r   sqlite_N)
startswith).0rs     /app/db/migrate_f8.py	<genexpr>main.<locals>.<genexpr>F   s#     TA19S41Q4s   ..z$  [migrate_f8] OK tabla documentos (z filas). Indices: z, z[ERROR] migration fallo: )DB_PATHexistsprintsysstderrsqlite3connectstrexecutescriptMIGRATION_SQLcommitexecutefetchoneclosefetchallsortedjoinError)conncurcntidx_rows	idx_nameses         r   mainr)   2   sf   >>&wi0szzB,3::>??3w<(D=)llU
 ||~~7cjjI 	

 ll<=FFHK<<Y

(* 	 TTT	4SE :))I./1 	2
 	

	 == )!-CJJ?

	 	

s2   6A#E0 +A3E0 0F9F4F< 4F99F< <G__main__)returnint)__doc__
__future__r   osr   r   pathlibr   __file__resolveparentHEREenvirongetr   r   r)   __name__exit     r   <module>r;      s}     # 	  
 H~&&
rzz~~o.E4*3D
F.> zHHTV r:   