
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    SW                     @   s\  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 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 deZG dd deZdd ZG dd deZG dd de	ZG dd  d eZG d!d" d"eZ
G d#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)*)_sqlite_date_part)_sqlite_date_trunc)_sqlite_regexp)BooleanField)	DateField)DateTimeField)DecimalField)logger	savepoint)	TimeFieldtransaction)SqliteExtDatabase)VirtualCharField)VirtualField)VirtualFloatField)VirtualIntegerField)VirtualModelc                   @   s   e Zd ZdddZdd ZdS )r   deferredc                 C   s   || _ || _d S N)db	lock_type)selfr   r    r   E/opt/alt/python38/lib64/python3.8/site-packages/playhouse/apsw_ext.py__init__)   s    ztransaction.__init__c                 C   s   | j | j d S r   )r   beginr   r   r   r   r   _begin-   s    ztransaction._beginN)r   )__name__
__module____qualname__r   r    r   r   r   r   r   (   s   
r   c                       s   e Zd Zd, fdd	Zdd Zdd Zdd	 Z fd
dZdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zd-ddZdd Zdd  Zd.d"d#Zd$d% Zd&d' Zd/d(d)Zd0d*d+Z  ZS )1APSWDatabaseNc                    s$   || _ i | _tt| j|f| d S r   )timeout_modulessuperr$   r   )r   databaser%   kwargs	__class__r   r   r   2   s    zAPSWDatabase.__init__c                 C   s   || j |< d S r   r&   )r   mod_namemod_instr   r   r   register_module7   s    zAPSWDatabase.register_modulec                 C   s   | j |= d S r   r,   )r   r-   r   r   r   unregister_module:   s    zAPSWDatabase.unregister_modulec                 K   sN   t j|f|}| jd k	r$|| j z| | W n   |   Y nX |S r   )apsw
Connectionr%   Zsetbusytimeout_add_conn_hooksclose)r   r(   r)   connr   r   r   _connect=   s    
zAPSWDatabase._connectc                    s   t t| | | | d S r   )r'   r$   r3   _load_modules)r   r5   r*   r   r   r3   H   s    zAPSWDatabase._add_conn_hooksc                 C   s$   | j  D ]\}}||| q
|S r   )r&   itemsZcreatemodule)r   r5   r-   r.   r   r   r   r7   L   s    zAPSWDatabase._load_modulesc                    s4   | j  D ]$\}\ } fdd}||| q
d S )Nc                     s     } | | j | jfS r   )stepfinalize)instanceklassr   r   make_aggregateS   s    z5APSWDatabase._load_aggregates.<locals>.make_aggregate)Z_aggregatesr8   Zcreateaggregatefunction)r   r5   name
num_paramsr>   r   r<   r   _load_aggregatesQ   s    zAPSWDatabase._load_aggregatesc                 C   s$   | j  D ]\}}||| q
d S r   )Z_collationsr8   Zcreatecollation)r   r5   r?   fnr   r   r   _load_collationsX   s    zAPSWDatabase._load_collationsc                 C   s*   | j  D ]\}\}}|||| q
d S r   )Z
_functionsr8   Zcreatescalarfunction)r   r5   r?   rB   r@   r   r   r   _load_functions\   s    zAPSWDatabase._load_functionsc                 C   s$   | d | jD ]}|| qd S NT)enableloadextension_extensionsloadextension)r   r5   	extensionr   r   r   _load_extensions`   s    

zAPSWDatabase._load_extensionsc                 C   s4   | j | |  s0|  }|d || d S rE   )rG   add	is_closedget_connrF   rH   )r   rI   r5   r   r   r   load_extensione   s
    
zAPSWDatabase.load_extensionc                 C   s   | ||pd |S )Nr   )execute)r   cursorsqlparamsr   r   r   _execute_sqll   s    zAPSWDatabase._execute_sqlTc              	   C   s<   t ||f |   |  }| ||| W 5 Q R X |S r   )r
   debugexception_wrapper
get_cursorrS   )r   rQ   rR   require_commitrP   r   r   r   execute_sqlp   s
    
zAPSWDatabase.execute_sqlc                 C   s   |j jr|  S d S r   )_metaauto_incrementgetconnectionZlast_insert_rowid)r   rP   modelr   r   r   last_insert_idw   s    zAPSWDatabase.last_insert_idc                 C   s   |   S r   )r[   Zchanges)r   rP   r   r   r   rows_affected{   s    zAPSWDatabase.rows_affectedr   c                 C   s   |   d|  d S )Nz	begin %s;rV   rO   r   r   r   r   r   r   ~   s    zAPSWDatabase.beginc                 C   s   |   d d S )Nzcommit;r_   r   r   r   r   commit   s    zAPSWDatabase.commitc                 C   s   |   d d S )Nz	rollback;r_   r   r   r   r   rollback   s    zAPSWDatabase.rollbackc                 C   s
   t | |S r   r   r`   r   r   r   r      s    zAPSWDatabase.transactionc                 C   s
   t | |S r   r   )r   sidr   r   r   r      s    zAPSWDatabase.savepoint)N)NT)r   )r   )N)r!   r"   r#   r   r/   r0   r6   r3   r7   rA   rC   rD   rJ   rN   rS   rX   r]   r^   r   ra   rb   r   r   __classcell__r   r   r*   r   r$   1   s(   


r$   c                 C   s   |d k	rt |S d S r   )str)svr   r   r   nh   s    rh   c                       s   e Zd Z fddZ  ZS )r   c                    s(   t t| |}|d k	r$|r dp"dS d S )N   r   )r'   r   db_value)r   rg   r*   r   r   rj      s    zBooleanField.db_value)r!   r"   r#   rj   rd   r   r   r*   r   r      s   r   c                   @   s   e Zd ZeZdS )r   Nr!   r"   r#   rh   rj   r   r   r   r   r      s   r   c                   @   s   e Zd ZeZdS )r   Nrk   r   r   r   r   r      s   r   c                   @   s   e Zd ZeZdS )r   Nrk   r   r   r   r   r      s   r   c                   @   s   e Zd ZeZdS )r	   Nrk   r   r   r   r   r	      s   r	   )__doc__r1   peeweer   r   r   r   Z_BooleanFieldr   Z
_DateFieldr   Z_DateTimeFieldr	   Z_DecimalFieldr
   r   r   Z
_TimeFieldr   Z_transactionZplayhouse.sqlite_extr   r   r   r   r   r   r$   rh   r   r   r   r   <module>   s6   	]