ó
    àÅŸgä%  ã                  óŒ   • 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)ÚcastÚAny)ÚIterableÚIterator)Ú	auto_reprÚclipped_reprÚexc_one_line)Ú	DataError)Ú	TDebugCtlc                  óâ   • \ rS rSrSrSS jr\rSS jrSS 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                ó8   • X l         Xl        SU l        S U l        g )Nr   )ÚdebugÚfilenameÚnestÚcon)Úselfr   r   s      ÚR/var/www/blue/EV-Temp_rev04/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         [
        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 F)Úcheck_same_threadú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><   s   € ¼r¿yºyÈÓ?RÐZ^Ñ?^r   ÚSQLITE_DBCONFIG_DEFENSIVEzpragma journal_mode=offzpragma synchronous=offT)Úfail_ok)r   r   ÚshouldÚwriter   Úsqlite3ÚconnectÚErrorr   Úcreate_functionÚhasattrÚ	setconfigr(   Úexecute_void)r   Úexcs     r   Ú_connectÚSqliteDb._connect(   sC  € à�8‰8ÑØð �:‰:×Ñ˜U×#Ñ#Ø�J‰J×Ñ˜~¨d¯m©mÑ->Ð?Ô@ð	YÜ—’ t§}¡}ÈÑNˆDŒHð �:‰:×Ñ˜U×#Ñ#Ø�J‰J×Ñ˜}¨T¯]©]Ñ,=¸TÀ$Ç(Á(ÁÐNÔOà�‰× Ñ  ¨1Ñ.^Ô_ô
 ”7Ð7×8Ñ8à�H‰H×ÑÜ×1Ñ1°5ôð
 	×ÑÐ3Ô4ð
 	×ÑÐ2¸DÐÒAøô/ �}‰}ó 	YÜÐ5°d·m±mÑ5FÀbÈÈÐNÓOÐUXÐXûð	Yús   Á$E ÅF	Å'FÆF	c                ó2  • U R                   bŠ  U R                  S:w  ay  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.Nú:memory:r   zClosing z on )r   r   r   r*   r+   Úclose©r   s    r   r8   ÚSqliteDb.closeO   sr   € à�8‰8Ñ D§M¡M°ZÓ$?Ø�z‰z× Ñ  ×'Ñ'Ø—
‘
× Ñ  8¨D¯H©H©<°t¸D¿M¹MÑ;LÐ!MÔNØ�H‰H�N‰NÔØˆD�Hð	 %@Ð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   r4   r   Ú	__enter__r9   s    r   r=   ÚSqliteDb.__enter__W   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__r8   Ú	Exceptionr   r*   r+   r
   r   r   )r   Úexc_typeÚ	exc_valueÚ	tracebackr3   s        r   r@   ÚSqliteDb.__exit___   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                óN  • 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                  S:w  ad   [        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 Nr7   Ú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   ÚexecuterA   r,   r.   Ústrr   ÚopenÚreadÚlenr
   r   )r   r   Ú
parametersÚtailr3   ÚmsgÚbad_fileÚcov4_sigs           r   Ú_executeÚSqliteDb._executek   sw  € à�:‰:×Ñ˜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Ø�}‰} 
Ó*ðô ˜dŸm™m¨TÔ2°hØ#L˜Ø#Ÿ=™=¬¨X«Ó7¸8ÓCð!Gð  ÷ 3×2Ö2ûô !ó Ùðúà�z‰z× Ñ  ×'Ñ'Ø—
‘
× Ñ Ð#;¼LÈÓ<MÐ;NÐ!OÔPÜÐ5°d·m±mÑ5FÀbÈÈÐNÓOÐUXÐXûð#	Yús   ÁB( Á"A= Á=%B%Â"B( Â$B%Â%B( Â(F$Â<FÃD+Ã.#DÄD+ÄFÄ
D(	Ä$D+Ä'FÄ(D+Ä+
D8Ä5FÄ7D8Ä8A'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)rT   r8   )r   r   rO   Úcurs       r   rJ   Ú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)rT   r8   r   )r   r   rO   r)   s       r   r2   Ú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: )rJ   Ú	lastrowidr   r*   r+   )r   r   rO   rW   Ú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)rJ   ÚlistrN   r   Útupler   ÚAssertionError)r   r   rO   rW   Ú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   r\   Ú:rH   zExecuting many rG   rb   Ú4dr   )r   r*   r+   rN   Ú	enumerater   ÚexecutemanyrA   )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                óh   • [        U5      nU(       a   U R                  X5      R                  5         gg)zUSame as :meth:`python:sqlite3.Connection.executemany` when you don't need the cursor.N)rc   rr   r8   )r   r   rn   s      r   Úexecutemany_voidÚSqliteDb.executemany_voidÕ   s*   € ä�D‹zˆÞØ×Ñ˜cÓ(×.Ñ.Õ0ð 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+   ÚformatrN   r	   r   Úexecutescriptr8   )r   Úscripts     r   rz   ÚSqliteDb.executescriptÛ   st   € à�:‰:×Ñ˜U×#Ñ#Ø�J‰J×ÑÐA×HÑHÜ�F“œ\¨&°#Ó6óô ð �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Úiterdumpr9   s    r   ÚdumpÚSqliteDb.dumpä   s.   € à�x‰xÑ#Ð#Ð#Ø�y‰y˜Ÿ™×*Ñ*Ó,Ó-Ð-r   )r   r   r   r   N)r   rK   r   r   ÚreturnÚNone)rƒ   r„   )rƒ   r   )r   rK   rO   úIterable[Any]rƒ   úsqlite3.Cursor)© )r   rK   rO   r…   rƒ   zIterator[sqlite3.Cursor])r‡   F)r   rK   rO   r…   r)   Úboolrƒ   r„   )r   rK   rO   r…   rƒ   Úint)r   rK   rO   r…   rƒ   ztuple[Any, ...] | None)r   rK   rn   z	list[Any]rƒ   r†   )r   rK   rn   r…   rƒ   r„   )r{   rK   rƒ   r„   )rƒ   rK   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__repr__r4   r8   r=   r@   rT   Ú
contextlibÚcontextmanagerrJ   r2   r_   rg   rr   ru   rz   r�   Ú__static_attributes__r‡   r   r   r   r      s�   † ñ
ô3ð €Hô%BôNôô
]ôYðB ×Ñð %'ðàðð "ðð 
"ô	ó ðöööSô$3ô"1ô/÷.r   r   )rŽ   Ú
__future__r   r�   r"   r,   Útypingr   r   Úcollections.abcr   r   Úcoverage.debugr   r	   r
   Úcoverage.exceptionsr   Úcoverage.typesr   r   r‡   r   r   Ú<module>r™      s4   ðñ )å "ã Û 	Û ç ß .ç @Ñ @Ý )Ý $÷S.ò S.r   