§
    0›jo$  ã                  ó”   — d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ  G d	„ d
¦  «        ZdS )z"SQLite abstraction for coverage.pyé    )ÚannotationsN)ÚIterableÚIterator)ÚAnyÚcast)Ú	auto_reprÚclipped_reprÚexc_one_line)Ú	DataError)Ú	TDebugCtlc                  ó®   — e Zd ZdZd'd(d„ZeZd)d„Zd'd*d„Zd+d„Z	d)d„Z
d,d„Zej        	 d-d.d„¦   «         Zd/d0d„Zd-d1d„Zd-d2d„Zd3d!„Zd4d"„Zd5d$„Zd6d%„Zd&S )7ÚSqliteDbaU  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)

    FÚfilenameÚstrÚdebugr   Úno_diskÚboolÚreturnÚNonec                óL   — || _         || _        || _        d| _        d | _        d S )Nr   )r   r   r   ÚnestÚcon)Úselfr   r   r   s       úP/home/lighthouse/health/venv/lib64/python3.11/site-packages/coverage/sqlitedb.pyÚ__init__zSqliteDb.__init__    s)   € ØˆŒ
Ø ˆŒØˆŒØˆŒ	Ø.2ˆŒˆˆó    c                ó>  — | j         �dS | j                             d¦  «        r"| j                             d| j        ›�¦  «         	 | j                             d¦  «        r"t          j        | j        dd¬¦  «        | _         n t          j        | j        d¬¦  «        | _         n2# t          j        $ r }t          d	| j        ›d
|› �¦  «        |‚d}~ww xY w| j                             d¦  «        r*| j                             d| j        ›d| j         ›�¦  «         | j          
                    ddd„ ¦  «         t          t          d¦  «        r%| j                              t          j        d¦  «         |                      d¦  «         |                      dd¬¦  «         dS )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                ó0   — t          j        | |¦  «        d uS )N)ÚreÚsearch)ÚtxtÚpats     r   ú<lambda>z#SqliteDb._connect.<locals>.<lambda>A   s   € ½r¼yÈÈcÑ?RÔ?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   Ú_connectzSqliteDb._connect)   s¾  € àŒ8ÐØˆFð Œ:×Ò˜UÑ#Ô#ð 	AØŒJ×ÒÐ?¨d¬mÐ?Ð?Ñ@Ô@Ð@ð	YàŒ}×'Ò'¨Ñ0Ô0ð SÝ"œ?¨4¬=ÈEÐW[Ð\Ñ\Ô\�”�å"œ?¨4¬=ÈEÐRÑRÔR�”øøÝŒ}ð 	Yð 	Yð 	YÝÐN°d´mÐNÐNÈÐNÐNÑOÔOÐUXÐXøøøøð	Yøøøð Œ:×Ò˜UÑ#Ô#ð 	PØŒJ×ÒÐN¨T¬]ÐNÐNÀ$Ä(ÐNÐNÑOÔOÐOàŒ× Ò  ¨1Ð.^Ð.^Ñ_Ô_Ð_õ
 •7Ð7Ñ8Ô8ð 	àŒH×ÒÝÔ1Øñô ð ð 	×ÒÐ3Ñ4Ô4Ð4ð
 	×ÒÐ2¸DÐÑAÔAÐAÐAÐAs   ÁAB$ Â$CÂ3CÃCÚforcec                óö   — | j         �o|s| j        sh| j                             d¦  «        r*| j                             d| j         ›d| j        ›�¦  «         | j                              ¦   «          d| _         dS dS dS )z If needed, close the connection.Nr   zClosing z on )r   r   r   r-   r.   r   Úclose)r   r9   s     r   r;   zSqliteDb.closeU   sŽ   € àŒ8ÐØð  ˜DœLð  Ø”:×$Ò$ UÑ+Ô+ð SØ”J×$Ò$Ð%Q°´Ð%QÐ%QÀÄÐ%QÐ%QÑRÔRÐRØ”—’Ñ Ô Ð Ø�”��ð  Ðð ð  r   c                ó¨   — | j         dk    r6|                      ¦   «          | j        €J ‚| j                             ¦   «          | xj         dz  c_         | S )Nr   é   )r   r8   r   Ú	__enter__©r   s    r   r>   zSqliteDb.__enter__^   sP   € ØŒ9˜Š>ˆ>Ø�MŠM‰OŒOˆOØ”8Ð'Ð'Ð'ØŒH×ÒÑ Ô Ð Øˆ	Œ	�Q‰ˆ	Œ	Øˆr   c                ó–  — | xj         dz  c_         | j         dk    r­	 | j        €J ‚| j                             |||¦  «         |                      ¦   «          d S # t          $ rd}| j                             d¦  «        r*| j                             dt          |¦  «        › �¦  «         t          d| j
        ›d|› �¦  «        |‚d }~ww xY wd S )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Ú	tracebackr7   s        r   rA   zSqliteDb.__exit__f   sé   € Øˆ	Œ	�Q‰ˆ	Œ	ØŒ9˜Š>ˆ>ð]Ø”xÐ+Ð+Ð+Ø”×!Ò! (¨I°yÑAÔAÐAØ—
’
‘”���øÝð ]ð ]ð ]Ø”:×$Ò$ UÑ+Ô+ð VØ”J×$Ò$Ð%TÅÈcÑARÔARÐ%TÐ%TÑUÔUÐUÝÐ R¸$¼-Ð RÐ RÈSÐ RÐ RÑSÔSÐY\Ð\øøøøð]øøøð ˆ>s   �9A Á
CÁ"ACÃCr   Ú
parametersúIterable[Any]úsqlite3.Cursorc                ó2  — | j                              d¦  «        r(|rd|›�nd}| j                              d|›|› �¦  «         	 | j        €J ‚	 | j                             ||¦  «        S # t
          $ r | j                             ||¦  «        cY S w xY w# t          j        $ rs}t          |¦  «        }| j                              d¦  «        r*| j                              dt          |¦  «        › �¦  «         t          d| j        ›d|› �¦  «        |‚d}~ww xY w)	z2Same as :meth:`python:sqlite3.Connection.execute`.r   ú with Ú z
