
    V.jQ%                        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y)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dd	Zddd
ZdddZddZddZddZd dZy)!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)

    c                J    || _         || _        || _        d| _        d | _        y )Nr   )debugfilenameno_disknestcon)selfr   r   r   s       SC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\coverage/sqlitedb.py__init__zSqliteDb.__init__    s%    
 	.2    c                ~   | j                   y| j                  j                  d      r(| j                  j                  d| j                         	 | j                  j                  d      r(t        j                  | j                  dd      | _         n&t        j                  | j                  d      | _         | j                  j                  d      r5| j                  j                  d| j                  d| j                          | j                   j                  ddd        t        t        d      r*| j                   j                  t        j                  d       | j                  d       | j                  dd       y# t        j                  $ r!}t        d	| j                  d
|       |d}~ww xY w)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    t        j                  | |      d uS )N)research)txtpats     r   <lambda>z#SqliteDb._connect.<locals>.<lambda>A   s    ryyc?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   _connectzSqliteDb._connect)   sf   88 ::U#JJ~dmm->?@	Y}}''0"??4==EW[\"??4==ER ::U#JJ}T]],=T$((NO  1.^_
 778HH11 	34
 	2DA1 }} 	Y5dmm5FbNOUXX	Ys   A)F F<F77F<c                   | j                   |s| j                  sr| j                  j                  d      r5| j                  j	                  d| j                   d| j
                         | j                   j                          d| _         yyy)z If needed, close the connection.Nr   zClosing z on )r   r   r   r)   r*   r   close)r   forces     r   r6   zSqliteDb.closeU   sn    88DLL::$$U+JJ$$x|4?P%QR 	 )  r   c                    | j                   dk(  r8| j                          | j                  J | j                  j                          | xj                   dz  c_         | S )Nr      )r   r4   r   	__enter__r   s    r   r:   zSqliteDb.__enter__^   sH    99>MMO88'''HH 		Q	r   c                   | xj                   dz  c_         | j                   dk(  r=	 | j                  J | j                  j                  |||       | j                          y y # t        $ rc}| j
                  j                  d      r'| j
                  j                  dt        |              t        d| j                  d|       |d }~ww xY w)Nr9   r   r   zEXCEPTION from __exit__: zCouldn't end data file r   )r   r   __exit__r6   	Exceptionr   r)   r*   r
   r   r   )r   exc_type	exc_value	tracebackr3   s        r   r=   zSqliteDb.__exit__f   s    		Q	99>]xx+++!!(IyA

	 
  ]::$$U+JJ$$'@cAR@S%TU"9$--9J"SE RSY\\]s   ;A# #	C,AC

Cc                @   | j                   j                  d      r)|rd|nd}| j                   j                  d||        	 | j                  J 	 | j                  j	                  ||      S # t
        $ r | j                  j	                  ||      cY S w xY w# t        j                  $ rn}t        |      }| j                   j                  d      r'| j                   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   executer>   r,   r.   strr
   r   r   )r   r   
parameterstailr3   msgs         r   _executezSqliteDb._executer   s   ::U#.8VJ>*bDJJz#78	Y88'''9xx''Z88 9 xx''Z88	9
 }} 	Yc(Czz  '

  #;L<M;N!OP5dmm5FbNOUXX		Ys7   B A1 1%BB BB D/A)DDc              #     K   | j                  ||      }	 | |j                          y# |j                          w xY ww)zContext managed :meth:`python:sqlite3.Connection.execute`.

        Use with a ``with`` statement to auto-close the returned cursor.
        N)rJ   r6   )r   r   rG   curs       r   rE   zSqliteDb.execute   s4      mmC,	IIIKCIIKs   A + A =A c                j    	 | j                  ||      j                          y# t        $ r |s Y yw xY w)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)rJ   r6   r   )r   r   rG   r(   s       r   r2   zSqliteDb.execute_void   s:    
	 MM#z*002 	 	s    # 22c                    | j                  ||      5 }|j                  J |j                  }ddd       | j                  j                  d      r| j                  j	                  d       S # 1 sw Y   DxY w)z(Like execute, but returns the lastrowid.NsqldatazRow id result: )rE   	lastrowidr   r)   r*   )r   r   rG   rL   rowids        r   execute_for_rowidzSqliteDb.execute_for_rowid   sk    \\#z*c==,,,E + ::Y'JJui89 +*s   A11A:c                   | j                  ||      5 }t        |      }ddd       t              dk(  ryt        |      dk(  rt        t        t
        df   |d         S t        d|dt        |       d      # 1 sw Y   ]xY w)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   r9   .zSQL z shouldn't return  rows)rE   listlenr   tupler   AssertionError)r   r   rG   rL   rowss        r   execute_onezSqliteDb.execute_one   s|     \\#z*c9D +t9>Y!^c3ha11 4w.@T5!QRR +*s   A;;Bc                   | j                   j                  d      r| j                   j                  d      rdnd}| j                   j                  d|dt        |       d|        | j                   j                  d      r4t	        |      D ]&  \  }}| j                   j                  |dd	|       ( | j
                  J 	 | j
                  j                  ||      S # t        $ r | j
                  j                  ||      cY S w xY w)
z6Same as :meth:`python:sqlite3.Connection.executemany`.r   rO   :rD   zExecuting many rC   rT   4dr   )r   r)   r*   rV   	enumerater   executemanyr>   )r   r   datafinalirows         r   _executemanyzSqliteDb._executemany   s    ::U#::,,Y7CREJJsgVCI;eE7STzz  +'oFAsJJ$$"vRw%78 .xx###	388''T22 	3 88''T22		3s   C" "%D
	D
c                D    | j                  ||      j                          y)zUSame as :meth:`python:sqlite3.Connection.executemany` when you don't need the cursor.N)rd   r6   )r   r   r`   s      r   executemany_voidzSqliteDb.executemany_void   s    #t$**,r   c           	     $   | j                   j                  d      r>| j                   j                  dj                  t	        |      t        |d                   | j                  J | j                  j                  |      j                          y)z8Same as :meth:`python:sqlite3.Connection.executescript`.r   z"Executing script with {} chars: {}d   N)	r   r)   r*   formatrV   r	   r   executescriptr6   )r   scripts     r   rj   zSqliteDb.executescript   sr    ::U#JJ4;;K - xx###v&,,.r   c                p    | j                   J dj                  | j                   j                               S )z9Return a multi-line string, the SQL dump of the database.
)r   joiniterdumpr;   s    r   dumpzSqliteDb.dump   s.    xx###yy**,--r   N)F)r   rF   r   r   r   boolreturnNone)rr   rs   )r7   rq   rr   rs   )rr   r   )r   rF   rG   Iterable[Any]rr   sqlite3.Cursor) )r   rF   rG   rt   rr   zIterator[sqlite3.Cursor])rv   F)r   rF   rG   rt   r(   rq   rr   rs   )r   rF   rG   rt   rr   int)r   rF   rG   rt   rr   ztuple[Any, ...] | None)r   rF   r`   	list[Any]rr   ru   )r   rF   r`   rx   rr   rs   )rk   rF   rr   rs   )rr   rF   )__name__
__module____qualname____doc__r   r   __repr__r4   r6   r:   r=   rJ   
contextlibcontextmanagerrE   r2   rR   rZ   rd   rf   rj   rp   rv   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   rv   r   r   <module>r      s4    ) "  	  .  @ @ ) $O. O.r   