
    !j2s                       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Zd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZd d
lZ	 d dl m!Z" n# e#$ r d
Z"Y nw xY w	 d d
l$Z$e"re"j%        e$j%        k    re"Z$n# e#$ r e"Z$Y nw xY w	 d dl&m'Z'  e'j(                     n# e#$ r Y nw xY w	 d d
l)Z)d dl)m*Z+ d dl,m-Z. d dl,m/Z0  e.             n# e#$ r d
xZ)Z0Y nw xY w	 d d
l1Z1d dl2m3Z3 d dl4m/Z5 d dl4m6Z7 n# e#$ r	 d
xZ1xZ5Z7Y nw xY wdZ8	 d d
l9Z:n # e#$ r 	 d d
l;Z:dZ8n# e#$ r d
Z:Y nw xY wY nw xY wdZ<g dZ= ej>        d          Z?e?@                     ejA                               d ZBeCeDeEeFeGejH        fZIddZJejK        dk     rej        jL        ZLej        jM        ZMnd ZLd ZMe$r e$jN        ejO        eP            e$jN        ejQ        eP            e$jN        ej        eP           ejK        dk    rAd ZRd ZSd ZT e$jN        ej        eR            e$jU        deS            e$jU        d eT           e$j%        ZVnd!ZV eFd"          ZWd#ZXd$d%d&d'd(d)d"ZYeY                                ZZd*eZd+<   d,eZd-<   d. Z[d/ Z\d0 Z]d1 Z^ G d2 d3e_          Z` ea            Zb e`di d4d4d5d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdRdSdTdUdUdVdWdXdXdYdYdZdZd[d[d\d\d]d^d_d`Zc e`ejd        eje        ejf        ejg        ejh        eji        ejj        da db dc dd de df          Zk e`di dgdhdidjdjdjdkdkdldmdndndododpdpdqdqdrdsdtdudvdudwdhdmdmdxdxdydydzdxd{dkd|d|Zl e`d}d~ddddddd	  	        Zm e`ddddd          Zn e`dd          ZodZpdZqdZrdZsdZtd ZudZvdZw ejx        d          Zy ejx        d          Zz ejx        d          Z{dZ|eafdZ}d Z~d Zd Zd Zd Zd Zd Zd Z G d dea          Z G d dea          Z G d de          Z G d dea          Z G d dea          Z G d d ej        dd                    Zd Z G d dea          Zd Zd Z G d dea          Z G d dea          Z G d dea          Z G d dea          Z G d de          Z G d de          Z G d dea          Zd Zemj        dfdZ G d de          Z G d dea          Z G dĄ dee          Z G dƄ de          Z G dȄ dee          Z G dʄ dee          Z G d̄ de          Z G d΄ de          Z G dЄ de          Z G d҄ dea          Z G dԄ dea          Z G dք de          Z G d؄ de          Z G dڄ de          Z G d܄ dea          Z G dބ dee          Z G d de          Z G d de          ZddZ G d de          Z G d de          ZddZddZ G d de          Z G d de          Z G d de          Z G d de          ZddZd Z G d de          Z ed
d
          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d de          Zd Zd Z G d de          Z G d de          Z ed	          Z G d
 de          ZŐd Z G d de          Zǐd Z G d de          Zɐd Z G d de          Z G d de˦          Z G d de˦          Z͐ddZ G d deͦ          Z G d deeeϦ          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 G d( d)eӦ          Z G d* d+e          Z G d, d-eצ          Zؐdd/Z G d0 d1eڦ          Z G d2 d3eۦ          Z G d4 d5eۦ          Z G d6 d7eݦ          Z G d8 d9eݦ          Z G d: d;eۦ          Z G d< d=eݦ          Z G d> d?eݦ          Z G d@ dAeݦ          Z G dB dCeݦ          Z G dD dEea          ZeeeeeeeeeeeeߐdFZ ee          Z ej        dGdH          Z ej        dIdJ          Z ej        dKdL          Z ej        dMdN          Z G dO dPea          Z G dQ dReej                  Z G dS dTea          Z G dU dVea          Z G dW dXe          ZdY Z G dZ d[e          Z G d\ d]ea          Z G d^ d_e          Z G d` dae          Z G db dce          Z G dd dee          Z G df dgea          Z G dh diea          Z G dj dkea          Z G dl dmea          Z G dn doea          Z G dp dqe          Z G dr dse          Z G dt due          Z  G dv dwea          Z G dx dyea          Z G dz d{e          Z G d| d}ea          Z G d~ dea          Z G d de          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 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 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 G d dea          Z G d dee          Z G d dee	          Z G d dea          Z G d de          Z G d de          Z G d de          Z G d de          Zd ZddZd Z  G d de          Z! G d de!          Z" G d de!          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* G dƄ dǐe          Z+ G dȄ dea          Z, G dʄ dːe          Z- G d̄ d͐e          Z. G d΄ dϐe-          Z/ G dЄ dѐe-          Z0 G d҄ dӐe-          Z1 G dԄ dea          Z2 G dք dea          Z3 G d؄ dea          Z4 G dڄ dېe4          Z5 G d܄ deڦ          Z6 G dބ dߐe7          Z8 G d dea          Z9 G d d e}e8e                    Z: G d de          Z; G d de          Z<d Z= G d dea          Z> G d de>e̦          Z? G d de>          Z@ G d de@eѦ          ZAd ZB G d de@eҦ          ZC G d deC          ZD G d de>          ZE G d deEeԦ          ZF G d deEeզ          ZG G d deEe֦          ZH G d deC          ZId  ZJ G d de          ZK G d deK          ZL G d deK          ZM G d deM          ZN G d	 d
eL          ZO G d deK          ZP G d d ej        dd                    ZQd ZRd ZSd
S (      )bisect_left)bisect_right)Callable)Mappingcontextmanager)deepcopy)reducewraps)isclassN)dbapi2)compat)
extensions)register_uuid)Json)TransactionStatus)JsonbFTz4.0.5)MAnyFieldAsIs	AutoField	BareFieldBigAutoFieldBigBitFieldBigIntegerFieldBinaryUUIDFieldBitField	BlobFieldBooleanFieldCaseCast	CharFieldCheckchunkedColumnCompositeKeyContextDatabaseDatabaseErrorDatabaseProxy	DataError	DateFieldDateTimeFieldDecimalFieldDefaultDeferredForeignKeyDeferredThroughModel
DJANGO_MAPDoesNotExistDoubleFieldDQEntityEXCLUDEDFieldFixedCharField
FloatFieldfnForeignKeyFieldIdentityFieldImproperlyConfiguredIndexIntegerFieldIntegrityErrorInterfaceErrorInternalErrorIPFieldJOINManyToManyFieldModel
ModelIndexMySQLDatabaseNotSupportedErrorOPOperationalErrorPostgresqlDatabasePrimaryKeyFieldprefetchPREFETCH_TYPEProgrammingErrorProxyQualifiedNamesSchemaManagerSmallIntegerFieldSelectSQLSqliteDatabaseTable	TextField	TimeFieldTimestampFieldTuple	UUIDFieldValue
ValuesListWindowpeeweec                 ,    t          | t                    S N)
isinstancer   )cs    B/var/www/html/bolsaweb/venv/lib/python3.11/site-packages/peewee.py<lambda>rh      s    jH--     c                 B    |j         |ur|                    |          |rd   )__traceback__with_traceback)tpvaluetbs      rg   reraiserp      s)    "$$""2&&&
Kri   )      c                     t           j                             | t           j        j                                      d           S )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rg   utcfromtimestampr}      s3    !rh&7&;<<%%	'ri   c                      t           j                             t           j        j                                      d           S )Nru   )rw   nowry   rz   r{    ri   rg   utcnowr      s/    !X&*++%%	'ri   c                 ,    |                      d          S N )	isoformatds    rg   datetime_adapterr      s    C(8(8!8ri   c                 j    t          j        t          t          |                     d                     S )N   -)rw   datemapintsplitr   s    rg   convert_dater      s"    HM3sAGGDMM3J3J$KKri   c           	         d| v r|                      d          n|                      d          \  }}t          t          |                     d                    \  }}} |j         d          }t          t          |d                              d                    \  }}}	t          |          dk    r;t          d                    |d	                                                             }
nd}
t          j        ||||||	|
          S )
N   T    r      .r      :   z{:0<6.6}   )r   r   r   lenformatdecoderw   )tr   timeymr   t_fullhourminutesecondusecs              rg   convert_timestampr      s    *.!))JD$#tzz$//00GAq!TZ%%F#&sF1IOOD,A,A#B#B D&&6{{a:,,VAY-=-=-?-?@@AA$Q1dFFDIIIri   r   	timestampr   r   r   )yearmonthdayr   r   r   )%Y-%m-%d %H:%M:%S%Y-%m-%d %H:%M:%S.%f%Y-%m-%d%H:%M:%S%H:%M:%S.%f%H:%Mz%Y-01-01 00:00:00z%Y-%m-01 00:00:00z%Y-%m-%d 00:00:00z%Y-%m-%d %H:00:00z%Y-%m-%d %H:%M:00r   z%Y-%m-%d %H:%i:00r   z%Y-%m-%d %H:%i:%Sr   c                 j    | t           v sJ |sd S t          |t                    }t          ||           S rd   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rg   _sqlite_date_partr      s@    .(((( 	/+F	G	GB2{###ri   c                     | t           v sJ |sd S t          |t                    }|                    t           |                    S rd   )__sqlite_date_trunc__r   r   strftimer   s      rg   _sqlite_date_truncr      sI    ///// 	/+F	G	GB;;,[9:::ri   c                 8    |dS t          j        | |          d uS NF)research)regexrn   s     rg   _sqlite_regexpr      s#    }u9UE""$..ri   c                 :    t          j        | t                     d S rd   )warningswarnDeprecationWarning)ss    rg   __deprecated__r      s    M!'(((((ri   c                   &    e Zd Zd Zd Zd Zd ZdS )attrdictc                 N    	 | |         S # t           $ r t          |          w xY wrd   )KeyErrorAttributeErrorselfattrs     rg   __getattr__zattrdict.__getattr__   s:    	': 	' 	' 	' &&&	's   
 $c                     || |<   d S rd   r   r   r   rn   s      rg   __setattr__zattrdict.__setattr__  s    UT


ri   c                 0    |                      |           | S rd   updater   rhss     rg   __iadd__zattrdict.__iadd__  s    T[[---d{ri   c                 N    t          |           }|                    |           |S rd   )r   r   )r   r   r   s      rg   __add__zattrdict.__add__  s    Aaxri   N)__name__
__module____qualname__r   r   r   r   r   ri   rg   r   r      s<        ' ' '
 ;:::::GGGGGri   r   ANDORADD+SUB-MUL*DIV/BIN_AND&BIN_OR|XOR#MOD%EQ=LT<LTEz<=GT>GTEz>=NEz!=INNOT_INzNOT INISIS_NOTzIS NOTLIKEILIKEBETWEENREGEXPIREGEXPCONCATz||BITWISE_NEGATION~c                 8    t          | t          j        |          S rd   )
ExpressionrK   r   lrs     rg   rh   rh   3  s    z!RUA.. ri   c                 8    t          | t          j        |          S rd   )r  rK   r   r	  s     rg   rh   rh   4      :aA66 ri   c                 8    t          | t          j        |          S rd   )r  rK   r   r	  s     rg   rh   rh   5  s    Arw22 ri   c                 8    t          | t          j        |          S rd   )r  rK   r   r	  s     rg   rh   rh   6  s    *Q!44 ri   c                 8    t          | t          j        |          S rd   )r  rK   r  r	  s     rg   rh   rh   7  r  ri   )eqltltegtgteneinisis_notlikeilikeregexpAUTOINTEGERBIGAUTOBIGINTBLOBBOOLSMALLINTCHARDATEDATETIMEDECIMALDEFAULT DOUBLEREALFLOATINTTEXTTIMEUUIDUUIDBVARCHARz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOINzFULL OUTER JOINz
CROSS JOINzNATURAL JOINLATERALzLEFT JOIN LATERAL)	INNER
LEFT_OUTERRIGHT_OUTERFULL
FULL_OUTERCROSSNATURALr3  LEFT_LATERALr   r   rq         )TUPLEDICTNAMED_TUPLECONSTRUCTORMODEL)WHERErE         z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])z[A-Za-z_][A-Za-z0-9_]*_metaclass_helper_c                 (     | t           |fi           S rd   )
MODEL_BASE)metabases     rg   with_metaclassrK    s    4
TGR(((ri   c                 \    |                                  }|r|                    |           |S rd   )copyr   )source	overridesmergeds      rg   
merge_dictrQ    s.    [[]]F !i   Mri   c                     t          |           dk    r| d                                       S d                    fd| D                       S )Nr   r   .c                 :    g | ]}|                               S r   join).0partquote_charss     rg   
<listcomp>zquote.<locals>.<listcomp>  s%    ===TYY{++===ri   )r   rV  )pathrY  s    `rg   quoter\    sO    
4yyA~~Aw||K(((88=======>>>ri   c                 J    t          |           ot          | t                    S rd   )r   
issubclassrG   )os    rg   rh   rh     s    WQZZ8Jq%$8$8 ri   c                 L    | !t          | t          t          f          r| n| fS d S rd   )re   listtuplern   s    rg   ensure_tuplerd    s/    "54-88FuuuhF ri   c                 V    | &t          | t                    r| nt          |           S d S rd   )re   Noder6   rc  s    rg   ensure_entityrg    s/    "5$//BuuVE]]B ri   c                     t                               d|           }t                              d|                                          S )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)r   firsts     rg   make_snake_casern    s9      1--E%0066888ri   c                     t                               |                     dd          d                   }||                                S | S )NrS  r   )IDENTIFIER_REr   rsplitgroup)r   	match_objs     rg   make_identifierru    sC    $$QXXc1%5%5b%9::I   Hri   c              #      K   t                      }t          j        t          |           g|z  d|i}d |D             D ]2}|r*|d         |u r |                                 |r
|d         |u  |V  3d S )N	fillvaluec              3   4   K   | ]}t          |          V  d S rd   )ra  )rW  gs     rg   	<genexpr>zchunked.<locals>.<genexpr>  s(      **a$q''******ri   rp  )object	itertoolszip_longestiterpop)itnmarkergroupsrs  s        rg   r$   r$     s      XXF"T"XXJNEfEEF**6***   	b	V++IIKKK  	b	V++ ri   c                       e Zd Zd ZdS )_callable_context_managerc                 @     t                     fd            }|S )Nc                  L    5   | i |cd d d            S # 1 swxY w Y   d S rd   r   argskwargsr;   r   s     rg   innerz1_callable_context_manager.__call__.<locals>.inner  s     + +r4*6**+ + + + + + + + + + + + + + + + + +s   r   r   r;   r  s   `` rg   __call__z"_callable_context_manager.__call__  9    	r	+ 	+ 	+ 	+ 	+ 
	+ ri   N)r   r   r   r  r   ri   rg   r  r    s#            ri   r  c                   p     e Zd ZdZdZd Zd Zd Zd Z ed          Z	 ed          Z
d	 Z fd
Z xZS )rR   z;
    Create a proxy or placeholder for another object.
    obj
_callbacksc                 >    g | _         |                     d            d S rd   )r  
initializer   s    rg   __init__zProxy.__init__  s!    ri   c                 >    || _         | j        D ]} ||           d S rd   r  )r   r  callbacks      rg   r  zProxy.initialize  s3     	 	HHSMMMM	 	ri   c                 :    | j                             |           |S rd   )r  append)r   r  s     rg   attach_callbackzProxy.attach_callback  s    x(((ri   c                       fd}|S )Nc                 f    | j         t          d           t          | j                   |i |S NzCannot use uninitialized Proxy.r  r   r   )r   r  r  methods      rg   r  z Proxy.passthrough.<locals>.inner  s;    x$%FGGG,748V,,d=f===ri   r   r  r  s   ` rg   passthroughzProxy.passthrough  s#    	> 	> 	> 	> 	> ri   	__enter____exit__c                 X    | j         t          d          t          | j         |          S r  r  r   s     rg   r   zProxy.__getattr__  s+    8 !BCCCtx&&&ri   c                     || j         vrt          d          t          t          |                               ||          S )NzCannot set attribute on proxy.)	__slots__r   superrR   r   )r   r   rn   	__class__s      rg   r   zProxy.__setattr__  s?    t~%% !ABBBUD!!--dE:::ri   )r   r   r   __doc__r  r  r  r  r  r  r  r   r   __classcell__r  s   @rg   rR   rR     s          &I    
     K((I{:&&H' ' '
; ; ; ; ; ; ; ; ;ri   rR   c                   J    e Zd ZdZdZd Zd Zd Zd Zd Z	e
d             Zd	S )
r*   zL
    Proxy implementation specifically for proxying `Database` objects.
    )r  r  _Modelc                      t          |           S rd   ConnectionContextr  s    rg   connection_contextz DatabaseProxy.connection_context       &&&ri   c                 "    t          | g|R i |S rd   _atomicr   r  r  s      rg   atomiczDatabaseProxy.atomic       t-d---f---ri   c                      t          |           S rd   _manualr  s    rg   manual_commitzDatabaseProxy.manual_commit      t}}ri   c                 "    t          | g|R i |S rd   _transactionr  s      rg   transactionzDatabaseProxy.transaction       D242226222ri   c                      t          |           S rd   
_savepointr  s    rg   	savepointzDatabaseProxy.savepoint      $ri   c                      t           d          s- G  fdd          }t          dt          fd|i           _         j        S )Nr  c                       e Zd Z ZdS )!DatabaseProxy.Model.<locals>.MetaNr   r   r   databaser  s   rg   Metar            4ri   r  	BaseModelhasattrtyperG   r  r   r  s   ` rg   rG   zDatabaseProxy.Model  U    tX&& 	F''''''''''{UHvtnEEDK{ri   N)r   r   r   r  r  r  r  r  r  r  propertyrG   r   ri   rg   r*   r*     s          0I' ' '. . .  3 3 3       X  ri   r*   c                       e Zd ZdS )ModelDescriptorNr   r   r   r   ri   rg   r  r              ri   r  c                   T    e Zd ZdZd Zed             Zd ZddZd Z	d Z
d	 Zd
 ZdS )AliasManager)_counter_current_index_mappingc                 X    d| _         d| _        g | _        |                                  d S Nr   )r  r  r  pushr  s    rg   r  zAliasManager.__init__  s)    		ri   c                 ,    | j         | j        dz
           S Nr   )r  r  r  s    rg   mappingzAliasManager.mapping  s    }T01455ri   c                 h    || j         vr| xj        dz  c_        d| j        z  | |<   | j         |         S )Nr   zt%d)r  r  r   rN  s     rg   addzAliasManager.add  s<    %%MMQMM 4=0DL|F##ri   Fc                     |rHt          t          | j                            D ]&}|| j        |         v r| j        |         |         c S '|                     |          S rd   )reversedranger  r  r  )r   rN  	any_depthidxs       rg   getzAliasManager.get  sm     	6d&9 : :;; 6 6T]3///=-f5555 0xxri   c                 ,    |                      |          S rd   )r  r  s     rg   __getitem__zAliasManager.__getitem__  s    xxri   c                     || j         |<   d S rd   )r  )r   rN  aliass      rg   __setitem__zAliasManager.__setitem__  s    $Vri   c                     | xj         dz  c_         | j         t          | j                  k    r| j                            i            d S d S r  )r  r   r  r  r  s    rg   r  zAliasManager.push  sR    q T]!3!333M  $$$$$ 43ri   c                     | j         dk    rt          d          | j        | j         dz
                                            | xj         dz  c_         d S )Nr   z&Cannot pop() from empty alias manager.)r  
ValueErrorr  clearr  s    rg   r  zAliasManager.pop$  sZ    !##EFFFd)A-.44666q ri   NF)r   r   r   r  r  r  r  r  r  r  r  r  r  r   ri   rg   r  r    s        :I   6 6 X6$ $ $            % % %% % %
! ! ! ! !ri   r  c                   2     e Zd Zedf fd	ZddZd Z xZS )StateFc                 Z    t          t          |                               | |||          S rd   )r  r  __new__)clsscopeparenthesesr  r  s       rg   r  zState.__new__-  s'    UC  ((e[&IIIri   Nc                     || j         n|}|r6| j        r/| j                                        }|                    |           n|r|}n| j        }t	          ||fi |S rd   )r  settingsrM  r   r  )r   r  r  r  r  s        rg   r  zState.__call__0  sz    #m

  	%dm 	%}))++HOOF#### 	%HH}HUK448444ri   c                 6    | j                             |          S rd   )r  r  )r   	attr_names     rg   r   zState.__getattr__>  s    }  +++ri   NN)r   r   r   SCOPE_NORMALr  r  r   r  r  s   @rg   r  r  +  sk        'U J J J J J J5 5 5 5, , , , , , ,ri   r  _State)r  r  r  c                 ,     t            fd            }|S )Nc              ;   Z   K    | ddi|5  | V  d d d            d S # 1 swxY w Y   d S Nr  r   r   )r   r  r  s     rg   r  z __scope_context__.<locals>.innerC  s      T((((( 	 	JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    $$r   )r  r  s   ` rg   __scope_context__r
  B  s-        ^ Lri   c                   "   e Zd ZdZd Zd Zd Zed             Zed             Z	ed             Z
d Z ee          Z ee          Z ee          Z ee          Z ee          Zd	 Zd
 Zed             Zd Zd ZddZd Zd Zd Z dS )r'   )stack_sql_valuesalias_managerstatec                 x    g | _         g | _        g | _        t                      | _        t          di || _        d S Nr   )r  r  r  r  r  r  r  )r   r  s     rg   r  zContext.__init__M  s<    
	)^^&&X&&


ri   c                 .    t          di | j        j        S r  )r'   r  r  r  s    rg   as_newzContext.as_newT  s    --,---ri   c                 8    |d                              |           S r  get_sort_keyr   items     rg   column_sort_keyzContext.column_sort_keyW  s    Aw##D)))ri   c                     | j         j        S rd   )r  r  r  s    rg   r  zContext.scopeZ  s    zri   c                     | j         j        S rd   )r  r  r  s    rg   r  zContext.parentheses^  s    z%%ri   c                     | j         j        S rd   )r  subqueryr  s    rg   r  zContext.subqueryb  s    z""ri   c                     |r!|                     d          | j        k    r|d= | j                            | j                    | j        di || _        | S r	  )r  r  r  r  r  )r   rO  s     rg   r  zContext.__call__f  s`     	#w//4:=='"
$*%%%TZ,,),,
ri   c                 >    | j         r|                     d           | S )N()r  literalr  s    rg   r  zContext.__enter__t  s$     	LLri   c                 z    | j         r|                     d           | j                                        | _        d S )N))r  r"  r  r  r  r   exc_typeexc_valexc_tbs       rg   r  zContext.__exit__y  s6     	LLZ^^%%


ri   c              #   v   K   | j                                          d V  | j                                          d S rd   )r  r  r  r  s    rg   
push_aliaszContext.push_alias~  s?      !!!     ri   c                    t          |t          t          f          r|                    |           S t	          |          r|j        j                            |           S |                     t          |                    S rd   )	re   rf  r'   __sql__is_model_metatablesqlr_   r   r  s     rg   r0  zContext.sql  sh    cD'?++ 	(;;t$$$c]] 	(9?**400088E#JJ'''ri   c                 :    | j                             |           | S rd   )r  r  )r   keywords     rg   r"  zContext.literal  s    	!!!ri   NTc                    |r ||          }n(|&| j         j        r| j                             |          }t          |t                    r: | d           5  |                     |          cd d d            S # 1 swxY w Y   nPt          |          rA|                                 5  |                     |          cd d d            S # 1 swxY w Y   | j         j        r"|                     t          |                    S | j
                            |           |r!|                     | j         j        pd          n| S )N	converter?)r  r6  re   rf  r0  r-  scope_columnvalue_literalsr"  _query_val_transformr  r  param)r   rn   r6  	add_params       rg   rn   zContext.value  s    	0Ie$$EE4:#7 J((//EeT"" 		'%%% ' 'xx' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'e__ 	'
 ""$$ ' 'xx' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' :$ 	=<< 4U ; ;<<<E"""8AKt||DJ,3444tKs$   A::A>A>)CCCc                     |j                             | j                    |j                            | j                   |S rd   )r  extendr  r   ctxs     rg   r,  zContext.__sql__  s5    	"""4<(((
ri   c                 P    |                      |                                          S rd   )r0  queryr   nodes     rg   parsezContext.parse  s    xx~~##%%%ri   c                 D    d                     | j                  | j        fS )Nr)  )rV  r  r  r  s    rg   rB  zContext.query  s    wwty!!4<//ri   NT)!r   r   r   r  r  r  r  r  r  r  r  r  r
  r  scope_normalSCOPE_SOURCEscope_sourceSCOPE_VALUESscope_values	SCOPE_CTE	scope_cteSCOPE_COLUMNr8  r  r  r   r*  r0  r"  rn   r,  rE  rB  r   ri   rg   r'   r'   J  s       FI' ' '. . .* * *     X  & & X& # # X#   %$\22L$$\22L$$\22L!!),,I$$\22L  
& & &
 ! ! ^!
( ( (  L L L L2  
& & &0 0 0 0 0ri   r'   c                 h   t          | dd           }||                                }nt                      }|                    |                                           \  }}|s|S |j        j        pd}|dk    r|                    dd          }|t          t          t          |                    z  S )N	_databaser7  %s)r   get_sql_contextr'   r0  rB  r  r;  r{   rb  r   r:  )rB  dbr@  r0  paramsr;  s         rg   query_to_stringrV    s     
T	*	*B	~  ""ii''%..&&((KC 
IO"sE||kk#t$$s/889999ri   c                    t          | t          t          j        t          j        t          j        f          r'dt          |                               dd          z  } nt          | t                    rV	 |                     d          } n%# t          $ r |                     d          } Y nw xY wd|                     dd          z  } n<t          | t                    rdt          |           z  } n| d} nt          |           } | S )Nz'%s''''utf8raw_unicode_escaperR  NULL)
re   strrw   r   r   r{   bytesr   UnicodeDecodeErrorr   )vs    rg   r:  r:    s    !c8,hmm% & & SVV^^C...	Au		 	/  AA! 	/ 	/ 	/-..AAA	/QYYsD)))	As		 3q66M	
FFHs   5B B-,B-c                   L    e Zd ZdZdZd Zd Zed             Zd
dZ	d Z
d Zd	S )rf  TFc                     | j                             | j                   }| j                                        |_        |S rd   )r  r  __dict__rM  r1  s     rg   clonez
Node.clone  s3    n$$T^44}))++
ri   c                     t           rd   NotImplementedErrorr?  s     rg   r,  zNode.__sql__      !!ri   c                       fd}|S )Nc                 H    |                                  } |g|R i | |S rd   rd  )r   r  r  rd  r  s       rg   r  zNode.copy.<locals>.inner  s5    JJLLEF5*4***6***Lri   r   r  s   ` rg   rM  z	Node.copy  s#    	 	 	 	 	 ri   c                 V    || j         k    r|                                 }||_         |S | S rd   )_coercerd  )r   rm  rd  s      rg   coercezNode.coerce  s-    dl""JJLLE#EMLri   c                     dS r   r   r  s    rg   is_aliaszNode.is_alias  s    uri   c                     | S rd   r   r  s    rg   unwrapzNode.unwrap      ri   NT)r   r   r   rm  __isabstractmethod__rd  r,  staticmethodrM  rn  rp  rr  r   ri   rg   rf  rf    s        G   
" " "   \         ri   rf  c                   "    e Zd ZdZd Zd ZeZdS )ColumnFactoryrD  c                     || _         d S rd   ry  rC  s     rg   r  zColumnFactory.__init__      			ri   c                 ,    t          | j        |          S rd   )r%   rD  r   s     rg   r   zColumnFactory.__getattr__      di&&&ri   Nr   r   r   r  r  r   r  r   ri   rg   rx  rx    s6        I  ' ' 'KKKri   rx  c                       e Zd ZdZddZdS )_DynamicColumnr   Nc                 (    |t          |          S | S rd   )rx  r   instanceinstance_types      rg   __get__z_DynamicColumn.__get__  s     ***ri   rd   r   r   r   r  r  r   ri   rg   r  r    s-        I     ri   r  c                       e Zd ZdZddZdS )_ExplicitColumnr   Nc                 .    |t          d|z            | S )NzM%s specifies columns explicitly, and does not support dynamic column lookups.r   r  s      rg   r  z_ExplicitColumn.__get__  s.     *,456 6 6 ri   rd   r  r   ri   rg   r  r    s-        I     ri   r  c                       e Zd Zd Zd ZdS )Starc                     || _         d S rd   )rN  r  s     rg   r  zStar.__init__"      ri   c                 v    |                     t          | j                                                d          S )Nz.*)r0  rS   rN  r"  r?  s     rg   r,  zStar.__sql__$  s,    ww~dk2233;;DAAAri   Nr   r   r   r  r,  r   ri   rg   r  r  !  s7          B B B B Bri   r  c                        e Zd Z e            Zd fd	Zej        d             Zd Z	e
d             Zej        dfdZddZdd	Zd
 Zd Zd Z xZS )SourceNc                 d    t          t          |                                            || _        d S rd   )r  r  r  _alias)r   r  r  s     rg   r  zSource.__init__+  s*    fd$$&&&ri   c                     || _         d S rd   r  r   names     rg   r  zSource.alias/      ri   c                 H    |st          d          f}t          | f|          S )Nr   )rW   rV   r   columnss     rg   selectzSource.select3  s)     	"3xxkGtgw'''ri   c                      t          |           S rd   )r  r  s    rg   __star__zSource.__star__8  s    Dzzri   c                 &    t          | |||          S rd   Join)r   dest	join_typeons       rg   rV  zSource.join<  s    D$	2...ri   c                 :    t          | |t          j        |          S rd   )r  rE   r5  r   r  r  s      rg   left_outer_joinzSource.left_outer_join?  s    D$444ri   Fc                 *    t          || |||          S N)	recursiver  materializedCTEr   r  r  r  r  s        rg   ctez
Source.cteB  $    4G ,. . . 	.ri   c                 <    | j         r| j         fS |j        |          fS rd   )r  r  r?  s     rg   r  zSource.get_sort_keyF  s'    ; 	"K>!!$'))ri   c                     |j         t          k    rV| j        r| j        |j        | <   |                    d                              t          |j        |                               |S N AS )r  rI  r  r  r"  r0  r6   r?  s     rg   apply_aliaszSource.apply_aliasK  s_     9$${ 6*.+!$'KK##F3+<T+B$C$CDDD
ri   c                     | j         r| j         |j        | <   |                    t          |j        |                              S rd   )r  r  r0  r6   r?  s     rg   apply_columnzSource.apply_columnT  s=    ; 	2&*kCd#wwvc/566777ri   rd   FNN)r   r   r   r  rf   r  rf  rM  r  r  r  r  rE   r4  rV  r  r  r  r  r  r  r  s   @rg   r  r  (  s       A      
Y  Y( ( (
   X $(:$ / / / /5 5 5 5. . . .* * *
  8 8 8 8 8 8 8ri   r  c                        e Zd Z fdZej        d             Zd Zd Zd Z	d Z
d Zd Z eej                  Z eej                  Z eej                  Z eej                  Z xZS )	_HashableSourcec                 p     t          t          |           j        |i | |                                  d S rd   )r  r  r  _update_hashr   r  r  r  s      rg   r  z_HashableSource.__init__[  s=    -ot$$-t>v>>>ri   c                 <    || _         |                                  d S rd   )r  r  r  s     rg   r  z_HashableSource.alias_  s!    ri   c                 8    |                                  | _        d S rd   )	_get_hash_hashr  s    rg   r  z_HashableSource._update_hashd  s    ^^%%


ri   c                 D    t          | j        | j        | j        f          S rd   )hashr  _pathr  r  s    rg   r  z_HashableSource._get_hashg  s    T^TZ=>>>ri   c                     | j         S rd   )r  r  s    rg   __hash__z_HashableSource.__hash__j  s
    zri   c                     t          |t                    r| j        |j        k    S t          | t          j        |          S rd   )re   r  r  r  rK   r   r   others     rg   __eq__z_HashableSource.__eq__m  7    e_-- 	-:,,$u---ri   c                     t          |t                    r| j        |j        k    S t          | t          j        |          S rd   )re   r  r  r  rK   r   r  s     rg   __ne__z_HashableSource.__ne__r  r  ri   c                       fd}|S )Nc                 &    t          | |          S rd   r  r   r   ops     rg   r  z!_HashableSource._e.<locals>.innerx  s    dB,,,ri   r   )r  r  s   ` rg   _ez_HashableSource._ew  s!    	- 	- 	- 	- 	-ri   )r   r   r   r  rf  rM  r  r  r  r  r  r  r  rK   r   __lt__r   __le__r   __gt__r   __ge__r  r  s   @rg   r  r  Z  s             
Y  Y& & &? ? ?  . . .
. . .
   RYYFRZZFRYYFRZZFFFFFri   r  c                 <     t                      fd            }|S )Nc                 b     | g|R i |}| j         r|                    | j                   S |S rd   )rQ  bind)r   r  r  resultmeths       rg   r  z __bind_database__.<locals>.inner  sE    d,T,,,V,,> 	/;;t~...ri   r   )r  r  s   ` rg   __bind_database__r    s3    
4[[    [
 Lri   c                       fd}|S )Nc                 4    r|| }} t          | |          S )N)r  r  )r   r  invertedr  s     rg   r  z__join__.<locals>.method  s)     	&%DD%95555ri   r   )r  r  r  s   `` rg   __join__r    s)    6 6 6 6 6 6 Mri   c                   b   e Zd Z eej                  Z eej                  Z eej	                  Z
 eej                  Z eej                  Z eej        d          Z eej        d          Z eej	        d          Z eej        d          Z eej        d          ZdS )	BaseTableTr  N)r   r   r   r  rE   r4  __and__r5  r   r6  __sub__r8  __or__r9  __mul____rand____radd____rsub____ror____rmul__r   ri   rg   r  r    s        htz""Ght''Ght'((GXdo&&Fhtz""Gx
T222Hx$777Hx(4888Hht666Gx
T222HHHri   r  c                   &    e Zd Zd Zd Zd Zd ZdS )_BoundTableContextc                 "    || _         || _        d S rd   )r/  r  )r   r/  r  s      rg   r  z_BoundTableContext.__init__  s    
 ri   c                 @     t                     fd            }|S )Nc                  |    t          j        j                  5   | i |cd d d            S # 1 swxY w Y   d S rd   )r  r/  r  r  s     rg   r  z*_BoundTableContext.__call__.<locals>.inner  s    #DJ>> + +r4*6**+ + + + + + + + + + + + + + + + + +s   155r   r  s   `` rg   r  z_BoundTableContext.__call__  r  ri   c                     | j         j        | _        | j                             | j                   | j         j        $| j         j                            | j                   | j         S rd   )r/  rQ  _orig_databaser  r  _modelr  s    rg   r  z_BoundTableContext.__enter__  sS    "j2
&&&:(J""4=111zri   c                     | j                             | j                   | j         j        &| j         j                            | j                   d S d S rd   )r/  r  r  r  r%  s       rg   r  z_BoundTableContext.__exit__  sN    
+,,,:(J""4#677777 )(ri   Nr   r   r   r  r  r  r  r   ri   rg   r  r    sP        ! ! !    8 8 8 8 8ri   r  c                        e Zd Z	 	 d fd	Zd ZddZddZd Zed             Z	edd            Z
edd	            Zedd
            Zed             Zd Z xZS )rY   Nc           	         || _         || _        || _        || _        |r||fn|f| _        || _        || _        t          t          |           	                    |           |7t                      | _        |D ]!}t          | |t          | |                     "|r'| j        r| n| j        }	t          |	|          | _        d S d | _        d S Nr  )r   _columns_primary_key_schemar  r  rQ  r  rY   r  r  rf   setattrr%   r   primary_key)r   r  r  r  schemar  r  rQ  columncol_srcr  s             rg   r  zTable.__init__  s    ''-:fd^^D7
"eT##%#000 $&&DF! < <ffT6&:&:;;;; 	$"m7ddG&w<<D#Dri   c           	      t    t          | j        | j        | j        | j        | j        | j        | j                  S )N)r  r  r  r  r  rQ  )rY   r   r  r  r  r  r  rQ  r  s    rg   rd  zTable.clone  s=    MM)<+;n& & & 	&ri   c                     || _         | S rd   rQ  r   r  s     rg   r  z
Table.bind      !ri   c                 "    t          | |          S rd   )r  r  s     rg   bind_ctxzTable.bind_ctx  s    !$111ri   c                 P    t          | j        | j        | j        | j        f          S rd   )r  r  r  r  r  r  s    rg   r  zTable._get_hash  s!    T^TZdkJKKKri   c                 ^     |s j         r fd j         D             }t           f|          S )Nc                 0    g | ]}t          |          S r   )r%   )rW  r  r   s     rg   rZ  z Table.select.<locals>.<listcomp>  s#    HHHvdF++HHHri   )r  rV   r  s   ` rg   r  zTable.select  sC     	I4= 	IHHHH$-HHHGtgw'''ri   c                     |rC|i n|}| j         r| n| j        }|                                D ]\  }}||t          ||          <   t	          | ||          S Ninsertr  )r  rf   itemsr   Insert)r   r  r  r  srckeyrn   s          rg   r  zTable.insert  sp     	2!>RRvF-3$$TVC$llnn 2 2
U,1wsC(())d67;;;;ri   c                 H     | j         d||d|                    d          S )Nr  REPLACEr   r  on_conflict)r   r  r  r  s       rg   r{   zTable.replace  sD    B%wB B:@B BY''	)ri   c                     |rC|i n|}|                                 D ](\  }}| j        r| n| j        }||t          ||          <   )t	          | |          S )Nr   )r  r  rf   r   Update)r   r   r  r  rn   r  s         rg   r   zTable.update  sn     	2!>RRvF$llnn 2 2
U"m7dd,1wsC(())d6****ri   c                      t          |           S rd   )Deleter  s    rg   deletezTable.delete  s    d||ri   c                 B   |j         t          k    r!|                    t          | j                   S | j        r| j        |j        | <   |j         t          k    r4|                     |                    t          | j                             S | 	                    |          S rd   )
r  rK  r0  r6   r  r  r  rI  r  r  r?  s     rg   r,  zTable.__sql__  s    9$$7764:.///; 	2&*kCd#9$$##CGGFDJ,?$@$@AAA $$S)))ri   )NNNNNNrd   r  )r   r   r   r  rd  r  r  r  r  r  r  r{   r   r  r,  r  r  s   @rg   rY   rY     s6       DH48$ $ $ $ $ $.	& 	& 	&   2 2 2 2L L L ( ( (
 < < < < ) ) ) )
 + + + +   * * * * * * *ri   rY   c                   <     e Zd Zej        ddf fd	Zd Zd Z xZS )r  Nc                     t          t          |                               |           || _        || _        || _        || _        d S r  )r  r  r  lhsr   r  _on)r   r#  r   r  r  r  r  s         rg   r  zJoin.__init__  sD    dD"""///"ri   c                     || _         | S rd   )r$  )r   	predicates     rg   r  zJoin.on   s    ri   c                    |                     | j                                      d| j        z                                 | j                   | j        -|                    d                               | j                   |S )N %s  ON )r0  r#  r"  r  r   r$  r?  s     rg   r,  zJoin.__sql__$  sd    	
#dh--
'&4>)
*
*
#dh---8KK##DH---
ri   )	r   r   r   rE   r4  r  r  r,  r  r  s   @rg   r  r    sd        +/:$d              ri   r  c                   L     e Zd Zd fd	Zd Zej        d             Zd Z xZ	S )r`   Nc                 v    || _         || _        t          t          |                               |           d S r  )r  r  r  r`   r  )r   valuesr  r  r  s       rg   r  zValuesList.__init__/  s8    j$((u(55555ri   c                 ^    t          | j        t          | j                  | j        f          S rd   )r  r  idr  r  r  s    rg   r  zValuesList._get_hash4  s%    T^R%5%5t{CDDDri   c                     || _         d S rd   )r  )r   namess     rg   r  zValuesList.columns7  s    ri   c                    | j         r| j         |j        | <   |j        t          k    s|j        t          k    r ||j                   5  |                    d                              t          d | j	        D                                 }d d d            n# 1 swxY w Y   |j        t          k    rz|                    d                              t          |j        |                               | j        r3d | j        D             }|                    t          |                     n-|                    t          |j        |                               |S )Nr  zVALUES c                 ,    g | ]}t          |          S r   EnclosedNodeListrW  rows     rg   rZ  z&ValuesList.__sql__.<locals>.<listcomp>C  s4     +J +J +J58+C00+J +J +Jri   r  c                 ,    g | ]}t          |          S r   )r6   rW  rf   s     rg   rZ  z&ValuesList.__sql__.<locals>.<listcomp>I  s    AAAaq		AAAri   )r  r  r  rI  r  r  r"  r0  CommaNodeListr  r6   r  r5  )r   r@  entitiess      rg   r,  zValuesList.__sql__;  s   ; 	2&*kCd#9$$	\(A(AS_!4555 M M	**M +J +J<@L+J +J +J K K L L M M M M M M M M M M M M M M M yL((F##''s/@/F(G(GHHH= 8AA4=AAAHGG,X66777GGF3,T233444
s   	ABB!Br  )
r   r   r   r  r  rf  rM  r  r,  r  r  s   @rg   r`   r`   .  s{        6 6 6 6 6 6
E E E 
Y  Y      ri   r`   c                   J     e Zd Z	 	 d	 fd	Zd Zd Zd ZeZd ZeZ	d Z
 xZS )
r  FNc                     || _         || _        || _        || _        |d |D             }|| _        d|_        t          t          |                               |           d S )Nc                 Z    g | ](}t          |t                    rt          |          n|)S r   re   r]  r6   r9  s     rg   rZ  z CTE.__init__.<locals>.<listcomp>Y  sA     ) ) ) %/q#$6$6=vayyyA ) ) )ri   r   r  )	r  _query
_recursive_materializedr  	_cte_listr  r  r  )r   r  rB  r  r  r  r  s         rg   r  zCTE.__init__R  sy    #)) ) ') ) )Gc4!!!-----ri   c                 J   |st          d          t          | j        d          r; | j        j        j        |                     |                               |           }nAt          | f|                              |                               | j        j	                  }|S )NzFselect_from() must specify one or more columns from the CTE to select.model)
r  r  r@  rE  r  from_with_cterV   r  rQ  r   r  rB  s      rg   select_fromzCTE.select_from_  s     	8 7 8 8 8 4;(( 	3T[&g'eDkkhtnn E
 TGW--htnnd4;011  ri   c                 ^    t          | j        | j        t          | j                  f          S rd   )r  r  r  r.  r@  r  s    rg   r  zCTE._get_hasho  s#    T^T["T[//BCCCri   c                 |    | j                                         }t          | j        ||z   | j        | j                  S rd   r@  rd  r  r  rA  r  r   r   rd  s      rg   	union_allzCTE.union_allr  3    !!##4;T_dmLLLri   c                 |    | j                                         }t          | j        ||z  | j        | j                  S rd   rL  rM  s      rg   unionz	CTE.unionw  rO  ri   c                    |j         t          k    r'|                    t          | j                            S |                                5  | j        |j        | <   |                    t          | j                             | j        r:|                    d                              t          | j                             |                    d           | j
        r|                    d           n| j
        du r|                    d           |                    d          5  |                    | j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )Nr   r  zMATERIALIZED FzNOT MATERIALIZED Tr2  )r  rM  r0  r6   r  r*  r  r  r"  r5  rB  rH  r@  r?  s     rg   r,  zCTE.__sql__|  s   9	!!776$+..///^^ 	% 	%&*kCd#GGF4;''(((} FC  $$%5dm%D%DEEEKK! 1O,,,,#u,,/000!!d!33 % %$$$% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 
s7   CE(*EE(E	E(E	E((E,/E,r  )r   r   r   r  rI  r  rN  r   rQ  r  r,  r  r  s   @rg   r  r  Q  s        =A". . . . . .   D D DM M M GM M M F      ri   r  c                      e Zd ZdZej        dd            Zd Zd Zd Z	d Z
ddZeZddZeZd	 ZddZ eej                  Z eej                  Z eej                  Z eej                  Z eej                  Z eej                  xZZ eej                  Z  eej        d          Z! eej        d          Z" eej        d          Z# eej        d          xZ$Z% eej        d          Z& eej        d          Z' eej        d          Z(d Z)d Z* eej+                  Z, eej-                  Z. eej/                  Z0 eej1                  Z2 eej3                  Z4 eej5                  Z6 eej7                  Z8 eej9                  Z: eej7                  Z; eej9                  Z< eej=                  Z> eej?                  Z@ eej3                  ZA eejB                  ZC eejD                  ZE eejF                  ZGddZHd ZId ZJd ZKd ZLd ZMd ZNd ZOdZPd ZQd ZRd ZSdS )
ColumnBaseNc                     || _         d S rd   )
_converter)r   r6  s     rg   r6  zColumnBase.converter  s    #ri   c                 *    |rt          | |          S | S rd   )Aliasr   r  s     rg   r  zColumnBase.alias  s     	&u%%%ri   c                     | S rd   r   r  s    rg   unaliaszColumnBase.unalias  rs  ri   c                 "    t          | |          S rd   )BindTo)r   r  s     rg   bind_tozColumnBase.bind_to  s    dD!!!ri   c                 "    t          | |          S rd   )r!   )r   as_types     rg   castzColumnBase.cast  s    D'"""ri   c                 &    t          | ||          S N)	collationnulls)Ascr   rd  re  s      rg   asczColumnBase.asc  s    49E::::ri   c                 &    t          | ||          S rc  )Descrg  s      rg   desczColumnBase.desc  s    DIU;;;;ri   c                      t          |           S rd   )Negatedr  s    rg   
__invert__zColumnBase.__invert__  r  ri   Fc                       fd}|S )z
        Lightweight factory which returns a method that builds an Expression
        consisting of the left-hand and right-hand operands, using `op`.
        c                 L    rt          ||           S t          | |          S rd   r  )r   r   invr  s     rg   r  zColumnBase._e.<locals>.inner  s/     1!#r4000dB,,,ri   r   )r  rq  r  s   `` rg   r  zColumnBase._e  s)    
	- 	- 	- 	- 	- 	- ri   T)rq  c                 X    |t           j        nt           j        }t          | ||          S rd   )rK   r   r   r  r  s      rg   r  zColumnBase.__eq__  s%    kRUUru$C(((ri   c                 X    |t           j        nt           j        }t          | ||          S rd   )rK   r   r   r  r  s      rg   r  zColumnBase.__ne__  s%    +RYY25$C(((ri   c                 X    |rt           j        nt           j        }t          | |d           S rd   )rK   r   r   r  )r   is_nullr  s      rg   ru  zColumnBase.is_null  s&    ,RUU29$D)))ri   c                    |                     d          dk    s2|                     d          dk    s|                     d          dk    r~|                    dd                              dd                              dd          }t          t          ||z  d	          t	          d
          t          dd	          f          S ||z  S )N_r   r   \z\\z\_z\%Fr5  ESCAPE)findr{   NodeListr_   rW   )r   r   templates      rg   _escape_like_exprzColumnBase._escape_like_expr  s    66#;;!qvvc{{a//166$<<13D3D		$''//U;;CCCOOA hle444Hde,,,. / / / !|ri   c           	          t          |t                    r5t          dt          j        t          |t          j        d                    }n|                     |d          }t          | t          j        |          S )Nr   z%%%s%%re   rf  r  rK   r  r}  r   r   s     rg   containszColumnBase.contains  sg    c4   	8S")'RY<<> >CC ((h77C$#...ri   c                     t          |t                    rt          |t          j        d          }n|                     |d          }t          | t          j        |          S )Nr   z%s%%r  r   s     rg   
startswithzColumnBase.startswith  R    c4   	6S")S11CC((f55C$#...ri   c                     t          |t                    rt          dt          j        |          }n|                     |d          }t          | t          j        |          S )Nr   z%%%sr  r   s     rg   endswithzColumnBase.endswith  r  ri   c           
      r    t          | t          j        t          |t	          d          |f                    S )Nr   )r  rK   r  r{  rW   )r   lohis      rg   betweenzColumnBase.between	  s+    $
Hb#e**b5I,J,JKKKri   c                 8    t          | t          j        |          S rd   StringExpressionrK   r  r   s     rg   concatzColumnBase.concat  s    bi555ri   c                     t          |t                    r=|j        |j        t	          d          |                     |j        |j                  S | |k    S )Nz4BETWEEN range must have both a start- and end-point.)re   slicestartstopr  r  r  s     rg   r  zColumnBase.__getitem__  s\    dE"" 	7z!TY%6  ". / / /<<
DI666t|ri   c                 >    t          t          d          | f          S )NDISTINCTr{  rW   r  s    rg   distinctzColumnBase.distinct  s    Z$/000ri   c                 D    t          | t          d|z            f          S )N
COLLATE %sr  r   rd  s     rg   collatezColumnBase.collate  s"    s<)#;<<=>>>ri   c                     dS r  r   r?  s     rg   r  zColumnBase.get_sort_key  s    rri   rd   r  r  rt  )Tr   r   r   rV  rf  rM  r6  r  r[  r^  ra  rh  __pos__rk  __neg__rn  r  rK   r   r  r   r  r   r   r   r  r   r  r   __div____truediv__r   __xor__r  r  r  __rdiv____rtruediv__r  r  __rxor__r  r  r   r  r   r  r   r  r   r  r   
__lshift__r   
__rshift__r   __mod__r   __pow__r  r  r   bin_andr   bin_orin_r   not_inr  r  r  iregexpru  r}  r  r  r  r  r  r  __iter__r  r  r  r   ri   rg   rT  rT    s       J	Y$ $ $ Y$  
  " " "# # #; ; ; ;G< < < <G  	 	 	 	 bjjGRYYFbjjGbjjGbjjGBrvJJ&GkbjjGr"&d###Hr"&d###Hr"&d###H bT2222H|r"&d###HbD!!!Gr"&d###H) ) )) ) ) RYYFRZZFRYYFRZZFBEJBEJbkkGbllG2bg;;DBrxLLEbnnGR	]]F
"RU))CR	]]FR	]]FbnnG* * * *
 
 
/ / // / // / /L L L6 6 6   H1 1 1? ? ?    ri   rT  c                   &    e Zd Zd Zd Zd Zd ZdS )r%   c                 "    || _         || _        d S rd   )rN  r  )r   rN  r  s      rg   r  zColumn.__init__!  s    			ri   c                 x    |j         t          k    r| j        fS | j                            |          | j        fz   S rd   )r  rK  r  rN  r  r?  s     rg   r  zColumn.get_sort_key%  s8    9$$I<;++C00DI<??ri   c                 8    t          | j        | j        f          S rd   )r  rN  r  r  s    rg   r  zColumn.__hash__+  s    T[$),---ri   c                 p   |j         t          k    r'|                    t          | j                            S |                                5  |                    | j                                      d                              t          | j                            cd d d            S # 1 swxY w Y   d S NrS  )r  rK  r0  r6   r  r8  rN  r"  r?  s     rg   r,  zColumn.__sql__.  s    9$$776$),,---!!## P Pwwt{++33C88<<VDI=N=NOOP P P P P P P P P P P P P P P P P Ps   AB++B/2B/N)r   r   r   r  r  r  r,  r   ri   rg   r%   r%      sX          @ @ @. . .P P P P Pri   r%   c                        e Zd Zd Zd Zd ZdS )WrappedNodec                 l    || _         t          |dd          | _        t          |dd           | _        d S )Nrm  TrV  )rD  r   rm  rV  rC  s     rg   r  zWrappedNode.__init__7  s3    	tY55!$d;;ri   c                 4    | j                                         S rd   )rD  rp  r  s    rg   rp  zWrappedNode.is_alias<  s    y!!###ri   c                 4    | j                                         S rd   )rD  rr  r  s    rg   rr  zWrappedNode.unwrap?  s    y!!!ri   N)r   r   r   r  rp  rr  r   ri   rg   r  r  6  sA        < < <
$ $ $" " " " "ri   r  c                       e Zd ZdZd Zd ZdS )EntityFactoryry  c                     || _         d S rd   ry  rC  s     rg   r  zEntityFactory.__init__E  r{  ri   c                 ,    t          | j        |          S rd   )r6   rD  r   s     rg   r   zEntityFactory.__getattr__G  r}  ri   N)r   r   r   r  r  r   r   ri   rg   r  r  C  s7        I  ' ' ' ' 'ri   r  c                       e Zd ZdZddZdS )_DynamicEntityr   Nc                 2    |t          |j                  S | S rd   )r  r  r  s      rg   r  z_DynamicEntity.__get__M  s     111ri   rd   r  r   ri   rg   r  r  K  s-        I     ri   r  c                        e Zd Z e            Z fdZd Zed             Zej	        d             Zd
dZ
d Zd Zd	 Z xZS )rX  c                 f    t          t          |                               |           || _        d S rd   )r  rX  r  r  )r   rD  r  r  s      rg   r  zAlias.__init__V  s,    eT##D)))ri   c                 *    t          | j                  S rd   )r  r  r  s    rg   r  zAlias.__hash__Z      DK   ri   c                     | j         S rd   r  r  s    rg   r  z
Alias.name]  s
    {ri   c                     || _         d S rd   r  r   rn   s     rg   r  z
Alias.name`      ri   Nc                 >    || j         S t          | j         |          S rd   )rD  rX  rY  s     rg   r  zAlias.aliasd  s!    =9E***ri   c                     | j         S rd   ry  r  s    rg   r[  zAlias.unaliasj  
    yri   c                     dS rG  r   r  s    rg   rp  zAlias.is_aliasm  s    tri   c                    |j         t          k    rR|                    | j                                      d                              t          | j                            S |                    t          | j                            S r  )r  rI  r0  rD  r"  r6   r  r?  s     rg   r,  zAlias.__sql__p  sd    9$$S^^WV__S,,--/
 776$+..///ri   rd   )r   r   r   r  rf   r  r  r  r  setterr  r[  rp  r,  r  r  s   @rg   rX  rX  S  s        A    ! ! !   X	[  [+ + + +    0 0 0 0 0 0 0ri   rX  c                   $     e Zd Z fdZd Z xZS )r]  c                 f    t          t          |                               |           || _        d S rd   )r  r]  r  r  )r   rD  r  r  s      rg   r  zBindTo.__init__{  s,    fd$$T***			ri   c                 6    |                     | j                  S rd   r0  rD  r?  s     rg   r,  zBindTo.__sql__  s    wwty!!!ri   r   r   r   r  r,  r  r  s   @rg   r]  r]  z  sG            " " " " " " "ri   r]  c                       e Zd Zd Zd ZdS )rm  c                     | j         S rd   ry  r  s    rg   rn  zNegated.__invert__  r  ri   c                 \    |                     d                              | j                  S )NzNOT )r"  r0  rD  r?  s     rg   r,  zNegated.__sql__  s$    {{6""&&ty111ri   N)r   r   r   rn  r,  r   ri   rg   rm  rm    s2          2 2 2 2 2ri   rm  c                   &    e Zd Zd Zd Zd Zd ZdS )BitwiseMixinc                 ,    |                      |          S rd   )r  r  s     rg   r  zBitwiseMixin.__and__  s    ||E"""ri   c                 ,    |                      |          S rd   )r  r  s     rg   r  zBitwiseMixin.__or__  s    {{5!!!ri   c                 P    |                      |                                          S rd   )r  bin_negatedr  s     rg   r  zBitwiseMixin.__sub__  s     ||E--//000ri   c                      t          |           S rd   )BitwiseNegatedr  s    rg   rn  zBitwiseMixin.__invert__  s    d###ri   N)r   r   r   r  r  r  rn  r   ri   rg   r  r    sP        # # #" " "1 1 1$ $ $ $ $ri   r  c                   (    e Zd Zej        Zd Zd ZdS )r  c                     | j         S rd   ry  r  s    rg   rn  zBitwiseNegated.__invert__  r  ri   c                     |j         j        r+|j         j                            | j        | j                  }n| j        }|                    |                              | j                  S rd   )r  
operationsr  r  r"  r0  rD  )r   r@  op_sqls      rg   r,  zBitwiseNegated.__sql__  sX    9 	Y)--dgtw??FFWF{{6""&&ty111ri   N)r   r   r   rK   r  r  rn  r,  r   ri   rg   r  r    s:        		B  2 2 2 2 2ri   r  c                       e Zd ZddZd ZdS )r_   NTc                 `   || _         || _        |ot          | j         t                    | _        | j        rpg | _        | j         D ]_}t          |t                    r| j                            |           2| j                            t          || j                             `d S d | _        d S rd   )	rn   r6  re   multi_typesmultir,  rf  r  r_   )r   rn   r6  unpackr  s        rg   r  zValue.__init__  s    
"C
4:{ C C
: 	DK
 D DdD)) DK&&t,,,,K&&uT4>'B'BCCCC	D D DKKKri   c                     | j         r'|                    t          | j                            S |                    | j        | j                  S rd   )r  r0  r5  r,  rn   r6  r?  s     rg   r,  zValue.__sql__  sA    : 	:77+DK88999yyT^444ri   rG  r  r   ri   rg   r_   r_     s7           5 5 5 5 5ri   r_   c                       e Zd Zd ZdS )ValueLiteralsc                      |d          5  |                     | j                  cd d d            S # 1 swxY w Y   d S )NT)r9  r  r?  s     rg   r,  zValueLiterals.__sql__  s    S%%% 	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   488Nr   r   r   r,  r   ri   rg   r  r    #        & & & & &ri   r  c                 &    t          | |d          S NFr  )r_   )rn   r6  s     rg   r   r     s    	%0000ri   c                   $     e Zd Z fdZd Z xZS )r!   c                 t    t          t          |                               |           || _        d| _        d S r   )r  r!   r  _castrm  )r   rD  ra  r  s      rg   r  zCast.__init__  s3    dD""4(((
ri   c                     |                     d                              | j                                       d| j        z            S )NzCAST(z AS %s))r"  r0  rD  r  r?  s     rg   r,  zCast.__sql__  s8    !!TYTZ/00	2ri   r  r  s   @rg   r!   r!     sG            
2 2 2 2 2 2 2ri   r!   c                   4     e Zd Zd fd	ZddZd Zd Z xZS )OrderingNc                     t          t          |                               |           || _        || _        || _        |r(|                                dvrt          d|z            d S d S )N)rm  lastz<Ordering nulls= parameter must be "first" or "last", got: %s)r  r  r  	directionrd  re  rl  r  )r   rD  r  rd  re  r  s        rg   r  zOrdering.__init__  s    h&&t,,,""
 	8U[[]]*;;; /167 8 8 8	8 	8;;ri   c                 8    t          | j        | j        |          S rd   )r  rD  r  r  s     rg   r  zOrdering.collate  s    	4>9===ri   c                     |                                 dk    rd\  }}n-|                                 dk    rd\  }}nt          d          t          d | j                                        |ff|          S )Nr  )r   r   rm  )r   r   z&unsupported value for nulls= ordering.)rl  r  r    rD  ru  )r   re  ifnullnotnulls       rg   _null_ordering_casezOrdering._null_ordering_case  su    ;;==F"""OFGG[[]]g%%"OFGGEFFFDDI--//8:GDDDri   c                    | j         rL|j        j        s@|                    |                     | j                                                 d           |                    | j                                      d| j        z             | j        r|                    d| j        z             | j         r)|j        j        r|                    d| j         z             |S )N,  %sz COLLATE %sz	 NULLS %s)	re  r  nulls_orderingr0  r  r"  rD  r  rd  r?  s     rg   r,  zOrdering.__sql__  s    : 	Hci6 	HGGD,,TZ8899AA$GGG	""54>#9:::> 	8KK6777: 	2#)2 	2KKdj0111
ri   r  rd   )r   r   r   r  r  r  r,  r  r  s   @rg   r  r    sr        8 8 8 8 8 8> > > >E E E	 	 	 	 	 	 	ri   r  c                 &    t          | d||          S )NASCr  rD  rd  re  s      rg   rf  rf    s    D%E222ri   c                 &    t          | d||          S )NDESCr  r  s      rg   rj  rj    s    D&)U333ri   c                   "    e Zd ZddZd Zd ZdS )r  Fc                 >    || _         || _        || _        || _        d S rd   )r#  r  r   flat)r   r#  r  r   r
  s        rg   r  zExpression.__init__   s"    			ri   c                    | j          dd}| j        x}}t          |t                    r|                                }t          |t
                    r*|j        r#|j        |d<   t          |t                    |d<   nd |d<   |j	        j
        r+|j	        j
                            | j        | j                  }n| j        } |d	i |5  | j        t          j        k    p| j        t          j        k    }| j        }|rN|                     ||          r8|                    | j        t          j        k    rdnd          cd d d            S |9| j        t          j        k    s| j        t          j        k    rt+          d          }|                    | j                                      d|z                                |          cd d d            S # 1 swxY w Y   d S )
NT)r  in_exprr6  
is_fk_exprz0 = 1z1 = 1r\  r(  r   )r
  r#  re   r  rr  r8   rm  db_valuer<   r  r  r  r  rK   r   r   r   _is_rhs_emptyr"  r   r   rW   r0  )r   r@  rO  rD  raw_noder  op_inr   s           rg   r,  zExpression.__sql__  s%   (,	MdCC	 ("xh,, 	%??$$D dE"" 	*x'7 	*%)]Ik"&0&G&GIl##%)Ik"9 	Y)--dgtw??FFWFS9 	 	 Gru$<29(<E(C Q%%c3// Q;;$'RU2B2BwwPP	 	 	 	 	 	 	 	 {25 0 0DGry4H4H&kkS]]WVf_--SXX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A5G
A=GGGc                     t          |t                    rt          |           S t          |t                    r|j        o|j         S |                                                    |          d         dk    S )Nr   ())re   r  boolr_   r  r,  r  rE  )r   r   r@  s      rg   r  zExpression._is_rhs_empty,  sk    c;'' 	6Cyy= U## 	6I0cj.1::<<%%c**1-55ri   Nr  )r   r   r   r  r,  r  r   ri   rg   r  r    sG           $ $ $L6 6 6 6 6ri   r  c                       e Zd Zd Zd ZdS )r  c                 ,    |                      |          S rd   )r  r   s     rg   r   zStringExpression.__add__6  s    {{3ri   c                 8    t          |t          j        |           S rd   r  )r   r#  s     rg   r  zStringExpression.__radd__8  s    RY555ri   N)r   r   r   r   r  r   ri   rg   r  r  5  s2             6 6 6 6 6ri   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )r6   c                 (    d |D             | _         d S )Nc                     g | ]}||S r   r   )rW  ps     rg   rZ  z#Entity.__init__.<locals>.<listcomp>>  s    +++A+a+++ri   )r  )r   r[  s     rg   r  zEntity.__init__=  s    +++++


ri   c                 &    t          | j        |gz    S rd   )r6   r  r   s     rg   r   zEntity.__getattr__@  s    tzTF*++ri   c                 *    t          | j                  S rd   )rb  r  r?  s     rg   r  zEntity.get_sort_keyC  s    TZ   ri   c                 \    t          | j        j        t          | j                  f          S rd   )r  r  r   rb  r  r  s    rg   r  zEntity.__hash__F  s$    T^,eDJ.?.?@AAAri   c                     |j         j        pdd         fd| j        D             }|                    t          |                    S )N""r   c                 <    g | ]}|                               S r   )r{   )rW  r  qrY  s     rg   rZ  z"Entity.__sql__.<locals>.<listcomp>L  s'    AAA199Q,,AAAri   )r  r\  r  r"  )r   r@  escapedr"  rY  s      @@rg   r,  zEntity.__sql__I  sU    io-NAAAAAdjAAA{{5+66777ri   N)r   r   r   r  r   r  r  r,  r   ri   rg   r6   r6   <  sb        , , ,, , ,! ! !B B B8 8 8 8 8ri   r6   c                       e Zd ZddZd ZdS )rW   Nc                 "    || _         || _        d S rd   r0  rU  r   r0  rU  s      rg   r  zSQL.__init__Q  s    ri   c                     |                     | j                   | j        r"| j        D ]}|                    |dd           |S NF)r<  )r"  r0  rU  rn   r   r@  r;  s      rg   r,  zSQL.__sql__U  sQ    DH; 	9 9 9		%%	8888
ri   rd   r  r   ri   rg   rW   rW   P  s7               ri   rW   c                     t          d| z            }|s|S t          t          d          t          |          |f          S )Nz
CHECK (%s)
CONSTRAINT)rW   r{  r6   )
constraintr  checks      rg   r#   r#   ]  sD    z)**E S&&te<===ri   c                 &    t          d| z            S )Nz
DEFAULT %srW   rc  s    rg   r/   r/   d  s    |e#$$$ri   c                       e Zd Z ed          ZddZd Zej        dd            Z	ej        d             Z
ej        dd            Z	 	 dd	Zd
 ZdS )Function)sumcountavgra  	array_aggTNc                     || _         || _        d | _        d | _        || _        |r$|                                | j        v r	d| _        d S || _        d S r   )r  	arguments_filter	_order_by_python_valuerl  no_coerce_functionsrm  )r   r  r8  rn  python_values        rg   r  zFunction.__init__k  sY    	") 	"DJJLLD$<<< DLLL!DLLLri   c                     fd}|S )Nc                       t          | fi |S rd   )r2  )r  r  r   s     rg   	decoratorz'Function.__getattr__.<locals>.decoratorw  s    D$11&111ri   r   )r   r   r@  s    ` rg   r   zFunction.__getattr__v  s"    	2 	2 	2 	2 	2ri   c                     || _         d S rd   )r9  )r   wheres     rg   filterzFunction.filter{      ri   c                     || _         d S rd   r:  )r   orderings     rg   order_byzFunction.order_by      !ri   c                     || _         d S rd   )r;  )r   funcs     rg   r=  zFunction.python_value  s    !ri   c           	          t          |t                    r||}|t          |          }nt          ||||||d          }t          | t	          d          |f          S )NT)partition_byrH  r  end
frame_typeexclude_inlineOVER)re   ra   WindowAliasr{  rW   )	r   rM  rH  r  rN  rO  windowrP  rD  s	            rg   overzFunction.over  ss    lF++ 	"!Fv&&DD|h %3:")49 9 9D s6{{D1222ri   c                    |                     | j                   t          | j                  s|                     d           n| j        }| j        rIt          |          }t          |d         t          d          t          | j                  f          |d<    |dt          | j                            5  |	                    t          d |D                                  d d d            n# 1 swxY w Y   | j        r@|                     d          	                    | j                                       d           |S )	Nr  rp  ORDER BYT)in_functionfunction_arg_countc                 \    g | ])}t          |t                    r|nt          |d           *S r  )re   rf  r_   )rW  args     rg   rZ  z$Function.__sql__.<locals>.<listcomp>  sE     *% *% *% 'sD11HSSuS%7H7H*% *% *%ri   z FILTER (WHERE r$  )r"  r  r   r8  r:  ra  r{  rW   r:  r0  r5  r9  )r   r@  r  s      rg   r,  zFunction.__sql__  s   DI4>"" 	'KK>D ~ EDzz#T"Xs:%24>%B%B%D E ER #dn:M:MNNN ' '( *% *%#*% *% *% & & ' ' '' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 < 	JKK)**..t|<<DDSIII
s   ;-C44C8;C8)TNrd   NNNNNNN)r   r   r   setr<  r  r   rf  rM  rC  rH  r=  rU  r,  r   ri   rg   r2  r2  h  s        #JKK	" 	" 	" 	"  
 
Y   Y 
Y" " Y" 
Y" " " Y" FJ373 3 3 3    ri   r2  c                   l    e Zd Z ed          Z ed          Z ed          Z ed          ZdZdZ	dZ
	 	 	 d fd
	ZddZej        d             Zej        d             Zej        d             Zej        dd            Zej        dd            Zedd            Zedd            Zd Z xZS )ra   zCURRENT ROWGROUPTIESz	NO OTHERSGROUPSRANGEROWSNFc
                    t          t          |                                            |$t          |t                    st	          |          }|$t          |t                    st	          |          }t          |          | _        t          |          | _        || _        || _	        | j        | j	        t          d          |pd| _        |	| _        || _        || _        || _        d S )Nz(Cannot specify WINDOW end without start.w)r  ra   r  re   rW   rd  rM  rH  r  rN  r  r  rQ  rO  _extends_exclude)r   rM  rH  r  rN  rO  extendsrP  r  rQ  r  s             rg   r  zWindow.__init__  s     	fd$$&&&Zs%;%;JJE?:c3#7#7?c((C(66$X..
:$("6GHHHls$ri   c                     |pd| _         | S Nre  r  rY  s     rg   r  zWindow.alias  s    lsri   c                 (    t           j        | _        d S rd   )ra   rb  rO  r  s    rg   as_rangezWindow.as_range  s     ,ri   c                 (    t           j        | _        d S rd   )ra   rc  rO  r  s    rg   as_rowszWindow.as_rows  s     +ri   c                 (    t           j        | _        d S rd   )ra   ra  rO  r  s    rg   	as_groupszWindow.as_groups  s     -ri   c                     || _         d S rd   )rf  r   rT  s     rg   rh  zWindow.extends  s    ri   c                 \    t          |t                    rt          |          }|| _        d S rd   )re   r]  rW   rg  )r   frame_exclusions     rg   rP  zWindow.exclude  s,    os++ 	3!/22O'ri   c                 H    | t          d          S t          d| z            S )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGr0  rc  s    rg   	followingzWindow.following  )    =,--->E)***ri   c                 H    | t          d          S t          d| z            S )NzUNBOUNDED PRECEDINGz%d PRECEDINGr0  rc  s    rg   	precedingzWindow.preceding  rw  ri   c                    |j         t          k    rC| j        s<|                    t	          | j                             |                    d            |d          5  g }| j        j| j        }t          |t                    rt	          |j                  }n$t          |t                    rt	          |          }|                    |           | j        r6|                    t          d          t          | j                  f           | j        r6|                    t          d          t          | j                  f           | j        Q| j        J| j        pd}|                    t          d|z            | j        t          d          | j        f           ni| j        1|                    t          | j        pd          | j        f           n1| j        *|                    t          d	| j        z                       | j        )|                    t          d
          | j        f           |                    t+          |                     d d d            n# 1 swxY w Y   |S )Nr  Tr2  zPARTITION BYrW  rc  z
%s BETWEENr   z%s UNBOUNDED PRECEDINGEXCLUDE)r  rI  rQ  r0  r6   r  r"  rf  re   ra   r]  r  rM  r>  rW   r:  rH  r  rN  rO  rg  r{  )r   r@  partsextframes        rg   r,  zWindow.__sql__  s   9$$T\$GGF4;''(((KKST""" 	% 	%E}(mc6** & ,,CCS)) & ++CS!!!  7''!$"3446 7 7 7 } 3
OO!$-002 3 3 3 z%$(*>16u,--JJJH	    
 'c$/";V<<djIJJJJ,S!9DO!KLLMMM}(c)nndm<===GGHUOO$$$=	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%> 
s    HI--I14I1)	NNNNNNNNFrd   )r   r   r   rW   CURRENT_ROWr_  r`  	NO_OTHERSra  rb  rc  r  r  rf  rM  rl  rn  rp  rh  rP  rv  rv  ry  r,  r  r  s   @rg   ra   ra     s       #m$$KCLLE3v;;DK  I FEDIMDH           *    
Y' ' Y' 
Y& & Y& 
Y( ( Y( 
Y   Y 
Y( ( ( Y(
 + + + \+
 + + + \+
$ $ $ $ $ $ $ri   ra   c                        e Zd Zd Zd Zd ZdS )rS  c                     || _         d S rd   )rT  rr  s     rg   r  zWindowAlias.__init__   r  ri   c                     || j         _        | S rd   )rT  r  )r   window_aliass     rg   r  zWindowAlias.alias#  s    )ri   c                 ^    |                     t          | j        j        pd                    S rj  )r0  r6   rT  r  r?  s     rg   r,  zWindowAlias.__sql__'  s&    wwvdk07C88999ri   N)r   r   r   r  r  r,  r   ri   rg   rS  rS    sA            : : : : :ri   rS  c                       e Zd ZddZd ZdS )_InFunctionTc                 "    || _         || _        d S rd   )rD  rX  )r   rD  rX  s      rg   r  z_InFunction.__init__,  s    	&ri   c                      || j                   5  |                    | j                  cd d d            S # 1 swxY w Y   d S )NrX  )rX  r0  rD  r?  s     rg   r,  z_InFunction.__sql__0  s    ST-... 	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   9= =Nrt  r  r   ri   rg   r  r  +  s7        ' ' ' '& & & & &ri   r  c                       e Zd ZddZd ZdS )r    Nc                 0    || _         || _        || _        d S rd   )r&  expression_tuplesdefault)r   r&  r  r  s       rg   r  zCase.__init__6  s    "!2ri   c           	      L   t          d          g}| j        |                    | j                   | j        D ]E\  }}|                    t          d          |t          d          t          |          f           F| j        6|                    t          d          t          | j                  f           |                    t          d                      |d          5  |                    t          |                    cd d d            S # 1 swxY w Y   d S )NCASEWHENTHENELSEENDFr  )	rW   r&  r  r  r>  r  r  r0  r{  )r   r@  clausesexprrn   s        rg   r,  zCase.__sql__;  sS   v;;->%NN4>***1 	> 	>KD%NNCKKKKU););= > > > ><#NNCKKT\)B)BCDDDs5zz"""SU### 	. 	.778G,,--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   *"DD Drd   r  r   ri   rg   r    r    5  s7           
. . . . .ri   r    c                       e Zd ZddZd ZdS )	ForUpdateNc                    |du rdn|}|                                                     d          r|d d         }d}n3|                                                     d          r|d d         }d}|r|rt          d          || _        |%t	          |t
          t          t          f          s|f}|| _        || _	        || _
        d S )NTz
FOR UPDATEnowaitizskip lockedizFOnly one of nowait and skip_locked may be used in a FOR UPDATE clause.)rl  r  r  _exprre   ra  r]  rb  _of_nowait_skip_locked)r   r  ofr  skip_lockeds        rg   r  zForUpdate.__init__J  s    #t||||::<<  ** 	9DFFZZ\\""=11 	:DK 	8k 	8 7 8 8 8 
>*R$U1C"D"D>B'ri   c                 .   |                     | j                   | j        :|                     d                              t	          | j                             | j        r|                     d           n| j        r|                     d           |S )Nz OF z NOWAITz SKIP LOCKED)r"  r  r  r0  r:  r  r  r?  s     rg   r,  zForUpdate.__sql__^  s    DJ8KK##M$($;$;<<<< 	(KK	"""" 	(KK'''
ri   NNNr  r   ri   rg   r  r  I  s7        ( ( ( ((    ri   r  c                       e Zd ZddZd ZdS )r{  r   Fc                 0    || _         || _        || _        d S rd   )nodesglueparens)r   r  r  r  s       rg   r  zNodeList.__init__j  s    
	ri   c                    t          | j                  }|dk    r| j        r|                    d          n|S | j        rf|dk    r`t	          | j        d         t
                    r@| j        d         j        s.| j        d                                         f}d|d         _        n| j        } || j                  5  t          |dz
            D ]7}|	                    ||                    |                    | j
                   8|	                    ||dz
                      d d d            n# 1 swxY w Y   |S )Nr   r  r   Tr2  )r   r  r  r"  re   r  r
  rd  r  r0  r  )r   r@  n_nodesr  is        rg   r,  zNodeList.__sql__o  su   dj//a<<(,<3;;t$$$<[ 	W\\djmZ00 *z!}! * Z]((**,E E!HMMJEST[))) 	( 	(7Q;'' ' 'a!!!DI&&&&GGE'A+&'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 
s   >A)D33D7:D7N)r   Fr  r   ri   rg   r{  r{  i  s7           
    ri   r{  c                 "    t          | d          S )Nr  r{  r  s    rg   r:  r:    s    E4   ri   c                 $    t          | dd          S )Nr  Tr  r  s    rg   r5  r5    s    E4&&&ri   c                   "    e Zd ZdZd Zd ZeZdS )
_Namespace_namec                     || _         d S rd   r  r  s     rg   r  z_Namespace.__init__  s    


ri   c                 "    t          | |          S rd   )NamespaceAttributer   s     rg   r   z_Namespace.__getattr__  s    !$---ri   Nr~  r   ri   rg   r  r    s6        I  . . .KKKri   r  c                       e Zd Zd Zd ZdS )r  c                 "    || _         || _        d S rd   )
_namespace
_attribute)r   	namespace	attributes      rg   r  zNamespaceAttribute.__init__  s    ##ri   c                     |                     | j        j        dz                                 t	          | j                            S r  )r"  r  r  r0  r6   r  r?  s     rg   r,  zNamespaceAttribute.__sql__  s8    .455VDO,,--	/ri   Nr  r   ri   rg   r  r    s2        $ $ $/ / / / /ri   r  r7   c                   D     e Zd Z fdZej        d             Zd Z xZS )r5   c                 r    t          t          |                                            || _        d| _        d S r   )r  r5   r  rB  _negatedr   rB  r  s     rg   r  zDQ.__init__  s/    b$  """
ri   c                      | j          | _         d S rd   )r  r  s    rg   rn  zDQ.__invert__  s     M)ri   c                 @    t          di | j        }| j        |_        |S r  )r5   rB  r  rC  s     rg   rd  zDQ.clone  s%    DJri   )	r   r   r   r  rf  rM  rn  rd  r  r  s   @rg   r5   r5     sd            
 
Y* * Y*      ri   r5   c                       t          |           S rd   r4  )as    rg   rh   rh     s    #A&& ri   c                       e Zd Zd ZdS )rS   c                     |                                 5  |                    | j                  cd d d            S # 1 swxY w Y   d S rd   )r8  r0  rD  r?  s     rg   r,  zQualifiedNames.__sql__  s     	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   <A A Nr  r   ri   rg   rS   rS     r  ri   rS   c                    t          | t                    rF|                     t          | j                  | j        t          | j                  | j                  S t          | t                    rt          |           S | S rd   )
re   r  r  qualify_namesr#  r  r   r
  rT  rS   ry  s    rg   r  r    su     $
## $~~mDH55tw+DH55tyB B 	B	D*	%	% $d###Kri   c                       e Zd Z	 	 	 ddZd Zd Zej        d             Zej        dd            Z	ej        d             Z
ej        d             Zej        d	             Zej        d
             ZdS )
OnConflictNc                     || _         || _        t          |          | _        || _        ||t          d          t          |          | _        || _        || _        d S )NzIonly one of "conflict_target" and "conflict_constraint" may be specified.)	_action_updaterd  	_preserve_wherer  _conflict_target_conflict_where_conflict_constraint)r   actionr   preserverB  conflict_targetconflict_whereconflict_constraints           rg   r  zOnConflict.__init__  su     %h//&+>+J G H H H ,_ = =-$7!!!ri   c                 8    |j                             | |          S rd   )r  conflict_statementr   r@  rB  s      rg   get_conflict_statementz!OnConflict.get_conflict_statement  s    y++D%888ri   c                 8    |j                             | |          S rd   )r  conflict_updater  s      rg   get_conflict_updatezOnConflict.get_conflict_update  s    y((u555ri   c                     || _         d S rd   )r  r  s     rg   r  zOnConflict.preserve  s     ri   c                     |r&|r$t          |t                    st          d          |pi }|r|                    |           || _        d S )NzGCannot mix data with keyword arguments in the OnConflict update method.)re   dictr  r   r  )r   _datar  s      rg   r   zOnConflict.update  sg     	:V 	:Jud$;$; 	: 9 : : : 	!LL   ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   r  r
   operatorand_r   expressionss     rg   rB  zOnConflict.where  /    ;";.;6KX]K88ri   c                 "    d | _         || _        d S rd   r  r  )r   constraintss     rg   r  zOnConflict.conflict_target  s    $(! +ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   )r  r
   r  r  r  s     rg   r  zOnConflict.conflict_where  s5    +/1K?K%hm[AAri   c                 "    || _         d | _        d S rd   r  )r   r-  s     rg   r  zOnConflict.conflict_constraint  s    $.! $ri   r\  rd   )r   r   r   r  r  r  rf  rM  r  r   rB  r  r  r  r   ri   rg   r  r    s       FJ6:%)8 8 8 89 9 96 6 6 
Y! ! Y! 
Y   Y 
Y9 9 Y9
 
Y, , Y, 
YB B YB
 
Y% % Y% % %ri   r  c                 >     t                     d fd	            }|S )Nc                 f    || j         n|}|st          dj        z             | |g|R i |S )Nz8Query must be bound to a database in order to call "%s".)rQ  rB   r   )r   r  r  r  r  s       rg   r  z database_required.<locals>.inner   sc    %-%54>>8 	D  "139?"C D D DvdH6t666v666ri   rd   r   r  s   ` rg   database_requiredr    s8    
6]]7 7 7 7 7 ]7 Lri   c                       e Zd Zej        Zd fd	ZddZ fdZe	j
        dd            Ze	j
        dd            Ze	j
        dd            Ze	j
        dd	            Zd
 Zd Zd Zed             Zd ZddZd Zd Zd Zd Zd Z xZS )	BaseQueryNc                     || _         d | _        d | _        d | _         t	          t
          |           j        di | d S r  )rQ  _cursor_wrapper	_row_type_constructorr  r  r  )r   rQ  r  r  s      rg   r  zBaseQuery.__init__  sJ    "# 'i'11&11111ri   c                     || _         | S rd   r  r  s     rg   r  zBaseQuery.bind  r	  ri   c                 d    t          t          |                                           }d |_        |S rd   )r  r  rd  r  r  s     rg   rd  zBaseQuery.clone  s+    i&&,,.. $ri   Tc                 0    |rt           j        nd | _        | S rd   )ROWr?  r  )r   as_dicts     rg   dictszBaseQuery.dicts  s    %,6$ri   c                 0    |rt           j        nd | _        | S rd   )r  r>  r  )r   as_tuples     rg   tupleszBaseQuery.tuples#  s    &.8Dri   c                 0    |rt           j        nd | _        | S rd   )r  r@  r  )r   as_namedtuples     rg   namedtupleszBaseQuery.namedtuples(  s    ,9Ctri   c                 >    |rt           j        nd | _        || _        | S rd   )r  rA  r  r  r   constructors     rg   objectszBaseQuery.objects-  s!    ,7AT'ri   c                 F   | j         p| j        }|t          j        k    rt	          |          S |t          j        k    rt          |          S |t          j        k    rt          |          S |t          j	        k    rt          || j                  S t          d|z            NzUnrecognized row type: "%s".)r  default_row_typer  r?  DictCursorWrapperr>  CursorWrapperr@  NamedTupleCursorWrapperrA  ObjectCursorWrapperr  r  r   cursorrow_types      rg   _get_cursor_wrapperzBaseQuery._get_cursor_wrapper3  s    >:T%:sx$V,,,"" (((((*6222((&vt/@AAA;hFGGGri   c                     t           rd   rf  r?  s     rg   r,  zBaseQuery.__sql__A  rh  ri   c                     | j         r| j                                         }nt                      }|                    |           S rd   )rQ  rS  r'   rE  )r   contexts     rg   r0  zBaseQuery.sqlD  s<    > 	 n4466GGiiG}}T"""ri   c                 ,    |                      |          S rd   )_executer  s     rg   executezBaseQuery.executeK  s    }}X&&&ri   c                     t           rd   rf  r  s     rg   r  zBaseQuery._executeO  rh  ri   c                 j    t          |                     |                                                    S rd   )r~  r  iteratorr  s     rg   r  zBaseQuery.iteratorR  s(    DLL**3355666ri   c                 l    | j         ,| j        st          d          |                                  d S d S )NzQuery has not been executed.)r  rQ  r  r  r  s    rg   _ensure_executionzBaseQuery._ensure_executionU  s>    '> A !?@@@LLNNNNN ('ri   c                 R    |                                   t          | j                  S rd   )r  r~  r  r  s    rg   r  zBaseQuery.__iter__[  s%       D()))ri   c                     |                                   t          |t                    r|j        }n|}||dk    r|dz   nd}| j                            |           | j        j        |         S Nr   r   )r  re   r  r  r  
fill_cache	row_cache)r   rn   indexs      rg   r  zBaseQuery.__getitem___  sw       eU## 	JEEE!&!EAIIE''...#-e44ri   c                 R    |                                   t          | j                  S rd   )r  r   r  r  s    rg   __len__zBaseQuery.__len__j  s%       4'(((ri   c                      t          |           S rd   )rV  r  s    rg   __str__zBaseQuery.__str__n  s    t$$$ri   rd   rt  )r   r   r   r  r?  r
  r  r  rd  rf  rM  r  r   r  r  r  r,  r0  r  r  r  r  r  r  r  r%  r'  r  r  s   @rg   r  r    s       x2 2 2 2 2 2       
 
Y   Y 
Y   Y 
Y   Y 
Y   Y
H H H" " "# # # ' ' '" " "7 7 7 7  * * *	5 	5 	5) ) )% % % % % % %ri   r  c                   ,     e Zd Zd fd	Zd Zd Z xZS )RawQueryNc                 d     t          t          |           j        di | || _        || _        d S r  )r  r)  r  r  _params)r   r0  rU  r  r  s       rg   r  zRawQuery.__init__s  s8    &h&00000	ri   c                     |                     | j                   | j        r!| j        D ]}|                    |d           |S r)  )r"  r  r+  rn   r*  s      rg   r,  zRawQuery.__sql__x  sO    DI< 	2 2 2		%5	1111
ri   c                 |    | j         /|                    |           }|                     |          | _         | j         S rd   r  r  r  r   r  r  s      rg   r  zRawQuery._execute  =    '%%d++F#'#;#;F#C#CD ##ri   r  )r   r   r   r  r,  r  r  r  s   @rg   r)  r)  r  s[             
  $ $ $ $ $ $ $ri   r)  c                   2    e Zd Zd fd	Zej        d             Zej        d             Zej        d             Zej        d             Z	ej        d             Z
ej        dd            Zej        dd	            Zej        dd            Zd Zd Z xZS )QueryNc                      t          t          |           j        di | || _        || _        || _        || _        d | _        d S r  )r  r2  r  r  r:  _limit_offsetrC  )r   rB  rH  limitoffsetr  r  s         rg   r  zQuery.__init__  sM    #eT#--f---!ri   c                     || _         d S rd   )rC  )r   cte_lists     rg   rG  zQuery.with_cte  rI  ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   r  r  s     rg   rB  zQuery.where  r  ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   )r  r
   r  or_r  s     rg   orwherezQuery.orwhere  s/    ;";.;6KX\;77ri   c                     || _         d S rd   rF  r   r,  s     rg   rH  zQuery.order_by  s    ri   c                 ,    | j         pd|z   pd | _         d S r  rF  r?  s     rg   order_by_extendzQuery.order_by_extend  s    >/R69Bdri   c                     || _         d S rd   )r4  r  s     rg   r6  zQuery.limit  r  ri   c                     || _         d S rd   )r5  r  s     rg   r7  zQuery.offset  rD  ri      c                 B    |dk    r|dz
  nd}|| _         ||z  | _        d S r   )r4  r5  )r   pagepaginate_bys      rg   paginatezQuery.paginate  s.    !88taxx!k)ri   c                    | j         r:|                    d                              t          | j                              | j        | j        N|j        j        rB| j        |j        j        n| j        }|                    d                              |           | j        -|                    d                              | j                   |S )Nz
 ORDER BY z LIMIT z OFFSET )r:  r"  r0  r:  r4  r5  r  	limit_max)r   r@  r6  s      rg   _apply_orderingzQuery._apply_ordering  s    > 	2gl##c-//000;"t|'?'*y': (@+/;+>CI''DKEKK	""&&u---<#KK
##''555
ri   c                 N   | j         rt          d | j         D                       }|                    d          5  |                    |rdnd                              t          | j                                                 d           d d d            n# 1 swxY w Y   |S )Nc              3   $   K   | ]}|j         V  d S rd   )rA  )rW  r  s     rg   rz  z Query.__sql__.<locals>.<genexpr>  s$      EEsCNEEEEEEri   Fr  zWITH RECURSIVE zWITH r   )rC  anyrN  r"  r0  r:  )r   r@  r  s      rg   r,  zQuery.__sql__  s    > 	  EEdnEEEEEI ..    'yE++gFF#mDN3344'#,,,	                             
 
s   ABB!B)NNNNrd   )rD  )r   r   r   r  rf  rM  rG  rB  r=  rH  rA  r6  r7  rH  rK  r,  r  r  s   @rg   r2  r2    sU             
Y" " Y" 
Y9 9 Y9
 
Y8 8 Y8
 
Y    Y  
YC C YC 
Y   Y 
Y   Y 
Y* * * Y*
        ri   r2  c                 0     t            fd            }|S )Nc                 2    r|| }} t          | |          S rd   )CompoundSelectQuery)r   r  r  	operations     rg   r  z#__compound_select__.<locals>.method  s&     	&%D"4E:::ri   )r  )rS  r  r  s   `` rg   __compound_select__rT    s4    ; ; ; ; ; ; Mri   c                       e Zd Z ed          xZZ ed          xZZ ed          xZZ	 ed          xZ
Z edd          Z edd          Z edd          Z edd          Zd ZdS )	SelectQuery	UNION ALLUNION	INTERSECTEXCEPTTr  c                     |st          d          t          | f|                              | j                  }t	          | dd           |                    | j                  }|S )Nz/select_from() must specify one or more columns.rE  )r  rV   r  rQ  r   r  rE  rH  s      rg   rI  zSelectQuery.select_from  sg     	PNOOO))$t~&& 	4$''3MM$*--Eri   N)r   r   r   rT  rN  r   rQ  r  	intersectr  except_r  r  r  r  r  rI  r   ri   rg   rV  rV    s        --k:::I((111EF--k:::I++H555Gg"";>>>H!!'D999G"";>>>H""8d;;;H	 	 	 	 	ri   rV  c                       e Zd Zd Zd Zedd            Zedd            Zedd            Zed             Z	edd	            Z
ed
             Zed             ZdS )
SelectBasec                 V    t          | j        | j        pt          |           f          S rd   )r  r  r  r.  r  s    rg   r  zSelectBase._get_hash  s$    T^T[%<BtHH=>>>ri   c                 |    | j         /|                    |           }|                     |          | _         | j         S rd   r.  r/  s      rg   r  zSelectBase._execute  r0  ri   r   c                 d    |                      |          d |         }|r|dk    r|d         n|S d S Nr   r   )r  )r   r  r  rowss       rg   peekzSelectBase.peek  sD    ||H%%bqb) 	/1ff477$.	/ 	/ri   c                 b    | j         |k    r|| _         d | _        |                     ||          S )N)r  )r4  r  re  )r   r  r  s      rg   rm  zSelectBase.first	  s4    ;!DK#'D yyQy'''ri   Fc                     |r'|                                                      |          S |                                                     |          }|r
|s|d         n|S r  )r  re  r   )r   r  r  r  r7  s        rg   scalarzSelectBase.scalar
	  sY     	/::<<$$X...kkmm  **6X6s1vv36ri   c              #   r   K   |                                                      |          D ]}|d         V  d S r  )r   r  )r   r  r7  s      rg   scalarszSelectBase.scalars	  sD      ;;==((22 	 	Ca&LLLL	 	ri   c                    |                                                      d          }|rd x|_        |_        	 |j        @|j        9|j        2|j        +|j        dur"|	                    t          d                    }n# t          $ r Y nw xY wt          |gt                              t          d                    g                              |          S )N_wrappedT1)rH  r  r4  r5  _having	_group_by_windows	_distinct_simple_distinctr  rW   r   rV   r;   COUNTrh  )r   r  clear_limitrd  s       rg   r4  zSelectBase.count	  s    %%j11 	0+//EL5=	}$)@~%%/*A%T11SXX.. 	 	 	D	ugS 2 2344;;HEEEs   AB 
BBc                     |                      t          d                    }d|_        d |_        t	          |                                          S )Nrm  r   )r  rW   r4  r5  r  rh  )r   r  rd  s      rg   existszSelectBase.exists$	  s=    SXX&&ELLNN###ri   c                 j    d | _         	 |                     |          d         S # t          $ r Y d S w xY wr  )r  r  
IndexErrorr  s     rg   r  zSelectBase.get+	  sH    #	<<))!,, 	 	 	DD	s   $ 
22Nr   FFr  )r   r   r   r  r  r  re  rm  rh  rj  r4  rv  r  r   ri   rg   r_  r_    s       ? ? ?$ $ $ / / / /
 ( ( ( ( 7 7 7 7    F F F F $ $ $     ri   r_  c                   `     e Zd Z fdZed             Zed             Zd Zd Z	 fdZ
 xZS )rR  c                     t          t          |                                            || _        || _        || _        d S rd   )r  rR  r  r#  r  r   )r   r#  r  r   r  s       rg   r  zCompoundSelectQuery.__init__8	  s9    !4((11333ri   c                     | j         j        S rd   )r#  
_returningr  s    rg   r~  zCompoundSelectQuery._returning>	  s    x""ri   c                     t          |                     d          ft          d          f                              |          }t	          |                                          S )Nr   rm  )rV   r6  rW   r  r  rh  )r   r  rB  s      rg   rv  zCompoundSelectQuery.existsB	  sJ    

1'#c((55::8DDELLNN###ri   c                 f    | j                                         | j                                        fS rd   )r#  get_query_keyr   r  s    rg   _get_query_keyz"CompoundSelectQuery._get_query_keyG	  s)    &&(($(*@*@*B*BCCri   c                     |j         j        }|r|t          k    rdS |t          k    rdS |t          k    r0|j         j        s|j         j        rdS t          |t                     S d S NFT)	r  compound_select_parenthesesCSQ_PARENTHESES_NEVERCSQ_PARENTHESES_ALWAYSCSQ_PARENTHESES_UNNESTEDr  rX  re   rR  )r   r@  subqcsq_settings       rg   _wrap_parensz CompoundSelectQuery._wrap_parensJ	  s    i; 	=k-BBB52224444y  CI$9  u
 "$(;<<<< 54ri   c                    |j         t          k    r|                     |          S t          t          |                               |           |j        p|j         t          k    } ||          5  |                     || j	                  }|
                    |d          5  |                    | j	                   d d d            n# 1 swxY w Y   |                    d| j        z             |                                5  |                     || j                  }|
                    |d          5  |                    | j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                5  |                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |          S )Nr2  F)r  r  r(  )r  rO  r  r  rR  r,  r  rI  r  r#  rH  r0  r"  r  r*  r   rL  rK  r  )r   r@  outer_parens
lhs_parens
rhs_parensr  s        rg   r,  zCompoundSelectQuery.__sql__\	  s   9$$$$S))) 	!4((00555|B	\(AS\*** 	* 	***399J!!j5!II " "!!!" " " " " " " " " " " " " " "KK()))!! & &!..sDH==
%%*u%MM & &GGDH%%%& & & & & & & & & & & & & & && & & & & & & & & & & & & & & !!## * *$$S)))* * * * * * * * * * * * * * *!	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*& $$$s   23G%C GC	GC	4G3E9;E"E9"E&&E9)E&*E9-G9E=	=G E=	GF:.G:F>	>GF>	GGG)r   r   r   r  r  r~  r  rv  r  r  r,  r  r  s   @rg   rR  rR  7	  s             # # X# $ $ $D D D= = =$% % % % % % % % %ri   rR  c                       e Zd Z	 	 	 d fd	Z fdZej        d             ZeZej        d             Z	e
d             Zej        d             Zej        d             Zej        ej        dfd	            Zdd
Zej        d             Zd Zej        d             Zej        d             Zej        d             Zej        	 	 dd            Zej        dd            Zd ZddZ fdZ xZS )rV   Nc	                 l    t          t          |           j        di |	 t          |t                    rt          |          n|pg | _        || _        || _        || _	        d | _
        || _        || _        d x| _        | _        |r$t          |t                    r|| _        n|| _        d | _        d S r  )r  rV   r  re   rb  ra  
_from_listr~  ro  rn  rp  _for_update_lateralrq  rr  r  r  )r   	from_listr  group_byhavingr  windows
for_updatelateralr  r  s             rg   r  zSelect.__init__{	  s     	%fd$..v....8E.J.J *4	??? )1.0 	!!%155. 	*(D)) *(0%%!)#ri   c                     t          t          |                                           }|j        rt	          |j                  |_        |S rd   )r  rV   rd  r  ra  r   rd  r  s     rg   rd  zSelect.clone	  sA    fd##))++ 	6#E$455Eri   c                     || _         d S rd   r~  )r   r  r  s      rg   r  zSelect.columns	  s    !ri   c                 >    t          | j                  |z   | _        d S rd   )rb  r~  r  s     rg   select_extendzSelect.select_extend	  s    007:ri   c                     | j         S rd   r  r  s    rg   selected_columnszSelect.selected_columns	  s
    ri   c                     || _         d S rd   r  r  s     rg   r  zSelect.selected_columns	  s    ri   c                 .    t          |          | _        d S rd   )ra  r  r   sourcess     rg   rF  zSelect.from_	  s    w--ri   c                     | j         st          d          | j                                         }|t          j        k    s|t          j        k    rd}| j                             t          ||||                     d S )NNo sources to join on.T)r  r  r  rE   r3  r;  r  r  )r   r  r  r  r  s        rg   rV  zSelect.join	  sw     	75666""$$$$	T5F(F(FBtD$	2>>?????ri   c                 D    |                      |t          j        |          S rd   rV  rE   r5  r  s      rg   r  zSelect.left_outer_join	  s    yyt333ri   c                     g }|D ]it          t                    r=j        st          d          |                    fdj        D                        T|                               j|| _        d S )NQCannot pass a table to group_by() that does not have columns explicitly declared.c                 0    g | ]}t          |          S r   r   rW  col_namer  s     rg   rZ  z#Select.group_by.<locals>.<listcomp>	  9     !B !B !B%- ")!:!: !B !B !Bri   )re   rY   r  r  r>  r  ro  r   r  groupingr  s      @rg   r  zSelect.group_by	  s     		( 		(F&%(( ( 2$ &1 2 2 2  !B !B !B !B17!B !B !B C C C C ''''!ri   c                 H    t          | j        pd          |z   } | j        | S )z$@Node.copy used from group_by() callr   )rb  ro  r  )r   r,  r  s      rg   group_by_extendzSelect.group_by_extend	  s*    -2..7t}h''ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   )rn  r
   r  r  r  s     rg   r  zSelect.having	  s/    <#</K7Khm[99ri   c                     t          |          dk    r#|d         du s
|d         du r|d         | _        d S d| _        || _        d S )Nr   r   TF)r   rr  rq  r  s     rg   r  zSelect.distinct	  sT    w<<1'!*"4"4
e8K8K$+AJD!!!$)D!$DNNNri   c                     |r|nd | _         d S rd   )rp  )r   r  s     rg   rT  zSelect.window	  s    #*4ri   Tc                 ^    |s||s|rd}|s	d | _         d S t          ||||          | _         d S rG  )r  r  )r   r  r  r  r  s        rg   r  zSelect.for_update	  sP      	r~~;~J 	N#D(RMMDri   c                     || _         d S rd   )r  )r   r  s     rg   r  zSelect.lateral	  s    ri   c                     | j         S rd   r  r  s    rg   r  zSelect._get_query_key	  s
    {ri   Fc                 P    |                     t          | j                            S rd   )r0  r:  r~  r   r@  is_subquerys      rg   __sql_selection__zSelect.__sql_selection__	  s    ww}T_55666ri   c                 H   |j         t          k    r|                     |          S | j        r%|j         t          k    r|                    d           |j        }d d|p|j         t          k    dd}|j        j        r|j        j	        dk    rd|d<    |j
        di |5  t          t          |                               |           |                    d           | j        s| j        i|                    d           | j        rM|                    d	                              t#          | j                                                d
           |                                5  |                     ||          }d d d            n# 1 swxY w Y   | j        rh|                    d          5  |                    d                              t+          | j                             d d d            n# 1 swxY w Y   | j        -|                    d                              | j                   | j        r:|                    d                              t+          | j                             | j        -|                    d                              | j                   | j        <|                    d           |                    t+          | j                             |                     |           | j        J|j        j        st;          d          |                    d
           |                    | j                   d d d            n# 1 swxY w Y   |j        j        s|j        j        r	| j        |S |                      |          S )NzLATERAL FT)r6  rX  r  r  r   r  zSELECT z	DISTINCT zON r   r2   FROM  WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.r   )!r  rO  r  r  rI  r"  r  r  rX  rY  rH  r  rV   r,  rr  rq  r0  r5  rJ  r  r  r:  r  ro  rn  rp  rK  r  r  r  r  r  r  )r   r@  r  r  r  s       rg   r,  zSelect.__sql__	  s9   9$$$$S)))= 	$SY,66KK
###l &E39+D	
 
 9  	)SY%AQ%F%F#(E- S&&&& +	* +	* &$'',,,KK	"""$ $(BK(((> $gennc*4>::;;gclll!!## ? ?,,S+>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  N%%%%88 N NKK))--mDO.L.LMMMN N N N N N N N N N N N N N N {&I&&**4;777~ ML))--mDN.K.KLLL|'J''++DL999}(J'''dm44555   %%%+y+ 5$ &4 5 5 5C   ()))W+	* +	* +	* +	* +	* +	* +	* +	* +	* +	* +	* +	* +	* +	* +	*` 9  	SY%6 	%)[%8J$$$s\   C	M#(F?M#F	M#F	 M#3;G:.M#:G>	>M#G>	EM##M'*M')NNNNNNNNrd   )TNNNrt  r  )r   r   r   r  rd  rf  rM  r  r  r  r  r  r  rF  rE   r4  rV  r  r  r  r  r  rT  r  r  r  r  r,  r  r  s   @rg   rV   rV   z	  sH       >BFJ$ $ $ $ $ $,     
Y" " Y"F	Y; ; Y;   X      
Y( ( Y( 
Y#':$ @ @ @ Y@4 4 4 4 
Y" " Y"( ( (
 
Y: : Y:
 
Y% % Y% 
Y5 5 Y5 
Y:>#N N N YN 
Y      Y   7 7 7 7E% E% E% E% E% E% E% E% E%ri   rV   c                   p     e Zd Zd fd	ZddZej        d             Zd Zd Z	d Z
d	 Zd
 Z fdZ xZS )_WriteQueryNc                 z    || _         || _        |rdnd| _         t          t          |           j        di | d S )NTFr   )r/  r~  _return_cursorr  r  r  )r   r/  	returningr  r  s       rg   r  z_WriteQuery.__init__;
  sK    
#&/:ddU)k4  )33F33333ri   Fc                 *    t          || |||          S r  r  r  s        rg   r  z_WriteQuery.cteA
  r  ri   c                 *    || _         |rdnd| _        d S NTF)r~  r  )r   r  s     rg   r  z_WriteQuery.returningE
  s     #&/:ddUri   c                     | j         rf|                                5  |                    d                              t	          | j                              d d d            n# 1 swxY w Y   |S )Nz RETURNING )r~  rJ  r"  r0  r:  r?  s     rg   apply_returningz_WriteQuery.apply_returningJ
  s    ? 	O!!## O OM**..}T_/M/MNNNO O O O O O O O O O O O O O O
s   ;A##A'*A'c                     | j         r|                     |          }n|                    |           }|                     ||          S rd   )r~  execute_returningr  handle_resultr/  s      rg   r  z_WriteQuery._executeP
  sJ    ? 	,++H55FF%%d++F!!(F333ri   c                 |    | j         /|                    |           }|                     |          | _         | j         S rd   r.  r/  s      rg   r  z_WriteQuery.execute_returningW
  r0  ri   c                 >    | j         r|S |                    |          S rd   )r  rows_affectedr/  s      rg   r  z_WriteQuery.handle_result]
  s&     	M%%f---ri   c                 8    | j         j        |j        | j         <   d S rd   )r/  r   r  r?  s     rg   _set_table_aliasz_WriteQuery._set_table_aliasb
  s    (,
(;$*%%%ri   c                     t          t          |                               |           |                     |           |S rd   )r  r  r,  r  r   r@  r  s     rg   r,  z_WriteQuery.__sql__e
  s<    k4  ((--- 	c"""
ri   rd   r  )r   r   r   r  r  rf  rM  r  r  r  r  r  r  r,  r  r  s   @rg   r  r  :
  s        4 4 4 4 4 4. . . . 
Y; ; Y;  4 4 4$ $ $. . .
< < <        ri   r  c                   J     e Zd Zd fd	Zej        d             Z fdZ xZS )r  Nc                 f     t          t          |           j        |fi | || _        d | _        d S rd   )r  r  r  r  _from)r   r/  r   r  r  s       rg   r  zUpdate.__init__o
  s:    $fd$U55f555


ri   c                     || _         d S rd   )r  r  s     rg   rF  zUpdate.from_t
  s    


ri   c           
         t          t          |                               |           |                    d          5  |                    d           g }t          | j                                        |j                  D ]\  }}t          |t                    s=t          |t                    r|                    |          }nQt          |d          }n?t          |t                    r*t          |t                    r|                    |          }t          |t                    st!          |          }|                    t%          |t'          d          |f                     |                    | j                                      d                              t-          |                     | j        rh|                    d	          5  |                    d
                              t-          | j                             d d d            n# 1 swxY w Y   | j        rY|                                5  |                    d                              | j                   d d d            n# 1 swxY w Y   |                     |           |                     |          cd d d            S # 1 swxY w Y   d S )NTrN  zUPDATE r  Fr  r   z SET r2  r  r  )r  r  r,  rL  r"  sortedr  r  r  re   rf  r8   to_valuer_   rG   r<   r  r  r{  rW   r0  r/  r:  r  rJ  r  rH  rK  r  )r   r@  r  kr`  r  s        rg   r,  zUpdate.__sql__x
  sN   fd##C(((t,, "	- "	-KK	"""Kt|11339LMMM ? ?1!!T** 	&!!U++ 3JJqMM!!E2225)) &jO.L.L & 

1A!!U++ )%a((A""8QC!,<#=#=>>>>c$*ooggc-,,---z I%%%%88 I IKK))--mDJ.G.GHHHI I I I I I I I I I I I I I I { <%%'' < <KK	**..t{;;;< < < < < < < < < < < < < < <  %%%'',,E"	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	- "	-s[    FK;H#K#H'	'K*H'	+K	.J7KJ	K
J	,KKKrd   )	r   r   r   r  rf  rM  rF  r,  r  r  s   @rg   r  r  n
  ss             
 
Y  Y%- %- %- %- %- %- %- %- %-ri   r  c                       e Zd ZdZdZdZ G d de          Zd fd	Zd Z	e
j        dd
            Ze
j        dd            Ze
j        dd            Ze
j        d             Zd Zd Zd Zd Zd Zd Z fdZ fdZd Z xZS )r  r   r   r   c                       e Zd ZdS )Insert.DefaultValuesExceptionNr  r   ri   rg   DefaultValuesExceptionr  
  r  ri   r  Nc                      t          t          |           j        |fi | || _        || _        || _        d | _        d| _        d S r   )r  r  r  _insertr  _on_conflict_query_type_as_rowcount)r   r/  r  r  r  r  r  s         rg   r  zInsert.__init__
  sT    $fd$U55f555'!ri   c                      t          d          )Nz*INSERT queries cannot have a WHERE clause.rf  r  s     rg   rB  zInsert.where
  s    !"NOOOri   Tc                     || _         d S rd   )r  )r   r  s     rg   as_rowcountzInsert.as_rowcount
  s    (ri   c                 6    |rt          d          nd | _        d S )NIGNOREr  r  )r   ignores     rg   on_conflict_ignorezInsert.on_conflict_ignore
  s"    4:DJx000ri   c                 6    |rt          d          nd | _        d S Nr  r  )r   r{   s     rg   on_conflict_replacezInsert.on_conflict_replace
  s"    5<FJy111$ri   c                 4    |s|rt          |i |nd | _        d S rd   r  r  s      rg   r  zInsert.on_conflict
  s4    =A 'V 'Z8888"& 	ri   c                 r    | j         s|                     d          |                     | j         f|          S )NError: no data to insert.)r  r  _generate_insertr?  s     rg   _simple_insertzInsert._simple_insert
  s<    | 	K--.IJJJ$$dl_c:::ri   c                     i S rd   r   r  s    rg   get_default_datazInsert.get_default_data
  s    	ri   c                 P      j         j        r fd j         j        D             S d S )Nc                 Z    g | ]'}|j         j        k    t          j         |          (S r   )r/  r  r   )rW  colr   s     rg   rZ  z.Insert.get_default_columns.<locals>.<listcomp>
  s>     7 7 7dj555 DJ,,555ri   )r/  r  r  s   `rg   get_default_columnszInsert.get_default_columns
  sI    : 	77 7 7 7
8K 7 7 7 7	7 	7ri   c                 ,	   t          |          }| j        }|                                 }|s&	 t          |          }n## t          $ r |                     d          w xY wt          |t                    s&|                                 }|t          d          ng }|D ]A}t          |t                    rt          | j        |          }|                    |           Bt          |          }	t          |          |	z
  D ]}
|                    |
           t          |fd          }t!          j        t          |f          |          }ng }t                      }|D ]Y}t          |t                    rt          | j        |          }n|}|                    |           |                    |           Z|}t          |fd          D ]}
|
|vr|                    |
           t                      }t                      }i }|D ]}||j        g}t          |t(                    rp|j        |j        k    r|                    |j                   |j        r|                    |           t          |t.                    r|                    |           |||<                       t3          |                                        d           d |D             }g }|D ]=}g }t          |t                    }t7          |          D ]\  }\  }}	 |r-||         D ]}	 ||         } n# t8          $ r Y w xY wt8          n||         }n[# t8          t:          f$ rG ||v r"||         }t=          |          r
 |            }n||v rd }nt          d|j        z            Y nw xY wt          |t>                    rt          |t@                    r||v rtC          ||d	
          }|                    |           |                    t3          |                     ?|s|                     d          "                    d          5                      tG          |                    cd d d            S # 1 swxY w Y   d S )NzError: no rows to insert.z!Bulk insert must specify columns.c                 .    |                                S rd   r  r  r@  s    rg   rh   z)Insert._generate_insert.<locals>.<lambda>
      8H8H8M8M ri   r  c                 .    |                                S rd   r  r  s    rg   rh   z)Insert._generate_insert.<locals>.<lambda>
  r  ri   z VALUES c                 N    g | ]"}|t          |t                    r|j        nd f#S rd   )re   r8   r  )rW  r  s     rg   rZ  z+Insert._generate_insert.<locals>.<listcomp>  sB     # # # 
65(A(AKV__tL# # #ri   zMissing value for %s.F)r6  r  r  TrN  )$r~  r  r  nextStopIterationr  re   r   r  r  r]  r   r/  r  r]  r  r|  chainr  r  r8   column_namenullr<   r0  r5  r"  	enumerater   rx  	callable_rf  rG   r_   rL  r:  )r   r  r@  	rows_iterr  defaultsr7  accumr  
column_setr  clean_columnsseen
column_obj	fk_fieldsnullable_columnsvalue_lookupslookupscolumns_converters
all_valuesr,  is_dictr  r6  lookupvals     `                       rg   r  zInsert._generate_insert
  s   LL	- ((**  (	(O9oo  O O O112MNNNO c7++ O2244?$%HIII # ! ) )F!&#.. =!(V!<!<LL(((( !ZZ
MMJ6 & &CLL%%%% ,M,M,M,MNNN!cVi@@IIM55D! % %fc** (!(V!<!<JJ!'J$$Z000$$$$#Gh,M,M,M,MNNN ( (d??NN3'''EE	55 		, 		,Fv{+G&%(( *;&"444NN6#5666; 1$((000fo66 *MM&)))$+M&!! ))**22:>>># #!# # # 
 #	8 #	8CF g..G*34F*G*G # #&&FIP % '4F&; + +F(&)&k"'% $,111TT1 #+N #( "!f *- P P P))&v.$S>> ("%#%%C#333"()@6;)NOOOP "#t,, HC1G1G H1791D1DyGGGCc"""".v667777 	K--.IJJJt,, 	6 	677=4455	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6sT   A    A  M-L75M7
M	MM	MAN0/N0"R		RRc                     |                     t          | j                                                d                               | j                  S r   )r0  r5  r  r"  r  r?  s     rg   _query_insertzInsert._query_insertB  s<    %dm4455T\""	$ri   c                 n    | j         s|                    d          S | j                             |          S NzDEFAULT VALUES)rQ  r"  default_values_insertr?  s     rg   _default_valueszInsert._default_valuesH  s5    ~ 	1;;/000~33C888ri   c                 D   t          t          |                               |           |                                5  d }| j        | j                            ||           }|                    |pt          d                                        d                              | j	                                      d           t          | j        t                    rU| j        sN	 |                     |           n%# | j        $ r |                     |           Y nw xY wt          j        | _        ntt          | j        t&          t          f          r'|                     |           t          j        | _        n,|                     | j        |           t          j        | _        | j        E| j                            ||           }|(|                    d                              |           |                     |          cd d d            S # 1 swxY w Y   d S )NINSERTz INTO r   )r  r  r,  rL  r  r  r0  rW   r"  r/  re   r  r   r  r  r  r!  SIMPLEr  rV  r  QUERYr  MULTIr  r  )r   r@  stmtr   r  s       rg   r,  zInsert.__sql__M  s1   fd##C((( 	- 	-D ,(??TJJc$'#h--((ghc$*oogclll$,00 0 0.'',,,,2 . . .((-----.#)=  DL;*<== 0""3'''#)<  %%dlC888#)<  ,*>>sDII%KK$$((000'',,;	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7   B(H'C=<H=DHDC)HHHc                     | j         %|j        r| j        j        r| j        j        f| _         	 t	          t
          |                               |          S # | j        $ r Y d S w xY wrd   )r~  returning_clauser/  r  r  r  r  r  )r   r  r  s     rg   r  zInsert._executen  sw    ?"x'@"z& ##z68DO	&&//999* 	 	 	DD	s   'A 
A%$A%c                     | j         r|S | j        r|                    |          S |                    || j                  S rd   )r  r  r  last_insert_idr  r/  s      rg   r  zInsert.handle_resultw  sJ     	M 	2))&111&&vt/?@@@ri   r  rt  )r   r   r   r$  r%  r&  	Exceptionr  r  rB  rf  rM  r  r  r  r  r  r  r  r  r  r!  r,  r  r  r  r  s   @rg   r  r  
  s       FEE11111111" " " " " "P P P 
Y) ) ) Y) 
YE E E YE 
YG G G YG 
Y( ( Y(; ; ;
  7 7 7
p6 p6 p6d$ $ $9 9 9
- - - - -B    A A A A A A Ari   r  c                        e Zd Z fdZ xZS )r  c                 "   t          t          |                               |           |                    d          5  |                    d                              | j                   | j        Y|                                5  |                    d                              | j                   d d d            n# 1 swxY w Y   | 	                    |           | 
                    |          cd d d            S # 1 swxY w Y   d S )NTrN  DELETE FROM r  )r  r  r,  rL  r"  r0  r/  r  rH  rK  r  r  s     rg   r,  zDelete.__sql__  sv   fd##C(((t,, 	- 	-KK''++DJ777{&%%'' < <KK	**..t{;;;< < < < < < < < < < < < < < <   %%%'',,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7    A	D	.C7DC	D
C	,DDD)r   r   r   r,  r  r  s   @rg   r  r    s8        
- 
- 
- 
- 
- 
- 
- 
- 
-ri   r  c                       e Zd Z	 	 d
dZej        dd            Zej        d             Zej        dd            Zej        dd            Z	d	 Z
dS )r?   FNc	                     || _         t          |t                    st          |          n|| _        || _        || _        || _        || _        || _	        || _
        | j
        | j        st          d          d S d S Nz-NULLS DISTINCT is only available with UNIQUE.)r  re   rY   r6   _table_expressionsr  _unique_safe_using_nulls_distinctr  )	r   r  r/  r  uniquesaferB  usingnulls_distincts	            rg   r  zIndex.__init__  s    
+5eU+C+CNfUmmm'
-+DL+LMMM ,+++ri   Tc                     || _         d S rd   )r6  )r   r6  s     rg   r:  z
Index.safe  s    


ri   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S rd   r  r  s     rg   rB  zIndex.where  r  ri   c                     || _         d S rd   )r7  )r   r7  s     rg   r;  zIndex.using  s    ri   c                 D    || j         st          d          || _        d S r2  )r5  r  r8  )r   r<  s     rg   r<  zIndex.nulls_distinct  s,    %dl%LMMM-ri   c                 Z   | j         rdnd}|                    d          5  |                    |           | j        r|                    d           |j        j        r_t          | j        t                    rE| j        j	        r9t          | j        j	        | j                  }t          | j        j                  }nt          | j                  }| j        }|                    |           | j        )|j        j        r|                    d| j        z             |                    d                              |                              d           | j        )|j        j        s|                    d	| j        z             |                    t!          d
 | j        D                                  | j        |                    | j        rdnd           | j        -|                    d                              | j                   d d d            n# 1 swxY w Y   |S )NzCREATE UNIQUE INDEX zCREATE INDEX TrN  IF NOT EXISTS z	 USING %sr)  r   z	USING %s c                 Z    g | ](}t          |t                    rt          |          n|)S r   )re   r]  rW   )rW  r  s     rg   rZ  z!Index.__sql__.<locals>.<listcomp>  sA     &/ &/ &/ (c22<D			&/ &/ &/ri   z NULLS DISTINCTz NULLS NOT DISTINCTr  )r5  rL  r"  r6  r  index_schema_prefixre   r3  rY   r  r6   r  r   r0  r7  index_using_precedes_tabler5  r4  r8  r  )r   r@  	statement
index_name
table_names        rg   r,  zIndex.__sql__  s\   .2lO**	t,, %	8 %	8KK	"""z .,--- y, )$+u--)26+2E)#DK$7DD
#DK$899

#DJ//
![
GGJ{&y3 'K$+5666gfooc*oogclll{&y3 'K$+5666GG$ &/ &/ -&/ &/ &/ 0 0 1 1 1 #/1E 2--13 3 3{&I&&**4;777K%	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8 %	8N 
s   G2H  H$'H$)FFNNNrt  rd   )r   r   r   r  rf  rM  r:  rB  r;  r<  r,  r   ri   rg   r?   r?     s        DI8<N N N N 
Y   Y 
Y9 9 Y9
 
Y   Y 
Y. . . Y.
) ) ) ) )ri   r?   c                   *     e Zd Z	 	 d fd	Zd Z xZS )rH   FTNc	           
          || _         ||                     ||          }|1|D ].}	t          |	t                    rt	          |	d          r|	j        }/t          t          |                               ||j	        j
        ||||||           d S )N
index_type)r  r/  r  r9  r:  rB  r;  r<  )r  _generate_name_from_fieldsre   r8   r  rK  r  rH   r  r.  r/  )r   rE  fieldsr9  r:  rB  r;  r  r<  fieldr  s             rg   r  zModelIndex.__init__  s    <225&AAD= - -eU++ -|0L0L -!,Ej$((+#) 	) 	+ 	+ 	+ 	+ 	+ri   c                 d   g }|D ]}t          |t                    r.|                    |                                d                    Et          |t                    r)t          |t
                    s|                                }t          |t
                    r|                    |j                   |st          d          t          j
        ddd                    |                    }|j        }|j        r|j        n|j        }t!          d                    ||f                    S )Nr   zJUnable to generate a name for the index, please explicitly specify a name.[^\w]+r)  rw  )re   r]  r  r   rf  r8   rr  r  r  r   rj  rV  r.  legacy_table_namesr  rH  _truncate_constraint_name)r   rE  rM  r  rN  clean_field_namesrI  prefixs           rg   rL  z%ModelIndex._generate_name_from_fields  s    	4 	4E%%% 4U[[]]1-....eT** +:eU3K3K +!LLNNEeU++ 4LL!2333 	; : ; ; ; F9b#((5//BB{"5J4?(6;L2M)N)NOOOri   )FTNNNN)r   r   r   r  rL  r  r  s   @rg   rH   rH     sY        EI7;+ + + + + +&P P P P P P Pri   rH   @   c                     t          |           |k    rSt          j        |                     d                                                    }| d |dz
           d|d d         } | S )Nutf-8rD  rw     )r   hashlibmd5encode	hexdigest)r-  maxlen	name_hashs      rg   rR  rR    si    
:K
 1 1' : :;;EEGG	 *=VaZ= 9 9 99RaR==I
ri   c                        e Zd Z fdZ xZS )PeeweeExceptionc                     |r3t          |d         t                    r|d         |dd          c| _        } t          t          |           j        |  d S r   )re   r,  origr  r`  r  )r   r  r  s     rg   r  zPeeweeException.__init__  sY     	0JtAw	22 	0"1gtABBxODIt-ot$$-t4444ri   r   r   r   r  r  r  s   @rg   r`  r`    s8        5 5 5 5 5 5 5 5 5ri   r`  c                       e Zd ZdS )r>   Nr  r   ri   rg   r>   r>     r  ri   r>   c                       e Zd ZdS )r)   Nr  r   ri   rg   r)   r)     r  ri   r)   c                       e Zd ZdS )r+   Nr  r   ri   rg   r+   r+     r  ri   r+   c                       e Zd ZdS )rA   Nr  r   ri   rg   rA   rA     r  ri   rA   c                       e Zd ZdS )rB   Nr  r   ri   rg   rB   rB     r  ri   rB   c                       e Zd ZdS )rC   Nr  r   ri   rg   rC   rC     r  ri   rC   c                       e Zd ZdS )rJ   Nr  r   ri   rg   rJ   rJ     r  ri   rJ   c                       e Zd ZdS )rL   Nr  r   ri   rg   rL   rL     r  ri   rL   c                       e Zd ZdS )rQ   Nr  r   ri   rg   rQ   rQ     r  ri   rQ   c                   $    e Zd ZdZd Zd Zd ZdS )ExceptionWrapper
exceptionsc                     || _         d S rd   ro  )r   rp  s     rg   r  zExceptionWrapper.__init__   s    $ri   c                     d S rd   r   r  s    rg   r  zExceptionWrapper.__enter__"        ri   c                     |d S |j         | j        vr|j        d         }|j         | j        v r3| j        |j                  }|j        }t	          | ||g|R  |           d S d S r  )r   rp  	__bases__r  rp   )r   r&  	exc_value	tracebacknew_typeexc_argss         rg   r  zExceptionWrapper.__exit__#  s    FDO33)!,H//x'89H ~HHhhy<8<<<iHHHHH 0/ri   N)r   r   r   r  r  r  r  r   ri   rg   rn  rn    sE        I% % %I I I I Iri   rn  )ConstraintErrorr)   r+   rA   rB   rC   rJ   rL   rQ   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  r0  r  r9  r/  ColumnMetadata)r  	data_typer	  r  r/  r  ForeignKeyMetadata)r  
dest_tabledest_columnr/  ViewMetadata)r  r0  c                   *     e Zd Z fdZd Zd Z xZS )_ConnectionStatec                 p     t          t          |           j        di | |                                  d S r  )r  r  r  reset)r   r  r  s     rg   r  z_ConnectionState.__init__O  s8    .%%.88888

ri   c                 >    d| _         d | _        g | _        g | _        d S rG  )closedconnr@  transactionsr  s    rg   r  z_ConnectionState.resetS  s%    	ri   c                 >    || _         d| _        g | _        g | _        d S r   )r  r  r@  r  r   r  s     rg   set_connectionz_ConnectionState.set_connectionY  s%    	ri   )r   r   r   r  r  r  r  r  s   @rg   r  r  N  sV                    ri   r  c                       e Zd ZdS )_ConnectionLocalNr  r   ri   rg   r  r  `  r  ri   r  c                       e Zd ZdZd Zd ZdS )	_NoopLockr   c                     | S rd   r   r  s    rg   r  z_NoopLock.__enter__c  s    ri   c                     d S rd   r   r%  s       rg   r  z_NoopLock.__exit__d  rs  ri   N)r   r   r   r  r  r  r   ri   rg   r  r  a  s'        I$$$77777ri   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )r  rT  c                     || _         d S rd   r  r   rT  s     rg   r  zConnectionContext.__init__i  s    bDGGGri   c                 n    | j                                         r| j                                          d S d S rd   )rT  	is_closedconnectr  s    rg   r  zConnectionContext.__enter__j  s:    7 	GOO	 	ri   c                 8    | j                                          d S rd   )rT  closer%  s       rg   r  zConnectionContext.__exit__m  s    47==?????ri   c                 @     t                     fd            }|S )Nc                  p    t          j                  5   | i |cd d d            S # 1 swxY w Y   d S rd   )r  rT  r  s     rg   r  z)ConnectionContext.__call__.<locals>.innero  s    "47++ + +r4*6**+ + + + + + + + + + + + + + + + + +   +//r   r  s   `` rg   r  zConnectionContext.__call__n  r  ri   N)r   r   r   r  r  r  r  r  r   ri   rg   r  r  g  sL        I(((   CBB    ri   r  c                      e Zd ZeZi Zi ZdZdZdZ	e
ZdZdZdZdZdZdZdZdZdZdZ	 	 	 dAdZd Zd Zd	 Zd
 Zd ZdBdZd Zd Zd Zd Z d Z!d Z"d Z#dCdZ$dCdZ%d Z&d Z'd Z(d Z)d Z*d Z+dCdZ,d Z-d Z.d Z/d  Z0d! Z1d" Z2d# Z3d$ Z4d% Z5d& Z6d' Z7d( Z8d) Z9d* Z:d+ Z;d, Z<d- Z=d. Z>dCd/Z?dCd0Z@dCd1ZAdCd2ZBdCd3ZCdCd4ZDd5 ZEd6 ZFd7 ZGd8 ZHd9 ZId: ZJd; ZKd< ZLdDd=ZMdDd>ZNd? ZOePd@             ZQdS )Er(   r7  r   NFTc                 $   t          t          | j                  | _        t          t          | j                  | _        |r| j                            |           |r| j                            |           || _        || _	        |r,t                      | _        t          j                    | _        n&t                      | _        t!                      | _        |rt#          d           |t#          d           i | _         | j        |fi | d S )NzPeewee no longer uses the "autorollback" option, as we always run in autocommit-mode now. This changes psycopg2's semantics so that the conn is not left in a transaction-aborted state.a^  Peewee no longer uses the "autocommit" option, as the semantics now require it to always be True. Because some database-drivers also use the "autocommit" parameter, you are receiving a warning so you may update your code and remove the parameter, as in the future, specifying autocommit could impact the behavior of the database driver you are using.)rQ  FIELDfield_types_field_typesrK   r  _operationsr   autoconnectthread_safer  _state	threadingLock_lockr  r  r   connect_paramsinit)	r   r  r  autorollbackr  r  
autocommitr  r  s	            rg   r  zDatabase.__init__  s&    'ud.>??%b$/:: 	2$$[111 	0##J///&& 	%*,,DK"))DJJ*,,DK"DJ 	J I J J J
 ! < = = = !	(%%f%%%%%ri   c                     |                                  s|                                  || _        | j                            |           t          |           | _        d S rd   )r  r  r  r  r   r  deferred)r   r  r  s      rg   r  zDatabase.init  sS    ~~ 	JJLLL ""6*** NN*ri   c                     |                                  r|                                  |                                 }| j        j                            |           |                                 | S rd   )r  r  r  r  r@  r  r  r?  s     rg   r  zDatabase.__enter__  sX    >> 	LLNNNkkmms###ri   c                    | j         j                                        }	 |                    |||           | j         j        s|                                  d S d S # | j         j        s|                                  w w xY wrd   )r  r@  r  r  r  )r   r&  r'  r(  r@  s        rg   r  zDatabase.__exit__  s|    ko!!##	LL7F333;? 

 4;? 

s   A #A>c                      t          |           S rd   r  r  s    rg   r  zDatabase.connection_context  r  ri   c                     t           rd   rf  r  s    rg   _connectzDatabase._connect  rh  ri   c                    | j         5  | j        rt          d          | j        j        s|r	 d d d            dS t          d          | j                                         t          5  | j                            | 	                                           | j
        |                     | j        j                   |                     | j        j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   dS )N@Error, database must be initialized before opening a connection.FzConnection already opened.T)r  r  rB   r  r  rL   r  __exception_wrapper__r  r  server_version_set_server_versionr  _initialize_connection)r   reuse_if_opens     rg   r  zDatabase.connect  s   Z 	> 	>} E$ &D E E E;% E  ! 	> 	> 	> 	> 	> 	> 	> 	> ''CDDDK& > >**4==??;;;&.,,T[-=>>>++DK,<===	> > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> ts;   &C?/C?*A2C(C?(C,	,C?/C,	0C??DDc                     d S rd   r   r  s     rg   r  zDatabase._initialize_connection      ri   c                     d| _         d S r  r  r  s     rg   r  zDatabase._set_server_version  s    ri   c                    | j         5  | j        rt          d          |                                 rt	          d          | j        j         }	 |r>t          5  |                     | j        j	                   d d d            n# 1 swxY w Y   | j        
                                 n# | j        
                                 w xY w|cd d d            S # 1 swxY w Y   d S )Nr  z7Attempting to close database while transaction is open.)r  r  rB   in_transactionrL   r  r  r  _closer  r  )r   is_opens     rg   r  zDatabase.close  s   Z 	 	} E$ &D E E E""$$ ?& (> ? ? ?+,,G$ 6. 6 6DK$45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 !!####!!####	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sN   AC	B* B9B*B			B*B		B*C*CCCCc                 .    |                                  d S rd   )r  r  s     rg   r  zDatabase._close  s    

ri   c                     | j         j        S rd   r  r  r  s    rg   r  zDatabase.is_closed  s    {!!ri   c                     | j         j         S rd   r  r  s    rg   is_connection_usablezDatabase.is_connection_usable  s    ;%%%ri   c                 j    |                                  r|                                  | j        j        S rd   )r  r  r  r  r  s    rg   
connectionzDatabase.connection   s,    >> 	LLNNN{ri   c                     |                                  r+| j        r|                                  nt          d          | j        j                                        S )Nz&Error, database connection not opened.)r  r  r  rB   r  r  r  )r   named_cursors     rg   r  zDatabase.cursor  sV    >> 	O O$%MNNN{&&(((ri   c                    t                               t          j                  rt                               ||f           t
          5  |                                 }|                    ||pd           d d d            n# 1 swxY w Y   |S r  )loggerisEnabledForloggingDEBUGdebugr  r  r  )r   r0  rU  r  s       rg   execute_sqlzDatabase.execute_sql  s    w}-- 	(LL#v'''" 	. 	.[[]]FNN3"---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. s   -BBBc                      | j         di |}|                    |                                          \  }}|                     ||          S r  )rS  r0  rB  r  )r   rB  context_optionsr@  r0  rU  s         rg   r  zDatabase.execute  sO    "d"55_55ggenn**,,VV,,,ri   c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        dS )N)r  r  r;  r\  r  r  r  r  rD  rE  rJ  r  )r  r  r;  r\  r  r  r  r  rD  rE  rJ  r  r  s    rg   get_context_optionszDatabase.get_context_options  sU    ,*ZZ+/+K"&"9#3/#'#;*.*I"1
 
 	
ri   c                 r    |                                  }|r|                    |            | j        di |S r  )r  r   context_class)r   r  r  s      rg   rS  zDatabase.get_sql_context*  sF    **,, 	,NN?+++!t!,,G,,,ri   c                     t           rd   rf  r   r  rB  s      rg   r  zDatabase.conflict_statement0  rh  ri   c                     t           rd   rf  r  s      rg   r  zDatabase.conflict_update3  rh  ri   c           	         |j         rYt          d          }t          d |j         D                       }|j        $t	          |t          d          |j        g          }n:t          d          }|j        }t          |t                    rt          |          }g }|j	        rx|j	        D ]p}t	          t          d          t          |          fd          }t	          t          |          t          d          |f          }|                    |           q|j        r|j                                        D ]\  }	}
t          |
t                    sgt          |	t                    rt          |j        |	          }	t          |	t"                    r|	                    |
          }
n!t'          |
d	
          }
nt)          |
          }
|                    t	          t          |	          t          d          |
f                     ||t          d          t+          |          g}|j        r6|                    t          d          t)          |j                  f           t	          |          S )NON CONFLICTc                 Z    g | ](}t          |t                    rt          |          n|)S r   r?  rW  r  s     rg   rZ  z6Database._build_on_conflict_update.<locals>.<listcomp>9  sA     '9 '9 '9  *#s33<s'9 '9 '9ri   rC  zON CONFLICT ON CONSTRAINTr7   rS  r  r   Fr  zDO UPDATE SET)r  rW   r5  r  r{  r  re   r]  r6   r  rg  r  r  r  rf  r   r/  r8   r  r_   rS   r:  r  r>  )r   r  rB  r'  targetupdatesr  excluded
expressionr  r`  r|  s               rg   _build_on_conflict_updatez"Database._build_on_conflict_update6  sw   ' 	(}%%D% '9 '9&7'9 '9 '9 : :F *6!63w<<#.#>#@ A A 233D 5F&#&& (  	+%/ + +#S__mF6K6K$L),. . .%}V'<'<c#hh'/'1 2 2
z**** 	J#+1133 J J1!!T** 
* "!S)) 4#EK33!!U++ 3JJqMM!!E222&q))Axq)9)93s88Q(GHHIIIIvs?33]75K5KL 	MLL#g,,{7I(J(JKLLLri   c                     |j         S rd   )	lastrowidr   r  
query_types      rg   r+  zDatabase.last_insert_idc  s    ri   c                     |j         S rd   )rowcountr   r  s     rg   r  zDatabase.rows_affectedf  s
    ri   c                 ,    |                     d          S r  r"  r?  s     rg   r   zDatabase.default_values_inserti  s    {{+,,,ri   c                 N    |                                                                  S rd   )r  r  r  s    rg   session_startzDatabase.session_startl  s     !!++---ri   c                     	 |                                  }n# t          $ r Y dS w xY w|                    |                                            dS NFbeginT)pop_transactionrx  commitr  r   txns     rg   session_commitzDatabase.session_commito  sa    	&&((CC 	 	 	55	

,,..
///t    
%%c                     	 |                                  }n# t          $ r Y dS w xY w|                    |                                            dS r  )r  rx  rollbackr  r  s     rg   session_rollbackzDatabase.session_rollbackw  sa    	&&((CC 	 	 	55	4..00111tr  c                 4    t          | j        j                  S rd   )r  r  r  r  s    rg   r  zDatabase.in_transaction  s    DK,---ri   c                 D    | j         j                            |           d S rd   )r  r  r  )r   r  s     rg   push_transactionzDatabase.push_transaction  s!     ''44444ri   c                 >    | j         j                                        S rd   )r  r  r  r  s    rg   r  zDatabase.pop_transaction  s    {'++---ri   c                 4    t          | j        j                  S rd   )r   r  r  r  s    rg   transaction_depthzDatabase.transaction_depth  s    4;+,,,ri   c                 B    | j         j        r| j         j        d         S d S Nrp  )r  r  r  s    rg   top_transactionzDatabase.top_transaction  s)    ;# 	0;+B//	0 	0ri   c                 "    t          | g|R i |S rd   r  r  s      rg   r  zDatabase.atomic  r  ri   c                      t          |           S rd   r  r  s    rg   r  zDatabase.manual_commit  r  ri   c                 "    t          | g|R i |S rd   r  r  s      rg   r  zDatabase.transaction  r  ri   c                      t          |           S rd   r  r  s    rg   r  zDatabase.savepoint  r  ri   c                     |                                  r|                                  t          5  |                                                     d           d d d            d S # 1 swxY w Y   d S )NBEGINr  r  r  r  r  r  s    rg   r  zDatabase.begin  s    >> 	LLNNN" 	+ 	+KKMM!!'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   (A%%A),A)c                     t           5  |                                                     d           d d d            d S # 1 swxY w Y   d S NROLLBACKr  r  r  r  s    rg   r  zDatabase.rollback  s    " 	. 	.KKMM!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.   (=AAc                     t           5  |                                                     d           d d d            d S # 1 swxY w Y   d S NCOMMITr  r  s    rg   r  zDatabase.commit  s    " 	, 	,KKMM!!(+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,r  c              #      K   t          ||          D ]8}|                                 5  |D ]}|V  	 d d d            n# 1 swxY w Y   9d S rd   )r$   r  )r   r  r  rs  r  s        rg   batch_commitzDatabase.batch_commit  s      R^^ 	 	E     CIIII              	 	s   
A  A	A	c                     t          |          r|}|j        j        }|j        j        }||                     |          v S )N)r  )r-  r.  rH  r  
get_tables)r   rH  r  rE  s       rg   table_existszDatabase.table_exists  sD    J 	(E/J['FT__F_;;;;ri   c                     t           rd   rf  )r   r  s     rg   r  zDatabase.get_tables  rh  ri   c                     t           rd   rf  r   r/  r  s      rg   get_indexeszDatabase.get_indexes  rh  ri   c                     t           rd   rf  r"  s      rg   get_columnszDatabase.get_columns  rh  ri   c                     t           rd   rf  r"  s      rg   get_primary_keyszDatabase.get_primary_keys  rh  ri   c                     t           rd   rf  r"  s      rg   get_foreign_keyszDatabase.get_foreign_keys  rh  ri   c                     t           rd   rf  )r   seqs     rg   sequence_existszDatabase.sequence_exists  rh  ri   c                 D    t          |          D ]} |j        di | d S r  )sort_modelscreate_table)r   modelsoptionsrE  s       rg   create_tableszDatabase.create_tables  s?     (( 	* 	*EE))))))	* 	*ri   c                 ^    t          t          |                    D ]} |j        di | d S r  )r  r.  
drop_table)r   r0  r  rE  s       rg   drop_tableszDatabase.drop_tables  sG    k&1122 	' 	'EE&&v&&&&	' 	'ri   c                     t           rd   rf  r   	date_part
date_fields      rg   extract_datezDatabase.extract_date  rh  ri   c                     t           rd   rf  r7  s      rg   truncate_datezDatabase.truncate_date  rh  ri   c                     t           rd   rf  r   r9  s     rg   to_timestampzDatabase.to_timestamp  rh  ri   c                     t           rd   rf  r>  s     rg   from_timestampzDatabase.from_timestamp  rh  ri   c                 4    t                                           S rd   )r;   randomr  s    rg   rC  zDatabase.random  s    yy{{ri   c                 @    |D ]}|                     | ||           d S )N)	bind_refsbind_backrefs)r  )r   r0  rE  rF  rE  s        rg   r  zDatabase.bind  s:     	O 	OEJJtyJNNNN	O 	Ori   c                 &    t          || ||          S rd   _BoundModelsContext)r   r0  rE  rF  s       rg   r  zDatabase.bind_ctx  s    "64MJJJri   c                 ,    |                     d          S )NzSELECT 0 WHERE 0r  r?  s     rg   get_noop_selectzDatabase.get_noop_select  s    {{-...ri   c                      t           d          s- G  fdd          }t          dt          fd|i           _         j        S )Nr  c                       e Zd Z ZdS )Database.Model.<locals>.MetaNr  r  s   rg   r  rN    r  ri   r  r  r  r  s   ` rg   rG   zDatabase.Model  r  ri   )TFNNNTr  rd   TT)Rr   r   r   r'   r  r  r  r;  r\  r  r  r  r  rD  rE  rJ  r  r)  safe_create_indexsafe_drop_index	sequencestruncate_tabler  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS  r  r  r  r+  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r'  r)  r,  r2  r5  r:  r<  r?  rA  rC  r  r  rK  r  rG   r   ri   rg   r(   r(   v  sE       MKJEEN #8J!&INOIN@E?C!$& $& $& $&L+ + +    ' ' '" " "   $         "  " " "& & &     
) ) ) )   - - -

 
 
 - - -" " "" " "+ + +Z         - - -. . .    . . .5 5 5. . .- - -0 0 0. . .  3 3 3     + + +. . ., , ,  < < < <" " " "" " " "" " " "" " " "" " " "" " "* * *' ' '" " "" " "" " "" " "  O O O OK K K K/ / /   X  ri   r(   c                 8      fd} fd}t          ||          S )Nc                 .    |                                S rd   pragmar  s    rg   r  z__pragma__.<locals>.__get__  s    {{4   ri   c                 0    |                      |          S rd   rV  )r   rn   r  s     rg   __set__z__pragma__.<locals>.__set__  s    {{4'''ri   )r  )r  r  rY  s   `  rg   
__pragma__rZ    sE    ! ! ! ! !( ( ( ( (GW%%%ri   c                       e Zd Zej        ej        ej        ej        ej        ej        dZdddZ	dZ
dZeZdZ	 	 dG fd		ZdH fd	Zd Zd Zd Zd Zd ZeddfdZ ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z  ed          Z! ed          Z" ed          Z# ed          Z$e%d             Z&e&j'        d             Z&d  Z(d! Z)d" Z*d# Z+dId$Z,dId%Z-dJd&Z.dJd'Z/	 	 dKd(Z0dKd)Z1dId*Z2dId+Z3d, Z4d- Z5d. Z6d/ Z7d0 Z8d1 Z9d2 Z:d3 Z;d4 Z<dJd5Z=d6 Z>dJd7Z?d8 Z@d9 ZAdJd:ZBdJd;ZCdJd<ZDdJd=ZEdJd>ZFdJd?ZGd@ ZHdA ZIdB ZJdC ZKdD ZLdE ZMdF ZN xZOS )LrX   )r  r   r"  r*  r#  r0  GLOBr   )r   r   Trp  FNc                    |                     dd           }|t          d          |pd| _         t          t          |           j        |g|R i | i | _        i | _        i | _        i | _	        t                      | _        i | _        | j        dk    | _        |                     t           dd           |                     t"          dd           |r|                     t$          dd           |rd	d
lm}m}	  || |	           d S d S )Nisolation_levelz/isolation_level must be None when using peewee.r   )rq      r   r8  r   
date_truncr  r   )register_udf_groupsRANK)r  r>   _pragmasr  rX   r  _aggregates_collations
_functions_window_functionsr]  _extensions	_attachedr  r  register_functionr   r   r   playhouse.sqlite_udfra  rb  )r   r  pragmasregexp_functionrank_functionsr  r  	isolationra  rb  r  s             rg   r  zSqliteDatabase.__init__	  sF   JJ0$77	 & (7 8 8 8  2,nd##,XGGGGGGG!#55"1Z?0+qAAA1<CCC 	@"">8Q??? 	,FFFFFFFFd+++++	, 	,ri   r=  c                 D   ||| _         t          | j         t                    r+t          | j                                                   | _         |&t
          dk     rt          j        d           || _        || _	         t          t          |           j        |fi | d S )N)rq   #   r   z.RETURNING clause requires Sqlite 3.35 or newer)rc  re   r  ra  r  __sqlite_version__r   r   r)  _timeoutr  rX   r  )r   r  rl  timeoutr)  r  r  s         rg   r  zSqliteDatabase.init!  s    #DMdmT** 	8 !4!4!6!677DM'!J..NOOO$4D!(nd##(<<V<<<<<ri   c                     d S rd   r   r  s     rg   r  z"SqliteDatabase._set_server_version.  r  ri   c                     t           t          d          t          j        | j        f| j        d d| j        }	 |                     |           n## t          $ r |                                  w xY w|S )NzSQLite driver not installed!)rt  r^  )	sqlite3r>   r  r  rs  r  _add_conn_hooksr,  r  r  s     rg   r  zSqliteDatabase._connect1  s    ?&'EFFFt} Ldm/3L L7;7JL L	  &&&& 	 	 	JJLLL	 s   A  A2c                 p   | j         r|                     |           | j        r|                     |           |                     |           |                     |           |                     |           | j        dk    r|                     |           | j	        r| 
                    |           d S d S )N)rq      r   )ri  _attach_databasesrc  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsrh  _load_extensionsr  s     rg   rx  zSqliteDatabase._add_conn_hooks=  s    > 	)""4(((= 	$d###d###d###T"""*,,''--- 	(!!$'''''	( 	(ri   c                     |                                 }| j        D ]!\  }}|                    d|d|d           "|                                 d S )NzPRAGMA z = ;)r  rc  r  r  )r   r  r  rW  rn   s        rg   r|  zSqliteDatabase._set_pragmasJ  s[    !] 	@ 	@MFENNN>????ri   c                     |                                 }| j                                        D ]!\  }}|                    d|d|d           "|                                 d S )NATTACH DATABASE "" AS "")r  ri  r  r  r  )r   r  r  r  rT  s        rg   r{  z SqliteDatabase._attach_databasesP  sg    ,,.. 	H 	HHD"NNNRRRFGGGGri   c                 V   |d|d|}d|z  }|t           urN|d|pdz  z  }|rAt          | j        pd          }|||<   t          |                                          | _        n|rt          d          |                     |                                          }|r|d         S d S )Nr  ".z	PRAGMA %sz = %sr   r   z/Cannot specify a permanent pragma without value)SENTINELr  rc  ra  r  r  r  fetchone)r   r  rn   	permanentr  r0  rl  r7  s           rg   rW  zSqliteDatabase.pragmaV  s    %vvss+CC  7ejq))C 6t}233$ $W]]__ 5 5 	PNOOOs##,,.. 	q6M	 	ri   
cache_sizeforeign_keysjournal_modejournal_size_limit	mmap_size	page_sizeread_uncommittedsynchronouswal_autocheckpointapplication_iduser_versiondata_versionc                     | j         S rd   )rs  r  s    rg   rt  zSqliteDatabase.timeouts  s
    }ri   c                     | j         |k    rd S || _         |                                 s|                     d|dz  z             d S d S )NzPRAGMA busy_timeout=%d;i  )rs  r  r  )r   secondss     rg   rt  zSqliteDatabase.timeoutw  s`    =G##F~~ 	K 6'D.IJJJJJ	K 	Kri   c                 x    | j                                         D ]\  }\  }}|                    |||            d S rd   )rd  r  create_aggregater   r  r  klass
num_paramss        rg   r}  zSqliteDatabase._load_aggregates  sO    )-)9)?)?)A)A 	; 	;%D%5*!!$
E::::	; 	;ri   c                 p    | j                                         D ]\  }}|                    ||           d S rd   )re  r  create_collation)r   r  r  r;   s       rg   r~  zSqliteDatabase._load_collations  sG    (..00 	, 	,HD"!!$++++	, 	,ri   c                 |    | j                                         D ]!\  }\  }}}|rd|ini } |j        |||fi | "d S )Ndeterministic)rf  r  create_function)r   r  r  r;   n_paramsr  r  s          rg   r  zSqliteDatabase._load_functions  sk    37?3H3H3J3J 	? 	?/D/2x9FNo}55BF D x>>v>>>>	? 	?ri   c                 x    | j                                         D ]\  }\  }}|                    |||            d S rd   )rg  r  create_window_functionr  s        rg   r  z%SqliteDatabase._load_window_functions  sS    )-)?)E)E)G)G 	A 	A%D%5*''j%@@@@	A 	Ari   c                     ||f| j         |p|j                                        <   |                                 s)|                     |                                            d S d S rd   )rd  r   rl  r  r}  r  r   r  r  r  s       rg   register_aggregatez!SqliteDatabase.register_aggregate  sg    <A:;N7!5!5!7!78~~ 	5!!$//"3"344444	5 	5ri   c                       fd}|S )Nc                 6                         |            | S rd   )r  r  r  r  r   s    rg   r@  z+SqliteDatabase.aggregate.<locals>.decorator  s     ##E4<<<Lri   r   r   r  r  r@  s   ``` rg   	aggregatezSqliteDatabase.aggregate  0    	 	 	 	 	 	 	 ri   c                     p|j         fd}||_        || j        <   |                                 s)|                     |                                            d S d S )Nc                  N    | t          dz            fz   }t          |          S )Nz
collate %s)rW   r{  )r  r  r  s     rg   
_collationz5SqliteDatabase.register_collation.<locals>._collation  s+    #lT&9":":!<<KK(((ri   )r   rd  re  r  r~  r  )r   r;   r  r  s     ` rg   register_collationz!SqliteDatabase.register_collation  s~    "r{	) 	) 	) 	) 	) "!#~~ 	5!!$//"3"344444	5 	5ri   c                       fd}|S )Nc                 4                         |            | S rd   )r  )r;   r  r   s    rg   r@  z+SqliteDatabase.collation.<locals>.decorator  s    ##B---Iri   r   )r   r  r@  s   `` rg   rd  zSqliteDatabase.collation  s*    	 	 	 	 	 	 ri   c                     |||f| j         |p|j        <   |                                 s)|                     |                                            d S d S rd   )rf  r   r  r  r  )r   r;   r  r  r  s        rg   rj  z SqliteDatabase.register_function  s\    02J/N+,~~ 	4  !2!233333	4 	4ri   c                       fd}|S )Nc                 8                         |            | S rd   )rj  )r;   r  r  r  r   s    rg   r@  z&SqliteDatabase.func.<locals>.decorator  s"    ""2tZGGGIri   r   )r   r  r  r  r@  s   ```` rg   rK  zSqliteDatabase.func  s6    	 	 	 	 	 	 	 	 ri   c                     |p|j                                         }||f| j        |<   |                                 s)|                     |                                            d S d S rd   )r   rl  rg  r  r  r  r  s       rg   register_window_functionz'SqliteDatabase.register_window_function  sl    -u~++--(-z':t$~~ 	;''(9(9:::::	; 	;ri   c                       fd}|S )Nc                 6                         |            | S rd   )r  r  s    rg   r@  z1SqliteDatabase.window_function.<locals>.decorator  s     ))%zBBBLri   r   r  s   ``` rg   window_functionzSqliteDatabase.window_function  r  ri   c                     | j         |= d S rd   )rd  r  s     rg   unregister_aggregatez#SqliteDatabase.unregister_aggregate      T"""ri   c                     | j         |= d S rd   )re  r  s     rg   unregister_collationz#SqliteDatabase.unregister_collation  r  ri   c                     | j         |= d S rd   )rf  r  s     rg   unregister_functionz"SqliteDatabase.unregister_function  s    OD!!!ri   c                     | j         |= d S rd   )rg  r  s     rg   unregister_window_functionz)SqliteDatabase.unregister_window_function  s    "4(((ri   c                 n    |                     d           | j        D ]}|                    |           d S rG  )enable_load_extensionrh  load_extension)r   r  	extensions      rg   r  zSqliteDatabase._load_extensions  sI    ""4((() 	+ 	+I	****	+ 	+ri   c                     | j                             |           |                                 s@|                                 }|                    d           |                    |           d S d S rG  )rh  r  r  r  r  r  )r   r  r  s      rg   r  zSqliteDatabase.load_extension  sr    Y'''~~ 	+??$$D&&t,,,	*****	+ 	+ri   c                 :    | j                             |           d S rd   )rh  remove)r   r  s     rg   unload_extensionzSqliteDatabase.unload_extension  s    	*****ri   c                     || j         v r%| j         |         |k    rdS t          d|z            || j         |<   |                                 s|                     d|d|d           dS )NFzschema "%s" already attached.r  r  r  T)ri  rL   r  r  )r   filenamer  s      rg   attachzSqliteDatabase.attach  s    4>!!~d#x//u"#BT#IJJJ't~~ 	PxxxNOOOtri   c                     || j         vrdS | j         |= |                                 s|                     d|z             dS )NFzDETACH DATABASE "%s"T)ri  r  r  r  s     rg   detachzSqliteDatabase.detach  sO    t~%%5N4 ~~ 	<3d:;;;tri   c                     | j         s|j        S |t          j        k    r,	 |d         d         S # t          t
          t          f$ r Y nw xY w|S r  )r)  r  r  r$  rx  r   	TypeErrorr  s      rg   r+  zSqliteDatabase.last_insert_id  sb    $ 	##6=((ay|#)4   s   . AAc                 J    	 |j         S # t          $ r |j        j         cY S w xY wrd   r  r   r  r  s     rg   r  zSqliteDatabase.rows_affected  ;    	*?" 	* 	* 	*=))))	*   	 ""c                 B    |rd|z  nd}|                      |           d S )NzBEGIN %sr  r  )r   	lock_typerF  s      rg   r  zSqliteDatabase.begin  s0    .7DJ**W	#####ri   c                 n    t           5  |                     d          cd d d            S # 1 swxY w Y   d S r  r  r  r  s    rg   r  zSqliteDatabase.commit	  s}    " 	. 	.##H--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.   *..c                 n    t           5  |                     d          cd d d            S # 1 swxY w Y   d S r  r  r  s    rg   r  zSqliteDatabase.rollback  s}    " 	0 	0##J//	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r  c                 x    |pd}|                      d|z  d          }d |                                D             S )Nmainz>SELECT name FROM "%s".sqlite_master WHERE type=? ORDER BY name)r/  c                     g | ]\  }|S r   r   r6  s     rg   rZ  z-SqliteDatabase.get_tables.<locals>.<listcomp>  s    222222ri   r  fetchall)r   r  r  s      rg   r  zSqliteDatabase.get_tables  sR    !6!! #9;A#BCMO O22 1 12222ri   c                 P    d|pdz  }d |                      |d          D             S )NzCSELECT name, sql FROM "%s".sqlite_master WHERE type=? ORDER BY namer  c                      g | ]}t          | S r   r  r6  s     rg   rZ  z,SqliteDatabase.get_views.<locals>.<listcomp>  s    OOOsc"OOOri   )viewr  )r   r  r0  s      rg   	get_viewszSqliteDatabase.get_views  s:    #)#3V5OOd.>.>sI.N.NOOOOri   c                 ^  	
 |pd}d|z  }|                      |df          }t          |                                          
t                      |                      d|dd          }|                                D ]:}|d         }t	          |d                   dk    }|r                    |           ;i 	t          
          D ]?}|                      d|d	|d          }d
 |                                D             	|<   @	
fdt          
          D             S )Nr  zVSELECT name, sql FROM "%s".sqlite_master WHERE tbl_name = ? AND type = ? ORDER BY namer#  PRAGMA "z".index_list("")r   r   z".index_info("c                     g | ]
}|d          S )r   r   r6  s     rg   rZ  z.SqliteDatabase.get_indexes.<locals>.<listcomp>2  s    (M(M(MCQ(M(M(Mri   c           	      R    g | ]#}t          ||         |         |v           $S r   r~  )rW  r  index_columnsindex_to_sqlr/  unique_indexess     rg   rZ  z.SqliteDatabase.get_indexes.<locals>.<listcomp>4  sS     . . .  T"d#& . . .ri   )r  r  r  r]  r   r  r  )r   r/  r  rB  r  r7  r  	is_uniquerG  r  r  r  s    `       @@@rg   r#  zSqliteDatabase.get_indexes  s   !6ADJK!!%%)9::FOO--.. !!!#)66555#2 3 3??$$ 	) 	)Cq6DCFq(I )""4(((  .. 	N 	NJ%%%'-vvzzz'; < <F(M(M6??;L;L(M(M(MM*%%. . . . . . . |,,. . . 	.ri   c                     |                      d|pddd          }fd|                                D             S )Nr  r  ".table_info("r  c                     g | ]B}t          |d          |d         |d          t          |d                   |d                   CS )r   r   rq   r=  r<  )r  r  )rW  r  r/  s     rg   rZ  z.SqliteDatabase.get_columns.<locals>.<listcomp>@  sW     , , , qtQqTqt8T!A$ZZ!MM , , ,ri   r  r   r/  r  r  s    `  rg   r%  zSqliteDatabase.get_columns=  si    !!!#)#3V#3#3UUU#< = =, , , ,**, , , 	,ri   c                     |                      d|pdd|d          }d t          d |                                          D             S )Nr  r  r  r  c                     g | ]
}|d          S ry  r   r6  s     rg   rZ  z3SqliteDatabase.get_primary_keys.<locals>.<listcomp>F  s    MMM3AMMMri   c                     | d         S r
  r   )r  s    rg   rh   z1SqliteDatabase.get_primary_keys.<locals>.<lambda>F  s
    1R5 ri   r  rC  r  r  s       rg   r'  zSqliteDatabase.get_primary_keysC  s]    !!!#)#3V#3#3UUU#< = =MM&&//:K:K"L"LMMMMri   c                     |                      d|pddd          }fd|                                D             S )Nr  r  z".foreign_key_list("r  c                 X    g | ]&}t          |d          |d         |d                   'S )rq   r   r<  r  rW  r7  r/  s     rg   rZ  z3SqliteDatabase.get_foreign_keys.<locals>.<listcomp>K  C     . . . #3q63q63q65AA . . .ri   r  r  s    `  rg   r)  zSqliteDatabase.get_foreign_keysH  si    !!!#)#3V#3#3UUU#< = =. . . .!??,,. . . 	.ri   c                     t           j        S rd   )rw  Binaryr  s    rg   get_binary_typezSqliteDatabase.get_binary_typeN  
    ~ri   c                     |j         r|j                                         nd}|r-|dvr+t          d|j                                         z            S d S d S )Nr)  )nothingr   zINSERT OR %s)r  rl  rW   upperr   r  rB  r  s       rg   r  z!SqliteDatabase.conflict_statementQ  sk    0;0CK$**,,, 	Ef$999~(;(A(A(C(CCDDD	E 	E99ri   c                    | j         dk     r<t          |j        |j        |j        |j        |j        f          rt          d          |j        r|j        	                                nd}|r|dvrd S |dk    rt          d          S |j        s|j        st          d          |j        rt          d          |j        st          d	          |                     ||          S )
N)rq      r   zFSQLite does not support specifying which values to preserve or update.r)  )r	  r   r)  r	  zON CONFLICT DO NOTHINGzIf you are not performing any updates (or preserving any INSERTed values), then the conflict resolution action should be set to "NOTHING".zMSQLite does not support specifying named constraints for conflict resolution.zISQLite requires that a conflict target be specified when doing an upsert.)r  rO  r  r  r  r  r  r  r  rl  rW   r  )r   ocrB  r  s       rg   r  zSqliteDatabase.conflict_updateV  s=   ++bj")R5H') * * ,  6 7 7 7 (*z9!!###r 	f$===FY/000 
	@BL 
	@ * + + + $ 	@ D E E E$ 	@ ? @ @ @ --b%888ri   c                 F    t                               ||t                    S N)r=  )r;   r8  r   r7  s      rg   r:  zSqliteDatabase.extract_dater  s    ||Iz|DDDri   c                 F    t                               ||t                    S r  )r;   r`  simple_date_timer7  s      rg   r<  zSqliteDatabase.truncate_dateu  s$    }}Y
*:  < < 	<ri   c                 ^    t                               d|                              d          S )NrR  integer)r;   r   ra  r>  s     rg   r?  zSqliteDatabase.to_timestampy  s$    {{4,,11)<<<ri   c                 8    t                               |d          S )N	unixepoch)r;   rw   r>  s     rg   rA  zSqliteDatabase.from_timestamp|  s    {{:{333ri   )NFF)Nr=  Nr
  rd   )Nrp  N)Pr   r   r   r  r  r-  r,  r.  r  r  rD  rJ  rr  r  rS  r  r  r  r  rx  r|  r{  r  rW  rZ  r  r  r  r  r  r  r  r  r  r  r  r  r  rt  r  r}  r~  r  r  r  r  r  rd  rj  rK  r  r  r  r  r  r  r  r  r  r  r  r+  r  r  r  r  r  r  r#  r%  r'  r)  r  r  r  r:  r<  r?  rA  r  r  s   @rg   rX   rX     s       :)	+I
 K  J I'NN?D %, , , , , ,0= = = = = =  
 
 
( ( (     !)E$      L))J:n--L:n--L#$899
;''I
;''I!z"455*]++K#$899Z 011N:n--L:n--L  X ^K K ^K; ; ;, , ,? ? ?
A A A5 5 5 5
   5 5 5 5    ;=(,4 4 4 4   ; ; ; ;   $ $ $$ $ $# # #* * *+ + +
+ + ++ + +	 	 	     * * *$ $ $ $. . .0 0 03 3 3 3P P P P
. . . .B, , , ,N N N N
. . . .  E E E
9 9 98E E E< < <= = =4 4 4 4 4 4 4ri   rX   c                   $    e Zd Zi Zd Zd Zd ZdS )_BasePsycopgAdapterc                 V    d | j                                         D             | _        d S )Nc                     i | ]\  }}||	S r   r   )rW  r  r`  s      rg   
<dictcomp>z0_BasePsycopgAdapter.__init__.<locals>.<dictcomp>  s+     %< %< %<QAq%< %< %<ri   )isolation_levelsr  isolation_levels_invr  s    rg   r  z_BasePsycopgAdapter.__init__  s8    %< %<!288::%< %< %<!!!ri   c                 J    t          |t                    r| j        |         S |S rd   )re   r]  r  r   r^  s     rg   isolation_level_intz'_BasePsycopgAdapter.isolation_level_int  s(    os++ 	>,_==ri   c                 J    t          |t                    r| j        |         S |S rd   )re   r   r  r  s     rg   isolation_level_strz'_BasePsycopgAdapter.isolation_level_str  s(    os++ 	:(99ri   N)r   r   r   r  r  r   r"  r   ri   rg   r  r    sG        < < <  
    ri   r  c                   V     e Zd ZdddddZ fdZd Zd Zd	 Zd
 Zd Z	d Z
d Z xZS )Psycopg2AdapterREAD COMMITTEDREPEATABLE READSERIALIZABLEREAD UNCOMMITTEDr   r   rq   r<  c                     t          t          |                                            t          | _        t          | _        d| _        d S rG  )r  r$  r  Json_pg2	json_type
jsonb_typecast_json_caser   r  s    rg   r  zPsycopg2Adapter.__init__  s;    ot$$--///!""ri   c                 2    t           t          d          d S )Nz#psycopg2 postgres driver not found.)psycopg2r>   r  s    rg   check_driverzPsycopg2Adapter.check_driver  s    &'LMMM ri   c                     t           j        S rd   )r1  r  r  s    rg   r  zPsycopg2Adapter.get_binary_type  s
    ri   c                    |j                             d          r|                    d|j                    n|                    d|j                    t          j        di |}|j        r>t          j        t          j        |           t          j        t          j	        |           |j
        r|                    |j
                   |S )Npostgresql://dsndbnamer   )r  r  
setdefaultr1  r  _register_unicodepg_extensionsregister_typeUNICODEUNICODEARRAY	_encodingset_client_encoding)r   rT  rU  r  s       rg   r  zPsycopg2Adapter.connect  s    ;!!/22 	5eR[1111h444))&)) 	J'(=tDDD'(BDIII< 	3$$R\222ri   c                     |j         S rd   r  r  s     rg   get_server_versionz"Psycopg2Adapter.get_server_version  s    ""ri   c                 J    |                                 }|t          j        k     S rd   )get_transaction_statusr:  TRANSACTION_STATUS_INERRORr   r  
txn_statuss      rg   r  z$Psycopg2Adapter.is_connection_usable  s!    0022
MDDDri   c                     |                                 }|t          j        k    rdS |t          j        k    r|                                 n$|t          j        k    r|                                 dS r  )rC  r:  TRANSACTION_STATUS_UNKNOWNrD  r  TRANSACTION_STATUS_IDLEr  rE  s      rg   is_connection_reusablez&Psycopg2Adapter.is_connection_reusable  se    0022
 AAA5=CCCJJLLLL=@@@MMOOOtri   c                     |                                 }|t          j        k    rdS |t          j        k    r|                                 dS r  )rC  r:  rH  rI  r  rE  s      rg   is_connection_closedz$Psycopg2Adapter.is_connection_closed  sF    0022
AAA4=@@@MMOOOuri   r   r   r   r  r  r2  r  r  rA  r  rJ  rL  r  r  s   @rg   r$  r$    s        	 # # # # #N N N    # # #E E E        ri   r$  c                   V     e Zd ZdddddZ fdZd Zd Zd	 Zd
 Zd Z	d Z
d Z xZS )Psycopg3Adapterr(  r%  r&  r'  r)  c                     t          t          |                                            t          | _        t
          | _        d| _        d S r   )r  rO  r  Json_pg3r,  	Jsonb_pg3r-  r.  r/  s    rg   r  zPsycopg3Adapter.__init__  s;    ot$$--///!##ri   c                 2    t           t          d          d S )Nz"psycopg postgres driver not found.)psycopgr>   r  s    rg   r2  zPsycopg3Adapter.check_driver  s    ?&'KLLL ?ri   c                     t           j        S rd   )rT  r  r  s    rg   r  zPsycopg3Adapter.get_binary_type  r  ri   c                     |j                             d          r|                    d|j                    n|                    d|j                    t          j        di |S )Nr5  conninfor7  r   )r  r  r8  rT  r  )r   rT  rU  s      rg   r  zPsycopg3Adapter.connect  sc    ;!!/22 	5j"+6666h444(((((ri   c                     |j         j        S rd   )pgconnr  r  s     rg   rA  z"Psycopg3Adapter.get_server_version  s    {))ri   c                 6    |j         j        t          j        k     S rd   )rY  transaction_statusr   INERRORr  s     rg   r  z$Psycopg3Adapter.is_connection_usable  s    {-0A0IIIri   c                     |j         j        }|t          j        k    rdS |t          j        k    r|                                 n$|t          j        k    r|                                 dS r  )rY  r[  r   UNKNOWNr\  r  IDLEr  rE  s      rg   rJ  z&Psycopg3Adapter.is_connection_reusable  sa    [3
 *2225,444JJLLLL,111MMOOOtri   c                     |j         j        }|t          j        k    rdS |t          j        k    r|                                 dS r  )rY  r[  r   r^  r_  r  rE  s      rg   rL  z$Psycopg3Adapter.is_connection_closed  sA    [3
*2224,111MMOOOuri   rM  r  s   @rg   rO  rO    s        	 $ $ $ $ $M M M  ) ) )* * *J J J        ri   rO  c            
           e Zd Zdddddddddd		Zd
ddZdZeZdZdZ	dZ
dZeZeZ	 	 d) fd	Zd Zd Zd Zd*dZd Zd*dZd*dZd*dZd*dZd*dZd*dZd*dZd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z%d& Z&d' Z'd( Z( xZ)S )+rM   SERIAL	BIGSERIALBYTEABOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONr0  )	r  r  r!  r"  r&  r'  r*  r0  r1  r  z~*)r  r  rR  TNc                 V   || _         || _        |                    dd          }t          #|st          |                                 | _        n|                                 | _        | j                            |          | _	         t          t          |           j        |fi | d S )Nprefer_psycopg3F)r9  r>  r  rT  r1  psycopg3_adapter_adapterpsycopg2_adapterr   _isolation_levelr  rM   r  )r   r  register_unicodeencodingr^  r  rj  r  s          rg   r  zPostgresqlDatabase.init!  s    !1! **%6>>Ox7G 1133DMM 1133DM !% A A! ! 	- $'',X@@@@@@@ri   c                     | j                                           | j         j        | fi | j        }| j        r|                    | j                   d|_        |S rG  )rl  r2  r  r  rn  set_isolation_levelr  r  s     rg   r  zPostgresqlDatabase._connect3  se    ""$$$ %t}$TAAT-@AA  	<$$T%:;;;ri   c                 D    | j                             |          | _        d S rd   )rl  rA  r  r  s     rg   r  z&PostgresqlDatabase._set_server_version@  s     "m>>tDDri   c                 f    | j         j        rdS | j                            | j         j                  S r   )r  r  rl  r  r  r  s    rg   r  z'PostgresqlDatabase.is_connection_usableC  s1    ; 	5
 }11$+2BCCCri   c                     	 |t           j        k    r|n|d         d         S # t          t          t          f$ r Y d S w xY wr  )r  r$  rx  r   r  r  s      rg   r+  z!PostgresqlDatabase.last_insert_idL  sN    	'6=8866fQilJHi0 	 	 	DD	s   " ==c                 J    	 |j         S # t          $ r |j        j         cY S w xY wrd   r  r  s     rg   r  z PostgresqlDatabase.rows_affectedR  r  r  c                 ,   |                                  r|                                  |r | j                            |          }d|z  }nd}t          5  |                                                     |           d d d            d S # 1 swxY w Y   d S )Nz$BEGIN TRANSACTION ISOLATION LEVEL %sr  )r  r  rl  r"  r  r  r  )r   r^  txn_typer'  s       rg   r  zPostgresqlDatabase.beginX  s    >> 	LLNNN 	}88IIH9HDDDD" 	( 	(KKMM!!$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   (B		BBc                 t    d}|                      ||pdf          }d |                                D             S )NzSSELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = %s ORDER BY tablenamepublicc                     g | ]\  }|S r   r   rW  r/  s     rg   rZ  z1PostgresqlDatabase.get_tables.<locals>.<listcomp>g  s    666&%666ri   r  r   r  rB  r  s       rg   r  zPostgresqlDatabase.get_tablesc  sD    <!!%&*<H)>??66FOO$5$56666ri   c                 t    d}|                      ||pdf          }d |                                D             S )Nz\SELECT viewname, definition FROM pg_catalog.pg_views WHERE schemaname = %s ORDER BY viewnamerz  c                 Z    g | ](\  }}t          ||                    d                     )S )z 	;)r  strip)rW  	view_namer0  s      rg   rZ  z0PostgresqlDatabase.get_views.<locals>.<listcomp>m  sB     ; ; ;$Y Y		&(9(9:: ; ; ;ri   r  r}  s       rg   r  zPostgresqlDatabase.get_viewsi  sQ    ;!!%&*<H)>??; ;(.(9(9; ; ; 	;ri   c                 ~    d}|                      |d|pdf          }fd|                                D             S )Nar  
            SELECT
                i.relname, idxs.indexdef, idx.indisunique,
                array_to_string(ARRAY(
                    SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
                    FROM generate_subscripts(idx.indkey, 1) AS k
                    ORDER BY k), ',')
            FROM pg_catalog.pg_class AS t
            INNER JOIN pg_catalog.pg_namespace AS n ON t.relnamespace = n.oid
            INNER JOIN pg_catalog.pg_index AS idx ON t.oid = idx.indrelid
            INNER JOIN pg_catalog.pg_class AS i ON idx.indexrelid = i.oid
            INNER JOIN pg_catalog.pg_indexes AS idxs ON (
                idxs.tablename = t.relname
                AND idxs.indexname = i.relname
                AND idxs.schemaname = n.nspname)
            WHERE t.relname = %s AND t.relkind = %s AND n.nspname = %s
            ORDER BY idx.indisunique DESC, i.relname;r  rz  c           	          g | ]@\  }}}}t          ||                    d           |                    d          |          AS )z ;,)r~  rstripr   )rW  r  r0  r  r  r/  s        rg   rZ  z2PostgresqlDatabase.get_indexes.<locals>.<listcomp>  sd     H H H1D#y' dCJJt$4$4gmmC6H6H'0 0 H H Hri   r  r   r/  r  rB  r  s    `   rg   r#  zPostgresqlDatabase.get_indexesp  sj    9" !!%%f6H)IJJH H H H5;__5F5FH H H 	Hri   c                     d}|                      ||pdf          }t          |                     |                    fd|                                D             S )Nz
            SELECT column_name, is_nullable, data_type, column_default
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = %s
            ORDER BY ordinal_positionrz  c           
      N    g | ]!\  }}}}t          |||d k    |v |          "S YESr  rW  r  r	  r   dfpksr/  s        rg   rZ  z2PostgresqlDatabase.get_columns.<locals>.<listcomp>  K     = = =&D$B tRUBOO = = =ri   r  r]  r'  r  )r   r/  r  rB  r  r  s    `   @rg   r%  zPostgresqlDatabase.get_columns  s    )
 !!%%1C8)DEE$''v6677= = = = =*0//*;*;= = = 	=ri   c                 |    d}d}|                      ||||pdf          }d |                                D             S )Na  
            SELECT kc.column_name
            FROM information_schema.table_constraints AS tc
            INNER JOIN information_schema.key_column_usage AS kc ON (
                tc.table_name = kc.table_name AND
                tc.table_schema = kc.table_schema AND
                tc.constraint_name = kc.constraint_name)
            WHERE
                tc.constraint_type = %s AND
                tc.table_name = %s AND
                tc.table_schema = %sPRIMARY KEYrz  c                     g | ]\  }|S r   r   )rW  pks     rg   rZ  z7PostgresqlDatabase.get_primary_keys.<locals>.<listcomp>  s    000sr000ri   r  )r   r/  r  rB  ctyper  s         rg   r'  z#PostgresqlDatabase.get_primary_keys  sO    
( !!%%8J()KLL00foo//0000ri   c                 |    d}|                      ||pdf          }fd|                                D             S )Na%  
            SELECT DISTINCT
                kcu.column_name, ccu.table_name, ccu.column_name
            FROM information_schema.table_constraints AS tc
            JOIN information_schema.key_column_usage AS kcu
                ON (tc.constraint_name = kcu.constraint_name AND
                    tc.constraint_schema = kcu.constraint_schema AND
                    tc.table_name = kcu.table_name AND
                    tc.table_schema = kcu.table_schema)
            JOIN information_schema.constraint_column_usage AS ccu
                ON (ccu.constraint_name = tc.constraint_name AND
                    ccu.constraint_schema = tc.constraint_schema)
            WHERE
                tc.constraint_type = 'FOREIGN KEY' AND
                tc.table_name = %s AND
                tc.table_schema = %srz  c                 X    g | ]&}t          |d          |d         |d                   'S )r   r   r   r  r  s     rg   rZ  z7PostgresqlDatabase.get_foreign_keys.<locals>.<listcomp>  r  ri   r  )r   r/  r  r0  r  s    `   rg   r)  z#PostgresqlDatabase.get_foreign_keys  s`    (  !!#v/A'BCC. . . .!??,,. . . 	.ri   c                 ~    |                      d|f          }t          |                                d                   S )Nz
            SELECT COUNT(*) FROM pg_class, pg_namespace
            WHERE relkind='S'
                AND pg_class.relnamespace = pg_namespace.oid
                AND relname=%sr   )r  r  r  )r   sequenceress      rg   r,  z"PostgresqlDatabase.sequence_exists  s@      " %-;	0 0
 CLLNN1%&&&ri   c                 p    	 | j                                         S # t          $ r t          d          w xY w)NzPostgres driver not installed.)rl  r  r   r>   r  s    rg   r  z"PostgresqlDatabase.get_binary_type  sJ    	I=00222 	I 	I 	I&'GHHH	Is    5c                     d S rd   r   r  s      rg   r  z%PostgresqlDatabase.conflict_statement      ri   c                    |j         r|j                                         nd}|dv ryt          d          g}|j        r1|                    t          d |j        D                                  |                    t          d                     t          |          S |r|dk    rt          d          |j        s|j	        st          d          |j        s|j
        st          d	          |                     ||          S )
Nr)  )r  r	  r  c                 Z    g | ](}t          |t                    rt          |          n|)S r   r?  r  s     rg   rZ  z6PostgresqlDatabase.conflict_update.<locals>.<listcomp>  sA     /4 /4 /4 $.c3#7#7@F3KKKS/4 /4 /4ri   z
DO NOTHINGr   z\The only supported actions for conflict resolution with Postgresql are "ignore" or "update".zIf you are not performing any updates (or preserving any INSERTed values), then the conflict resolution action should be set to "IGNORE".zKPostgres requires that a conflict target be specified when doing an upsert.)r  rl  rW   r  r  r5  r{  r  r  r  r  r  )r   r  rB  r  r|  s        rg   r  z"PostgresqlDatabase.conflict_update  sU   ')z9!!###r***''(E" 6- /4 /4!2/4 /4 /4 5 5 6 6 6 LL\**+++E??" 	@(** ) * * *  	@BL 	@ ) * * * % 	@)@ 	@ ? @ @ @ --b%888ri   c                     t                               t          t          |          t          d          |f                    S NFROMr;   EXTRACTr{  rW   r7  s      rg   r:  zPostgresqlDatabase.extract_date  /    zz(C	NNCKK#LMMNNNri   c                 8    t                               ||          S rd   )r;   
DATE_TRUNCr7  s      rg   r<  z PostgresqlDatabase.truncate_date  s    }}Y
333ri   c                 >    t          t          d          |f          S )Nintervalr  r   r  s     rg   r  zPostgresqlDatabase.interval  s    Z#.///ri   c                 .    |                      d|          S )NEPOCH)r:  r>  s     rg   r?  zPostgresqlDatabase.to_timestamp  s      *555ri   c                 6    t                               |          S rd   )r;   r?  r>  s     rg   rA  z!PostgresqlDatabase.from_timestamp  s    z***ri   c                 ,    |                     d          S )NzSELECT 0 WHERE falser  r?  s     rg   rK  z"PostgresqlDatabase.get_noop_select  s    {{1222ri   c                 ^    |                      d|                    dd          z             d S )Nzset time zone '%s';rX  rY  )r  r{   )r   ry   s     rg   set_time_zonez PostgresqlDatabase.set_time_zone  s2    083C3CC3N3NNOOOOOri   c                 D    | j                             |          | _        d S rd   )rl  r   rn  r  s     rg   rr  z&PostgresqlDatabase.set_isolation_level  s%     $ A A! !ri   )TNNrd   )*r   r   r   r  r  r;  r  r  r  r  r)  rR  r$  rm  rO  rk  r  r  r  r  r+  r  r  r  r  r#  r%  r'  r)  r,  r  r  r  r:  r<  r  r?  rA  rK  r  rr  r  r  s   @rg   rM   rM   
  sN       $	 	K  D11JE"8JNI&&=A!A A A A A A$  E E ED D D   * * *	( 	( 	( 	(7 7 7 7; ; ; ;H H H H.	= 	= 	= 	=1 1 1 1 . . . .*' ' 'I I I  9 9 92O O O4 4 40 0 06 6 6+ + +3 3 3P P P      ri   rM   c            	            e Zd Zddddddddd	Zd
dddddZdZdZeZdZ	dZ
dZdZdZdZ fdZd Zd Zd Zd Zd Zd-dZd-dZd-dZd-d Zd-d!Zd-d"Zd-d#Zd$ Zd% Zd& Zd' Zd( Z d) Z!d* Z"d+ Z#d, Z$ xZ%S ).rI   zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTr"  rg  rh  r,  zVARCHAR(40)zVARBINARY(16))r  r  r"  r'  r*  r,  r0  r1  zLIKE BINARYr   zREGEXP BINARYr  r   )r   r   r  r  r   rR  z``Tl    FPIPES_AS_CONCATc                     d| j         dd}|                    |           d|v rt          r|                    d          |d<    t	          t
          |           j        |fi | d S )NrZ  T)charsetsql_modeuse_unicodepasswordpasswd)r  r   mysql_passwdr  r  rI   r  )r   r  r  rU  r  s       rg   r  zMySQLDatabase.init  s    ! ! 	fL%zz*55F8'mT""';;F;;;;;ri   c                 n    t           t          d          t          j        d| j        dd| j        }|S )NzMySQL driver not installed!T)rT  r  r   )mysqlr>   r  r  r  r  s     rg   r  zMySQLDatabase._connect!  sG    =&'DEEE} 4$ 4 4#24 4ri   c                     	 |j         }n$# t          $ r |                                }Y nw xY w|                     |          | _         d S rd   )r  r   get_server_info_extract_server_version)r   r  version_raws      rg   r  z!MySQLDatabase._set_server_version(  s]    	1-KK 	1 	1 	1..00KKK	1"::;GGs   
 ++c                 t   t          |t                    r|S |                                }d|v rt          j        d|          }nt          j        d|          }|Dt          d |                                d                             d          D                       S t          j        d|z             dS )	Nmariaz(1\d\.\d+\.\d+)z(\d{1,2}\.\d+\.\d+)c              3   4   K   | ]}t          |          V  d S rd   )r   )rW  nums     rg   rz  z8MySQLDatabase._extract_server_version.<locals>.<genexpr>8  s(      NNcSNNNNNNri   r   rS  z'Unable to determine MySQL version: "%s"r   )	re   rb  rl  r   r   r  r   r   r   )r   versionrt  s      rg   r  z%MySQLDatabase._extract_server_version/  s    gu%% 	N--//g	"4g>>II	"8'BBI NNY-=-=-?-?-B-H-H-M-MNNNNNN?'IJJJyri   c                     | j         j        rdS | j         j        }t          |d          r3| j        d         dk    rd}nd}	  |j        |  n# t          $ r Y dS w xY wdS )NFpingr   rD  r   r  T)r  r  r  r  r  r  r,  )r   r  r  s      rg   r  z"MySQLDatabase.is_connection_usable=  s    ; 	5{4   	"1%**	4      uuts   
A 
AAc                 ,    |                     d          S )Nz() VALUES ()r  r?  s     rg   r   z#MySQLDatabase.default_values_insertM  s    {{>***ri   Nc                    |                                  r|                                  t          5  |                                 }|r|                    d|z             |                    d           d d d            d S # 1 swxY w Y   d S )Nz"SET TRANSACTION ISOLATION LEVEL %sr  r  )r   r^  curss      rg   r  zMySQLDatabase.beginP  s    >> 	LLNNN" 	" 	";;==D .A,- . . .LL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   ABBBc                 F    d}d |                      |d          D             S )NzySELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type != %s ORDER BY table_namec                     g | ]\  }|S r   r   r|  s     rg   rZ  z,MySQLDatabase.get_tables.<locals>.<listcomp>^  s    GGG&%GGGri   )VIEWr  )r   r  rB  s      rg   r  zMySQLDatabase.get_tablesZ  s0    ' HGD$4$4UI$F$FGGGGri   c                 l    d}|                      |          }d |                                D             S )NztSELECT table_name, view_definition FROM information_schema.views WHERE table_schema = DATABASE() ORDER BY table_namec                      g | ]}t          | S r   r  r6  s     rg   rZ  z+MySQLDatabase.get_views.<locals>.<listcomp>e  s    @@@sc"@@@ri   r  r}  s       rg   r  zMySQLDatabase.get_views`  s=    G !!%((@@foo.?.?@@@@ri   c                 r   |                      dz            }t                      i |                                D ]h}|d         s                    |d                                        |d         g            |d                                      |d                    ifdD             S )NSHOW INDEX FROM `%s`r   r   r<  c           	      F    g | ]}t          |d |         |v           S rd   r  )rW  r  indexesr/  r9  s     rg   rZ  z-MySQLDatabase.get_indexes.<locals>.<listcomp>p  sA     % % % dD'$-OO % % %ri   )r  r]  r  r  r8  r  )r   r/  r  r  r7  r  r9  s    `   @@rg   r#  zMySQLDatabase.get_indexesg  s    !!"85"@AA??$$ 	+ 	+Cq6 #

3q6"""s1vr***CFO""3q6****% % % % % %#% % % 	%ri   c                     d}|                      |f          }t          |                                         fd|                                D             S )Nz
            SELECT column_name, is_nullable, data_type, column_default
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = DATABASE()
            ORDER BY ordinal_positionc           
      N    g | ]!\  }}}}t          |||d k    |v |          "S r  r  r  s        rg   rZ  z-MySQLDatabase.get_columns.<locals>.<listcomp>{  r  ri   r  )r   r/  r  r0  r  r  s    `   @rg   r%  zMySQLDatabase.get_columnss  sy    )
 !!#x00$''..//= = = = =*0//*;*;= = = 	=ri   c                     |                      d|z            }d t          d |                                          D             S )Nr  c                     g | ]
}|d          S )r<  r   r6  s     rg   rZ  z2MySQLDatabase.get_primary_keys.<locals>.<listcomp>  s.     L L L3A L L Lri   c                     | d         dk    S )Nr   PRIMARYr   )r7  s    rg   rh   z0MySQLDatabase.get_primary_keys.<locals>.<lambda>  s    3q6Y#6 ri   r  r  s       rg   r'  zMySQLDatabase.get_primary_keys~  sZ    !!"85"@AAL L668I8IJJL L L 	Lri   c                 v    d}|                      |f          }fd|                                D             S )Na@  
            SELECT column_name, referenced_table_name, referenced_column_name
            FROM information_schema.key_column_usage
            WHERE table_name = %s
                AND table_schema = DATABASE()
                AND referenced_table_name IS NOT NULL
                AND referenced_column_name IS NOT NULLc                 <    g | ]\  }}}t          |||          S r   r  )rW  r  r  r  r/  s       rg   rZ  z2MySQLDatabase.get_foreign_keys.<locals>.<listcomp>  sC     F F F/
K vz;FFF F Fri   r  r  s    `   rg   r)  zMySQLDatabase.get_foreign_keys  s`    : !!%%22F F F F39??3D3DF F F 	Fri   c                     t           j        S rd   )r  r  r  s    rg   r  zMySQLDatabase.get_binary_type  s
    |ri   c                     |j         sd S |j                                         }|dk    rt          d          S |dk    rt          d          S |dk    rt          d          d S )Nr{   r  r  zINSERT IGNOREr   zWUn-supported action for conflict resolution. MySQL supports REPLACE, IGNORE and UPDATE.)r  rl  rW   r  r  s       rg   r  z MySQLDatabase.conflict_statement  s    "*FF$**,,Yy>>!x'''x J K K K  ri   c           	         |j         s|j        s|j        rt          d          g }|j        r| j        pd}|d         dk    r|dk    rt          j        }nt          j        }|j        D ][}t          |          }t          t          |          t          d           ||          f          }|                    |           \|j        r|j                                        D ]\  }	}
t          |
t                     sft          |	t"                    rt%          |j        |	          }	t          |	t(                    r|	                    |
          }
nt-          |
d          }
|                    t          t          |	          t          d          |
f                     |r+t          t          d	          t/          |          f          S d S )
NzfMySQL does not support the specification of where clauses or conflict targets for conflict resolution.r   r   
   )r  rq   rq   r   Fr  zON DUPLICATE KEY UPDATE)r  r  r  r  r  r  r;   VALUEVALUESrg  r{  rW   r  r  r  re   rf  r]  r   r/  r8   r  r_   r:  )r   r  rB  r  r  VALUE_FNr  entityr  r  r`  s              rg   r  zMySQLDatabase.conflict_update  s    	,!= 	,+	, + , , ,   	+ )1TGqzRGz$9$989%/ + +&v..%!&))HHHV$$'& ' '
 z**** 	J#+1133 
J 
J1!!T** 3 "!S)) 4#EK33!!U++ 3JJqMM!!E222xq)9)93s88Q(GHHIIII 	6S!:;;*7335 6 6 6	6 	6ri   c                     t                               t          t          |          t          d          |f                    S r  r  r7  s      rg   r:  zMySQLDatabase.extract_date  r  ri   c                 \    t                               |t          |         t                    S r  )r;   DATE_FORMAT__mysql_date_trunc__r  r7  s      rg   r<  zMySQLDatabase.truncate_date  s*    ~~j*>y*I+;  = = 	=ri   c                 6    t                               |          S rd   )r;   UNIX_TIMESTAMPr>  s     rg   r?  zMySQLDatabase.to_timestamp  s      ,,,ri   c                 6    t                               |          S rd   )r;   FROM_UNIXTIMEr>  s     rg   rA  zMySQLDatabase.from_timestamp  s    
+++ri   c                 4    t                                           S rd   )r;   randr  s    rg   rC  zMySQLDatabase.random  s    wwyyri   c                 ,    |                     d          S )NzSELECT 0 WHERE 0=1r  r?  s     rg   rK  zMySQLDatabase.get_noop_select  s    {{/000ri   rd   )&r   r   r   r  r  r;  r\  r  r  r  rE  rJ  rP  rQ  r  r  r  r  r  r  r   r  r  r  r#  r%  r'  r)  r  r  r  r:  r<  r?  rA  rC  rK  r  r  s   @rg   rI   rI     s#       (*$ " "K ! J EE":J!%IO H< < < < <  H H H     + + +" " " "H H H HA A A A
% 
% 
% 
%	= 	= 	= 	=L L L L
F F F F  
K 
K 
K)6 )6 )6VO O O= = =- - -, , ,  1 1 1 1 1 1 1ri   rI   c                   &    e Zd Zd Zd Zd Zd ZdS )r  c                     || _         d S rd   r  r  s     rg   r  z_manual.__init__  s    ri   c                 @     t                     fd            }|S )Nc                  p    t          j                  5   | i |cd d d            S # 1 swxY w Y   d S rd   )r  rT  r  s     rg   r  z_manual.__call__.<locals>.inner  s    !! + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rg   r  z_manual.__call__  r  ri   c                     | j                                         }|$t          |t                    st	          d          | j                             |            d S )Nz?Cannot enter manual commit block while a transaction is active.)rT  r  re   r  r  r  )r   tops     rg   r  z_manual.__enter__  s[    g%%''?:c7#;#;? 6 7 7 7  &&&&&ri   c                 Z    | j                                         | urt          d          d S )Nz>Transaction stack corrupted while exiting manual commit block.)rT  r  r  r%  s       rg   r  z_manual.__exit__  s:    7""$$D00 4 5 5 5 10ri   Nr  r   ri   rg   r  r    sP            ' ' '5 5 5 5 5ri   r  c                   &    e Zd Zd Zd Zd Zd ZdS )r  c                 &    || _         ||f| _        d S rd   )rT  _transaction_argsr   rT  r  r  s       rg   r  z_atomic.__init__  s    "&ri   c                 @     t                     fd            }|S )Nc                      j         \  }}t          j        g|R i |5   | i |cd d d            S # 1 swxY w Y   d S rd   )r  r  rT  r  r  r  r  r;   r   s       rg   r  z_atomic.__call__.<locals>.inner  s    )DAq*1***** + +r4*6**+ + + + + + + + + + + + + + + + + +   6::r   r  s   `` rg   r  z_atomic.__call__  9    	r	+ 	+ 	+ 	+ 	+ 
	+ ri   c                 d   | j                                         dk    r"| j        \  }} | j         j        |i || _        nYt          | j                                         t                    rt          d          | j         	                                | _        | j        
                                S )Nr   z=Cannot enter atomic commit block while in manual commit mode.)rT  r  r  r  _helperre   r  r  r  r  r  r  s      rg   r  z_atomic.__enter__  s    7$$&&!++1LD&.47.???DLL//117;; 	/ 3 4 4 4  7,,..DL|%%'''ri   c                 :    | j                             |||          S rd   )r	  r  r%  s       rg   r  z_atomic.__exit__  s    |$$Xw???ri   Nr  r   ri   rg   r  r    sU        0 0 0  	( 	( 	(@ @ @ @ @ri   r  c                   <    e Zd Zd Zd Zd Zd
dZd
dZd Zd Z	d	S )r  c                 &    || _         ||f| _        d S rd   )rT  _begin_argsr  s       rg   r  z_transaction.__init__  s     &>ri   c                 @     t                     fd            }|S )Nc                      j         \  }}t          j        g|R i |5   | i |cd d d            S # 1 swxY w Y   d S rd   )r	  r  rT  r  s       rg   r  z$_transaction.__call__.<locals>.inner  s    #DAqdg////Q// + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rg   r  z_transaction.__call__  r  ri   c                 >    | j         \  }} | j        j        |i | d S rd   )r	  rT  r  r  s      rg   _beginz_transaction._begin"  s-    'ft&v&&&&&ri   Tc                 h    | j                                          |r|                                  d S d S rd   )rT  r  r		  r   r  s     rg   r  z_transaction.commit&  s7     	KKMMMMM	 	ri   c                 h    | j                                          |r|                                  d S d S rd   )rT  r  r		  r	  s     rg   r  z_transaction.rollback+  s9     	KKMMMMM	 	ri   c                     | j                                         dk    r|                                  | j                             |            | S r  )rT  r  r		  r  r  s    rg   r  z_transaction.__enter__0  sC    7$$&&!++KKMMM  &&&ri   c                 ,   | j                                         }| j                                          |r|dk    r|                     d           d S |dk    r<	 |                     d           d S # t
          $ r |                     d            w xY wd S Nr   F)rT  r  r  r  r  r,  )r   r&  r'  r(  depths        rg   r  z_transaction.__exit__6  s    ))++!!! 	

MM%     aZZE"""""   e$$$ Zs   A0 0!BNrt  
r   r   r   r  r  r		  r  r  r  r  r   ri   rg   r  r    s        * * *  ' ' '   
   
  
 
 
 
 
ri   r  c                   >    e Zd Zd
dZd Zd ZddZddZd Zd	 Z	dS )r  Nc                     || _         |pdt          j                    j        z   | _        | j                            | j         j                  | _        d S )Nr   )rT  uuiduuid4hexsidrV  r\  
quoted_sid)r   rT  r	  s      rg   r  z_savepoint.__init__D  s@    0#
 00(--66ri   c                 @     t                     fd            }|S )Nc                  p    t          j                  5   | i |cd d d            S # 1 swxY w Y   d S rd   )r  rT  r  s     rg   r  z"_savepoint.__call__.<locals>.innerJ  s    DG$$ + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rg   r  z_savepoint.__call__I  r  ri   c                 J    | j                             d| j        z             d S )NzSAVEPOINT %s;)rT  r  r	  r  s    rg   r		  z_savepoint._beginP  s%    Odo=>>>>>ri   Tc                 z    | j                             d| j        z             |r|                                  d S d S )NzRELEASE SAVEPOINT %s;rT  r  r	  r		  r	  s     rg   r  z_savepoint.commitS  s<    3doEFFF$++-----ri   c                 z    | j                             d| j        z             |r|                                  d S d S )NzROLLBACK TO SAVEPOINT %s;r	  r	  s     rg   r  z_savepoint.rollbackW  s<    7$/IJJJ$++-----ri   c                 .    |                                   | S rd   )r		  r  s    rg   r  z_savepoint.__enter__[  s    ri   c                     |r|                      d           d S 	 |                     d           d S # t          $ r |                      d            w xY w)NFr  )r  r  r,  r%  s       rg   r  z_savepoint.__exit___  ss     	MM%     %(((((   E***s	   3 "Ard   rt  r	  r   ri   rg   r  r  C  s        7 7 7 7
  ? ? ?                    ri   r  c                   P    e Zd Zd Zd Zd Zd Zd ZddZd Z	d	 Z
ddZddZdS )r  c                 Z    || _         d| _        d| _        d| _        d| _        g | _        d S )Nr   F)r  r4  r#  initialized	populatedr"  r  s     rg   r  zCursorWrapper.__init__n  s1    

 ri   c                 V    | j         rt          | j                  S t          |           S rd   )r$	  r~  r"  ResultIteratorr  s    rg   r  zCursorWrapper.__iter__v  s*    > 	('''d###ri   c                 T   t          |t                    rF|j        }||dk     r|                                  n|                     |           | j        |         S t          |t
                    r*|                     |dk    r|nd           | j        |         S t          d          )Nr   z6CursorWrapper only supports integer and slice indexes.)re   r  r  r!  r"  r   r  )r   r  r  s      rg   r  zCursorWrapper.__getitem__{  s    dE"" 	)9D|taxx!!!!%%%>$''c"" 	)OOD1HHDD!444>$'' ( ) ) )ri   c                 8    |                                   | j        S rd   )r!  r4  r  s    rg   r%  zCursorWrapper.__len__  s    zri   c                     d S rd   r   r  s    rg   r  zCursorWrapper.initialize  r  ri   Tc                 P   | j                                         }|'d| _        | j                                          t          | j        s|                                  d| _        | xj        dz  c_        |                     |          }|r| j	        
                    |           |S )NTr   )r  r  r$	  r  r  r#	  r  r4  process_rowr"  r  )r   cacher7  r  s       rg   iteratezCursorWrapper.iterate  s    k""$$;!DNK! 	$OO#D

a

!!#&& 	*N!!&)))ri   c                     |S rd   r   r   r7  s     rg   r+	  zCursorWrapper.process_row  s    
ri   c              #   ^   K   	 	 |                      d          V  n# t          $ r Y dS w xY w+)z1Efficient one-pass iteration over the result set.TFN)r-	  r  r  s    rg   r  zCursorWrapper.iterator  sR      	ll5))))))    	s    
++r   c                 R   |pt          d          }|dk     rt          d          | j        s|| j        k    rd S t	          |           }| j        |_        | j        sF|| j        k    r=	 |                                 n# t          $ r Y d S w xY w| j        s|| j        k    9d S d S d S d S )NInfr   z"Negative values are not supported.)floatr  r$	  r4  r&	  r#  r  r  )r   r  r  s      rg   r!  zCursorWrapper.fill_cache  s    uq55ABBB> 	Q$*__F!$''. 	a$*nn     . 	a$*nnnn 	 	nn 	 	s   )A> >
BBc                     g }i }|D ]O}|rt          |          }||v r||xx         dz  cc<   |d||         }nd||<   |                    |           P|S )Nr   rw  )ru  r  )r   r  valid_identifiersidentifiers
duplicatesr  s         rg   dedupe_columnszCursorWrapper.dedupe_columns  s    
 
 		' 		'F  1(00##6"""a'"""$*FFJv,>,>?%&
6"v&&&&ri   Nrt  r  )r   r   r   r  r  r  r%  r  r-	  r+	  r  r!  r8	  r   ri   rg   r  r  m  s          $ $ $
) ) )                    ri   r  c                       e Zd Zd Zd ZeZdS )r  c                     |                      d | j        j        D             d          | _        t	          | j                  | _        d S )Nc                     g | ]
}|d          S r  r   rW  col_specs     rg   rZ  z0DictCursorWrapper.initialize.<locals>.<listcomp>      AAAXXa[AAAri   Fr5	  r8	  r  descriptionr  r   ncolsr  s    rg   r  zDictCursorWrapper.initialize  sN    **AA)@AAA# + % % &&


ri   c                     i }t          | j                  D ])}|                    | j        |         ||                    *|S rd   )r  rB	  r8  r  )r   r7  r  r  s       rg   _row_to_dictzDictCursorWrapper._row_to_dict  sH    tz"" 	7 	7Adl1os1v6666ri   N)r   r   r   r  rD	  r+	  r   ri   rg   r  r    s3        ' ' '   KKKri   r  c                       e Zd Zd Zd ZdS )r  c                     |                      d | j        j        D                       }t          j        d|          | _        d S )Nc                     g | ]
}|d          S r  r   r<	  s     rg   rZ  z6NamedTupleCursorWrapper.initialize.<locals>.<listcomp>  r>	  ri   Row)r8	  r  rA	  collections
namedtupletuple_class)r   r6	  s     rg   r  z"NamedTupleCursorWrapper.initialize  sJ    ))AA)@AAAC C&1%EEri   c                      | j         | S rd   )rK	  r/	  s     rg   r+	  z#NamedTupleCursorWrapper.process_row  s    t%%ri   N)r   r   r   r  r+	  r   ri   rg   r  r    s5        F F F
& & & & &ri   r  c                   *     e Zd Z fdZd Zd Z xZS )r  c                 f    t          t          |                               |           || _        d S rd   )r  r  r  r  )r   r  r  r  s      rg   r  zObjectCursorWrapper.__init__  s0    !4((11&999&ri   c                     |                      d | j        j        D             d          | _        t	          | j                  | _        d S )Nc                     g | ]
}|d          S r  r   r<	  s     rg   rZ  z2ObjectCursorWrapper.initialize.<locals>.<listcomp>  r>	  ri   Tr?	  r@	  r  s    rg   r  zObjectCursorWrapper.initialize  sN    **AA)@AAA" + $ $ &&


ri   c                 F    |                      |          } | j        di |S r  )rD	  r  )r   r7  row_dicts      rg   r+	  zObjectCursorWrapper.process_row  s.    $$S))t++(+++ri   r   r   r   r  r  r+	  r  r  s   @rg   r  r    sV        ' ' ' ' '' ' ', , , , , , ,ri   r  c                   $    e Zd Zd Zd Zd ZeZdS )r&	  c                 "    || _         d| _        d S r  )cursor_wrapperr#  )r   rV	  s     rg   r  zResultIterator.__init__  s    ,


ri   c                     | S rd   r   r  s    rg   r  zResultIterator.__iter__  rs  ri   c                    | j         | j        j        k     r| j        j        | j                  }nD| j        j        s1| j                                         | j        j        | j                  }nt          | xj         dz  c_         |S r  )r#  rV	  r4  r"  r$	  r-	  r  r1  s     rg   r  zResultIterator.next   sz    :+111%/
;CC$. 	 '')))%/
;CC

a


ri   N)r   r   r   r  r  r  __next__r   ri   rg   r&	  r&	    sB            	 	 	 HHHri   r&	  c                   "    e Zd Zd ZddZd ZdS )FieldAccessorc                 0    || _         || _        || _        d S rd   )rE  rN  r  r   rE  rN  r  s       rg   r  zFieldAccessor.__init__  s    

			ri   Nc                 \    |$	 |j         | j                 S # t          $ r Y d S w xY w| j        S rd   )__data__r  r   rN  r  s      rg   r  zFieldAccessor.__get__  sG    (33   zs    
$$c                 b    ||j         | j        <   |j                            | j                   d S rd   )r_	  r  _dirtyr  r   r  rn   s      rg   rY  zFieldAccessor.__set__  s/    ',$)$DI&&&&&ri   rd   )r   r   r   r  r  rY  r   ri   rg   r[	  r[	    sF          
   ' ' ' ' 'ri   r[	  c                   2     e Zd Z fdZd ZddZd Z xZS )ForeignKeyAccessorc                 t    t          t          |                               |||           |j        | _        d S rd   )r  rd	  r  	rel_model)r   rE  rN  r  r  s       rg   r  zForeignKeyAccessor.__init__#  s3     $''00tDDDri   c                    |j                             | j                  }|| j        |j        v rq| j        |j        vrC| j        j        r7| j                            | j        j        |k              }||j        | j        <   |j                            | j        |          S | j        j        s| j        j        r| j        j	        |S rd   )
r_	  r  r  __rel__rN  	lazy_loadrf	  	rel_fieldr	  r3   )r   r  rn   r  s       rg   get_rel_instancez#ForeignKeyAccessor.get_rel_instance'  s    !%%di00	X-= = =y 000TZ5I0n(()=)FGG.1 +#''	5999 	.TZ%9 	..--ri   Nc                 >    ||                      |          S | j        S rd   )rk	  rN  r  s      rg   r  zForeignKeyAccessor.__get__2  s$    ((222zri   c                    t          || j                  r<t          || j        j        j                  |j        | j        <   ||j        | j        <   nQ|j                            | j                  }||j        | j        <   ||k    s|| j        |j        v r|j        | j        = |j	        
                    | j                   d S rd   )re   rf	  r   rN  rj	  r  r_	  rh	  r  ra	  r  )r   r  r  fk_values       rg   rY  zForeignKeyAccessor.__set__7  s    c4>** 	0+23
8L8Q+R+RHdi(*-HTY''(,,TY77H+.Hdi(x3;yH,,,$TY/DI&&&&&ri   rd   )r   r   r   r  rk	  r  rY  r  r  s   @rg   rd	  rd	  "  sj        ) ) ) ) )	 	 	   

' 
' 
' 
' 
' 
' 
'ri   rd	  c                       e Zd Zd ZddZdS )BackrefAccessorc                 D    || _         |j        | _        |j        | _        d S rd   )rN  rf	  rE  r   rN  s     rg   r  zBackrefAccessor.__init__E  s    
_
ri   Nc                     |T| j         j        j        }| j                                                            | j         t          ||          k              S | S rd   )rN  rj	  r  rf	  r  rB  r   )r   r  r  r  s       rg   r  zBackrefAccessor.__get__J  sN    :',DNVXXU4:4)@)@@AAC ri   rd   )r   r   r   r  r  r   ri   rg   rp	  rp	  D  s7        % % %
     ri   rp	  c                   &    e Zd ZdZd ZddZd ZdS )ObjectIdAccessorz(Gives direct access to the underlying idc                     || _         d S rd   )rN  rr	  s     rg   r  zObjectIdAccessor.__init__U  s    


ri   Nc                     |q|j                             | j        j                  }|I| j        j        |j        v r6|j        | j        j                 }t          || j        j        j                  }|S | j        S rd   )r_	  r  rN  r  rh	  r   rj	  )r   r  r  rn   rel_objs        rg   r  zObjectIdAccessor.__get__X  sm    %))$*/::E}H4D!D!D"*4:?;)=)BCCLzri   c                 <    t          || j        j        |           d S rd   )r   rN  r  rb	  s      rg   rY  zObjectIdAccessor.__set__b  s    $*/511111ri   rd   )r   r   r   r  r  r  rY  r   ri   rg   ru	  ru	  S  sL        22     2 2 2 2 2ri   ru	  c                       e Zd ZdZdZeZdZdZdZ	dZ
	 	 	 	 	 ddZd Zd Zdd	Zed
             Zd Zd Zd ZddZd Zd Zd Zd Zd ZdS )r8   r   FNr(  Tc                    |t          d           |}|| _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        |p| j        | _        || _        t"          xj        dz  c_        t"          j        | _        | j        rdpd| j        f| _        d S )NzL"db_column" has been deprecated in favor of "column_name" for Field objects.r   r   )r   r	  r#  r9  r  r  r  r  r  rd  	unindexedchoices	help_textverbose_namedefault_index_typerK  _hiddenr8   _field_counter_order	_sort_key)r   r	  r#  r9  r  r  r  r  r  rd  r|	  r}	  r~	  r	  rK  	db_columnr	  s                    rg   r  zField.__init__o  s    
   > ? ? ?#K	
&&& """($?(? 	!**0q5ACri   c                 J    t          | j        dz   | j        j        z             S r  )r  r  rE  r   r  s    rg   r  zField.__hash__  s     DIOdj&99:::ri   c                     t          | d          r>t          | dd           r-dt          |           j        d| j        j        d| j        dS dt          |           j        z  S )NrE  r  r   : rS  r   z<%s: (unbound)>)r  r   r  r   rE  r  r  s    rg   __repr__zField.__repr__  su    4!! 	/gdFD&A&A 	/ 	/$(JJ$7$7$7$(J$7$7$7$(III/ / !4::#666ri   c           	          || _         |x| _        | _        | j        p|| _        |r(t	          |||                     || |                     d S d S rd   )rE  r  	safe_namer  r   accessor_classr   rE  r  set_attributes       rg   r  z
Field.bind  sf    
%))	DN+3t 	IE4!4!4UD$!G!GHHHHH	I 	Iri   c                 J    t          | j        j        j        | j                  S rd   )r%   rE  r.  r/  r  r  s    rg   r  zField.column  s    dj&,d.>???ri   c                     |S rd   r   r  s     rg   adaptzField.adapt  s    ri   c                 4    ||n|                      |          S rd   r	  r  s     rg   r  zField.db_value      uu4::e+<+<<ri   c                 4    ||n|                      |          S rd   r	  r  s     rg   r=  zField.python_value  r	  ri   c                 0    t          || j        d          S r  )r_   r  )r   rn   cases      rg   r  zField.to_value  s    UDM%8888ri   c                     | j         S rd   )r	  r?  s     rg   r  zField.get_sort_key  s
    ~ri   c                 6    |                     | j                  S rd   )r0  r  r?  s     rg   r,  zField.__sql__  s    wwt{###ri   c                     d S rd   r   r  s    rg   get_modifierszField.get_modifiers  r  ri   c                 8   |r7|j         j        r+|j         j                            | j        | j                  }n| j        }|                                 }|r6|r4d                    d |D                       }t          |d|d          S t          |          S )Nr  c                 ,    g | ]}t          |          S r   r]  )rW  r   s     rg   rZ  z&Field.ddl_datatype.<locals>.<listcomp>  s    )D)D)DQ#a&&)D)D)Dri   r!  r$  )r  r  r  
field_typer	  rV  rW   )r   r@  column_type	modifiersmodifier_literals        rg   ddl_datatypezField.ddl_datatype  s     	*39( 	*)/33DO48OE EKK /K&&((	 	$9 	$#yy)D)D))D)D)DEE;;;0@0@0@ABBB{###ri   c                    t          | j                  g}|                     |          }|r|                    |           | j        r"|                    t          d                     | j        s"|                    t          d                     | j        r"|                    t          d                     | j        r*|                    t          d| j        z                       | j	        r|
                    | j	                   | j        r*|                    t          d| j        z                       t          |          S )N	UNINDEXEDzNOT NULLr  zDEFAULT NEXTVAL('%s')r  )r6   r  r	  r  r|	  rW   r	  r  r  r  r>  rd  r{  )r   r@  r  r  s       rg   ddlz	Field.ddl  s1   ())*%%c**	 	$LL###> 	+LL[))***y 	*LLZ))) 	-LL]++,,,= 	GLL4t}DEEFFF 	+LL)***> 	=LL\DN:;;<<<ri   )FFFNNFNNNFNNNNNFrt  r  )r   r   r   r	  r	  r[	  r	  auto_incrementr	  r	  r  r  r  r	  r  r  r  r	  r  r=  r  r  r,  r	  r	  r	  r   ri   rg   r8   r8   f  s@       NF"NNJFJN>BIM?C).	D D D D@; ; ;7 7 7I I I I @ @ X@  = = == = =9 9 9 9  $ $ $  $ $ $    ri   r8   c                       e Zd ZdZdS )r   ANYNr   r   r   r	  r   ri   rg   r   r     s        JJJri   r   c                       e Zd ZdZd ZdS )r@   r-  c                 T    	 t          |          S # t          t          f$ r |cY S w xY wrd   )r   r  r  r  s     rg   r	  zIntegerField.adapt  s<    	u::I& 	 	 	LLL	    ''Nr   r   r   r	  r	  r   ri   rg   r@   r@     s(        J    ri   r@   c                       e Zd ZdZdS )r   r   Nr	  r   ri   rg   r   r             JJJri   r   c                       e Zd ZdZdS )rU   r#  Nr	  r   ri   rg   rU   rU     s        JJJri   rU   c                   &     e Zd ZdZdZ fdZ xZS )r   Tr  c                     |                     d          du rt          dt          |           z            d|d<    t          t          |           j        |i | d S )Nr  Fz %s must always be a primary key.T)r  r  r  r  r   r  r  s      rg   r  zAutoField.__init__  sf    ::m$$--?$t**LMMM $}'i'888888ri   )r   r   r   r	  r	  r  r  r  s   @rg   r   r     sB        NJ9 9 9 9 9 9 9 9 9ri   r   c                       e Zd ZdZdS )r   r  Nr	  r   ri   rg   r   r     s        JJJri   r   c                   $     e Zd ZdZd fd	Z xZS )r=   z$INT GENERATED BY DEFAULT AS IDENTITYFc                 Z    |rd| _          t          t          |           j        di | d S )Nz INT GENERATED ALWAYS AS IDENTITYr   )r	  r  r=   r  )r   generate_alwaysr  r  s      rg   r  zIdentityField.__init__  s<     	A@DO+mT""+55f55555ri   r  )r   r   r   r	  r  r  r  s   @rg   r=   r=      sB        7J6 6 6 6 6 6 6 6 6 6ri   r=   c                        e Zd Z fdZ xZS )rN   c                 f    t          d            t          t          |           j        |i | d S )Nz"PrimaryKeyField" has been renamed to "AutoField". Please update your code accordingly as this will be completely removed in a subsequent release.)r   r  rN   r  r  s      rg   r  zPrimaryKeyField.__init__
  sH     E 	F 	F 	F 	.ot$$-t>v>>>>>ri   rc  r  s   @rg   rN   rN   	  s8        ? ? ? ? ? ? ? ? ?ri   rN   c                       e Zd ZdZd ZdS )r:   r,  c                 T    	 t          |          S # t          t          f$ r |cY S w xY wrd   )r3	  r  r  r  s     rg   r	  zFloatField.adapt  s<    	<<I& 	 	 	LLL	r	  Nr	  r   ri   rg   r:   r:     s(        J    ri   r:   c                       e Zd ZdZdS )r4   r*  Nr	  r   ri   rg   r4   r4     r	  ri   r4   c                   :     e Zd ZdZ	 	 d
 fd	Zd Zd Zd	 Z xZS )r.   r'  r  r=  FNc                     || _         || _        || _        |pt          j        j        | _        t          j        d          | j         z  | _         t          t          |           j
        |i | d S )Nr  )
max_digitsdecimal_places
auto_rounddecimalDefaultContextroundingDecimal_expr  r.   r  )r   r	  r	  r	  r	  r  r  r  s          rg   r  zDecimalField.__init__"  so    $,$ CG$:$COB''T-@,@A	*lD!!*D;F;;;;;ri   c                     | j         | j        gS rd   )r	  r	  r  s    rg   r	  zDecimalField.get_modifiers+  s    !455ri   c                     t           j        }|s||n
 |d          S | j        r9 |t          |                    }|                    | j        | j                  S |S )Nr   )r	  )r	  r	  r	  r]  quantizer	  r	  )r   rn   Ddecimal_values       rg   r  zDecimalField.db_value.  sg    O 	4!M55qqtt3? 	MAc%jjMMM ))$)dm)LLLri   c                     |=t          |t          j                  r|S t          j        t          |                    S d S rd   )re   r	  r	  r]  r  s     rg   r=  zDecimalField.python_value7  s?    %11 ?3u::... ri   )r  r=  FN)	r   r   r   r	  r  r	  r  r=  r  r  s   @rg   r.   r.     su        JCH< < < < < <6 6 6  / / / / / / /ri   r.   c                        e Zd Zd Zd Zd ZdS )_StringFieldc                     t          |t                    r|S t          |t                    r|                    d          S t          |          S )NrW  )re   r]  r^  r   r  s     rg   r	  z_StringField.adapt?  sI    eS!! 	)Lu%% 	)<<(((5zzri   c                 8    t          | t          j        |          S rd   r  r  s     rg   r   z_StringField.__add__F  s    %5dBIu%M%MMri   c                 8    t          |t          j        |           S rd   r  r  s     rg   r  z_StringField.__radd__G  s    &6ubi&N&NNri   N)r   r   r   r	  r   r  r   ri   rg   r	  r	  >  s4           NMMNNNNNri   r	  c                   *     e Zd ZdZd fd	Zd Z xZS )r"   r2     c                 V    || _          t          t          |           j        |i | d S rd   )
max_lengthr  r"   r  )r   r	  r  r  r  s       rg   r  zCharField.__init__M  s2    $'i'888888ri   c                 $    | j         r| j         gpd S rd   )r	  r  s    rg   r	  zCharField.get_modifiersQ  s    4DO#4<<ri   )r	  )r   r   r   r	  r  r	  r  r  s   @rg   r"   r"   J  sQ        J9 9 9 9 9 9= = = = = = =ri   r"   c                   "     e Zd ZdZ fdZ xZS )r9   r$  c                 z    t          t          |                               |          }|r|d | j                 }|S rd   )r  r9   r	  r	  )r   rn   r  s     rg   r	  zFixedCharField.adaptX  s?    nd++11%88 	,*4?*+Eri   )r   r   r   r	  r	  r  r  s   @rg   r9   r9   U  s=        J        ri   r9   c                       e Zd ZdZdS )rZ   r.  Nr	  r   ri   rg   rZ   rZ   _  s        JJJri   rZ   c                   &     e Zd Zd Zd fd	Z xZS )FieldDatabaseHookc                      t          d          )NzSubclasses must implementrf  r  s     rg   _db_hookzFieldDatabaseHook._db_hookd  s    !"=>>>ri   Tc                    |j         j        yt          |j         j        t                    r:|j         j                            | j                   |                     d            n5|                     |j         j                   n|                     d            |j         j                            | j                   t          t          |           
                    |||          S rd   )r.  r  re   rR   r  r	  	_db_hooksr  r  r	  r  r   rE  r  r	  r  s       rg   r  zFieldDatabaseHook.bindg  s    ;+%+.66 4$44T]CCCd####ek23333MM$
 	$$T]333&--225$NNNri   rt  )r   r   r   r	  r  r  r  s   @rg   r	  r	  c  sV        ? ? ?O O O O O O O O O Ori   r	  c                       e Zd ZdZd Zd ZdS )r   r!  c                 X    |t           | _        d S |                                | _        d S rd   )	bytearrayr  r  r  s     rg   r	  zBlobField._db_hook{  s0     )D ( 8 8 : :Dri   c                     t          |t                    r|                    d          }t          |t                    r|                     |          S |S )Nr[  )re   r]  r[  r^  r  r  s     rg   r  zBlobField.db_value  sQ    eS!! 	7LL!566EeU## 	,$$U+++ri   N)r   r   r   r	  r	  r  r   ri   rg   r   r   x  s7        J; ; ;    ri   r   c                   &     e Zd Z fdZddZ xZS )r   c                     |                     dd            t          t          |           j        |i | d| _        d S )Nr  r   r   )r8  r  r   r  _BitField__current_flagr  s      rg   r  zBitField.__init__  sI    )Q'''&h&7777ri   Nc                     || j         }| xj         dz  c_         n
|dz  | _          G fddt                     | |          S )Nr   c                   B     e Zd Z fdZd Zd ZddZd Zd Z xZ	S )	%BitField.flag.<locals>.FlagDescriptorc                 h    || _         || _        t          |                                            d S rd   )_field_valuer  r  )r   rN  rn   FlagDescriptorr  s      rg   r  z.BitField.flag.<locals>.FlagDescriptor.__init__  s3    ##nd++4466666ri   c                 B    | j                             | j                   S rd   )r	  r  r	  r  s    rg   r  z+BitField.flag.<locals>.FlagDescriptor.clear  s    {**DK<888ri   c                 @    | j                             | j                  S rd   )r	  r  r	  r  s    rg   r]  z)BitField.flag.<locals>.FlagDescriptor.set  s    {))$+666ri   Nc                 ^    || S t          || j        j                  pd}|| j        z  dk    S r  )r   r	  r  r	  )r   r  r  rn   s       rg   r  z-BitField.flag.<locals>.FlagDescriptor.__get__  s8    #K$+*:;;@q+11ri   c                     |dvrt          d          t          || j        j                  pd}|r|| j        z  }n|| j         z  }t          || j        j        |           d S )NTFz"Value must be either True or Falser   )r  r   r	  r  r	  r   )r   r  is_setrn   s       rg   rY  z-BitField.flag.<locals>.FlagDescriptor.__set__  sv    ..$%IJJJ$+*:;;@q *T[(EEdk\)E$+"2E:::::ri   c                 n    |                     | j                            | j                  dk              S r  )r0  r	  r  r	  r?  s     rg   r,  z-BitField.flag.<locals>.FlagDescriptor.__sql__  s+    wwt{224;??1DEEEri   rd   )
r   r   r   r  r  r]  r  rY  r,  r  )r  r	  s   @rg   r	  r	    s        7 7 7 7 7 79 9 97 7 72 2 2 2
; ; ;F F F F F F Fri   r	  )r	  rT  )r   rn   r	  s     @rg   flagzBitField.flag  s    ='EA%"'1*D	F 	F 	F 	F 	F 	F 	FZ 	F 	F 	F2 ~dE***ri   rd   )r   r   r   r  r	  r  r  s   @rg   r   r     sL                 
 +  +  +  +  +  +  +  +ri   r   c                   |    e Zd Zd Zd Zd Zd Zd Zd Zd Z	e	Z
d ZeZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )BigBitFieldDatac                 
   || _         || _        | j         j                            | j                  }|st	                      }n$t          |t                    st	          |          }|x| _        | j         j        | j        <   d S rd   )r  r  r_	  r  r	  re   _buffer)r   r  r  rn   s       rg   r  zBigBitFieldData.__init__  sz     	&**4955 	%KKEEE9-- 	%e$$E;@@t}-di888ri   c                 8    | j                                          d S rd   )r	  r  r  s    rg   r  zBigBitFieldData.clear  s    ri   c                     t          |d          \  }}t          | j                  }||k    r#| j                            d|dz   |z
  z             ||fS )NrD      r   )divmodr   r	  r>  r   r  byte_numbyte_offsetcur_sizes        rg   _ensure_lengthzBigBitFieldData._ensure_length  s]     &sA+t|$$xLHqLH+D EFFF$$ri   c                 f    |                      |          \  }}| j        |xx         d|z  z  cc<   d S r  r
  r	  r   r  r 
  r
  s       rg   set_bitzBigBitFieldData.set_bit  sC     $ 3 3C 8 8+X1#34ri   c                 h    |                      |          \  }}| j        |xx         d|z   z  cc<   d S r  r
  r
  s       rg   	clear_bitzBigBitFieldData.clear_bit  sF     $ 3 3C 8 8+XA$4"55ri   c                     |                      |          \  }}| j        |xx         d|z  z  cc<   t          | j        |         d|z  z            S r  )r
  r	  r  r
  s       rg   
toggle_bitzBigBitFieldData.toggle_bit  s\     $ 3 3C 8 8+X1#34DL*a;.>?@@@ri   c                     t          |d          \  }}t          | j                  }||k    rdS t          | j        |         d|z  z            S )NrD  Fr   )r	  r   r	  r  r	  s        rg   r	  zBigBitFieldData.is_set  sR     &sA+t|$$x5DL*a;.>?@@@ri   c                 b    |r|                      |           d S |                     |           d S rd   )r
  r	
  )r   r  rn   s      rg   r  zBigBitFieldData.__setitem__  s6    #=T)=)=)=)=)=ri   c                 *    t          | j                  S rd   )r   r	  r  s    rg   r%  zBigBitFieldData.__len__  s    4<   ri   c                 ,   t          |t                    r|j        }n4t          |t          t          t
          f          r|}nt          d          t          |          t          |           z
  }|dk    r| j                            d|z             |S )NIncompatible data-typer   r	  )	re   r	  r	  r^  r	  
memoryviewr  r   r>  )r   r  datadiffs       rg   _get_compatible_dataz$BigBitFieldData._get_compatible_data  s    e_-- 	7=DDy*=>> 	7DD56664yy3t99$!88T\((4888ri   c           	         t          |t                    r|j        }n4t          |t          t          t
          f          r|}nt          d          t	          dt          t          |           t          |                    z            }t          j
        | j        |d          }t          |          D ]\  }\  }} |||          ||<   |S )Nr
  r	  r   )rw  )re   r	  r	  r^  r	  r
  r  maxr   r|  r}  r
  )	r   r  r  r
  bufr  r  r  bs	            rg   _bitwise_opzBigBitFieldData._bitwise_op  s    e_-- 	7=DDy*=>> 	7DD5666#c$iiU"<"<<=="4<CCC"2 	 	IAv1R1XXCFF
ri   c                 B    |                      |t          j                  S rd   )r
  r  r  r  s     rg   r  zBigBitFieldData.__and__  s    x}555ri   c                 B    |                      |t          j                  S rd   )r
  r  r<  r  s     rg   r  zBigBitFieldData.__or__      x|444ri   c                 B    |                      |t          j                  S rd   )r
  r  xorr  s     rg   r  zBigBitFieldData.__xor__  r
  ri   c              #   ^   K   | j         D ]"}t          d          D ]}|d|z  z  rdndV  #d S )NrD  r   r   )r	  r  )r   r
  js      rg   r  zBigBitFieldData.__iter__  s[       	1 	1A1XX 1 1aL0aaq00001	1 	1ri   c                 *    t          | j                  S rd   )reprr	  r  s    rg   r	  zBigBitFieldData.__repr__  s    DL!!!ri   c                 *    t          | j                  S rd   )r^  r	  r  s    rg   	__bytes__zBigBitFieldData.__bytes__
  s    T\"""ri   N)r   r   r   r  r  r
  r
  r	
  r
  r	  r  r  __delitem__r%  r
  r
  r  r  r  r  r	  r$
  r   ri   rg   r	  r	    s(       A A A  % % %5 5 56 6 6A A A
A A A K> > >K! ! !	 	 	  6 6 65 5 55 5 51 1 1
" " "# # # # #ri   r	  c                   &     e Zd ZddZ fdZ xZS )BigBitFieldAccessorNc                 >    || j         S t          || j                  S rd   )rN  r	  r  r  s      rg   r  zBigBitFieldAccessor.__get__  s"    :x333ri   c                    t          |t                    r|                                }nt          |t                    rt	          |          }nyt          |t
                    rt	          |j                  }nOt          |t                    r|                    d          }n$t          |t                    st          d          t          t          |                               ||           d S )NrW  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)re   r
  tobytesr	  r^  r	  r	  r]  r[  r  r  r'
  rY  )r   r  rn   r  s      rg   rY  zBigBitFieldAccessor.__set__  s    eZ(( 
	:MMOOEEy)) 	:%LLEE// 	:%-((EEs## 	:LL))EEE5)) 	: 9 : : :!4((005AAAAAri   rd   )r   r   r   r  rY  r  r  s   @rg   r'
  r'
    sU        4 4 4 4B B B B B B B B Bri   r'
  c                   (     e Zd ZeZ fdZd Z xZS )r   c                 ~    |                     dt                      t          t          |           j        |i | d S )Nr  )r8  r^  r  r   r  r  s      rg   r  zBigBitField.__init__%  sA    )U+++)k4  )4:6:::::ri   c                 (    |t          |          n|S rd   r^  r  s     rg   r  zBigBitField.db_value)  s    $0uU|||e;ri   )r   r   r   r'
  r	  r  r  r  r  s   @rg   r   r   "  sL        (N; ; ; ; ;< < < < < < <ri   r   c                       e Zd ZdZd Zd ZdS )r^   r0  c                 j   t          |t                    rt          |          dk    r|S t          |t                    r(t          |          dk    rt	          j        |          }t          |t          j                  r|j        S 	 t	          j        |          j        S # t          $ r |cY S w xY w)N    rE  r.
  )re   r]  r   r^  r	  r0  r	  r,  r  s     rg   r  zUUIDField.db_value0  s    eS!! 	+c%jjB&6&6Lu%% 	+#e***:*:IE***EeTY'' 	9	9U##'' 	 	 	LLL	s   
B# #B21B2c                 j    t          |t          j                  r|S |t          j        |          nd S rd   )re   r	  r0  r  s     rg   r=  zUUIDField.python_value>  s5    eTY'' 	L#(#4ty$>ri   Nr   r   r   r	  r  r=  r   ri   rg   r^   r^   -  s7        J  ? ? ? ? ?ri   r^   c                       e Zd ZdZd Zd ZdS )r   r1  c                    t          |t                    r(t          |          dk    r|                     |          S t          |t                    r(t          |          dk    rt          j        |          }t          |t
          j                  r|                     |j                  S |t          d          d S )NrE  r1
  )r	  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)re   r^  r   r  r]  r	  r0  r  r  s     rg   r  zBinaryUUIDField.db_valueG  s    eU## 	)E

b(8(8$$U+++s## 	)E

b(8(8I%(((EeTY'' 	I$$U[111 H I I I ri   c                    t          |t          j                  r|S t          |t                    r|                                }n&|r$t          |t
                    st          |          }|t          j        |          nd S )Nr.
  )re   r	  r0  r
  r*
  r^  r  s     rg   r=  zBinaryUUIDField.python_valueT  s}    eTY'' 	!Lz** 	!MMOOEE 	!:eU33 	!%LLE).):tyu%%%%Dri   Nr3
  r   ri   rg   r   r   D  s?        JI I IE E E E Eri   r   c                       fd}|S )Nc                 N    | j         j        j                            |           S rd   )rE  r.  r  r:  )r   r8  s    rg   decz_date_part.<locals>.dec_  s!    z(55iFFFri   r   r8  r9
  s   ` rg   
_date_partr;
  ^  s&    G G G G GJri   c                     |pd }|D ]=}	  |t           j                             | |                    c S # t          $ r Y :w xY w| S )Nc                     | S rd   r   xs    rg   rh   z"format_date_time.<locals>.<lambda>d  s    a ri   )rw   strptimer  )rn   formatspost_processfmts       rg   r   r   c  sp    0KKL  	< 1 : :5# F FGGGGG 	 	 	D	Ls   (6
AAc                 v    	 t           j                             | d          S # t          t          f$ r | cY S w xY w)Nr   )rw   r@
  r  r  rc  s    rg   r  r  l  sJ     ))%1DEEEz"   s   " 88c                   $     e Zd ZdZd fd	Z xZS )_BaseFormattedFieldNc                 Z    ||| _          t          t          |           j        |i | d S rd   )rA
  r  rF
  r  )r   rA
  r  r  r  s       rg   r  z_BaseFormattedField.__init__v  s9    "DL1!4((14B6BBBBBri   rd   )r   r   r   rA
  r  r  r  s   @rg   rF
  rF
  s  sL        GC C C C C C C C C Cri   rF
  c                      e Zd ZdZg dZd Zd Zd Z e e	d                    Z
 e e	d                    Z e e	d                    Z e e	d	                    Z e e	d
                    Z e e	d                    ZdS )r-   r&  )r   r   z%Y-%m-%d %H:%M:%S.%f%zz%Y-%m-%d %H:%M:%S%zr   c                 ^    |r*t          |t                    rt          || j                  S |S rd   )re   r]  r   rA
  r  s     rg   r	  zDateTimeField.adapt  s2     	9Zs++ 	9#E4<888ri   c                 J    | j         j        j                            |           S rd   rE  r.  r  r?  r  s    rg   r?  zDateTimeField.to_timestamp      z(55d;;;ri   c                 L    | j         j        j                            ||           S rd   rE  r.  r  r<  r   rX  s     rg   truncatezDateTimeField.truncate       z(66tTBBBri   r   r   r   r   r   r   N)r   r   r   r	  rA
  r	  r?  rP
  r  r;
  r   r   r   r   r   r   r   ri   rg   r-   r-   |  s        J  G  
< < <C C C 8JJv&&''DHZZ(())E
(::e$$
%
%C8JJv&&''DXjj**++FXjj**++FFFri   r-   c                       e Zd ZdZg dZd Zd Zd Z e e	d                    Z
 e e	d                    Z e e	d                    Zd	S )
r,   r%  )r   r   r   c                     |r.t          |t                    rd }t          || j        |          S |r.t          |t          j                  r|                                S |S )Nc                 *    |                                  S rd   )r   r>
  s    rg   rh   z!DateField.adapt.<locals>.<lambda>  s    16688 ri   )re   r]  r   rA
  rw   r   r   rn   pps      rg   r	  zDateField.adapt  sf     	 Zs++ 	 ##B#E4<<<< 	 z%):;; 	 ::<<ri   c                 J    | j         j        j                            |           S rd   rK
  r  s    rg   r?  zDateField.to_timestamp  rL
  ri   c                 L    | j         j        j                            ||           S rd   rN
  rO
  s     rg   rP
  zDateField.truncate  rQ
  ri   r   r   r   N)r   r   r   r	  rA
  r	  r?  rP
  r  r;
  r   r   r   r   ri   rg   r,   r,     s        J  G  < < <C C C 8JJv&&''DHZZ(())E
(::e$$
%
%CCCri   r,   c                       e Zd ZdZg dZd Z e ed                    Z e ed                    Z	 e ed                    Z
dS )r[   r/  )r   r   r   r   r   c                 F   |r\t          |t                    rd }t          || j        |          S t          |t          j                  r|                                S |@t          |t          j                  r&t          j        j        |z                                   S |S )Nc                 *    |                                  S rd   )r   r>
  s    rg   rh   z!TimeField.adapt.<locals>.<lambda>  s    qvvxx ri   )re   r]  r   rA
  rw   r   	timedeltaminrU
  s      rg   r	  zTimeField.adapt  s     	$%%% $'''t|R@@@E8#455 $zz||#E83E!F!F%)E177999ri   r   r   r   N)r   r   r   r	  rA
  r	  r  r;
  r   r   r   r   ri   rg   r[   r[     s        J  G	 	 	 8JJv&&''DXjj**++FXjj**++FFFri   r[   c                       fd}|S )Nc                     | j         j        j        }| j        dk    r| t	          | j        d          z  n| }|                    |                    |                    S Nr   Fr5  )rE  r.  r  
resolutionr_   r:  rA  )r   rT  r  r8  s      rg   r9
  z!_timestamp_date_part.<locals>.dec  sc    Z&?Q&& do?????,0 	y"*;*;D*A*ABBBri   r   r:
  s   ` rg   _timestamp_date_partrb
    s(    C C C C C
 Jri   c                   \    e Zd Zd  ed          D             Z fdZd Zd Zd Zd Z	d Z
d	 Z e ed
                    Z e ed                    Z e ed                    Z e ed                    Z e ed                    Z e ed                    Z xZS )r\   c                     g | ]}d |z  S )r  r   rW  r  s     rg   rZ  zTimestampField.<listcomp>  s    1111Q111ri   rX  c                 0   |                     dd           | _        | j        sd| _        ni| j        t          dd          v rd| j        z  | _        nB| j        | j        vr4t	          dd                    d | j        D                       z            d	| j        z  | _        |                     d
d          pd| _        | j        rt          nt          j	        j
        }|                    d|            t          t          |           j        |i | d S )Nra
  r   r   rX  r  z,TimestampField resolution must be one of: %sr  c              3   4   K   | ]}t          |          V  d S rd   r	  re
  s     rg   rz  z*TimestampField.__init__.<locals>.<genexpr>  s(      &N&N!s1vv&N&N&N&N&N&Nri   i@B rz   Fr  )r  ra
  r  valid_resolutionsr  rV  ticks_to_microsecondrz   r   rw   r   r8  r  r\   r  )r   r  r  dfltr  s       rg   r  zTimestampField.__init__  s    **\488 	PDOO_a++ DO3DOO_D$:::K!YY&N&Nt7M&N&N&NNNO P P P$+t$>!::eU++4u<vvx'8'<)T***,nd##,d=f=====ri   c                     t          j         t          j        t          j        |                                                    d d          S )N   )rw   r   gmtimemktime	timetuple)r   r   s     rg   local_to_utczTimestampField.local_to_utc  s7    
  $+dk",,...I.I"J"J2A2"NOOri   c                     t          j        |                                          }t          j                            |          S rd   )calendartimegmutctimetuplerw   rx   )r   r   r|   s      rg   utc_to_localzTimestampField.utc_to_local  s4    
 _R__..// ..r222ri   c                     | j         r&t          j        |                                          S t	          j        |                                          S rd   )rz   rr
  rs
  rt
  r   rn
  ro
  r  s     rg   get_timestampzTimestampField.get_timestamp  sB    8 	2?5#5#5#7#7888;u00111ri   c                    |d S t          |t          j                  rndt          |t          j                  r&t          j        |j        |j        |j                  }n$t          t          || j        z                      S | 	                    |          }| j        dk    r||j
        dz  z  }|| j        z  }t          t          |                    S )Nr   gư>)re   rw   r   r   r   r   r   roundra
  rw
  microsecond)r   rn   r   s      rg   r  zTimestampField.db_value  s    =FeX.// 	7x}-- 	7%ej%+uyIIEEuUT_455666&&u--	?Q%+g56I(I5##$$$ri   c                 X   |t          |t          t          f          r| j        dk    r0t	          || j                  \  }}t          || j        z            }nd}| j        rt          |          }nt          j        	                    |          }|r|
                    |          }|S )Nr   r   )rz
  )re   r   r3	  ra
  r	  ri
  rz   r}   rw   rx   r{   )r   rn   ticksmicrosecondss       rg   r=  zTimestampField.python_value  s    EC<!@!@""%eT_==u"54+D#DEE x ?(// )77>> @,??ri   c                     | j         dk    r| t          | j         d          z  n| }| j        j        j                            |          S r`
  )ra
  r_   rE  r.  r  rA  )r   r  s     rg   rA  zTimestampField.from_timestamp%  sO    ?Q&& do?????,0 	z(77===ri   r   r   r   r   r   r   )r   r   r   r  rh
  r  rp
  ru
  rw
  r  r=  rA  r  rb
  r   r   r   r   r   r   r  r  s   @rg   r\   r\     sI       11a111> > > > >"P P P3 3 32 2 2% % %"  $> > >
 8((0011DH))'2233E
(''..
/
/C8((0011DX**84455FX**84455FFFFFri   r\   c                       e Zd Zd Zd ZdS )rD   c                 d    |-t          j        dt          j        |                    d         S d S )N!Ir   )structr  socket	inet_atonr  s     rg   r  zIPField.db_value3  s0    ?=v'7'<'<==a@@ ?ri   c                 X    |'t          j        t          j        d|                    S d S )Nr
  )r
  	inet_ntoar
  packr  s     rg   r=  zIPField.python_value7  s+    ?#FKc$:$:;;; ?ri   N)r   r   r   r  r=  r   ri   rg   rD   rD   2  s5        A A A< < < < <ri   rD   c                       e Zd ZdZeZdS )r   r"  N)r   r   r   r	  r  r	  r   ri   rg   r   r   <  s        JEEEri   r   c                   &     e Zd Zd fd	Zd Z xZS )r   Nc                 ^     t          t          |           j        |i | |	|| _        d S d S rd   )r  r   r  r	  )r   r	  r  r  r  s       rg   r  zBareField.__init__B  s>    'i'8888DJJJ ri   c                     d S rd   r   r?  s     rg   r	  zBareField.ddl_datatypeG  r  ri   rd   )r   r   r   r  r	  r  r  s   @rg   r   r   A  sL             
      ri   r   c                        e Zd ZeZeZ	 	 	 	 d fd	Zed             Z	 fdZ
d Zd Zd Zd	 Zd fd
	ZddZd Z xZS )r<   NTc                    |                     dd            t          t          |           j        |i | |t	          d           |}|	t	          d           |	}|t	          d           |}|dk    | _        || _        || _        || _        d | _	        || _
        || _        || _        || _        |
| _        || _        || _        d S )Nr#  TzP"rel_model" has been deprecated in favor of "model" for ForeignKeyField objects.zO"to_field" has been deprecated in favor of "field" for ForeignKeyField objects.zK"related_name" has been deprecated in favor of "backref" for Field objects.r   )r8  r  r<   r  r   _is_self_referencerf	  rj	  declared_backrefbackref	on_delete	on_update
deferrabler  object_id_nameri	  constraint_name)r   rE  rN  r
  r
  r
  r
  	_deferredrf	  to_fieldr
  ri	  r
  related_namer  r  r  s                   rg   r  zForeignKeyField.__init__O  s   
 	'4(((-ot$$-t>v>>>  B C C CE B C C CE# : ; ; ;"G"'6/ '""$!,".ri   c                     t          | j        t                    rt          j        S t          | j        t
                    s| j        j        S t          j        S rd   )re   rj	  r   r   r	  r   r@   r  s    rg   r	  zForeignKeyField.field_typer  sG    dnl33 	-"--DNI66 	->,,&&ri   c                     t          | j        t                    s| j                                        S t	          t
          |                                           S rd   )re   rj	  r   r	  r  r<   r/  s    rg   r	  zForeignKeyField.get_modifiersz  sG    $.)44 	2>//111_d++99;;;ri   c                 l    | j         p-d| j        j        j        d| j        d| j        j        j        S )Nfk_rw  _refs_)r
  rE  r.  rH  r  rf	  r  s    rg   get_constraint_namez#ForeignKeyField.get_constraint_name  sG    # - -J'''N ++(- 	-ri   c                 6    | j                             |          S rd   )rj	  r	  r  s     rg   r	  zForeignKeyField.adapt  s    ~##E***ri   c                     t          || j                  rt          || j        j                  }| j                            |          S rd   )re   rf	  r   rj	  r  r  r  s     rg   r  zForeignKeyField.db_value  s@    eT^,, 	8E4>#677E~&&u---ri   c                 d    t          || j                  r|S | j                            |          S rd   )re   rf	  rj	  r=  r  s     rg   r=  zForeignKeyField.python_value  s1    eT^,, 	L~**5111ri   c                    | j         s!|                    d          r|n|dz   | _         | j        s(| j         | _        | j        |k    r| xj        dz  c_        n+| j        |k    r t          d|j        j        d|d          | j        r|| _        t          | j	        t                    r t          | j        | j	                  | _	        n| j	        | j        j        j        | _	        t          t          |                               |||           | j        | _        t#          | j                  r|                     |           | _        n| j        d c| _        | _        | j        sd|j        j        z  | _        |r\t)          || j        t+          |                      | j        dvr2t)          | j        | j        |                     |                      d S d S d S )N_idzForeignKeyField "z"."zA" specifies an object_id_name that conflicts with its field name.z%s_setz!+)r  r  r
  r  r.  r  r
  rf	  re   rj	  r]  r   r  r  r<   r  r	  r  r
  r
  r   ru	  backref_accessor_classr	  s       rg   r  zForeignKeyField.bind  s    	N'+}}U';';MttD" 	A"&"2D"d**##u,## D((*(-(8(8(8$$$@ A A A " 	#"DNdnc** 	>$T^T^DDDNN^#!^1=DN 	ot$$))%}EEE,T*++ 	N0066DLL262G/DL$/| 	7#ek&66DL 	;E4.0@0F0FGGG|4''33D99; ; ; ; ;	; 	;''ri   Fc           	         g }| j         s|rR|                                 }|                    t          d          t	          t          |                    g           |                    t          d          t          | f          t          d          | j        t          | j        f          g           | j	        r*|
                    t          d| j	        z                       | j        r*|
                    t          d| j        z                       | j        r*|
                    t          d| j        z                       t          |          S )Nr,  zFOREIGN KEY
REFERENCESzON DELETE %szON UPDATE %szDEFERRABLE %s)r
  r
  r>  rW   r6   rR  r5  rf	  rj	  r
  r  r
  r
  r{  )r   explicit_namer|  r  s       rg   foreign_key_constraintz&ForeignKeyField.foreign_key_constraint  sI    	:= 	:++--DLLL!!066779 : : : 	dW%%Ndn.//1 	2 	2 	2 > 	?LL^dn<==>>>> 	?LL^dn<==>>>? 	ALL_t>??@@@ri   c                     |                     d          rt          d          || j        j        j        v r| j        j        j        |         S t          d|z            )N__z)Cannot look-up non-existant "__" methods.zNForeign-key has no attribute %s, nor is it a valid field on the related model.)r  r   rf	  r.  rM  r   s     rg   r   zForeignKeyField.__getattr__  sp    ??4   	N !LMMM4>'...>'.t44 ACGH I I 	Iri   )NNNNNNNNNTNNrt  r  )r   r   r   rd	  r	  rp	  r
  r  r  r	  r	  r
  r	  r  r=  r  r
  r   r  r  s   @rg   r<   r<   K  s       'N,BF<@?CDH!/ !/ !/ !/ !/ !/F ' ' X'< < < < <
- - -+ + +. . .
2 2 2
"; "; "; "; "; ";H   ,I I I I I I Iri   r<   c                   d     e Zd Z e            Z fdZej        ZddZd Z	e
d             Z xZS )r0   c                 N   || _         |                                | _        t          j                            |            t          t          |                               |                    d          |                    d          |                    d                     d S )Nr  r	  r  )r  r	  r  )	field_kwargsrl  rel_model_namer0   _unresolvedr  r  r  r  )r   r
  r  r  s      rg   r  zDeferredForeignKey.__init__  s    ",2244&**4000 $''00

=11F##

=11 	1 	3 	3 	3 	3 	3ri   Nc                 0    t          | j        fi | j        S rd   )r0   r
  r
  )r   memos     rg   __deepcopy__zDeferredForeignKey.__deepcopy__  s    !$"5KK9JKKKri   c                     t          |fddi| j        }|j        r'| j        j                            | j        |           d S | j        j                            | j        |           d S )Nr
  T)r<   r
  r  rE  r.  set_primary_keyr  	add_field)r   rf	  rN  s      rg   	set_modelzDeferredForeignKey.set_model  sp    	OOTOT=NOO 	9J,,TY>>>>>J&&ty%88888ri   c                    t          t          j        t          j        d                    }|D ]X}|j        | j                                        k    r4|                    |            t          j        	                    |           Yd S )Nr	  r  )
r  r0   r
  r  
attrgetterr
  r   rl  r
  discard)	model_cls
unresolveddrs      rg   resolvezDeferredForeignKey.resolve  s    .: ( 3H = =? ? ?
 	; 	;B I$6$<$<$>$>>>Y'''".66r:::	; 	;ri   rd   )r   r   r   r]  r
  r  r{  r  r
  r
  rv  r
  r  r  s   @rg   r0   r0     s        #%%K3 3 3 3 3 HL L L L9 9 9 ; ; \; ; ; ; ;ri   r0   c                        e Zd Zd Zd Zd ZdS )r1   c                     g | _         d S rd   )_refsr  s    rg   r  zDeferredThroughModel.__init__  s    


ri   c                 @    | j                             |||f           d S rd   )r
  r  r]	  s       rg   	set_fieldzDeferredThroughModel.set_field  s%    
5%./////ri   c                 f    | j         D ](\  }}}||_        |j                            ||           )d S rd   )r
  through_modelr.  r
  )r   r
  	src_modelm2mfieldr  s        rg   r
  zDeferredThroughModel.set_model   sG    )- 	6 	6%Ix%2H"O%%dH5555	6 	6ri   N)r   r   r   r  r
  r
  r   ri   rg   r1   r1     sA          0 0 06 6 6 6 6ri   r1   c                   "    e Zd ZdxZxZxZZdZdS )	MetaFieldNF)r   r   r   r  r  rE  r  r  r   ri   rg   r
  r
    s'        +//K/'/EDKKKri   r
  c                   ,     e Zd Z fdZddZd Z xZS )ManyToManyFieldAccessorc                    t          t          |                               |||           |j        | _        |j        | _        |j        | _        | j        j        j        | j                 }| j        j        j        | j                 }|s t          d| j        d| j        d          |s t          d| j        d| j        d          |d         | _	        |d         | _
        d S )NzCannot find foreign-key to "z" on "z" model.r   )r  r
  r  rE  rf	  r
  r.  
model_refsr  src_fkdest_fk)r   rE  rN  r  src_fksdest_fksr  s         rg   r  z ManyToManyFieldAccessor.__init__  s    %t,,55eUDIII[
"0$*5djA%+6t~F 	C*"jjj$*<*<*<> ? ? ? 	C*"nnnd.@.@.@B C C Caj{ri   NFc                     ||sM j         j        dk    r=t          | j         j                  }t          |t                    r fd|D             S t          | j         j        j                  }|' j        j        rt          d j        d|d          t          |  j                                       j                                       j                                       j         |k              S  j        S )Nr   c                 D    g | ]}t          |j        j                  S r   )r   r
  r  rW  r  r   s     rg   rZ  z3ManyToManyFieldAccessor.__get__.<locals>.<listcomp>!  s(    OOOGC):;;OOOri   zCannot get many-to-many "" for unsaved instance "r  )r
  r
  r   re   ra  rj	  r  rN  _prevent_unsavedr  ManyToManyQueryrf	  rV  r
  rE  rB  )r   r  r  force_queryr
  src_ids   `     rg   r  zManyToManyFieldAccessor.__get__  s    P4;#6##=#=!(DK,?@@gt,, POOOOwOOOOXt{'<'ABBF~$*"=~ j59ZZZ"K L L L#HdDNCCT$,--T$*%%U4;&0113
 zri   c                     t          || j        j        j                  }|'| j        j        rt          d| j        d|d          |                     |d          }|                    |d           d S )NzCannot set many-to-many "r
  r  T)r
  )clear_existing)	r   r
  rj	  r  rN  r
  r  r  r  )r   r  rn   r
  rB  s        rg   rY  zManyToManyFieldAccessor.__set__.  s    4;#8#=>>>dj9>*15XXXG H H HX488		%	-----ri   r   )r   r   r   r  r  rY  r  r  s   @rg   r
  r
    s[        # # # # #    $. . . . . . .ri   r
  c                   ~     e Zd ZeZ	 	 ddZd Zd fd	Zd Ze	d             Z
e
j        d	             Z
d
 Zd Z xZS )rF   NTFc                     |Ht          |t                    st          |          st          d          |s||t	          d          || _        || _        || _        || _        || _	        || _
        || _        d S )NzKUnexpected value for through_model. Expected Model or DeferredThroughModel.zFCannot specify on_delete or on_update when through_model is specified.)re   r1   r-  r  r  rf	  r
  _through_model
_on_delete
_on_updater
  _is_backref)r   rE  r
  r
  r
  r
  prevent_unsavedr
  s           rg   r  zManyToManyField.__init__:  s    $}.BCC B]++B !A B B B @I$9Y=R  "? @ @ @+## /&ri   c                      t          |           S rd   )r
  r  s    rg   _get_descriptorzManyToManyField._get_descriptorL  s    &t,,,ri   c                    t          | j        t                    r| j                            || |           d S t	          t
          |                               |||           | j        skt          | j        || j	        | j
        | j        d          }| j        p|j        j        dz   | _        | j        j                            | j        |           d S d S )NT)r
  r
  r
  r
  r
  r   )re   r
  r1   r
  r  rF   r  r
  rE  r
  r
  r
  r
  r.  r  rf	  r
  )r   rE  r  r	  many_to_many_fieldr  s        rg   r  zManyToManyField.bindO  s    d)+?@@ 	))%t<<<Fot$$))%}EEE 		M!0
"0// "" "" ""  <A5;+;c+ADLN **4<9KLLLLL		M 		Mri   c                 j    d t          | j        | j        f| j         | j        ff          D             S )Nc                     g | ]\  }}|S r   r   )rW  rw  rE  s      rg   rZ  z.ManyToManyField.get_models.<locals>.<listcomp>b  s(     6 6 6(!U 6 6 6ri   )r  r
  rE  rf	  r  s    rg   
get_modelszManyToManyField.get_modelsa  sN    6 6ftz*!!4>2.4 '5 '5 6 6 6 	6ri   c                 P    | j         |                                 | _         | j         S rd   )r
  _create_through_modelr  s    rg   r
  zManyToManyField.through_modelf  s(    &"&"<"<">">D""ri   c                     || _         d S rd   )r
  r  s     rg   r
  zManyToManyField.through_modell  s    #ri   c                 J                                      \  d fD              G  fdd          } j         j        d}j        j        t          fi |j        j        t          fi |d|i}j        j        d}t          |t          f|          S )Nc                 &    g | ]}|j         j        S r   )r.  rH  rW  rE  s     rg   rZ  z9ManyToManyField._create_through_model.<locals>.<listcomp>r  s    AAAU%+(AAAri   c                       e Zd Zj        j        j        Zj        j        j        Zd e          z  Z j        j	        j        j	        fdffZ
dS )3ManyToManyField._create_through_model.<locals>.Metaz%s_%s_throughTN)r   r   r   rE  r.  r  r  rb  rH  r  r  )r#  r   r   tabless   rg   r  r
  t  sZ        z'0HZ%,F(55==8J).#).1GGGri   r  )r
  r
  Through)	r
  r
  r
  r.  r  r<   r   r  rG   )r   r  rU  attrs
klass_namer#  r   r
  s   `    @@@rg   r
  z%ManyToManyField._create_through_modelp  s    ??$$SAAsCjAAA	 	 	 	 	 	 	 	 	 	 	 	 	  $T_MMINOC::6::INOC::6::D
 '*llCLLLA
J%000ri   c                     | j         S rd   )r
  r  s    rg   get_through_modelz!ManyToManyField.get_through_model  s    !!ri   )NNNNTFrt  )r   r   r   r
  r	  r  r
  r  r
  r  r
  r  r
  r
  r  r  s   @rg   rF   rF   7  s        ,NJNCH' ' ' '$- - -M M M M M M$6 6 6
 # # X#
 $ $ $1 1 1*" " " " " " "ri   rF   c                   8     e Zd ZdZd fd	Zd Zd ZddZ xZS )	VirtualFieldNc                     ||n| j         }|
 |            nd | _         t          t          |           j        |i | d S rd   )field_classfield_instancer  r
  r  )r   r
  r  r  r8   r  s        rg   r  zVirtualField.__init__  sS    *6D<L).):eeggg*lD!!*D;F;;;;;ri   c                 H    | j         | j                             |          S |S rd   )r
  r  r  s     rg   r  zVirtualField.db_value  s'    *&//666ri   c                 H    | j         | j                             |          S |S rd   )r
  r=  r  s     rg   r=  zVirtualField.python_value  s'    *&33E:::ri   Tc           	          || _         |x| _        x| _        | _        t	          |||                     || |                     d S rd   )rE  r  r  r	  r   r	  r	  s       rg   r  zVirtualField.bind  sI    
8<<<49t~tT00dCCDDDDDri   rd   rt  )	r   r   r   r
  r  r  r=  r  r  r  s   @rg   r
  r
    s|        K< < < < < <
  
  
E E E E E E E Eri   r
  c                   \    e Zd ZdZd Zed             ZddZd Zd Z	d Z
d Zd	 ZddZdS )r&   Nc                 "    || _         d | _        d S rd   )field_names_safe_field_names)r   r  s     rg   r  zCompositeKey.__init__  s    &!%ri   c                 l      j         & j         j        S  fd j        D              _          j         S )Nc                 H    g | ]}j         j        j        |         j        S r   )rE  r.  rM  r	  rW  fr   s     rg   rZ  z1CompositeKey.safe_field_names.<locals>.<listcomp>  s?     &A &A &A*+ '+j&6&=a&@&J &A &A &Ari   )r  rE  r  r  s   `rg   safe_field_nameszCompositeKey.safe_field_names  s[    !)z!''&A &A &A &A/3/?&A &A &AD"%%ri   c                 L     t          fd| j        D                       S | S )Nc                 0    g | ]}t          |          S r   r  )rW  r  r  s     rg   rZ  z(CompositeKey.__get__.<locals>.<listcomp>  s#    NNN1'(A..NNNri   )rb  r  r  s    ` rg   r  zCompositeKey.__get__  s4    NNNN8MNNNOOOri   c                 &   t          |t          t          f          st          d          t	          |          t	          | j                  k    rt          d          t          |          D ]!\  }}t          || j        |         |           "d S )NzIA list or tuple must be used to set the value of a composite primary key.zVThe length of the value must equal the number of columns of the composite primary key.)	re   ra  rb  r  r   r  r  r
  r   )r   r  rn   r  field_values        rg   rY  zCompositeKey.__set__  s    %$// 	8 7 8 8 8u::T-.... H I I I )% 0 0 	B 	BCHd.s3[AAAA	B 	Bri   c                 z      fdt           j        |          D             }t          t          j        |          S )Nc                 L    g | ] \  }}j         j        j        |         |k    !S r   rE  r.  rM  )rW  rN  rn   r   s      rg   rZ  z'CompositeKey.__eq__.<locals>.<listcomp>  sE     I I I'5% 
(/6%? I I Iri   )zipr  r
   r  r  )r   r  r  s   `  rg   r  zCompositeKey.__eq__  sQ    I I I I+.t/?+G+GI I Ihm[111ri   c                     | |k     S rd   r   r  s     rg   r  zCompositeKey.__ne__  s    ri   c                 B    t          | j        j        | j        f          S rd   )r  rE  r   r  r  s    rg   r  zCompositeKey.__hash__  s    TZ($*:;<<<ri   c                      |j         t          k    }|                    t           fd j        D             d|                    S )Nc                 >    g | ]}j         j        j        |         S r   r  )rW  rN  r   s     rg   rZ  z(CompositeKey.__sql__.<locals>.<listcomp>  s<     !@ !@ !@%* "&!1!8!? !@ !@ !@ri   r  )r  rI  r0  r{  r  )r   r@  r  s   `  rg   r,  zCompositeKey.__sql__  sm     l*wwx !@ !@ !@ !@.2.>!@ !@ !@AEvO O P P 	Pri   Tc                 j    || _         |x| _        x| _        | _        t	          || j        |            d S rd   )rE  r  r  r	  r   r	  s       rg   r  zCompositeKey.bind  s9    
8<<<49t~ty$'''''ri   rd   rt  )r   r   r   r  r  r  r  r  rY  r  r  r  r,  r  r   ri   rg   r&   r&     s        H& & & & & X&   
B B B2 2 2
     = = =P P P( ( ( ( ( (ri   r&   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
_SortedFieldList_keys_itemsc                 "    g | _         g | _        d S rd   r  r  s    rg   r  z_SortedFieldList.__init__  s    
ri   c                     | j         |         S rd   )r  )r   r  s     rg   r  z_SortedFieldList.__getitem__  s    {1~ri   c                 *    t          | j                  S rd   )r~  r  r  s    rg   r  z_SortedFieldList.__iter__  r  ri   c                     |j         }t          | j        |          }t          | j        |          }|| j        ||         v S rd   )r	  r   r  r   r  )r   r  r  r  r 
  s        rg   __contains__z_SortedFieldList.__contains__  sA    N
A&&Q''t{1Q3'''ri   c                 @    | j                             |j                  S rd   )r  r#  r	  rr	  s     rg   r#  z_SortedFieldList.index  s    z000ri   c                     |j         }t          | j        |          }| j                            ||           | j                            ||           d S rd   )r	  r   r  r  r  )r   r  r  r  s       rg   r  z_SortedFieldList.insert  sP    N
A&&
!Q1d#####ri   c                 P    |                      |          }| j        |= | j        |= d S rd   )r#  r  r  )r   r  r  s      rg   r  z_SortedFieldList.remove  s*    jjKJsOOOri   N)r   r   r   r  r  r  r  r  r#  r  r  r   ri   rg   r  r    s        #I    ! ! !( ( (1 1 1$ $ $    ri   r  c                      e Zd Zd$dZed             Zej        d             Zd Zd%dZ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Zd%dZd%dZd%dZd Zd'dZd%dZd Zd Zd Zd Zd Zd Zd Zd Zd  Z d%d!Z!d" Z"d(d#Z#dS ))rT   Nc                 f    || _         || _        |                    dt                     || _        d S )Nr  )rE  rQ  r8  rK  r  )r   rE  r  r  s       rg   r  zSchemaManager.__init__   s4    
!""7L999.ri   c                 h    | j         p| j        j        j        }|t	          d| j        z            |S )Nz=database attribute does not appear to be set on the model: %s)rQ  rE  r.  r  r>   r  s     rg   r  zSchemaManager.database  sF    ^8tz/8:& (ACG:(N O O O	ri   c                     || _         d S rd   r  r  s     rg   r  zSchemaManager.database  s    ri   c                 0     | j         j        di | j        S r  )r  rS  r  r  s    rg   _create_contextzSchemaManager._create_context  s     ,t},DDt/CDDDri   Tc                 \   |                     dd          }|                                 }|                    |rdnd           |r|                    d           |                    | j                                      d           g }g }| j        j        j        rVfdj        j        D             }|	                    t          t          d          t          |          f                     j        D ]m}|	                    |                    |                     t          |t                     r.|j        s'|	                    |                                           nj        r|                    j                   |                    |                     |                     |                    t          ||z                        j        et/          j                  }	|	D ]N}
t          |
t0                    st3          d	          |                    d                              |
           Og }j        r|	                    d
           j        r|	                    d           |r+|                    dd                    |          z             |S )N	temporaryFCREATE TEMPORARY TABLE CREATE TABLE rB  r   c                 4    g | ]}j         |         j        S r   )rM  r  )rW  
field_namerI  s     rg   rZ  z/SchemaManager._create_table.<locals>.<listcomp>!  s9     J J J( +j18 J J Jri   r  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr   r  )r  r'  r"  r0  rE  r.  composite_keyr  r  r  r{  rW   r5  sorted_fieldsr	  re   r<   r  r
  r  r>  _create_table_option_sqltable_settingsrd  r]  r  strict_tableswithout_rowidrV  )r   r:  r1  is_tempr@  r  r  
pk_columnsrN  r2  setting
extra_optsrI  s               @rg   _create_tablezSchemaManager._create_table  s   ++k511""$$M--oNNN 	*KK()))
##C(((z 	IJ J J J,0,<,HJ J JJx]););)9*)E)E)G  H  H I I I ' 	C 	CENN599S>>***%11 C%. C""5#?#?#A#ABBB 	1t/000488AABBB ;!677888*)$*=>>N) 2 2!'3// G$%EFFFC  ((1111
:z00:::Az00AAA 	7KK		* 5 55666
ri   c                    g }t          | j        j        j        pi |          }|s|S t	          |                                          D ]\  }}t          |t                    s8t          |          r|j        j	        }nt          t          |                    }|                    t          t          |          |fd                     |S )Nr   r  )rQ  rE  r.  r1  r  r  re   rf  r-  r/  rW   r]  r  r{  )r   r1  r  r  rn   s        rg   r1  z&SchemaManager._create_table_option_sql?  s    TZ-5;WEE 	L 11 	@ 	@JCeT** ,E?? ,!K-EEE

OOELL3s88U"3#>>>????ri   c                 T    | j                              | j        dd|i|           d S Nr:  r   )r  r  r9  r   r:  r1  s      rg   r/  zSchemaManager.create_tableN  s7    0d0FFdFgFFGGGGGri   c                 J   |                                                      |                    d          rdnd          }|r|                    d           |                    t	          t          |                                         d                              |          S )Nr)  r*  r+  rB  r  )r'  r"  r  r0  r6   rd  r   rH  rB  r:  rI  r@  s         rg   _create_table_aszSchemaManager._create_table_asQ  s    ##%%88K00F116EG G 	  	*KK()))V\*55677U	ri   c                 \     | j         ||fd|i|}| j                            |           d S )Nr:  )r@  r  r  r?  s         rg   create_table_aszSchemaManager.create_table_as\  s?    #d#JIIDIDIIc"""""ri   c                 6   |                                                      |rdnd                              | j                  }|                    d          r|                    d          }n*|                    d          r|                    d          }|S )NzDROP TABLE IF EXISTS zDROP TABLE cascade CASCADErestrictz	 RESTRICT)r'  r"  r0  rE  r  )r   r:  r1  r@  s       rg   _drop_tablezSchemaManager._drop_table`  s    ##%%4J//]KKDJ 	 ;;y!! 	+++j))CC[[$$ 	+++k**C
ri   c                 T    | j                              | j        dd|i|           d S r<  )r  r  rG  r=  s      rg   r4  zSchemaManager.drop_tablej  s7    .d.DDDDGDDEEEEEri   Fc                 z   | j         }|j        s?|                                                     d                              | j                  S |                                                     d                              | j                  }|r|                    d          }|r|                    d          }|S )Nr/  zTRUNCATE TABLE z RESTART IDENTITYrE  )r  rS  r'  r"  r0  rE  )r   restart_identityrD  rT  r@  s        rg   _truncate_tablezSchemaManager._truncate_tablem  s    ]  	>((**W^,,SS__> ""$$,,->??CCDJOO 	3++122C 	*++j))C
ri   c                 b    | j                             |                     ||                     d S rd   )r  r  rK  )r   rJ  rD  s      rg   rS  zSchemaManager.truncate_tablez  s/    d223CWMMNNNNNri   c                 \      fd j         j                                        D             S )Nc                 <    g | ]}                     |          S r   )_create_indexrW  r#  r:  r   s     rg   rZ  z1SchemaManager._create_indexes.<locals>.<listcomp>~  s?     A A A ""5$// A A Ari   rE  r.  fields_to_indexr   r:  s   ``rg   _create_indexeszSchemaManager._create_indexes}  sN    A A A A A!Z-==??A A A 	Ari   c                 P   t          |t                    rk| j        j        s|                    d          }n |j        |k    r|                    |          }t          | j        t                    rt          |          }| 	                                
                    |          S r   )re   r?   r  rP  r:  r6  rQ  rX   r  r'  r0  )r   r#  r:  s      rg   rO  zSchemaManager._create_index  s    eU## 	-=2 )

5))$$

4(($..99 - &e,,##%%))%000ri   c                 l    |                      |          D ]}| j                            |           d S Nr:  )rT  r  r  r   r:  rB  s      rg   create_indexeszSchemaManager.create_indexes  sE    ))t)44 	) 	)EM!!%((((	) 	)ri   c                 \      fd j         j                                        D             S )Nc                 f    g | ]-}t          |t                                        |          .S r   )re   r?   _drop_indexrP  s     rg   rZ  z/SchemaManager._drop_indexes.<locals>.<listcomp>  sH     - - -eU++-  -- - - -ri   rQ  rS  s   ``rg   _drop_indexeszSchemaManager._drop_indexes  sE    - - - - -!Z-==??- - - 	-ri   c                 T   d}|r| j         j        r|dz  }t          |j        t                    r,|j        j        r t          |j        j        |j                  }nt          |j                  }|                                 	                    |          
                    |          S )NzDROP INDEX z
IF EXISTS )r  rQ  re   r3  rY   r  r6   r  r'  r"  r0  )r   r#  r:  rF  rG  s        rg   r]  zSchemaManager._drop_index  s    !	 	&DM1 	&%IelE** 	-u|/C 	- 4ekBBJJ,,J ""##Z	"ri   c                     ||t          d          |r#t          | j        |f|j        |j                  }| j                            |                     ||                    S )Nz!field or index must be specified.r9  r;  rX  )r  rH   rE  r9  rK  r  r  r]  )r   rN  r#  r:  s       rg   
drop_indexzSchemaManager.drop_index  sq    =U]@AAA 	7tzE8EL%*%57 7 7E}$$T%5%5e$%5%G%GHHHri   c                 l    |                      |          D ]}| j                            |           d S rW  )r^  r  r  rY  s      rg   drop_indexeszSchemaManager.drop_indexes  sE    ''T'22 	) 	)EM!!%((((	) 	)ri   c                 Z    |j         r| j        j        st          d|j        z            d S )Nz@Sequences are either not supported, or are not defined for "%s".)r  r  rR  r  r  rr	  s     rg   _check_sequenceszSchemaManager._check_sequences  sC    ~ 	?T]%< 	? 138:> ? ? ?	? 	?ri   c                     |j         j        j        r$t          |j         j        j        |j                  S t          |j                  S rd   )rE  r.  r  r6   r  rr	  s     rg   _sequence_for_fieldz!SchemaManager._sequence_for_field  s<    ;# 	*%++2ENCCC%.)))ri   c                    |                      |           | j                            |j                  sM|                                                     d                              |                     |                    S d S )NzCREATE SEQUENCE rf  r  r,  r  r'  r"  r0  rh  rr	  s     rg   _create_sequencezSchemaManager._create_sequence  sv    e$$$},,U^<< 	;$_&&W/00S11%8899;	; 	;ri   c                 l    |                      |          }|| j                            |           d S d S rd   )rk  r  r  r   rN  seq_ctxs      rg   create_sequencezSchemaManager.create_sequence  s?    ''..M!!'***** ri   c                    |                      |           | j                            |j                  rM|                                                     d                              |                     |                    S d S )NzDROP SEQUENCE rj  rr	  s     rg   _drop_sequencezSchemaManager._drop_sequence  sv    e$$$=((88 	;$_&&W-..S11%8899;	; 	;ri   c                 l    |                      |          }|| j                            |           d S d S rd   )rq  r  r  rm  s      rg   drop_sequencezSchemaManager.drop_sequence  s?    %%e,,M!!'***** ri   c                     |                                                      d                              |j                                      d                              |                    d                    S )NzALTER TABLE z ADD T)r'  r"  r0  rE  r
  rr	  s     rg   _create_foreign_keyz!SchemaManager._create_foreign_key  sY     ""((U[!!!!U11$7788	:ri   c                 `    | j                             |                     |                     d S rd   )r  r  ru  rr	  s     rg   create_foreign_keyz SchemaManager.create_foreign_key  s,    d66u==>>>>>ri   c                     | j         j        r0| j        j        j        D ] }|j        r|                     |           d S d S rd   )r  rR  rE  r.  r0  r  ro  rr	  s     rg   create_sequenceszSchemaManager.create_sequences  sY    =" 	0)7 0 0> 0((///	0 	00 0ri   c                 v    |                                    | j        |fi | |                     |           d S rW  )ry  r/  rZ  )r   r:  table_optionss      rg   
create_allzSchemaManager.create_all  sL    $00-000&&&&&ri   c                     | j         j        r0| j        j        j        D ] }|j        r|                     |           d S d S rd   )r  rR  rE  r.  r0  r  rs  rr	  s     rg   drop_sequenceszSchemaManager.drop_sequences  sY    =" 	.)7 . .> .&&u---	. 	.. .ri   c                 R     | j         |fi | |r|                                  d S d S rd   )r4  r~  )r   r:  r~  r1  s       rg   drop_allzSchemaManager.drop_all  sF    ((((( 	"!!!!!	" 	"ri   rd   rt  rz  )NNTrO  )$r   r   r   r  r  r  r  r'  r9  r1  r/  r@  rB  rG  r4  rK  rS  rT  rO  rZ  r^  r]  rb  rd  rf  rh  rk  ro  rq  rs  ru  rw  ry  r|  r~  r  r   ri   rg   rT   rT     s{       / / / /   X _  _E E E( ( ( (T  H H H H	 	 	 	# # # #   F F F F   O O O OA A A A
1 
1 
1 
1) ) ) )- - - -
" " "I I I I) ) ) )? ? ?
* * *; ; ;+ + +
; ; ;+ + +
: : :? ? ?0 0 0' ' ' '
. . ." " " " " "ri   rT   c                   (   e Zd Z	 	 	 	 	 	 ddZd ZddZd Zd Zd	 Zd
 Z	e
d             Zej        d             Zej        d             Ze
d             Zej        d             Ze
d             Zd Zd ZddZd Zd Zd Zd Zd Zd Zd ZdS )MetadataNFTc                     |t          d           |}|| _        || _        i | _        i | _        i | _        t                      | _        g | _        g | _	        i | _
        i | _        i | _        i | _        g | _        |j                                        | _        || _        || _        |s0| j        r|                     |          n|                                 }|| _        d | _        |rt/          |          ng | _        || _        || _        || _        d x| _        | _        || _        |	| _        || _         || _!        || _"        || _#        i | _$        i | _%        tM          j'        t.                    | _(        tM          j'        t.                    | _)        i | _*        |
pi | _+        |,                                D ]\  }}t[          | ||           t]          |/                                          | _0        g | _1        d S )NzC"db_table" has been deprecated in favor of "table_name" for Models.)2r   rE  r  rM  r  combinedr  _sorted_field_listr0  sorted_field_namesr  _default_by_name_default_dict_default_callables_default_callable_listr   rl  r  table_functionrQ  make_table_namerH  r3  ra  r  r  r  r  r/  r	  only_save_dirty
depends_onr2  r4  r3  r)  refsbackrefsrI	  defaultdictr
  model_backrefs
manytomanyr1  r  r   r]  keys_additional_keysr	  )r   rE  r  rH  r  r  r  r  r  r  r1  db_tabler  r2  r4  r)  r3  rQ  r  r  rn   s                        rg   r  zMetadata.__init__  s     6 7 7 7!J
 "2"4"4"$ ""$&(#N((**	,"4 	7!06$--e444#3355  %(/7tG}}}R&&377T0.$,**"	%1$77)5d;;}" ,,.. 	& 	&JCD#u%%%% #FKKMM 2 2 ri   c                 x    | j         rt          j        dd| j                  S t	          | j        j                  S )NrP  rw  )rQ  r   rj  r  rn  rE  r   r  s    rg   r  zMetadata.make_table_name:  s6    " 	56)S$)444tz2333ri   c                 D   |s|st          d          d | j        d fg}t                      }t          j        | f          }|r|j        n|j        }|r |            }||v r|                    |           |rQ|j        	                                D ]7\  }	}
|
                    |	|
df           |
                    |
j                   8|rQ|j        	                                D ]7\  }	}
|
                    |	|
df           |
                    |
j                   8||S )Nz)One of `refs` or `backrefs` must be True.FT)r  rE  r]  rI	  dequer  popleftr  r  r  r  r.  r  )r   r  r  depth_firstr  r  queuer  currfkrE  s              rg   model_graphzMetadata.model_graph?  sN    	JH 	JHIII
D)*uu!4'**)<u} 	.688Dt||XHHTNNN .!%!2!2 . .IBLL"eU!3444LL---- .!%!4!4!6!6 . .IBLL"eT!2333LL----  	. ri   c                     |j         }|| j        |<   | j        |                             |           | j        |j        j        |<   |j        j        | j                                     |           d S rd   )rf	  r  r
  r  rE  r.  r  r  r   rN  rels      rg   add_refzMetadata.add_refX  sg    o	%##E***$(J	5!	 ,33E:::::ri   c                     |j         }| j        |= | j        |                             |           |j        j        |= |j        j        | j                                     |           d S rd   )rf	  r  r
  r  r.  r  r  rE  r  s      rg   
remove_refzMetadata.remove_ref_  sa    oIe##E***Iu%	 ,33E:::::ri   c                 $    || j         |j        <   d S rd   r  r  rr	  s     rg   add_manytomanyzMetadata.add_manytomanyf  s    &+
###ri   c                      | j         |j        = d S rd   r  rr	  s     rg   remove_manytomanyzMetadata.remove_manytomanyi  s    OEJ'''ri   c                     | j         <t          | j        d | j        D             | j        | j        | j                  | _         | j         S )Nc                     g | ]	}|j         
S r   )r  rW  rN  s     rg   rZ  z"Metadata.table.<locals>.<listcomp>q  s    CCCu"CCCri   )r  r  rQ  )r3  rY   rH  r0  r  rE  r  r  s    rg   r/  zMetadata.tablel  sR    ;CC0BCCC{z-) ) )DK {ri   c                      t          d          )NzCannot set the "table".r  r  s     rg   r/  zMetadata.tablew  s    6777ri   c                     d | _         d S rd   )r3  r  s    rg   r/  zMetadata.table{  r  ri   c                     | j         S rd   )r  r  s    rg   r  zMetadata.schema  s
    |ri   c                     || _         | `d S rd   )r  r/  r  s     rg   r  zMetadata.schema  s    JJJri   c                 l    | j         rt          | j         | j                  S t          | j                  S rd   )r  r6   rH  r  s    rg   r  zMetadata.entity  s0    < 	+$,888$/***ri   c                 d    t          | j                  | _        d | j        D             | _        d S )Nc                     g | ]	}|j         
S r   r  )rW  r  s     rg   rZ  z2Metadata._update_sorted_fields.<locals>.<listcomp>  s    "F"F"Fa16"F"F"Fri   )ra  r  r0  r  r  s    rg   _update_sorted_fieldszMetadata._update_sorted_fields  s4    !$"9::"F"F43E"F"F"Fri   c                     t          |t                    r|j        }| j                            |g           }| j                            |g           }||fS rd   )re   
ModelAliasrE  r
  r  r  )r   rE  forwardrefsr  s       rg   get_rel_for_modelzMetadata.get_rel_for_model  sU    eZ(( 	 KEo))%44&**5"55X&&ri   c                    || j         v r|                     |           n)|| j        v r |                     | j        |                    t	          |t
                    s| `|                    | j        ||           || j         |j	        <   || j
        |j        <   || j        |j	        <   || j        |j        <   | j                            |           |                                  |j        ||j        | j        |<   t%          |j                  r6|j        | j        |<   | j                            |j	        |j        f           n@|j        | j        |<   |j        | j        |j	        <   n|                    | j        ||           t	          |t0                    r|                     |           d S t	          |t4                    r|j	        r|                     |           d S d S d S rd   )rM  remove_fieldr  r  re   r
  r/  r  rE  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r<   r  rF   r  )r   r-  rN  r	  s       rg   r
  zMetadata.add_field  s   $$j))))4?**""4?:#>???%++ 	>
JJtz:}===&+DK
#.3DL*+(-DM%*%/4DM%+,#**5111&&(((}(',}e$U]++ F5:]D+E2/66
8=8G H H H H 16D&u-8=D)%*5JJtz:}===e_-- 	'LL// 	'EJ 	'&&&&&	' 	' 	' 	'ri   c                    || j         vrd S | `| j                             |          }| j        |j        = | j        |= 	 | j        |j        = n# t          $ r Y nw xY w| j                            |           | 	                                 |j
        | j        |= | j                            |d           r@t          | j                  D ]*\  }\  }}||k    r| j                            |            n+n;| j                            |d            | j                            |j        d            t%          |t&                    r|                     |           d S d S rd   )rM  r/  r  r  r  r  r   r  r  r  r  r  r  r
  r  r  r  r  re   r<   r  )r   r-  originalr  r  rw  s         rg   r  zMetadata.remove_field  s   T[((FJ;??:..L-.M*%	h233 	 	 	D	&&x000""$$$'h'&**8T:: ?$-d.I$J$J  LAyaz))377::: * "&&x666%))(->>>h00 	&OOH%%%%%	& 	&s   A 
AAc                     t          |t                    | _        |                     ||           || _        |j        pt          |j                  | _        d S rd   )re   r&   r/  r
  r  r	  r  r  )r   r  rN  s      rg   r
  zMetadata.set_primary_key  sV    '|<<tU###   !   	ri   c                       j         r%t           fd j        j        D                       S  j        dur j        fndS )Nc                 *    g | ]}j         |         S r   rM  )rW  r-  r   s     rg   rZ  z-Metadata.get_primary_keys.<locals>.<listcomp>  s6     J J J( +j1 J J Jri   Fr   )r/  rb  r  r  r  s   `rg   r'  zMetadata.get_primary_keys  sw     	P J J J J,0,<,HJ J J K K K +/*:%*G*GD$&&ROri   c                 l    | j                                         }| j        D ]\  }} |            ||<   |S rd   )r  rM  r  )r   ddr-  r  s       rg   get_default_dictzMetadata.get_default_dict  sC    "''))#'#> 	' 	'J$WYYBzNN	ri   c           	         g }| j         D ]N}|j        r
|j        s|j        r6|                    t          | j        |f|j        |j                             O| j        D ]}t          |t                    r|                    |           -t          |t          t          f          r|\  }}g }|D ]t}t          |t                    r!|                    | j        |                    8t          |t                    r|                    |           ct          d|z            |                    t          | j        ||                     |S )Nra  z;Expected either a field name or a subclass of Node. Got: %s)r9  )r0  r  r#  r9  r  rH   rE  rK  r  re   rf  ra  rb  r]  r  r  )r   r  r  	index_objindex_partsr9  rM  rX  s           rg   rR  zMetadata.fields_to_index  s   # 	? 	?A} w ?!( ?z$*qd1801 >  >  > ? ? ?  	N 	NI)T** Ny))))Ie}55 N&/#V' M MD!$,, MdmD&9::::#D$// Md++++( *EGK*L M M Mz$*fVLLLMMMri   c                     || _         || j        j        _        | `t          |t                    r	|j        d }| j        D ]} ||           d S rd   )	r  rE  r  rQ  r/  re   rR   r  r	  )r   r  hooks      rg   set_databasezMetadata.set_database
  se     '/
$J h&& 	8<+?HN 	 	DDNNNN	 	ri   c                     || _         | `d S rd   )rH  r/  )r   rH  s     rg   set_table_namezMetadata.set_table_name  s    $JJJri   )NNNNNNFNNNNNFFNT)TTTrt  )r   r   r   r  r  r  r  r  r  r  r  r/  r  deleterr  r  r  r  r
  r  r
  r'  r  rR  r  r  r   ri   rg   r  r    s       FJ<@AEDHEI$(A A A AF4 4 4
   2; ; ;; ; ;, , ,( ( (   X \8 8 \8 ]  ]   X ]  ] + + X+G G G' ' '!' !' !' !'F& & &:" " "P P P    6      ri   r  c                   (     e Zd Zg Z fdZd Z xZS )SubclassAwareMetadatac                      t          t          |           j        |g|R i | | j                            |           d S rd   )r  r  r  r0  r  r   rE  r  r  r  s       rg   r  zSubclassAwareMetadata.__init__  sM    3#T**3EKDKKKFKKK5!!!!!ri   c                 0    | j         D ]} ||           d S rd   )r0  )r   r;   rE  s      rg   
map_modelsz SubclassAwareMetadata.map_models#  s,    [ 	 	EBuIIII	 	ri   )r   r   r   r0  r  r  r  r  s   @rg   r  r    sL        F" " " " "      ri   r  c                       e Zd ZdS )r3   Nr  r   ri   rg   r3   r3   (  r  ri   r3   c                   r     e Zd Z eg d          Z fdZd Zd Zd Zd Z	d Z
d Zd	 Zd
 ZeZd Z xZS )	ModelBase)r  r  r  r  r1  r  r  r)  r  rQ  r2  r3  c                     |t           k    s|d         j        t           k    r$ t          t                     j         |||fi |S i }|                    dd           }|r9|j                                        D ]\  }}|                    d          s|||<    t          |dd           }	d x}
}|D ]}t          |d          s|j        }|t          |j                  } j        |j        z  }|j        D ]}||v r||vr|j        |         ||<   |                    d|j                   |                    d|j                   |j                                        D ]B\  }}||v r
t'          |t(                    r#|j        j        st          |j                  ||<   C|                    dd           pi }|                    d	t.                    }|                    d
t0                    } t          t                     j         |||fi | d x _         _         | fi | _         | fi | _        g } j                                        D ]X\  }}t'          |t8                    r>|j        r|	rt;          d|z            |j        r||}
}	A|                    ||f           Y|	&|dur|	||j        fntA                      df\  }	}
n&d}	n#t'          |	tB                    rd}
d j        _"        |	dur j        #                    |
|	           |D ] \  }} j        $                    ||           !t           d          rd|vrtK           d fd           d j        z  }d j&        i}tO          |tP          f|          }| _(         )                                 tT          +                                 S )Nr   r  rw  r  r.  r  r  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr.  __composite_key__Tr'  r	  c                 D    dj         d|                                 dS )Nr   r	  r   )r   r'  )r   r  s    rg   rh   z#ModelBase.__new__.<locals>.<lambda>  s#     dllnnnn3. ri   z%sDoesNotExistr   ),rH  r   r  r  r  r  rc  r  r  r   r  r.  r	   r  inheritabler  r8  r  r  re   r[	  rN  r  r  rT   r_	  rh	  r  r8   r  r  r  r   r&   r/  r
  r
  r   r   r  r3   validate_modelr0   r
  )r  r  basesr
  r  meta_optionsrI  r  r`  r  pk_name	parent_pkr
  	base_metaall_inheritablesoptsr  SchemarM  r  rn   rN  exc_name	exc_attrsexception_classr  s   `                        rg   r  zModelBase.__new__1  s   :q!2j!@!@05C((0dE5 ; ;39; ; ; yy&& 	(++-- ( (1||C(( (&'LOT=$//"")
  	1 	1A1g&& I $Y%:;;	!o	0JJO' < <''A\,A,A&/&8&;LO##J	0BCCC##Hi.>???***,, 1 1A::xa// 18K 1'00E!H	1   !1488>B 6AA!!"8-HH ,eIs##+CueNNvNN%))s{D----	fS**E**,,,.. 	0 	0JC%'' 0$ 0 0$%F%MNNN& 0"'BBMM3,///:%%"+"7 !*9>:: )T2 GG L)) 	+)G&*CI#U??I%%gr222! 	- 	-KD%Ie,,,, 3	"" 	/z'>'>C &. &. &. &. / / / $cl2!3>2	x,)DD* 	""3'''
ri   c                     d| j         z  S )Nz<Model: %s>)r   r  s    rg   r	  zModelBase.__repr__  s    t},,ri   c                 D    t          |                                           S rd   )r~  r  r  s    rg   r  zModelBase.__iter__  s    DKKMM"""ri   c                 ,    |                      |          S rd   )	get_by_idr   r  s     rg   r  zModelBase.__getitem__  s    ~~c"""ri   c                 2    |                      ||           d S rd   )	set_by_id)r   r  rn   s      rg   r  zModelBase.__setitem__  s    sE"""""ri   c                 0    |                      |           d S rd   )delete_by_idr  s     rg   r%
  zModelBase.__delitem__  s    #ri   c                 T    	 |                      |           dS # | j        $ r Y dS w xY wr  )r  r3   r  s     rg   r  zModelBase.__contains__  sG    	NN3 4   	 	 	55	s    
''c                 N    |                                                                  S rd   )r  r4  r  s    rg   r%  zModelBase.__len__  s    {{}}""$$$ri   c                     dS rG  r   r  s    rg   __bool__zModelBase.__bool__  s    ttri   c                 @    |                     | j        j                  S rd   )r0  r.  r/  r?  s     rg   r,  zModelBase.__sql__  s    wwtz'(((ri   )r   r   r   r]  r  r  r	  r  r  r  r%
  r  r%  r  __nonzero__r,  r  r  s   @rg   r  r  +  s        # : : : ; ;K
Y Y Y Y Yv- - -# # ## # ## # #    % % %###K) ) ) ) ) ) )ri   r  c                        e Zd Zd Zd Zd ZdS )rI  c                 >    || _         || _        || _        || _        d S rd   )r0  r  rE  rF  )r   r0  r  rE  rF  s        rg   r  z_BoundModelsContext.__init__  s%     "*ri   c           	          g | _         | j        D ]`}| j                             |j        j                   |                    | j        | j        | j        t          | j                             a| j        S N)rg  )	r  r0  r  r.  r  r  rE  rF  r]  )r   rE  s     rg   r  z_BoundModelsContext.__enter__  sy     [ 	2 	2E&&u{';<<<JJt}dnd6H #DK 0 0  2 2 2 2{ri   c           	          t          | j        | j                  D ]:\  }}|                    || j        | j        t          | j                             ;d S r  )r  r0  r  r  rE  rF  r]  )r   r&  r'  r(  rE  rT  s         rg   r  z_BoundModelsContext.__exit__  sf    T[$*=>> 	2 	2IE2JJr4>4+= #DK 0 0  2 2 2 2	2 	2ri   N)r   r   r   r  r  r  r   ri   rg   rI  rI    sA        + + +  2 2 2 2 2ri   rI  c                      e Zd Zd Zd Zed             Zed4d            Zed             Zed             Z	ed4d            Z
ed4d	            Zed4d
            Zed             Zed4d            Zed4d            Zed             Zed             Zed             Zed4d            Zed4d            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Z ee          Zej         d             Zd Z!d Z"d Z#d5d!Z$d" Z%ed#             Z&ed$             Z'd6d&Z(d7d'Z)d( Z*d) Z+d* Z,d+ Z-ed8d,            Z.ed9d-            Z/ed.             Z0ed:d/            Z1ed9d0            Z2ed1             Z3ed2             Z4ed3             Z5dS );rG   c                    |                     dd           ri | _        t                      | _        n7| j                                        | _        t          | j                  | _        i | _        |D ]}t          | |||                    d S )N__no_default__)r  r_	  r]  ra	  r.  r  rh	  r   )r   r  r  r  s       rg   r  zModel.__init__  s    ::&-- 	-DM%%DKK J7799DMdm,,DK 	( 	(AD!VAY''''	( 	(ri   c                 J    | j         j        durt          | j                  ndS )NFzn/a)r.  r  r]  _pkr  s    rg   r'  zModel.__str__  s#     $
 6e C Cs48}}}Nri   c                     d S rd   r   r  s    rg   r  zModel.validate_model  s    ri   Nc                 "    t          | |          S rd   )r  )r  r  s     rg   r  zModel.alias  s    #u%%%ri   c                 H    | }|s| j         j        }t          | ||          S )N)
is_default)r.  r0  ModelSelect)r  rM  r  s      rg   r  zModel.select  s0    Z
 	-Y,F3:>>>>ri   c           	         i }|rt          |t                    s|rt          d|z            |S |D ]u}	 t          |t                    r|n| j        j        |         }n=# t          $ r0 t          |t                    st          d|d|d          |}Y nw xY w||         ||<   v|rJ|D ]G}	 ||         || j        j        |         <   # t          $ r ||         |t          | |          <   Y Dw xY w|S )Nz/Data cannot be mixed with keyword arguments: %szUnrecognized field name: "z" in rS  )	re   r  r  r8   r.  r  r   rf  r   )r  r
  r  
normalizedr  rN  s         rg   _normalize_datazModel._normalize_data  sx   
 	.dD))  =$ &57;&< = = = 	. 	. $.sE$:$: :SS"%)"4S"9 E      %c400 8(j,/CC*7 8 8 8EEE	 
 %)I
5!! 	@ @ @@:@+Jsy1#677 @ @ @4:3KJwsC00111@s#   )A7BB/C#C10C1c                 J    t          | |                     ||                    S rd   )ModelUpdater  )r  _Model__datar   s      rg   r   zModel.update  "    3 3 3FF C CDDDri   c                 J    t          | |                     ||                    S rd   )ModelInsertr  r  r  r  s      rg   r  zModel.insert  r  ri   c                 &    t          | ||          S r  r  r  rd  rM  s      rg   insert_manyzModel.insert_many  s    3tV<<<<ri   c                 D      fd|D             }t           ||          S )Nc                 ^    g | ])}t          |t                    rt          |          n|*S r   )re   r]  r   )rW  rN  r  s     rg   rZ  z%Model.insert_from.<locals>.<listcomp>	  sJ     3 3 3"' +5UC*@*@ 73&&&3 3 3ri   r  r  )r  rB  rM  r  s   `   rg   insert_fromzModel.insert_from  s@    3 3 3 3+13 3 33ug>>>>ri   c                 D     | j         |fi |                    d          S r  r  r  s      rg   r{   zModel.replace  s*    sz&++F++77	BBBri   c                 V    |                      ||                              d          S )N)rd  rM  r  )r  r  r  s      rg   replace_manyzModel.replace_many  s(    $v66Y''	)ri   c                 $    t          | ||          S rd   )ModelRaw)r  r0  rU  s      rg   rawz	Model.raw  s    S&)))ri   c                      t          |           S rd   )ModelDeleter  s    rg   r  zModel.delete  s    3ri   c                 B     | di |}|                     d           |S )NT)force_insertr   )save)r  rB  insts      rg   createzModel.create  s,    s||U||		t	$$$ri   c                     |t          ||          }n|g}t           j        j                  } j        j        r& j        j        j        }|                    |            j        j        j	        r( j        j        dur j        
                                }nd } fd|D             }g |D ]L}t          |t                    r                    |j                   2                    |j                   M|D ]}	fd|	D             }
                     |
|                                          }|rD|Bt#          ||	          D ]1\  }}t#          ||          D ]\  }}t%          ||j        |           2d S )NFc                 4    g | ]}j         j        |         S r   )r.  rM  )rW  r-  r  s     rg   rZ  z%Model.bulk_create.<locals>.<listcomp>7  s#    MMM:#)":.MMMri   c              3   6   K   | ]fd D             V  dS )c                 0    g | ]}t          |          S r   r  )rW  r  rE  s     rg   rZ  z/Model.bulk_create.<locals>.<genexpr>.<listcomp>@  s#    777AgeQ''777ri   Nr   )rW  rE  r
  s    @rg   rz  z$Model.bulk_create.<locals>.<genexpr>@  sL       ) ) 8777777 ) ) ) ) ) )ri   r  )r$   ra  r.  r  r	  r  r  r  r  r)  r'  re   r<   r  r
  r  r  r  r   )r  
model_list
batch_sizebatchesr  r  	pk_fieldsrM  rN  batchr  r  r7  rE  pk_fieldobj_idr
  s   `               @rg   bulk_createzModel.bulk_create%  s   !j*55GG!lG397889# 	(i+0Gw'''9. 	9 --	2244IIIMMMMMMM 	) 	)E%11 )U12222UZ(((( 	> 	>E) ) ) )"') ) )E//%/77??AAC >S_"%c5// > >JC.1)S.A.A > >*6x}f====>	> 	>ri   c                     t           j        j        t                    rt	          d           fd|D             }d |D             }|t          ||          }n|g}d} j        j        }|D ]}d |D             }	i }
t          ||          D ]\  }}g }|D ]m}t          ||          }t          |t                    s|	                    |d          }|
                    |	                    |j                  |f           nt          ||          }||
|<   |                     |
                               j        j                            |	                                                    z  }
|S )NzGbulk_update() is not supported for models with a composite primary key.c                 b    g | ]+}t          |t                    rj        j        |         n|,S r   )re   r]  r.  rM  )rW  r  r  s     rg   rZ  z%Model.bulk_update.<locals>.<listcomp>O  sG     # # # *4As););B#)"1%% # # #ri   c                 T    g | ]%}t          |t                    r|j        n|j        &S r   )re   r<   r
  r  r  s     rg   rZ  z%Model.bulk_update.<locals>.<listcomp>R  sD     6 6 6%* *4E?)K)K !%%j6 6 6ri   r   c                     g | ]	}|j         
S r   )r  r
  s     rg   rZ  z%Model.bulk_update.<locals>.<listcomp>^  s    444Uuy444ri   T)r	  )re   r.  r  r&   r  r$   r  r   rf  r  r  r  r    r   rB  r  r  )r  r,  rM  r-  r
  r.  r  r  r0  id_listr   rN  r   r  rE  rn   r	  s   `                rg   bulk_updatezModel.bulk_updateH  s   ci+\:: 	9 8 9 9 9# # # #!# # #6 6.46 6 6 !j*55GG!lGY" 	 	E44e444GF"6511 % %t" B BE#E400E%eT22 A %u4 @ @LL"++ei"8"8%!@AAAAB $u#**V$$5.227;;<<799AA ri   c                 "    t          | d          S r  )NoopModelSelectr  s    rg   noopz
Model.noopo  s    sB'''ri   c                 P   |                                  }|rnt          |          dk    rQt          |d         t                    r6| j        j        r*|                    | j        j        |d         k              }n
 |j        | }|r |j        di |}|	                                S )Nr   r   r   )
r  r   re   r   r.  r	  rB  r  rC  r  )r  rB  filterssqs       rg   r  z	Model.gets  s    ZZ\\ 	&5zzQ:eAh#<#<y' XXci3uQx?@@RXu% 	&%%W%%Bvvxxri   c                 @    	  | j         |i |S # t          $ r Y d S w xY wrd   )r  r3   )r  rB  r>  s      rg   get_or_nonezModel.get_or_none  s@    	37E-W--- 	 	 	DD	s    
c                 H    |                      | j        j        |k              S rd   )r  r.  r  r  r  s     rg   r  zModel.get_by_id  s    wwsy,2333ri   c                     |'|                      |                                          S |                     |                              | j        j        |k                                              S rd   )r  r  r   rB  r.  r  )r  r  rn   s      rg   r  zModel.set_by_id  sY    ;::e$$,,...JJu%%U390C788Dri   c                     |                                                      | j        j        |k                                              S rd   )r  rB  r.  r  r  rC  s     rg   r  zModel.delete_by_id  s4    zz||!!#)"72"=>>FFHHHri   c                 f   |                     di           }|                                 }|                                D ],\  }}|                    t	          | |          |k              }-	 |                                dfS # | j        $ r 	 |r|                    |           | j        j	        
                                5   | j        di |dfcd d d            cY S # 1 swxY w Y   Y d S # t          $ r3}	 |                                dfcY d }~cY S # | j        $ r |w xY wd }~ww xY ww xY w)Nr  FTr   )r  r  r  rB  r   r  r3   r   r.  r  r  r'  rA   )r  r  r  rB  rN  rn   excs          rg   get_or_createzModel.get_or_create  s   ::j"--

"LLNN 	> 	>LE5KKU 3 3u <==EE	99;;%% 
	 
	 
		 ,MM(+++Y'..00 6 6%3:////56 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6!    99;;---------'   I
	sl   -B 
D05C/C!C/D0!C%	%C/(C%	)C//
D,:DD,D0D$$D''D,,D0c                 @     |                                  j        |i |S rd   )r  rC  )r  dq_nodesr>  s      rg   rC  zModel.filter  s"    "szz||"H8888ri   c                 `    | j         j        durt          | | j         j        j                  S d S r   )r.  r  r   r	  r  s    rg   get_idzModel.get_id  s4    
 :!..4!7!ABBB /.ri   c                 F    t          | | j        j        j        |           d S rd   )r   r.  r  r  r  s     rg   r  z	Model._pk  s"    dj,1599999ri   c                 ,    | j         j        | j        k    S rd   )r.  r  r  r  s    rg   _pk_exprzModel._pk_expr  s    z%11ri   c                     i }|D ]G}t          |t                    r| j        j        |         }|j        |v r||j                 ||j        <   H|S rd   )re   r]  r.  r  r  )r   
field_dictonlynew_datarN  s        rg   _prune_fieldszModel._prune_fields  s]     	> 	>E%%% 3
+E2zZ'''1%*'=$ri   c           	          | j         j        D ]d}|j        }||v o%||         d u o| j                            |          d u}|r/t          | |t          | |                     | j        |         ||<   ed S rd   )r.  r  r  rh	  r  r   r   r_	  )r   rQ  foreign_key_fieldforeign_key
conditionss        rg   _populate_unsaved_relationsz!Model._populate_unsaved_relations  s    !% 	E 	E+0Kz) :;'4/:  --T9   Ek74+E+EFFF*.-*D
;'	E 	Eri   Fc                 .   | j                                         }| j        j        dur| j        j        }| j        }nd x}}||                     ||          }nF| j        j        r:|s8|                     || j                  }|s| j        	                                 dS | 
                    |           d}| j        j        r||                    |j        d            ||s| j        j        r!|j        D ]}|                    |d            n|                    |j        d            |st!          d           | j        di |                    |                                                                           }nw|V | j        di |                                }|4| j        j        s|&|| _        | j                            |j                   n | j        di |                                 | xj        t/          |          z  c_        |S )NFr   zno data to save!r   )r_	  rM  r.  r  r  rT  r  dirty_fieldsra	  r  rY  r	  r  r  r/  r  r  r   rB  rO  r  r  r
  r]  )	r   r$  rR  rQ  r1  pk_valuerd  pk_part_namer  s	            rg   r%  z
Model.save  s9   ]''))
:!..z-HxHH"&&Hx++J==JJZ' 	 	++J8IJJJ !!###u((444:$ 	0)9NN8=$///z' 4$,$8 7 7LNN<66667 x}d333 5 !34444;,,,,224==??CCKKMMDD!**z**2244B~4:#<~#+#3##HM222DK%%*%%--///s:&ri   c                 *    t          | j                  S rd   )r  ra	  r  s    rg   is_dirtyzModel.is_dirty  r  ri   c                 4      fd j         j        D             S )Nc                 0    g | ]}|j         j        v |S r   r  ra	  r  s     rg   rZ  z&Model.dirty_fields.<locals>.<listcomp>  s'    MMMaqv7L7L7L7L7Lri   r.  r0  r  s   `rg   r[  zModel.dirty_fields  s"    MMMM4:3MMMMri   c                 4      fd j         j        D             S )Nc                 :    g | ]}|j         j        v |j         S r   rb  r  s     rg   rZ  z+Model.dirty_field_names.<locals>.<listcomp>
  s3     * * *16T[(( (((ri   rc  r  s   `rg   dirty_field_nameszModel.dirty_field_names  s2    * * * *
 8 * * * 	*ri   Tc              #   *  K   t          |           }t          |           d fg}i }t                      }|r|                                \  }}||v r|                    |           |j        j                                        D ]\  }	}
|
|u s||	| j        |	j        j	                 k    }n|	|z  }|

                    |
j        j                                      |          }|	j        r|ra|                    |
g                               ||	f           |	j        r|r|                    |
           |                    |
|f           |t!          t#          |                    D ]$}|                    |d          D ]\  }}||fV  %d S r  )r  r]  r  r  r.  r  r  r_	  rj	  r  r  r  rB  r	  r8  r  r  r.  r  )r   search_nullableexclude_null_childrenmodel_classr  queriesr  r  rB  r  rf	  rD  r  r   r?  r"  s                   rg   dependencieszModel.dependencies  s     4jjt**d#$uu 	< 99;;LE5}}HHUOOO!&!5!;!;!=!= < <I++u}$-0A"BBDD;D%,,Y_-HII"U4[[ w </ <&&y"55<<dBZHHHw <#8 < ++++i%:;;;'  	<* +d++,, 	 	A Q++  A!e	 	ri   c                    |r|                      |           D ]\  }}|j        }|j        r<|s: |j        di |j        d i                    |                                           O|                                                    |                                           t          |                                                               | 	                                                                          S )N)ri  r   )
rl  rE  r	  r   r  rB  r  r  r  rO  )r   r  delete_nullablerB  r  rE  s         rg   delete_instancezModel.delete_instance,  s     	:!..EX.YY : :	r7 :? : EL33BGT?3399%@@HHJJJJLLNN((//779999Dzz  ""((99AACCCri   c                 8    t          | j        | j        f          S rd   )r  r  r  r  s    rg   r  zModel.__hash__6  s    T^TX.///ri   c                 T    |j         | j         k    o| j        d uo| j        |j        k    S rd   )r  r  r  s     rg   r  zModel.__eq__9  s3    Ot~- "HD "H	!	#ri   c                     | |k     S rd   r   r  s     rg   r  zModel.__ne__?  s    5=  ri   c                 ^   |j         j        R|j         j        rF	 |                    t	          | |j         j                            S # t
          t          f$ r Y nw xY w|                    t	          t          | | j        j	        j
                  | j        j	        j                            S )Nr5  )r  r6  r  r0  r_   r  r  r   r.  r  r  r  r?  s     rg   r,  zModel.__sql__B  s     9*sy/C*wwuTSY5HIIIJJJz*    wwuWT4:+A+FGG'+z'='FH H H I I 	Is   -A AAc                 .   | j         j        |u}| j                             |           |s|rh|t                      }| j                             ||          }|D ]9\  }}}	||vr/|j                             |           |                    |           :|S )N)r  r  )r.  r  r  r]  r  r  )
r  r  rE  rF  rg  is_differentGrw  rE  
is_backrefs
             rg   r  z
Model.bindV  s    y)9	x((( 	( 	(55	%%9}%MMA() ( ($5*((K,,X666LL'''ri   c                 (    t          | f|||          S rd   rH  )r  r  rE  rF  s       rg   r  zModel.bind_ctxd  s    "C68YNNNri   c                 n    | j         }| j        j                            |j        j        |j                  S rd   )r.  r  r  r  r/  r   r  )r  Ms     rg   r  zModel.table_existsh  s+    I{#001A18LLLri   c                 &   d|v r$t          d           |                    d          }|r'| j        j        j        s|                                 rd S | j        j        r |                    d| j        j                    | j        j	        |fi | d S )Nfail_silentlyzU"fail_silently" has been deprecated in favor of "safe" for the create_table() method.r)  )
r   r  r  r  rP  r  r.  r)  r8  r|  )r  r:  r1  s      rg   r/  zModel.create_tablem  s    g%% C D D D;;//D 	,> 	!!	F9 	A{CI,?@@@t//w/////ri   c                     |r'| j         j        j        s|                                 sd S | j        j        r |                    d| j        j                    | j         j        ||fi | d S )Nr)  )r  r  rQ  r  r.  r)  r8  r  )r  r:  r~  r1  s       rg   r4  zModel.drop_table{  s     	,< 	##%%	F9 	A{CI,?@@@T>==W=====ri   c                 *     | j         j        di | d S r  )r  rS  )r  r1  s     rg   rS  zModel.truncate_table  s#    ""--W-----ri   c                     t          | |fi |S rd   )rH   r  rM  r  s      rg   r#  zModel.index  s    #v00000ri   c                    t          |          dk    rIt          |d         t          t          f          r'| j        j                            |d                    d S | j        j                            t          | |fi |           d S rc  )r   re   rW   r?   r.  r  r  rH   r  s      rg   	add_indexzModel.add_index  s~    v;;!
6!9sEl C CI$$VAY/////I$$ZV%F%Fv%F%FGGGGGri   rd   )FNr	  rz  )TTNrO  rt  )6r   r   r   r  r'  classmethodr  r  r  r  r   r  r  r  r{   r  r   r  r'  r3  r9  r<  r  rA  r  r  r  rH  rC  rL  r  r  r  rO  rT  rY  r%  r_  r[  rf  rl  ro  r  r  r  r,  r  r  r  r/  r4  rS  r#  r  r   ri   rg   rG   rG     s       
( 
( 
(O O O   [ & & & [& ? ? [?   [4 E E E [E E E E [E = = = [= ? ? [?
 C C C [C ) ) ) [)
 * * [*     [    [
  >  >  > [ >D $ $ $ [$L ( ( [(   [   [ 4 4 [4 D D [D I I [I   [( 9 9 [9C C C (6

CZ: : Z:2 2 2  	E 	E 	E) ) ) )V! ! ! N N XN * * X*   >D D D D0 0 0# # #! ! !I I I(    [ O O O [O M M [M 0 0 0 [0 > > > [> . . [. 1 1 [1 H H [H H Hri   rG   c                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )r  z3Provide a separate reference to a model in a query.Nc                 .    || j         d<   || j         d<   d S )NrE  r  )rc  )r   rE  r  s      rg   r  zModelAlias.__init__  s     !&g!&gri   c                    | j         f| j         j        z   D ]M}	 |j        |         }t          |t                    r|                    d |           c S ># t          $ r Y Jw xY wt          | j         |          }t          |t                    r0t          
                    | |          | j        |<   | j        |         S |S rd   )rE  ru  rc  re   r  r  r   r   r8   
FieldAliasr'  )r   r   r
  r  
model_attrs        rg   r   zModelAlias.__getattr__  s    
 *!55 	 	Aj&c?33 3;;tT222223    TZ..
j%(( 	'","3"3D*"E"EDM$=&&s   7A
A! A!c                      t          d          )Nz'Cannot set attributes on model aliases.r  r   s      rg   r   zModelAlias.__setattr__  s    FGGGri   c                 >      fd j         j        j        D             S )Nc                 0    g | ]}t          |          S r   r  )rW  r  r   s     rg   rZ  z0ModelAlias.get_field_aliases.<locals>.<listcomp>  s#    NNNQa  NNNri   )rE  r.  r  r  s   `rg   get_field_aliaseszModelAlias.get_field_aliases  s%    NNNN$**:*MNNNNri   c                 N    |s|                                  }t          | |          S rd   )r  r	  )r   	selections     rg   r  zModelAlias.select  s+     	1..00I4+++ri   c                      | j         di |S r  rE  )r   r  s     rg   r  zModelAlias.__call__  s    tz##F###ri   c                    |j         t          k    r|                    | j                  S | j        r| j        |j        | <   |j         t          k    rb|                    | j        j        j                  	                    d                              t          |j        |                              S |                    t          |j        |                              S r  )r  rK  r0  rE  r  r  rI  r.  r  r"  r6   r?  s     rg   r,  zModelAlias.__sql__  s    9$$774:&&&: 	1&*jCd#9$$S)011WV__S 1$ 78899; 776#"3D"9::;;;ri   rd   )r   r   r   r  r  r   r   r  r  r  r,  r   ri   rg   r  r    s        ==' ' ' '  &H H HO O O, , ,
$ $ $< < < < <ri   r  c                   N    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
d Zd	S )
r  c                 :    || _         |j        | _        || _        d S rd   )rN  rE  rN  )r   rN  rN  s      rg   r  zFieldAlias.__init__  s    \



ri   c                 R     G d d| t          |                    } |||          S )Nc                       e Zd ZdS )&FieldAlias.create.<locals>._FieldAliasNr  r   ri   rg   _FieldAliasr    s        Dri   r  )r  )r  rN  rN  r  s       rg   r'  zFieldAlias.create  sF    	 	 	 	 	#tE{{ 	 	 	{65)))ri   c                 6    t          | j        | j                  S rd   )r  rN  rN  r  s    rg   rd  zFieldAlias.clone  s    $+tz222ri   c                 6    | j                             |          S rd   )rN  r	  r  s     rg   r	  zFieldAlias.adapt  s    4:#3#3E#:#::ri   c                 6    | j                             |          S rd   )rN  r=  r  s     rg   r=  zFieldAlias.python_value  s    $**A*A%*H*H#Hri   c                 6    | j                             |          S rd   )rN  r  r  s     rg   r  zFieldAlias.db_value  s    dj&9&9%&@&@@ri   c                 F    |dk    r| j         nt          | j        |          S )NrE  )rN  r   rN  r   s     rg   r   zFieldAlias.__getattr__  s"    "goot{{74:t3L3LLri   c                 f    |                     t          | j        | j        j                            S rd   )r0  r%   rN  rN  r  r?  s     rg   r,  zFieldAlias.__sql__  s%    wwvdk4:+ABBCCCri   N)r   r   r   r  r  r'  rd  r	  r=  r  r   r,  r   ri   rg   r  r    s          
 * * [*
3 3 3 ;::HHH@@@M M MD D D D Dri   r  c                      t                      t                      g  fdd }t           |          D ]} |           S )Nc                 ,   | v r| vr                     |            | j        j                                        D ]\  }}|j        s |           | j        j        r| j        j        D ]} |                               |            d S d S d S rd   )r  r.  r  r  r  r  r  )rE  rW  rf	  
dependencydfsr0  rG  r  s       rg   r  zsort_models.<locals>.dfs  s    F??uD00HHUOOO*/+*:*@*@*B*B # #&Y #+ #C	NNN{% $"'+"8 $ $JC
OOOOOOE""""" ?00ri   c                 2    | j         j        | j         j        fS rd   )r.  r  rH  )r   s    rg   rh   zsort_models.<locals>.<lambda>  s    qw|QW%78 ri   r  )r]  r  )r0  r0  r   r  rG  r  s   `  @@@rg   r.  r.    s    [[F55DH# # # # # # # # 98EF&&&  AOri   c                   z     e Zd Zej        Z fdZej        dd            Z	ej        d             Z
d Zd Z xZS )_ModelQueryHelperc                      t          t          |           j        |i | | j        s| j        j        j        | _        d S d S rd   )r  r  r  rQ  rE  r.  r  r  s      rg   r  z_ModelQueryHelper.__init__  sM    /&&/@@@@~ 	7!Z-6DNNN	7 	7ri   Nc                 H    t           j        | _        || j        n|| _        d S rd   )r  rA  r  rE  r  r  s     rg   r  z_ModelQueryHelper.objects  s$    *5*=DJJ;ri   c                 (    t           j        | _        d S rd   )r  rB  r  r  s    rg   r0  z_ModelQueryHelper.models  s    ri   c                    | j         p| j        }|t          j        k    r|                     |          S |t          j        k    rt          || j        | j                  S |t          j	        k    rt          || j        | j                  S |t          j        k    rt          || j        | j                  S |t          j        k    r!t          || j        | j        | j                  S t!          d|z            r	  )r  r
  r  rB  _get_model_cursor_wrapperr?  ModelDictCursorWrapperrE  r~  r>  ModelTupleCursorWrapperr@  ModelNamedTupleCursorWrapperrA  ModelObjectCursorWrapperr  r  r  s      rg   r  z%_ModelQueryHelper._get_cursor_wrapper  s    >:T%:sy  11&999!!)&$*doNNN""*64:tOOO((/
04A A A((+FDJ,0OT=NP P P ;hFGGGri   c                 :    t          || j        g | j                  S rd   )r  rE  r  s     rg   r  z+_ModelQueryHelper._get_model_cursor_wrapper   s    '
B
KKKri   rd   )r   r   r   r  rB  r
  r  rf  rM  r  r0  r  r  r  r  s   @rg   r  r    s        y7 7 7 7 7
 
YO O O YO 
Y# # Y#H H H"L L L L L L Lri   r  c                   $     e Zd Z fdZd Z xZS )r  c                 j    || _         d| _         t          t          |           j        d||d| d S )Nr   r&  )rE  r~  r  r  r  )r   rE  r0  rU  r  r  s        rg   r  zModelRaw.__init__%  sA    
&h&H3vHHHHHHHri   c                     	 |                                  d         S # t          $ r? |                                 \  }}| j                            | j        d|d|          w xY w)Nr   . instance matching query does not exist:
SQL: 	
Params: )r  rx  r0  rE  r3   r'  s      rg   r  zModelRaw.get*  s    	E<<>>!$$ 	E 	E 	E((**KC*))+/:::sssFF+D E E E	Es
    A	A%)r   r   r   r  r  r  r  s   @rg   r  r  $  sS        I I I I I
E E E E E E Eri   r  c                   r    e Zd Zd ZeZd ZeZd ZeZd Z	e	Z
d Zd ZddZdd	Zej        d
             ZdS )BaseModelSelectc                 0    t          | j        | d|          S )NrW  ModelCompoundSelectQueryrE  r   s     rg   rN  zBaseModelSelect.union_all5      '
D+sKKKri   c                 0    t          | j        | d|          S )NrX  r  r   s     rg   rQ  zBaseModelSelect.union9  s    '
D'3GGGri   c                 0    t          | j        | d|          S )NrY  r  r   s     rg   r\  zBaseModelSelect.intersect=  r  ri   c                 0    t          | j        | d|          S )NrZ  r  r   s     rg   r]  zBaseModelSelect.except_A  s    '
D(CHHHri   c                 `    | j         s|                                  t          | j                   S rd   )r  r  r~  r  s    rg   r  zBaseModelSelect.__iter__E  s+    # 	LLNNND()))ri   c                 "    t          | g|R i |S rd   )rO   )r   
subqueriesr  s      rg   rO   zBaseModelSelect.prefetchJ  s     4z444V444ri   Nc                    |                      dd          }d |_        	 |                    |          d         S # t          $ r? |                                \  }}| j                            |j        d|d|          w xY w)Nr   r   r  r  )rH  r  r  rx  r0  rE  r3   )r   r  rd  r0  rU  s        rg   r  zBaseModelSelect.getM  s    a## $	F==**1-- 	F 	F 	F))++KC*))+0;;;VV+E F F F	Fs
   : A	Bc                 \    	 |                      |          S # | j        j        $ r Y d S w xY w)N)r  )r  rE  r3   r  s     rg   rA  zBaseModelSelect.get_or_noneX  sB    	88X8...z& 	 	 	DD	s    ++c                 P   g }|D ]t                    r |                    j        j                   1t	          t
                    r=j        st          d          |                    fdj        D                        |                               || _	        d S )Nr  c                 0    g | ]}t          |          S r   r  r  s     rg   rZ  z,BaseModelSelect.group_by.<locals>.<listcomp>i  r  ri   )
r-  r>  r.  r0  re   rY   r  r  r  ro  r  s      @rg   r  zBaseModelSelect.group_by^  s     	( 	(F 
( :;;;;FE** ( 2$ &1 2 2 2  !B !B !B !B17!B !B !B C C C C ''''!ri   rd   )r   r   r   rN  r   rQ  r  r\  r  r]  r  r  rO   r  rA  rf  rM  r  r   ri   rg   r  r  4  s        L L LGH H HFL L LGI I IG* * *
5 5 5	F 	F 	F 	F    
Y" " Y" " "ri   r  c                   $     e Zd Z fdZd Z xZS )r  c                 V    || _          t          t          |           j        |i | d S rd   )rE  r  r  r  r  s       rg   r  z!ModelCompoundSelectQuery.__init__q  s3    
6&--6GGGGGGri   c                 6    | j                             |          S rd   )r#  r  r  s     rg   r  z2ModelCompoundSelectQuery._get_model_cursor_wrapperu  s    x11&999ri   )r   r   r   r  r  r  r  s   @rg   r  r  p  sL        H H H H H: : : : : : :ri   r  c                    g }| D ]Ɗt                    r |                    j        j                   1t	          t
                    r(|                                                               nt	          t                    r.j        r'|                    fdj        D                        |	                               |S )Nc                 0    g | ]}t          |          S r   r  )rW  r  fms     rg   rZ  z+_normalize_model_select.<locals>.<listcomp>  s#    CCC72s++CCCri   )
r-  r>  r.  r0  re   r  r  rY   r  r  )fields_or_modelsrM  r  s     @rg   _normalize_model_selectr  y  s    F  B<< 	MM"(01111J'' 	MM"..001111E"" 	r{ 	MMCCCCr{CCCDDDDMM"Mri   c                        e Zd Zd fd	Z fdZ fdZ fdZddZd Zd	 Z	dd
Z
ej        ej        dddfd            ZddZej        ddfdZd ZddZd Zd ZddZddZ xZS )r	  Fc                     |x| _         | _        i | _        || _        t	          |          }t          t          |                               |g|           d S rd   )rE  	_join_ctx_joins_is_defaultr  r  r	  r  )r   rE  r  r  rM  r  s        rg   r  zModelSelect.__init__  sV    &++
T^%()9::k4  ))5'6:::::ri   c                     t          t          |                                           }t          |j                  |_        |S rd   )r  r	  rd  r  r  r  s     rg   rd  zModelSelect.clone  s4    k4((..00EL))ri   c                     |s| j         s3d| _         t          |          } t          t          |           j        | S | S r   )r  r  r  r	  r  )r   r  rM  r  s      rg   r  zModelSelect.select  sJ     	<4#3 	<$D,-=>>F25d++2F;;ri   c                 j    d| _         t          |          } t          t          |           j        | S r   )r  r  r  r	  r  )r   r  rM  r  s      rg   r  zModelSelect.select_extend  s2     (115u[$''5v>>ri   Nc                 &    || j         n|| _        | S rd   )rE  r  r?  s     rg   switchzModelSelect.switch  s    '*{ri   c                     t          |          r|dfS t          |t                    r|j        r	|j        dfS t          |t                    r	|j        dfS t          |t                    r	|j        dfS dS )NTFr   )r-  re   rY   r  r  rE  r	  )r   r  s     rg   
_get_modelzModelSelect._get_model  s    C== 	$9U## 	$
 	$:u$$Z(( 	$9e##[)) 	$9e##{ri   c           	         t          |t                    }|r|p|j        }|                                }|                     |          \  }}|                     |          \  }}	|r|r|| _        |}
|r|	sst          |t                    r^|j        |u r|j        j	        |j
                 }n:|j        |u r|j        j	        |j
                 }nt          d|d|d|d          d }nt          |t                    r|}d }nd }|                     ||||          \  }}||rdnd}|	rdnd}|rBt          |t          ||                    }t          |t          |j        |                    }nAt          |t          ||                    }t          |t          |j        |                    }||k    }|s|
|s|j
        }nz|j        j
        }nm|r%|#||j        k    r|st#          d|d|d	          nEt          |t$                    r0t&          }
|p|j        }|st          |t(                    r	|p|j        }|||
fS )
Nz"on" clause Column z does not belong to z or rS  r  r  zCannot assign join alias to "zF", as this attribute is the object_id_name for the foreign-key field "r  )re   rX  r  r  r  r  r%   rN  r.  r  r  r   r8   _generate_on_clauser   rj	  r
  r  r  r  rY   r   )r   r  r  r  r   on_aliasr
  src_is_model
dest_modeldest_is_modelr  r
  fk_fieldrw  src_attr	dest_attrr#  r   s                     rg   _normalize_joinzModelSelect._normalize_join  s    b%(( 	$29DB #'//#"6"6	<$(OOD$9$9!
M 3	- 3	-!DN$K !  ]  
2v8N8N  9##(6rw?HHY$&&)/7@HH(.*,""iii*E F F F B&&  #'#;#;:x$5 $5 Hj z%1D66}&3FFF	 P!$)(D(DEEC!#wx/A8'L'LMMCC!#wx'B'BCCC!$0BI(N(NOOCSj 	N'
'#=DD%+0DD Nh2H333J3 j=ATT888"M N N N f%% 	-K&4;D -JtU33 -,t}D+&&ri   c                    |j         }dx}||j        v r|j        |         }n||j        v r|j        |         }d|s|dS t          d|d|d          .t	          t
                    rj        nfd|D             }t          |          dk    r
|d	         fS |6|D ]}|j        |j         j        k    r|fc S t          d
|d|d          d t	          |t                    r|j
        |j        }	}t          |          }
t	          |t                    r%t	          |t
                    r|j        n|}||
v r|n9t	          |	t                    r$t	          |	t
                    r|	j        n|	}||
v r|dfS )NFTr   z#Unable to find foreign key between z and z,. Please specify an explicit join condition.c                 2    g | ]}|u sr|j         u |S r   )rj	  )rW  r  rw  r  r
  s     rg   rZ  z3ModelSelect._generate_on_clause.<locals>.<listcomp>	  sC     D D Dqv++$ &)*)@)@ )@)@)@ri   r   r   z"More than one foreign key between z*. Please specify which you are joining on.)r.  r
  r  r  re   r  rN  r   r  r  r#  r   r]  r8   )r   r  r  r
  r  rI  r  r  r#  r   fk_setlhs_frhs_frw  r  s      `         @@rg   r  zModelSelect._generate_on_clause  s(   y!&&
Y 4?""-IIT(((+D1IJ 	D~"{*!cc444) * * * ! )38Z(H(H $hnn# D D D D D DI D D DI y>>QQ<++:   * *7djo--z>))) . *!cc444) * * * b*%% 	%vrvC ^^F#u%% %%/Z%@%@I		cF??$HC'' %%/Z%@%@I		cF??$Hri   c                    || j         n|}|t          j        k    s|t          j        k    rd}n|t          j        k    r^|                     ||||          \  }}}|r?| j                            |g            | j        |                             ||||f           n|t          d          | j
        st          d          | j
                                        }| j
                            t          ||||                     d S )NTz)Cannot specify on clause with cross join.r  )r  rE   r3  r;  r9  r  r  r8  r  r  r  r  r  )r   r  r  r  r  r   r  r  s           rg   rV  zModelSelect.join3  s    #dnn$$	T5F(F(FBB$*$$$($8$8dB$M$M!Bk N&&sB///C ''t[)(LMMM^HIII 	75666""$$tD$	2>>?????ri   c                 H    |                      |t          j        |||          S rd   r  )r   r  r  r  r   s        rg   r  zModelSelect.left_outer_joinG  s    yytC>>>ri   c                 4    |                      |||||          S rd   rU  )r   r  r  r  r  r   s         rg   	join_fromzModelSelect.join_fromJ  s    yyy"c4888ri   c                     t          | j                  dk    r(| j        s!t          || j        | j        | j                  S t          || j        | j        | j        | j                  S r  )r   r  r  r  rE  r~  ModelCursorWrapperr  s     rg   r  z%ModelSelect._get_model_cursor_wrapperM  sj    t1$$T[$+FDJ,0OTZI I I!&$*do"&/4;@ @ 	@ri   c                     | j         }| j                            |g           D ]\  }}}}||k    r| c S  |                     |          j        |fd|i|                    |          S )Nr  )r  r  r  r  rV  )	r   lmrmr  join_kwargsjoin_ctxr  rw  r  s	            rg   ensure_joinzModelSelect.ensure_joinT  s    >'+{r2'>'> 	 	#D![!rzz #t{{2#B==2===DDXNNNri   c                 V   g }g }t           t          f}t          |                                          D ]q\  }}| j        }d|v rJ|                    dd          d         t          v r'|                    dd          \  }}t          |         }n|t          d         }nt          d         }d|vrt          ||          }	n|                    d          D ]}
| j	        
                    |d          D ]S\  }}}}t          ||
d           }	n# t          $ r Y nw xY w||
k    s t          |t                    r|j        |
k    r|} n?Tt          ||
          }	|,t          |	|          r|	j        }|                    |	           |                     ||	|                     s||fS )Nr
  r   r  r  r   )r<   rp	  r  r  rE  rr  r2   r   r   r  r  r,  re   r  r  rf	  r  )r   qdictr  joinsfksr  rn   r  r  r  piecer  r   rw  s                 rg   convert_dict_to_nodez ModelSelect.convert_dict_to_node[  s   0 // 	0 	0JC:Ds{{szz$2215CC**T1--R^%%3 %T3//

 YYt__ 5 5E,0KOOD",E,E 5 5(dAq*1$t*D*DZZ(...$$.5==Zj-I-I=-1Z5-@-@#'D!E%,T5%9%9
 ,J1L1L,#-#7D!LL444LLJ..////e|s   :D
D	D	c                    |r4|r2t          t          j        d |D                       t          di |z  }nh|r4t          t          j        d |D                       t	                      z  }n2|rt          di |t	                      z  }n|                                 S t          j        |g          }g }t                      }|r|	                                }t          |t                    s-d|j        fd|j        ffD ]\  }}	t          |	t                    r|                     |	j                  \  }
}|D ]0}||vr*|                    |           |                    |           1t          t          j        |
          }|	j        rt'          |          }t)          |||           |                    |	           ||r|s|j        }|                                 }
|D ]i}t          |t*                    r|j        |j        }}|}n*t          |t0                    r|j        |j        }}|j        }|
                    |||          }
j|
                    |          S )Nc                 6    g | ]}|                                 S r   rk  rW  r  s     rg   rZ  z&ModelSelect.filter.<locals>.<listcomp>       -F-F-FAaggii-F-F-Fri   c                 6    g | ]}|                                 S r   rk  r  s     rg   rZ  z&ModelSelect.filter.<locals>.<listcomp>  r  ri   r#  r   r   )r
   r  r  r5   rT  rd  rI	  r  r]  r  re   r  r#  r   r  rB  r  r  r  rm  r   r<   rE  rf	  rp	  rN  r  rB  )r   r  r  dq_noder"  dq_joins
seen_joinsr  sider  rB  r  rV  r  rN  r  r  	field_objs                     rg   rC  zModelSelect.filter~  s    		 F 		 hm-F-F-F-F-FGG||F||$GG 	 hm-F-F-F-F-FGG!||$GG 	 ll6llZ\\1GG::<< wi((UU
 	$99;;DdJ// !& 1E483DE $ $eeR(( $#'#<#<U[#I#ILE5 % 1 1z11$OOD111&NN4000!'u!=!=J~ 9%,Z%8%8
D$
3333HHUOOOO%  	$(  	"6 	"kG

 	9 	9E%11 (eoB!		E?33 (eoB!K	%%b"i88EE{{7###ri   Tc                 6     | j         j        j        || |fi |S rd   )rE  r  rB  )r   r  r:  rI  s       rg   r/  zModelSelect.create_table  s&    1tz!1$dKKdKKKri   c                     | j         rQ|rOt          | j                  dk    r7| j        j        j        dur$|                    | j        j        j                  S |                    t          | j                            S r	  )r  r   r~  rE  r.  r  r0  r:  r  s      rg   r  zModelSelect.__sql_selection__  sq     	9 	9DO0D0Dq0H0H:'u44774:+7888ww}T_55666ri   r  rd   r  r  rt  )r   r   r   r  rd  r  r  r  r  r  r  rf  rM  rE   r4  rV  r  r  r  r  r  rC  r/  r  r  r  s   @rg   r	  r	    s       ; ; ; ; ; ;    
    ? ? ? ? ?
   	 	 	A' A' A'F? ? ? ?B 
Y#':$Dt @ @ @ Y@&? ? ? ? .2ZDt 9 9 9 9@ @ @O O O O! ! !F1$ 1$ 1$fL L L L7 7 7 7 7 7 7 7ri   r	  c                       e Zd Zd Zd ZdS )r;  c                 J    | j         j        j                            |          S rd   )rE  r.  r  rK  r?  s     rg   r,  zNoopModelSelect.__sql__  s    z(88===ri   c                      t          |          S rd   )r  r  s     rg   r  z#NoopModelSelect._get_cursor_wrapper  s    V$$$ri   N)r   r   r   r,  r  r   ri   rg   r;  r;    s2        > > >% % % % %ri   r;  c                   .     e Zd Z fdZ fdZd Z xZS )_ModelWriteQueryHelperc                 ^    || _          t          t          |           j        |g|R i | d S rd   )rE  r  r	  r  r  s       rg   r  z_ModelWriteQueryHelper.__init__  s>    
4$d++4ULTLLLVLLLLLri   c                     g }|D ]F}t          |          r |                    |j        j                   1|                    |           G t          t          |           j        | S rd   )r-  r>  r.  r0  r  r  r	  r  )r   r  r  r  r  s       rg   r  z _ModelWriteQueryHelper.returning  so     	# 	#D~~ #TZ56666T""""<u+T22<eDDri   c                 F    | j         j        j        }|j        |j        |<   d S rd   )rE  r.  r/  r   r  )r   r@  r/  s      rg   r  z'_ModelWriteQueryHelper._set_table_alias  s$    
 &#(>%   ri   )r   r   r   r  r  r  r  r  s   @rg   r	  r	    sj        M M M M ME E E E E2 2 2 2 2 2 2ri   r	  c                       e Zd ZdS )r  Nr  r   ri   rg   r  r            Dri   r  c                   B     e Zd Zej        Z fdZ fdZd Zd Z	 xZ
S )r  c                      t          t          |           j        |i | | j        L| j        j        j        =| j        j        j        j        r)| j        j                                        | _        d S d S d S d S rd   )	r  r  r  r~  rE  r.  r  r)  r'  r  s      rg   r  zModelInsert.__init__  s    )k4  )4:6:::?"tz'7'@'Lz(9 F"&*"2"C"C"E"E #"'L'LF Fri   c                 r    |r| j         t          j        | _          t          t          |           j        | S rd   )r  r  rB  r  r  r  )r   r  r  s     rg   r  zModelInsert.returning  s7    
  	'/ YDN1u[$''19==ri   c                 $    | j         j        j        S rd   )rE  r.  r  r  s    rg   r  zModelInsert.get_default_data  s    z((ri   c                 ^    | j         j        j        }| j         j        j        r
|dd          n|S r  )rE  r.  r0  r	  )r   rM  s     rg   r  zModelInsert.get_default_columns  s.    !/!Z-<Hvabbzz&Hri   )r   r   r   r  r>  r
  r  r  r  r  r  r  s   @rg   r  r    s        yF F F F F> > > > >) ) )I I I I I I Iri   r  c                       e Zd ZdS )r"  Nr  r   ri   rg   r"  r"    r  ri   r"  c                   8     e Zd Z fdZd ZddZd Zd Z xZS )r
  c                     || _         || _        |j        j        j        | _        |j        j        j        | _         t          t          |           j
        ||fg|R i | d S rd   )	_instance	_accessorr
  rj	  r  	_src_attrr
  
_dest_attrr  r
  r  )r   r  accessorr  r  r  r  s         rg   r  zManyToManyQuery.__init__  sg    !!!27"*49-ot$$-cC6KDKKKFKKKKKri   c                 Z     t          |d         t                    r fd|D             S |S )Nr   c                 :    g | ]}t          |j                  S r   )r   r  r
  s     rg   rZ  z,ManyToManyQuery._id_list.<locals>.<listcomp>  s%    NNNcGC11NNNri   )re   rG   )r   model_or_id_lists   ` rg   _id_listzManyToManyQuery._id_list  s=    &q)511 	ONNNN=MNNNNri   Fc                 6   |r|                                   | j        t          | j        | j                  t          |t                    ri|                    t                    j	        j
                  }j                            j        j	        g|                                           d S t          |          }|sd S fd|                     |          D             }j                            |                                           d S )N)rM  rB  c                 D    g | ]}j         j        j        j        |iS r   )r
  r  r
  )rW  rel_idr  r
  s     rg   rZ  z'ManyToManyQuery.add.<locals>.<listcomp>  sB     4 4 4  $f %v/ 4 4 4ri   )r  r  r   r  r  re   rV  r  r_   r
  rj	  r
  r  r
  r  rd  r  r  )r   rn   r
  rB  insertsr  r
  s        @@rg   r  zManyToManyQuery.add  s$    	JJLLL>88e[)) 	BMMf *, ,E ".. )9: /  $WYYYYY ''E &&4 4 4 4 4 #mmE224 4 4G "..w77??AAAAAri   c                    t          | j        | j                  }t          |t                    rt          |j        | j                  }|                    |          }| j        j	        
                                                    | j        j        |z  | j        j        |k    z                                            S t          |          }|sd S | j        j	        
                                                    | j        j        |                     |          z  | j        j        |k    z                                            S rd   )r   r  r  re   rV  rE  r  r  r  r
  r  rB  r
  r
  r  rd  r  )r   rn   r
  r  r  s        rg   r  zManyToManyQuery.remove  s   88e[)) 	 U[$/::F}}V,,HN0VXXU/8;.&8:; ; WYY  !''E N0VXXU/4==3G3GG.&8:; ; WYY ri   c                     t          | j        | j                  }| j        j                                                            | j        j        |k                                              S rd   )	r   r  r  r  r
  r  rB  r
  r  )r   r
  s     rg   r  zManyToManyQuery.clear3  sK    88,t~,677	ri   r  )	r   r   r   r  r  r  r  r  r  r  s   @rg   r
  r
    s        L L L L L     
B B B B.     ,      ri   r
  c                       fd}|S )Nc                 N    	  |           S # t           t          f$ r | cY S w xY wrd   )r  r  )rn   	conv_funcs    rg   validatez#safe_python_value.<locals>.validate<  sA    	9U###:& 	 	 	LLL	s   
 $$r   )r(  r)  s   ` rg   safe_python_valuer*  ;  s#        
 Ori   c                   *     e Zd Z fdZd Zd Z xZS )BaseModelCursorWrapperc                 x    t          t          |                               |           || _        |pg | _        d S rd   )r  r,  r  rE  r  )r   r  rE  r  r  s       rg   r  zBaseModelCursorWrapper.__init__E  s8    $d++44V<<<
mri   c                 |   | j         j        j        }| j         j        j        }| j        j        }t          | j        j                  | _        g | _        d g| j        z  x| _	        }d g| j        z  x| _
        }t          |          D ]Q\  }}|d         x}}	|                    d          }
|
dk    r||
dz   d          }|                    d          }| j                            |           	 | j        |         }|                                }n!# t"          $ r ||v r||         x}}nY Y nw xY w|                                }|r
|	| j        |<   t'          |t(                    r)|j        r
|j        ||<   |||<   |s|j        | j        |<   	t'          |t0                    r|j        r|j        ||<   1t'          |t4                    r|j        r|j        |j        ||<   `|j        rt'          |j        d         t:                    r|j        d                                         }t'          |t<                    r"|j        d         }|                     |          }t'          |t(                    rtC          |j                  ||<   ||v rB|j        r||         j        ||<   t'          |tD                    r|j#        |k    r||         ||<   Sg | _$        g | _%        tM          | j                  D ]?}||         | j%                            |           %| j$                            |           @d S )Nr   rS  rp  r   z()"`)'rE  r.  r  r/  r  rA	  r   rB	  r  
convertersrM  r
  rfindr  r  r  rr  rx  rp  re   r8   rm  r=  r  rT  rV  r2  r;  r8  rf  r6   r  r  r*  r%   rN  
no_convertconvertr  )r   r  r/  rA	  r/  rM  r  description_itemr  orig_column	dot_indexr  rD  rp  rm  r[  r  s                    rg   r  z!BaseModelCursorWrapper.initializeJ  sx   :#,
 &k-011
(,v
'::* $v
22f%.{%;%; =	3 =	3!C!#3A#66F[
 S))IB	A/\\&))FL'''
);s+  ((    X%%&.v&66HttH  $t  ((**H 0$/S!
 $&& 3# 8&*&7JsO"s 2(,	DL%D*-- 3(2E 3"*"5
3D(++ 3 3%1&*&8JsOO^ P
4>!3Dd(K(K P !N1-4466E!%00 3${2 (T 2 2!%// P*;E<N*O*O
38##< D&.v&6&CJsOdF++ 3u0D0D"*6"2F3Ktz"" 	* 	*A!}(##A&&&&&&q))))		* 	*s   /DD/.D/c                     t           rd   rf  r/	  s     rg   r+	  z"BaseModelCursorWrapper.process_row  rh  ri   rS	  r  s   @rg   r,  r,  D  sZ        $ $ $ $ $
O* O* O*b" " " " " " "ri   r,  c                   $     e Zd Z fdZd Z xZS )r  c                     t          t          |                                            |                     | j        d          | _        d S )NFr?	  )r  r  r  r8	  r  unique_columnsr/  s    rg   r  z!ModelDictCursorWrapper.initialize  sK    $d++66888"11L# 2 % %ri   c                     i }| j         }| j        D ]}||         |||         <   | j        D ]'} | j        |         ||                   |||         <   (|S rd   )r9  r1  r2  r/  )r   r7  r  r  r  s        rg   r+	  z"ModelDictCursorWrapper.process_row  sq    % 	( 	(A!$QF71: 	< 	<A!3!3CF!;!;F71:ri   )r   r   r   r  r+	  r  r  s   @rg   r  r    sG        % % % % %      ri   r  c                       e Zd ZeZd ZdS )r  c                 |    | j         |                     fdt          | j                  D                       S )Nc                 ^    g | ])}|          |         |                   n|         *S rd   r   )rW  r  r/  r7  s     rg   rZ  z7ModelTupleCursorWrapper.process_row.<locals>.<listcomp>  sM     !( !( !( '1m&?]Z]3q6"""SV!( !( !(ri   )r/  r  r  rB	  )r   r7  r/  s    `@rg   r+	  z#ModelTupleCursorWrapper.process_row  sX    _
 !( !( !( !( !(4:&&!( !( !( ) ) 	)ri   N)r   r   r   rb  r  r+	  r   ri   rg   r  r    s(        K) ) ) ) )ri   r  c                        e Zd Z fdZ xZS )r  c                      t          t                                                                            j                  }t          j        d|           _         fd _        d S )NrH	  c                      j         |  S rd   )impl)r7  r   s    rg   rh   z9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    yty# ri   )	r  r  r  r8	  r  rI	  rJ	  rA  r  )r   r6	  r  s   ` rg   r  z'ModelNamedTupleCursorWrapper.initialize  sa    *D11<<>>>))$,77*5+>>	6666ri   )r   r   r   r  r  r  s   @rg   r  r    s8        7 7 7 7 7 7 7 7 7ri   r  c                   .     e Zd Z fdZ fdZd Z xZS )r  c                     || _         t          |          | _        t          t          |                               |||           d S rd   )r  r-  r  r  r  )r   r  rE  r  r  r  s        rg   r  z!ModelObjectCursorWrapper.__init__  sC    & --&--66vufMMMMMri   c                     t          t          |                                            |                     | j                  | _        d S rd   )r  r  r  r8	  r  r6	  r/  s    rg   r  z#ModelObjectCursorWrapper.initialize  s>    &--88:::..t|<<ri   c                 $   i }| j         }| j        D ]}||         |||         <   | j        D ]'} | j        |         ||                   |||         <   (| j        r* | j        dddi|}|j                                         |S  | j        di |S )Nr  r   r   )r6	  r1  r2  r/  r-  r  ra	  r  )r   r7  r  r  r  r  s         rg   r+	  z$ModelObjectCursorWrapper.process_row  s    " 	( 	(A!$QF71: 	< 	<A!3!3CF!;!;F71:= 	."$">>!>v>>CJJ#4#--f---ri   rS	  r  s   @rg   r  r    se        N N N N N
= = = = =. . . . . . .ri   r  c                   0     e Zd Zd fd	Z fdZd Z xZS )r  Fc                     t          t          |                               |||           || _        || _        || _        d S rd   )r  r  r  r  r  r  )r   r  rE  r  r  r  r  r  s          rg   r  zModelCursorWrapper.__init__  s?     $''00GGG"



ri   c                 .	    t          t                                                      t          d  j        D                       } j        }d  j        D              j        r j        t          dfi _
        n j         j        dfi _
        i  _        g  _        t          j         j                  }t                      }|r)|                                }t#          |t$                    r5|                    |j                   |                    |j                   a| j        vrkt#          |t                    } j        |         D ]\  }}}	}
 j        rt          }	| j
        vr}|	t/          |	          f j
        |<    j                            ||||p j        |
|
                    d          f           |                    |           |                    |           |)|D ]M}| j
        vrBt/          |          r|df j
        |<   't#          |t4                    r|j        df j
        |<   N j        D ]\  }}}}}}||v o||v p||v  j        |<   g  _        t9          |          D ]\  }} j        } j        |         }|%t#          |t:                    r|j        }n|j        }nt#          |t>                    rJ|j          j
        vr4tC          |"                                d|j         d|j         d          |j         }nEt#          |tF                    r|"                                }t#          |tH                    r|j        } j                            |           tK           fd	tM           j'                  D                        _(        d
  j
        )                                D              _*        i  _+         j        D ]\  }}}}}
}| j        vrt                      }t          j        |g          }|r^|                                }| j        v r? j        |         D ]1\  }}}}|                    |           |                    |           2|^tY          |           j+        |<   d S )Nc                      g | ]}||j         S rd   r  r  s     rg   rZ  z1ModelCursorWrapper.initialize.<locals>.<listcomp>  s)     2 2 2E$0 "K000ri   c                 ,    g | ]}t          |          S r   )ru  r9  s     rg   rZ  z1ModelCursorWrapper.initialize.<locals>.<listcomp>  s     <<<!?1%%<<<ri   FTOUTERz specifies bind-to z, but z# is not among the selected sources.c              3   \   K   | ]&}|j         |         |         j        |         fV  'd S rd   )column_keysr/  )rW  r  r  r   s     rg   rz  z0ModelCursorWrapper.initialize.<locals>.<genexpr>8   sS       ( (  #WQZ1CD( ( ( ( ( (ri   c                 $    g | ]\  }\  }}|||fS r   r   )rW  r  	construct	_is_models       rg   rZ  z1ModelCursorWrapper.initialize.<locals>.<listcomp>=   s>     "P "P "P++i )Y'"P "P "Pri   )-r  r  r  r]  rM  r  r  r  rE  r  key_to_constructorsrc_is_destsrc_to_destrI	  r  r  r  re   r  r  r#  r   r  r-  r  r  r  rM  r
  r  rN  r]  r  r  rr  rf  r%   rb  r  rB	  	_row_specr  _constructor_list_dest_reachable	frozenset)r   selected_srcr  r  destsr  r  r  r   r  r  r  rw  r  r  rD  rN  	reachabler"  _keyr  r  s   `                   @rg   r  zModelCursorWrapper.initialize  sM    $''22444 2 2T[ 2 2 2 3 3<<t|<<<: 	G'+zD%=&AD##'+zDJ3E&FD#!$.11 	&==??D$%% TX&&&TX&&&4:%% t,,G59Z5E & &1T;	: '"&Kd5554?4<[4I4I4KD+C0 $++-4:!!**733-5 6 6 6 IIcNNNLL%%%;  	&@   	E 	EC$111C== E47;D+C00Z00 E47It3DD+C0 &*%5 	N 	N!CD!Q$'5L %Ndl6J 7M9<9L S!! "6** 	) 	)IC*CK$E eZ00 &,CC+CCD&)) 
&9D$;;;$&*kkmmmmTYYY			&K L L L idD)) );;==DdF++ &+C##C((((  ( ( ( ( (4:&&( ( ( ( (
"P "P/3/F/L/L/N/N"P "P "P
  "8<8H 	> 	>4S$gy!4:%%I!4&))A 'yy{{4:%%)-D)9 ' 'aA!d+++  ' *39)=)=D &&	> 	>ri   c                 v   i }g }| j         D ]@\  }}}|r+ |d          ||<   |                    ||                    3 |            ||<   A|| j                 }t                      }| j        D ]\  }	}}
}|                    ||          }| j        |	         }
||	         }||                    |           | ||          }t          |t                    r|||
<   qt          ||
|           | j        D ]\  }}}}}}|                    |          }|                    |          }|||vr:d}||vr&|| j        v rt          | j        |         |z            }||vr|s|rd }nr||vr||vr|r}|r|||<   t          |||           |D ]}|j                                         || j                 S )NT)r  F)rU  r  rE  r]  rT  r  r  r  re   r  r   rS  rV  r  ra	  r  )r   r7  r  r,  r  r  rP  default_instanceset_keysr  r  r6  r  rn   r  r   r  r  rw  is_outerjoined_instanceassigns                         rg   r+	  zModelCursorWrapper.process_rowQ   sZ   
+/+A 	- 	-'Ci -*{$???!!'#,////*{}}"4:.55+/> 	1 	1'Cfi {{3(899H\#&FHE S!!!$!	%(((D)) 1#(  &%0000 8<7G 	9 	93S$gq({{3''H%kk$//O&4w+>+> F8##0D(D(Dd2488CDD 8##F# &*OO (""t8';';'; 9!0$8888 # 	$ 	$HO!!####tz""ri   r  rS	  r  s   @rg   r  r    sk             k> k> k> k> k>Z?# ?# ?# ?# ?# ?# ?#ri   r  c                   0     e Zd Z	 	 d fd	Zd Zd Z xZS )PrefetchQueryNc           	         |rT|r|d |D             }d |D             }n|d |D             }d |D             }t          t          ||                    }|j        }t          t          |                               | ||||||          S )Nc                     g | ]	}|j         
S r   r  r  s     rg   rZ  z)PrefetchQuery.__new__.<locals>.<listcomp>   s    !B!B!B%%+!B!B!Bri   c                 &    g | ]}|j         j        S r   )rj	  r  r  s     rg   rZ  z)PrefetchQuery.__new__.<locals>.<listcomp>   s    $N$N$NeU_%9$N$N$Nri   c                     g | ]	}|j         
S r   )rf	  r  s     rg   rZ  z)PrefetchQuery.__new__.<locals>.<listcomp>   s    !F!F!Fe%/!F!F!Fri   c                     g | ]	}|j         
S r   r  r  s     rg   rZ  z)PrefetchQuery.__new__.<locals>.<listcomp>   s    $D$D$DEUZ$D$D$Dri   )ra  r  rE  r  rc  r  )	r  rB  rM  rw  
rel_modelsfield_to_namerE  foreign_key_attrsr  s	           rg   r  zPrefetchQuery.__new__   s     		A E%!B!B6!B!B!BJ$N$Nv$N$N$N!!%!F!Fv!F!F!FJ$D$DV$D$D$D! V->!?!?@@M]C((00
JuN N 	Nri   c                    | j         rB| j        D ]8}|j        |j                 }||f}||v rt	          ||j        ||                    9d S | j        D ]{\  }}|j        |j        j                 }||f}|                    |g           }|D ],}t	          |||           |j        	                                 -t	          ||j
        |           |d S rd   )rw  rM  r_	  r  r   rj  rj	  r  ra	  r  r
  )	r   r  id_maprN  
identifierr  attnamerel_instancesr&  s	            rg   populate_instancezPrefetchQuery.populate_instance   s   ? 	@ ? ?%.uz:
j)&==Hej&+>>>	? ? #'"4 @ @w%.u/CD
j) &

3 3 3) ( (DD'8444K%%''''%-????@ @ri   c                     | j         D ]l\  }}|j                            |j        |                   }||f}| j        r|||<   ;|                    |g            ||                             |           md S rd   )rj  rj	  r=  r_	  rw  r8  r  )r   r  rm  rN  ro  identityr  s          rg   store_instancezPrefetchQuery.store_instance   s    "0 	- 	-NE733H4Eg4NOOH(#C -&s!!#r***s""8,,,,	- 	-ri   )NNNNN)r   r   r   r  rq  rt  r  r  s   @rg   rc  rc     sj        EI*.N N N N N N @ @ @"- - - - - - -ri   rc  _PrefetchQuery)rB  rM  rw  ri  rj  rE  c           	         t          |           g}t          |          D ];\  }}t          |t                    r|\  }}nd }t          |t                    st          |          st          |t                    r|                                }|j        t          t          |dz                       D ]}d x}}	||         }
|
j        |
j        x}t          |t                    r|j        }j        j                            |g           }|rfd|D             }fd|D             }nj        j                            |          }	|s|	r|u s| n|rd|z  nd}t!          d||          |r|fnd }|rF|t"          j        k    rJt'          t(          j        fdt-          ||          D                       }|                    |          }n|t"          j        k    rg }t3                      }t-          ||          D ]K\  }}|                    t7          j        |j                  |k               |                    |           L|                                                      j        | t'          t(          j        |                    }|                    t          ||d	|                     |	rg }g }|	D ]H}t7          |j!        j"                  }t7          |j"                  }|                    ||f           I|t"          j        k    ra|D ]0\  }}|                    |                    |          z             1|                    t'          t(          j        |                    }n|t"          j        k    rg }|D ]M\  }}|                    |           t7          j        |j                  }|                    ||k               N|                                                      j        | t'          t(          j        |                    }|                    t          ||	d
|                     =|S )Nr   c                 :    g | ]}t          |j                  S r   )r   r  )rW  r  subquery_models     rg   rZ  z)prefetch_add_subquery.<locals>.<listcomp>   s%    GGGBw~rw77GGGri   c                 D    g | ]}t          |j        j                  S r   )r   rj	  r  )rW  r  last_objs     rg   rZ  z)prefetch_add_subquery.<locals>.<listcomp>   s(    KKKwx):;;KKKri   z	 using %sr)  z-Error: unable to find foreign key for query: c                 F    g | ]\  }}|                     |          z  S r   )r  )rW  r  r  
last_querys      rg   rZ  z)prefetch_add_subquery.<locals>.<listcomp>   s@     -3 -3 -3 R :,,R000-3 -3 -3ri   )r  FT)#rc  r
  re   rb  r2  r-  r  r  rE  r  r  rB  r.  r
  r  r  r   rP   rC  r
   r  r<  r  rB  rE   r]  r  r   rf   r  r  r  rV  rj	  r  )r?  r  prefetch_typefixed_queriesr  r  target_modelr 
  r  r  fixed
last_modelrelsr  tgt_errr  r  
select_pksr  r  rM  r
  rj	  r  
select_fksr  rz  r|  rx  s                             @@@rg   prefetch_add_subqueryr     s   "2&&'M ,, FP FP8h&& 	 %-"HllL(E** 	)x/A/A 	)h
++	)((H!%A,,'' 	F 	FA!!C(!!$EJ$)K/J*j11 .'-
!'266z2FFD OGGGG$GGGKKKKdKKK)/>BB:NN x |x'?'?'3'; 5AHkL00bG .2:(GG"E F F F #/8D %	P 333hl -3 -3 -3 -3$'SMM-3 -3 -3 4 4 $>>$//-"444 UU
!#smm ' 'FBKK
bn E E KLLLNN2&&&&#,,..33%J%z2hlD11 4 3 3   xeT!J!JKKKK 	PDF# 5 5#NG4E4JKK	"8W\::y(34444 333+1 J J'IxKK	Z->->x-H-H HIIII#>>&t*D*DEE-"444
+1 5 5'Ix%%h///$Z\83GHHFKK	V 34444#,,..33%J%z2hlD11 4 3 3   x4!N!NOOOri   c                    |s| S |                     dt          j                  }|rt          d|z            t	          | ||          }i }i }t          |          D ]}|j        }|j        r;|j        D ]3}	|	                    |	g            ||	         
                    |           4|	                    |i            ||         }
t          |                    |                    }|j        D ]M}|j        r|                    ||
           |r,||         D ]#}|                    |||j                            $Nt!          |j                  S )Nr}  zUnrecognized arguments: %s)r  rP   rC  r  r  r  rE  rM  ri  r8  r  r  r  rB  rt  rq  ra  )r?  r  r  r}  r~  depsrel_mappqquery_modelrf	  rm  has_relationsr  r  s                 rg   rO   rO   !  s    	JJ0CDDM @5>???)"j-HHMDG}%% E Eh9 	.] . .	""9b111	"))"----R(((k"W[[5566 	E 	EHy 4!!(F333 E";/ E EC))(DODDDD	E >>ri   rd   r   r  r  )rU  (T  bisectr   r   collections.abcr   r   
contextlibr   rM  r	   	functoolsr
   r   inspectr   rr
  rI	  rw   r	  rY  r|  r  r  r   r
  r
  sysr  r   typesr	  r   	pysqlite3r   pysq3ImportErrorrw  sqlite_version_infopsycopg2cffir   registerr1  r   r:  psycopg2.extrasr   pg_register_uuidr   r+  rT  
psycopg.pqr   psycopg.types.jsonrQ  r   rR  r  pymysqlr  MySQLdb__version____all__	getLoggerr  
addHandlerNullHandlerr  ra  rb  rW  r]  r  GeneratorTyper  rp   version_infor}   r   register_adapterr	  r]  r   r   r   r   register_converterrr  r   r   r   r  r   r   r   r   r  r   r{  r  rK   r  r  ler  ger  lshiftr2   r  rE   r  rP   r  rI  rK  rM  rO  r  r  r  compileri  rk  rq  rH  rK  rQ  r\  r-  rd  rg  rn  ru  r$   r  rR   r*   r  r  rJ	  r  r
  r'   rV  r:  rf  rx  r  r  r  r  r  r  r4  r  r  r  rY   r  r`   r  rT  r%   r  r  r  rX  r]  rm  r  r  r_   r  r   r!   r  rf  rj  r  r  r6   rW   r#   r/   r2  r;   ra   rS  r  r    r  r{  r:  r5  r  r  r7   r5   r]   rS   r  r  r  r  r)  r2  rT  rV  r_  rR  rV   r  r  r  r  r?   rH   rR  r,  r`  r>   r)   r+   rA   rB   rC   rJ   rL   rQ   rn  
EXCEPTIONSr  r~  r  r  r  r  localr  r  r  r(   rZ  rX   r  r$  rO  rM   rI   r  r  r  r  r  r  r  r  r&	  r[	  rd	  rp	  ru	  r8   r   r@   r   rU   r   r   r=   rN   r:   r4   r.   r	  r"   r9   rZ   r	  r   r   r	  r'
  r   r^   r   r;
  r   r  rF
  r-   r,   r[   rb
  r\   rD   r   r   r<   r0   r1   r
  r
  rF   r
  r&   r  rT   r  r  r3   r  r  rI  rG   r  r  r.  r  r  r  r  r  r	  r;  r	  r  r  r"  r
  r*  r,  r  r  r  r  r  rc  r  rO   r   ri   rg   <module>r     s)               $ $ $ $ $ $ # # # # # # % % % % % %                                       				   



        )))))))   EEENNN  *g.III	    GGG	######FO 	 	 	D	OOO444444AAAAAA000000   Hxxx*NNN,,,,,,3333335555555 * * *%))G)h*       	 N N N` 
	8	$	$   %'%'' ( ( ( .-	UIsE53FG    g(9%FF' ' '' ' '  #GW_c222GX]C000GX]C000
7""888KKK		J 		J 		J 	! !24DEEE""6<888"";0ABBB 4" IJJ    !!# #  -1133 !4 X !4 X $ $ $; ; ;/ / /) ) )H H H H Ht H H H 688 X   t 	 		
 	 	 C 3 	 	 s s 	 s 	  t!" t#$ 8%& t'( 8)* 
+, '-. I/0 812 I34 456 S7> X
+
+;
+;
+
/
.
.66224466   
" 	 	 	 			H	 8	 
		
 
	 
	 
	 Z	 I	 B	 6	 &	 			 Z	 
	  
!	" 
#	$ &%	& I'	. x
 "	 
$	& 	& 	& h
	

   
	
   	     2:233 2:344  
455 "
$ ) ) ) )  ? ? ?
 98G G GC C C9 9 9           &; &; &; &; &;F &; &; &;R    E   0 $ # # # #f # # #*! *! *! *! *!6 *! *! *!Z, , , , ,"K"8 .: ; ; , , ,.  h0 h0 h0 h0 h0f h0 h0 h0V: : :(  .    6   D    F       V       f   B B B B B4 B B B/8 /8 /8 /8 /8T /8 /8 /8d$ $ $ $ $f $ $ $N   zE    
3 
3 
3 
3 
3 
3 
3 
38 8 8 8 8 8 8 82\* \* \* \* \*OY \* \* \*~    9   ,         )      F> > > > >/6 > > >BK K K K K K K K\P P P P PZ P P P,
" 
" 
" 
" 
"* 
" 
" 
"' ' ' ' 'F ' ' '    V   $0 $0 $0 $0 $0K $0 $0 $0N" " " " "[ " " "2 2 2 2 2k 2 2 2$ $ $ $ $6 $ $ $2 2 2 2 2\; 2 2 25 5 5 5 5J 5 5 5.& & & & &K & & &1 1 1 1
2 
2 
2 
2 
2; 
2 
2 
2    {   D3 3 3 34 4 4 436 36 36 36 36 36 36 36l6 6 6 6 6z 6 6 68 8 8 8 8Z 8 8 8(
 
 
 
 
* 
 
 
> > > >% % %C C C C Cz C C CL XdDk k k k kT k k k\	: 	: 	: 	: 	:$ 	: 	: 	:& & & & &$ & & &. . . . .: . . .(       @    z   6! ! !' ' '       / / / / / / / / :j!!         	'&& & & & &[ & & &  7% 7% 7% 7% 7% 7% 7% 7%t  d% d% d% d% d% d% d% d%N$ $ $ $ $y $ $ $(K K K K KI K K K\       %   ,> > > > >&+ > > >H@% @% @% @% @%* @% @% @%F}% }% }% }% }%Z }% }% }%@1 1 1 1 1% 1 1 1h/- /- /- /- /-[ /- /- /-d\A \A \A \A \A[ \A \A \A~- - - - -[ - - -K K K K KD K K K\&P &P &P &P &P &P &P &PR   5 5 5 5 5i 5 5 5
 2 1 1 1 1? 1 1 1 * * * * *O * * * $ $ $ $ $ $ $ $ ) ) ) ) )] ) ) ) + + + + +_ + + + ( ( ( ( (M ( ( ( , , , , , , , , + + + + +} + + + + + + + +} + + +I I I I Iv I I I" &"$$"*(( 0)%' '
 )(44  '&13 3 ('DF F ,[+46 6  &{%noFF    v   $ @ ? ? ? ?' ? ? ?8 8 8 8 8 8 8 8       x x x x x( x x xv& & &D4 D4 D4 D4 D4X D4 D4 D4N    &   $= = = = =) = = =@5 5 5 5 5) 5 5 5po o o o o o o od_1 _1 _1 _1 _1H _1 _1 _1J5 5 5 5 5f 5 5 50@ @ @ @ @f @ @ @8+ + + + +6 + + +\$ $ $ $ $ $ $ $T_ _ _ _ _F _ _ _D       & & & & &m & & &, , , , ,+ , , ,     V   .' ' ' ' 'F ' ' '&' ' ' ' ' ' ' 'D    f   2 2 2 2 2v 2 2 2&r r r r rJ r r rj    u       5       l          9 9 9 9 9 9 9 9    9   6 6 6 6 6I 6 6 6? ? ? ? ?i ? ? ?           *   / / / / /5 / / />	O 	O 	O 	O 	O5 	O 	O 	O= = = = = = = =    Y          O O O O O O O O*    !5   "&+ &+ &+ &+ &+|_ &+ &+ &+RY# Y# Y# Y# Y#f Y# Y# Y#xB B B B B- B B B(< < < < <) < < <? ? ? ? ? ? ? ?.E E E E Ei E E E4  
     C C C C C% C C C, , , , ,' , , ,:& & & & &# & & &6, , , , ,# , , ,4  X6 X6 X6 X6 X6_ X6 X6 X6v< < < < <o < < <    5   
       HI HI HI HI HIe HI HI HIV ;  ;  ;  ;  ;  ;  ;  ;F
6 
6 
6 
6 
66 
6 
6 
6       
). ). ). ). ).m ). ). ).XO" O" O" O" O"i O" O" O"dE E E E E9 E E E06( 6( 6( 6( 6(9 6( 6( 6(r    v   Jt" t" t" t" t"F t" t" t"nc c c c cv c c cL		 	 	 	 	H 	 	 	 $ # # # #9 # # #~) ~) ~) ~) ~) ~) ~) ~)B2 2 2 2 2& 2 2 2*PH PH PH PH PHNN9d++ PH PH PHf7< 7< 7< 7< 7< 7< 7< 7<tD D D D D D D D2  .#L #L #L #L #L #L #L #LLE E E E E ( E E E 9" 9" 9" 9" 9"' 9" 9" 9"x: : : : :0C : : :  r7 r7 r7 r7 r7/6 r7 r7 r7j	% % % % %k % % %2 2 2 2 2. 2 2 2&	 	 	 	 	(& 	 	 	I I I I I(& I I I4	 	 	 	 	(& 	 	 	? ? ? ? ?k ? ? ?D  X" X" X" X" X". X" X" X"v    3   ") ) ) ) )4 ) ) )7 7 7 7 7#: 7 7 7. . . . .5 . . .6s# s# s# s# s#/ s# s# s#l+- +- +- +- +-*K*+; >M N N +- +- +-\J J JZ    s   <B BBB* *B43B48C CC C; ;	DDD" "D0/D06D; ;EEEEEEEE