Executing NzEXCEPTION from execute: r!   r"   )r   r-   r.   r   ÚexecuterB   r0   r2   r   r
   r   r   )r   r   rF   Útailr7   Úmsgs         r   Ú_executezSqliteDb._executer   sX  € àŒ:×Ò˜UÑ#Ô#ð 	9Ø.8Ð@Ð*˜JÐ*Ð*Ð*¸bˆDØŒJ×ÒÐ7¨#Ð7°Ð7Ð7Ñ8Ô8Ð8ð	YØ”8Ð'Ð'Ð'ð9Ø”x×'Ò'¨¨ZÑ8Ô8Ð8øÝð 9ð 9ð 9ð ”x×'Ò'¨¨ZÑ8Ô8Ð8Ð8Ð8ð	9øøøøõ
 Œ}ð 	Yð 	Yð 	YÝ�c‘(”(ˆCØŒz× Ò  Ñ'Ô'ð QØ”
× Ò Ð!O½LÈÑ<MÔ<MÐ!OÐ!OÑPÔPÐPÝÐN°d´mÐNÐNÈÐNÐNÑOÔOÐUXÐXøøøøð		Yøøøs7   Á	B ÁA) Á)%BÂB ÂBÂB ÂDÂ#A.DÄD© úIterator[sqlite3.Cursor]c              #  óš   K  — |                       ||¦  «        }	 |V — |                     ¦   «          dS # |                     ¦   «          w xY w)z�Context managed :meth:`python:sqlite3.Connection.execute`.

        Use with a ``with`` statement to auto-close the returned cursor.
        N)rO   r;   )r   r   rF   Úcurs       r   rL   zSqliteDb.execute†   sL   è è € ð �mŠm˜C Ñ,Ô,ˆð	ØˆIˆIˆIà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs	   š4 ´A
r,   c                ó€   — 	 |                       ||¦  «                             ¦   «          dS # t          $ r |s‚ Y dS w xY w)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)rO   r;   r   )r   r   rF   r,   s       r   r6   zSqliteDb.execute_void–   sd   € ð
	ð �MŠM˜#˜zÑ*Ô*×0Ò0Ñ2Ô2Ð2Ð2Ð2øÝð 	ð 	ð 	Øð Øðð ð ð	øøøs   ‚(, ¬=¼=Úintc                óð   — |                       ||¦  «        5 }|j        €J ‚|j        }ddd¦  «         n# 1 swxY w Y   | j                             d¦  «        r| j                             d|›�¦  «         |S )z(Like execute, but returns the lastrowid.NÚsqldatazRow id result: )rL   Ú	lastrowidr   r-   r.   )r   r   rF   rS   Úrowids        r   Úexecute_for_rowidzSqliteDb.execute_for_rowid£   s»   € à�\Š\˜#˜zÑ*Ô*ð 	'¨cØ”=Ð,Ð,Ð,ØœˆEð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð Œ:×Ò˜YÑ'Ô'ð 	:ØŒJ×ÒÐ8¨uÐ8Ð8Ñ9Ô9Ð9Øˆs   —4´8»8útuple[Any, ...] | Nonec                ób  — |                       ||¦  «        5 }t          |¦  «        }ddd¦  «         n# 1 swxY w Y   t          |¦  «        dk    rdS t          |¦  «        dk    r(t          t          t
          df         |d         ¦  «        S t          d|›dt          |¦  «        › d�¦  «        ‚)a6  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   rF   rS   Úrowss        r   Úexecute_onezSqliteDb.execute_one¬   sÜ   € ð �\Š\˜#˜zÑ*Ô*ð 	¨cÝ˜‘9”9ˆDð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åˆt‰9Œ9˜Š>ˆ>Ø�4Ý�‰YŒY˜!Š^ˆ^Ý��c 3˜hœ¨¨a¬Ñ1Ô1Ð1å Ð!Q¨Ð!QÐ!QÅÀTÁÄÐ!QÐ!QÐ!QÑRÔRÐRs   —3³7º7Údataú	list[Any]c                ó  — | j                              d¦  «        r�| j                              d¦  «        rdnd}| j                              d|›dt          |¦  «        › d|› �¦  «         | j                              d¦  «        r5t	          |¦  «        D ]%\  }}| j                              |d›d	|›�¦  «         Œ&| j        €J ‚	 | j                             ||¦  «        S # t          $ r | j                             ||¦  «        cY S w xY w)
