
     h'                        S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
Jr  SSKJrJrJr  SSKJr  SSKJr   " S	 S
5      rg)z"SQLite abstraction for coverage.py    )annotationsN)IterableIterator)Anycast)	auto_reprclipped_reprexc_one_line)	DataError)	TDebugCtlc                      \ rS rSrSrSSS jjr\rSS jrSSS jjr	SS jr
SS jrSS jr\R                   S     SS	 jj5       rSSS
 jjrSSS jjrSSS jjrSS jrS S jrS!S jrS"S jrSrg)#SqliteDb   a9  A simple abstraction over a SQLite database.

Use as a context manager, then you can use it like a
:class:`python:sqlite3.Connection` object::

    with SqliteDb(filename, debug_control) as db:
        with db.execute("select a, b from some_table") as cur:
            for a, b in cur:
                etc(a, b)

c                D    X l         Xl        X0l        SU l        S U l        g )Nr   )debugfilenameno_disknestcon)selfr   r   r   s       o/root/racknerd_01/codex-conversation/amazon-q-terraform/.venv/lib/python3.13/site-packages/coverage/sqlitedb.py__init__SqliteDb.__init__    s    
 	.2    c                   U R                   b  gU R                  R                  S5      (       a)  U R                  R                  SU R                  < 35         U R                  R                  S5      (       a&  [        R                  " U R                  SSS9U l         O%[        R                  " U R                  SS9U l          U R                  R                  S5      (       a7  U R                  R                  SU R                  < SU R                   < 35        U R                   R                  SSS 5        [        [        S5      (       a*  U R                   R                  [        R                  S5        U R                  S5        U R                  SSS9  g! [        R                   a"  n[        S	U R                  < S
U 35      UeSnAff = f)z2Connect to the db and do universal initialization.NsqlzConnecting to zfile:FT)check_same_threaduri)r   Couldn't use data file : zConnected to z as REGEXP   c                2    [         R                  " X5      S L$ )N)research)txtpats     r   <lambda>#SqliteDb._connect.<locals>.<lambda>A   s    ryy?RZ^?^r   SQLITE_DBCONFIG_DEFENSIVEzpragma journal_mode=offzpragma synchronous=off)fail_ok)r   r   shouldwriter   
startswithsqlite3connectErrorr   create_functionhasattr	setconfigr*   execute_void)r   excs     r   _connectSqliteDb._connect)   sr   88 ::U##JJ~dmm->?@	Y}}''00"??4==EW[\"??4==ER ::U##JJ}T]],=T$((NO  1.^_
 7788HH11 	34
 	2DA1 }} 	Y5dmm5FbNOUXX	Ys   AF $F G.GGc                B   U R                   b  U(       d  U R                  (       dy  U R                  R                  S5      (       a7  U R                  R	                  SU R                   < SU R
                  < 35        U R                   R                  5         SU l         ggg)z If needed, close the connection.Nr   zClosing z on )r   r   r   r,   r-   r   close)r   forces     r   r:   SqliteDb.closeU   sq    88DLL::$$U++JJ$$x|4?P%QR 	 )  r   c                    U R                   S:X  a9  U R                  5         U R                  c   eU R                  R                  5         U =R                   S-  sl         U $ )Nr      )r   r7   r   	__enter__r   s    r   r?   SqliteDb.__enter__^   sH    99>MMO88'''HH 		Q	r   c                   U =R                   S-  sl         U R                   S:X  a=   U R                  c   eU R                  R                  XU5        U R                  5         g g ! [         ai  nU R
                  R                  S5      (       a'  U R
                  R                  S[        U5       35        [        SU R                  < SU 35      UeS nAff = f)Nr>   r   r   zEXCEPTION from __exit__: zCouldn't end data file r    )r   r   __exit__r:   	Exceptionr   r,   r-   r
   r   r   )r   exc_type	exc_value	tracebackr6   s        r   rC   SqliteDb.__exit__f   s    		Q	99>]xx+++!!(yA

	 
  ]::$$U++JJ$$'@cAR@S%TU"9$--9J"SE RSY\\]s   ;A$ $
C.A$CCc                P   U R                   R                  S5      (       a0  U(       a  SU< 3OSnU R                   R                  SU< U 35         U R                  c   e U R                  R	                  X5      $ ! [
         a    U R                  R	                  X5      s $ f = f! [        R                   a  n[        U5      nU R                  (       dd   [        U R                  S5       nSnUR                  [        U5      5      U:X  a  SnSSS5        O!! , (       d  f       O= f! [
         a     Of = fU R                   R                  S5      (       a'  U R                   R                  S	[        U5       35        [        S
U R                  < SU 35      UeSnAff = f)z2Same as :meth:`python:sqlite3.Connection.execute`.r    with  z
Executing Nrbs&   !coverage.py: This is a private formatzILooks like a coverage 4.x data file. Are you mixing versions of coverage?zEXCEPTION from execute: r   r    )r   r,   r-   r   executerD   r/   r1   strr   openr   readlenr
   r   )r   r   
parameterstailr6   msgbad_filecov4_sigs           r   _executeSqliteDb._executer   sr   ::U##.8VJ>*bDJJz#78	Y88'''9xx''88 9 xx''88	9
 }} 	Yc(C<< dmmT2h#L#==X78C!I   322 ! zz  ''

  #;L<M;N!OP5dmm5FbNOUXX#	Ys   B( "A= =%B%"B( $B%%B( (F%<F D,/#DD,F 
D)	%D,(F )D,,
D96F 8D99A'F  F%c              #     #    U R                  X5      n Uv   UR                  5         g! UR                  5         f = f7f)z}Context managed :meth:`python:sqlite3.Connection.execute`.

