
    hM                        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mZ n# e$ r	 d dlmZ Y nw xY w	 d d	lmZ  n # e$ r 	 d d	l!mZ  n# e$ r dZ Y nw xY w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+ n# e$ r dZ+Y nw xY wn# e$ r dxZ'Z+Y nw xY w	 d dl,m-Z.  e.             n# e/$ r Y nw xY w	 d dl0m*Z1 n# e$ r dZ1Y nw xY wdZ2	 d dl3Z4n # e$ r 	 d dl5Z4dZ2n# e$ r dZ4Y nw xY wY nw xY wdZ6g dZ7	 d dlm8Z8 n# e$ r  G d dej9                  Z8Y nw xY w ej:        d          Z;e;<                     e8                       ej=        d          dk    r$e>Z?e@ZAeBZCejD        ZDeEZFeGeHeIeJfZK eLd           d ZMnOd dlNZN	 d dlmOZO n# e$ r	 d dlmOZO Y nw xY wd dlmPZP d ZFe@Z?eQZAeRZCe@ZSeTZUeGeHeIeJeVfZK eWeNd          ZMejX        ZDd
dZYej=        dk     rej        jZ        ZZej        j[        Z[nd ZZd  Z[e"r e"j\        ej]        e@            e"j\        ej^        e@            e"j\        ej        e@           ej=        dk    rAd! Z_d" Z`d# Za e"j\        ej        e_            e"jb        d$e`            e"jb        d%ea           e"j#        Zcnd&Zc eJd'          Zdd(Zed)d*d+d,d-d.d'Zfef                                Zgd/egd0<   d1egd2<   d3 Zhd4 Zid5 Zj G d6 d7ek          Zl em            Zn eldi d8d8d9d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdVdWdXdYdYdZd[d\d\d]d]d^d^d_d_d`d`dadbdcddZo elejp        ejq        ejr        ejs        ejt        eju        ejv        de df dg dh di          Zw eldi djdkdldmdmdmdndndodpdqdqdrdrdsdsdtdtdudvdwdxdydxdzdkdpdpd{d{d|d|d}d{d~dnddZx elddddddddd	  	        Zy elddddd          Zz eldd          Z{dZ|dZ}dZ~dZdZd ZdZdZ ej        d          Z ej        d          ZdZemfdZd Zd Zd Zd Zd Zd Zd Z G d dem          Z G d dem          Z G d de          Z G d dem          Z G d dem          Z G d d ej        dd                    Zd Z G d dem          Zd Zd Z G d dem          Z G d dem          Z G d dem          Z G d dem          Z G d de          Z G d de          Z G d dem          Zd Zeyj        dfdZ G d de          Z G d dem          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҄ dem          Z G dԄ dem          Z G dք de          Z G d؄ de          Z G dڄ de          Z G d܄ dem          Z G dބ dee          Z G d de          Z G d de          Zd 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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 de          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 d/ d0e/          Z G d1 d2e          Z G d3 d4e          Z G d5 d6e          Z G d7 d8e          Z G d9 d:e          Z G d; d<e          Z G d= d>e          Z G d? d@e          Z G dA dBe          Z G dC dDem          ZeeeeeeeeeeeedEZ ee          Z ej        dFdG          Z ej        dHdI          Z ej        dJdK          Z ej        dLdM          Z G dN dOem          Z G dP dQeej                  Z G dR dSem          Z G dT dUem          Z G dV dWe          ZdX Z G dY dZe          Z G d[ d\e          Z G d] d^e          Z G d_ d`em          Z G da dbem          Z G dc ddem          Z  G de dfem          Z G dg dhem          Z G di dje          Z G dk dle          Z G dm dne          Z G do dpem          Z G dq drem          Z G ds dte          Z G du dvem          Z	 G dw dxem          Z
 G dy dze          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 de          Z G d dee          Z G d dem          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 dem          Z0 G d de          Z1 G dÄ dĐe          Z2 G dń dƐe1          Z3 G dǄ dȐe1          Z4 G dɄ dʐe1          Z5 G d˄ dem          Z6 G d̈́ dem          Z7 G dτ dem          Z8 G dф dҐe8          Z9 G dӄ de/          Z: G dՄ d֐e;          Z< G dׄ dem          Z= G dل d ee<e                    Z> G dۄ de          Z? G d݄ dސe          Z@d߄ ZA G d dem          ZB G d deBeզ          ZC G d deB          ZD G d deDeڦ          ZEd ZF G d deDeۦ          ZG G d deG          ZH G d deB          ZI G d deIeݦ          ZJ G d deIeަ          ZK G d deIeߦ          ZL G d deG          ZMd ZN G d de          ZO G d deO          ZP G d deP          ZQ G d deQ          ZR G d  deP          ZS G d deO          ZT G d d ej        dd                    ZUd ZVd	 ZWdS (      )bisect_left)bisect_rightcontextmanager)deepcopywraps)isclassN)Mapping)dbapi2)compat)
extensions)errors)register_uuidFTz3.18.2)K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DeferredForeignKeyDeferredThroughModel
DJANGO_MAPDoesNotExistDoubleFieldDQ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)NullHandlerc                       e Zd Zd ZdS )r\   c                     d S N )selfrecords     D/var/www/html/marketdash/venv/lib/python3.11/site-packages/peewee.pyemitzNullHandler.emit   s    D    N)__name__
__module____qualname__rd   r`   re   rc   r\   r\      s#        	 	 	 	 	re   r\   peewee   z4def reraise(tp, value, tb=None): raise tp, value, tbc                     t           j                            |            t           j                            d           d S )N
)sysstdoutwritess    rc   print_rr      s4    

re   )Callable)reducec                 ,    t          | t                    S r_   )
isinstancers   )cs    rc   <lambda>rx      s    *Q11 re   printc                 B    |j         |ur|                    |          |r_   )__traceback__with_traceback)tpvaluetbs      rc   reraiser      s)    b((&&r***re   )      c                     t           j                             | t           j        j                                      d           S )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rc   utcfromtimestampr      s3    !rh&7&;<<%%	're   c                      t           j                             t           j        j                                      d           S )Nr   )r   nowr   r   r   r`   re   rc   utcnowr      s/    !X&*++%%	're   c                 ,    |                      d          S N )	isoformatds    rc   datetime_adapterr      s    C(8(8!8re   c                 j    t          j        t          t          |                     d                     S )N   -)r   datemapintsplitr   s    rc   convert_dater      s"    HM3sAGGDMM3J3J$KKre   c           	         |                      d          \  }}t          t          |                     d                    \  }}} |j         d          }t          t          |d                              d                    \  }}}	t          |          dk    r;t          d                    |d                                                             }
nd}
t          j        ||||||	|
          S )	N    r      .r      :rj   z{:0<6.6}   )r   r   r   lenformatdecoder   )tr   timeymr   t_fullhourminutesecondusecs              rc   convert_timestampr      s    JD$#tzz$//00GAq!TZ%%F#&sF1IOOD,A,A#B#B D&&6{{a:,,VAY-=-=-?-?@@AA$Q1dFFDIIIre   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 r_   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rc   _sqlite_date_partr   	  s@    .(((( 	/+F	G	GB2{###re   c                     | t           v sJ |sd S t          |t                    }|                    t           |                    S r_   )__sqlite_date_trunc__r   r   strftimer   s      rc   _sqlite_date_truncr     sI    ///// 	/+F	G	GB;;,[9:::re   c                 :    t          j        | t                     d S r_   )warningswarnDeprecationWarningrp   s    rc   __deprecated__r     s    M!'(((((re   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r_   )KeyErrorAttributeErrorra   attrs     rc   __getattr__zattrdict.__getattr__  s:    	': 	' 	' 	' &&&	's   
 $c                     || |<   d S r_   r`   ra   r   r~   s      rc   __setattr__zattrdict.__setattr__"  s    UT


re   c                 0    |                      |           | S r_   updatera   rhss     rc   __iadd__zattrdict.__iadd__#  s    T[[---d{re   c                 N    t          |           }|                    |           |S r_   )r   r   )ra   r   r   s      rc   __add__zattrdict.__add__$  s    Aaxre   N)rf   rg   rh   r   r   r   r   r`   re   rc   r   r     s<        ' ' '
 ;:::::GGGGGre   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 r_   )
ExpressionrE   r   lrs     rc   rx   rx   P  s    z!RUA.. re   c                 8    t          | t          j        |          S r_   )r
  rE   r  r  s     rc   rx   rx   Q  s    Arw22 re   c                 8    t          | t          j        |          S r_   )r
  rE   r  r  s     rc   rx   rx   R  s    *Q!44 re   c                 8    t          | t          j        |          S r_   )r
  rE   r  r  s     rc   rx   rx   S  s    :aA66 re   )eqltltegtgteneinis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NATURALr2  LEFT_LATERALr   r         )TUPLEDICTNAMED_TUPLECONSTRUCTORMODEL)WHEREr?         z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])_metaclass_helper_c                 (     | t           |fi           S r_   )
MODEL_BASE)metabases     rc   with_metaclassrJ    s    4
TGR(((re   c                 \    |                                  }|r|                    |           |S r_   )copyr   )source	overridesmergeds      rc   
merge_dictrP    s.    [[]]F !i   Mre   c                     t          |           dk    r| d                                       S d                    fd| D                       S )Nr   r   .c                 :    g | ]}|                               S r`   join).0partquote_charss     rc   
<listcomp>zquote.<locals>.<listcomp>  s%    ===TYY{++===re   )r   rU  )pathrX  s    `rc   quoter[    sO    
4yyA~~Aw||K(((88=======>>>re   c                 J    t          |           ot          | t                    S r_   )r
   
issubclassrA   )os    rc   rx   rx     s    WQZZ8Jq%$8$8 re   c                 L    | !t          | t          t          f          r| n| fS d S r_   )rv   listtupler~   s    rc   ensure_tuplerc    s/    "54-88FuuuhF re   c                 V    | &t          | t                    r| nt          |           S d S r_   )rv   NodeEntityrb  s    rc   ensure_entityrg    s/    "5$//BuuVE]]B re   c                     t                               d|           }t                              d|                                          S )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)rq   firsts     rc   make_snake_casern    s9      1--E%0066888re   c              #      K   t                      }d t          t          |           g|z  d|iD             D ](}|d         |u r||                    |          d = |V  )d S )Nc              3   4   K   | ]}t          |          V  d S r_   )r`  )rV  gs     rc   	<genexpr>zchunked.<locals>.<genexpr>  s@       C Ca$q'' C C C C C Cre   	fillvalue)objectizip_longestiterindex)itnmarkergroups       rc   r    r      s      XXFC C<$r((a $B:@$B $B C C C  9ekk&))**+	 re   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 r_   r`   argskwargsr5   ra   s     rc   innerz1_callable_context_manager.__call__.<locals>.inner  s     + +r4*6**+ + + + + + + + + + + + + + + + + +s   r   ra   r5   r  s   `` rc   __call__z"_callable_context_manager.__call__  9    	r	+ 	+ 	+ 	+ 	+ 
	+ re   N)rf   rg   rh   r  r`   re   rc   r~  r~    s#            re   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 )rL   z;
    Create a proxy or placeholder for another object.
    obj
_callbacksc                 >    g | _         |                     d            d S r_   )r  
initializera   s    rc   __init__zProxy.__init__  s!    re   c                 >    || _         | j        D ]} ||           d S r_   r  )ra   r  callbacks      rc   r  zProxy.initialize  s3     	 	HHSMMMM	 	re   c                 :    | j                             |           |S r_   )r  append)ra   r  s     rc   attach_callbackzProxy.attach_callback  s    x(((re   c                       fd}|S )Nc                 f    | j         t          d           t          | j                   |i |S NzCannot use uninitialized Proxy.r  r   r   )ra   r  r  methods      rc   r  z Proxy.passthrough.<locals>.inner  s;    x$%FGGG,748V,,d=f===re   r`   r  r  s   ` rc   passthroughzProxy.passthrough  s#    	> 	> 	> 	> 	> re   	__enter____exit__c                 X    | j         t          d          t          | j         |          S r  r  r   s     rc   r   zProxy.__getattr__  s+    8 !BCCCtx&&&re   c                     || j         vrt          d          t          t          |                               ||          S )NzCannot set attribute on proxy.)	__slots__r   superrL   r   )ra   r   r~   	__class__s      rc   r   zProxy.__setattr__  s?    t~%% !ABBBUD!!--dE:::re   )rf   rg   rh   __doc__r  r  r  r  r  r  r  r   r   __classcell__r  s   @rc   rL   rL     s          &I    
     K((I{:&&H' ' '
; ; ; ; ; ; ; ; ;re   rL   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 r_   ConnectionContextr  s    rc   connection_contextz DatabaseProxy.connection_context       &&&re   c                 "    t          | g|R i |S r_   _atomicra   r  r  s      rc   atomiczDatabaseProxy.atomic       t-d---f---re   c                      t          |           S r_   _manualr  s    rc   manual_commitzDatabaseProxy.manual_commit      t}}re   c                 "    t          | g|R i |S r_   _transactionr  s      rc   transactionzDatabaseProxy.transaction       D242226222re   c                      t          |           S r_   
_savepointr  s    rc   	savepointzDatabaseProxy.savepoint      $re   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rf   rg   rh   databaser  s   rc   Metar            4re   r  	BaseModelhasattrtyperA   r  ra   r  s   ` rc   rA   zDatabaseProxy.Model  U    tX&& 	F''''''''''{UHvtnEEDK{re   N)rf   rg   rh   r  r  r  r  r  r  r  propertyrA   r`   re   rc   r&   r&     s          0I' ' '. . .  3 3 3       X  re   r&   c                       e Zd ZdS )ModelDescriptorNrf   rg   rh   r`   re   rc   r  r              re   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    rc   r  zAliasManager.__init__  s)    		re   c                 ,    | j         | j        dz
           S Nr   )r  r  r  s    rc   mappingzAliasManager.mapping  s    }T01455re   c                 h    || j         vr| xj        dz  c_        d| j        z  | |<   | j         |         S )Nr   zt%d)r  r  ra   rM  s     rc   addzAliasManager.add  s<    %%MMQMM 4=0DL|F##re   Fc                     |rHt          t          | j                            D ]&}|| j        |         v r| j        |         |         c S '|                     |          S r_   )reversedranger  r  r  )ra   rM  	any_depthidxs       rc   getzAliasManager.get%  sm     	6d&9 : :;; 6 6T]3///=-f5555 0xxre   c                 ,    |                      |          S r_   )r  r  s     rc   __getitem__zAliasManager.__getitem__,  s    xxre   c                     || j         |<   d S r_   )r  )ra   rM  aliass      rc   __setitem__zAliasManager.__setitem__/  s    $Vre   c                     | xj         dz  c_         | j         t          | j                  k    r| j                            i            d S d S r  )r  r   r  r  r  s    rc   r  zAliasManager.push2  sR    q T]!3!333M  $$$$$ 43re   c                 Z    | j         dk    rt          d          | xj         dz  c_         d S )Nr   z&Cannot pop() from empty alias manager.)r  
ValueErrorr  s    rc   popzAliasManager.pop7  s9    !##EFFFq re   NF)rf   rg   rh   r  r  r  r  r  r  r  r  r  r  r`   re   rc   r  r    s        :I   6 6 X6$ $ $            % % %% % %
! ! ! ! !re   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 r_   )r  r  __new__)clsscopeparenthesesr  r  s       rc   r  zState.__new__?  s'    UC  ((e[&IIIre   Nc                     || j         n|}|r6| j        r/| j                                        }|                    |           n|r|}n| j        }t	          ||fi |S r_   )r  settingsrL  r   r  )ra   r  r  r  r  s        rc   r  zState.__call__B  sz    #m

  	%dm 	%}))++HOOF#### 	%HH}HUK448444re   c                 6    | j                             |          S r_   )r  r  )ra   	attr_names     rc   r   zState.__getattr__P  s    }  +++re   NN)rf   rg   rh   SCOPE_NORMALr  r  r   r  r  s   @rc   r  r  =  sk        'U J J J J J J5 5 5 5, , , , , , ,re   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`   )ra   r  r  s     rc   r  z __scope_context__.<locals>.innerU  s      T((((( 	 	JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    $$r   )r  r  s   ` rc   __scope_context__r  T  s-        ^ Lre   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	  )ra   r  s     rc   r  zContext.__init___  s<    
	)^^&&X&&


re   c                 .    t          di | j        j        S r  )r#   r	  r  r  s    rc   as_newzContext.as_newf  s    --,---re   c                 8    |d                              |           S r  get_sort_keyra   items     rc   column_sort_keyzContext.column_sort_keyi  s    Aw##D)))re   c                     | j         j        S r_   )r	  r  r  s    rc   r  zContext.scopel  s    zre   c                     | j         j        S r_   )r	  r  r  s    rc   r  zContext.parenthesesp  s    z%%re   c                     | j         j        S r_   )r	  subqueryr  s    rc   r  zContext.subqueryt  s    z""re   c                     |r!|                     d          | j        k    r|d= | j                            | j                    | j        di || _        | S r  )r  r  r  r  r	  )ra   rN  s     rc   r  zContext.__call__x  s`     	#w//4:=='"
$*%%%TZ,,),,
re   c                 >    | j         r|                     d           | S )N()r  literalr  s    rc   r  zContext.__enter__  s$     	LLre   c                 z    | j         r|                     d           | j                                        | _        d S )N))r  r  r  r  r	  ra   exc_typeexc_valexc_tbs       rc   r  zContext.__exit__  s6     	LLZ^^%%


re   c              #   v   K   | j                                          d V  | j                                          d S r_   )r  r  r  r  s    rc   
push_aliaszContext.push_alias  s?      !!!     re   c                    t          |t          t          f          r|                    |           S t	          |          r|j        j                            |           S |                     t          |                    S r_   )	rv   re  r#   __sql__is_model_metatablesqlrY   ra   r  s     rc   r)  zContext.sql  sh    cD'?++ 	(;;t$$$c]] 	(9?**400088E#JJ'''re   c                 :    | j                             |           | S r_   )r  r  )ra   keywords     rc   r  zContext.literal  s    	!!!re   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	  r/  rv   re  r)  r&  scope_columnvalue_literalsr  _query_val_transformr  r  param)ra   r~   r/  	add_params       rc   r~   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 r_   )r  extendr  ra   ctxs     rc   r%  zContext.__sql__  s5    	"""4<(((
re   c                 P    |                      |                                          S r_   )r)  queryra   nodes     rc   parsezContext.parse  s    xx~~##%%%re   c                 D    d                     | j                  | j        fS )Nr(  )rU  r  r  r  s    rc   r;  zContext.query  s    wwty!!4<//re   NT)!rf   rg   rh   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_COLUMNr1  r  r  r   r#  r)  r  r~   r%  r>  r;  r`   re   rc   r#   r#   \  s       FI' ' '. . .* * *     X  & & X& # # X#   %$\22L$$\22L$$\22L!!),,I$$\22L  
& & &
 ! ! ^!
( ( (  L L L L2  
& & &0 0 0 0 0re   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	_databaser0  %s)r   get_sql_contextr#   r)  r;  r	  r4  r   ra  r   r3  )r;  dbr9  r)  paramsr4  s         rc   query_to_stringrO    s     
T	*	*B	~  ""ii''%..&&((KC 
IO"sE||kk#t$$s/889999re   c                    t          | t          t          j        t          j        t          j        f          rd| z  } nt          | t
                    rB	 |                     d          } n%# t          $ r |                     d          } Y nw xY wd| z  } n<t          | t                    rdt          |           z  } n| d} nt          |           } | S )Nz'%s'utf8raw_unicode_escaperK  NULL)
rv   	text_typer   r   r   
bytes_typer   UnicodeDecodeErrorr   str)vs    rc   r3  r3    s    !i!2HMm% & & QJ	Az	"	" 	/  AA! 	/ 	/ 	/-..AAA	/QJ	As		 3q66M	
FFHs   A* *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 )re  TFc                     | j                             | j                   }| j                                        |_        |S r_   )r  r  __dict__rL  r*  s     rc   clonez
Node.clone  s3    n$$T^44}))++
re   c                     t           r_   NotImplementedErrorr8  s     rc   r%  zNode.__sql__      !!re   c                       fd}|S )Nc                 H    |                                  } |g|R i | |S r_   r\  )ra   r  r  r\  r  s       rc   r  zNode.copy.<locals>.inner   s5    JJLLEF5*4***6***Lre   r`   r  s   ` rc   rL  z	Node.copy  s#    	 	 	 	 	 re   c                 V    || j         k    r|                                 }||_         |S | S r_   )_coercer\  )ra   re  r\  s      rc   coercezNode.coerce  s-    dl""JJLLE#EMLre   c                     dS NFr`   r  s    rc   is_aliaszNode.is_alias  s    ure   c                     | S r_   r`   r  s    rc   unwrapzNode.unwrap      re   NT)rf   rg   rh   re  __isabstractmethod__r\  r%  staticmethodrL  rf  ri  rk  r`   re   rc   re  re    s        G   
" " "   \         re   re  c                   "    e Zd ZdZd Zd ZeZdS )ColumnFactoryr=  c                     || _         d S r_   rr  r<  s     rc   r  zColumnFactory.__init__      			re   c                 ,    t          | j        |          S r_   )r!   r=  r   s     rc   r   zColumnFactory.__getattr__      di&&&re   Nrf   rg   rh   r  r  r   r  r`   re   rc   rq  rq    s6        I  ' ' 'KKKre   rq  c                       e Zd ZdZddZdS )_DynamicColumnr`   Nc                 (    |t          |          S | S r_   )rq  ra   instanceinstance_types      rc   __get__z_DynamicColumn.__get__"  s     ***re   r_   rf   rg   rh   r  r~  r`   re   rc   ry  ry    s-        I     re   ry  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      rc   r~  z_ExplicitColumn.__get__+  s.     *,456 6 6 re   r_   r  r`   re   rc   r  r  (  s-        I     re   r  c                       e Zd Zd Zd ZdS )Starc                     || _         d S r_   )rM  r  s     rc   r  zStar.__init__4      re   c                 v    |                     t          | j                                                d          S )Nz.*)r)  rM   rM  r  r8  s     rc   r%  zStar.__sql__6  s,    ww~dk2233;;DAAAre   Nrf   rg   rh   r  r%  r`   re   rc   r  r  3  s7          B B B B Bre   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 r_   )r  r  r  _alias)ra   r  r  s     rc   r  zSource.__init__=  s*    fd$$&&&re   c                     || _         d S r_   r  ra   names     rc   r  zSource.aliasA      re   c                 H    |st          d          f}t          | f|          S )Nr   )rQ   rP   ra   columnss     rc   selectzSource.selectE  s)     	"3xxkGtgw'''re   c                      t          |           S r_   )r  r  s    rc   __star__zSource.__star__J  s    Dzzre   c                 &    t          | |||          S r_   Join)ra   dest	join_typeons       rc   rU  zSource.joinN  s    D$	2...re   c                 :    t          | |t          j        |          S r_   )r  r?   r4  ra   r  r  s      rc   left_outer_joinzSource.left_outer_joinQ  s    D$444re   Fc                 *    t          || |||          S N)	recursiver  materializedCTEra   r  r  r  r  s        rc   ctez
Source.cteT  $    4G ,. . . 	.re   c                 <    | j         r| j         fS |j        |          fS r_   )r  r  r8  s     rc   r  zSource.get_sort_keyX  s'    ; 	"K>!!$'))re   c                     |j         t          k    rV| j        r| j        |j        | <   |                    d                              t          |j        |                               |S N AS )r  rB  r  r  r  r)  rf  r8  s     rc   apply_aliaszSource.apply_alias]  s_     9$${ 6*.+!$'KK##F3+<T+B$C$CDDD
re   c                     | j         r| j         |j        | <   |                    t          |j        |                              S r_   )r  r  r)  rf  r8  s     rc   apply_columnzSource.apply_columnf  s=    ; 	2&*kCd#wwvc/566777re   r_   FNN)rf   rg   rh   ry  rw   r  re  rL  r  r  r  r  r?   r3  rU  r  r  r  r  r  r  r  s   @rc   r  r  :  s       A      
Y  Y( ( (
   X $(:$ / / / /5 5 5 5. . . .* * *
  8 8 8 8 8 8 8re   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 r_   )r  r  r  _update_hashra   r  r  r  s      rc   r  z_HashableSource.__init__m  s=    -ot$$-t>v>>>re   c                 <    || _         |                                  d S r_   )r  r  r  s     rc   r  z_HashableSource.aliasq  s!    re   c                 8    |                                  | _        d S r_   )	_get_hash_hashr  s    rc   r  z_HashableSource._update_hashv  s    ^^%%


re   c                 D    t          | j        | j        | j        f          S r_   )hashr  _pathr  r  s    rc   r  z_HashableSource._get_hashy  s    T^TZ=>>>re   c                     | j         S r_   )r  r  s    rc   __hash__z_HashableSource.__hash__|  s
    zre   c                     t          |t                    r| j        |j        k    S t          | t          j        |          S r_   )rv   r  r  r
  rE   r   ra   others     rc   __eq__z_HashableSource.__eq__  7    e_-- 	-:,,$u---re   c                     t          |t                    r| j        |j        k    S t          | t          j        |          S r_   )rv   r  r  r
  rE   r   r  s     rc   __ne__z_HashableSource.__ne__  r  re   c                       fd}|S )Nc                 &    t          | |          S r_   r
  ra   r   ops     rc   r  z!_HashableSource._e.<locals>.inner  s    dB,,,re   r`   )r  r  s   ` rc   _ez_HashableSource._e  s!    	- 	- 	- 	- 	-re   )rf   rg   rh   r  re  rL  r  r  r  r  r  r  r  rE   r   __lt__r   __le__r   __gt__r   __ge__r  r  s   @rc   r  r  l  s             
Y  Y& & &? ? ?  . . .
. . .
   RYYFRZZFRYYFRZZFFFFFre   r  c                 <     t                      fd            }|S )Nc                 b     | g|R i |}| j         r|                    | j                   S |S r_   )rJ  bind)ra   r  r  resultmeths       rc   r  z __bind_database__.<locals>.inner  sE    d,T,,,V,,> 	/;;t~...re   r   )r  r  s   ` rc   __bind_database__r    s3    
4[[    [
 Lre   c                       fd}|S )Nc                 4    r|| }} t          | |          S )N)r  r  )ra   r  invertedr  s     rc   r  z__join__.<locals>.method  s)     	&%DD%95555re   r`   )r  r  r  s   `` rc   __join__r    s)    6 6 6 6 6 6 Mre   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)rf   rg   rh   r  r?   r3  __and__r4  r   r5  __sub__r7  __or__r8  __mul____rand____radd____rsub____ror____rmul__r`   re   rc   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2HHHre   r  c                   &    e Zd Zd Zd Zd Zd ZdS )_BoundTableContextc                 "    || _         || _        d S r_   )r(  r  )ra   r(  r  s      rc   r  z_BoundTableContext.__init__  s    
 re   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 r_   )r  r(  r  r  s     rc   r  z*_BoundTableContext.__call__.<locals>.inner  s    #DJ>> + +r4*6**+ + + + + + + + + + + + + + + + + +s   155r   r  s   `` rc   r  z_BoundTableContext.__call__  r  re   c                     | j         j        | _        | j                             | j                   | j         j        $| j         j                            | j                   | j         S r_   )r(  rJ  _orig_databaser  r  _modelr  s    rc   r  z_BoundTableContext.__enter__  sS    "j2
&&&:(J""4=111zre   c                     | j                             | j                   | j         j        &| j         j                            | j                   d S d S r_   )r(  r  r  r  r  s       rc   r  z_BoundTableContext.__exit__  sN    
+,,,:(J""4#677777 )(re   Nrf   rg   rh   r  r  r  r  r`   re   rc   r  r    sP        ! ! !    8 8 8 8 8re   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 )rS   Nc           	         || _         || _        || _        || _        |r||fn|f| _        || _        || _        t          t          |           	                    |           |7t                      | _        |D ]!}t          | |t          | |                     "|r'| j        r| n| j        }	t          |	|          | _        d S d | _        d S Nr  )rf   _columns_primary_key_schemar  r  rJ  r  rS   r  r  rw   setattrr!   r   primary_key)ra   r  r  r  schemar  r  rJ  columncol_srcr  s             rc   r  zTable.__init__  s    ''-:fd^^D7
"eT##%#000 $&&DF! < <ffT6&:&:;;;; 	$"m7ddG&w<<D#Dre   c           	      t    t          | j        | j        | j        | j        | j        | j        | j                  S )N)r  r  r  r  r  rJ  )rS   rf   r  r  r  r  r  rJ  r  s    rc   r\  zTable.clone  s=    MM)<+;n& & & 	&re   c                     || _         | S r_   rJ  ra   r  s     rc   r  z
Table.bind      !re   c                 "    t          | |          S r_   )r  r  s     rc   bind_ctxzTable.bind_ctx  s    !$111re   c                 P    t          | j        | j        | j        | j        f          S r_   )r  r  r  r  r  r  s    rc   r  zTable._get_hash  s!    T^TZdkJKKKre   c                 ^     |s j         r fd j         D             }t           f|          S )Nc                 0    g | ]}t          |          S r`   )r!   )rV  r  ra   s     rc   rY  z Table.select.<locals>.<listcomp>  s#    HHHvdF++HHHre   )r  rP   r  s   ` rc   r  zTable.select  sC     	I4= 	IHHHH$-HHHGtgw'''re   c                     |rC|i n|}| j         r| n| j        }|                                D ]\  }}||t          ||          <   t	          | ||          S Ninsertr  )r  rw   itemsr   Insert)ra   r  r  r  srckeyr~   s          rc   r  zTable.insert  sp     	2!>RRvF-3$$TVC$llnn 2 2
U,1wsC(())d67;;;;re   c                 V    |                      ||                              d          S )Nr
  REPLACEr  on_conflict)ra   r  r  r  s       rc   r   zTable.replace  s(    vw77Y''	)re   c                     |rC|i n|}|                                 D ](\  }}| j        r| n| j        }||t          ||          <   )t	          | |          S )Nr   )r  r  rw   r   Update)ra   r   r  r  r~   r  s         rc   r   zTable.update  sn     	2!>RRvF$llnn 2 2
U"m7dd,1wsC(())d6****re   c                      t          |           S r_   )Deleter  s    rc   deletezTable.delete  s    d||re   c                 B   |j         t          k    r!|                    t          | j                   S | j        r| j        |j        | <   |j         t          k    r4|                     |                    t          | j                             S | 	                    |          S r_   )
r  rD  r)  rf  r  r  r  rB  r  r  r8  s     rc   r%  zTable.__sql__  s    9$$7764:.///; 	2&*kCd#9$$##CGGFDJ,?$@$@AAA $$S)))re   )NNNNNNr_   r  )rf   rg   rh   r  r\  r  r  r  r  r  r  r   r   r  r%  r  r  s   @rc   rS   rS     s6       DH48$ $ $ $ $ $.	& 	& 	&   2 2 2 2L L L ( ( (
 < < < < ) ) ) )
 + + + +   * * * * * * *re   rS   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)ra   r  r   r  r  r  r  s         rc   r  zJoin.__init__+  sD    dD"""///"re   c                     || _         | S r_   )r  )ra   	predicates     rc   r  zJoin.on2  s    re   c                    |                     | j                                      d| j        z                                 | j                   | j        -|                    d                               | j                   |S )N %s  ON )r)  r  r  r  r   r  r8  s     rc   r%  zJoin.__sql__6  sd    	