z6Same as :meth:`python:sqlite3.Connection.executemany`.r   rW   ú:rK   zExecuting many rJ   r]   Ú4dr"   )r   r-   r.   r_   Ú	enumerater   ÚexecutemanyrB   )r   r   rd   ÚfinalÚiÚrows         r   Ú_executemanyzSqliteDb._executemany¾   s.  € àŒ:×Ò˜UÑ#Ô#ð 	9Øœ:×,Ò,¨YÑ7Ô7Ð?�C�C¸RˆEØŒJ×ÒÐS¨sÐSÐS½CÀ¹I¼IÐSÐSÈEÐSÐSÑTÔTÐTØŒz× Ò  Ñ+Ô+ð 9Ý'¨™oœoð 9ð 9‘F�A�sØ”J×$Ò$¨Ð%7Ð%7Ð%7°Ð%7Ð%7Ñ8Ô8Ð8Ð8ØŒxÐ#Ð#Ð#ð	3Ø”8×'Ò'¨¨TÑ2Ô2Ð2øÝð 	3ð 	3ð 	3ð ”8×'Ò'¨¨TÑ2Ô2Ð2Ð2Ð2ð		3øøøs   ÃC Ã%DÄDc                óV   — |                       ||¦  «                             ¦   «          dS )zUSame as :meth:`python:sqlite3.Connection.executemany` when you don't need the cursor.N)rn   r;   )r   r   rd   s      r   Úexecutemany_voidzSqliteDb.executemany_voidÏ   s*   € à×Ò˜#˜tÑ$Ô$×*Ò*Ñ,Ô,Ð,Ð,Ð,r   Úscriptc           	     ó6  — | j                              d¦  «        rI| j                              d                     t	          |¦  «        t          |d¦  «        ¦  «        ¦  «         | j        €J ‚| j                             |¦  «                             ¦   «          dS )z8Same as :meth:`python:sqlite3.Connection.executescript`.r   z"Executing script with {} chars: {}éd   N)	r   r-   r.   Úformatr_   r	   r   Úexecutescriptr;   )r   rq   s     r   ru   zSqliteDb.executescriptÓ   s•   € àŒ:×Ò˜UÑ#Ô#ð 	ØŒJ×ÒØ4×;Ò;Ý˜‘K”KÝ  ¨Ñ-Ô-ñô ñô ð ð ŒxÐ#Ð#Ð#ØŒ×Ò˜vÑ&Ô&×,Ò,Ñ.Ô.Ð.Ð.Ð.r   c                ól   — | j         €J ‚d                     | j                              ¦   «         ¦  «        S )z9Return a multi-line string, the SQL dump of the database.Nú
)r   ÚjoinÚiterdumpr?   s    r   ÚdumpzSqliteDb.dumpß   s0   € àŒxÐ#Ð#Ð#Ø�yŠy˜œ×*Ò*Ñ,Ô,Ñ-Ô-Ð-r   N)F)r   r   r   r   r   r   r   r   )r   r   )r9   r   r   r   )r   r   )r   r   rF   rG   r   rH   )rP   )r   r   rF   rG   r   rQ   )rP   F)r   r   rF   rG   r,   r   r   r   )r   r   rF   rG   r   rU   )r   r   rF   rG   r   r[   )r   r   rd   re   r   rH   )r   r   rd   re   r   r   )rq   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__repr__r8   r;   r>   rA   rO   Ú
contextlibÚcontextmanagerrL   r6   rZ   rc   rn   rp   ru   rz   rP   r   r   r   r      s‚  € € € € € ð
ð 
ð3ð 3ð 3ð 3ð 3ð €Hð*Bð *Bð *Bð *BðX ð  ð  ð  ð  ðð ð ð ð
]ð 
]ð 
]ð 
]ðYð Yð Yð Yð( Ôð %'ðð ð ð ñ Ôððð ð ð ð ðð ð ð ð ðSð Sð Sð Sð Sð$3ð 3ð 3ð 3ð"-ð -ð -ð -ð
/ð 
/ð 
/ð 
/ð.ð .ð .ð .ð .ð .r   r   )r~   Ú
__future__r   r€   r&   r0   Úcollections.abcr   r   Útypingr   r   Úcoverage.debugr   r	   r
   Úcoverage.exceptionsr   Úcoverage.typesr   r   rP   r   r   ú<module>rˆ      së   ðð )Ð (à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ð Ð à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $ðO.ð O.ð O.ð O.ð O.ñ O.ô O.ð O.ð O.ð O.r   