Use with a ``with`` statement to auto-close the returned cursor.
N)rW   r:   )r   r   rR   curs       r   rM   SqliteDb.execute   s1      mmC,	IIIKCIIKs   ?* ?<?c                t     U R                  X5      R                  5         g! [         a    U(       d  e  gf = f)zSame as :meth:`python:sqlite3.Connection.execute` when you don't need the cursor.

If `fail_ok` is True, then SQLite errors are ignored.
N)rW   r:   r   )r   r   rR   r+   s       r   r5   SqliteDb.execute_void   s8    
	 MM#*002 	 	s   " 77c                   U R                  X5       nUR                  c   eUR                  nSSS5        U R                  R                  S5      (       a  U R                  R	                  SW< 35        W$ ! , (       d  f       NO= f)z(Like execute, but returns the lastrowid.NsqldatazRow id result: )rM   	lastrowidr   r,   r-   )r   r   rR   rZ   rowids        r   execute_for_rowidSqliteDb.execute_for_rowid   sl    \\#*c==,,,E + ::Y''JJui89 +*s   A77
Bc                   U R                  X5       n[        U5      nSSS5        [        W5      S:X  a  g[        U5      S:X  a  [        [        [
        S4   US   5      $ [        SU< S[        U5       S35      e! , (       d  f       Ne= f)a  Execute a statement and return the one row that results.

This is like execute(sql, parameters).fetchone(), except it is
correct in reading the entire result set.  This will raise an
exception if more than one row results.

Returns a row, or None if there were no rows.
Nr   r>   .zSQL z shouldn't return  rows)rM   listrQ   r   tupler   AssertionError)r   r   rR   rZ   rowss        r   execute_oneSqliteDb.execute_one   sz     \\#*c9D +t9>Y!^c3ha11 4w.@T5!QRR +*s   A==
Bc                >   U R                   R                  S5      (       a  U R                   R                  S5      (       a  SOSnU R                   R                  SU< S[        U5       SU 35        U R                   R                  S5      (       a6  [	        U5       H'  u  pEU R                   R                  US S	U< 35        M)     U R
                  c   e U R
                  R                  X5      $ ! [         a    U R
                  R                  X5      s $ f = f)
z6Same as :meth:`python:sqlite3.Connection.executemany`.r   r_   :rK   zExecuting many rJ   re   4dr    )r   r,   r-   rQ   	enumerater   executemanyrD   )r   r   datafinalirows         r   _executemanySqliteDb._executemany   s    ::U##::,,Y77CREJJsgVCI;eE7STzz  ++'oFAJJ$$"vRw%78 .xx###	388''22 	3 88''22		3s   C4 4%DDc                B    U R                  X5      R                  5         g)zUSame as :meth:`python:sqlite3.Connection.executemany` when you don't need the cursor.N)ru   r:   )r   r   rq   s      r   executemany_voidSqliteDb.executemany_void   s    #$**,r   c           	     0   U R                   R                  S5      (       a>  U R                   R                  SR                  [	        U5      [        US5      5      5        U R                  c   eU R                  R                  U5      R                  5         g)z8Same as :meth:`python:sqlite3.Connection.executescript`.r   z"Executing script with {} chars: {}d   N)	r   r,   r-   formatrQ   r	   r   executescriptr:   )r   scripts     r   r}   SqliteDb.executescript   su    ::U##JJ4;;K - xx###v&,,.r   c                r    U R                   c   eSR                  U R                   R                  5       5      $ )z9Return a multi-line string, the SQL dump of the database.
)r   joiniterdumpr@   s    r   dumpSqliteDb.dump   s.    xx###yy**,--r   )r   r   r   r   r   N)F)r   rN   r   r   r   boolreturnNone)r   r   )r;   r   r   r   )r   r   )r   rN   rR   Iterable[Any]r   sqlite3.Cursor) )r   rN   rR   r   r   zIterator[sqlite3.Cursor])r   F)r   rN   rR   r   r+   r   r   r   )r   rN   rR   r   r   int)r   rN   rR   r   r   ztuple[Any, ...] | None)r   rN   rq   	list[Any]r   r   )r   rN   rq   r   r   r   )r~   rN   r   r   )r   rN   )__name__
__module____qualname____firstlineno____doc__r   r   __repr__r7   r:   r?   rC   rW   
contextlibcontextmanagerrM   r5   rb   rj   ru   rx   r}   r   __static_attributes__r   r   r   r   r      s    
3 H*BX 
]YB  %' " 
"	 S$3"-
/.r   r   )r   
__future__r   r   r$   r/   collections.abcr   r   typingr   r   coverage.debugr   r	   r
   coverage.exceptionsr   coverage.typesr   r   r   r   r   <module>r      s4    ) "  	  .  @ @ ) $\. \.r   