#dh--
'&4>)
*
*
#dh---8KK##DH---
re   )	rf   rg   rh   r?   r3  r  r  r%  r  r  s   @rc   r  r  *  sd        +/:$d              re   r  c                   L     e Zd Zd fd	Zd Zej        d             Zd Z xZ	S )rZ   Nc                 v    || _         || _        t          t          |                               |           d S r  )r  r  r  rZ   r  )ra   valuesr  r  r  s       rc   r  zValuesList.__init__A  s8    j$((u(55555re   c                 ^    t          | j        t          | j                  | j        f          S r_   )r  r  idr  r  r  s    rc   r  zValuesList._get_hashF  s%    T^R%5%5t{CDDDre   c                     || _         d S r_   )r  )ra   namess     rc   r  zValuesList.columnsI  s    re   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rV  rows     rc   rY  z&ValuesList.__sql__.<locals>.<listcomp>U  s4     +J +J +J58+C00+J +J +Jre   r  c                 ,    g | ]}t          |          S r`   )rf  rV  rw   s     rc   rY  z&ValuesList.__sql__.<locals>.<listcomp>[  s    AAAaq		AAAre   )r  r  r  rB  r  r  r  r)  CommaNodeListr  rf  r  r.  )ra   r9  entitiess      rc   r%  zValuesList.__sql__M  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  )
rf   rg   rh   r  r  re  rL  r  r%  r  r  s   @rc   rZ   rZ   @  s{        6 6 6 6 6 6
E E E 
Y  Y      re   rZ   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`   rv   
basestringrf  r2  s     rc   rY  z CTE.__init__.<locals>.<listcomp>k  sA     ) ) ) %/q*$=$=Dvayyy1 ) ) )re   r`   r  )	r  _query
_recursive_materializedr  	_cte_listr  r  r  )ra   r  r;  r  r  r  r  s         rc   r  zCTE.__init__d  sy    #)) ) ') ) )Gc4!!!-----re   c                    |st          d          t          | f|                              |                               | j        j                  }	 |                    | j        j                  }n# t          $ r Y nw xY w|S )NzFselect_from() must specify one or more columns from the CTE to select.)	r  rP   with_cter  r:  rJ  objectsmodelr   ra   r  r;  s      rc   select_fromzCTE.select_fromq  s     	8 7 8 8 8 ))(4..$t{,-- 		MM$+"344EE 	 	 	D	s   A4 4
B Bc                 ^    t          | j        | j        t          | j                  f          S r_   )r  r  r  r'  r:  r  s    rc   r  zCTE._get_hash  s#    T^T["T[//BCCCre   c                 |    | j                                         }t          | j        ||z   | j        | j                  S r_   r:  r\  r  r  r;  r  ra   r   r\  s      rc   	union_allzCTE.union_all  3    !!##4;T_dmLLLre   c                 |    | j                                         }t          | j        ||z  | j        | j                  S r_   rF  rG  s      rc   unionz	CTE.union  rI  re   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 Tr+  )r  rF  r)  rf  r  r#  r  r  r  r.  r<  rA  r:  r8  s     rc   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  )rf   rg   rh   r  rC  r  rH  r   rK  r  r%  r  r  s   @rc   r  r  c  s        =A". . . . . .  D D DM M M GM M M F      re   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 r_   )
_converter)ra   r/  s     rc   r/  zColumnBase.converter  s    #re   c                 *    |rt          | |          S | S r_   )Aliasra   r  s     rc   r  zColumnBase.alias  s     	&u%%%re   c                     | S r_   r`   r  s    rc   unaliaszColumnBase.unalias  rl  re   c                 "    t          | |          S r_   )BindTo)ra   r  s     rc   bind_tozColumnBase.bind_to  s    dD!!!re   c                 "    t          | |          S r_   )r   )ra   as_types     rc   castzColumnBase.cast  s    D'"""re   c                 &    t          | ||          S N)	collationnulls)Ascra   r^  r_  s      rc   asczColumnBase.asc  s    49E::::re   c                 &    t          | ||          S r]  )Descra  s      rc   desczColumnBase.desc  s    DIU;;;;re   c                      t          |           S r_   )Negatedr  s    rc   
__invert__zColumnBase.__invert__  r  re   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 r_   r  )ra   r   invr  s     rc   r  zColumnBase._e.<locals>.inner  s/     1!#r4000dB,,,re   r`   )r  rk  r  s   `` rc   r  zColumnBase._e  s)    
	- 	- 	- 	- 	- 	- re   T)rk  c                 X    |t           j        nt           j        }t          | ||          S r_   )rE   r   r   r
  r  s      rc   r  zColumnBase.__eq__  s%    kRUUru$C(((re   c                 X    |t           j        nt           j        }t          | ||          S r_   )rE   r   r   r
  r  s      rc   r  zColumnBase.__ne__  s%    +RYY25$C(((re   c                 X    |rt           j        nt           j        }t          | |d           S r_   )rE   r   r   r
  )ra   is_nullr  s      rc   ro  zColumnBase.is_null  s&    ,RUU29$D)))re   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\%Fr.  ESCAPE)findr   NodeListrY   rQ   )ra   rq   templates      rc   _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,,,. / / / !|re   c           	          t          |t                    r5t          dt          j        t          |t          j        d                    }n|                     |d          }t          | t          j        |          S )Nr   z%%%s%%rv   re  r
  rE   r  rw  r  r   s     rc   containszColumnBase.contains  sg    c4   	8S")'RY<<> >CC ((h77C$#...re   c                     t          |t                    rt          |t          j        d          }n|                     |d          }t          | t          j        |          S )Nr   z%s%%ry  r   s     rc   
startswithzColumnBase.startswith  R    c4   	6S")S11CC((f55C$#...re   c                     t          |t                    rt          dt          j        |          }n|                     |d          }t          | t          j        |          S )Nr   z%%%sry  r   s     rc   endswithzColumnBase.endswith  r}  re   c           
      r    t          | t          j        t          |t	          d          |f                    S )Nr   )r
  rE   r  ru  rQ   )ra   lohis      rc   betweenzColumnBase.between  s+    $
Hb#e**b5I,J,JKKKre   c                 8    t          | t          j        |          S r_   StringExpressionrE   r  r   s     rc   concatzColumnBase.concat  s    bi555re   c                     t          |t                    r=|j        |j        t	          d          |                     |j        |j                  S | |k    S )Nz4BETWEEN range must have both a start- and end-point.)rv   slicestartstopr  r  r  s     rc   r  zColumnBase.__getitem__  s\    dE"" 	7z!TY%6  ". / / /<<
DI666t|re   c                 >    t          t          d          | f          S )NDISTINCTru  rQ   r  s    rc   distinctzColumnBase.distinct&  s    Z$/000re   c                 D    t          | t          d|z            f          S )N
COLLATE %sr  ra   r^  s     rc   collatezColumnBase.collate)  s"    s<)#;<<=>>>re   c                     dS r  r`   r8  s     rc   r  zColumnBase.get_sort_key,  s    rre   r_   r  r  rm  )Trf   rg   rh   rP  re  rL  r/  r  rU  rX  r[  rb  __pos__re  __neg__rh  r  rE   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  iregexpro  rw  rz  r|  r  r  r  r  __iter__r  r  r  r`   re   rc   rN  rN    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? ? ?    re   rN  c                   &    e Zd Zd Zd Zd Zd ZdS )r!   c                 "    || _         || _        d S r_   )rM  r  )ra   rM  r  s      rc   r  zColumn.__init__1  s    			re   c                 x    |j         t          k    r| j        fS | j                            |          | j        fz   S r_   )r  rD  r  rM  r  r8  s     rc   r  zColumn.get_sort_key5  s8    9$$I<;++C00DI<??re   c                 8    t          | j        | j        f          S r_   )r  rM  r  r  s    rc   r  zColumn.__hash__;  s    T[$),---re   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 NrR  )r  rD  r)  rf  r  r1  rM  r  r8  s     rc   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)rf   rg   rh   r  r  r  r%  r`   re   rc   r!   r!   0  sX          @ @ @. . .P P P P Pre   r!   c                        e Zd Zd Zd Zd ZdS )WrappedNodec                 l    || _         t          |dd          | _        t          |dd           | _        d S )Nre  TrP  )r=  r   re  rP  r<  s     rc   r  zWrappedNode.__init__G  s3    	tY55!$d;;re   c                 4    | j                                         S r_   )r=  ri  r  s    rc   ri  zWrappedNode.is_aliasL  s    y!!###re   c                 4    | j                                         S r_   )r=  rk  r  s    rc   rk  zWrappedNode.unwrapO  s    y!!!re   N)rf   rg   rh   r  ri  rk  r`   re   rc   r  r  F  sA        < < <
$ $ $" " " " "re   r  c                       e Zd ZdZd Zd ZdS )EntityFactoryrr  c                     || _         d S r_   rr  r<  s     rc   r  zEntityFactory.__init__U  rt  re   c                 ,    t          | j        |          S r_   )rf  r=  r   s     rc   r   zEntityFactory.__getattr__W  rv  re   N)rf   rg   rh   r  r  r   r`   re   rc   r  r  S  s7        I  ' ' ' ' 're   r  c                       e Zd ZdZddZdS )_DynamicEntityr`   Nc                 2    |t          |j                  S | S r_   )r  r  r{  s      rc   r~  z_DynamicEntity.__get__]  s     111re   r_   r  r`   re   rc   r  r  [  s-        I     re   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 )rR  c                 f    t          t          |                               |           || _        d S r_   )r  rR  r  r  )ra   r=  r  r  s      rc   r  zAlias.__init__f  s,    eT##D)))re   c                 *    t          | j                  S r_   )r  r  r  s    rc   r  zAlias.__hash__j      DK   re   c                     | j         S r_   r  r  s    rc   r  z
Alias.namem  s
    {re   c                     || _         d S r_   r  ra   r~   s     rc   r  z
Alias.namep      re   Nc                 >    || j         S t          | j         |          S r_   )r=  rR  rS  s     rc   r  zAlias.aliast  s!    =9E***re   c                     | j         S r_   rr  r  s    rc   rU  zAlias.unaliasz  
    yre   c                     dS r@  r`   r  s    rc   ri  zAlias.is_alias}  s    tre   c                    |j         t          k    rR|                    | j                                      d                              t          | j                            S |                    t          | j                            S r  )r  rB  r)  r=  r  rf  r  r8  s     rc   r%  zAlias.__sql__  sd    9$$S^^WV__S,,--/
 776$+..///re   r_   )rf   rg   rh   r  rw   r  r  r  r  setterr  rU  ri  r%  r  r  s   @rc   rR  rR  c  s        A    ! ! !   X	[  [+ + + +    0 0 0 0 0 0 0re   rR  c                   $     e Zd Z fdZd Z xZS )rW  c                 f    t          t          |                               |           || _        d S r_   )r  rW  r  r  )ra   r=  r  r  s      rc   r  zBindTo.__init__  s,    fd$$T***			re   c                 6    |                     | j                  S r_   r)  r=  r8  s     rc   r%  zBindTo.__sql__  s    wwty!!!re   rf   rg   rh   r  r%  r  r  s   @rc   rW  rW    sG            " " " " " " "re   rW  c                       e Zd Zd Zd ZdS )rg  c                     | j         S r_   rr  r  s    rc   rh  zNegated.__invert__  r  re   c                 \    |                     d                              | j                  S )NzNOT )r  r)  r=  r8  s     rc   r%  zNegated.__sql__  s$    {{6""&&ty111re   Nrf   rg   rh   rh  r%  r`   re   rc   rg  rg    s2          2 2 2 2 2re   rg  c                   &    e Zd Zd Zd Zd Zd ZdS )BitwiseMixinc                 ,    |                      |          S r_   )r  r  s     rc   r  zBitwiseMixin.__and__  s    ||E"""re   c                 ,    |                      |          S r_   )r  r  s     rc   r  zBitwiseMixin.__or__  s    {{5!!!re   c                 P    |                      |                                          S r_   )r  bin_negatedr  s     rc   r  zBitwiseMixin.__sub__  s     ||E--//000re   c                      t          |           S r_   )BitwiseNegatedr  s    rc   rh  zBitwiseMixin.__invert__  s    d###re   N)rf   rg   rh   r  r  r  rh  r`   re   rc   r  r    sP        # # #" " "1 1 1$ $ $ $ $re   r  c                       e Zd Zd Zd ZdS )r  c                     | j         S r_   rr  r  s    rc   rh  zBitwiseNegated.__invert__  r  re   c                     |j         j        r+|j         j                            | j        | j                  }n| j        }|                    |                              | j                  S r_   )r	  
operationsr  r  r  r)  r=  )ra   r9  op_sqls      rc   r%  zBitwiseNegated.__sql__  sX    9 	Y)--dgtw??FFWF{{6""&&ty111re   Nr  r`   re   rc   r  r    s2          2 2 2 2 2re   r  c                       e Zd ZddZd ZdS )rY   NTc                 R   || _         || _        |ot          | j         t                    | _        | j        rng | _        | j         D ]a}t          |t                    r| j                            |           2| j                            t          || j                             `d S d S r_   )	r~   r/  rv   multi_typesmultir%  re  r  rY   )ra   r~   r/  unpackr  s        rc   r  zValue.__init__  s    
"C
4:{ C C
: 	DDK
 D DdD)) DK&&t,,,,K&&uT4>'B'BCCCC	D 	DD Dre   c                     | j         r'|                    t          | j                            S |                    | j        | j                  S r_   )r  r)  r.  r%  r~   r/  r8  s     rc   r%  zValue.__sql__  sA    : 	:77+DK88999yyT^444re   r@  r  r`   re   rc   rY   rY     s;        
D 
D 
D 
D5 5 5 5 5re   rY   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)r2  r  r8  s     rc   r%  zValueLiterals.__sql__  s    S%%% 	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   488Nrf   rg   rh   r%  r`   re   rc   r  r    #        & & & & &re   r  c                 $    t          | d          S NFr  )rY   rb  s    rc   r   r     s    u%%%%re   c                   $     e Zd Z fdZd Z xZS )r   c                 t    t          t          |                               |           || _        d| _        d S rh  )r  r   r  _castre  )ra   r=  r[  r  s      rc   r  zCast.__init__  s3    dD""4(((
re   c                     |                     d                              | j                                       d| j        z            S )NzCAST(z AS %s))r  r)  r=  r  r8  s     rc   r%  zCast.__sql__  s8    !!TYTZ/00	2re   r  r  s   @rc   r   r     sG            
2 2 2 2 2 2 2re   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  	directionr^  r_  rl  r  )ra   r=  r  r^  r_  r  s        rc   r  zOrdering.__init__  s    h&&t,,,""
 	8U[[]]*;;; /167 8 8 8	8 	8;;re   c                 8    t          | j        | j        |          S r_   )r  r=  r  r  s     rc   r  zOrdering.collate  s    	4>9===re   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   r=  ro  )ra   r_  ifnullnotnulls       rc   _null_ordering_casezOrdering._null_ordering_case  su    ;;==F"""OFGG[[]]g%%"OFGGEFFFDDI--//8:GDDDre   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)	r_  r	  nulls_orderingr)  r  r  r=  r  r^  r8  s     rc   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
re   r  r_   )rf   rg   rh   r  r  r  r%  r  r  s   @rc   r  r    sr        8 8 8 8 8 8> > > >E E E	 	 	 	 	 	 	re   r  c                 &    t          | d||          S )NASCr  r=  r^  r_  s      rc   r`  r`    s    D%E222re   c                 &    t          | d||          S )NDESCr  r   s      rc   rd  rd    s    D&)U333re   c                       e Zd ZddZd ZdS )r
  Fc                 >    || _         || _        || _        || _        d S r_   )r  r  r   flat)ra   r  r  r   r  s        rc   r  zExpression.__init__  s"    			re   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    }|rn|                                                    | j                  d         dk    r8|                    | j        t          j        k    rdnd          cd d d            S | j        }|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_exprr/  
is_fk_exprr   ()z0 = 1z1 = 1rS  r!  r`   )r  r  rv   r  rk  r2   re  db_valuer6   r	  r  r  r  rE   r   r   r  r>  r   r  r   r   rQ   r)  )ra   r9  rN  r=  raw_noder  op_inr   s           rc   r%  zExpression.__sql__  s3   (,	MdCC	 ("xh,, 	%??$$D dE"" 	*x'7 	*%)]Ik"&0&G&GIl##%)Ik"9 	Y)--dgtw??FFWFS9 	 	 Gru$<29(<E M++DH55a8D@@{{dg.>.>77GLL	 	 	 	 	 	 	 	 (C{25 0 0DGry4H4H&kkS]]WVf_--SXX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BG4#BG44G8;G8Nr  r  r`   re   rc   r
  r
    s7           " " " " "re   r
  c                       e Zd Zd Zd ZdS )r  c                 ,    |                      |          S r_   )r  r   s     rc   r   zStringExpression.__add__8  s    {{3re   c                 8    t          |t          j        |           S r_   r  )ra   r  s     rc   r  zStringExpression.__radd__:  s    RY555re   N)rf   rg   rh   r   r  r`   re   rc   r  r  7  s2             6 6 6 6 6re   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )rf  c                 (    d |D             | _         d S )Nc                 >    g | ]}||                     d d          S )""")r   )rV  rW  s     rc   rY  z#Entity.__init__.<locals>.<listcomp>@  s+    GGG$$Gdll3--GGGre   )r  )ra   rZ  s     rc   r  zEntity.__init__?  s    GG$GGG


re   c                 &    t          | j        |gz    S r_   )rf  r  r   s     rc   r   zEntity.__getattr__B  s    tzTF*++re   c                 *    t          | j                  S r_   )ra  r  r8  s     rc   r  zEntity.get_sort_keyE  s    TZ   re   c                 \    t          | j        j        t          | j                  f          S r_   )r  r  rf   ra  r  r  s    rc   r  zEntity.__hash__H  s$    T^,eDJ.?.?@AAAre   c                 j    |                     t          | j        |j        j        pd                    S )Nr  )r  r[  r  r	  r8  s     rc   r%  zEntity.__sql__K  s)    {{5SY_-DEEFFFre   N)rf   rg   rh   r  r   r  r  r%  r`   re   rc   rf  rf  >  sj        H H H, , ,! ! !B B BG G G G Gre   rf  c                       e Zd ZddZd ZdS )rQ   Nc                 "    || _         || _        d S r_   r)  rN  ra   r)  rN  s      rc   r  zSQL.__init__P  s    re   c                     |                     | j                   | j        r"| j        D ]}|                    |dd           |S NF)r5  )r  r)  rN  r~   ra   r9  r4  s      rc   r%  zSQL.__sql__T  sQ    DH; 	9 9 9		%%	8888
re   r_   r  r`   re   rc   rQ   rQ   O  s7               re   rQ   c                     t          d| z            }|s|S t          t          d          t          |          |f          S )Nz
CHECK (%s)
CONSTRAINT)rQ   ru  rf  )
constraintr  checks      rc   r   r   \  sD    z)**E S&&te<===re   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avgr[  	array_aggTNc                     || _         || _        d | _        d | _        || _        |r$|                                | j        v r	d| _        d S || _        d S rh  )r  	arguments_filter	_order_by_python_valuerl  no_coerce_functionsre  )ra   r  r+  rf  python_values        rc   r  zFunction.__init__f  sY    	") 	"DJJLLD$<<< DLLL!DLLLre   c                     fd}|S )Nc                       t          | fi |S r_   )r%  )r  r  r   s     rc   	decoratorz'Function.__getattr__.<locals>.decoratorr  s    D$11&111re   r`   )ra   r   r3  s    ` rc   r   zFunction.__getattr__q  s"    	2 	2 	2 	2 	2re   c                     || _         d S r_   )r,  )ra   wheres     rc   filterzFunction.filterv      re   c                     || _         d S r_   r-  )ra   orderings     rc   order_byzFunction.order_byz      !re   c                     || _         d S r_   )r.  )ra   funcs     rc   r0  zFunction.python_value~  s    !re   c           	          t          |t                    r||}|t          |          }nt          ||||||d          }t          | t	          d          |f          S )NT)partition_byr;  r  end
frame_typeexclude_inlineOVER)rv   r[   WindowAliasru  rQ   )	ra   r@  r;  r  rA  rB  windowrC  r=  s	            rc   overzFunction.over  ss    lF++ 	"!Fv&&DD|h %3:")49 9 9D s6{{D1222re   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	  rt  ORDER BYT)in_functionfunction_arg_countc                 \    g | ])}t          |t                    r|nt          |d           *S r  )rv   re  rY   )rV  args     rc   rY  z$Function.__sql__.<locals>.<listcomp>  sE     *% *% *% 'sD11HSSuS%7H7H*% *% *%re   z FILTER (WHERE r  )r  r  r   r+  r-  r`  ru  rQ   r3  r)  r.  r,  )ra   r9  r  s      rc   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)TNr_   NNNNNNN)rf   rg   rh   setr/  r  r   re  rL  r6  r;  r0  rH  r%  r`   re   rc   r%  r%  c  s        #JKK	" 	" 	" 	"  
 
Y   Y 
Y" " Y" 
Y" " " Y" FJ373 3 3 3    re   r%  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 )r[   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  r[   r  rv   rQ   rc  r@  r;  r  rA  r  r  rD  rB  _extends_exclude)ra   r@  r;  r  rA  rB  extendsrC  r  rD  r  s             rc   r  zWindow.__init__  s     	fd$$&&&Zs%;%;JJE?:c3#7#7?c((C(66$X..
:$("6GHHHls$re   c                     |pd| _         | S NrX  r  rS  s     rc   r  zWindow.alias  s    lsre   c                 (    t           j        | _        d S r_   )r[   rU  rB  r  s    rc   as_rangezWindow.as_range  s     ,re   c                 (    t           j        | _        d S r_   )r[   rV  rB  r  s    rc   as_rowszWindow.as_rows  s     +re   c                 (    t           j        | _        d S r_   )r[   rT  rB  r  s    rc   	as_groupszWindow.as_groups  s     -re   c                     || _         d S r_   )rY  ra   rG  s     rc   r[  zWindow.extends  s    re   c                 \    t          |t                    rt          |          }|| _        d S r_   )rv   r9  rQ   rZ  )ra   frame_exclusions     rc   rC  zWindow.exclude  s,    oz22 	3!/22O're   c                 H    | t          d          S t          d| z            S )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGrQ   rb  s    rc   	followingzWindow.following  )    =,--->E)***re   c                 H    | t          d          S t          d| z            S )NzUNBOUNDED PRECEDINGz%d PRECEDINGri  rb  s    rc   	precedingzWindow.preceding  rk  re   c                    |j         t          k    r6| j        s/|                    | 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  Tr+  zPARTITION BYrJ  rV  z
%s BETWEENr   z%s UNBOUNDED PRECEDINGEXCLUDE)r  rB  rD  r  r  rY  rv   r[   rQ   r9  r  r@  r7  r3  r;  r  rA  rB  rZ  r)  ru  )ra   r9  partsextframes        rc   r%  zWindow.__sql__  s   9$$T\$KK$$$KKST""" 	% 	%E}(mc6** #cj//CCZ00 #c((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  I$'I$)	NNNNNNNNFr_   )rf   rg   rh   rQ   CURRENT_ROWrR  rS  	NO_OTHERSrT  rU  rV  r  r  re  rL  r_  ra  rc  r[  rC  ro  rj  rm  r%  r  r  s   @rc   r[   r[     s       #m$$KCLLE3v;;DK  I FEDIMDH           *    
Y' ' Y' 
Y& & Y& 
Y( ( Y( 
Y   Y 
Y( ( ( Y(
 + + + \+
 + + + \+
$ $ $ $ $ $ $re   r[   c                        e Zd Zd Zd Zd ZdS )rF  c                     || _         d S r_   )rG  re  s     rc   r  zWindowAlias.__init__  r  re   c                     || j         _        | S r_   )rG  r  )ra   window_aliass     rc   r  zWindowAlias.alias  s    )re   c                 D    |                     | j        j        pd          S r]  )r  rG  r  r8  s     rc   r%  zWindowAlias.__sql__"  s    {{4;-4555re   N)rf   rg   rh   r  r  r%  r`   re   rc   rF  rF    sA            6 6 6 6 6re   rF  c                       e Zd ZddZd ZdS )_InFunctionTc                 "    || _         || _        d S r_   )r=  rK  )ra   r=  rK  s      rc   r  z_InFunction.__init__'  s    	&re   c                      || j                   5  |                    | j                  cd d d            S # 1 swxY w Y   d S )NrK  )rK  r)  r=  r8  s     rc   r%  z_InFunction.__sql__+  s    ST-... 	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   9= =Nrm  r  r`   re   rc   r{  r{  &  s7        ' ' ' '& & & & &re   r{  c                       e Zd ZddZd ZdS )r   Nc                 0    || _         || _        || _        d S r_   )r  expression_tuplesdefault)ra   r  r  r  s       rc   r  zCase.__init__1  s    "!2re   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~  )	rQ   r  r  r  r7  r{  r  r)  ru  )ra   r9  clausesexprr~   s        rc   r%  zCase.__sql__6  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r_   r  r`   re   rc   r   r   0  s7           
. . . . .re   r   c                       e Zd ZddZd ZdS )	ForUpdateNc                     |du rdn|}|                                                     d          r|d d         }d}|| _        |%t          |t          t
          t          f          s|f}|| _        || _        d S )NTz
FOR UPDATEnowaiti)	rl  r  _exprrv   r`  rP  ra  _of_nowait)ra   r  ofr  s       rc   r  zForUpdate.__init__E  s}    #t||||::<<  ** 	9DF
>*R$U1C"D"D>Bre   c                     |                     | j                   | j        :|                     d                              t	          | j                             | j        r|                     d           |S )Nz OF z NOWAIT)r  r  r  r)  r3  r  r8  s     rc   r%  zForUpdate.__sql__Q  si    DJ8KK##M$($;$;<<<< 	#KK	"""
re   r  r  r`   re   rc   r  r  D  s7        
 
 
 
    re   r  c                       e Zd ZddZd ZdS )ru  r   Fc                 F   || _         || _        || _        |rt          | j                   dk    rmt	          | j         d         t
                    rO| j         d         j        s?| j         d                                         f| _         d| j         d         _        d S d S d S d S d S )Nr   r   T)nodesglueparensr   rv   r
  r  r\  )ra   r  r  r  s       rc   r  zNodeList.__init__[  s    
	 	&c$*oo**djmZ00 +z!}! + *Q---//1DJ!%DJqM	& 	&******re   c                    t          | j                  }|dk    r| j        r|                    d          n|S  || j                  5  t	          |dz
            D ]<}|                    | j        |                    |                    | j                   =|                    | j        |dz
                      d d d            n# 1 swxY w Y   |S )Nr   r	  r+  r   )r   r  r  r  r  r)  r  )ra   r9  n_nodesis       rc   r%  zNodeList.__sql__f  s   dj//a<<(,<3;;t$$$<ST[))) 	- 	-7Q;'' ' '
1&&&DI&&&&GGDJw{+,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 
s   
A3C		CCN)r   Fr  r`   re   rc   ru  ru  Z  s7        	& 	& 	& 	&	 	 	 	 	re   ru  c                 "    t          | d          S )Nr  ru  r  s    rc   r3  r3  r  s    E4   re   c                 $    t          | dd          S )Nr  Tr  r  s    rc   r.  r.  v  s    E4&&&re   c                   "    e Zd ZdZd Zd ZeZdS )
_Namespace_namec                     || _         d S r_   r  r  s     rc   r  z_Namespace.__init__|  s    


re   c                 "    t          | |          S r_   )NamespaceAttributer   s     rc   r   z_Namespace.__getattr__~  s    !$---re   Nrw  r`   re   rc   r  r  z  s6        I  . . .KKKre   r  c                       e Zd Zd Zd ZdS )r  c                 "    || _         || _        d S r_   )
_namespace
_attribute)ra   	namespace	attributes      rc   r  zNamespaceAttribute.__init__  s    ##re   c                     |                     | j        j        dz                                 t	          | j                            S r  )r  r  r  r)  rf  r  r8  s     rc   r%  zNamespaceAttribute.__sql__  s8    .455VDO,,--	/re   Nr  r`   re   rc   r  r    s2        $ $ $/ / / / /re   r  r1   c                   D     e Zd Z fdZej        d             Zd Z xZS )r0   c                 r    t          t          |                                            || _        d| _        d S rh  )r  r0   r  r;  _negatedra   r;  r  s     rc   r  zDQ.__init__  s/    b$  """
re   c                      | j          | _         d S r_   )r  r  s    rc   rh  zDQ.__invert__  s     M)re   c                 @    t          di | j        }| j        |_        |S r  )r0   r;  r  r<  s     rc   r\  zDQ.clone  s%    DJre   )	rf   rg   rh   r  re  rL  rh  r\  r  r  s   @rc   r0   r0     sd            
 
Y* * Y*      re   r0   c                       t          |           S r_   r-  )as    rc   rx   rx     s    #A&& re   c                       e Zd Zd ZdS )rM   c                     |                                 5  |                    | j                  cd d d            S # 1 swxY w Y   d S r_   )r1  r)  r=  r8  s     rc   r%  zQualifiedNames.__sql__  s     	& 	&7749%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   <A A Nr  r`   re   rc   rM   rM     r  re   rM   c                    t          | t                    rF|                     t          | j                  | j        t          | j                  | j                  S t          | t                    rt          |           S | S r_   )
rv   r
  r  qualify_namesr  r  r   r  rN  rM   rr  s    rc   r  r    su     $
