
    Vi                        S r SSKrSSK7  SSKJr  SSKJr  SSKJr  SSKJr	  SSKJ
r  SS	KJr  SS
KJr  SSKJr  SSKJr   " S S\5      rS r " S S\5      r " S S\5      r " S S\5      r " S S\	5      r " S S\5      r
g)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                      ^  \ rS rSr\" S \R                  " 5       R                  S5       5       5      rU 4S jr	S r
S rS rU 4S jrS	 rS
 rS rS rS rS rSS jrS rSS jrS rS rSS jrSrU =r$ )APSWDatabase!   c              #   8   #    U  H  n[        U5      v   M     g 7fN)int).0is     e/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/playhouse/apsw_ext.py	<genexpr>APSWDatabase.<genexpr>"   s     N+Ma3q66+Ms   .c                 >   > 0 U l         [        [        U ]  " U40 UD6  g r   )_modulessuperr   __init__)selfdatabasekwargs	__class__s      r   r   APSWDatabase.__init__$   s    lD*8>v>    c                     X R                   U'   U R                  5       (       d   U R                  5       R                  X5        g g r   )r   	is_closed
connectioncreatemodule)r   mod_namemod_insts      r   register_moduleAPSWDatabase.register_module(   s5    "*h~~OO**8>  r"   c                     U R                   U	 g r   r   )r   r'   s     r   unregister_moduleAPSWDatabase.unregister_module-   s    MM(#r"   c                    [         R                  " U R                  40 U R                  D6nU R                  b  UR                  U R                  S-  5         U R                  U5        U$ !   UR                  5         e = f)Ni  )apsw
Connectionr   connect_params_timeoutsetbusytimeout_add_conn_hooksclose)r   conns     r   _connectAPSWDatabase._connect0   sm    t}}D0C0CD==$ 45	  & 	JJLs   A+ +A>c                 N   > [         [        U ]  U5        U R                  U5        g r   )r   r   r5   _load_modules)r   r7   r    s     r   r5   APSWDatabase._add_conn_hooks;   s     lD1$74 r"   c                 n    U R                   R                  5        H  u  p#UR                  X#5        M     U$ r   )r   itemsr&   )r   r7   r'   r(   s       r   r;   APSWDatabase._load_modules?   s/    "&--"5"5"7Hh1 #8r"   c                    ^ U R                   R                  5        H   u  nu  mnU4S jnUR                  X$5        M"     g )Nc                  @   > T " 5       T R                   T R                  4$ r   )stepfinalize)klasss   r   make_aggregate5APSWDatabase._load_aggregates.<locals>.make_aggregateF   s    U^^<<r"   )_aggregatesr>   createaggregatefunction)r   r7   name
num_paramsrE   rD   s        @r   _load_aggregatesAPSWDatabase._load_aggregatesD   s:    )-)9)9)?)?)A%D%5*=((> *Br"   c                 l    U R                   R                  5        H  u  p#UR                  X#5        M     g r   )_collationsr>   createcollation)r   r7   rI   fns       r   _load_collationsAPSWDatabase._load_collationsJ   s+    ((..0HD  * 1r"   c                     U R                   R                  5        H)  u  nu  p4nU(       a  U4OSnUR                  " X#U/UQ76   M+     g N )
_functionsr>   createscalarfunction)r   r7   rI   rP   rJ   deterministicargss          r   _load_functionsAPSWDatabase._load_functionsN   sE    59__5J5J5L1D12='4M#"D%%d
BTB 6Mr"   c                 n    UR                  S5        U R                   H  nUR                  U5        M     g NT)enableloadextension_extensionsloadextension)r   r7   	extensions      r   _load_extensionsAPSWDatabase._load_extensionsS   s.      &))Iy) *r"   c                     U R                   R                  U5        U R                  5       (       d3  U R                  5       nUR	                  S5        UR                  U5        g g r]   )r_   addr$   r%   r^   r`   )r   ra   r7   s      r   load_extensionAPSWDatabase.load_extensionX   sP    Y'~~??$D$$T*y)  r"   c                     U R                   (       d  UR                  5       R                  5       $ U[        R                  :X  a	   US   S   $ U$ ! [
        [        [        4 a     U$ f = f)Nr   )returning_clausegetconnectionlast_insert_rowidr	   SIMPLEAttributeError
IndexError	TypeError)r   cursor
query_types      r   last_insert_idAPSWDatabase.last_insert_id_   si    $$'');;==6==(ay|#  #J	: s   A A('A(c                      UR                  5       R                  5       $ ! [         a+    UR                  R                  5       R                  5       s $ f = fr   )rj   changesrm   rp   )r   rp   s     r   rows_affectedAPSWDatabase.rows_affectedi   sJ    	;'')1133 	;==..088::	;s     2AAc                 H    U R                  5       R                  SU-  5        g )Nz	begin %s;)rp   execute)r   	lock_types     r   beginAPSWDatabase.begino   s    kI56r"   c                     [            U R                  5       nUR                  5       R                  5       (       a
   S S S 5        gUR	                  S5        S S S 5        g! , (       d  f       g= f)NFzcommit;Tr   rp   rj   getautocommitry   r   curss     r   commitAPSWDatabase.commitr   sY    ";;=D!!#1133 #" LL#	 #
  #"
    5AA
A-c                     [            U R                  5       nUR                  5       R                  5       (       a
   S S S 5        gUR	                  S5        S S S 5        g! , (       d  f       g= f)NFz	rollback;Tr~   r   s     r   rollbackAPSWDatabase.rollbackz   sY    ";;=D!!#1133 #" LL%	 #
  #"
 r   c                     [         R                  " X45        [           U R                  5       nUR	                  X=(       d    S5        S S S 5        U$ ! , (       d  f       W$ = frT   )r   debugr   rp   ry   )r   sqlparamsrp   s       r   execute_sqlAPSWDatabase.execute_sql   sJ    c]#"[[]FNN3"- #  #" s   +A
A"r,   r   )deferred)__name__
__module____qualname____firstlineno__tupler0   sqlitelibversionsplitserver_versionr   r)   r-   r8   r5   r;   rK   rQ   rZ   rb   rf   rr   rv   r{   r   r   r   __static_attributes____classcell__r    s   @r   r   r   !   s    N4+@+@+B+H+H+MNNN??
%	!
?+C
*
*;7 r"   r   c                      Ub  [        U5      $ g r   )str)svs     r   nhr      s    }1v r"   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r      c                 Z   > [         [        U ]  U5      nUb  U=(       a    S=(       d    S$ g )N   r   )r   r   db_value)r   r   r    s     r   r   BooleanField.db_value   s,    ,.q1=7<a r"   rU   )r   r   r   r   r   r   r   r   s   @r   r   r      s       r"   r   c                       \ rS rSr\rSrg)r      rU   Nr   r   r   r   r   r   r   rU   r"   r   r   r          Hr"   r   c                       \ rS rSr\rSrg)r
      rU   Nr   rU   r"   r   r
   r
      r   r"   r
   c                       \ rS rSr\rSrg)r      rU   Nr   rU   r"   r   r   r      r   r"   r   c                       \ rS rSr\rSrg)r      rU   Nr   rU   r"   r   r   r      r   r"   r   )__doc__r0   peeweer   r   _BooleanFieldr   
_DateFieldr   _DateTimeFieldr   _DecimalFieldr	   r
   
_TimeFieldr   playhouse.sqlite_extr   r   r   rU   r"   r   <module>r      s~   $   ( 0 * 2 0  *  2f$ fR =  
 
 N = r"   