
    tUim                        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  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)loggerc                        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 xZS )APSWDatabasec              #   2   K   | ]  }t        |        y wN)int).0is     E/home/agent/.local/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._connect.   sm    t}}D0C0CD==$ 45	  & 	JJLs   A) )A<c                 N    t         t        |   |       | j                  |       y r   )r   r   r.   _load_modules)r   r0   r   s     r   r.   zAPSWDatabase._add_conn_hooks9   s     lD1$74 r   c                 n    | j                   j                         D ]  \  }}|j                  ||        |S r   )r   itemsr"   )r   r0   r#   r$   s       r   r3   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_aggregateD   s    U^^<<r   )_aggregatesr5   createaggregatefunction)r   r0   name
num_paramsr;   r:   s        @r   _load_aggregateszAPSWDatabase._load_aggregatesB   s@    )-)9)9)?)?)A 	?%D%5*=((~>	?r   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r   )_collationsr5   createcollation)r   r0   r>   fns       r   _load_collationszAPSWDatabase._load_collationsH   s4    ((..0 	+HD"  r*	+r   c                     | j                   j                         D ]%  \  }\  }}}|r|fnd} |j                  |||g|  ' y )N )
_functionsr5   createscalarfunction)r   r0   r>   rD   r?   deterministicargss          r   _load_functionszAPSWDatabase._load_functionsL   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   r0   	extensions      r   _load_extensionszAPSWDatabase._load_extensionsQ   s3      &)) 	*Iy)	*r   c                     | j                   j                  |       | j                         s3| j                         }|j	                  d       |j                  |       y y rN   )rP   addr    r!   rO   rQ   )r   rR   r0   s      r   load_extensionzAPSWDatabase.load_extensionV   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_clauser!   last_insert_rowidr	   SIMPLEAttributeError
IndexError	TypeError)r   cursor
query_types      r   last_insert_idzAPSWDatabase.last_insert_id]   sf    $$$$6688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[   r^   )r   r^   s     r   rows_affectedzAPSWDatabase.rows_affectedg   sD    	6$$,,.. 	6==++3355	6s    -AAc                 H    | j                         j                  d|z         y )Nz	begin %s;)r^   execute)r   	lock_types     r   beginzAPSWDatabase.beginm   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   r^   r!   getautocommitre   r   curss     r   commitzAPSWDatabase.commitp   sU    " 	$;;=D,,.	$ 	$ LL#		$
 	$
    ,A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;Tri   rk   s     r   rollbackzAPSWDatabase.rollbackx   sU    " 	&;;=D,,.	& 	& LL%		&
 	&
 rn   r   )deferred)__name__
__module____qualname__tupler)   sqlitelibversionsplitserver_versionr   r%   r'   r1   r.   r3   r@   rE   rL   rS   rV   r`   rc   rg   rm   rp   __classcell__r   s   @r   r   r      s{    N+@4+@+@+B+H+H+MNNN??
%	!
?+C
*
*6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   )rr   rs   rt   r   ry   rz   s   @r   r   r      s       r   r   c                       e Zd ZeZy)r   Nrr   rs   rt   r   r   rG   r   r   r   r          Hr   r   c                       e Zd ZeZy)r
   Nr   rG   r   r   r
   r
      r   r   r
   c                       e Zd ZeZy)r   Nr   rG   r   r   r   r      r   r   r   c                       e Zd ZeZy)r   Nr   rG   r   r   r   r      r   r   r   )__doc__r)   peeweer   r   _BooleanFieldr   
_DateFieldr   _DateTimeFieldr   _DecimalFieldr	   r
   
_TimeFieldr   SqliteDatabaser   r   rG   r   r   <module>r      sz   $   ( 0 * 2 0  * _> _D =  
 
 N = r   