## $~~mDH55tw+DH55tyB B 	B	D*	%	% $d###Kre   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_updaterc  	_preserve_wherer  _conflict_target_conflict_where_conflict_constraint)ra   actionr   preserver5  conflict_targetconflict_whereconflict_constraints           rc   r  zOnConflict.__init__  su     %h//&+>+J G H H H ,_ = =-$7!!!re   c                 8    |j                             | |          S r_   )r	  conflict_statementra   r9  r;  s      rc   get_conflict_statementz!OnConflict.get_conflict_statement  s    y++D%888re   c                 8    |j                             | |          S r_   )r	  conflict_updater  s      rc   get_conflict_updatezOnConflict.get_conflict_update  s    y((u555re   c                     || _         d S r_   )r  r  s     rc   r  zOnConflict.preserve  s     re   c                     |r&|r$t          |t                    st          d          |pi }|r|                    |           || _        d S )NzGCannot mix data with keyword arguments in the OnConflict update method.)rv   dictr  r   r  )ra   _datar  s      rc   r   zOnConflict.update  sg     	:V 	:Jud$;$; 	: 9 : : : 	!LL   re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   r  rt   operatorand_ra   expressionss     rc   r5  zOnConflict.where  /    ;";.;6KX]K88re   c                 "    d | _         || _        d S r_   r  r  )ra   constraintss     rc   r  zOnConflict.conflict_target  s    $(! +re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   )r  rt   r  r  r  s     rc   r  zOnConflict.conflict_where  s5    +/1K?K%hm[AAre   c                 "    || _         d | _        d S r_   r  )ra   r"  s     rc   r  zOnConflict.conflict_constraint  s    $.! $re   rO  r_   )rf   rg   rh   r  r  r  re  rL  r  r   r5  r  r  r  r`   re   rc   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% % %re   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".)rJ  r<   rf   )ra   r  r  r  r  s       rc   r  z database_required.<locals>.inner  sc    %-%54>>8 	D  "139?"C D D DvdH6t666v666re   r_   r   r  s   ` rc   database_requiredr    s8    
6]]7 7 7 7 7 ]7 Lre   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  )rJ  _cursor_wrapper	_row_type_constructorr  r  r  )ra   rJ  r  r  s      rc   r  zBaseQuery.__init__  sJ    "# 'i'11&11111re   c                     || _         | S r_   r   r  s     rc   r  zBaseQuery.bind  r  re   c                 d    t          t          |                                           }d |_        |S r_   )r  r  r\  r  r  s     rc   r\  zBaseQuery.clone  s+    i&&,,.. $re   Tc                 0    |rt           j        nd | _        | S r_   )ROWr>  r  )ra   as_dicts     rc   dictszBaseQuery.dicts  s    %,6$re   c                 0    |rt           j        nd | _        | S r_   )r  r=  r  )ra   as_tuples     rc   tupleszBaseQuery.tuples  s    &.8Dre   c                 0    |rt           j        nd | _        | S r_   )r  r?  r  )ra   as_namedtuples     rc   namedtupleszBaseQuery.namedtuples  s    ,9Ctre   c                 >    |rt           j        nd | _        || _        | S r_   )r  r@  r  r  ra   constructors     rc   r@  zBaseQuery.objects  s!    ,7AT're   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?  NamedTupleCursorWrapperr@  ObjectCursorWrapperr  r  ra   cursorrow_types      rc   _get_cursor_wrapperzBaseQuery._get_cursor_wrapper!  s    >:T%:sx$V,,,"" (((((*6222((&vt/@AAA;hFGGGre   c                     t           r_   r^  r8  s     rc   r%  zBaseQuery.__sql__/  r`  re   c                     | j         r| j                                         }nt                      }|                    |           S r_   )rJ  rL  r#   r>  )ra   contexts     rc   r)  zBaseQuery.sql2  s<    > 	 n4466GGiiG}}T"""re   c                 ,    |                      |          S r_   )_executer  s     rc   executezBaseQuery.execute9  s    }}X&&&re   c                     t           r_   r^  r  s     rc   r  zBaseQuery._execute=  r`  re   c                 j    t          |                     |                                                    S r_   )rw  r  iteratorr  s     rc   r  zBaseQuery.iterator@  s(    DLL**3355666re   c                 l    | j         ,| j        st          d          |                                  d S d S )NzQuery has not been executed.)r  rJ  r  r  r  s    rc   _ensure_executionzBaseQuery._ensure_executionC  s>    '> A !?@@@LLNNNNN ('re   c                 R    |                                   t          | j                  S r_   )r  rw  r  r  s    rc   r  zBaseQuery.__iter__I  s%       D()))re   c                     |                                   t          |t                    r|j        }n|}||dk    r|dz   nd}| j                            |           | j        j        |         S Nr   r   )r  rv   r  r  r  
fill_cache	row_cache)ra   r~   rx  s      rc   r  zBaseQuery.__getitem__M  sw       eU## 	JEEE!&!EAIIE''...#-e44re   c                 R    |                                   t          | j                  S r_   )r  r   r  r  s    rc   __len__zBaseQuery.__len__X  s%       4'(((re   c                      t          |           S r_   )rO  r  s    rc   __str__zBaseQuery.__str__\  s    t$$$re   r_   rm  )rf   rg   rh   r  r>  r  r  r  r\  re  rL  r  r  r  r@  r  r%  r)  r  r  r  r  r  r  r  r  r  r  r  s   @rc   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) ) )% % % % % % %re   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)ra   r)  rN  r  r  s       rc   r  zRawQuery.__init__a  s8    &h&00000	re   c                     |                     | j                   | j        r!| j        D ]}|                    |d           |S r  )r  r  r  r~   r  s      rc   r%  zRawQuery.__sql__f  sO    DI< 	2 2 2		%5	1111
re   c                 |    | j         /|                    |           }|                     |          | _         | j         S r_   r  r  r  ra   r  r   s      rc   r  zRawQuery._executem  =    '%%d++F#'#;#;F#C#CD ##re   r  )rf   rg   rh   r  r%  r  r  r  s   @rc   r  r  `  s[             
  $ $ $ $ $ $ $re   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  r!  r  r  r-  _limit_offsetr=  )ra   r5  r;  limitoffsetr  r  s         rc   r  zQuery.__init__u  sM    #eT#--f---!re   c                     || _         d S r_   )r=  )ra   cte_lists     rc   r?  zQuery.with_cte  r<  re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   r  r  s     rc   r5  zQuery.where  r  re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   )r  rt   r  or_r  s     rc   orwherezQuery.orwhere  s/    ;";.;6KX\;77re   c                     || _         d S r_   r9  ra   r%  s     rc   r;  zQuery.order_by  s    re   c                 ,    | j         pd|z   pd | _         d S r  r9  r.  s     rc   order_by_extendzQuery.order_by_extend  s    >/R69Bdre   c                     || _         d S r_   )r#  r  s     rc   r%  zQuery.limit  r  re   c                     || _         d S r_   )r$  r  s     rc   r&  zQuery.offset  r7  re      c                 >    |dk    r|dz  }|| _         ||z  | _        d S r  )r#  r$  )ra   pagepaginate_bys      rc   paginatezQuery.paginate  s+    !88AID!k)re   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  r)  r3  r#  r$  r	  	limit_max)ra   r9  r%  s      rc   _apply_orderingzQuery._apply_ordering  s    > 	2gl##c-//000;"t|'?'*y': (@+/;+>CI''DKEKK	""&&u---<#KK
##''555
re   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 r_   )r;  )rV  r  s     rc   rr  z Query.__sql__.<locals>.<genexpr>  s$      EEsCNEEEEEEre   Fr  zWITH RECURSIVE zWITH r   )r=  anyrG  r  r)  r3  )ra   r9  r  s      rc   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)NNNNr_   )r3  )rf   rg   rh   r  re  rL  r?  r5  r,  r;  r0  r%  r&  r7  r:  r%  r  r  s   @rc   r!  r!  t  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*        re   r!  c                 0     t            fd            }|S )Nc                 2    r|| }} t          | |          S r_   )CompoundSelectQuery)ra   r  r  	operations     rc   r  z#__compound_select__.<locals>.method  s&     	&%D"4E:::re   )r  )rB  r  r  s   `` rc   __compound_select__rC    s4    ; ; ; ; ; ; Mre   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.rA  )r  rP   r  rJ  r   r@  rA  rB  s      rc   rC  zSelectQuery.select_from  sg     	PNOOO))$t~&& 	4$''3MM$*--Ere   N)rf   rg   rh   rC  rH  r   rK  r  	intersectr  except_r  r  r  r  r  rC  r`   re   rc   rE  rE    s        --k:::I((111EF--k:::I++H555Gg"";>>>H!!'D999G"";>>>H""8d;;;H	 	 	 	 	re   rE  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 r_   )r  r  r  r'  r  s    rc   r  zSelectBase._get_hash  s$    T^T[%<BtHH=>>>re   c                 |    | j         /|                    |           }|                     |          | _         | j         S r_   r  r  s      rc   r  zSelectBase._execute  r  re   r   c                 d    |                      |          d |         }|r|dk    r|d         n|S d S Nr   r   )r  )ra   r  rz  rowss       rc   peekzSelectBase.peek  sD    ||H%%bqb) 	/1ff477$.	/ 	/re   c                 b    | j         |k    r|| _         d | _        |                     ||          S )N)rz  )r#  r  rT  )ra   r  rz  s      rc   rm  zSelectBase.first  s4    ;!DK#'D yyQy'''re   Fc                     |r'|                                                      |          S |                                                     |          }|r
|s|d         n|S r  )r  rT  r  )ra   r  r  r  r0  s        rc   scalarzSelectBase.scalar  sY     	/::<<$$X...kkmm  **6X6s1vv36re   c              #   r   K   |                                                      |          D ]}|d         V  d S r  )r  r  )ra   r  r0  s      rc   scalarszSelectBase.scalars 	  sD      ;;==((22 	 	Ca&LLLL	 	re   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)r;  r  r#  r$  _having	_group_by_windows	_distinct_simple_distinctr  rQ   r   rP   r5   COUNTrW  )ra   r  clear_limitr\  s       rc   r'  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 )Nr\  r   )r  rQ   r#  r$  boolrW  )ra   r  r\  s      rc   existszSelectBase.exists	  s=    SXX&&ELLNN###re   c                 j    d | _         	 |                     |          d         S # t          $ r Y d S w xY wr  )r  r  
IndexErrorr  s     rc   r  zSelectBase.get	  sH    #	<<))!,, 	 	 	DD	s   $ 
22Nr   FFr  )rf   rg   rh   r  r  r  rT  rm  rW  rY  r'  rf  r  r`   re   rc   rN  rN    s       ? ? ?$ $ $ / / / /
 ( ( ( ( 7 7 7 7    F F F F $ $ $     re   rN  c                   `     e Zd Z fdZed             Zed             Zd Zd Z	 fdZ
 xZS )rA  c                     t          t          |                                            || _        || _        || _        d S r_   )r  rA  r  r  r  r   )ra   r  r  r   r  s       rc   r  zCompoundSelectQuery.__init__'	  s9    !4((11333re   c                     | j         j        S r_   )r  
_returningr  s    rc   rn  zCompoundSelectQuery._returning-	  s    x""re   c                     t          |                     d          ft          d          f                              |          }t	          |                                          S )Nr   r\  )rP   r%  rQ   r  re  rW  )ra   r  r;  s      rc   rf  zCompoundSelectQuery.exists1	  sJ    

1'#c((55::8DDELLNN###re   c                 f    | j                                         | j                                        fS r_   )r  get_query_keyr   r  s    rc   _get_query_keyz"CompoundSelectQuery._get_query_key6	  s)    &&(($(*@*@*B*BCCre   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  rK  rv   rA  )ra   r9  subqcsq_settings       rc   _wrap_parensz CompoundSelectQuery._wrap_parens9	  s    i; 	=k-BBB52224444y  CI$9  u
 "$(;<<<< 54re   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 )Nr+  F)r  r  r!  )r  rH  r  r  rA  r%  r  rB  r{  r  rA  r)  r  r  r#  r   rE  r:  r  )ra   r9  outer_parens
lhs_parens
rhs_parensr  s        rc   r%  zCompoundSelectQuery.__sql__K	  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)rf   rg   rh   r  r  rn  r  rf  rr  r{  r%  r  r  s   @rc   rA  rA  &	  s             # # X# $ $ $D D D= = =$% % % % % % % % %re   rA  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 )rP   Nc                     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  rP   r  rv   ra  r`  
_from_listrn  r^  r]  r_  _for_update_for_update_of_for_update_nowait_lateralr`  ra  re  r  )ra   	from_listr  group_byhavingr  windows
for_updatefor_update_ofr  lateralr  r  s               rc   r  zSelect.__init__j	  s     	%fd$..v....8E.J.J *4	??? )1.0 	!!%+"(155. 	*(D)) *(0%%!)#re   c                     t          t          |                                           }|j        rt	          |j                  |_        |S r_   )r  rP   r\  r  r`  ra   r\  r  s     rc   r\  zSelect.clone	  sA    fd##))++ 	6#E$455Ere   c                     || _         d S r_   rn  )ra   r  r  s      rc   r  zSelect.columns	  s    !re   c                 >    t          | j                  |z   | _        d S r_   )ra  rn  r  s     rc   select_extendzSelect.select_extend	  s    007:re   c                     | j         S r_   r  r  s    rc   selected_columnszSelect.selected_columns	  s
    re   c                     || _         d S r_   r  r  s     rc   r  zSelect.selected_columns	  s    re   c                 .    t          |          | _        d S r_   )r`  r  ra   sourcess     rc   from_zSelect.from_	  s    w--re   c                     | j         st          d          | j                                         }| j                             t	          ||||                     d S )NNo sources to join on.)r  r  r  r  r  )ra   r  r  r  r  s        rc   rU  zSelect.join	  sX     	75666""$$tD$	2>>?????re   c                 D    |                      |t          j        |          S r_   rU  r?   r4  r  s      rc   r  zSelect.left_outer_join	  s    yyt333re   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   rV  col_namer  s     rc   rY  z#Select.group_by.<locals>.<listcomp>	  9     !B !B !B%- ")!:!: !B !B !Bre   )rv   rS   r  r  r7  r  r^  ra   r  groupingr  s      @rc   r  zSelect.group_by	  s     		( 		(F&%(( ( 2$ &1 2 2 2  !B !B !B !B17!B !B !B C C C C ''''!re   c                 H    t          | j        pd          |z   } | j        | S )z$@Node.copy used from group_by() callr`   )ra  r^  r  )ra   r%  r  s      rc   group_by_extendzSelect.group_by_extend	  s*    -2..7t}h''re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   )r]  rt   r  r  r  s     rc   r  zSelect.having	  s/    <#</K7Khm[99re   c                     t          |          dk    r#|d         du s
|d         du r|d         | _        d S d| _        || _        d S )Nr   r   TF)r   ra  r`  r  s     rc   r  zSelect.distinct	  sT    w<<1'!*"4"4
e8K8K$+AJD!!!$)D!$DNNNre   c                     |r|nd | _         d S r_   )r_  )ra   r  s     rc   rG  zSelect.window	  s    #*4re   Tc                 @    |s||rd}|| _         || _        || _        d S r@  )r  r  r  )ra   r  r  r  s       rc   r  zSelect.for_update	  s5     	r~~J% "(re   c                     || _         d S r_   )r  )ra   r  s     rc   r  zSelect.lateral	  s    re   c                     | j         S r_   r  r  s    rc   rr  zSelect._get_query_key	  s
    {re   Fc                 P    |                     t          | j                            S r_   )r)  r3  rn  ra   r9  is_subquerys      rc   __sql_selection__zSelect.__sql_selection__	  s    ww}T_55666re   c                 z   |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        rc|j        j        st;          d          |                    d
           |                    t=          | j        | j        | j                              d d d            n# 1 swxY w Y   |j        j        s|j        j!        r	| j"        |S | #                    |          S )NzLATERAL FT)r/  rK  r  r  r   r  zSELECT z	DISTINCT zON r   r+   FROM  WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.r`   )$r  rH  r  r  rB  r  r  r	  rK  rL  rA  r  rP   r%  ra  r`  r)  r.  rC  r  r  r3  r  r^  r]  r_  r:  r  r  r  r  r  r  r  r  r  )ra   r9  r  r	  r  s       rc   r%  zSelect.__sql__	  sX   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   	$"2D4G"&"9; ; < < <W,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	< ,	<b 9  	SY%6 	%)[%8J$$$s\   C	M<(F?M<F	M<F	 M<3;G:.M<:G>	>M<G>	E.M<<N N )
NNNNNNNNNNr_   TNNrm  r  )rf   rg   rh   r  r\  re  rL  r  r  r  r  r  r  r  r?   r3  rU  r  r  r  r  r  rG  r  r  rr  r  r%  r  r  s   @rc   rP   rP   i	  s>       >BFJ:>$ $ $ $ $ $0     
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) ) ) Y) 
Y      Y   7 7 7 7F% F% F% F% F% F% F% F% F%re   rP   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(  rn  _return_cursorr  r  r  )ra   r(  	returningr  r  s       rc   r  z_WriteQuery.__init__(
  sK    
#&/:ddU)k4  )33F33333re   Fc                 *    t          || |||          S r  r  r  s        rc   r  z_WriteQuery.cte.
  r  re   c                 *    || _         |rdnd| _        d S NTF)rn  r  )ra   r  s     rc   r  z_WriteQuery.returning2
  s     #&/:ddUre   c                     | j         rf|                                5  |                    d                              t	          | j                              d d d            n# 1 swxY w Y   |S )Nz RETURNING )rn  rC  r  r)  r3  r8  s     rc   apply_returningz_WriteQuery.apply_returning7
  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 r_   )rn  execute_returningr  handle_resultr  s      rc   r  z_WriteQuery._execute=
  sJ    ? 	,++H55FF%%d++F!!(F333re   c                 |    | j         /|                    |           }|                     |          | _         | j         S r_   r  r  s      rc   r  z_WriteQuery.execute_returningD
  r  re   c                 >    | j         r|S |                    |          S r_   )r  rows_affectedr  s      rc   r  z_WriteQuery.handle_resultJ
  s&     	M%%f---re   c                 8    | j         j        |j        | j         <   d S r_   )r(  rf   r  r8  s     rc   _set_table_aliasz_WriteQuery._set_table_aliasO
  s    (,
(;$*%%%re   c                     t          t          |                               |           |                     |           |S r_   )r  r  r%  r  ra   r9  r  s     rc   r%  z_WriteQuery.__sql__R
  s<    k4  ((--- 	c"""
re   r_   r  )rf   rg   rh   r  r  re  rL  r  r  r  r  r  r  r%  r  r  s   @rc   r  r  '
  s        4 4 4 4 4 4. . . . 
Y; ; Y;  4 4 4$ $ $. . .
< < <        re   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 r_   )r  r  r  r  _from)ra   r(  r   r  r  s       rc   r  zUpdate.__init__\
  s:    $fd$U55f555


re   c                     || _         d S r_   )r  r  s     rc   r  zUpdate.from_a
  s    


re   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 )NTr=  zUPDATE r  Fr  r   z SET r+  r  r  )r  r  r%  rE  r  sortedr  r  r  rv   re  r2   to_valuerY   rA   r6   r  r  ru  rQ   r)  r(  r3  r  rC  r  rA  r:  r  )ra   r9  r  krX  r  s        rc   r%  zUpdate.__sql__e
  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r_   )	rf   rg   rh   r  re  rL  r  r%  r  r  s   @rc   r  r  [
  ss             
 
Y  Y%- %- %- %- %- %- %- %- %-re   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   rj   c                       e Zd ZdS )Insert.DefaultValuesExceptionNr  r`   re   rc   DefaultValuesExceptionr  
  r  re   r  Nc                      t          t          |           j        |fi | || _        || _        || _        d | _        d| _        d S rh  )r  r  r  _insertr  _on_conflict_query_type_as_rowcount)ra   r(  r  r  r  r  r  s         rc   r  zInsert.__init__
  sT    $fd$U55f555'!re   c                      t          d          )Nz*INSERT queries cannot have a WHERE clause.r^  r  s     rc   r5  zInsert.where
  s    !"NOOOre   Tc                     || _         d S r_   )r  )ra   r  s     rc   as_rowcountzInsert.as_rowcount
  s    (re   c                 6    |rt          d          nd | _        d S )NIGNOREr  r  )ra   ignores     rc   on_conflict_ignorezInsert.on_conflict_ignore
  s"    4:DJx000re   c                 6    |rt          d          nd | _        d S Nr  r  )ra   r   s     rc   on_conflict_replacezInsert.on_conflict_replace
  s"    5<FJy111$re   c                 4    |s|rt          |i |nd | _        d S r_   r  r  s      rc   r  zInsert.on_conflict
  s4    =A 'V 'Z8888"& 	re   c                 r    | j         s|                     d          |                     | j         f|          S )NError: no data to insert.)r  r  _generate_insertr8  s     rc   _simple_insertzInsert._simple_insert
  s<    | 	K--.IJJJ$$dl_c:::re   c                     i S r_   r`   r  s    rc   get_default_datazInsert.get_default_data
  s    	re   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   )rV  colra   s     rc   rY  z.Insert.get_default_columns.<locals>.<listcomp>
  s>     7 7 7dj555 DJ,,555re   )r(  r  r  s   `rc   get_default_columnszInsert.get_default_columns
  sI    : 	77 7 7 7
8K 7 7 7 7	7 	7re   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 r_   r  r  r9  s    rc   rx   z)Insert._generate_insert.<locals>.<lambda>
      8H8H8M8M re   r  c                 .    |                                S r_   r  r  s    rc   rx   z)Insert._generate_insert.<locals>.<lambda>
  r  re   z VALUES c                 N    g | ]"}|t          |t                    r|j        nd f#S r_   )rv   r2   r
  )rV  r  s     rc   rY  z+Insert._generate_insert.<locals>.<listcomp>
  sB     # # # 
65(A(AKV__tL# # #re   zMissing value for %s.F)r/  r  r  Tr=  )$rw  r  r  nextStopIterationr  rv   r   r  r  r9  r   r(  r  rP  r  	itertoolschainr  r  r2   column_namenullr6   r)  r.  r  	enumerater   rh  	callable_re  rA   rY   rE  r3  )ra   r  r9  	rows_iterr  defaultsr0  accumr  
column_setr  clean_columnsseen
column_obj	fk_fieldsnullable_columnsvalue_lookupslookupscolumns_converters
all_valuesr%  is_dictr  r/  lookupvals     `                       rc   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!&*55 =!(V!<!<LL(((( !ZZ
MMJ6 & &CLL%%%% ,M,M,M,MNNN!cVi@@IIM55D! % %fj11 (!(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   )r)  r.  r  r  r  r8  s     rc   _query_insertzInsert._query_insert/  s<    %dm4455T\""	$re   c                 n    | j         s|                    d          S | j                             |          S NzDEFAULT VALUES)rJ  r  default_values_insertr8  s     rc   _default_valueszInsert._default_values5  s5    ~ 	1;;/000~33C888re   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%  rE  r  r  r)  rQ   r  r(  rv   r  r   r  r  r  r  SIMPLEr  rE  r  QUERYr  MULTIr  r  )ra   r9  stmtr   r  s       rc   r%  zInsert.__sql__:  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r_   )rn  returning_clauser(  r  r  r  r  r  )ra   r  r  s     rc   r  zInsert._execute[  sw    ?"x'@"z& ##z68DO	&&//999* 	 	 	DD	s   'A 
A%$A%c                     | j         r|S | j        r|                    |          S |                    || j                  S r_   )r  r  r  last_insert_idr  r  s      rc   r  zInsert.handle_resultd  sJ     	M 	2))&111&&vt/?@@@re   NNNrm  )rf   rg   rh   r  r  r  	Exceptionr  r  r5  re  rL  r  r  r  r  r  r  r  r  r  r  r%  r  r  r  r  s   @rc   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re   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 )NTr=  DELETE FROM r  )r  r  r%  rE  r  r)  r(  r  rA  r:  r  r  s     rc   r%  zDelete.__sql__m  sv   fd##C(((t,, 	- 	-KK''++DJ777{&%%'' < <KK	**..t{;;;< < < < < < < < < < < < < < <   %%%'',,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7    A	D	.C7DC	D
C	,DDD)rf   rg   rh   r%  r  r  s   @rc   r  r  l  s8        
- 
- 
- 
- 
- 
- 
- 
- 
-re   r  c                       e Zd Z	 	 d	dZej        d
d            Zej        d             Zej        dd            Zd Z	dS )r9   FNc                     || _         t          |t                    st          |          n|| _        || _        || _        || _        || _        || _	        d S r_   )
r  rv   rS   rf  _table_expressionsr  _unique_safe_using)ra   r  r(  r  uniquesafer5  usings           rc   r  zIndex.__init__{  sQ    
+5eU+C+CNfUmmm'
re   Tc                     || _         d S r_   )r,  )ra   r,  s     rc   r/  z
Index.safe  s    


re   c                 h    | j         | j         f|z   }t          t          j        |          | _         d S r_   r  r  s     rc   r5  zIndex.where  r  re   c                     || _         d S r_   )r-  )ra   r-  s     rc   r0  zIndex.using  s    re   c                    | 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        -|                    d                              | j                   d d d            n# 1 swxY w Y   |S )NzCREATE UNIQUE INDEX zCREATE INDEX Tr=  IF NOT EXISTS z	 USING %sr"  r   z	USING %s c                 Z    g | ](}t          |t                    rt          |          n|)S r`   )rv   r9  rQ   )rV  r  s     rc   rY  z!Index.__sql__.<locals>.<listcomp>  sA     &/ &/ &/ (j99CD			t&/ &/ &/re   r  )r+  rE  r  r,  r	  index_schema_prefixrv   r)  rS   r  rf  r  rf   r)  r-  index_using_precedes_tabler.  r*  r  )ra   r9  	statement
index_name
table_names        rc   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 {&I&&**4;777C!	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8 !	8F 
s   GG;;G?G?)FFNNrm  r_   )
rf   rg   rh   r  re  rL  r/  r5  r0  r%  r`   re   rc   r9   r9   z  s        DI#'    
Y   Y 
Y9 9 Y9
 
Y   Y% % % % %re   r9   c                   *     e Zd Z	 	 d fd	Zd Z xZS )rB   FTNc           	         || _         ||                     ||          }|1|D ].}t          |t                    rt	          |d          r|j        }/t          t          |                               ||j	        j
        |||||           d S )N
index_type)r  r(  r  r.  r/  r5  r0  )r  _generate_name_from_fieldsrv   r2   r  r>  r  rB   r  r'  r(  )
ra   rA  fieldsr.  r/  r5  r0  r  fieldr  s
            rc   r  zModelIndex.__init__  s    <225&AAD= - -eU++ -|0L0L -!,Ej$((+# 	) 	 	 	 	 	re   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(  rq  )rv   r9  r  r   re  r2   rk  r  r  rerj  rU  r'  legacy_table_namesr  r;  _truncate_constraint_name)ra   rA  r@  r  rA  clean_field_namesrH  prefixs           rc   r?  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Ore   )FTNNN)rf   rg   rh   r  r?  r  r  s   @rc   rB   rB     sY        EI"&     $P P P P P P Pre   rB   @   c                     t          |           |k    rSt          j        |                     d                                                    }| d |dz
           d|d d         } | S )Nutf-8rC  rq     )r   hashlibmd5encode	hexdigest)r"  maxlen	name_hashs      rc   rF  rF    si    
:K
 1 1' : :;;EEGG	 *=VaZ= 9 9 99RaR==I
re   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  )rv   r#  origr  rT  r  )ra   r  r  s     rc   r  zPeeweeException.__init__  sY     	0JtAw	22 	0"1gtABBxODIt-ot$$-t4444re   rf   rg   rh   r  r  r  s   @rc   rT  rT    s8        5 5 5 5 5 5 5 5 5re   rT  c                       e Zd ZdS )r8   Nr  r`   re   rc   r8   r8     r  re   r8   c                       e Zd ZdS )r%   Nr  r`   re   rc   r%   r%     r  re   r%   c                       e Zd ZdS )r'   Nr  r`   re   rc   r'   r'     r  re   r'   c                       e Zd ZdS )r;   Nr  r`   re   rc   r;   r;     r  re   r;   c                       e Zd ZdS )r<   Nr  r`   re   rc   r<   r<     r  re   r<   c                       e Zd ZdS )r=   Nr  r`   re   rc   r=   r=     r  re   r=   c                       e Zd ZdS )rD   Nr  r`   re   rc   rD   rD     r  re   rD   c                       e Zd ZdS )rF   Nr  r`   re   rc   rF   rF     r  re   rF   c                       e Zd ZdS )rK   Nr  r`   re   rc   rK   rK     r  re   rK   c                   $    e Zd ZdZd Zd Zd ZdS )ExceptionWrapper
exceptionsc                     || _         d S r_   rc  )ra   rd  s     rc   r  zExceptionWrapper.__init__  s    $re   c                     d S r_   r`   r  s    rc   r  zExceptionWrapper.__enter__        re   c                    |d S t           6|j        | j        vr(t          |t           j                  r|j        d         }n<t          5|j        | j        vr't          |t          j                  r|j        d         }|j        | j        v r3| j        |j                 }|j        }t          | ||g|R  |           d S d S r  )		pg_errorsrf   rd  r]  Error	__bases__
pg3_errorsr  r   )ra   r  	exc_value	tracebacknew_typeexc_argss         rc   r  zExceptionWrapper.__exit__  s    F X%6do%M%M(IO44 &N)!,HH#DO33(J$455 4)!,H//x'89H ~HHhhy<8<<<iHHHHH 0/re   N)rf   rg   rh   r  r  r  r  r`   re   rc   rb  rb    sE        I% % %I I I I Ire   rb  )ConstraintErrorr%   r'   r;   r<   r=   rD   rF   rK   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  r)  r  r.  r(  ColumnMetadata)r  	data_typer  r  r(  r  ForeignKeyMetadata)r  
dest_tabledest_columnr(  ViewMetadata)r  r)  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)ra   r  r  s     rc   r  z_ConnectionState.__init__4  s8    .%%.88888

re   c                 >    d| _         d | _        g | _        g | _        d S r@  )closedconnr9  transactionsr  s    rc   r  z_ConnectionState.reset8  s%    	re   c                 >    || _         d| _        g | _        g | _        d S rh  )r  r  r9  r  ra   r  s     rc   set_connectionz_ConnectionState.set_connection>  s%    	re   )rf   rg   rh   r  r  r  r  r  s   @rc   r}  r}  3  sV                    re   r}  c                       e Zd ZdS )_ConnectionLocalNr  r`   re   rc   r  r  E  r  re   r  c                       e Zd ZdZd Zd ZdS )	_NoopLockr`   c                     | S r_   r`   r  s    rc   r  z_NoopLock.__enter__H  s    re   c                     d S r_   r`   r  s       rc   r  z_NoopLock.__exit__I  rg  re   N)rf   rg   rh   r  r  r  r`   re   rc   r  r  F  s'        I$$$77777re   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )r  rM  c                     || _         d S r_   r  ra   rM  s     rc   r  zConnectionContext.__init__N  s    bDGGGre   c                 n    | j                                         r| j                                          d S d S r_   )rM  	is_closedconnectr  s    rc   r  zConnectionContext.__enter__O  s:    7 	GOO	 	re   c                 8    | j                                          d S r_   )rM  closer  s       rc   r  zConnectionContext.__exit__R  s    47==?????re   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 r_   )r  rM  r  s     rc   r  z)ConnectionContext.__call__.<locals>.innerT  s    "47++ + +r4*6**+ + + + + + + + + + + + + + + + + +   +//r   r  s   `` rc   r  zConnectionContext.__call__S  r  re   N)rf   rg   rh   r  r  r  r  r  r`   re   rc   r  r  L  sL        I(((   CBB    re   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%dDdZ&d Z'd Z(d Z)d Z*d Z+dDd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>dDd/Z?dDd0Z@dDd1ZAdDd2ZBdDd3ZCdDd4ZDd5 ZEd6 ZFd7 ZGd8 ZHd9 ZId: ZJd; ZKd< ZLdEd=ZMdEd>ZNd? ZOePd@             ZQdS )Fr$   r0  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.)rP  FIELDfield_types_field_typesrE   r  _operationsr   autoconnectthread_safer  _state	threadingLock_lockr}  r  r   connect_paramsinit)	ra   r  r  autorollbackr  r  
autocommitr  r  s	            rc   r  zDatabase.__init__p  s&    'ud.>??%b$/:: 	2$$[111 	0##J///&& 	%*,,DK"))DJJ*,,DK"DJ 	J I J J J
 ! < = = = !	(%%f%%%%%re   c                     |                                  s|                                  || _        | j                            |           t          |           | _        d S r_   )r  r  r  r  r   re  deferred)ra   r  r  s      rc   r  zDatabase.init  sS    ~~ 	JJLLL ""6*** NN*re   c                     |                                  r|                                  |                                 }| j        j                            |           |                                 | S r_   )r  r  r  r  r9  r  r  r8  s     rc   r  zDatabase.__enter__  sX    >> 	LLNNNkkmms###re   c                    | j         j                                        }	 |                    |||           | j         j        s|                                  d S d S # | j         j        s|                                  w w xY wr_   )r  r9  r  r  r  )ra   r  r   r!  r9  s        rc   r  zDatabase.__exit__  s|    ko!!##	LL7F333;? 

 4;? 

s   A #A>c                      t          |           S r_   r  r  s    rc   r  zDatabase.connection_context  r  re   c                     t           r_   r^  r  s    rc   _connectzDatabase._connect  r`  re   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  r<   r  r  rF   r  __exception_wrapper__r  r  server_version_set_server_versionr  _initialize_connection)ra   reuse_if_opens     rc   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 r_   r`   r  s     rc   r  zDatabase._initialize_connection      re   c                     d| _         d S r  )r  r  s     rc   r  zDatabase._set_server_version  s    re   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  r<   in_transactionrF   r  r  r  _closer  r  )ra   is_opens     rc   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 r_   )r  r  s     rc   r  zDatabase._close  s    

