
    h                     4   d Z ddlZddlT 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
dS )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                                        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              #   4   K   | ]}t          |          V  d S N)int).0is     P/var/www/html/marketdash/venv/lib/python3.11/site-packages/playhouse/apsw_ext.py	<genexpr>zAPSWDatabase.<genexpr>"   s(      NNa3q66NNNNNN    .c                 X    i | _          t          t          |           j        |fi | d S r   )_modulessuperr   __init__)selfdatabasekwargs	__class__s      r   r   zAPSWDatabase.__init__$   s5    *lD!!*8>>v>>>>>r   c                     || j         |<   |                                 s*|                                                     ||           d S d S r   )r   	is_closed
connectioncreatemodule)r   mod_namemod_insts      r   register_modulezAPSWDatabase.register_module(   sP    "*h~~ 	?OO**8X>>>>>	? 	?r   c                     | j         |= d S r   )r   )r   r$   s     r   unregister_modulezAPSWDatabase.unregister_module-   s    M(###r   c                     t          j        | j        fi | j        }| j        |                    | j        dz             	 |                     |           n#  |                                  xY w|S )Ni  )apsw
Connectionr   connect_params_timeoutsetbusytimeout_add_conn_hooksclose)r   conns     r   _connectzAPSWDatabase._connect0   s{    t}DD0CDD=$ 4555	  &&&&	JJLLLs   A A/c                     t          t          |                               |           |                     |           d S r   )r   r   r/   _load_modules)r   r1   r   s     r   r/   zAPSWDatabase._add_conn_hooks;   s;    lD!!11$7774     r   c                 p    | j                                         D ]\  }}|                    ||           |S r   )r   itemsr#   )r   r1   r$   r%   s       r   r4   zAPSWDatabase._load_modules?   sB    "&-"5"5"7"7 	2 	2Hhh1111r   c                     | j                                         D ]#\  }\  }fd}|                    ||           $d S )Nc                  2                   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   sg    )-)9)?)?)A)A 	? 	?%D%5*= = = = =((~>>>>	? 	?r   c                 p    | j                                         D ]\  }}|                    ||           d S r   )_collationsr6   createcollation)r   r1   r?   fns       r   _load_collationszAPSWDatabase._load_collationsJ   sG    (..00 	+ 	+HD"  r****	+ 	+r   c                 z    | j                                         D ] \  }\  }}}|r|fnd} |j        |||g|R   !d S N )
_functionsr6   createscalarfunction)r   r1   r?   rE   r@   deterministicargss          r   _load_functionszAPSWDatabase._load_functionsN   sm    59_5J5J5L5L 	C 	C1D12z='4<M##"D%D%dB
BTBBBBB	C 	Cr   c                 n    |                     d           | j        D ]}|                    |           d S NT)enableloadextension_extensionsloadextension)r   r1   	extensions      r   _load_extensionszAPSWDatabase._load_extensionsS   sI      &&&) 	* 	*Iy))))	* 	*r   c                     | j                             |           |                                 s@|                                 }|                    d           |                    |           d S d S rP   )rR   addr!   r"   rQ   rS   )r   rT   r1   s      r   load_extensionzAPSWDatabase.load_extensionX   sr    Y'''~~ 	*??$$D$$T***y)))))	* 	*r   Nc                     | j         s&|                                                                S |t          j        k    r,	 |d         d         S # t
          t          t          f$ r Y nw xY w|S )Nr   )returning_clausegetconnectionlast_insert_rowidr	   SIMPLEAttributeError
IndexError	TypeError)r   cursor
query_types      r   last_insert_idzAPSWDatabase.last_insert_id_   sw    $ 	''));;===6=((ay|#"J	:   s   A A'&A'c                     	 |                                                                 S # t          $ r. |j                                                                         cY S w xY wr   )r[   changesr^   ra   )r   ra   s     r   rows_affectedzAPSWDatabase.rows_affectedi   sf    	;''))11333 	; 	; 	;=..0088:::::	;s   %( 5A A deferredc                 Z    |                                                      d|z             d S )Nz	begin %s;)ra   execute)r   	lock_types     r   beginzAPSWDatabase.begino   s)    kI566666r   c                     t           5  |                                 }|                                                                r	 d d d            dS |                    d           d d d            n# 1 swxY w Y   dS )NFzcommit;Tr   ra   r[   getautocommitri   r   curss     r   commitzAPSWDatabase.commitr   s    " 	$ 	$;;==D!!##1133 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ LL###		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 t   <A2A22A69A6c                     t           5  |                                 }|                                                                r	 d d d            dS |                    d           d d d            n# 1 swxY w Y   dS )NFz	rollback;Trm   ro   s     r   rollbackzAPSWDatabase.rollbackz   s    " 	& 	&;;==D!!##1133 	& 	& 	& 	& 	& 	& 	& 	& LL%%%		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 trr   c                     t          j        ||f           t          5  |                                 }|                    ||pd           d d d            n# 1 swxY w Y   |S rH   )r   debugr   ra   ri   )r   sqlparamsra   s       r   execute_sqlzAPSWDatabase.execute_sql   s    c6]###" 	. 	.[[]]FNN3"---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. s   -AAAr   )rg   )__name__
__module____qualname__tupler*   sqlitelibversionsplitserver_versionr   r&   r(   r2   r/   r4   rA   rF   rN   rU   rX   rc   rf   rk   rq   rt   ry   __classcell__r   s   @r   r   r   !   s|       UNN+@4+@+B+B+H+H+M+MNNNNNN? ? ? ? ?? ? ?
% % %	 	 	! ! ! ! !  
? ? ?+ + +C C C
* * *
* * *   ; ; ;7 7 7 7           r   r   c                 (    |t          |          S d S r   )str)svs     r   nhr      s    }1vv }r   c                        e Zd Z fdZ xZS )r   c                 h    t          t          |                               |          }||rdpdS d S )N   r   )r   r   db_value)r   r   r   s     r   r   zBooleanField.db_value   s:    ,%%..q11=7<a =r   )rz   r{   r|   r   r   r   s   @r   r   r      s8                         r   r   c                       e Zd ZeZdS )r   Nrz   r{   r|   r   r   rI   r   r   r   r              HHHr   r   c                       e Zd ZeZdS )r
   Nr   rI   r   r   r
   r
      r   r   r
   c                       e Zd ZeZdS )r   Nr   rI   r   r   r   r      r   r   r   c                       e Zd ZeZdS )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 0 0 0 0 0 * * * * * * 2 2 2 2 2 2 0 0 0 0 0 0       * * * * * *       2 2 2 2 2 2f f f f f$ f f fR           =          
       
       N       =     r   