
    h8'h                        d Z ddlZddl ddlmZ ddlmZ ddlmZ ddlmZ	 ddlm
Z dd	lmZ dd
lmZ ddlmZ ddlmZ  G d de      Zd Z G d de      Z G d de      Z G d de      Z G d de	      Z G d de      Z
y)an  
Peewee integration with APSW, "another python sqlite wrapper".

Project page: https://rogerbinns.github.io/apsw/

APSW is a really neat library that provides a thin wrapper on top of SQLite's
C interface.

Here are just a few reasons to use APSW, taken from the documentation:

* APSW gives all functionality of SQLite, including virtual tables, virtual
  file system, blob i/o, backups and file control.
* Connections can be shared across threads without any additional locking.
* Transactions are managed explicitly by your code.
* APSW can handle nested transactions.
* Unicode is handled correctly.
* APSW is faster.
    N)*)__exception_wrapper__)BooleanField)	DateField)DateTimeField)DecimalField)Insert)	TimeField)logger)SqliteExtDatabasec                        e Zd Z ed  ej
                         j                  d      D              Z fdZd Z	d Z
d Z fdZd Zd	 Zd
 Zd Zd Zd ZddZd ZddZd Zd ZddZ xZS )APSWDatabasec              #   2   K   | ]  }t        |        y wN)int).0is     N/var/www/html/trade_iq/venv/lib/python3.12/site-packages/playhouse/apsw_ext.py	<genexpr>zAPSWDatabase.<genexpr>"   s     Na3q6Ns   .c                 <    i | _         t        t        |   |fi | y r   )_modulessuperr   __init__)selfdatabasekwargs	__class__s      r   r   zAPSWDatabase.__init__$   s    lD*8>v>    c                     || j                   |<   | j                         s!| j                         j                  ||       y y r   )r   	is_closed
connectioncreatemodule)r   mod_namemod_insts      r   register_modulezAPSWDatabase.register_module(   s6    "*h~~OO**8X>  r   c                     | j                   |= y r   )r   )r   r$   s     r   unregister_modulezAPSWDatabase.unregister_module-   s    MM(#r   c                     t        j                  | j                  fi | j                  }| j                  |j                  | j                  dz         	 | j                  |       |S #  |j                           xY w)Ni  )apsw
Connectionr   connect_params_timeoutsetbusytimeout_add_conn_hooksclose)r   conns     r   _connectzAPSWDatabase._connect0   sm    t}}D0C0CD==$ 45	  & 	JJLs   A) )A<c                 N    t         t        |   |       | j                  |       y r   )r   r   r/   _load_modules)r   r1   r   s     r   r/   zAPSWDatabase._add_conn_hooks;   s     lD1$74 r   c                 n    | j                   j                         D ]  \  }}|j                  ||        |S r   )r   itemsr#   )r   r1   r$   r%   s       r   r4   zAPSWDatabase._load_modules?   s8    "&--"5"5"7 	2Hhh1	2r   c                 ~    | j                   j                         D ]  \  }\  }fd}|j                  ||       ! y )Nc                  @              j                    j                  fS r   )stepfinalize)klasss   r   make_aggregatez5APSWDatabase._load_aggregates.<locals>.make_aggregateF   s    U^^<<r   )_aggregatesr6   createaggregatefunction)r   r1   name
num_paramsr<   r;   s        @r   _load_aggregateszAPSWDatabase._load_aggregatesD   s@    )-)9)9)?)?)A 	?%D%5*=((~>	?r   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r   )_collationsr6   createcollation)r   r1   r?   fns       r   _load_collationszAPSWDatabase._load_collationsJ   s4    ((..0 	+HD"  r*	+r   c                     | j                   j                         D ]%  \  }\  }}}|r|fnd} |j                  |||g|  ' y N )
_functionsr6   createscalarfunction)r   r1   r?   rE   r@   deterministicargss          r   _load_functionszAPSWDatabase._load_functionsN   sQ    59__5J5J5L 	C1D12z='4M#"D%D%%dB
BTB	Cr   c                 j    |j                  d       | j                  D ]  }|j                  |        y NT)enableloadextension_extensionsloadextension)r   r1   	extensions      r   _load_extensionszAPSWDatabase._load_extensionsS   s3      &)) 	*Iy)	*r   c                     | j                   j                  |       | j                         s3| j                         }|j	                  d       |j                  |       y y rP   )rR   addr!   r"   rQ   rS   )r   rT   r1   s      r   load_extensionzAPSWDatabase.load_extensionX   sM    Y'~~??$D$$T*y)  r   c                     | j                   s|j                         j                         S |t        j                  k(  r		 |d   d   S |S # t
        t        t        f$ r Y |S w xY w)Nr   )returning_clausegetconnectionlast_insert_rowidr	   SIMPLEAttributeError