re   c                     | j         j        S r_   r  r  r  s    rc   r  zDatabase.is_closed  s    {!!re   c                     | j         j         S r_   r  r  s    rc   is_connection_usablezDatabase.is_connection_usable  s    ;%%%re   c                 j    |                                  r|                                  | j        j        S r_   )r  r  r  r  r  s    rc   
connectionzDatabase.connection  s,    >> 	LLNNN{re   c                     |t          d           |                                 r+| j        r|                                  nt	          d          | j        j                                        S )N,"commit" has been deprecated and is a no-op.z&Error, database connection not opened.)r   r  r  r  r<   r  r  r   )ra   commitnamed_cursors      rc   r   zDatabase.cursor  sk    IJJJ>> 	O O$%MNNN{&&(((re   c                     |t          d           t                              ||f           t          5  |                                 }|                    ||pd           d d d            n# 1 swxY w Y   |S Nr  r`   )r   loggerdebugr  r   r  )ra   r)  rN  r  r   s        rc   execute_sqlzDatabase.execute_sql  s    IJJJc6]###" 	. 	.[[]]FNN3"---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. s   -A..A25A2c                     |t          d            | j        di |}|                    |                                          \  }}|                     ||          S r  )r   rL  r)  r;  r  )ra   r;  r  context_optionsr9  r)  rN  s          rc   r  zDatabase.execute  sd    IJJJ"d"55_55ggenn**,,VV,,,re   c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        dS )N)r  r  r4  r[  ru  r  r  r  r7  r8  r9  r  )r  r  r4  r[  ru  r  r  r  r7  r8  r9  r  r  s    rc   get_context_optionszDatabase.get_context_options  sU    ,*ZZ+/+K"&"9#3/#'#;*.*I"1
 
 	
re   c                 r    |                                  }|r|                    |            | j        di |S r  )r  r   context_class)ra   r  r  s      rc   rL  zDatabase.get_sql_context  sF    **,, 	,NN?+++!t!,,G,,,re   c                     t           r_   r^  ra   r  r;  s      rc   r  zDatabase.conflict_statement  r`  re   c                     t           r_   r^  r  s      rc   r  zDatabase.conflict_update  r`  re   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`   r8  rV  r  s     rc   rY  z6Database._build_on_conflict_update.<locals>.<listcomp>#  sA     '9 '9 '9  *#z::Cs'9 '9 '9re   rB  zON CONFLICT ON CONSTRAINTr1   rR  r  r   Fr  zDO UPDATE SET)r  rQ   r.  r  ru  r  rv   r9  rf  r  rg  r  r  r  re  r   r(  r2   r  rY   rM   r3  r  r7  )ra   r  r;  r  targetupdatesr  excluded
expressionr  rX  rp  s               rc   _build_on_conflict_updatez"Database._build_on_conflict_update   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** 
* "!Z00 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re   c                     |j         S r_   )	lastrowidra   r   
query_types      rc   r!  zDatabase.last_insert_idM  s    re   c                     |j         S r_   )rowcountra   r   s     rc   r  zDatabase.rows_affectedP  s
    re   c                 ,    |                     d          S r  r  r8  s     rc   r  zDatabase.default_values_insertS  s    {{+,,,re   c                 N    |                                                                  S r_   )r  r  r  s    rc   session_startzDatabase.session_startV  s     !!++---re   c                     	 |                                  }n# t          $ r Y dS w xY w|                    |                                            dS NFbeginT)pop_transactionrh  r  r  ra   txns     rc   session_commitzDatabase.session_commitY  sa    	&&((CC 	 	 	55	

,,..
///t    
%%c                     	 |                                  }n# t          $ r Y dS w xY w|                    |                                            dS r  )r  rh  rollbackr  r  s     rc   session_rollbackzDatabase.session_rollbacka  sa    	&&((CC 	 	 	55	4..00111tr  c                 4    t          | j        j                  S r_   )re  r  r  r  s    rc   r  zDatabase.in_transactioni  s    DK,---re   c                 D    | j         j                            |           d S r_   )r  r  r  )ra   r  s     rc   push_transactionzDatabase.push_transactionl  s!     ''44444re   c                 >    | j         j                                        S r_   )r  r  r  r  s    rc   r  zDatabase.pop_transactiono  s    {'++---re   c                 4    t          | j        j                  S r_   )r   r  r  r  s    rc   transaction_depthzDatabase.transaction_depthr  s    4;+,,,re   c                 B    | j         j        r| j         j        d         S d S Nrt  )r  r  r  s    rc   top_transactionzDatabase.top_transactionu  s)    ;# 	0;+B//	0 	0re   c                 "    t          | g|R i |S r_   r  r  s      rc   r  zDatabase.atomicy  r  re   c                      t          |           S r_   r  r  s    rc   r  zDatabase.manual_commit|  r  re   c                 "    t          | g|R i |S r_   r  r  s      rc   r  zDatabase.transaction  r  re   c                      t          |           S r_   r  r  s    rc   r  zDatabase.savepoint  r  re   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    rc   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    rc   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    rc   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 r_   )r    r  )ra   ry  rz  r|  r  s        rc   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'  r;  r  
get_tables)ra   r;  r  rA  s       rc   table_existszDatabase.table_exists  sD    J 	(E/J['FT__F_;;;;re   c                     t           r_   r^  )ra   r  s     rc   r  zDatabase.get_tables  r`  re   c                     t           r_   r^  ra   r(  r  s      rc   get_indexeszDatabase.get_indexes  r`  re   c                     t           r_   r^  r  s      rc   get_columnszDatabase.get_columns  r`  re   c                     t           r_   r^  r  s      rc   get_primary_keyszDatabase.get_primary_keys  r`  re   c                     t           r_   r^  r  s      rc   get_foreign_keyszDatabase.get_foreign_keys  r`  re   c                     t           r_   r^  )ra   seqs     rc   sequence_existszDatabase.sequence_exists  r`  re   c                 D    t          |          D ]} |j        di | d S r  )sort_modelscreate_table)ra   modelsoptionsrA  s       rc   create_tableszDatabase.create_tables  s?     (( 	* 	*EE))))))	* 	*re   c                 ^    t          t          |                    D ]} |j        di | d S r  )r  r!  
drop_table)ra   r#  r  rA  s       rc   drop_tableszDatabase.drop_tables  sG    k&1122 	' 	'EE&&v&&&&	' 	're   c                     t           r_   r^  ra   	date_part
date_fields      rc   extract_datezDatabase.extract_date  r`  re   c                     t           r_   r^  r*  s      rc   truncate_datezDatabase.truncate_date  r`  re   c                     t           r_   r^  ra   r,  s     rc   to_timestampzDatabase.to_timestamp  r`  re   c                     t           r_   r^  r1  s     rc   from_timestampzDatabase.from_timestamp  r`  re   c                 4    t                                           S r_   )r5   randomr  s    rc   r6  zDatabase.random  s    yy{{re   c                 @    |D ]}|                     | ||           d S )N)	bind_refsbind_backrefs)r  )ra   r#  r8  r9  rA  s        rc   r  zDatabase.bind  s:     	O 	OEJJtyJNNNN	O 	Ore   c                 &    t          || ||          S r_   _BoundModelsContext)ra   r#  r8  r9  s       rc   r  zDatabase.bind_ctx  s    "64MJJJre   c                     |                     t                                          t          d                                        t          d                              S )N0r)  rP   r  rQ   r5  r8  s     rc   get_noop_selectzDatabase.get_noop_select  s@    wwvxx''C1177CAABBBre   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   rc   r  rC    r  re   r  r  r  r  s   ` rc   rA   zDatabase.Model  r  re   )TFNNNTr  r  r_   TT)Rrf   rg   rh   r#   r  r  r  r4  r[  r  rv  ru  r  r7  r8  r9  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  rL  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  r%  r(  r-  r/  r2  r4  r6  r  r  r@  r  rA   r`   re   rc   r$   r$   [  sM       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C C C   X  re   r$   c                 8      fd} fd}t          ||          S )Nc                 .    |                                S r_   pragmar  s    rc   r~  z__pragma__.<locals>.__get__  s    {{4   re   c                 0    |                      |          S r_   rK  )ra   r~   r  s     rc   __set__z__pragma__.<locals>.__set__  s    {{4'''re   )r  )r  r~  rN  s   `  rc   
__pragma__rO    sE    ! ! ! ! !( ( ( ( (GW%%%re   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 fdZdJ 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+dKd$Z,dKd%Z-dLd&Z.dLd'Z/	 	 dMd(Z0dMd)Z1dKd*Z2dKd+Z3dLd,Z4dLd-Z5d. Z6d/ Z7d0 Z8d1 Z9d2 Z:d3 Z;d4 Z<d5 Z=d6 Z>d7 Z?dLd8Z@d9 ZAdLd:ZBd; ZCd< ZDdLd=ZEdLd>ZFdLd?ZGdLd@ZHdLdAZIdLdBZJdC ZKdD ZLdE ZMdF ZNdG ZOdH ZPdI ZQ xZRS )NrR   )r  r  r!  r)  r"  r/  GLOBr  )r  r  Trt  Fc                    |                     dd          | _         t          t          |           j        |g|R i | i | _        i | _        i | _        i | _        g | _	        t                      | _        i | _        |                     t          dd           |                     t          dd           | j        dk    | _        d S )Npragmasr`   r+  rj   
date_trunc)r      r   )r  _pragmasr  rR   r  _aggregates_collations
_functions_window_functions_table_functionsrP  _extensions	_attachedregister_functionr   r   r  r  )ra   r  r  r  r  s       rc   r  zSqliteDatabase.__init__  s    

9b11,nd##,XGGGGGGG!# "550+qAAA1<CCC"1Z?re   Nr<  c                 D   ||| _         t          | j         t                    r+t          | j                                                   | _         |&t
          dk     rt          j        d           || _        || _	         t          t          |           j        |fi | d S )N)r   #   r   z.RETURNING clause requires Sqlite 3.35 or newer)rV  rv   r  r`  r  __sqlite_version__r   r   r  _timeoutr  rR   r  )ra   r  rS  timeoutr  r  r  s         rc   r  zSqliteDatabase.init  s    #DMdmT** 	8 !4!4!6!677DM'!J..NOOO$4D!(nd##(<<V<<<<<re   c                     d S r_   r`   r  s     rc   r  z"SqliteDatabase._set_server_version  r  re   c                     t           t          d          t          j        | j        f| j        d d| j        }	 |                     |           n#  |                                  xY w|S )NzSQLite driver not installed!)rc  isolation_level)sqlite3r8   r  r  rb  r  _add_conn_hooksr  r  s     rc   r  zSqliteDatabase._connect  s    ?&'EFFFt} Ldm/3L L7;7JL L	  &&&&	JJLLLs   A A)c                    | j         r|                     |           | j        r|                     |           |                     |           |                     |           |                     |           | j        dk    r|                     |           | j	        r| j	        D ]}|
                    |           | j        r|                     |           d S d S )N)r      r   )r]  _attach_databasesrV  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsr[  registerr\  _load_extensions)ra   r  table_functions      rc   rh  zSqliteDatabase._add_conn_hooks  s    > 	)""4(((= 	$d###d###d###T"""*,,''---  	."&"7 . .''---- 	(!!$'''''	( 	(re   c                     |                                 }| j        D ]!\  }}|                    d|d|d           "|                                 d S )NzPRAGMA z = ;)r   rV  r  r  )ra   r  r   rL  r~   s        rc   rl  zSqliteDatabase._set_pragmas-  s[    !] 	@ 	@MFENNN>????re   c                     |                                 }| j                                        D ]!\  }}|                    d|d|d           "|                                 d S )NATTACH DATABASE "" AS "r  )r   r]  r  r  r  )ra   r  r   r  rM  s        rc   rk  z SqliteDatabase._attach_databases3  sg    ,,.. 	H 	HHD"NNNRRRFGGGGre   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  rV  r`  r  r  r  fetchone)ra   r  r~   	permanentr  r)  rS  r0  s           rc   rL  zSqliteDatabase.pragma9  s    %vvss+CC  7ejq))C 6t}233$ $W]]__ 5 5 	PNOOOs##,,.. 	q6M	 	re   
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 r_   )rb  r  s    rc   rc  zSqliteDatabase.timeoutV  s
    }re   c                     | j         |k    rd S || _         |                                 s|                     d|dz  z             d S d S )NzPRAGMA busy_timeout=%d;i  )rb  r  r  )ra   secondss     rc   rc  zSqliteDatabase.timeoutZ  s`    =G##F~~ 	K 6'D.IJJJJJ	K 	Kre   c                 x    | j                                         D ]\  }\  }}|                    |||            d S r_   )rW  r  create_aggregatera   r  r  klass
num_paramss        rc   rm  zSqliteDatabase._load_aggregatese  sO    )-)9)?)?)A)A 	; 	;%D%5*!!$
E::::	; 	;re   c                 p    | j                                         D ]\  }}|                    ||           d S r_   )rX  r  create_collation)ra   r  r  r5   s       rc   rn  zSqliteDatabase._load_collationsi  sG    (..00 	, 	,HD"!!$++++	, 	,re   c                 |    | j                                         D ]!\  }\  }}}|rd|ini } |j        |||fi | "d S )Ndeterministic)rY  r  create_function)ra   r  r  r5   n_paramsr  r  s          rc   ro  zSqliteDatabase._load_functionsm  sk    37?3H3H3J3J 	? 	?/D/2x9FNo}55BF D x>>v>>>>	? 	?re   c                 x    | j                                         D ]\  }\  }}|                    |||            d S r_   )rZ  r  create_window_functionr  s        rc   rp  z%SqliteDatabase._load_window_functionsr  sS    )-)?)E)E)G)G 	A 	A%D%5*''j%@@@@	A 	Are   c                     ||f| j         |p|j                                        <   |                                 s)|                     |                                            d S d S r_   )rW  rf   rl  r  rm  r  ra   r  r  r  s       rc   register_aggregatez!SqliteDatabase.register_aggregatev  sg    <A:;N7!5!5!7!78~~ 	5!!$//"3"344444	5 	5re   c                       fd}|S )Nc                 6                         |            | S r_   )r  r  r  r  ra   s    rc   r3  z+SqliteDatabase.aggregate.<locals>.decorator|  s     ##E4<<<Lre   r`   ra   r  r  r3  s   ``` rc   	aggregatezSqliteDatabase.aggregate{  0    	 	 	 	 	 	 	 re   c                     p|j         fd}||_        || j        <   |                                 s)|                     |                                            d S d S )Nc                  N    | t          dz            fz   }t          |          S )Nz
collate %s)rQ   ru  )r  r  r  s     rc   
_collationz5SqliteDatabase.register_collation.<locals>._collation  s+    #lT&9":":!<<KK(((re   )rf   r^  rX  r  rn  r  )ra   r5   r  r  s     ` rc   register_collationz!SqliteDatabase.register_collation  s~    "r{	) 	) 	) 	) 	) "!#~~ 	5!!$//"3"344444	5 	5re   c                       fd}|S )Nc                 4                         |            | S r_   )r  )r5   r  ra   s    rc   r3  z+SqliteDatabase.collation.<locals>.decorator  s    ##B---Ire   r`   ra   r  r3  s   `` rc   r^  zSqliteDatabase.collation  s*    	 	 	 	 	 	 re   c                     |||f| j         |p|j        <   |                                 s)|                     |                                            d S d S r_   )rY  rf   r  ro  r  )ra   r5   r  r  r  s        rc   r^  z SqliteDatabase.register_function  s\    02J/N+,~~ 	4  !2!233333	4 	4re   c                       fd}|S )Nc                 8                         |            | S r_   )r^  )r5   r  r  r  ra   s    rc   r3  z&SqliteDatabase.func.<locals>.decorator  s"    ""2tZGGGIre   r`   )ra   r  r  r  r3  s   ```` rc   r>  zSqliteDatabase.func  s6    	 	 	 	 	 	 	 	 re   c                     |p|j                                         }||f| j        |<   |                                 s)|                     |                                            d S d S r_   )rf   rl  rZ  r  rp  r  r  s       rc   register_window_functionz'SqliteDatabase.register_window_function  sl    -u~++--(-z':t$~~ 	;''(9(9:::::	; 	;re   c                       fd}|S )Nc                 6                         |            | S r_   )r  r  s    rc   r3  z1SqliteDatabase.window_function.<locals>.decorator  s     ))%zBBBLre   r`   r  s   ``` rc   window_functionzSqliteDatabase.window_function  r  re   c                     |||_         | j                            |           |                                 s)|                    |                                            d S d S r_   )r  r[  r  r  rq  r  )ra   r  r  s      rc   register_table_functionz&SqliteDatabase.register_table_function  sd    EJ$$U+++~~ 	.NN4??,,-----	. 	.re   c                       fd}|S )Nc                 4                         |            | S r_   )r  )r  r  ra   s    rc   r3  z0SqliteDatabase.table_function.<locals>.decorator  s    ((555Lre   r`   r  s   `` rc   rs  zSqliteDatabase.table_function  s*    	 	 	 	 	 	 re   c                     | j         |= d S r_   )rW  r  s     rc   unregister_aggregatez#SqliteDatabase.unregister_aggregate      T"""re   c                     | j         |= d S r_   )rX  r  s     rc   unregister_collationz#SqliteDatabase.unregister_collation  r  re   c                     | j         |= d S r_   )rY  r  s     rc   unregister_functionz"SqliteDatabase.unregister_function  s    OD!!!re   c                     | j         |= d S r_   )rZ  r  s     rc   unregister_window_functionz)SqliteDatabase.unregister_window_function  s    "4(((re   c                     t          | j                  D ]\  }}|j        |k    r ndS | j                            |           dS rt  )r   r[  r  r  )ra   r  r  r  s       rc   unregister_table_functionz(SqliteDatabase.unregister_table_function  sZ    #D$9:: 	 	JCzT!! " 5!!#&&&tre   c                 n    |                     d           | j        D ]}|                    |           d S r@  )enable_load_extensionr\  load_extension)ra   r  	extensions      rc   rr  zSqliteDatabase._load_extensions  sI    ""4((() 	+ 	+I	****	+ 	+re   c                     | j                             |           |                                 s@|                                 }|                    d           |                    |           d S d S r@  )r\  r  r  r  r  r  )ra   r  r  s      rc   r  zSqliteDatabase.load_extension  sr    Y'''~~ 	+??$$D&&t,,,	*****	+ 	+re   c                 :    | j                             |           d S r_   )r\  remove)ra   r  s     rc   unload_extensionzSqliteDatabase.unload_extension  s    	*****re   c                     || j         v r%| j         |         |k    rdS t          d|z            || j         |<   |                                 s|                     d|d|d           dS )NFzschema "%s" already attached.rw  rx  r  T)r]  rF   r  r  )ra   filenamer  s      rc   attachzSqliteDatabase.attach  s    4>!!~d#x//u"#BT#IJJJ't~~ 	PxxxNOOOtre   c                     || j         vrdS | j         |= |                                 s|                     d|z             dS )NFzDETACH DATABASE "%s"T)r]  r  r  r  s     rc   detachzSqliteDatabase.detach  sO    t~%%5N4 ~~ 	<3d:;;;tre   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  rh  r   	TypeErrorr  s      rc   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r_   r  r   r   r  s     rc   r  zSqliteDatabase.rows_affected  ;    	*?" 	* 	* 	*=))))	*   	 ""c                 B    |rd|z  nd}|                      |           d S )NzBEGIN %sr  r  )ra   	lock_typer9  s      rc   r  zSqliteDatabase.begin  s0    .7DJ**W	#####re   c                     t           5  | j        j                                        cd d d            S # 1 swxY w Y   d S r_   )r  r  r  r  r  s    rc   r  zSqliteDatabase.commit  s    " 	- 	-;#**,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   377c                     t           5  | j        j                                        cd d d            S # 1 swxY w Y   d S r_   )r  r  r  r  r  s    rc   r  zSqliteDatabase.rollback  s    " 	/ 	/;#,,..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r  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`   r/  s     rc   rY  z-SqliteDatabase.get_tables.<locals>.<listcomp>  s    222222re   r  fetchall)ra   r  r   s      rc   r  zSqliteDatabase.get_tables
  sR    !6!! #9;A#BCMO O22 1 12222re   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{  r/  s     rc   rY  z,SqliteDatabase.get_views.<locals>.<listcomp>  s    OOOsc"OOOre   )viewr  )ra   r  r)  s      rc   	get_viewszSqliteDatabase.get_views  s:    #)#3V5OOd.>.>sI.N.NOOOOre   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 namerx  PRAGMA "z".index_list("")r   rj   z".index_info("c                     g | ]
}|d          S )rj   r`   r/  s     rc   rY  z.SqliteDatabase.get_indexes.<locals>.<listcomp>+  s    (M(M(MCQ(M(M(Mre   c           	      R    g | ]#}t          ||         |         |v           $S r`   ru  )rV  r  index_columnsindex_to_sqlr(  unique_indexess     rc   rY  z.SqliteDatabase.get_indexes.<locals>.<listcomp>-  sS     . . .  T"d#& . . .re   )r  r  r  rP  r   r  r  )ra   r(  r  r;  r   r0  r  	is_uniquer:  r  r  r  s    `       @@@rc   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*%%. . . . . . . |,,. . . 	.re   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   rj   r   r<  r;  )rv  re  )rV  r  r(  s     rc   rY  z.SqliteDatabase.get_columns.<locals>.<listcomp>9  sW     , , , qtQqTqt8T!A$ZZ!MM , , ,re   r  ra   r(  r  r   s    `  rc   r  zSqliteDatabase.get_columns6  si    !!!#)#3V#3#3UUU#< = =, , , ,**, , , 	,re   c                     |                      d|pdd|d          }d t          d |                                          D             S )Nr  r  r  r  c                     g | ]
}|d          S ri  r`   r/  s     rc   rY  z3SqliteDatabase.get_primary_keys.<locals>.<listcomp>?  s    MMM3AMMMre   c                     | d         S r  r`   )r  s    rc   rx   z1SqliteDatabase.get_primary_keys.<locals>.<lambda>?  s
    1R5 re   r  r6  r  r  s       rc   r  zSqliteDatabase.get_primary_keys<  s]    !!!#)#3V#3#3UUU#< = =MM&&//:K:K"L"LMMMMre   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 )r   rj   r;  rx  rV  r0  r(  s     rc   rY  z3SqliteDatabase.get_foreign_keys.<locals>.<listcomp>D  C     . . . #3q63q63q65AA . . .re   r  r  s    `  rc   r  zSqliteDatabase.get_foreign_keysA  si    !!!#)#3V#3#3UUU#< = =. . . .!??,,. . . 	.re   c                     t           j        S r_   )rg  Binaryr  s    rc   get_binary_typezSqliteDatabase.get_binary_typeG  s
    ~re   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  rQ   upperra   r  r;  r  s       rc   r  z!SqliteDatabase.conflict_statementJ  sk    0;0CK$**,,, 	Ef$999~(;(A(A(C(CCDDD	E 	E99re   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)r      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  r>  r  r  r  r  r  r  r  rl  rQ   r  )ra   ocr;  r  s       rc   r  zSqliteDatabase.conflict_updateO  s=   ++bj")R5H') * * ,  6 7 7 7 (*z9!!###r 	f$===FY/000 
	@BL 
	@ * + + + $ 	@ D E E E$ 	@ ? @ @ @ --b%888re   c                 F    t                               ||t                    S N)r0  )r5   r+  r   r*  s      rc   r-  zSqliteDatabase.extract_datek  s    ||Iz|DDDre   c                 F    t                               ||t                    S r  )r5   rT  simple_date_timer*  s      rc   r/  zSqliteDatabase.truncate_daten  s$    }}Y
*:  < < 	<re   c                 ^    t                               d|                              d          S )NrK  integer)r5   r   r[  r1  s     rc   r2  zSqliteDatabase.to_timestampr  s$    {{4,,11)<<<re   c                 8    t                               |d          S )N	unixepoch)r5   r   r1  s     rc   r4  zSqliteDatabase.from_timestampu  s    {{:{333re   )Nr<  Nr  r_   )Nrt  N)Srf   rg   rh   r  r  r,  r+  r-  r  r  r7  r9  ra  r  rH  r  r  r  r  rh  rl  rk  r{  rL  rO  r~  r  r  r  r  r  r  r  r  r  r  r  r  rc  r  rm  rn  ro  rp  r  r  r  r^  r^  r>  r  r  r  rs  r  r  r  r  r  rr  r  r  r  r  r!  r  r  r  r  r  r  r  r  r  r  r  r  r  r-  r/  r2  r4  r  r  s   @rc   rR   rR     s       :)	+I
 K  J I'NN@ @ @ @ @= = = = = =  
 
 
( ( (      !)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   ; ; ; ;   . . . .   $ $ $$ $ $# # #* * *  + + +
+ + ++ + +	 	 	     * * *$ $ $ $- - -/ / /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 4re   rR   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d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# xZ$S )*rG   SERIAL	BIGSERIALBYTEABOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONr/  )	r  r  r   r!  r%  r&  r)  r/  r0  r  z~*)r  r  rK  TFNc                 t    || _         || _        || _         t          t          |           j        |fi | d S r_   )_register_unicode	_encoding_isolation_levelr  rG   r  )ra   r  register_unicodeencodingrf  r  r  s         rc   r  zPostgresqlDatabase.init  sF    !1! /, $'',X@@@@@@@re   c                 D   t           t          d          | j                                        }| 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                   | j        r|                    | j                   d|_        |S )NzPostgres driver not installed!zpostgresql://dsndbnameTr`   )psycopg2r8   r  rL  r  r|  
setdefaultr  r  pg_extensionsregister_typeUNICODEUNICODEARRAYr  set_client_encodingr  set_isolation_levelr  )ra   rN  r  s      rc   r  zPostgresqlDatabase._connect  s   &'GHHH $))++=##O44 	7eT]3333h666))&))! 	J'(=tDDD'(BDIII> 	5$$T^444  	<$$T%:;;;re   c                 F    |j         | _         | j         dk    r	d| _        d S d S )Nia T)r  rE  r  s     rc   r  z&PostgresqlDatabase._set_server_version  s1    "1%''%)D""" ('re   c                 z    | j         j        rdS | j         j                                        }|t          j        k     S rh  )r  r  r  get_transaction_statusr   TRANSACTION_STATUS_INERROR)ra   
txn_statuss     rc   r  z'PostgresqlDatabase.is_connection_usable  s:    ; 	5
 [%<<>>
MDDDre   c                     	 |t           j        k    r|n|d         d         S # t          t          t          f$ r Y d S w xY wr  )r  r  rh  r   r  r  s      rc   r!  z!PostgresqlDatabase.last_insert_id  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r_   r  r  s     rc   r  z PostgresqlDatabase.rows_affected  r  r  c                     |                                  r|                                  |r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  )ra   rf  r  s      rc   r  zPostgresqlDatabase.begin  s    >> 	LLNNN 	9OKDDD" 	( 	(KKMM!!$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   (A//A36A3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`   rV  r(  s     rc   rY  z1PostgresqlDatabase.get_tables.<locals>.<listcomp>  s    666&%666re   r  ra   r  r;  r   s       rc   r  zPostgresqlDatabase.get_tables  sD    <!!%&*<H)>??66FOO$5$56666re   c                 t    d}|                      ||pdf          }d |                                D             S )Nz\SELECT viewname, definition FROM pg_catalog.pg_views WHERE schemaname = %s ORDER BY viewnamer/  c                 Z    g | ](\  }}t          ||                    d                     )S )z 	;)r{  strip)rV  	view_namer)  s      rc   rY  z0PostgresqlDatabase.get_views.<locals>.<listcomp>  sB     ; ; ;$Y Y		&(9(9:: ; ; ;re   r  r2  s       rc   r  zPostgresqlDatabase.get_views  sQ    ;!!%&*<H)>??; ;(.(9(9; ; ; 	;re   c                 ~    d}|                      |d|pdf          }fd|                                D             S )Na  
            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_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)
            WHERE t.relname = %s AND t.relkind = %s AND idxs.schemaname = %s
            ORDER BY idx.indisunique DESC, i.relname;r  r/  c           	          g | ]@\  }}}}t          ||                    d           |                    d          |          AS )z ;,)ru  rstripr   )rV  r  r)  r  r  r(  s        rc   rY  z2PostgresqlDatabase.get_indexes.<locals>.<listcomp>  sd     H H H1D#y' dCJJt$4$4gmmC6H6H'0 0 H H Hre   r  ra   r(  r  r;  r   s    `   rc   r  zPostgresqlDatabase.get_indexes  sj    9 !!%%f6H)IJJH H H H5;__5F5FH H H 	Hre   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_positionr/  c           
      N    g | ]!\  }}}}t          |||d k    |v |          "S YESrv  rV  r  r  r   dfpksr(  s        rc   rY  z2PostgresqlDatabase.get_columns.<locals>.<listcomp>  K     = = =&D$B tRUBOO = = =re   r  rP  r  r  )ra   r(  r  r;  r   rC  s    `   @rc   r  zPostgresqlDatabase.get_columns  s    )
 !!%%1C8)DEE$''v6677= = = = =*0//*;*;= = = 	=re   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 KEYr/  c                     g | ]\  }|S r`   r`   )rV  pks     rc   rY  z7PostgresqlDatabase.get_primary_keys.<locals>.<listcomp>  s    000sr000re   r  )ra   r(  r  r;  ctyper   s         rc   r  z#PostgresqlDatabase.get_primary_keys  sO    
( !!%%8J()KLL00foo//0000re   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 = %sr/  c                 X    g | ]&}t          |d          |d         |d                   'S )r   r   rj   r  r  s     rc   rY  z7PostgresqlDatabase.get_foreign_keys.<locals>.<listcomp>  r  re   r  )ra   r(  r  r)  r   s    `   rc   r  z#PostgresqlDatabase.get_foreign_keys  s`    (  !!#v/A'BCC. . . .!??,,. . . 	.re   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  re  r|  )ra   sequenceress      rc   r  z"PostgresqlDatabase.sequence_exists"  s@      " %-;	0 0
 CLLNN1%&&&re   c                     t           j        S r_   )r  r  r  s    rc   r  z"PostgresqlDatabase.get_binary_type*  s
    re   c                     d S r_   r`   r  s      rc   r  z%PostgresqlDatabase.conflict_statement-      re   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`   r8  r  s     rc   rY  z6PostgresqlDatabase.conflict_update.<locals>.<listcomp>5  sA     /4 /4 /4 $.c:#>#>GF3KKKC/4 /4 /4re   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  rQ   r  r  r.  ru  r  r  r  r  r  )ra   r  r;  r  rp  s        rc   r  z"PostgresqlDatabase.conflict_update0  sU   ')z9!!###r***''(E" 6- /4 /4!2/4 /4 /4 5 5 6 6 6 LL\**+++E??" 	@(** ) * * *  	@BL 	@ ) * * * % 	@)@ 	@ ? @ @ @ --b%888re   c                 p    t                               t          |t          d          |f                    S NFROMr5   EXTRACTru  rQ   r*  s      rc   r-  zPostgresqlDatabase.extract_dateI  s)    zz(Is6{{J#GHHIIIre   c                 8    t                               ||          S r_   )r5   
