ó
    Ð]jo$  ã                  óŒ   • 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       ÚN/home/mande/repo/quber/.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   € ¼r¿yºyÈÓ?RÐZ^Ñ?^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  € à�8‰8ÑØð �:‰:×Ñ˜U×#Ñ#Ø�J‰J×Ñ˜~¨d¯m©mÑ->Ð?Ô@ð	Yà�}‰}×'Ñ'¨×0Ñ0Ü"Ÿ?š?¨4¯=©=ÈEÐW[Ñ\�•ä"Ÿ?š?¨4¯=©=ÈEÑR�•ð �:‰:×Ñ˜U×#Ñ#Ø�J‰J×Ñ˜}¨T¯]©]Ñ,=¸TÀ$Ç(Á(ÁÐNÔOà�‰× Ñ  ¨1Ñ.^Ô_ô
 ”7Ð7×8Ñ8à�H‰H×ÑÜ×1Ñ1Øôð 	×ÑÐ3Ô4ð
 	×ÑÐ2¸DÐÒAøô1 �}‰}ó 	YÜÐ5°d·m±mÑ5FÀbÈÈÐNÓOÐUXÐ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   € à�8‰8ÑÞ˜DŸLŸLØ—:‘:×$Ñ$ U×+Ñ+Ø—J‘J×$Ñ$ 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   € Ø�9‰9˜‹>Ø�M‰MŒOØ—8‘8Ñ'Ð'Ð'Ø�H‰H×ÑÔ Ø�	Š	�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‰�	Ø�9‰9˜‹>ð]Ø—x‘xÑ+Ð+Ð+Ø—‘×!Ñ! (°yÔAØ—
‘
•ð	 øô
 ó ]Ø—:‘:×$Ñ$ U×+Ñ+Ø—J‘J×$Ñ$Ð'@ÄÈcÓARÐ@SÐ%TÔUÜÐ"9¸$¿-¹-Ñ9JÈ"ÈSÈEÐ RÓSÐY\Ð\ûð]ús   §;A$ Á$
CÁ.A$CÃCc                óf  • 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                   at  n[        U5      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)	z2Same as :meth:`python:sqlite3.Connection.execute`.r   ú with Ú z
Executing NzEXCEPTION from execute: r   r    )r   r,   r-   r   ÚexecuterD   r/   r1   Ústrr
   r   r   )r   r   Ú
parametersÚtailr6   Úmsgs         r   Ú_executeÚSqliteDb._executer   s  € à�:‰:×Ñ˜U×#Ñ#Þ.8�V˜J™>Ñ*¸bˆDØ�J‰J×Ñ˜z¨#©°°Ð7Ô8ð	YØ—8‘8Ñ'Ð'Ð'ð9Ø—x‘x×'Ñ'¨Ó8Ð8øÜó 9ð —x‘x×'Ñ'¨Ó8Ò8ð	9ûô
 �}‰}ó 	YÜ�c“(ˆCØ�z‰z× Ñ  ×'Ñ'Ø—
‘
× Ñ Ð#;¼LÈÓ<MÐ;NÐ!OÔPÜÐ5°d·m±mÑ5FÀbÈÈÐNÓOÐUXÐXûð		Yús7   ÁB( Á"A= Á=%B%Â"B( Â$B%Â%B( Â(D0Â<A/D+Ä+D0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)rQ   r:   )r   r   rN   Úcurs       r   rL   ÚSqliteDb.execute†   s1   é € ð �m‰m˜CÓ,ˆð	ØŠIà�I‰I�KøˆC�I‰I�Küs   ‚?•* ™?ª<¼?c                ót   •  U R                  X5      R                  5         g! [         a    U(       d  e  gf = f)z‰Same as :meth:`python:sqlite3.Connection.execute` when you don't need the cursor.

If `fail_ok` is True, then SQLite errors are ignored.
N)rQ   r:   r   )r   r   rN   r+   s       r   r5   ÚSqliteDb.execute_void–   s8   € ð
	ð �M‰M˜#Ó*×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: )rL   Ú	lastrowidr   r,   r-   )r   r   rN   rT   Úrowids        r   Úexecute_for_rowidÚSqliteDb.execute_for_rowid£   sl   € à�\‰\˜#Ô*¨cØ—=‘=Ñ,Ð,Ð,ØŸ™ˆE÷ +ð �:‰:×Ñ˜Y×'Ñ'Ø�J‰J×Ñ˜¨u©iÐ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)rL   ÚlistÚlenr   Útupler   ÚAssertionError)r   r   rN   rT   Úrowss        r   Úexecute_oneÚSqliteDb.execute_one¬   sz   € ð �\‰\˜#Ô*¨cÜ˜“9ˆD÷ +äˆt‹9˜‹>ØÜ�‹Y˜!‹^Üœœc 3˜h™¨¨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   rY   Ú:rK   zExecuting many rJ   r_   Ú4dr    )r   r,   r-   ra   Ú	enumerater   ÚexecutemanyrD   )r   r   ÚdataÚfinalÚiÚrows         r   Ú_executemanyÚSqliteDb._executemany¾   sï   € à�:‰:×Ñ˜U×#Ñ#ØŸ:™:×,Ñ,¨Y×7Ñ7‘C¸RˆEØ�J‰J×Ñ˜¨s©g°V¼CÀ»I¸;ÀeÈEÈ7ÐSÔTØ�z‰z× Ñ  ×+Ñ+Ü'¨žo‘F�AØ—J‘J×$Ñ$¨¨" v¨R°©wÐ%7Ö8ñ .à�x‰xÑ#Ð#Ð#ð	3Ø—8‘8×'Ñ'¨Ó2Ð2øÜó 	3ð —8‘8×'Ñ'¨Ó2Ò2ð		3ús   Ã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)rp   r:   )r   r   rl   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-   Úformatra   r	   r   Úexecutescriptr:   )r   Úscripts     r   rx   ÚSqliteDb.executescriptÓ   su   € à�:‰:×Ñ˜U×#Ñ#Ø�J‰J×ÑØ4×;Ñ;Ü˜“KÜ  ¨Ó-óôð �x‰xÑ#Ð#Ð#Ø�‰×Ñ˜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.   € à�x‰xÑ#Ð#Ð#Ø�y‰y˜Ÿ™×*Ñ*Ó,Ó-Ð-r   )r   r   r   r   r   N)F)r   rM   r   r   r   ÚboolÚreturnÚNone)r‚   rƒ   )r;   r�   r‚   rƒ   )r‚   r   )r   rM   rN   úIterable[Any]r‚   úsqlite3.Cursor)© )r   rM   rN   r„   r‚   zIterator[sqlite3.Cursor])r†   F)r   rM   rN   r„   r+   r�   r‚   rƒ   )r   rM   rN   r„   r‚   Úint)r   rM   rN   r„   r‚   ztuple[Any, ...] | None)r   rM   rl   ú	list[Any]r‚   r…   )r   rM   rl   rˆ   r‚   rƒ   )ry   rM   r‚   rƒ   )r‚   rM   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__repr__r7   r:   r?   rC   rQ   Ú
contextlibÚcontextmanagerrL   r5   r\   re   rp   rs   rx   r   Ú__static_attributes__r†   r   r   r   r      s�   † ñ
ö3ð €Hô*BöX ôô
]ôYð( ×Ñð %'ðàðð "ðð 
"ô	ó ðööö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   ðñ )å "ã Û 	Û ß .ß ç @Ñ @Ý )Ý $÷O.ò O.r   