IndexError	TypeError)r   cursor
query_types      r   last_insert_idzAPSWDatabase.last_insert_id_   si    $$'');;==6==(ay|#  #J	: s   A	 	A! A!c                     	 |j                         j                         S # t        $ r+ |j                  j                         j                         cY S w xY wr   )r[   changesr^   ra   )r   ra   s     r   rows_affectedzAPSWDatabase.rows_affectedi   sJ    	;'')1133 	;==..088::	;s     1AAc                 H    | j                         j                  d|z         y )Nz	begin %s;)ra   execute)r   	lock_types     r   beginzAPSWDatabase.begino   s    kI56r   c                     t         5  | j                         }|j                         j                         r
	 d d d        y|j	                  d       d d d        y# 1 sw Y   yxY w)NFzcommit;Tr   ra   r[   getautocommitrh   r   curss     r   commitzAPSWDatabase.commitr   sZ    " 	$;;=D!!#113	$ 	$ LL#		$
 	$
    0A AA#c                     t         5  | j                         }|j                         j                         r
	 d d d        y|j	                  d       d d d        y# 1 sw Y   yxY w)NFz	rollback;Trl   rn   s     r   rollbackzAPSWDatabase.rollbackz   sZ    " 	&;;=D!!#113	& 	& LL%		&
 	&
 rq   c                     t        j                  ||f       t        5  | j                         }|j	                  ||xs d       d d d        |S # 1 sw Y   S xY wrH   )r   debugr   ra   rh   )r   sqlparamsra   s       r   execute_sqlzAPSWDatabase.execute_sql   sP    c6]#" 	.[[]FNN3"-	. 	. s   'AAr   )deferred)__name__
__module____qualname__tupler*   sqlitelibversionsplitserver_versionr   r&   r(   r2   r/   r4   rA   rF   rN   rU   rX   rc   rf   rj   rp   rs   rx   __classcell__r   s   @r   r   r   !   s    N+@4+@+@+B+H+H+MNNN??
%	!
?+C
*
*;7r   r   c                     |t        |      S y r   )str)svs     r   nhr      s    }1v r   c                        e Zd Z fdZ xZS )r   c                 D    t         t        |   |      }|
|xr dxs dS y )N   r   )r   r   db_value)r   r   r   s     r   r   zBooleanField.db_value   s,    ,.q1=7<a r   )rz   r{   r|   r   r   r   s   @r   r   r      s       r   r   c                       e Zd ZeZy)r   Nrz   r{   r|   r   r   rI   r   r   r   r          Hr   r   c                       e Zd ZeZy)r
   Nr   rI   r   r   r
   r
      r   r   r
   c                       e Zd ZeZy)r   Nr   rI   r   r   r   r      r   r   r   c                       e Zd ZeZy)r   Nr   rI   r   r   r   r      r   r   r   )__doc__r*   peeweer   r   _BooleanFieldr   
_DateFieldr   _DateTimeFieldr   _DecimalFieldr	   r
   
_TimeFieldr   playhouse.sqlite_extr   r   r   rI   r   r   <module>r      s~   $   ( 0 * 2 0  *  2f$ fR =  
 
 N = r   