DATE_TRUNCr*  s      rc   r/  z PostgresqlDatabase.truncate_dateL  s    }}Y
333re   c                 .    |                      d|          S )NEPOCH)r-  r1  s     rc   r2  zPostgresqlDatabase.to_timestampO  s      *555re   c                 6    t                               |          S r_   )r5   r2  r1  s     rc   r4  z!PostgresqlDatabase.from_timestampR  s    z***re   c                     |                     t                                          t          d                                        t          d                              S )Nr>  falser?  r8  s     rc   r@  z"PostgresqlDatabase.get_noop_selectV  s@    wwvxx''C1177GEEFFFre   c                 6    |                      d|z             d S )Nzset time zone "%s";r  )ra   r   s     rc   set_time_zonez PostgresqlDatabase.set_time_zoneY  s"    .9:::::re   r  r_   )%rf   rg   rh   r  r  r4  rw  ru  r  r  r  rE  rG  r  r  r  r  r!  r  r  r  r  r  r  r  r  r  r  r  r  r-  r/  r2  r4  r@  rb  r  r  s   @rc   rG   rG   y  s$       $	 	K  D11JE"8JNI=A!A A A A A A  .* * *
E E E   * * *( ( ( (7 7 7 7; ; ; ;H H H H(	= 	= 	= 	=1 1 1 1 . . . .*' ' '    9 9 92J J J4 4 46 6 6+ + +G G G; ; ; ; ; ; ;re   rG   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 ).rC   zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTr!  r  r  r+  zVARCHAR(40)zVARBINARY(16))r  r  r!  r&  r)  r+  r/  r0  zLIKE BINARYr  zREGEXP BINARYr  r   )r  r  r  r  r   rK  z``Tl    FPIPES_AS_CONCATc                     d| j         dd}|                    |           d|v rt          r|                    d          |d<    t	          t
          |           j        |fi | d S )NrQ  T)charsetsql_modeuse_unicodepasswordpasswd)rg  r   mysql_passwdr  r  rC   r  )ra   r  r  rN  r  s       rc   r  zMySQLDatabase.initx  s    ! ! 	fL%zz*55F8'mT""';;F;;;;;re   c                 n    t           t          d          t          j        d| j        dd| j        }|S )NzMySQL driver not installed!T)rM  r  r`   )mysqlr8   r  r  r  r  s     rc   r  zMySQLDatabase._connect  sG    =&'DEEE} 4$ 4 4#24 4re   c                     	 |j         }n$# t          $ r |                                }Y nw xY w|                     |          | _         d S r_   )r  r   get_server_info_extract_server_version)ra   r  version_raws      rc   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\.\d+\.\d+)c              3   4   K   | ]}t          |          V  d S r_   )r   )rV  nums     rc   rr  z8MySQLDatabase._extract_server_version.<locals>.<genexpr>  s(      NNcSNNNNNNre   r   rR  z'Unable to determine MySQL version: "%s"r   )	rv   ra  rl  rD  searchgroupsr   r   r   )ra   version	match_objs      rc   rp  z%MySQLDatabase._extract_server_version  s    gu%% 	N--//g	"4g>>II	"3W==I NNY-=-=-?-?-B-H-H-M-MNNNNNN?'IJJJyre   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   rC  r`   r  T)r  r  r  r  r  r{  r#  )ra   r  r  s      rc   r  z"MySQLDatabase.is_connection_usable  s    ; 	5{4   	"1%**	4      uuts   
A 
AAc                 ,    |                     d          S )Nz() VALUES ()r  r8  s     rc   r  z#MySQLDatabase.default_values_insert  s    {{>***re   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  )ra   rf  curss      rc   r  zMySQLDatabase.begin  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`   r1  s     rc   rY  z,MySQLDatabase.get_tables.<locals>.<listcomp>  s    GGG&%GGGre   )VIEWr  )ra   r  r;  s      rc   r  zMySQLDatabase.get_tables  s0    ' HGD$4$4UI$F$FGGGGre   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  r/  s     rc   rY  z+MySQLDatabase.get_views.<locals>.<listcomp>  s    @@@sc"@@@re   r  r2  s       rc   r  zMySQLDatabase.get_views  s=    G !!%((@@foo.?.?@@@@re   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   rj   r;  c           	      F    g | ]}t          |d |         |v           S r_   r  )rV  r  indexesr(  r.  s     rc   rY  z-MySQLDatabase.get_indexes.<locals>.<listcomp>  sA     % % % dD'$-OO % % %re   )r  rP  r  r  r  r  )ra   r(  r  r   r0  r  r.  s    `   @@rc   r  zMySQLDatabase.get_indexes  s    !!"85"@AA??$$ 	+ 	+Cq6 #

3q6"""s1vr***CFO""3q6****% % % % % %#% % % 	%re   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@  rA  s        rc   rY  z-MySQLDatabase.get_columns.<locals>.<listcomp>  rD  re   rE  )ra   r(  r  r)  r   rC  s    `   @rc   r  zMySQLDatabase.get_columns  sy    )
 !!#x00$''..//= = = = =*0//*;*;= = = 	=re   c                     |                      d|z            }d t          d |                                          D             S )Nr  c                     g | ]
}|d          S )r;  r`   r/  s     rc   rY  z2MySQLDatabase.get_primary_keys.<locals>.<listcomp>  s.     L L L3A L L Lre   c                     | d         dk    S )Nrj   PRIMARYr`   )r0  s    rc   rx   z0MySQLDatabase.get_primary_keys.<locals>.<lambda>  s    3q6Y#6 re   r  r  s       rc   r  zMySQLDatabase.get_primary_keys  sZ    !!"85"@AAL L668I8IJJL L L 	Lre   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  )rV  r  ry  rz  r(  s       rc   rY  z2MySQLDatabase.get_foreign_keys.<locals>.<listcomp>  sC     F F F/
K vz;FFF F Fre   r  r;  s    `   rc   r  zMySQLDatabase.get_foreign_keys  s`    : !!%%22F F F F39??3D3DF F F 	Fre   c                     t           j        S r_   )rm  r  r  s    rc   r  zMySQLDatabase.get_binary_type  s
    |re   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  rQ   r  r  s       rc   r  z MySQLDatabase.conflict_statement  s    "*FF$**,,Yy>>!x'''x J K K K  re   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  r   r   r   Fr  zON DUPLICATE KEY UPDATE)r  r  r  r  r  r  r5   VALUEVALUESrg  ru  rQ   r  r  r  rv   re  r9  r   r(  r2   r  rY   r3  )ra   r  r;  r  rx  VALUE_FNr  entityr  r  rX  s              rc   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 "!Z00 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 	6re   c                     t                               t          t          |          t          d          |f                    S rV  rX  r*  s      rc   r-  zMySQLDatabase.extract_date+  s/    zz(C	NNCKK#LMMNNNre   c                 \    t                               |t          |         t                    S r  )r5   DATE_FORMAT__mysql_date_trunc__r  r*  s      rc   r/  zMySQLDatabase.truncate_date.  s*    ~~j*>y*I+;  = = 	=re   c                 6    t                               |          S r_   )r5   UNIX_TIMESTAMPr1  s     rc   r2  zMySQLDatabase.to_timestamp2  s      ,,,re   c                 6    t                               |          S r_   )r5   FROM_UNIXTIMEr1  s     rc   r4  zMySQLDatabase.from_timestamp5  s    
+++re   c                 4    t                                           S r_   )r5   randr  s    rc   r6  zMySQLDatabase.random8  s    wwyyre   c                 ,    |                     d          S )NzDO 0r  r8  s     rc   r@  zMySQLDatabase.get_noop_select;  s    {{6"""re   r_   )&rf   rg   rh   r  r  r4  r[  rx  ru  r  r8  r9  rE  rF  rg  r  r  r  rp  r  r  r  r  r  r  r  r  r  r  r  r  r-  r/  r2  r4  r6  r@  r  r  s   @rc   rC   rC   ]  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= = =- - -, , ,  # # # # # # #re   rC   c                   &    e Zd Zd Zd Zd Zd ZdS )r  c                     || _         d S r_   r  r  s     rc   r  z_manual.__init__C  s    re   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 r_   )r  rM  r  s     rc   r  z_manual.__call__.<locals>.innerG  s    !! + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rc   r  z_manual.__call__F  r  re   c                     | j                                         }|$t          |t                    st	          d          | j                             |            d S )Nz?Cannot enter manual commit block while a transaction is active.)rM  r   rv   r  r  r  )ra   tops     rc   r  z_manual.__enter__M  s[    g%%''?:c7#;#;? 6 7 7 7  &&&&&re   c                 Z    | j                                         | urt          d          d S )Nz>Transaction stack corrupted while exiting manual commit block.)rM  r  r  r  s       rc   r  z_manual.__exit__T  s:    7""$$D00 4 5 5 5 10re   Nr  r`   re   rc   r  r  B  sP            ' ' '5 5 5 5 5re   r  c                   &    e Zd Zd Zd Zd Zd ZdS )r  c                 &    || _         ||f| _        d S r_   )rM  _transaction_argsra   rM  r  r  s       rc   r  z_atomic.__init__[  s    "&re   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 r_   )r  r  rM  r  r  r  r  r5   ra   s       rc   r  z_atomic.__call__.<locals>.inner`  s    )DAq*1***** + +r4*6**+ + + + + + + + + + + + + + + + + +   6::r   r  s   `` rc   r  z_atomic.__call___  9    	r	+ 	+ 	+ 	+ 	+ 
	+ re   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.)rM  r  r  r  _helperrv   r   r  r  r  r  r  s      rc   r  z_atomic.__enter__g  s    7$$&&!++1LD&.47.???DLL//117;; 	/ 3 4 4 4  7,,..DL|%%'''re   c                 :    | j                             |||          S r_   )r  r  r  s       rc   r  z_atomic.__exit__r  s    |$$Xw???re   Nr  r`   re   rc   r  r  Z  sU        0 0 0  	( 	( 	(@ @ @ @ @re   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 r_   )rM  _begin_argsr  s       rc   r  z_transaction.__init__w  s     &>re   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 r_   )r  r  rM  r  s       rc   r  z$_transaction.__call__.<locals>.inner|  s    #DAqdg////Q// + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rc   r  z_transaction.__call__{  r  re   c                 >    | j         \  }} | j        j        |i | d S r_   )r  rM  r  r  s      rc   _beginz_transaction._begin  s-    'ft&v&&&&&re   Tc                 h    | j                                          |r|                                  d S d S r_   )rM  r  r  ra   r  s     rc   r  z_transaction.commit  s7     	KKMMMMM	 	re   c                 h    | j                                          |r|                                  d S d S r_   )rM  r  r  r  s     rc   r  z_transaction.rollback  s9     	KKMMMMM	 	re   c                     | j                                         dk    r|                                  | j                             |            | S r  )rM  r  r  r  r  s    rc   r  z_transaction.__enter__  sC    7$$&&!++KKMMM  &&&re   c                 T   | j                                         }	 |r|dk    r|                     d           n8|dk    r2	 |                     d           n#  |                     d            xY w| j                                          d S # | j                                          w xY wNr   F)rM  r  r  r  r  )ra   r  r   r!  depths        rc   r  z_transaction.__exit__  s    ))++
	& EQJJe$$$$!KK&&&&MM%(((G##%%%%%DG##%%%%s#   $B  A B A..B B'Nrm  
rf   rg   rh   r  r  r  r  r  r  r  r`   re   rc   r  r  v  s        * * *  ' ' '   
   
  & & & & &re   r  c                   <    e Zd Zd
dZd Zd ZddZd Zd Zd	 Z	dS )r  Nc                     || _         |pdt          j                    j        z   | _        | j                            | j         j                  | _        d S )Nrq   )rM  uuiduuid4hexsidrU  r[  
quoted_sid)ra   rM  r  s      rc   r  z_savepoint.__init__  s@    0#
 00(--66re   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 r_   )r  rM  r  s     rc   r  z"_savepoint.__call__.<locals>.inner  s    DG$$ + +r4*6**+ + + + + + + + + + + + + + + + + +r  r   r  s   `` rc   r  z_savepoint.__call__  r  re   c                 J    | j                             d| j        z             d S )NzSAVEPOINT %s;rM  r  r  r  s    rc   r  z_savepoint._begin  s%    Odo=>>>>>re   Tc                 z    | j                             d| j        z             |r|                                  d S d S )NzRELEASE SAVEPOINT %s;)rM  r  r  r  r  s     rc   r  z_savepoint.commit  s<    3doEFFF$++-----re   c                 J    | j                             d| j        z             d S )NzROLLBACK TO SAVEPOINT %s;r  r  s    rc   r  z_savepoint.rollback  s&    7$/IJJJJJre   c                 .    |                                   | S r_   )r  r  s    rc   r  z_savepoint.__enter__  s    re   c                     |r|                                   d S 	 |                     d           d S #  |                                    xY w)NFr  )r  r  r  s       rc   r  z_savepoint.__exit__  sS     	MMOOOOO%(((((s	   2 A	r_   rm  r  r`   re   rc   r  r    s        7 7 7 7
  ? ? ?       K K K      re   r  c                   H    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S )r  c                 Z    || _         d| _        d| _        d| _        d| _        g | _        d S )Nr   F)r   r'  rx  initialized	populatedr  r  s     rc   r  zCursorWrapper.__init__  s1    

 re   c                 V    | j         rt          | j                  S t          |           S r_   )r  rw  r  ResultIteratorr  s    rc   r  zCursorWrapper.__iter__  s*    > 	('''d###re   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.)rv   r  r  r  r  r   r  )ra   r  r  s      rc   r  zCursorWrapper.__getitem__  s    dE"" 	)9D|taxx!!!!%%%>$''c"" 	)OOD1HHDD!444>$'' ( ) ) )re   c                 8    |                                   | j        S r_   )r  r'  r  s    rc   r  zCursorWrapper.__len__  s    zre   c                     d S r_   r`   r  s    rc   r  zCursorWrapper.initialize  r  re   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  r'  process_rowr  r  )ra   cacher0  r  s       rc   iteratezCursorWrapper.iterate  s    k""$$;!DNK! 	$OO#D

a

!!#&& 	*N!!&)))re   c                     |S r_   r`   ra   r0  s     rc   r  zCursorWrapper.process_row  s    
re   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    rc   r  zCursorWrapper.iterator  sR      	ll5))))))    	s    
++r   c                 *   |pt          d          }|dk     rt          d          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  r'  rx  r  r  r  )ra   rz  r  s      rc   r  zCursorWrapper.fill_cache  s    uq55ABBB!$''. 	a$*nn     . 	a$*nnnn 	 	nn 	 	s   A* *
A87A8Nrm  r  )rf   rg   rh   r  r  r  r  r  r  r  r  r  r`   re   rc   r  r    s          $ $ $
) ) )                re   r  c                   "    e Zd Zd ZeZd ZeZdS )r  c                 h    | j         j        }d |D             | _        t          |          | _        d S )Nc                     g | ]A}|d          |d                               d          dz   d                             d          BS r   rR  r   N()"`rfindr5  rV  r   s     rc   rY  z9DictCursorWrapper._initialize_columns.<locals>.<listcomp>  sX     . . . !QqTZZ__q011288@@ . . .re   )r   descriptionr  r   ncolsra   r  s     rc   _initialize_columnsz%DictCursorWrapper._initialize_columns  s?    k-. .!,. . .%%


re   c                     i }t          | j                  D ])}|                    | j        |         ||                    *|S r_   )r  r  r  r  )ra   r0  r  r  s       rc   _row_to_dictzDictCursorWrapper._row_to_dict$  sH    tz"" 	7 	7Adl1os1v6666re   N)rf   rg   rh   r  r  r  r  r`   re   rc   r  r    s:        & & & %J   KKKre   r  c                       e Zd Zd Zd ZdS )r  c                 f    | j         j        }t          j        dd |D                       | _        d S )NRowc                     g | ]A}|d          |d                               d          dz   d                             d          BS r  r  r  s     rc   rY  z6NamedTupleCursorWrapper.initialize.<locals>.<listcomp>0  s[     :K :K :K9:AaD1C1$%%&,,V44:K :K :Kre   )r   r  collections
namedtupletuple_classr  s     rc   r  z"NamedTupleCursorWrapper.initialize.  sL    k-&1% :K :K>I:K :K :K L Lre   c                      | j         | S r_   r  r  s     rc   r  z#NamedTupleCursorWrapper.process_row3  s    t%%re   N)rf   rg   rh   r  r  r`   re   rc   r  r  -  s5        L L L
& & & & &re   r  c                   $     e Zd Z fdZd Z xZS )r  c                 f    t          t          |                               |           || _        d S r_   )r  r  r  r  )ra   r   r  r  s      rc   r  zObjectCursorWrapper.__init__8  s0    !4((11&999&re   c                 F    |                      |          } | j        di |S r  )r  r  )ra   r0  row_dicts      rc   r  zObjectCursorWrapper.process_row<  s.    $$S))t++(+++re   rf   rg   rh   r  r  r  r  s   @rc   r  r  7  sG        ' ' ' ' ', , , , , , ,re   r  c                   $    e Zd Zd Zd Zd ZeZdS )r  c                 "    || _         d| _        d S r  )cursor_wrapperrx  )ra   r	  s     rc   r  zResultIterator.__init__B  s    ,


re   c                     | S r_   r`   r  s    rc   r  zResultIterator.__iter__F  rl  re   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  )rx  r	  r'  r  r  r  r  r*  s     rc   r  zResultIterator.nextI  sz    :+111%/
;CC$. 	 '')))%/
;CC

a


re   N)rf   rg   rh   r  r  r  __next__r`   re   rc   r  r  A  sB            	 	 	 HHHre   r  c                   "    e Zd Zd ZddZd ZdS )FieldAccessorc                 0    || _         || _        || _        d S r_   )rA  rA  r  ra   rA  rA  r  s       rc   r  zFieldAccessor.__init__Y  s    

			re   Nc                 R    ||j                             | j                  S | j        S r_   )__data__r  r  rA  r{  s      rc   r~  zFieldAccessor.__get__^  s)    $((333zre   c                 b    ||j         | j        <   |j                            | j                   d S r_   )r	  r  _dirtyr  ra   r|  r~   s      rc   rN  zFieldAccessor.__set__c  s/    ',$)$DI&&&&&re   r_   )rf   rg   rh   r  r~  rN  r`   re   rc   r	  r	  X  sF          
   
' ' ' ' 're   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 r_   )r  r	  r  	rel_model)ra   rA  rA  r  r  s       rc   r  zForeignKeyAccessor.__init__i  s3     $''00tDDDre   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 r_   )
r	  r  r  __rel__rA  	lazy_loadr	  	rel_fieldr  r.   )ra   r|  r~   r  s       rc   get_rel_instancez#ForeignKeyAccessor.get_rel_instancem  s    !%%di00	X-= = =y 000TZ5I0n(()=)FGG.1 +#''	5999 	.TZ%9 	..--re   Nc                 >    ||                      |          S | j        S r_   )r	  rA  r{  s      rc   r~  zForeignKeyAccessor.__get__x  s$    ((222zre   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 r_   )rv   r	  r   rA  r	  r  r	  r	  r  r	  r  )ra   r|  r  fk_values       rc   rN  zForeignKeyAccessor.__set__}  s    c4>** 	0+23
8L8Q+R+RHdi(*-HTY''(,,TY77H+.Hdi(x3;yH,,,$TY/DI&&&&&re   r_   )rf   rg   rh   r  r	  r~  rN  r  r  s   @rc   r	  r	  h  sj        ) ) ) ) )	 	 	   

' 
' 
' 
' 
' 
' 
're   r	  c                       e Zd Zd ZddZdS )BackrefAccessorc                 D    || _         |j        | _        |j        | _        d S r_   )rA  r	  rA  ra   rA  s     rc   r  zBackrefAccessor.__init__  s    
_
re   Nc                     |T| j         j        j        }| j                                                            | j         t          ||          k              S | S r_   )rA  r	  r  r	  r  r5  r   )ra   r|  r}  r  s       rc   r~  zBackrefAccessor.__get__  sN    :',DNVXXU4:4)@)@@AAC re   r_   )rf   rg   rh   r  r~  r`   re   rc   r 	  r 	    s7        % % %
     re   r 	  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 r_   )rA  r"	  s     rc   r  zObjectIdAccessor.__init__  s    


re   Nc                     |q|j                             | j        j                  }|I| j        j        |j        v r6|j        | j        j                 }t          || j        j        j                  }|S | j        S r_   )r	  r  rA  r  r	  r   r	  )ra   r|  r}  r~   rel_objs        rc   r~  zObjectIdAccessor.__get__  sm    %))$*/::E}H4D!D!D"*4:?;)=)BCCLzre   c                 <    t          || j        j        |           d S r_   )r  rA  r  r	  s      rc   rN  zObjectIdAccessor.__set__  s    $*/511111re   r_   )rf   rg   rh   r  r  r~  rN  r`   re   rc   r%	  r%	    sL        22     2 2 2 2 2re   r%	  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 Zd Zd Zd Zd Zd ZdS )r2   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   rj   )r   r  rx  r.  r  r  r  r  rN  r^  	unindexedchoices	help_textverbose_namedefault_index_typer>  _hiddenr2   _field_counter_order	_sort_key)ra   r  rx  r.  r  r  r  r  rN  r^  r,	  r-	  r.	  r/	  r>  	db_columnr1	  s                    rc   r  zField.__init__  s    
   > ? ? ?#K	
&&& """($?(? 	!**0q5ACre   c                 J    t          | j        dz   | j        j        z             S r  )r  r  rA  rf   r  s    rc   r  zField.__hash__  s     DIOdj&99:::re   c                     t          | d          r>t          | dd           r-dt          |           j        d| j        j        d| j        dS dt          |           j        z  S )NrA  r  r   : rR  r   z<%s: (unbound)>)r  r   r  rf   rA  r  r  s    rc   __repr__zField.__repr__  su    4!! 	/gdFD&A&A 	/ 	/$(JJ$7$7$7$(J$7$7$7$(III/ / !4::#666re   c           	          || _         |x| _        | _        | j        p|| _        |r(t	          |||                     || |                     d S d S r_   )rA  r  	safe_namer  r  accessor_classra   rA  r  set_attributes       rc   r  z
Field.bind  sf    
%))	DN+3t 	IE4!4!4UD$!G!GHHHHH	I 	Ire   c                 J    t          | j        j        j        | j                  S r_   )r!   rA  r'  r(  r  r  s    rc   r  zField.column  s    dj&,d.>???re   c                     |S r_   r`   r  s     rc   adaptzField.adapt  s    re   c                 4    ||n|                      |          S r_   rA	  r  s     rc   r
  zField.db_value      uu4::e+<+<<re   c                 4    ||n|                      |          S r_   rC	  r  s     rc   r0  zField.python_value  rD	  re   c                 0    t          || j        d          S r  )rY   r
  r  s     rc   r  zField.to_value  s    UDM%8888re   c                     | j         S r_   )r4	  r8  s     rc   r  zField.get_sort_key  s
    ~re   c                 6    |                     | j                  S r_   )r)  r  r8  s     rc   r%  zField.__sql__  s    wwt{###re   c                     d S r_   r`   r  s    rc   get_modifierszField.get_modifiers  r  re   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`   rW  )rV  r   s     rc   rY  z&Field.ddl_datatype.<locals>.<listcomp>  s    )D)D)DQ#a&&)D)D)Dre   r  r  )r	  r  r  
field_typerJ	  rU  rQ   )ra   r9  column_type	modifiersmodifier_literals        rc   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{###re   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 NULLrG  zDEFAULT NEXTVAL('%s')r  )rf  r  rR	  r  r,	  rQ   r  r  rN  r  r7  r^  ru  )ra   r9  r  rw  s       rc   ddlz	Field.ddl  s1   ())*%%c**	 	$LL###> 	+LL[))***y 	*LLZ))) 	-LL]++,,,= 	GLL4t}DEEFFF 	+LL)***> 	=LL\DN:;;<<<re   )FFFNNFNNNFNNNNNFrm  )rf   rg   rh   r2	  r3	  r	  r<	  auto_incrementr0	  rN	  r  r  r  r9	  r  r  r  rA	  r
  r0  r  r  r%  rJ	  rR	  rU	  r`   re   rc   r2   r2     s;       NF"NNJFJN>BIM?C).	D D D D@; ; ;7 7 7I I I I @ @ X@  = = == = =9 9 9  $ $ $  $ $ $    re   r2   c                       e Zd ZdZdS )r   ANYNrf   rg   rh   rN	  r`   re   rc   r   r   !  s        JJJre   r   c                       e Zd ZdZd ZdS )r:   r,  c                 F    	 t          |          S # t          $ r |cY S w xY wr_   )r   r  r  s     rc   rA	  zIntegerField.adapt(  s7    	u:: 	 	 	LLL	      Nrf   rg   rh   rN	  rA	  r`   re   rc   r:   r:   %  s(        J    re   r:   c                       e Zd ZdZdS )r   r  NrY	  r`   re   rc   r   r   /          JJJre   r   c                       e Zd ZdZdS )rO   r"  NrY	  r`   re   rc   rO   rO   3  s        JJJre   rO   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      rc   r  zAutoField.__init__;  sf    ::m$$--?$t**LMMM $}'i'888888re   )rf   rg   rh   rV	  rN	  r  r  r  s   @rc   r   r   7  sB        NJ9 9 9 9 9 9 9 9 9re   r   c                       e Zd ZdZdS )r   r  NrY	  r`   re   rc   r   r   B  s        JJJre   r   c                   $     e Zd ZdZd fd	Z xZS )r7   z$INT GENERATED BY DEFAULT AS IDENTITYFc                 Z    |rd| _          t          t          |           j        di | d S )Nz INT GENERATED ALWAYS AS IDENTITYr`   )rN	  r  r7   r  )ra   generate_alwaysr  r  s      rc   r  zIdentityField.__init__I  s<     	A@DO+mT""+55f55555re   r  )rf   rg   rh   rN	  r  r  r  s   @rc   r7   r7   F  sB        7J6 6 6 6 6 6 6 6 6 6re   r7   c                        e Zd Z fdZ xZS )rH   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  rH   r  r  s      rc   r  zPrimaryKeyField.__init__P  sH     E 	F 	F 	F 	.ot$$-t>v>>>>>re   rW  r  s   @rc   rH   rH   O  s8        ? ? ? ? ? ? ? ? ?re   rH   c                       e Zd ZdZd ZdS )r4   r+  c                 F    	 t          |          S # t          $ r |cY S w xY wr_   )r  r  r  s     rc   rA	  zFloatField.adaptZ  s7    	<< 	 	 	LLL	r\	  Nr]	  r`   re   rc   r4   r4   W  s(        J    re   r4   c                       e Zd ZdZdS )r/   r)  NrY	  r`   re   rc   r/   r/   a  r_	  re   r/   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  )ra   rn	  ro	  rp	  rs	  r  r  r  s          rc   r  zDecimalField.__init__h  so    $,$ CG$:$COB''T-@,@A	*lD!!*D;F;;;;;re   c                     | j         | j        gS r_   )rn	  ro	  r  s    rc   rJ	  zDecimalField.get_modifiersq  s    !455re   c                     t           j        }|s||n
 |d          S | j        r9 |t          |                    }|                    | j        | j                  S |S )Nr   )rs	  )rq	  rt	  rp	  rT  quantizeru	  rs	  )ra   r~   Ddecimal_values       rc   r
  zDecimalField.db_valuet  sk    O 	4!M55qqtt3? 	MAi..//M ))$)dm)LLLre   c                     |=t          |t          j                  r|S t          j        t          |                    S d S r_   )rv   rq	  rt	  rT  r  s     rc   r0  zDecimalField.python_value}  sA    %11 ?9U#3#3444 re   )r  r<  FN)	rf   rg   rh   rN	  r  rJ	  r
  r0  r  r  s   @rc   r*   r*   e  su        JCH< < < < < <6 6 6  5 5 5 5 5 5 5re   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 )NrK  )rv   rT  rU  r   r  s     rc   rA	  z_StringField.adapt  sK    eY'' 	)Lz** 	)<<(((re   c                 8    t          | t          j        |          S r_   r  r  s     rc   r   z_StringField.__add__  s    %5dBIu%M%MMre   c                 8    t          |t          j        |           S r_   r  r  s     rc   r  z_StringField.__radd__  s    &6ubi&N&NNre   N)rf   rg   rh   rA	  r   r  r`   re   rc   r}	  r}	    s4              NMMNNNNNre   r}	  c                   *     e Zd ZdZd fd	Zd Z xZS )r   r1     c                 V    || _          t          t          |           j        |i | d S r_   )
max_lengthr  r   r  )ra   r	  r  r  r  s       rc   r  zCharField.__init__  s2    $'i'888888re   c                 $    | j         r| j         gpd S r_   )r	  r  s    rc   rJ	  zCharField.get_modifiers  s    4DO#4<<re   )r	  )rf   rg   rh   rN	  r  rJ	  r  r  s   @rc   r   r     sQ        J9 9 9 9 9 9= = = = = = =re   r   c                   "     e Zd ZdZ fdZ xZS )r3   r#  c                     t          t          |                               |          }|r|                                }|S r_   )r  r3   r0  r5  )ra   r~   r  s     rc   r0  zFixedCharField.python_value  s:    nd++88?? 	"KKMMEre   )rf   rg   rh   rN	  r0  r  r  s   @rc   r3   r3     s=        J        re   r3   c                       e Zd ZdZdS )rT   r-  NrY	  r`   re   rc   rT   rT     s        JJJre   rT   c                   0     e Zd ZdZd Zd fd	Zd Z xZS )r   r   c                 X    |t           | _        d S |                                | _        d S r_   )	bytearrayr  r  r  s     rc   _db_hookzBlobField._db_hook  s0     )D ( 8 8 : :Dre   Tc                    t           | _        |j        j        rct	          |j        j        t
                    r%|j        j                            | j                   n|                     |j        j                   |j        j        	                    | j                   t          t          |                               |||          S r_   )r	  r  r'  r  rv   rL   r  r	  	_db_hooksr  r  r   r  ra   rA  r  r>	  r  s       rc   r  zBlobField.bind  s    %; 	4%+.66 4$44T]CCCCek2333
 	$$T]333Y%%**5$FFFre   c                     t          |t                    r|                    d          }t          |t                    r|                     |          S |S )NrR  )rv   rT  rO  rU  r  r  s     rc   r
  zBlobField.db_value  sQ    eY'' 	7LL!566EeZ(( 	,$$U+++re   rm  )rf   rg   rh   rN	  r	  r  r
  r  r  s   @rc   r   r     sf        J; ; ;G G G G G G      re   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   )r  r  r   r  _BitField__current_flagr  s      rc   r  zBitField.__init__  sI    )Q'''&h&7777re   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 r_   )_field_valuer  r  )ra   rA  r~   FlagDescriptorr  s      rc   r  z.BitField.flag.<locals>.FlagDescriptor.__init__  s3    ##nd++4466666re   c                 B    | j                             | j                   S r_   )r	  r  r	  r  s    rc   clearz+BitField.flag.<locals>.FlagDescriptor.clear  s    {**DK<888re   c                 @    | j                             | j                  S r_   )r	  r  r	  r  s    rc   rP  z)BitField.flag.<locals>.FlagDescriptor.set  s    {))$+666re   Nc                 ^    || S t          || j        j                  pd}|| j        z  dk    S r  )r   r	  r  r	  )ra   r|  r}  r~   s       rc   r~  z-BitField.flag.<locals>.FlagDescriptor.__get__  s8    #K$+*:;;@q+11re   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  )ra   r|  is_setr~   s       rc   rN  z-BitField.flag.<locals>.FlagDescriptor.__set__  sv    ..$%IJJJ$+*:;;@q *T[(EEdk\)E$+"2E:::::re   c                 n    |                     | j                            | j                  dk              S r  )r)  r	  r  r	  r8  s     rc   r%  z-BitField.flag.<locals>.FlagDescriptor.__sql__  s+    wwt{224;??1DEEEre   r_   )
rf   rg   rh   r  r	  rP  r~  rN  r%  r  )r  r	  s   @rc   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re   r	  )r	  rN  )ra   r~   r	  s     @rc   flagzBitField.flag  s    ='EA%"'1*D	F 	F 	F 	F 	F 	F 	FZ 	F 	F 	F2 ~dE***re   r_   )rf   rg   rh   r  r	  r  r  s   @rc   r   r     sL                 
 +  +  +  +  +  +  +  +re   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ej        d         dk     rd ZdS d ZdS )BigBitFieldDatac                 
   || _         || _        | j         j                            | j                  }|st	                      }n$t          |t                    st	          |          }|x| _        | j         j        | j        <   d S r_   )r|  r  r	  r  r	  rv   _buffer)ra   r|  r  r~   s       rc   r  zBigBitFieldData.__init__  sz     	&**4955 	%KKEEE9-- 	%e$$E;@@t}-di888re   c                 8    | j                                          d S r_   )r	  r	  r  s    rc   r	  zBigBitFieldData.clear  s    re   c                     t          |d          \  }}t          | j                  }||k    r#| j                            d|dz   |z
  z             ||fS )NrC      r   )divmodr   r	  r7  ra   r  byte_numbyte_offsetcur_sizes        rc   _ensure_lengthzBigBitFieldData._ensure_length  s]     &sA+t|$$xLHqLH+D EFFF$$re   c                 f    |                      |          \  }}| j        |xx         d|z  z  cc<   d S r  r	  r	  ra   r  r	  r	  s       rc   set_bitzBigBitFieldData.set_bit  sC     $ 3 3C 8 8+X1#34re   c                 h    |                      |          \  }}| j        |xx         d|z   z  cc<   d S r  r	  r	  s       rc   	clear_bitzBigBitFieldData.clear_bit
  sF     $ 3 3C 8 8+XA$4"55re   c                     |                      |          \  }}| j        |xx         d|z  z  cc<   t          | j        |         d|z  z            S r  )r	  r	  re  r	  s       rc   
toggle_bitzBigBitFieldData.toggle_bit  s\     $ 3 3C 8 8+X1#34DL*a;.>?@@@re   c                     t          |d          \  }}t          | j                  }||k    rdS t          | j        |         d|z  z            S )NrC  Fr   )r	  r   r	  re  r	  s        rc   r	  zBigBitFieldData.is_set  sR     &sA+t|$$x5DL*a;.>?@@@re   c                 b    |r|                      |           d S |                     |           d S r_   )r	  r	  )ra   r  r~   s      rc   r  zBigBitFieldData.__setitem__  s6    #=T)=)=)=)=)=re   c                 *    t          | j                  S r_   )r   r	  r  s    rc   r  zBigBitFieldData.__len__  s    4<   re   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	  )	rv   r	  r	  bytesr	  
memoryviewr  r   r7  )ra   r  datadiffs       rc   _get_compatible_dataz$BigBitFieldData._get_compatible_data"  s    e_-- 	7=DDy*=>> 	7DD56664yy3t99$!88T\((4888re   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   )rs  )rv   r	  r	  r	  r	  r	  r  maxr   r  zip_longestr   )	ra   r  r  r	  bufry  r  r  bs	            rc   _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
re   c                 B    |                      |t          j                  S r_   )r	  r  r  r  s     rc   r  zBigBitFieldData.__and__:  s    x}555re   c                 B    |                      |t          j                  S r_   )r	  r  r+  r  s     rc   r  zBigBitFieldData.__or__<      x|444re   c                 B    |                      |t          j                  S r_   )r	  r  xorr  s     rc   r  zBigBitFieldData.__xor__>  r	  re   c              #   ^   K   | j         D ]"}t          d          D ]}|d|z  z  rdndV  #d S )NrC  r   r   )r	  r  )ra   r	  js      rc   r  zBigBitFieldData.__iter__A  s[       	1 	1A1XX 1 1aL0aaq00001	1 	1re   c                 *    t          | j                  S r_   )reprr	  r  s    rc   r9	  zBigBitFieldData.__repr__F  s    DL!!!re   r   r   c                 *    t          | j                  S r_   rU  r	  r  s    rc   r  zBigBitFieldData.__str__I      dl+++re   c                 *    t          | j                  S r_   r	  r  s    rc   	__bytes__zBigBitFieldData.__bytes__L  r	  re   N)rf   rg   rh   r  r	  r	  r	  r	  r	  r	  r  r  __delitem__r  r	  r	  r  r  r  r  r9	  rm   version_infor  r	  r`   re   rc   r	  r	    sT       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
" " "
Q	, 	, 	, 	, 	,	, 	, 	, 	, 	,re   r	  c                   &     e Zd ZddZ fdZ xZS )BigBitFieldAccessorNc                 >    || j         S t          || j                  S r_   )rA  r	  r  r{  s      rc   r~  zBigBitFieldAccessor.__get__Q  s"    :x333re   c                 4   t          |t                    r|                                }nt          |t                    rt	          |          }nt          |t
                    rt          |          }nyt          |t                    rt          |j                  }nOt          |t                    r|
                    d          }n$t          |t                    st          d          t          t          |                               ||           d S )NrK  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)rv   r	  tobytesbuffer_typer	  r	  rU  r	  r	  rT  rO  r  r  r	  rN  )ra   r|  r~   r  s      rc   rN  zBigBitFieldAccessor.__set__U  s    eZ(( 	:MMOOEE{++ 
	:%LLEEy)) 	:u%%EE// 	:u}--EEy)) 	:LL))EEE:.. 	: 9 : : :!4((005AAAAAre   r_   )rf   rg   rh   r~  rN  r  r  s   @rc   r	  r	  P  sU        4 4 4 4B B B B B B B B Bre   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  )r  rU  r  r   r  r  s      rc   r  zBigBitField.__init__i  sA    )Z000)k4  )4:6:::::re   c                 (    |t          |          n|S r_   )rU  r  s     rc   r
  zBigBitField.db_valuem  s    $)$5z%   5@re   )rf   rg   rh   r	  r<	  r  r
  r  r  s   @rc   r   r   f  sS        (N; ; ; ; ;A A A A A A Are   r   c                       e Zd ZdZd Zd ZdS )rX   r/  c                 X   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 #  |cY S xY w)N    rD  r	  )rv   r9  r   r	  r  r/  r  r  s     rc   r
  zUUIDField.db_valuet  s    eZ(( 	+SZZ2-=-=Lu%% 	+#e***:*:IE***EeTY'' 	9	9U##''	LLLs   
B# #B)c                 j    t          |t          j                  r|S |t          j        |          nd S r_   )rv   r  r/  r  s     rc   r0  zUUIDField.python_value  s5    eTY'' 	L#(#4ty$>re   Nrf   rg   rh   rN	  r
  r0  r`   re   rc   rX   rX   q  s7        J  ? ? ? ? ?re   rX   c                       e Zd ZdZd Zd ZdS )r   r0  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 )NrD  r	  )r  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)rv   r	  r   r  r9  r  r/  r  r  s     rc   r
  zBinaryUUIDField.db_value  s    eU## 	)E

b(8(8$$U+++z** 	)s5zzR/?/?I%(((EeTY'' 	I$$U[111 H I I I re   c                    t          |t          j                  r|S t          |t                    r|                                }n&|r$t          |t
                    st          |          }|t          j        |          nd S )Nr	  )rv   r  r/  r	  r	  r	  r  s     rc   r0  zBinaryUUIDField.python_value  s}    eTY'' 	!Lz** 	!MMOOEE 	!:eU33 	!%LLE).):tyu%%%%Dre   Nr	  r`   re   rc   r   r     s?        JI I IE E E E Ere   r   c                       fd}|S )Nc                 N    | j         j        j                            |           S r_   )rA  r'  r  r-  )ra   r+  s    rc   decz_date_part.<locals>.dec  s!    z(55iFFFre   r`   r+  r	  s   ` rc   
_date_partr	    s&    G G G G GJre   c                     |pd }|D ]=}	  |t           j                             | |                    c S # t          $ r Y :w xY w| S )Nc                     | S r_   r`   xs    rc   rx   z"format_date_time.<locals>.<lambda>  s    a re   )r   strptimer  )r~   formatspost_processfmts       rc   r   r     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   )r   r	  r  r  rb  s    rc   r  r    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 r_   )r	  r  r	  r  )ra   r	  r  r  r  s       rc   r  z_BaseFormattedField.__init__  s9    "DL1!4((14B6BBBBBre   r_   )rf   rg   rh   r	  r  r  r  s   @rc   r	  r	    sL        GC C C C C C C C C Cre   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 e e	d	                    Z e e	d
                    Z e e	d                    ZdS )r)   r%  )r   r   r   c                 ^    |r*t          |t                    rt          || j                  S |S r_   )rv   r9  r   r	  r  s     rc   rA	  zDateTimeField.adapt  s2     	9Zz22 	9#E4<888re   c                 J    | j         j        j                            |           S r_   rA  r'  r  r2  r  s    rc   r2  zDateTimeField.to_timestamp      z(55d;;;re   c                 L    | j         j        j                            ||           S r_   rA  r'  r  r/  ra   rW  s     rc   truncatezDateTimeField.truncate       z(66tTBBBre   r   r   r   r   r   r   N)rf   rg   rh   rN	  r	  rA	  r2  r
  r  r	  r   r   r   r   r   r   r`   re   rc   r)   r)     s        J  G  
< < <C C C 8JJv&&''DHZZ(())E
(::e$$
%
%C8JJv&&''DXjj**++FXjj**++FFFre   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 r_   )r   r	  s    rc   rx   z!DateField.adapt.<locals>.<lambda>  s    16688 re   )rv   r9  r   r	  r   r   ra   r~   pps      rc   rA	  zDateField.adapt  sf     	 Zz22 	 ##B#E4<<<< 	 z%):;; 	 ::<<re   c                 J    | j         j        j                            |           S r_   r	  r  s    rc   r2  zDateField.to_timestamp  r 
  re   c                 L    | j         j        j                            ||           S r_   r
  r
  s     rc   r
  zDateField.truncate  r
  re   r   r   r   N)rf   rg   rh   rN	  r	  rA	  r2  r
  r  r	  r   r   r   r`   re   rc   r(   r(     s        J  G  < < <C C C 8JJv&&''DHZZ(())E
(::e$$
%
%CCCre   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 )rU   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 r_   )r   r	  s    rc   rx   z!TimeField.adapt.<locals>.<lambda>  s    qvvxx re   )rv   r9  r   r	  r   r   	timedeltaminr	
  s      rc   rA	  zTimeField.adapt   s     	$%,, $'''t|R@@@E8#455 $zz||#E83E!F!F%)E177999re   r   r   r   N)rf   rg   rh   rN	  r	  rA	  r  r	  r   r   r   r`   re   rc   rU   rU     s        J  G	 	 	 8JJv&&''DXjj**++FXjj**++FFFre   rU   c                       fd}|S )Nc                     | j         j        j        }| j        dk    r| t	          | j        d          z  n| }|                    |                    |                    S Nr   Fr.  )rA  r'  r  
resolutionrY   r-  r4  )ra   rM  r  r+  s      rc   r	  z!_timestamp_date_part.<locals>.dec  sc    Z&?Q&& do?????,0 	y"*;*;D*A*ABBBre   r`   r	  s   ` rc   _timestamp_date_partr
    s(    C C C C C
 Jre   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 )rV   c                     g | ]}d |z  S )r  r`   rV  r  s     rc   rY  zTimestampField.<listcomp>  s    1111Q111re   rL  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 )Nr
  r   rj   rL  r  z,TimestampField resolution must be one of: %sr  c              3   4   K   | ]}t          |          V  d S r_   rM	  r
  s     rc   rr  z*TimestampField.__init__.<locals>.<genexpr>&  s(      &N&N!s1vv&N&N&N&N&N&Nre   i@B r   Fr  )r  r
  r  valid_resolutionsr  rU  ticks_to_microsecondr   r   r   r   r  r  rV   r  )ra   r  r  dfltr  s       rc   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=====re   c                     t          j         t          j        t          j        |                                                    d d          S )N   )r   r   gmtimemktime	timetuple)ra   r   s     rc   local_to_utczTimestampField.local_to_utc.  s7    
  $+dk",,...I.I"J"J2A2"NOOre   c                     t          j        |                                          }t          j                            |          S r_   )calendartimegmutctimetupler   r   )ra   r   r   s      rc   utc_to_localzTimestampField.utc_to_local5  s4    
 _R__..// ..r222re   c                     | j         r&t          j        |                                          S t	          j        |                                          S r_   )r   r&
  r'
  r(
  r   r"
  r#
  r  s     rc   get_timestampzTimestampField.get_timestamp=  sB    8 	2?5#5#5#7#7888;u00111re   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ư>)rv   r   r   r   r   r   r   roundr
  r+
  microsecond)ra   r~   r   s      rc   r
  zTimestampField.db_valueD  s    =FeX.// 	7x}-- 	7%ej%+uyIIEEuUT_455666&&u--	?Q%+g56I(I5##$$$re   c                 d   |t          |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   )r.
  )rv   r   r  longr
  r	  r
  r   r   r   r   r   )ra   r~   ticksmicrosecondss       rc   r0  zTimestampField.python_valueU  s    EC3E!F!F""%eT_==u"54+D#DEE x ?(// )77>> @,??re   c                     | j         dk    r| t          | j         d          z  n| }| j        j        j                            |          S r
  )r
  rY   rA  r'  r  r4  )ra   r  s     rc   r4  zTimestampField.from_timestampg  sO    ?Q&& do?????,0 	z(77===re   r   r   r   r   r   r   )rf   rg   rh   r  r
  r  r$
  r)
  r+
  r
  r0  r4  r  r
  r   r   r   r   r   r   r  r  s   @rc   rV   rV     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5FFFFFre   rV   c                       e Zd Zd Zd ZdS )r>   c                 d    |-t          j        dt          j        |                    d         S d S )N!Ir   )structr  socket	inet_atonra   r  s     rc   r
  zIPField.db_valueu  s0    ?=v'7'<'<==a@@ ?re   c                 X    |'t          j        t          j        d|                    S d S )Nr6
  )r8
  	inet_ntoar7
  packr:
  s     rc   r0  zIPField.python_valuey  s+    ?#FKc$:$:;;; ?re   N)rf   rg   rh   r
  r0  r`   re   rc   r>   r>   t  s5        A A A< < < < <re   r>   c                       e Zd ZdZeZdS )r   r!  N)rf   rg   rh   rN	  re  rA	  r`   re   rc   r   r   ~  s        JEEEre   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 r_   )r  r   r  rA	  )ra   rA	  r  r  r  s       rc   r  zBareField.__init__  s>    'i'8888DJJJ re   c                     d S r_   r`   r8  s     rc   rR	  zBareField.ddl_datatype  rR  re   r_   )rf   rg   rh   r  rR	  r  r  s   @rc   r   r     sL             
      re   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 )r6   NTc                    |                     dd            t          t          |           j        |i | |t	          d           |}|	t	          d           |	}|t	          d           |}|dk    | _        || _        || _        || _        d | _	        || _
        || _        || _        || _        |
| _        || _        || _        d S )Nrx  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.ra   )r  r  r6   r  r   _is_self_referencer	  r	  declared_backrefbackref	on_delete	on_update
deferrabler  object_id_namer	  constraint_name)ra   rA  rA  rF
  rG
  rH
  rI
  	_deferredr	  to_fieldrJ
  r	  rK
  related_namer  r  r  s                   rc   r  zForeignKeyField.__init__  s   
 	'4(((-ot$$-t>v>>>  B C C CE B C C CE# : ; ; ;"G"'6/ '""$!,".re   c                     t          | j        t                    s| j        j        S t          | j        t                    rt
          j        S t          j        S r_   )rv   r	  r   rN	  r   r   r:   r  s    rc   rN	  zForeignKeyField.field_type  sG    $.)44 	.>,,55 	."--&&re   c                     t          | j        t                    s| j                                        S t	          t
          |                                           S r_   )rv   r	  r   rJ	  r  r6   )ra   r  s    rc   rJ	  zForeignKeyField.get_modifiers  sG    $.)44 	2>//111_d++99;;;re   c                 l    | j         p-d| j        j        j        d| j        d| j        j        j        S )Nfk_rq  _refs_)rK
  rA  r'  r;  r  r	  r  s    rc   get_constraint_namez#ForeignKeyField.get_constraint_name  sG    # - -J'''N ++(- 	-re   c                 6    | j                             |          S r_   )r	  rA	  r  s     rc   rA	  zForeignKeyField.adapt  s    ~##E***re   c                     t          || j                  rt          || j        j                  }| j                            |          S r_   )rv   r	  r   r	  r  r
  r  s     rc   r
  zForeignKeyField.db_value  s@    eT^,, 	8E4>#677E~&&u---re   c                 d    t          || j                  r|S | j                            |          S r_   )rv   r	  r	  r0  r  s     rc   r0  zForeignKeyField.python_value  s1    eT^,, 	L~**5111re   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  rJ
  r  r'  r  rD
  r	  rv   r	  r9  r   r  r  r6   r  r;	  r  rE
  rF
  r  r%	  backref_accessor_classr	  s       rc   r  zForeignKeyField.bind  s    	N'+}}U';';MttD" 	A"&"2D"d**##u,## D((*(-(8(8(8$$$@ A A A " 	#"DNdnj11 	>$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; ; ; ; ;	; 	;''re   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)rK
  rT
  r7  rQ   rf  rF  r.  r	  r	  rG
  r  rH
  rI
  ru  )ra   explicit_namerp  r  s       rc   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>??@@@re   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   r	  r'  r@  r   s     rc   r   zForeignKeyField.__getattr__  sp    ??4   	N !LMMM4>'...>'.t44 ACGH I I 	Ire   )NNNNNNNNNTNNrm  r  )rf   rg   rh   r	  r<	  r 	  rZ
  r  r  rN	  rJ	  rT
  rA	  r
  r0  r  r^
  r   r  r  s   @rc   r6   r6     s       'N,BF<@?CDH!/ !/ !/ !/ !/ !/F ' ' X'< < < < <
- - -+ + +. . .
2 2 2
"; "; "; "; "; ";H   ,I I I I I I Ire   r6   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 )r+   c                 N   || _         |                                | _        t          j                            |            t          t          |                               |                    d          |                    d          |                    d                     d S )Nr  r  r  )r  r  r  )	field_kwargsrl  rel_model_namer+   _unresolvedr  r  r  r  )ra   rd
  r  r  s      rc   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 	3re   Nc                 0    t          | j        fi | j        S r_   )r+   rd
  rc
  )ra   memos     rc   __deepcopy__zDeferredForeignKey.__deepcopy__&  s    !$"5KK9JKKKre   c                     t          |fddi| j        }|j        r'| j        j                            | j        |           d S | j        j                            | j        |           d S )NrL
  T)r6   rc
  r  rA  r'  set_primary_keyr  	add_field)ra   r	  rA  s      rc   	set_modelzDeferredForeignKey.set_model)  sp    	OOTOT=NOO 	9J,,TY>>>>>J&&ty%88888re   c                    t          t          j        t          j        d                    }|D ]X}|j        | j                                        k    r4|                    |            t          j        	                    |           Yd S )Nr3	  r  )
r  r+   re
  r  
attrgetterrd
  rf   rl  rl
  discard)	model_cls
unresolveddrs      rc   resolvezDeferredForeignKey.resolve1  s    .: ( 3H = =? ? ?
 	; 	;B I$6$<$<$>$>>>Y'''".66r:::	; 	;re   r_   )rf   rg   rh   rP  re
  r  ru  r  rh
  rl
  ro  rs
  r  r  s   @rc   r+   r+     s        #%%K3 3 3 3 3 HL L L L9 9 9 ; ; \; ; ; ; ;re   r+   c                        e Zd Zd Zd Zd ZdS )r,   c                     g | _         d S r_   )_refsr  s    rc   r  zDeferredThroughModel.__init__<  s    


re   c                 @    | j                             |||f           d S r_   )rv
  r  r	  s       rc   	set_fieldzDeferredThroughModel.set_field?  s%    
5%./////re   c                 f    | j         D ](\  }}}||_        |j                            ||           )d S r_   )rv
  through_modelr'  rk
  )ra   rz
  	src_modelm2mfieldr  s        rc   rl
  zDeferredThroughModel.set_modelB  sG    )- 	6 	6%Ix%2H"O%%dH5555	6 	6re   N)rf   rg   rh   r  rx
  rl
  r`   re   rc   r,   r,   ;  sA          0 0 06 6 6 6 6re   r,   c                   "    e Zd ZdxZxZxZZdZdS )	MetaFieldNF)rf   rg   rh   r  r  rA  r  r  r`   re   rc   r~
  r~
  H  s'        +//K/'/EDKKKre   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  rA  r	  rz
  r'  
model_refsr  src_fkdest_fk)ra   rA  rA  r  src_fksdest_fksr  s         rc   r  z ManyToManyFieldAccessor.__init__N  s    %t,,55eUDIII[
"0$*5djA%+6t~F 	C*"jjj$*<*<*<> ? ? ? 	C*"nnnd.@.@.@B C C Caj{re   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  rV  r  ra   s     rc   rY  z3ManyToManyFieldAccessor.__get__.<locals>.<listcomp>c  s(    OOOGC):;;OOOre   zCannot get many-to-many "" for unsaved instance "rz  )r
  rF
  r   rv   r`  r	  r  rA  _prevent_unsavedr  ManyToManyQueryr	  rU  rz
  rA  r5  )ra   r|  r}  force_queryrF
  src_ids   `     rc   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re   c                     t          || j        j        j                  }|'| j        j        rt          d| j        d|d          |                     |d          }|                    |d           d S )NzCannot set many-to-many "r
  rz  T)r
  )clear_existing)	r   r
  r	  r  rA  r
  r  r~  r  )ra   r|  r~   r
  r;  s        rc   rN  zManyToManyFieldAccessor.__set__p  s    4;#8#=>>>dj9>*15XXXG H H HX488		%	-----re   rh  )rf   rg   rh   r  r~  rN  r  r  s   @rc   r
  r
  M  s[        # # # # #    $. . . . . . .re   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 )r@   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.)rv   r,   r&  r  r  r	  rF
  _through_model
_on_delete
_on_updater
  _is_backref)ra   rA  rF
  rz
  rG
  rH
  prevent_unsavedr
  s           rc   r  zManyToManyField.__init__|  s    $}.BCC B]++B !A B B B @I$9Y=R  "? @ @ @+## /&re   c                      t          |           S r_   )r
  r  s    rc   _get_descriptorzManyToManyField._get_descriptor  s    &t,,,re   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)rF
  rz
  rG
  rH
  r
  rq   )rv   r
  r,   rx
  r  r@   r  r
  rA  rz
  r
  r
  rF
  r'  r  r	  rk
  )ra   rA  r  r>	  many_to_many_fieldr  s        rc   r  zManyToManyField.bind  s    d)+?@@ 	))%t<<<Fot$$))%}EEE 		M!0
"0// "" "" ""  <A5;+;c+ADLN **4<9KLLLLL		M 		Mre   c                 j    d t          | j        | j        f| j         | j        ff          D             S )Nc                     g | ]\  }}|S r`   r`   )rV  rq  rA  s      rc   rY  z.ManyToManyField.get_models.<locals>.<listcomp>  s(     6 6 6(!U 6 6 6re   )r  r
  rA  r	  r  s    rc   
get_modelszManyToManyField.get_models  sN    6 6ftz*!!4>2.4 '5 '5 6 6 6 	6re   c                 P    | j         |                                 | _         | j         S r_   )r
  _create_through_modelr  s    rc   rz
  zManyToManyField.through_model  s(    &"&"<"<">">D""re   c                     || _         d S r_   )r
  r  s     rc   rz
  zManyToManyField.through_model  s    #re   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'  r;  rV  rA  s     rc   rY  z9ManyToManyField._create_through_model.<locals>.<listcomp>  s    AAAU%+(AAAre   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)rf   rg   rh   rA  r'  r  r  ra  r;  r  r  )r  r   ra   tabless   rc   r  r
    sZ        z'0HZ%,F(55==8J).#).1GGGre   r  )rG
  rH
  Through)	r
  r
  r
  r'  r  r6   rf   r  rA   )ra   r  rN  attrs
klass_namer  r   r
  s   `    @@@rc   r
  z%ManyToManyField._create_through_model  s    ??$$SAAsCjAAA	 	 	 	 	 	 	 	 	 	 	 	 	  $T_MMINOC::6::INOC::6::D
 '*llCLLLA
J%000re   c                     | j         S r_   )rz
  r  s    rc   get_through_modelz!ManyToManyField.get_through_model  s    !!re   )NNNNTFrm  )rf   rg   rh   r
  r<	  r  r
  r  r
  r  rz
  r  r
  r
  r  r  s   @rc   r@   r@   y  s        ,NJNCH' ' ' '$- - -M M M M M M$6 6 6
 # # X#
 $ $ $1 1 1*" " " " " " "re   r@   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 r_   )field_classfield_instancer  r
  r  )ra   r
  r  r  r2   r  s        rc   r  zVirtualField.__init__  sS    *6D<L).):eeggg*lD!!*D;F;;;;;re   c                 H    | j         | j                             |          S |S r_   )r
  r
  r  s     rc   r
  zVirtualField.db_value  s'    *&//666re   c                 H    | j         | j                             |          S |S r_   )r
  r0  r  s     rc   r0  zVirtualField.python_value  s'    *&33E:::re   Tc           	          || _         |x| _        x| _        | _        t	          |||                     || |                     d S r_   )rA  r  r  r;	  r  r<	  r=	  s       rc   r  zVirtualField.bind  sI    
8<<<49t~tT00dCCDDDDDre   r_   rm  )	rf   rg   rh   r
  r  r
  r0  r  r  r  s   @rc   r
  r
    s|        K< < < < < <
  
  
E E E E E E E Ere   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 r_   )field_names_safe_field_names)ra   r
  s     rc   r  zCompositeKey.__init__  s    &!%re   c                 l      j         & j         j        S  fd j        D              _          j         S )Nc                 H    g | ]}j         j        j        |         j        S r`   )rA  r'  r@  r;	  rV  fra   s     rc   rY  z1CompositeKey.safe_field_names.<locals>.<listcomp>  s?     &A &A &A*+ '+j&6&=a&@&J &A &A &Are   )r
  rA  r
  r  s   `rc   safe_field_nameszCompositeKey.safe_field_names  s[    !)z!''&A &A &A &A/3/?&A &A &AD"%%re   c                 L     t          fd| j        D                       S | S )Nc                 0    g | ]}t          |          S r`   r  )rV  r
  r|  s     rc   rY  z(CompositeKey.__get__.<locals>.<listcomp>  s#    NNN1'(A..NNNre   )ra  r
  r{  s    ` rc   r~  zCompositeKey.__get__  s4    NNNN8MNNNOOOre   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.)	rv   r`  ra  r  r   r
  r  r   r  )ra   r|  r~   r  field_values        rc   rN  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re   c                 z      fdt           j        |          D             }t          t          j        |          S )Nc                 L    g | ] \  }}j         j        j        |         |k    !S r`   rA  r'  r@  )rV  rA  r~   ra   s      rc   rY  z'CompositeKey.__eq__.<locals>.<listcomp>  sE     I I I'5% 
(/6%? I I Ire   )zipr
  rt   r  r  )ra   r  r  s   `  rc   r  zCompositeKey.__eq__  sQ    I I I I+.t/?+G+GI I Ihm[111re   c                     | |k     S r_   r`   r  s     rc   r  zCompositeKey.__ne__	  s    re   c                 B    t          | j        j        | j        f          S r_   )r  rA  rf   r
  r  s    rc   r  zCompositeKey.__hash__  s    TZ($*:;<<<re   c                      |j         t          k    }|                    t           fd j        D             d|                    S )Nc                 >    g | ]}j         j        j        |         S r`   r
  )rV  rA  ra   s     rc   rY  z(CompositeKey.__sql__.<locals>.<listcomp>  s<     !@ !@ !@%* "&!1!8!? !@ !@ !@re   r  )r  rB  r)  ru  r
  )ra   r9  r  s   `  rc   r%  zCompositeKey.__sql__  sm     l*wwx !@ !@ !@ !@.2.>!@ !@ !@AEvO O P P 	Pre   Tc                 j    || _         |x| _        x| _        | _        t	          || j        |            d S r_   )rA  r  r  r;	  r  r=	  s       rc   r  zCompositeKey.bind  s9    
8<<<49t~ty$'''''re   r_   rm  )rf   rg   rh   rN  r  r  r
  r~  rN  r  r  r  r%  r  r`   re   rc   r"   r"     s        H& & & & & X&   
B B B2 2 2
     = = =P P P( ( ( ( ( (re   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 r_   r
  r  s    rc   r  z_SortedFieldList.__init__   s    
re   c                     | j         |         S r_   )r
  )ra   r  s     rc   r  z_SortedFieldList.__getitem__$  s    {1~re   c                 *    t          | j                  S r_   )rw  r
  r  s    rc   r  z_SortedFieldList.__iter__'  r  re   c                     |j         }t          | j        |          }t          | j        |          }|| j        ||         v S r_   )r4	  r   r
  r   r
  )ra   r  r  r  r	  s        rc   __contains__z_SortedFieldList.__contains__*  sA    N
A&&Q''t{1Q3'''re   c                 @    | j                             |j                  S r_   )r
  rx  r4	  r"	  s     rc   rx  z_SortedFieldList.index0  s    z000re   c                     |j         }t          | j        |          }| j                            ||           | j                            ||           d S r_   )r4	  r   r
  r  r
  )ra   r  r  r  s       rc   r  z_SortedFieldList.insert3  sP    N
A&&
!Q1d#####re   c                 P    |                      |          }| j        |= | j        |= d S r_   )rx  r
  r
  )ra   r  r  s      rc   r  z_SortedFieldList.remove9  s*    jjKJsOOOre   N)rf   rg   rh   r  r  r  r  r
  rx  r  r  r`   re   rc   r
  r
    s        #I    ! ! !( ( (1 1 1$ $ $    re   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 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 )'rN   Nc                 f    || _         || _        |                    dt                     || _        d S )Nr  )rA  rJ  r  rD  r  )ra   rA  r  r  s       rc   r  zSchemaManager.__init__C  s4    
!""7L999.re   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)rJ  rA  r'  r  r8   r  s     rc   r  zSchemaManager.databaseI  sF    ^8tz/8:& (ACG:(N O O O	re   c                     || _         d S r_   r   r  s     rc   r  zSchemaManager.databaseQ  s    re   c                 0     | j         j        di | j        S r  )r  rL  r  r  s    rc   _create_contextzSchemaManager._create_contextU  s     ,t},DDt/CDDDre   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 r5  r   c                 4    g | ]}j         |         j        S r`   )r@  r  )rV  
field_namerH  s     rc   rY  z/SchemaManager._create_table.<locals>.<listcomp>d  s9     J J J( +j18 J J Jre   rG  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr  r  )r  r
  r  r)  rA  r'  composite_keyr  r
  r  ru  rQ   r.  sorted_fieldsrU	  rv   r6   r  r^
  r  r7  _create_table_option_sqltable_settingsrc  r9  r  strict_tableswithout_rowidrU  )ra   r/  r$  is_tempr9  r  r  
pk_columnsrA  r
  setting
extra_optsrH  s               @rc   _create_tablezSchemaManager._create_tableX  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!':66 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
re   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  )rP  rA  r'  r$  r  r  rv   re  r&  r(  rQ   rW  r  ru  )ra   r$  r  r  r~   s        rc   r
  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#>>>????re   c                 T    | j                              | j        dd|i|           d S Nr/  r`   )r  r  r
  ra   r/  r$  s      rc   r"  zSchemaManager.create_table  s7    0d0FFdFgFFGGGGGre   c                 J   |                                                      |                    d          rdnd          }|r|                    d           |                    t	          t          |                                         d                              |          S )Nr
  r
  r
  r5  r  )r
  r  r  r)  rf  rc  ra   r;  r;  r/  rH  r9  s         rc   _create_table_aszSchemaManager._create_table_as  s    ##%%88K00F116EG G 	  	*KK()))V\*55677U	re   c                 \     | j         ||fd|i|}| j                            |           d S )Nr/  )r
  r  r  r
  s         rc   create_table_aszSchemaManager.create_table_as  s?    #d#JIIDIDIIc"""""re   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  r)  rA  r  )ra   r/  r$  r9  s       rc   _drop_tablezSchemaManager._drop_table  s    ##%%4J//]KKDJ 	 ;;y!! 	+++j))CC[[$$ 	+++k**C
re   c                 T    | j                              | j        dd|i|           d S r
  )r  r  r
  r
  s      rc   r'  zSchemaManager.drop_table  s7    .d.DDDDGDDEEEEEre   Fc                 z   | j         }|j        s?|                                                     d                              | j                  S |                                                     d                              | j                  }|r|                    d          }|r|                    d          }|S )Nr&  zTRUNCATE TABLE z RESTART IDENTITYr
  )r  rH  r
  r  r)  rA  )ra   restart_identityr
  rM  r9  s        rc   _truncate_tablezSchemaManager._truncate_table  s    ]  	>((**W^,,SS__> ""$$,,->??CCDJOO 	3++122C 	*++j))C
re   c                 b    | j                             |                     ||                     d S r_   )r  r  r  )ra   r   r
  s      rc   rH  zSchemaManager.truncate_table  s/    d223CWMMNNNNNre   c                 \      fd j         j                                        D             S )Nc                 <    g | ]}                     |          S r`   )_create_indexrV  rx  r/  ra   s     rc   rY  z1SchemaManager._create_indexes.<locals>.<listcomp>  s?     A A A ""5$// A A Are   rA  r'  fields_to_indexra   r/  s   ``rc   _create_indexeszSchemaManager._create_indexes  sN    A A A A A!Z-==??A A A 	Are   c                 P   t          |t                    rk| j        j        s|                    d          }n |j        |k    r|                    |          }t          | j        t                    rt          |          }| 	                                
                    |          S rh  )rv   r9   r  rE  r/  r,  rJ  rR   r  r
  r)  )ra   rx  r/  s      rc   r  zSchemaManager._create_index  s    eU## 	-=2 )

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

4(($..99 - &e,,##%%))%000re   c                 l    |                      |          D ]}| j                            |           d S N)r/  )r
  r  r  ra   r/  r;  s      rc   create_indexeszSchemaManager.create_indexes  sE    ))t)44 	) 	)EM!!%((((	) 	)re   c                 \      fd j         j                                        D             S )Nc                 f    g | ]-}t          |t                                        |          .S r`   )rv   r9   _drop_indexr  s     rc   rY  z/SchemaManager._drop_indexes.<locals>.<listcomp>  sH     - - -eU++-  -- - - -re   r  r	  s   ``rc   _drop_indexeszSchemaManager._drop_indexes  sE    - - - - -!Z-==??- - - 	-re   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  rF  rv   r)  rS   r  rf  r  r
  r  r)  )ra   rx  r/  r9  r:  s        rc   r  zSchemaManager._drop_index  s    !	 	&DM1 	&%IelE** 	-u|/C 	- 4ekBBJJ,,J ""##Z	"re   c                 l    |                      |          D ]}| j                            |           d S r  )r  r  r  r  s      rc   drop_indexeszSchemaManager.drop_indexes  sE    ''T'22 	) 	)EM!!%((((	) 	)re   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".)rN  r  rG  r  r  r"	  s     rc   _check_sequenceszSchemaManager._check_sequences  sC    ~ 	?T]%< 	? 138:> ? ? ?	? 	?re   c                     |j         j        j        r$t          |j         j        j        |j                  S t          |j                  S r_   )rA  r'  r  rf  rN  r"	  s     rc   _sequence_for_fieldz!SchemaManager._sequence_for_field  s<    ;# 	*%++2ENCCC%.)))re   c                    |                      |           | j                            |j                  sM|                                                     d                              |                     |                    S d S )NzCREATE SEQUENCE r  r  r  rN  r
  r  r)  r  r"	  s     rc   _create_sequencezSchemaManager._create_sequence  sv    e$$$},,U^<< 	;$_&&W/00S11%8899;	; 	;re   c                 l    |                      |          }|| j                            |           d S d S r_   )r  r  r  ra   rA  seq_ctxs      rc   create_sequencezSchemaManager.create_sequence  s?    ''..M!!'***** re   c                    |                      |           | j                            |j                  rM|                                                     d                              |                     |                    S d S )NzDROP SEQUENCE r  r"	  s     rc   _drop_sequencezSchemaManager._drop_sequence  sv    e$$$=((88 	;$_&&W-..S11%8899;	; 	;re   c                 l    |                      |          }|| j                            |           d S d S r_   )r#  r  r  r  s      rc   drop_sequencezSchemaManager.drop_sequence
  s?    %%e,,M!!'***** re   c                     |                                                      d                              |j                                      d                              |                    d                    S )NzALTER TABLE z ADD T)r
  r  r)  rA  r^
  r"	  s     rc   _create_foreign_keyz!SchemaManager._create_foreign_key  sY     ""((U[!!!!U11$7788	:re   c                 `    | j                             |                     |                     d S r_   )r  r  r'  r"	  s     rc   create_foreign_keyz SchemaManager.create_foreign_key  s,    d66u==>>>>>re   c                     | j         j        r0| j        j        j        D ] }|j        r|                     |           d S d S r_   )r  rG  rA  r'  r
  rN  r!  r"	  s     rc   create_sequenceszSchemaManager.create_sequences  sY    =" 	0)7 0 0> 0((///	0 	00 0re   c                 v    |                                    | j        |fi | |                     |           d S r  )r+  r"  r  )ra   r/  table_optionss      rc   
create_allzSchemaManager.create_all   sL    $00-000&&&&&re   c                     | j         j        r0| j        j        j        D ] }|j        r|                     |           d S d S r_   )r  rG  rA  r'  r
  rN  r%  r"	  s     rc   drop_sequenceszSchemaManager.drop_sequences%  sY    =" 	.)7 . .> .&&u---	. 	.. .re   c                 R     | j         |fi | |r|                                  d S d S r_   )r'  r0  )ra   r/  r0  r$  s       rc   drop_allzSchemaManager.drop_all+  sF    ((((( 	"!!!!!	" 	"re   r_   rm  rj  rD  )#rf   rg   rh   r  r  r  r  r
  r
  r
  r"  r
  r
  r
  r'  r  rH  r
  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r)  r+  r.  r0  r2  r`   re   rc   rN   rN   B  sc       / / / /   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) ) ) )- - - -
" " ") ) ) )? ? ?
* * *; ; ;+ + +
; ; ;+ + +
: : :? ? ?0 0 0' ' ' '
. . ." " " " " "re   rN   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   rA  r  r@  r  combinedr
  _sorted_field_listr
  sorted_field_namesr  _default_by_name_default_dict_default_callables_default_callable_listrf   rl  r  rs  rE  make_table_namer;  r)  r`  r  r  r  r  r
  rV	  only_save_dirty
depends_onr
  r
  r
  r
  refsbackrefsr  defaultdictr
  model_backrefs
manytomanyr$  r  r  rP  keys_additional_keysr	  )ra   rA  r  r;  r  r  r  r  r>  r?  r$  db_tablers  r
  r
  r
  r
  rE  r  r  r~   s                        rc   r  zMetadata.__init__2  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 re   c                 x    | j         rt          j        dd| j                  S t	          | j        j                  S )NrC  rq  )rE  rD  rj  r  rn  rA  rf   r  s    rc   r=  zMetadata.make_table_nameu  s6    " 	56)S$)444tz2333re   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  rA  rP  r  dequer  popleftr  r@  r  r  r'  rA  )ra   r@  rA  depth_firstr  r  queuer  currfkrA  s              rc   model_graphzMetadata.model_graphz  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----  	. re   c                     |j         }|| j        |<   | j        |                             |           | j        |j        j        |<   |j        j        | j                                     |           d S r_   )r	  r@  r
  r  rA  r'  rA  rC  ra   rA  rels      rc   add_refzMetadata.add_ref  sg    o	%##E***$(J	5!	 ,33E:::::re   c                     |j         }| j        |= | j        |                             |           |j        j        |= |j        j        | j                                     |           d S r_   )r	  r@  r
  r  r'  rA  rC  rA  rR  s      rc   
remove_refzMetadata.remove_ref  sa    oIe##E***Iu%	 ,33E:::::re   c                 $    || j         |j        <   d S r_   rD  r  r"	  s     rc   add_manytomanyzMetadata.add_manytomany  s    &+
###re   c                      | j         |j        = d S r_   rX  r"	  s     rc   remove_manytomanyzMetadata.remove_manytomany  s    OEJ'''re   c                     | j         <t          | j        d | j        D             | j        | j        | j                  | _         | j         S )Nc                     g | ]	}|j         
S r`   )r  rV  rA  s     rc   rY  z"Metadata.table.<locals>.<listcomp>  s    CCCu"CCCre   )r  r  rJ  )r)  rS   r;  r
  r  rA  r  r  s    rc   r(  zMetadata.table  sR    ;CC0BCCC{z-) ) )DK {re   c                      t          d          )NzCannot set the "table".r  r  s     rc   r(  zMetadata.table  s    6777re   c                     d | _         d S r_   )r)  r  s    rc   r(  zMetadata.table  r  re   c                     | j         S r_   )r  r  s    rc   r  zMetadata.schema  s
    |re   c                     || _         | `d S r_   )r  r(  r  s     rc   r  zMetadata.schema  s    JJJre   c                 l    | j         rt          | j         | j                  S t          | j                  S r_   )r  rf  r;  r  s    rc   r  zMetadata.entity  s0    < 	+$,888$/***re   c                 d    t          | j                  | _        d | j        D             | _        d S )Nc                     g | ]	}|j         
S r`   r  )rV  r
  s     rc   rY  z2Metadata._update_sorted_fields.<locals>.<listcomp>  s    "F"F"Fa16"F"F"Fre   )r`  r7  r
  r8  r  s    rc   _update_sorted_fieldszMetadata._update_sorted_fields  s4    !$"9::"F"F43E"F"F"Fre   c                     t          |t                    r|j        }| j                            |g           }| j                            |g           }||fS r_   )rv   
ModelAliasrA  r
  r  rC  )ra   rA  forwardrefsrA  s       rc   get_rel_for_modelzMetadata.get_rel_for_model  sU    eZ(( 	 KEo))%44&**5"55X&&re   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 r_   )r@  remove_fieldrD  r[  rv   r~
  r(  r  rA  r  r  r  r6  r7  r  rg  r  r  r  r;  r<  r  r:  r9  r6   rT  r@   rY  )ra   r
  rA  r>	  s       rc   rk
  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 	'&&&&&	' 	' 	' 	're   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 r_   )r@  r(  r  r  r  r6  r   r7  r  rg  r  r  r;  r   r<  r:  r9  r  rv   r6   rV  )ra   r
  originalr  r  rq  s         rc   rm  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 r_   )rv   r"   r
  rk
  r  rV	  re  rN  )ra   r  rA  s      rc   rj
  zMetadata.set_primary_key  sV    '|<<tU###   !   	re   c                       j         r%t           fd j        j        D                       S  j        dur j        fndS )Nc                 *    g | ]}j         |         S r`   r@  )rV  r
  ra   s     rc   rY  z-Metadata.get_primary_keys.<locals>.<listcomp>  s6     J J J( +j1 J J Jre   Fr`   )r
  ra  r  r
  r  s   `rc   r  zMetadata.get_primary_keys  sw     	P J J J J,0,<,HJ J J K K K +/*:%*G*GD$&&ROre   c                 l    | j                                         }| j        D ]\  }} |            ||<   |S r_   )r9  rL  r<  )ra   ddr
  r  s       rc   get_default_dictzMetadata.get_default_dict$  sC    "''))#'#> 	' 	'J$WYYBzNN	re   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 )N)r.  r0  z;Expected either a field name or a subclass of Node. Got: %s)r.  )r
  r  rx  r.  r  rB   rA  r>  r  rv   re  r`  ra  r9  r6  r  )ra   r  r
  	index_objindex_partsr.  r@  rW  s           rc   r  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!$
33 MdmD&9::::#D$// Md++++( *EGK*L M M Mz$*fVLLLMMMre   c                     || _         || j        j        _        | `t          |t                    r	|j        d }| j        D ]} ||           d S r_   )	r  rA  r  rJ  r(  rv   rL   r  r	  )ra   r  hooks      rc   set_databasezMetadata.set_databaseE  se     '/
$J h&& 	8<+?HN 	 	DDNNNN	 	re   c                     || _         | `d S r_   )r;  r(  )ra   r;  s     rc   set_table_namezMetadata.set_table_nameR  s    $JJJre   )NNNNNNFNNNNNFFNT)TTTrm  )rf   rg   rh   r  r=  rP  rT  rV  rY  r[  r  r(  r  deleterr  r  rg  rk  rk
  rm  rj
  r  rv  r  r|  r~  r`   re   rc   r4  r4  1  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      re   r4  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 r_   )r  r  r  r#  r  ra   rA  r  r  r  s       rc   r  zSubclassAwareMetadata.__init__Z  sM    3#T**3EKDKKKFKKK5!!!!!re   c                 0    | j         D ]} ||           d S r_   )r#  )ra   r5   rA  s      rc   
map_modelsz SubclassAwareMetadata.map_models^  s,    [ 	 	EBuIIII	 	re   )rf   rg   rh   r#  r  r  r  r  s   @rc   r  r  W  sL        F" " " " "      re   r  c                       e Zd ZdS )r.   Nr  r`   re   rc   r.   r.   c  r  re   r.   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  r$  r  rs  r
  r>  rE  r
  r
  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  rq  r  r'  r  r  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr'  __composite_key__Tr  r9	  c                 D    dj         d|                                 dS )Nr   r8	  r   )rf   r  )ra   r  s    rc   rx   z#ModelBase.__new__.<locals>.<lambda>  s#     dllnnnn3. re   z%sDoesNotExistrg   ),rG  rf   r  r  r  r  r[  r  r|  r   r  r'  r   r  inheritablerF  r  r  r  rv   r	  rA  r  r4  rN   r	  r	  r  r2   r  r  r  r   r"   r
  rj
  rk
  r  rg   r  r.   validate_modelr+   rs
  )r  r  basesr
  r  meta_optionsrH  r  rX  rI  pk_name	parent_pkr	  	base_metaall_inheritablesoptsr  Schemar@  r  r~   rA  exc_name	exc_attrsexception_classr  s   `                        rc   r  zModelBase.__new__l  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'''
re   c                     d| j         z  S )Nz<Model: %s>)rf   r  s    rc   r9	  zModelBase.__repr__  s    t},,re   c                 D    t          |                                           S r_   )rw  r  r  s    rc   r  zModelBase.__iter__  s    DKKMM"""re   c                 ,    |                      |          S r_   )	get_by_idra   r  s     rc   r  zModelBase.__getitem__  s    ~~c"""re   c                 2    |                      ||           d S r_   )	set_by_id)ra   r  r~   s      rc   r  zModelBase.__setitem__  s    sE"""""re   c                 0    |                      |           d S r_   )delete_by_idr  s     rc   r	  zModelBase.__delitem__  s    #re   c                 T    	 |                      |           dS # | j        $ r Y dS w xY wr  )r  r.   r  s     rc   r
  zModelBase.__contains__  sG    	NN3 4   	 	 	55	s    
''c                 N    |                                                                  S r_   )r  r'  r  s    rc   r  zModelBase.__len__  s    {{}}""$$$re   c                     dS r@  r`   r  s    rc   __bool__zModelBase.__bool__  s    ttre   c                 @    |                     | j        j                  S r_   )r)  r'  r(  r8  s     rc   r%  zModelBase.__sql__  s    wwtz'(((re   )rf   rg   rh   rP  r  r  r9	  r  r  r  r	  r
  r  r  __nonzero__r%  r  r  s   @rc   r  r  f  s        # : : : ; ;K
Y Y Y Y Yv- - -# # ## # ## # #    % % %###K) ) ) ) ) ) )re   r  c                        e Zd Zd Zd Zd ZdS )r<  c                 >    || _         || _        || _        || _        d S r_   )r#  r  r8  r9  )ra   r#  r  r8  r9  s        rc   r  z_BoundModelsContext.__init__  s%     "*re   c           	          g | _         | j        D ]`}| j                             |j        j                   |                    | j        | j        | j        t          | j                             a| j        S N)rZ  )	r  r#  r  r'  r  r  r8  r9  rP  )ra   rA  s     rc   r  z_BoundModelsContext.__enter__  sy     [ 	2 	2E&&u{';<<<JJt}dnd6H #DK 0 0  2 2 2 2{re   c           	          t          | j        | j                  D ]:\  }}|                    || j        | j        t          | j                             ;d S r  )r
  r#  r  r  r8  r9  rP  )ra   r  r   r!  rA  rM  s         rc   r  z_BoundModelsContext.__exit__  sf    T[$*=>> 	2 	2IE2JJr4>4+= #DK 0 0  2 2 2 2	2 	2re   N)rf   rg   rh   r  r  r  r`   re   rc   r<  r<    sA        + + +  2 2 2 2 2re   r<  c                   v   e Zd Zd Zd Zed             Zed3d            Zed             Zed             Z	ed3d            Z
ed3d	            Zed3d
            Zed             Zed3d            Zed3d            Zed             Zed             Zed             Zed3d            Zed3d            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#d4d!Z$d" Z%ed#             Z&d5d%Z'd6d&Z(d' Z)d( Z*d) Z+d* Z,ed7d+            Z-ed8d,            Z.ed-             Z/ed9d.            Z0ed8d/            Z1ed0             Z2ed1             Z3ed2             Z4dS ):rA   c                     |                     dd           ri | _        n| j                                        | _        t	          | j                  | _        i | _        |D ]}t          | |||                    d S )N__no_default__)r  r	  r'  rv  rP  r	  r	  r  )ra   r  r  r  s       rc   r  zModel.__init__  s    ::&-- 	:DMM J7799DM$-(( 	( 	(AD!VAY''''	( 	(re   c                 J    | j         j        durt          | j                  ndS )NFzn/a)r'  r  rW  _pkr  s    rc   r  zModel.__str__  s#     $
 6e C Cs48}}}Nre   c                     d S r_   r`   r  s    rc   r  zModel.validate_model  s    re   Nc                 "    t          | |          S r_   )ri  )r  r  s     rc   r  zModel.alias  s    #u%%%re   c                 H    | }|s| j         j        }t          | ||          S )N)
is_default)r'  r
  ModelSelect)r  r@  r  s      rc   r  zModel.select  s0    Z
 	-Y,F3:>>>>re   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 rR  )	rv   r  r  r2   r'  r6  r   re  r   )r  r	  r  
normalizedr  rA  s         rc   _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 r_   )ModelUpdater  )r  _Model__datar   s      rc   r   zModel.update5  "    3 3 3FF C CDDDre   c                 J    t          | |                     ||                    S r_   )ModelInsertr  r  r  r  s      rc   r  zModel.insert9  r  re   c                 &    t          | ||          S r	  r  r  rS  r@  s      rc   insert_manyzModel.insert_many=  s    3tV<<<<re   c                 D      fd|D             }t           ||          S )Nc                 ^    g | ])}t          |t                    rt          |          n|*S r`   )rv   r9  r   )rV  rA  r  s     rc   rY  z%Model.insert_from.<locals>.<listcomp>C  sJ     3 3 3"' +5UJ*G*G 73&&&3 3 3re   r
  r  )r  r;  r@  r  s   `   rc   insert_fromzModel.insert_fromA  s@    3 3 3 3+13 3 33ug>>>>re   c                 D     | j         |fi |                    d          S r  r  r  s      rc   r   zModel.replaceG  s*    sz&++F++77	BBBre   c                 V    |                      ||                              d          S )N)rS  r@  r  )r  r  r  s      rc   replace_manyzModel.replace_manyK  s(    $v66Y''	)re   c                 $    t          | ||          S r_   )ModelRaw)r  r)  rN  s      rc   rawz	Model.rawQ  s    S&)))re   c                      t          |           S r_   )ModelDeleter  s    rc   r  zModel.deleteU  s    3re   c                 B     | di |}|                     d           |S )NT)force_insertr`   )save)r  r;  insts      rc   createzModel.createY  s,    s||U||		t	$$$re   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'  r@  )rV  r
  r  s     rc   rY  z%Model.bulk_create.<locals>.<listcomp>q  s#    MMM:#)":.MMMre   c              3   6   K   | ]fd D             V  dS )c                 0    g | ]}t          |          S r`   r  )rV  r
  rA  s     rc   rY  z/Model.bulk_create.<locals>.<genexpr>.<listcomp>z  s#    777AgeQ''777re   Nr`   )rV  rA  r
  s    @rc   rr  z$Model.bulk_create.<locals>.<genexpr>z  sL       ) ) 8777777 ) ) ) ) ) )re   rs  )r    r`  r'  r8  rV	  r  r  r  r  r  r  rv   r6   r  rJ
  r  r  r
  r  )r  
model_list
batch_sizebatchesr
  r  	pk_fieldsr@  rA  batchr  rO  r0  rA  pk_fieldobj_idr
  s   `               @rc   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====>	> 	>re   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 ]k}t          ||          }t          |t                    s|	                    |          }|
                    |	                    |j                  |f           lt          ||          }||
|<   |                     |
                               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`   )rv   r9  r'  r@  )rV  r
  r  s     rc   rY  z%Model.bulk_update.<locals>.<listcomp>  sG     # # # *4Az)B)BI#)"1%% # # #re   c                 T    g | ]%}t          |t                    r|j        n|j        &S r`   )rv   r6   rJ
  r  r^  s     rc   rY  z%Model.bulk_update.<locals>.<listcomp>  sD     6 6 6%* *4E?)K)K !%%j6 6 6re   r   c                     g | ]	}|j         
S r`   )r  r
  s     rc   rY  z%Model.bulk_update.<locals>.<listcomp>  s    444Uuy444re   )rv   r'  r  r"   r  r    r
  r   re  r  r  r  r   r   r5  r  r  )r  r  r@  r  r
  r  rz  rI  r  id_listr   rA  r   r  rA  r~   cases   `                rc   bulk_updatezModel.bulk_update  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 6 %u 5 5LL"++ei"8"8%!@AAAAB $u#**V$$5.227;;<<799AA re   c                 "    t          | d          S r  )NoopModelSelectr  s    rc   noopz
Model.noop  s    sB'''re   c                 8   |                                  }|rbt          |          dk    rEt          |d         t                    r*|                    | j        j        |d         k              }n
 |j        | }|r |j        di |}|                                S )Nr   r   r`   )	r  r   rv   r   r5  r'  r  r6  r  )r  r;  filterssqs       rc   r  z	Model.get  s    ZZ\\ 	&5zzQ:eAh#<#<XXci3uQx?@@RXu% 	&%%W%%Bvvxxre   c                 @    	  | j         |i |S # t          $ r Y d S w xY wr_   )r  r.   )r  r;  r  s      rc   get_or_nonezModel.get_or_none  s@    	37E-W--- 	 	 	DD	s    
c                 H    |                      | j        j        |k              S r_   )r  r'  r  r  rI  s     rc   r  zModel.get_by_id  s    wwsy,2333re   c                     |'|                      |                                          S |                     |                              | j        j        |k                                              S r_   )r  r  r   r5  r'  r  )r  r  r~   s      rc   r  zModel.set_by_id  sY    ;::e$$,,...JJu%%U390C788Dre   c                     |                                                      | j        j        |k                                              S r_   )r  r5  r'  r  r  r  s     rc   r  zModel.delete_by_id  s4    zz||!!#)"72"=>>FFHHHre   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  r5  r   r  r.   r   r'  r  r  r  r;   )r  r  r  r;  rA  r~   excs          rc   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 r_   )r  r6  )r  dq_nodesr  s      rc   r6  zModel.filter  s"    "szz||"H8888re   c                 `    | j         j        durt          | | j         j        j                  S d S rh  )r'  r  r   r;	  r  s    rc   get_idzModel.get_id  s4    
 :!..4!7!ABBB /.re   c                 F    t          | | j        j        j        |           d S r_   )r  r'  r  r  r  s     rc   r  z	Model._pk  s"    dj,1599999re   c                 ,    | j         j        | j        k    S r_   )r'  r  r  r  s    rc   _pk_exprzModel._pk_expr  s    z%11re   c                     i }|D ]G}t          |t                    r| j        j        |         }|j        |v r||j                 ||j        <   H|S r_   )rv   r9  r'  r6  r  )ra   
field_dictonlynew_datarA  s        rc   _prune_fieldszModel._prune_fields  s]     	> 	>E%,, 3
+E2zZ'''1%*'=$re   c           	          | j         j        D ]d}|j        }||v o%||         d u o| j                            |          d u}|r/t          | |t          | |                     | j        |         ||<   ed S r_   )r'  r@  r  r	  r  r  r   r	  )ra   r  foreign_key_fieldforeign_key
conditionss        rc   _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re   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	  rL  r'  r  r  r  r>  dirty_fieldsr	  r	  r  rV	  r  r  r
  r
  r  r   r5  r  r  r  ro
  rP  )	ra   r  r  r  r  pk_valuerS  pk_part_namerI  s	            rc   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:&re   c                 *    t          | j                  S r_   )re  r	  r  s    rc   is_dirtyzModel.is_dirty:  r  re   c                 4      fd j         j        D             S )Nc                 0    g | ]}|j         j        v |S r`   )r  r	  r
  s     rc   rY  z&Model.dirty_fields.<locals>.<listcomp>?  s'    MMMaqv7L7L7L7L7Lre   )r'  r
  r  s   `rc   r  zModel.dirty_fields=  s"    MMMM4:3MMMMre   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  rP  r  r  r'  rA  r  r	  r	  r  r  r  r5  r  r  r  r  r!  r  )ra   search_nullableexclude_null_childrenmodel_classr  queriesr  r  r;  rO  r	  r=  r  r   r  qs                   rc   dependencieszModel.dependenciesA  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	 	re   c                    |r|                      |           D ]\  }}|j        }|j        r<|s: |j        di |j        d i                    |                                           O|                                                    |                                           t          |                                                               | 	                                                                          S )N)r  r`   )
r  rA  r  r   r  r5  r  r  r  r  )ra   r  delete_nullabler;  rO  rA  s         rc   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Cre   c                 8    t          | j        | j        f          S r_   )r  r  r  r  s    rc   r  zModel.__hash__j  s    T^TX.///re   c                 T    |j         | j         k    o| j        d uo| j        |j        k    S r_   )r  r  r  s     rc   r  zModel.__eq__m  s3    Ot~- "HD "H	!	#re   c                     | |k     S r_   r`   r  s     rc   r  zModel.__ne__s  s    5=  re   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 )Nr.  )r	  r/  r  r)  rY   r  r  r   r'  r  r  r
  r8  s     rc   r%  zModel.__sql__v  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@  rA  )r'  r  r|  rP  rP  r  )
r  r  r8  r9  rZ  is_differentGrq  rA  
is_backrefs
             rc   r  z
Model.bind  s    y)9	x((( 	( 	(55	%%9}%MMA() ( ($5*((K,,X666LL'''re   c                 (    t          | f|||          S r_   r;  )r  r  r8  r9  s       rc   r  zModel.bind_ctx  s    "C68YNNNre   c                 n    | j         }| j        j                            |j        j        |j                  S r_   )r'  r  r  r  r(  rf   r  )r  Ms     rc   r  zModel.table_exists  s+    I{#001A18LLLre   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  rE  r  r'  r
  r  r.  )r  r/  r$  s      rc   r"  zModel.create_table  s    g%% C D D D;;//D 	,> 	!!	F9 	A{CI,?@@@t//w/////re   c                     |r'| j         j        j        s|                                 sd S | j        j        r |                    d| j        j                    | j         j        ||fi | d S )Nr
  )r  r  rF  r  r'  r
  r  r2  )r  r/  r0  r$  s       rc   r'  zModel.drop_table  s     	,< 	##%%	F9 	A{CI,?@@@T>==W=====re   c                 *     | j         j        di | d S r  )r  rH  )r  r$  s     rc   rH  zModel.truncate_table  s#    ""--W-----re   c                     t          | |fi |S r_   )rB   r  r@  r  s      rc   rx  zModel.index  s    #v00000re   c                    t          |          dk    rIt          |d         t          t          f          r'| j        j                            |d                    d S | j        j                            t          | |fi |           d S rR  )r   rv   rQ   r9   r'  r  r  rB   r.  s      rc   	add_indexzModel.add_index  s~    v;;!
6!9sEl C CI$$VAY/////I$$ZV%F%Fv%F%FGGGGGre   r_   )FNr	  rj  )TTNrD  rm  )5rf   rg   rh   r  r  classmethodr  r  r  r  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r6  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r  r  r  r"  r'  rH  rx  r0  r`   re   rc   rA   rA     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   >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re   rA   c                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )ri  z3Provide a separate reference to a model in a query.Nc                 .    || j         d<   || j         d<   d S )NrA  r  )r[  )ra   rA  r  s      rc   r  zModelAlias.__init__  s     !&g!&gre   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 r_   )rA  rk  r[  rv   r  r~  r   r   r2   
FieldAliasr  )ra   r   r	  r  
model_attrs        rc   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      rc   r   zModelAlias.__setattr__  s    FGGGre   c                 >      fd j         j        j        D             S )Nc                 0    g | ]}t          |          S r`   r  )rV  rz  ra   s     rc   rY  z0ModelAlias.get_field_aliases.<locals>.<listcomp>  s#    NNNQa  NNNre   )rA  r'  r8  r  s   `rc   get_field_aliaseszModelAlias.get_field_aliases  s%    NNNN$**:*MNNNNre   c                 N    |s|                                  }t          | |          S r_   )r:  r  )ra   	selections     rc   r  zModelAlias.select  s+     	1..00I4+++re   c                      | j         di |S r  rA  )ra   r  s     rc   r  zModelAlias.__call__  s    tz##F###re   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  rD  r)  rA  r  r  rB  r'  r  r  rf  r8  s     rc   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::;;;re   r_   )rf   rg   rh   r  r  r   r   r:  r  r  r%  r`   re   rc   ri  ri    s        ==' ' ' '  &H H HO O O, , ,
$ $ $< < < < <re   ri  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 )
r5  c                 :    || _         |j        | _        || _        d S r_   )rM  rA  rA  )ra   rM  rA  s      rc   r  zFieldAlias.__init__  s    \



re   c                 R     G d d| t          |                    } |||          S )Nc                       e Zd ZdS )&FieldAlias.create.<locals>._FieldAliasNr  r`   re   rc   _FieldAliasrD  
  s        Dre   rE  )r  )r  rM  rA  rE  s       rc   r  zFieldAlias.create  sF    	 	 	 	 	#tE{{ 	 	 	{65)))re   c                 6    t          | j        | j                  S r_   )r5  rM  rA  r  s    rc   r\  zFieldAlias.clone  s    $+tz222re   c                 6    | j                             |          S r_   )rA  rA	  r  s     rc   rA	  zFieldAlias.adapt  s    4:#3#3E#:#::re   c                 6    | j                             |          S r_   )rA  r0  r  s     rc   r0  zFieldAlias.python_value  s    $**A*A%*H*H#Hre   c                 6    | j                             |          S r_   )rA  r
  r  s     rc   r
  zFieldAlias.db_value  s    dj&9&9%&@&@@re   c                 F    |dk    r| j         nt          | j        |          S )NrA  )rM  r   rA  r   s     rc   r   zFieldAlias.__getattr__  s"    "goot{{74:t3L3LLre   c                 f    |                     t          | j        | j        j                            S r_   )r)  r!   rM  rA  r  r8  s     rc   r%  zFieldAlias.__sql__  s%    wwvdk4:+ABBCCCre   N)rf   rg   rh   r  r1  r  r\  rA	  r0  r
  r   r%  r`   re   rc   r5  r5    s          
 * * [*
3 3 3 ;::HHH@@@M M MD D D D Dre   r5  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 r_   )r  r'  r@  r  r  r?  r  )rA  r	  r	  
dependencydfsr#  r:  r  s       rc   rO  zsort_models.<locals>.dfs  s    F??uD00HHUOOO*/+*:*@*@*B*B # #&Y #+ #C	NNN{% $"'+"8 $ $JC
OOOOOOE""""" ?00re   c                 2    | j         j        | j         j        fS r_   )r'  r  r;  )r   s    rc   rx   zsort_models.<locals>.<lambda>,  s    qw|QW%78 re   r  )rP  r  )r#  r)  r   rO  r:  r  s   `  @@@rc   r!  r!    s    [[F55DH# # # # # # # # 98EF&&&  AOre   c                   Z     e Zd Zej        Z fdZej        dd            Z	d Z
d Z xZS )_ModelQueryHelperc                      t          t          |           j        |i | | j        s| j        j        j        | _        d S d S r_   )r  rR  r  rJ  rA  r'  r  r  s      rc   r  z_ModelQueryHelper.__init__5  sM    /&&/@@@@~ 	7!Z-6DNNN	7 	7re   Nc                 H    t           j        | _        || j        n|| _        d S r_   )r  r@  r  rA  r  r  s     rc   r@  z_ModelQueryHelper.objects:  s$    *5*=DJJ;re   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  rA  _get_model_cursor_wrapperr>  ModelDictCursorWrapperrA  rn  r=  ModelTupleCursorWrapperr?  ModelNamedTupleCursorWrapperr@  ModelObjectCursorWrapperr  r  r  s      rc   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Gre   c                 :    t          || j        g | j                  S r_   )rZ  rA  r  s     rc   rV  z+_ModelQueryHelper._get_model_cursor_wrapperP  s    '
B
KKKre   r_   )rf   rg   rh   r  rA  r  r  re  rL  r@  r  rV  r  r  s   @rc   rR  rR  2  s        y7 7 7 7 7
 
YO O O YOH H H"L L L L L L Lre   rR  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  )rA  rn  r  r  r  )ra   rA  r)  rN  r  r  s        rc   r  zModelRaw.__init__U  sA    
&h&H3vHHHHHHHre   c                     	 |                                  d         S # t          $ r? |                                 \  }}| j                            | j        d|d|          w xY w)Nr   . instance matching query does not exist:
SQL: 	
Params: )r  rh  r)  rA  r.   r  s      rc   r  zModelRaw.getZ  s    	E<<>>!$$ 	E 	E 	E((**KC*))+/:::sssFF+D E E E	Es
    A	A%)rf   rg   rh   r  r  r  r  s   @rc   r  r  T  sS        I I I I I
E E E E E E Ere   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 )NrF  ModelCompoundSelectQueryrA  r   s     rc   rH  zBaseModelSelect.union_alle      '
D+sKKKre   c                 0    t          | j        | d|          S )NrG  rd  r   s     rc   rK  zBaseModelSelect.unioni  s    '
D'3GGGre   c                 0    t          | j        | d|          S )NrH  rd  r   s     rc   rK  zBaseModelSelect.intersectm  rf  re   c                 0    t          | j        | d|          S )NrI  rd  r   s     rc   rL  zBaseModelSelect.except_q  s    '
D(CHHHre   c                 `    | j         s|                                  t          | j                   S r_   )r  r  rw  r  s    rc   r  zBaseModelSelect.__iter__u  s+    # 	LLNNND()))re   c                 "    t          | g|R i |S r_   )rI   )ra   
subqueriesr  s      rc   rI   zBaseModelSelect.prefetchz  s     4z444V444re   Nc                    |                      dd          }d |_        	 |                    |          d         S # t          $ r? |                                \  }}| j                            |j        d|d|          w xY w)Nr   r   r_  r`  )r7  r  r  rh  r)  rA  r.   )ra   r  r\  r)  rN  s        rc   r  zBaseModelSelect.get}  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  rA  r.   r  s     rc   r  zBaseModelSelect.get_or_none  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     rc   rY  z,BaseModelSelect.group_by.<locals>.<listcomp>  r  re   )
r&  r7  r'  r
  rv   rS   r  r  r  r^  r  s      @rc   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 ''''!re   r_   )rf   rg   rh   rH  r   rK  r  rK  r  rL  r  r  rI   r  r  re  rL  r  r`   re   rc   rb  rb  d  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" " "re   rb  c                   $     e Zd Z fdZd Z xZS )re  c                 V    || _          t          t          |           j        |i | d S r_   )rA  r  re  r  r  s       rc   r  z!ModelCompoundSelectQuery.__init__  s3    
6&--6GGGGGGre   c                 6    | j                             |          S r_   )r  rV  r  s     rc   rV  z2ModelCompoundSelectQuery._get_model_cursor_wrapper  s    x11&999re   )rf   rg   rh   r  rV  r  r  s   @rc   re  re    sL        H H H H H: : : : : : :re   re  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  )rV  r  fms     rc   rY  z+_normalize_model_select.<locals>.<listcomp>  s#    CCC72s++CCCre   )
r&  r7  r'  r
  rv   ri  r:  rS   r  r  )fields_or_modelsr@  rv  s     @rc   _normalize_model_selectrx    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"Mre   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 r_   )rA  	_join_ctx_joins_is_defaultrx  r  r  r  )ra   rA  rw  r  r@  r  s        rc   r  zModelSelect.__init__  sV    &++
T^%()9::k4  ))5'6:::::re   c                     t          t          |                                           }t          |j                  |_        |S r_   )r  r  r\  r  r|  r  s     rc   r\  zModelSelect.clone  s4    k4((..00EL))re   c                     |s| j         s3d| _         t          |          } t          t          |           j        | S | S rh  )r}  rx  r  r  r  )ra   rw  r@  r  s      rc   r  zModelSelect.select  sJ     	<4#3 	<$D,-=>>F25d++2F;;re   c                 j    d| _         t          |          } t          t          |           j        | S rh  )r}  rx  r  r  r  )ra   r  r@  r  s      rc   r  zModelSelect.select_extend  s2     (115u[$''5v>>re   Nc                 &    || j         n|| _        | S r_   )rA  r{  r8  s     rc   switchzModelSelect.switch  s    '*{re   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 )NTFrh  )r&  rv   rS   r  ri  rA  r  )ra   r  s     rc   
_get_modelzModelSelect._get_model  s    C== 	$9U## 	$
 	$:u$$Z(( 	$9e##[)) 	$9e##{re   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 rR  r  r  zCannot assign join alias to "zF", as this attribute is the object_id_name for the foreign-key field "r  )rv   rR  r  r  r  r{  r!   rM  r'  r  r  r   r2   _generate_on_clauser   r	  rJ
  r  r  r  rS   rf   )ra   r  r  r  r   on_aliasr{
  src_is_model
dest_modeldest_is_modelr  rM
  fk_fieldr%  src_attr	dest_attrr  r   s                     rc   _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+&&re   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 )NFTrh  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`   )r	  )rV  r
  r%  r  rM
  s     rc   rY  z3ModelSelect._generate_on_clause.<locals>.<listcomp>9  sC     D D Dqv++$ &)*)@)@ )@)@)@re   r   r   z"More than one foreign key between z*. Please specify which you are joining on.)r'  r
  rC  r  rv   r5  rA  r   r  r
  r  r   rP  r2   )ra   r  r  rM
  r  rH  r	  rO  r  r   fk_setlhs_frhs_fr%  r  s      `         @@rc   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re   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{  r?   r2  r:  r8  r  r|  r  r  r  r  r  r  )ra   r  r  r  r  r   r  r  s           rc   rU  zModelSelect.joinc  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>>?????re   c                 H    |                      |t          j        |||          S r_   r  )ra   r  r  r  r   s        rc   r  zModelSelect.left_outer_joinw  s    yytC>>>re   c                 4    |                      |||||          S r_   rT  )ra   r  r  r  r  r   s         rc   	join_fromzModelSelect.join_fromz  s    yyy"c4888re   c                     t          | j                  dk    r(| j        s!t          || j        | j        | j                  S t          || j        | j        | j        | j                  S r  )r   r  r|  rZ  rA  rn  ModelCursorWrapperr  s     rc   rV  z%ModelSelect._get_model_cursor_wrapper}  sj    t1$$T[$+FDJ,0OTZI I I!&$*do"&/4;@ @ 	@re   c                     | j         }| j                            |g           D ]\  }}}}||k    r| c S  |                     |          j        |fd|i|                    |          S )Nr  )r{  r|  r  r  rU  )	ra   lmrmr  join_kwargsjoin_ctxr  rq  r  s	            rc   ensure_joinzModelSelect.ensure_join  s    >'+{r2'>'> 	 	#D![!rzz #t{{2#B==2===DDXNNNre   c                 D   g }g }t           t          f}t          |                                          D ]h\  }}| 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 ]J\  }}}}t          ||
d           }	n#  Y nxY w||
k    s t          |t                    r|j        |
k    r|} n?Kt          ||
          }	|,t          |	|          r|	j        }|                    |	           |                     ||	|                     j||fS )Nr`
  r   r  r  r`   )r6   r 	  r  r  rA  rsplitr-   r   r   r|  r  rv   ri  r  r	  r  )ra   qdictr  joinsfksr  r~   rN  r  r6  piecer  r   rq  s                 rc   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	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`   rc  rV  r  s     rc   rY  z&ModelSelect.filter.<locals>.<listcomp>       -F-F-FAaggii-F-F-Fre   c                 6    g | ]}|                                 S r`   rc  r  s     rc   rY  z&ModelSelect.filter.<locals>.<listcomp>  r  re   r  r   r`   )rt   r  r  r0   rN  r\  r  rJ  rP  rK  rv   r
  r  r   r  r;  r  r  r  rg  r  r6   rA  r	  r 	  rA  r  r5  )ra   r  r  dq_noder  dq_joins
seen_joinsrN  sider  r;  r  rU  r  rA  r  r  	field_objs                     rc   r6  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###re   Tc                 6     | j         j        j        || |fi |S r_   )rA  r  r
  )ra   r  r/  rH  s       rc   r"  zModelSelect.create_table  s&    1tz!1$dKKdKKKre   c                     | j         rQ|rOt          | j                  dk    r7| j        j        j        dur$|                    | j        j        j                  S |                    t          | j                            S r  )r}  r   rn  rA  r'  r  r)  r3  r  s      rc   r  zModelSelect.__sql_selection__  sq     	9 	9DO0D0Dq0H0H:'u44774:+7888ww}T_55666re   r  r_   r  r"  rm  )rf   rg   rh   r  r\  r  r  r  r  r  r  re  rL  r?   r3  rU  r  r  rV  r  r  r6  r"  r  r  r  s   @rc   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 7re   r  c                       e Zd Zd Zd ZdS )r  c                 J    | j         j        j                            |          S r_   )rA  r'  r  r@  r8  s     rc   r%  zNoopModelSelect.__sql__  s    z(88===re   c                      t          |          S r_   )r  r  s     rc   r  z#NoopModelSelect._get_cursor_wrapper  s    V$$$re   N)rf   rg   rh   r%  r  r`   re   rc   r  r    s2        > > >% % % % %re   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 r_   )rA  r  r  r  r  s       rc   r  z_ModelWriteQueryHelper.__init__  s>    
4$d++4ULTLLLVLLLLLre   c                     g }|D ]F}t          |          r |                    |j        j                   1|                    |           G t          t          |           j        | S r_   )r&  r7  r'  r
  r  r  r  r  )ra   r  r  r  r  s       rc   r  z _ModelWriteQueryHelper.returning  so     	# 	#D~~ #TZ56666T""""<u+T22<eDDre   c                 F    | j         j        j        }|j        |j        |<   d S r_   )rA  r'  r(  rf   r  )ra   r9  r(  s      rc   r  z'_ModelWriteQueryHelper._set_table_alias  s$    
 &#(>%   re   )rf   rg   rh   r  r  r  r  r  s   @rc   r  r    sj        M M M M ME E E E E2 2 2 2 2 2 2re   r  c                       e Zd ZdS )r  Nr  r`   re   rc   r  r            Dre   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 r_   )	r  r  r  rn  rA  r'  r  r  r  r  s      rc   r  zModelInsert.__init__  s    )k4  )4:6:::?"tz'7'@'Lz(9 F"&*"2"C"C"E"E #"'L'LF Fre   c                 r    |r| j         t          j        | _          t          t          |           j        | S r_   )r  r  rA  r  r  r  )ra   r  r  s     rc   r  zModelInsert.returning  s7    
  	'/ YDN1u[$''19==re   c                 $    | j         j        j        S r_   )rA  r'  r  r  s    rc   r  zModelInsert.get_default_data  s    z((re   c                 ^    | j         j        j        }| j         j        j        r
|dd          n|S r  )rA  r'  r
  rV	  )ra   r@  s     rc   r  zModelInsert.get_default_columns   s.    !/!Z-<Hvabbzz&Hre   )rf   rg   rh   r  r=  r  r  r  r  r  r  r  s   @rc   r  r    s        yF F F F F> > > > >) ) )I I I I I I Ire   r  c                       e Zd ZdS )r  Nr  r`   re   rc   r  r  %  r  re   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 r_   )	_instance	_accessorr
  r	  r  	_src_attrr
  
_dest_attrr  r
  r  )ra   r|  accessorrS  r  r  r  s         rc   r  zManyToManyQuery.__init__*  sg    !!!27"*49-ot$$-cC6KDKKKFKKKKKre   c                 Z     t          |d         t                    r fd|D             S |S )Nr   c                 :    g | ]}t          |j                  S r`   )r   r  r
  s     rc   rY  z,ManyToManyQuery._id_list.<locals>.<listcomp>3  s%    NNNcGC11NNNre   )rv   rA   )ra   model_or_id_lists   ` rc   _id_listzManyToManyQuery._id_list1  s=    &q)511 	ONNNN=MNNNNre   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)r@  r;  c                 D    g | ]}j         j        j        j        |iS r`   )r
  r  r
  )rV  rel_idr  r
  s     rc   rY  z'ManyToManyQuery.add.<locals>.<listcomp>G  sB     4 4 4  $f %v/ 4 4 4re   )r	  r  r   r  r  rv   rE  r  rY   r
  r	  rz
  r  r
  r  rc  r  r  )ra   r~   r
  r;  insertsr  r
  s        @@rc   r  zManyToManyQuery.add6  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Are   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 r_   )r   r  r  rv   rE  rA  r  r  r  rz
  r  r5  r
  r
  r  rc  r  )ra   r~   r
  r  r  s        rc   r  zManyToManyQuery.removeM  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 re   c                     t          | j        | j                  }| j        j                                                            | j        j        |k                                              S r_   )	r   r  r  r  rz
  r  r5  r
  r  )ra   r
  s     rc   r	  zManyToManyQuery.clearc  sK    88,t~,677	re   r  )	rf   rg   rh   r  r  r  r  r	  r  r  s   @rc   r
  r
  )  s        L L L L L     
B B B B.     ,      re   r
  c                       fd}|S )Nc                 N    	  |           S # t           t          f$ r | cY S w xY wr_   )r  r  )r~   	conv_funcs    rc   validatez#safe_python_value.<locals>.validatel  sA    	9U###:& 	 	 	LLL	s   
 $$r`   )r  r  s   ` rc   safe_python_valuer  k  s#        
 Ore   c                   .     e Zd Z fdZd ZeZd Z xZS )BaseModelCursorWrapperc                 x    t          t          |                               |           || _        |pg | _        d S r_   )r  r  r  rA  r  )ra   r   rA  r  r  s       rc   r  zBaseModelCursorWrapper.__init__u  s8    $d++44V<<<
mre   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||         ||<   Sd S )Nr   rR  rt  r   r  )$rA  r'  r6  r(  r   r  r   r  r  
convertersr@  r   r  r5  r  r  rk  rh  ri  rv   r2   re  r0  r  rN  rP  r%  r.  r+  re  rf  r  r  r  r!   rM  )ra   r6  r(  r  r  r@  r  description_itemr  orig_column	dot_indexr  r=  ri  rm  rZ  s                   rc   r  z*BaseModelCursorWrapper._initialize_columnsz  s   :#,
 &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{=	3 =	3s   /DD/.D/c                     t           r_   r^  r  s     rc   r  z"BaseModelCursorWrapper.process_row  r`  re   )rf   rg   rh   r  r  r  r  r  r  s   @rc   r  r  t  sa        $ $ $ $ $
G3 G3 G3R %J" " " " " " "re   r  c                       e Zd Zd ZdS )rW  c                     i }| j         | j        }}| j        }t          | j                  D ]=}||         }||v r||          ||         ||                   ||<   2||         ||<   >|S r_   )r  r  r@  r  r  )ra   r0  r  r  r  r@  r  r   s           rc   r  z"ModelDictCursorWrapper.process_row  s    "lDOtz"" 	& 	&A1:Dv~~x!}(,z!}SV44t"1vtre   N)rf   rg   rh   r  r`   re   rc   rW  rW    s#            re   rW  c                       e Zd ZeZd ZdS )rX  c                     | j         | j        c}|                     fdt          | j                  D                       S )Nc                 ^    g | ])}|          |         |                   n|         *S r_   r`   )rV  r  r  r0  s     rc   rY  z7ModelTupleCursorWrapper.process_row.<locals>.<listcomp>  sM     !( !( !( '1m&?]Z]3q6"""SV!( !( !(re   )r  r  r  r  r  )ra   r0  r  r  s    ` @rc   r  z#ModelTupleCursorWrapper.process_row  sa    "lDO !( !( !( !( !(4:&&!( !( !( ) ) 	)re   N)rf   rg   rh   ra  r  r  r`   re   rc   rX  rX    s(        K) ) ) ) )re   rX  c                       e Zd Zd ZdS )rY  c                                                         g }t           j                  D ]"}|                     j        |                    #t          j        d|           _         fd _        d S )Nr  c                      j         |  S r_   r  )r0  ra   s    rc   rx   z9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    '7t'7'= re   )	r  r  r  r  r  r  r  r  r  )ra   
attributesr  s   `  rc   r  z'ModelNamedTupleCursorWrapper.initialize  s|      """
tz"" 	/ 	/Adl1o....&1%DD====re   N)rf   rg   rh   r  r`   re   rc   rY  rY    s#        > > > > >re   rY  c                   (     e Zd Z fdZ fdZ xZS )rZ  c                     || _         t          |          | _        t          t          |                               |||           d S r_   )r  r&  r  rZ  r  )ra   r   rA  r  r  r  s        rc   r  z!ModelObjectCursorWrapper.__init__  sC    & --&--66vufMMMMMre   c                     t          t          |                               |          }| j        r* | j        dddi|}|j                                         |S  | j        di |S )Nr  r   r`   )r  rZ  r  r&  r  r	  r	  )ra   r0  r	  r  r  s       rc   r  z$ModelObjectCursorWrapper.process_row  sz    -t44@@EE= 	,"$"<<!<t<<CJJ#4#++d+++re   r	  r  s   @rc   rZ  rZ    sV        N N N N N
, , , , , , , , ,re   rZ  c                   *     e Zd Z fdZd Zd Z xZS )r  c                 x    t          t          |                               |||           || _        || _        d S r_   )r  r  r  r  r  )ra   r   rA  r  r  r  r  s         rc   r  zModelCursorWrapper.__init__   s8     $''00GGG"


re   c           	         |                                   t          d | j        D                       }| j        | j        }}| j        | j        i| _        i | _        g | _        t          j
        | j                  }t                      }|r|                                }t          |t                    r5|                    |j                   |                    |j                   `|| j        vrjt          |t&                    }| j        |         D ]c\  }}	}
}|| j        vrS|
| j        |<   | j                            ||	|||f           |                    |           |                    |           d||D ]I}|| j        vr>t+          |          r|| j        |<   %t          |t,                    r|j        | j        |<   J| j        D ]\  }}}}}||v o||v p||v | j        |<   g | _        t1          |          D ]\  }}| j        }| j        |         }|%t          |t2                    r|j        }n|j        }nt          |t6                    rJ|j        | j        vr4t;          |                                d|j        d|j        d          |j        }nEt          |t>                    r|                                }t          |t@                    r|j        }| j                            |           d S )Nc                      g | ]}||j         S r_   r>  r^  s     rc   rY  z1ModelCursorWrapper.initialize.<locals>.<listcomp>  s)     2 2 2E$0 "K000re   z specifies bind-to z, but z# is not among the selected sources.)!r  rP  r@  r  r  rA  key_to_constructorsrc_is_destsrc_to_destr  rJ  r  rK  rv   r  r  r  r   r  r  r  r&  ri  column_keysr   r5  rM  rW  r  r  rk  re  r!   )ra   selected_srcr  r  r  destsrN  r  r  r   r  r  r  rq  r  r  r=  rA  s                     rc   r  zModelCursorWrapper.initialize  sd     """ 2 2T[ 2 2 2 3 3+t|#':tz":!$.11 	&==??D$%% TX&&&TX&&&4:%% t,,G59Z5E & &1T;	d5553>D+C0 $++T4g-6-8 9 9 9IIcNNNLL%%%'  	&,   	= 	=C$111C== =36D+C00Z00 =369D+C0 #'"2 	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(((()	) 	)re   c                    i }g }| j                                         D ]/\  }} |d          ||<   |                    ||                    0|| j                 }t	                      }t          | j                  D ]\  }}|                    ||          }	| j        |         }
||         }||	                    |           | j
        |         r | j
        |         |          }t          |	t                    r||	|
<   t          |	|
|           | j        D ]\  }}}}}||         }		 ||         }n# t          $ r Y &w xY w|	 |||vr| j                            |          sM|	|vr||vr|                    d          rk|r||	|<   st          |	||           |D ]0}	t          |	t$                    r|	j                                         1|| j                 S )NT)r  z
OUTER JOIN)r  r  r  rA  rP  r   r  r  r  r  r  rv   r  r  r  r   r  r  rA   r	  r	  )ra   r0  r@  object_listr  r  default_instanceset_keysr  r|  r  r~   r  r   r  r  r  joined_instances                     rc   r  zModelCursorWrapper.process_rowJ  sV    $ 7 = = ? ? 	- 	-C&;d;;;GCLws|,,,,"4:.55!$"233 	1 	1HC {{3(899H\#&FHE S!!!s# 4,,U33(D)) 1#(  &%0000 6:5E 	9 	91S$gys|H")$-   
 4<H$$T-=-A-A$-G-G$ x''D,@,@%%l33 -A 9!0$8888 $ 	( 	(H(E** (%%'''tz""s   ,D55
EE)rf   rg   rh   r  r  r  r  r  s   @rc   r  r    sZ            
C) C) C)J8# 8# 8# 8# 8# 8# 8#re   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     rc   rY  z)PrefetchQuery.__new__.<locals>.<listcomp>  s    !B!B!B%%+!B!B!Bre   c                 &    g | ]}|j         j        S r`   )r	  r  r^  s     rc   rY  z)PrefetchQuery.__new__.<locals>.<listcomp>  s    $N$N$NeU_%9$N$N$Nre   c                     g | ]	}|j         
S r`   )r	  r^  s     rc   rY  z)PrefetchQuery.__new__.<locals>.<listcomp>  s    !F!F!Fe%/!F!F!Fre   c                     g | ]	}|j         
S r`   rf  r^  s     rc   rY  z)PrefetchQuery.__new__.<locals>.<listcomp>  s    $D$D$DEUZ$D$D$Dre   )r`  r
  rA  r  r  r  )	r  r;  r@  r%  
rel_modelsfield_to_namerA  foreign_key_attrsr  s	           rc   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re   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 r_   )r%  r@  r	  r  r  r  r	  r  r	  r	  rF
  )	ra   r|  id_maprA  
identifierr  attnamerel_instancesr  s	            rc   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%%''''%-????@ @re   c                     | j         D ]l\  }}|j                            |j        |                   }||f}| j        r|||<   ;|                    |g            ||                             |           md S r_   )r  r	  r0  r	  r%  r  r  )ra   r|  r  rA  r
  identityr  s          rc   store_instancezPrefetchQuery.store_instance  s    "0 	- 	-NE733H4Eg4NOOH(#C -&s!!#r***s""8,,,,	- 	-re   )NNNNN)rf   rg   rh   r  r  r  r  r  s   @rc   r  r    sj        EI*.N N N N N N @ @ @"- - - - - - -re   r  _PrefetchQuery)r;  r@  r%  r  r  rA  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  )rV  rO  subquery_models     rc   rY  z)prefetch_add_subquery.<locals>.<listcomp>  s%    GGGBw~rw77GGGre   c                 D    g | ]}t          |j        j                  S r`   )r   r	  r  )rV  rO  last_objs     rc   rY  z)prefetch_add_subquery.<locals>.<listcomp>  s(    KKKwx):;;KKKre   z	 using %sr(  z-Error: unable to find foreign key for query: c                 F    g | ]\  }}|                     |          z  S r`   )r  )rV  rO  rI  
last_querys      rc   rY  z)prefetch_add_subquery.<locals>.<listcomp>  s@     -3 -3 -3 R :,,R000-3 -3 -3re   )r  FT)#r  r   rv   ra  r!  r&  ri  r  rA  r  r  r;  r'  r
  r  rC  r   rJ   rB  rt   r  r+  r
  r5  r?   rP  r  r   rw   r  r  r  rU  r	  r  )r  rl  prefetch_typefixed_queriesr  r  target_modelr	  r  rA  fixed
last_modelrelsrC  tgt_errr  r  
select_pksrO  rI  r@  rF
  r	  r  
select_fksr  r  r  r  s                             @@@rc   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re   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  rJ   rB  r  r!  r  rA  r@  r  r  r  re  r  r;  r  r  r`  )r  rl  r  r  r  depsrel_mappqquery_modelr	  r  has_relationsr|  rS  s                 rc   rI   rI       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 >>re   r_   r`   r  r  )rI  (X  bisectr   r   
contextlibr   rL  r   	functoolsr	   inspectr
   r&
  r  r   rq	  rM  r  loggingr  rD  r8
  r7
  rm   r  r   r  r   collections.abcr   ImportError	pysqlite3r   pysq3	pysqlite2rg  sqlite_version_infopsycopg2cffir   rq  r  r   r   r   ri  psycopg2.extrasr   pg_register_uuidr#  psycopgrl  rk  pymysqlrm  MySQLdb__version____all__r\   Handler	getLoggerr  
addHandlerr	  unicoderT  rW  rU  bufferr	  rv  callabler  r`  ra  	frozensetrP  r  execrr   builtinsrs   rt   r	  r	  r9  r   r0
  r  r   r	  r   r   r   register_adapterrt	  r   r   r   r   register_converterra  r   r   r   r  r   r   r   r  r   ru  r{  rE   r  r  ler  ger  lshiftr-   r  r?   r  rJ   r  rB  rD  rF  rH  rv  rw  rx  compileri  rk  rG  rJ  rP  r[  r&  rc  rg  rn  r    r~  rL   r&   r  r  r  r  r  r#   rO  r3  re  rq  ry  r  r  r  r  r  r3  r  r  r  rS   r  rZ   r  rN  r!   r  r  r  rR  rW  rg  r  r  rY   r  r   r   r  r`  rd  r
  r  rf  rQ   r   r%  r5   r[   rF  r{  r   r  ru  r3  r.  r  r  r1   r0   rW   rM   r  r  r  r  r  r!  rC  rE  rN  rA  rP   r  r  r  r  r9   rB   rF  rT  r8   r%   r'   r;   r<   r=   rD   rF   rK   rb  
EXCEPTIONSr  ru  rv  rx  r{  r}  localr  r  r  r$   rO  rR   rG   rC   r  r  r  r  r  r  r  r  r  r	  r	  r 	  r%	  r2   r   r:   r   rO   r   r   r7   rH   r4   r/   r*   r}	  r   r3   rT   r   r   r	  r	  r   rX   r   r	  r   r  r	  r)   r(   rU   r
  rV   r>   r   r   r6   r+   r,   r~
  r
  r@   r
  r"   r
  rN   r4  r  r.   r  r  r<  rA   ri  r5  r!  rR  r  rb  re  rx  r  r  r  r  r  r  r
  r  r  rW  rX  rY  rZ  r  r  r!  rI   r`   re   rc   <module>rL     sC*               % % % % % %                                 				   



       $''''''' $ $ $########$)))))))   -------   
NNN  *g.III	    GGG
	######FO 	 	 	D	 OOO4444440000000   			      Hyyy 	AAAAAA 	 	 	D	,,,,,,,   JJJ       	 L L L\#######       go     
 
	8	$	$   ++--       A!IJK)LI	3/KD	?@@@    OOO),,,,,,, ) ) )(((((((()      11IIJKJD	36KWXw''F(L    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
+
+;
+;
+
/
.
.224466   
  	 	 	 			H	 8	 
		
 
	 
	 
	 Z	 I	 B	 6	 &	 			 Z	 
	  
!	" 
#	$ &%	& I'	. x
 "	 
$	& 	& 	& h
	

   
	
   	     2:233 2:344  "
$ ) ) ) )  ? ? ?
 98G G GC C C9 9 9         &; &; &; &; &;F &; &; &;R    E   0 $ # # # #f # # #)! )! )! )! )!6 )! )! )!X, , , , ,"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 < < <~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 & & && & &
2 
2 
2 
2 
2; 
2 
2 
2    {   D3 3 3 34 4 4 4) ) ) ) ) ) ) )X6 6 6 6 6z 6 6 6G G G G GZ G G G"
 
 
 
 
* 
 
 
> > > >C C C C Cz C C CL XdDk k k k kT k k k\	6 	6 	6 	6 	6$ 	6 	6 	6& & & & &$ & & &. . . . .: . . .(       ,    z   0! ! !' ' '       / / / / / / / / :j!!         	'&& & & & &[ & & &  7% 7% 7% 7% 7% 7% 7% 7%t  d% d% d% d% d% d% d% d%N$ $ $ $ $y $ $ $(L L L L LI L L L^       %   ,> > > > >&+ > > >H@% @% @% @% @%* @% @% @%F{% {% {% {% {%Z {% {% {%|1 1 1 1 1% 1 1 1h/- /- /- /- /-[ /- /- /-d\A \A \A \A \A[ \A \A \A~- - - - -[ - - -> > > > >D > > >B%P %P %P %P %P %P %P %PP   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       } } } } }( } } }@& & &S4 S4 S4 S4 S4X S4 S4 S4la; a; a; a; a; a; a; a;H_# _# _# _# _#H _# _# _#J5 5 5 5 5f 5 5 50@ @ @ @ @f @ @ @8-& -& -& -& -&6 -& -& -&`# # # # # # # #RI I I I IF I I IX       $& & & & &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 5 5 5 55 5 5 5>	O 	O 	O 	O 	O5 	O 	O 	O= = = = = = = =    Y                 >&+ &+ &+ &+ &+|_ &+ &+ &+R\, \, \, \, \,f \, \, \,~B B B B B- B B B,A A A A A) A A A? ? ? ? ? ? ? ?.E E E E Ei E E E4  
     C C C C C% C C C, , , , ,' , , ,6& & & & &# & & &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P" P" P" P" P"i P" P" P"fE E E E E9 E E E06( 6( 6( 6( 6(9 6( 6( 6(r    v   Jl" l" l" l" l"F l" l" l"^c c c c cv c c cL		 	 	 	 	H 	 	 	 $ # # # #9 # # #~) ~) ~) ~) ~) ~) ~) ~)B2 2 2 2 2& 2 2 2*IH IH IH IH IHNN9d++ IH IH IHX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D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  R" R" R" R" R". R" R" R"j    3   ") ) ) ) )4 ) ) )> > > > >#: > > >, , , , ,5 , , ,"C# C# C# C# C#/ C# C# C#L+- +- +- +- +-*K*+; >M N N +- +- +-\J J JZ    s   &A- -A;:A;?B B#BB#BB#BB#"B#'C   C
	C
C$ $C,+C,0
D ;D D D	D DD 	DD D1 1D98D9=E EEE E6E&%E6&E0-E6/E00E65E6 F F"!F"H H! H!