
    h8'h
L                       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 	 d d	lmZ  	 d dl"Z"e re jF                  e"jF                  k\  re Z"	 	 d d
l$m%Z%  e%jL                          	 d dl'Z'd dl'm(Z) 	 d dl'm*Z+ 	 d dl,m-Z.  e.        	 d dl0m*Z1 dZ2	 d dl3Z4dZ6g dZ7	 d dlm8Z8  ejt                  d      Z;e;jy                   e8              ejz                  d    dk(  r&e>Z?e@ZAeBZCej                  ZDeEZFeGeHeIeJfZK eLd       d ZMn?d dlNZN	 d dlmOZO d dlmPZP d ZFe@Z?eQZAeRZCe@ZSeTZUeGeHeIeJeVfZK eWeNd      ZMej                  ZDd	dZYejz                  dk  r-ej                  j                  ZZej                  j                  Z[nd ZZd  Z[e"r e"j                  ej                  e@        e"j                  ej                  e@        e"j                  ej0                  e@       ejz                  dk\  rLd! Z_d" Z`d# Za e"j                  ej                  e_        e"j                  d$e`        e"j                  d%ea       e"jF                  Zcnd&Zc eJd'      Zdd(Zed)d*d+d,d-d.d'Zfefj                         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j                  ej                  ej                  ej                  ej                  ej                  ej                  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 ZeyjF                  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. d/e/      Z G d0 d1e      Z G d2 d3e      Z G d4 d5e      Z G d6 d7e      Z G d8 d9e      Z G d: d;e      Z G d< d=e      Z G d> d?e      Z G d@ dAe      Z G dB dCem      ZeeeeeeeeeeeedDZ ee      Z ej*                  dEdF      Z ej*                  dGdH      Z ej*                  dIdJ      Z ej*                  dKdL      Z G dM dNem      Z G dO dPeej                        Z G dQ dRem      Z G dS dTem      Z G dU dVe      ZdW Z G dX dYe      Z G dZ d[e      Z G d\ d]e      Z G d^ d_em      Z G d` daem      Z G db dcem      Z  G dd deem      Z G df dgem      Z G dh die      Z G dj dke      Z G dl dme      Z G dn doem      Z G dp dqem      Z G dr dse      Z G dt duem      Z	 G dv dwem      Z
 G dx dye      Z G dz 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 ZWy# e$ r
 d dlmZ Y w xY w# e$ r 	 d d	l!mZ  n# e$ r dZ Y nw xY wY w xY w# e$ r e Z"Y w xY w# e$ r Y w xY w# e$ r dZ+Y w xY w# e$ r dxZ'Z+Y w xY w# e/$ r Y w xY w# e$ r dZ1Y w xY w# e$ r 	 d dl5Z4dZ2n# e$ r dZ4Y nw xY wY w xY w# e$ r  G d dejr                        Z8Y w xY w# e$ r
 d dlmOZO Y }w xY w(      )bisect_left)bisect_rightcontextmanager)deepcopywraps)isclassN)Mapping)dbapi2)compat)
extensions)errors)register_uuidFTz3.17.7)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y)r\   c                      y N )selfrecords     B/var/www/html/trade_iq/venv/lib/python3.12/site-packages/peewee.pyemitzNullHandler.emit   s        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                  j                  |        t         j                  j                  d       y )N
)sysstdoutwritess    rc   print_rr      s&    



re   )Callable)reducec                 "    t        | t              S r_   )
isinstancers   )cs    rc   <lambda>rx      s    *Q1 re   printc                 D    |j                   |ur|j                  |      |r_   )__traceback__with_traceback)tpvaluetbs      rc   reraiser      s&    b(&&r**re   )      c                     t         j                   j                  | t         j                  j                        j	                  d       S )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rc   utcfromtimestampr      s6    !!rh&7&7&;&;<%	're   c                      t         j                   j                  t         j                  j                        j	                  d       S )Nr   )r   nowr   r   r   r`   re   rc   utcnowr      s2    !!X&&**+%	're   c                 $    | j                  d      S N )	isoformatds    rc   datetime_adapterr      s    C(8!8re   c                 `    t        j                  t        t        | j	                  d             S )N   -)r   datemapintsplitr   s    rc   convert_dater      s    HMM3sAGGDM3J$KKre   c           	         | j                  d      \  }}t        t        |j                  d            \  }}} |j                   d      }t        t        |d   j                  d            \  }}}	t        |      dk(  r,t        dj	                  |d   j                                     }
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$/0GAq!TZZ%F#&sF1IOOD,A#B D&&6{a:,,VAY-=-=-?@A$$Q1dFFD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                 T    | t         v sJ |sy t        |t              }t        ||       S r_   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rc   _sqlite_date_partr   	  s0    .(((	/+F	GB2{##re   c                 l    | t         v sJ |sy t        |t              }|j                  t         |          S r_   )__sqlite_date_trunc__r   r   strftimer   s      rc   _sqlite_date_truncr     s9    ////	/+F	GB;;,[9::re   c                 8    t        j                  | t               y r_   )warningswarnDeprecationWarningrp   s    rc   __deprecated__r     s    MM!'(re   c                   $    e Zd Zd Zd Zd Zd Zy)attrdictc                 >    	 | |   S # t         $ r t        |      w xY wr_   )KeyErrorAttributeErrorra   attrs     rc   __getattr__zattrdict.__getattr__  s+    	': 	' &&	's    c                     || |<   y r_   r`   ra   r   r~   s      rc   __setattr__zattrdict.__setattr__"  s
    UT
re   c                 (    | j                  |       | S r_   updatera   rhss     rc   __iadd__zattrdict.__iadd__#  s    T[[-d{re   c                 >    t        |       }|j                  |       |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    '
 ;: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!RUUA. re   c                 8    t        | t        j                  |      S r_   )r
  rE   r  r  s     rc   rx   rx   Q  s    Arww2 re   c                 8    t        | t        j                  |      S r_   )r
  rE   r  r  s     rc   rx   rx   R  s    *Q!4 re   c                 8    t        | t        j                  |      S r_   )r
  rE   r  r  s     rc   rx   rx   S  s    :aA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    
TGR((re   c                 L    | j                         }|r|j                  |       |S r_   )copyr   )source	overridesmergeds      rc   
merge_dictrP    s!    [[]Fi Mre   c                     t        |       dk(  r| d   j                  |      S dj                  | D cg c]  }|j                  |       c}      S c c}w )Nr   r   .)r   join)pathquote_charsparts      rc   quoterW    sF    
4yA~Aw||K((88=TYY{+=>>=s   Ac                 <    t        |       xr t        | t              S r_   )r
   
issubclassrA   )os    rc   rx   rx     s    WQZ8Jq%$8 re   c                 >    | t        | t        t        f      r| S | fS y r_   )rv   listtupler~   s    rc   ensure_tupler_    s'    "54-8uFuhF re   c                 B    | t        | t              r| S t        |       S y r_   )rv   NodeEntityr^  s    rc   ensure_entityrc    s%    "5$/uBVE]B re   c                 v    t         j                  d|       }t        j                  d|      j                         S )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)rq   firsts     rc   make_snake_caserj    s0      1-E%06688re   c              #      K   t               }d t        t        |       g|z  d|iD        D ]!  }|d   |u r||j                  |      d = | # y w)Nc              3   2   K   | ]  }t        |        y wr_   )r\  ).0gs     rc   	<genexpr>zchunked.<locals>.<genexpr>  s      Ca$q' C   	fillvalue)objectizip_longestiterindex)itnmarkergroups       rc   r    r      sg     XFC<$r(a $B:@$B C 9ekk&)*+	s   AAc                       e Zd Zd Zy)_callable_context_managerc                 2     t               fd       }|S )Nc                  D    5   | i |cd d d        S # 1 sw Y   y xY wr_   r`   argskwargsr5   ra   s     rc   innerz1_callable_context_manager.__call__.<locals>.inner  s(     +4*6*+ + +s   r   ra   r5   r  s   `` rc   __call__z"_callable_context_manager.__call__       	r	+ 
	+ re   N)rf   rg   rh   r  r`   re   rc   r|  r|    s    re   r|  c                   d     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                 4    g | _         | j                  d        y r_   )r  
initializera   s    rc   __init__zProxy.__init__  s    re   c                 D    || _         | j                  D ]
  } ||        y r_   r  )ra   r  callbacks      rc   r  zProxy.initialize  s#     	HSM	re   c                 <    | j                   j                  |       |S r_   )r  append)ra   r  s     rc   attach_callbackzProxy.attach_callback  s    x(re   c                       fd}|S )Nc                 j    | 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  s6    xx$%FGG,7488V,d=f==re   r`   r  r  s   ` rc   passthroughzProxy.passthrough  s    	> re   	__enter____exit__c                 \    | j                   t        d      t        | j                   |      S r  r  r   s     rc   r   zProxy.__getattr__  s)    88 !BCCtxx&&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UD-dE::re   )rf   rg   rh   __doc__r  r  r  r  r  r  r  r   r   __classcell__r  s   @rc   rL   rL     sH     &I
 K(I:&H'
; ;re   rL   c                   B    e Zd ZdZdZd Zd Zd Zd Zd Z	e
d        Zy	)
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|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|i |S r_   _transactionr  s      rc   transactionzDatabaseProxy.transaction      D2426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W  Zy)!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  3    tX&''{UHvtnEDK{{re   N)rf   rg   rh   r  r  r  r  r  r  r  propertyrA   r`   re   rc   r&   r&     s9     0I'.3  re   r&   c                       e Zd Zy)ModelDescriptorNrf   rg   rh   r`   re   rc   r  r        re   r  c                   L    e Zd ZdZd Zed        Zd ZddZd Z	d Z
d Zd	 Zy
)AliasManager)_counter_current_index_mappingc                 N    d| _         d| _        g | _        | j                          y 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001455re   c                     || 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M 4==0DL||F##re   c                     |rHt        t        | j                              D ]'  }|| j                  |   v s| j                  |   |   c S  | j	                  |      S r_   )reversedranger  r  r  )ra   rM  	any_depthidxs       rc   getzAliasManager.get%  sZ    d&9&9 :; 6T]]3//==-f556 xxre   c                 $    | j                  |      S r_   )r  r  s     rc   __getitem__zAliasManager.__getitem__,  s    xxre   c                 "    || j                   |<   y r_   )r  )ra   rM  aliass      rc   __setitem__zAliasManager.__setitem__/  s    $Vre   c                     | xj                   dz  c_         | j                   t        | j                        kD  r| j                  j                  i        y y r  )r  r   r  r  r  s    rc   r  zAliasManager.push2  sA    q T]]!33MM  $ 4re   c                 b    | j                   dk(  rt        d      | xj                   dz  c_         y )Nr   z&Cannot pop() from empty alias manager.)r  
ValueErrorr  s    rc   popzAliasManager.pop7  s-    !#E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$  %%
!re   r  c                   2     e Zd Zedf fd	ZddZd Z xZS )StateFc                 0    t         t        |   | |||      S r_   )r  r  __new__)clsscopeparenthesesr  r  s       rc   r  zState.__new__?  s    UC(e[&IIre   c                     || j                   n|}|r8| j                  r,| j                  j                         }|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  s]    #m

 dmm}}))+HOOF#H}}HUK4844re   c                 8    | j                   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  =  s    'U J5,re   r  _State)r  r  r  c                 $     t          fd       }|S )Nc              ;   T   K    | ddi|5  |  d d d        y # 1 sw Y   y xY wwNr  r`   r`   )ra   r  r  s     rc   r  z __scope_context__.<locals>.innerU  s0     ((( 	J	 	 	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 y)r#   )stack_sql_valuesalias_managerstatec                 l    g | _         g | _        g | _        t               | _        t        di || _        y Nr`   )r  r  r  r  r  r  r  )ra   r  s     rc   r  zContext.__init___  s0    
	)^&X&
re   c                 @    t        di | j                  j                  S r	  )r#   r  r  r  s    rc   as_newzContext.as_newf  s    -,,--re   c                 *    |d   j                  |       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    zzre   c                 .    | j                   j                  S r_   )r  r  r  s    rc   r  zContext.parenthesesp  s    zz%%%re   c                 .    | j                   j                  S r_   )r  subqueryr  s    rc   r  zContext.subqueryt  s    zz"""re   c                     |r!|j                  d      | j                  k(  r|d= | j                  j                  | j                          | j                  di || _        | S r   )r  r  r  r  r  )ra   rN  s     rc   r  zContext.__call__x  sQ    w/4::='"

$**%TZZ,),
re   c                 @    | j                   r| j                  d       | S )N()r  literalr  s    rc   r  zContext.__enter__  s    LLre   c                 |    | j                   r| j                  d       | j                  j                         | _        y )N))r  r  r  r  r  ra   exc_typeexc_valexc_tbs       rc   r  zContext.__exit__  s)    LLZZ^^%
re   c              #   |   K   | j                   j                          d  | j                   j                          y wr_   )r  r  r  r  s    rc   
push_aliaszContext.push_alias  s-     ! s   :<c                     t        |t        t        f      r|j                  |       S t	        |      r%|j
                  j                  j                  |       S | j                  t        |            S r_   )	rv   ra  r#   __sql__is_model_metatablesqlrY   ra   r  s     rc   r'  zContext.sql  sR    cD'?+;;t$$c]99??**40088E#J''re   c                 <    | j                   j                  |       | S r_   )r  r  )ra   keywords     rc   r  zContext.literal  s    		!re   Nc                 r   |r	 ||      }n3|1| j                   j                  r| j                   j                  |      }t        |t              r$ | d       5  | j	                  |      cd d d        S t        |      r+| j                         5  | j	                  |      cd d d        S | j                   j                  r| j                  t        |            S | j                  j                  |       |r)| j                  | j                   j                  xs d      S | S # 1 sw Y   xY w# 1 sw Y   xY w)N	converter?)r  r-  rv   ra  r'  r$  scope_columnvalue_literalsr  _query_val_transformr  r  param)ra   r~   r-  	add_params       rc   r~   zContext.value  s   e$E4::#7#7 JJ((/EeT"% 'xx' 'e_
 ""$ 'xx' ' ::$$<< 4U ;<<E"8At||DJJ,,34KtK' '' 's   D!D-!D*-D6c                     |j                   j                  | j                          |j                  j                  | j                         |S r_   )r  extendr  ra   ctxs     rc   r#  zContext.__sql__  s1    		"4<<(
re   c                 @    | j                  |      j                         S r_   )r'  queryra   nodes     rc   parsezContext.parse  s    xx~##%%re   c                 P    dj                  | j                        | j                  fS )Nr(  )rS  r  r  r  s    rc   r9  zContext.query  s    wwtyy!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_COLUMNr/  r  r  r   r!  r'  r  r~   r#  r<  r9  r`   re   rc   r#   r#   \  s    FI'.*     & & # # %\2L$\2L$\2L!),I$\2L
&
 ! !
(L2
&0re   r#   c                 <   t        | dd       }||j                         }n
t               }|j                  |       j	                         \  }}|s|S |j
                  j                  xs d}|dk(  r|j                  dd      }|t        t        t        |            z  S )N	_databaser.  %s)r   get_sql_contextr#   r'  r9  r  r2  r   r]  r   r1  )r9  dbr7  r'  paramsr2  s         rc   query_to_stringrM    s     
T	*B	~  "i''%.&&(KC
IIOO"sE|kk#t$s/8999re   c                    t        | t        t        j                  t        j                  t        j                  f      rd| z  } | S t        | t
              r	 | j                  d      } d| z  } | S t        | t              rdt        |       z  } | S | d} | S t        |       } | S # t        $ r | j                  d      } Y Vw xY w)Nz'%s'utf8raw_unicode_escaperI  NULL)
rv   	text_typer   r   r   
bytes_typer   UnicodeDecodeErrorr   str)vs    rc   r1  r1    s    !i!2!2HMMmm% &QJ H 
Az	"	/ A QJ H 
As	3q6M
 H	 
 H FH " 	/-.A	/s   B" "B?>B?c                   D    e Zd ZdZdZd Zd Zed        Zd
dZ	d Z
d Zy	)ra  TFc                     | j                   j                  | j                         }| j                  j                         |_        |S r_   )r  r  __dict__rL  r(  s     rc   clonez
Node.clone  s3    nn$$T^^4}}))+
re   c                     t         r_   NotImplementedErrorr6  s     rc   r#  zNode.__sql__      !!re   c                       fd}|S )Nc                 @    | j                         } |g|i | |S r_   )rZ  )ra   r  r  rZ  r  s       rc   r  zNode.copy.<locals>.inner   s%    JJLE5*4*6*Lre   r`   r  s   ` rc   rL  z	Node.copy  s    	 re   c                 V    || j                   k7  r| j                         }||_         |S | S r_   )_coercerZ  )ra   rb  rZ  s      rc   coercezNode.coerce  s*    dll"JJLE#EMLre   c                      yNFr`   r  s    rc   is_aliaszNode.is_alias  s    re   c                     | S r_   r`   r  s    rc   unwrapzNode.unwrap      re   NT)rf   rg   rh   rb  __isabstractmethod__rZ  r#  staticmethodrL  rc  rf  rh  r`   re   rc   ra  ra    s:    G 
"  re   ra  c                        e Zd ZdZd Zd ZeZy)ColumnFactoryr;  c                     || _         y r_   ro  r:  s     rc   r  zColumnFactory.__init__  	    	re   c                 .    t        | j                  |      S r_   )r!   r;  r   s     rc   r   zColumnFactory.__getattr__      dii&&re   Nrf   rg   rh   r  r  r   r  r`   re   rc   rn  rn    s    I'Kre   rn  c                       e Zd ZdZddZy)_DynamicColumnr`   Nc                      |t        |      S | S r_   )rn  ra   instanceinstance_types      rc   __get__z_DynamicColumn.__get__"  s     **re   r_   rf   rg   rh   r  r{  r`   re   rc   rv  rv    s    Ire   rv  c                       e Zd ZdZddZy)_ExplicitColumnr`   Nc                 &    |t        d|z        | S )NzM%s specifies columns explicitly, and does not support dynamic column lookups.r   rx  s      rc   r{  z_ExplicitColumn.__get__+  s)     *,456 6 re   r_   r|  r`   re   rc   r~  r~  (  s    Ire   r~  c                       e Zd Zd Zd Zy)Starc                     || _         y r_   )rM  r  s     rc   r  zStar.__init__4  	    re   c                 h    |j                  t        | j                              j                  d      S )Nz.*)r'  rM   rM  r  r6  s     rc   r#  zStar.__sql__6  s%    ww~dkk23;;DAAre   Nrf   rg   rh   r  r#  r`   re   rc   r  r  3  s    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                 8    t         t        |           || _        y r_   )r  r  r  _alias)ra   r  r  s     rc   r  zSource.__init__=  s    fd$&re   c                     || _         y r_   r  ra   names     rc   r  zSource.aliasA  	    re   c                 8    |st        d      f}t        | f|      S )Nr   )rQ   rP   ra   columnss     rc   selectzSource.selectE  s    3xkGtgw''re   c                     t        |       S r_   )r  r  s    rc   __star__zSource.__star__J  s    Dzre   c                     t        | |||      S r_   Join)ra   dest	join_typeons       rc   rS  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4re   c                 "    t        || |||      S N)	recursiver  materializedCTEra   r  r  r  r  s        rc   ctez
Source.cteT      4G ,. 	.re   c                 T    | j                   r| j                   fS |j                  |    fS r_   )r  r  r6  s     rc   r  zSource.get_sort_keyX  s)    ;;KK>!!!$'))re   c                     |j                   t        k(  r[| j                  r| j                  |j                  | <   |j	                  d      j                  t        |j                  |                 |S N AS )r  r@  r  r  r  r'  rb  r6  s     rc   apply_aliaszSource.apply_alias]  sW     99${{*.++!!$'KK##F3+<+<T+B$CD
re   c                     | j                   r| j                   |j                  | <   |j                  t        |j                  |                S r_   )r  r  r'  rb  r6  s     rc   apply_columnzSource.apply_columnf  s<    ;;&*kkCd#wwvc//5677re   r_   FNN)rf   rg   rh   rv  rw   r  ra  rL  r  r  r  r  r?   r3  rS  r  r  r  r  r  r  r  s   @rc   r  r  :  sj    A 
YY (
   $(::$ /5.*
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                 L    t        t        | 
  |i | | j                          y r_   )r  r  r  _update_hashra   r  r  r  s      rc   r  z_HashableSource.__init__m  s#    ot-t>v>re   c                 2    || _         | j                          y r_   )r  r  r  s     rc   r  z_HashableSource.aliasq  s    re   c                 .    | j                         | _        y r_   )	_get_hash_hashr  s    rc   r  z_HashableSource._update_hashv  s    ^^%
re   c                 Z    t        | j                  | j                  | j                  f      S r_   )hashr  _pathr  r  s    rc   r  z_HashableSource._get_hashy  s     T^^TZZ=>>re   c                     | j                   S r_   )r  r  s    rc   __hash__z_HashableSource.__hash__|  s    zz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__  2    e_-::,,$u--re   c                     t        |t              r| j                  |j                  k7  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  ra  rL  r  r  r  r  r  r  r  rE   r   __lt__r   __le__r   __gt__r   __ge__r  r  s   @rc   r  r  l  st     
YY &?.
.
 YFZFYFZFre   r  c                 .     t                fd       }|S )Nc                 n     | g|i |}| j                   r|j                  | j                         S |S r_   )rH  bind)ra   r  r  resultmeths       rc   r  z __bind_database__.<locals>.inner  s6    d,T,V,>>;;t~~..re   r   )r  r  s   ` rc   __bind_database__r    s     
4[ 
 Lre   c                       fd}|S )Nc                 ,    r|| }} t        | |      S )N)r  r  )ra   r  invertedr  s     rc   r  z__join__.<locals>.method  s    %DD%955re   r`   )r  r  r  s   `` rc   __join__r    s    6 Mre   c                      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y)	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    tzz"Gt'Gt''(Gdoo&Ftzz"G

T2H$7H((48Ht6G

T2Hre   r  c                   $    e Zd Zd Zd Zd Zd Zy)_BoundTableContextc                      || _         || _        y r_   )r&  r  )ra   r&  r  s      rc   r  z_BoundTableContext.__init__  s    
 re   c                 2     t               fd       }|S )Nc                      t        j                  j                        5   | i |cd d d        S # 1 sw Y   y xY wr_   )r  r&  r  r  s     rc   r  z*_BoundTableContext.__call__.<locals>.inner  s7    #DJJ> +4*6*+ + +s   4=r   r  s   `` rc   r  z_BoundTableContext.__call__  r  re   c                 $   | j                   j                  | _        | j                   j                  | j                         | j                   j
                  /| j                   j
                  j                  | j                         | j                   S r_   )r&  rH  _orig_databaser  r  _modelr  s    rc   r  z_BoundTableContext.__enter__  s^    "jj22

&::(JJ""4==1zzre   c                     | j                   j                  | j                         | j                   j                  0| j                   j                  j                  | j                         y y r_   )r&  r  r  r  r  s       rc   r  z_BoundTableContext.__exit__  sK    

++,::(JJ""4#6#67 )re   Nrf   rg   rh   r  r  r  r  r`   re   rc   r  r    s    !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   c           	      f   || _         || _        || _        || _        |r||fn|f| _        || _        || _        t        t        | '  |       |-t               | _        |D ]  }t        | |t        | |              |r,| j                  r| n| j                  }	t        |	|      | _        y d | _        y Nr  )rf   _columns_primary_key_schemar  r  rH  r  rS   r  r~  rw   setattrr!   r   primary_key)ra   r  r  r  schemar  r  rH  columncol_srcr  s             rc   r  zTable.__init__  s    ''-fd^D7
"eT#%#0 $&DF! <ffT6&:;< "mmdG&w<D#Dre   c           	          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                        S )N)r  r  r  r  r  rH  )rS   rf   r  r  r  r  r  rH  r  s    rc   rZ  zTable.clone  sB    MMMM))<<++;;nn& 	&re   c                     || _         | S r_   rH  ra   r  s     rc   r  z
Table.bind      !re   c                     t        | |      S r_   )r  r  s     rc   bind_ctxzTable.bind_ctx  s    !$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^^TZZdkkJKKre   c                     |s/| j                   r#| j                   D cg c]  }t        | |       }}t        | f|      S c c}w r_   )r  r!   rP   )ra   r  r  s      rc   r  zTable.select  s>    4==:>--HvdF+HGHtgw'' Is   ?c                     |rG|i n|}| j                   r| n| j                  }|j                         D ]  \  }}||t        ||      <    t	        | ||      S Ninsertr  )r  rw   itemsr   Insert)ra   r  r  r  srckeyr~   s          rc   r  zTable.insert  sZ    !>RvF--$TVVC$lln 2
U,1wsC()2d67;;re   c                 F    | j                  ||      j                  d      S )Nr  REPLACEr  on_conflict)ra   r  r  r  s       rc   r   zTable.replace  s"    vw7Y'	)re   c                     |rG|i n|}|j                         D ].  \  }}| j                  r| n| j                  }||t        ||      <   0 t	        | |      S )Nr   )r  r  rw   r   Update)ra   r   r  r  r~   r
  s         rc   r   zTable.update  sZ    !>RvF$lln 2
U"mmd,1wsC()2 d6**re   c                     t        |       S r_   )Deleter  s    rc   deletezTable.delete  s    d|re   c                 \   |j                   t        k(  r!|j                  t        | j                         S | j
                  r| j
                  |j                  | <   |j                   t        k(  r0| j                  |j                  t        | j                               S | j                  |      S r_   )
r  rB  r'  rb  r  r  r  r@  r  r  r6  s     rc   r#  zTable.__sql__  s    99$7764::.//;;&*kkCd#99$##CGGFDJJ,?$@AA $$S))re   )NNNNNNr_   r  )rf   rg   rh   r  rZ  r  r  r  r  r  r  r   r   r  r#  r  r  s   @rc   rS   rS     s    DH48$.	&2L ( (
 < < ) )
 + +  *re   rS   c                   F     e Zd Zej                  ddf fd	Zd Zd Z xZS )r  Nc                 f    t         t        |   |       || _        || _        || _        || _        y r  )r  r  r  lhsr   r  _on)ra   r  r   r  r  r  r  s         rc   r  zJoin.__init__+  s1    dD""/"re   c                     || _         | S r_   )r  )ra   	predicates     rc   r  zJoin.on2  s    re   c                    |j                  | j                        j                  d| j                  z        j                  | j                         | j
                  *|j                  d      j                  | j
                         |S )N %s  ON )r'  r  r  r  r   r  r6  s     rc   r#  zJoin.__sql__6  s\    	
#dhh-
'&4>>)
*
#dhh-88KK##DHH-
re   )	rf   rg   rh   r?   r3  r  r  r#  r  r  s   @rc   r  r  *  s    +/::$d re   r  c                   P     e Zd Zd fd	Zd Zej                  d        Zd Z xZ	S )rZ   c                 J    || _         || _        t        t        |   |       y r  )r  r  r  rZ   r  )ra   valuesr  r  r  s       rc   r  zValuesList.__init__A  s#    j$(u(5re   c                 l    t        | j                  t        | j                        | j                  f      S r_   )r  r  idr  r  r  s    rc   r  zValuesList._get_hashF  s%    T^^R%5t{{CDDre   c                     || _         y 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  |j                  d      j                  t        | j                  D cg c]  }t        |       c}            }d d d        |j                  t        k(  r~|j                  d      j                  t        |j                  |                 | j                  r<| j                  D cg c]  }t        |       }}|j                  t        |             |S |j                  t        |j                  |                 |S c c}w # 1 sw Y   xY wc c}w )Nr  zVALUES r  )r  r  r  r@  r  r  r  r'  CommaNodeListr  EnclosedNodeListrb  r  )ra   r7  rowrw   entitiess        rc   r#  zValuesList.__sql__M  s>   ;;&*kkCd#99$		\(AS__!45 M	*M<@LL+J58+C0+J K L M yyL(F#''s/@/@/F(GH==37==Aaq	AHAGG,X67 
 GGF3,,T234
+JM M  Bs$    .E4E/ E4F /E44E=r  )
rf   rg   rh   r  r  ra  rL  r  r#  r  r  s   @rc   rZ   rZ   @  s+    6
E 
YY 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  c                     || _         || _        || _        || _        |*|D cg c]  }t	        |t
              rt        |      n|! }}|| _        d|_        t        t        | /  |       y c c}w )Nr`   r  )r  _query
_recursive_materializedrv   
basestringrb  r  	_cte_listr  r  r  )ra   r  r9  r  r  r  rw   r  s          rc   r  zCTE.__init__d  sz    #) ') %/q*$=vay1D )G )c4!!-	)s   $A-c                 
   |st        d      t        | f|      j                  |       j                  | j                  j
                        }	 |j                  | j                  j                        }|S # t        $ r Y |S w xY w)NzFselect_from() must specify one or more columns from the CTE to select.)	r  rP   with_cter  r.  rH  objectsmodelr   ra   r  r9  s      rc   select_fromzCTE.select_fromq  s     7 8 8 )(4.$t{{,,- 		MM$++"3"34E   		s   %A5 5	BBc                 l    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Cre   c                     | j                   j                         }t        | j                  ||z   | j                  | j
                        S r_   r.  rZ  r  r  r/  r  ra   r   rZ  s      rc   	union_allzCTE.union_all  5    !!#4;;T__dmmLLre   c                     | j                   j                         }t        | j                  ||z  | j                  | j
                        S r_   r;  r<  s      rc   unionz	CTE.union  r>  re   c                    |j                   t        k7  r$|j                  t        | j                              S |j                         5  | j                  |j                  | <   |j                  t        | j                               | j                  r3|j                  d      j                  t        | j                               |j                  d       | j                  r|j                  d       n| j                  du r|j                  d       |j                  d      5  |j                  | j                         d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)Nr   r  zMATERIALIZED FzNOT MATERIALIZED Tr'  )r  rD  r'  rb  r  r!  r  r  r  r)  r0  r?  r.  r6  s     rc   r#  zCTE.__sql__  s   99	!776$++.//^^ 	%&*kkCd#GGF4;;'(}}C $$%5dmm%DEKK!!O,##u,/0!!d!3 %$%	% 
% %	% 
s%   CE%EEE	EE)r  )rf   rg   rh   r  r8  r  r=  r   r@  r  r#  r  r  s   @rc   r  r  c  s8    =A".DM G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j0                        Z eej4                        Z eej8                        xZZ eej>                        Z  eej,                  d      Z! eej0                  d      Z" eej4                  d      Z# eej8                  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jV                        Z, eejZ                        Z. eej^                        Z0 eejb                        Z2 eejf                        Z4 eejj                        Z6 eejn                        Z8 eejr                        Z: eejn                        Z; eejr                        Z< eejz                        Z> eej~                        Z@ eejf                        ZA eej                        ZC eej                        ZE eej                        ZGddZHd ZId ZJd ZKd ZLd ZMd ZNd ZOdZPd ZQd ZRd ZSy)
ColumnBaseNc                     || _         y 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  ri  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   rS  rT  s      rc   asczColumnBase.asc  s    49E::re   c                     t        | ||      S rR  )DescrV  s      rc   desczColumnBase.desc  s    DIU;;re   c                     t        |       S r_   )Negatedr  s    rc   
__invert__zColumnBase.__invert__  r  re   c                       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                 <    rt        ||       S t        | |      S r_   r  )ra   r   invr  s     rc   r  zColumnBase._e.<locals>.inner  s$    !#r400dB,,re   r`   )r  r`  r  s   `` rc   r  zColumnBase._e  s    
	- re   T)r`  c                 `    |t         j                  nt         j                  }t        | ||      S r_   )rE   r   r   r
  r  s      rc   r  zColumnBase.__eq__  s$    kRUUruu$C((re   c                 `    |t         j                  nt         j                  }t        | ||      S r_   )rE   r   r   r
  r  s      rc   r  zColumnBase.__ne__  s$    +RYY255$C((re   c                 `    |rt         j                  nt         j                  }t        | |d       S r_   )rE   r   r   r
  )ra   is_nullr  s      rc   rd  zColumnBase.is_null  s"    RUU299$D))re   c                 H   |j                  d      dk\  s(|j                  d      dk\  s|j                  d      dk\  rb|j                  dd      j                  dd      j                  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$<13D		$'//U;CCCOA hle4Hde,. / / !|re   c           	          t        |t              r5t        dt        j                  t        |t        j                  d            }n| j                  |d      }t        | t        j                  |      S )Nr   z%%%s%%rv   ra  r
  rE   r  rl  r  r   s     rc   containszColumnBase.contains  sU    c4 S"))'RYY<>C ((h7C$#..re   c                     t        |t              rt        |t        j                  d      }n| j                  |d      }t        | t        j                  |      S )Nr   z%s%%rn  r   s     rc   
startswithzColumnBase.startswith  C    c4 S"))S1C((f5C$#..re   c                     t        |t              rt        dt        j                  |      }n| j                  |d      }t        | t        j                  |      S )Nr   z%%%srn  r   s     rc   endswithzColumnBase.endswith  rr  re   c           
      b    t        | t        j                  t        |t	        d      |f            S )Nr   )r
  rE   r  rj  rQ   )ra   lohis      rc   betweenzColumnBase.between  s%    $

Hb#e*b5I,JKKre   c                 8    t        | t        j                  |      S r_   StringExpressionrE   r  r   s     rc   concatzColumnBase.concat  s    bii55re   c                     t        |t              rI|j                  |j                  t	        d      | j                  |j                  |j                        S | |k(  S )Nz4BETWEEN range must have both a start- and end-point.)rv   slicestartstopr  rx  r  s     rc   r  zColumnBase.__getitem__  sT    dE"zz!TYY%6  ". / /<<

DII66t|re   c                 .    t        t        d      | f      S )NDISTINCTrj  rQ   r  s    rc   distinctzColumnBase.distinct&  s    Z$/00re   c                 4    t        | t        d|z        f      S )N
COLLATE %sr  ra   rS  s     rc   collatezColumnBase.collate)  s    s<)#;<=>>re   c                      yr	  r`   r6  s     rc   r  zColumnBase.get_sort_key,  s    re   r_   r  r  rj  )Trf   rg   rh   rE  ra  rL  r-  r  rJ  rM  rP  rW  __pos__rZ  __neg__r]  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  iregexprd  rl  ro  rq  rt  rx  r|  r  __iter__r  r  r  r`   re   rc   rC  rC    sA   J	YY$ $
"#;G<G	 jGYFjGjGjGrvvJ&GkjG"&&d#H"&&d#H"&&d#H T22H|"&&d#HD!G"&&d#H)) YFZFYFZFBEEJBEEJkGlGbgg;DrxxLEnG		]F
RUU)C		]F		]FnG*
///L6 H1?re   rC  c                   $    e Zd Zd Zd Zd Zd Zy)r!   c                      || _         || _        y r_   )rM  r  )ra   rM  r  s      rc   r  zColumn.__init__1  s    	re   c                     |j                   t        k(  r| j                  fS | j                  j	                  |      | j                  fz   S r_   )r  rB  r  rM  r  r6  s     rc   r  zColumn.get_sort_key5  s:    99$II<;;++C0DII<??re   c                 D    t        | j                  | j                  f      S r_   )r  rM  r  r  s    rc   r  zColumn.__hash__;  s    T[[$)),--re   c                 T   |j                   t        k(  r$|j                  t        | j                              S |j                         5  |j                  | j                        j                  d      j                  t        | j                              cd d d        S # 1 sw Y   y xY wNrR  )r  rB  r'  rb  r  r/  rM  r  r6  s     rc   r#  zColumn.__sql__>  sz    99$776$)),--!!# Pwwt{{+33C8<<VDII=NOP P Ps   ABB'N)rf   rg   rh   r  r  r  r#  r`   re   rc   r!   r!   0  s    @.Pre   r!   c                       e Zd Zd Zd Zd Zy)WrappedNodec                 Z    || _         t        |dd      | _        t        |dd       | _        y )Nrb  TrE  )r;  r   rb  rE  r:  s     rc   r  zWrappedNode.__init__G  s)    	tY5!$d;re   c                 6    | j                   j                         S r_   )r;  rf  r  s    rc   rf  zWrappedNode.is_aliasL  s    yy!!##re   c                 6    | j                   j                         S r_   )r;  rh  r  s    rc   rh  zWrappedNode.unwrapO  s    yy!!re   N)rf   rg   rh   r  rf  rh  r`   re   rc   r  r  F  s    <
$"re   r  c                       e Zd ZdZd Zd Zy)EntityFactoryro  c                     || _         y r_   ro  r:  s     rc   r  zEntityFactory.__init__U  rq  re   c                 .    t        | j                  |      S r_   )rb  r;  r   s     rc   r   zEntityFactory.__getattr__W  rs  re   N)rf   rg   rh   r  r  r   r`   re   rc   r  r  S  s    I're   r  c                       e Zd ZdZddZy)_DynamicEntityr`   Nc                 4    |t        |j                        S | S r_   )r  r  rx  s      rc   r{  z_DynamicEntity.__get__]  s     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 )
rG  c                 :    t         t        |   |       || _        y r_   )r  rG  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      DKK  re   c                     | j                   S r_   r  r  s    rc   r  z
Alias.namem  s    {{re   c                     || _         y r_   r  ra   r~   s     rc   r  z
Alias.namep  	    re   c                 J    || j                   S t        | j                   |      S r_   )r;  rG  rH  s     rc   r  zAlias.aliast  s"    =99E**re   c                     | j                   S r_   ro  r  s    rc   rJ  zAlias.unaliasz      yyre   c                      yr>  r`   r  s    rc   rf  zAlias.is_alias}  s    re   c                    |j                   t        k(  rL|j                  | j                        j	                  d      j                  t        | j                              S |j                  t        | j                              S r  )r  r@  r'  r;  r  rb  r  r6  s     rc   r#  zAlias.__sql__  sY    99$S^WV_S,-/
 776$++.//re   r_   )rf   rg   rh   r  rw   r  r  r  r  setterr  rJ  rf  r#  r  r  s   @rc   rG  rG  c  sS    A!  	[[ +0re   rG  c                   $     e Zd Z fdZd Z xZS )rL  c                 :    t         t        |   |       || _        y r_   )r  rL  r  r  )ra   r;  r  r  s      rc   r  zBindTo.__init__  s    fd$T*	re   c                 8    |j                  | j                        S r_   r'  r;  r6  s     rc   r#  zBindTo.__sql__  s    wwtyy!!re   rf   rg   rh   r  r#  r  r  s   @rc   rL  rL    s    "re   rL  c                       e Zd Zd Zd Zy)r\  c                     | j                   S r_   ro  r  s    rc   r]  zNegated.__invert__  r  re   c                 V    |j                  d      j                  | j                        S )NzNOT )r  r'  r;  r6  s     rc   r#  zNegated.__sql__  s     {{6"&&tyy11re   Nrf   rg   rh   r]  r#  r`   re   rc   r\  r\    s    2re   r\  c                   $    e Zd Zd Zd Zd Zd Zy)BitwiseMixinc                 $    | j                  |      S r_   )r  r  s     rc   r  zBitwiseMixin.__and__  s    ||E""re   c                 $    | j                  |      S r_   )r  r  s     rc   r  zBitwiseMixin.__or__  s    {{5!!re   c                 @    | j                  |j                               S r_   )r  bin_negatedr  s     rc   r  zBitwiseMixin.__sub__  s    ||E--/00re   c                     t        |       S r_   )BitwiseNegatedr  s    rc   r]  zBitwiseMixin.__invert__  s    d##re   N)rf   rg   rh   r  r  r  r]  r`   re   rc   r  r    s    #"1$re   r  c                       e Zd Zd Zd Zy)r  c                     | j                   S r_   ro  r  s    rc   r]  zBitwiseNegated.__invert__  r  re   c                    |j                   j                  r;|j                   j                  j                  | j                  | j                        }n| j                  }|j	                  |      j                  | j                        S r_   )r  
operationsr  r  r  r'  r;  )ra   r7  op_sqls      rc   r#  zBitwiseNegated.__sql__  sZ    99YY))--dggtww?FWWF{{6"&&tyy11re   Nr  r`   re   rc   r  r    s    2re   r  c                       e Zd ZddZd Zy)rY   Nc                 f   || _         || _        |xr t        | j                   t              | _        | j                  rtg | _        | j                   D ]]  }t        |t              r| j
                  j                  |       /| j
                  j                  t        || j                               _ y y r_   )	r~   r-  rv   multi_typesmultir!  ra  r  rY   )ra   r~   r-  unpackr  s        rc   r  zValue.__init__  s    
"C
4::{ C
::DK

 DdD)KK&&t,KK&&uT4>>'BC	D re   c                     | j                   r$|j                  t        | j                              S |j	                  | j                  | j
                        S r_   )r  r'  r)  r!  r~   r-  r6  s     rc   r#  zValue.__sql__  s;    ::77+DKK899yyT^^44re   r>  r  r`   re   rc   rY   rY     s    
D5re   rY   c                       e Zd Zd Zy)ValueLiteralsc                 v     |d      5  |j                  | j                        cd d d        S # 1 sw Y   y xY w)NT)r0  r  r6  s     rc   r#  zValueLiterals.__sql__  s/    % 	&77499%	& 	& 	&s   /8Nrf   rg   rh   r#  r`   re   rc   r  r        &re   r  c                     t        | d      S NFr  )rY   r^  s    rc   r   r     s    u%%re   c                   $     e Zd Z fdZd Z xZS )r   c                 H    t         t        |   |       || _        d| _        y re  )r  r   r  _castrb  )ra   r;  rP  r  s      rc   r  zCast.__init__  s     dD"4(
re   c                     |j                  d      j                  | j                        j                  d| j                  z        S )NzCAST(z AS %s))r  r'  r;  r  r6  s     rc   r#  zCast.__sql__  s4    !TYYTZZ/0	2re   r  r  s   @rc   r   r     s    
2re   r   c                   4     e Zd Zd fd	ZddZd Zd Z xZS )Orderingc                     t         t        |   |       || _        || _        || _        |r!|j                         dvrt        d|z        y y )N)ri  lastz<Ordering nulls= parameter must be "first" or "last", got: %s)r  r  r  	directionrS  rT  rh  r  )ra   r;  r  rS  rT  r  s        rc   r  zOrdering.__init__  sY    h&t,""
U[[]*;; /167 8 8 <5re   c                 D    t        | j                  | j                  |      S r_   )r  r;  r  r  s     rc   r  zOrdering.collate  s    		4>>9==re   c                     |j                         dk(  rd\  }}n$|j                         dk(  rd\  }}nt        d      t        d | j                  j	                         |ff|      S )Nr  )r   r   ri  )r   r   z&unsupported value for nulls= ordering.)rh  r  r   r;  rd  )ra   rT  ifnullnotnulls       rc   _null_ordering_casezOrdering._null_ordering_case  s`    ;;=F""OFG[[]g%"OFGEFFDDII--/8:GDDre   c                    | j                   rO|j                  j                  s9|j                  | j	                  | j                               j                  d       |j                  | j                        j                  d| j                  z         | j                  r|j                  d| j                  z         | j                   r4|j                  j                  r|j                  d| j                   z         |S )N,  %sz COLLATE %sz	 NULLS %s)	rT  r  nulls_orderingr'  r  r  r;  r  rS  r6  s     rc   r#  zOrdering.__sql__  s    ::cii66GGD,,TZZ89AA$G		""54>>#9:>>KK67::#))22KKdjj01
re   r  r_   )rf   rg   rh   r  r  r  r#  r  r  s   @rc   r  r    s    8>E	re   r  c                     t        | d||      S )NASCr  r;  rS  rT  s      rc   rU  rU    s    D%E22re   c                     t        | d||      S )NDESCr  r  s      rc   rY  rY    s    D&)U33re   c                       e Zd ZddZd Zy)r
  c                 <    || _         || _        || _        || _        y r_   )r  r  r   flat)ra   r  r  r   r  s        rc   r  zExpression.__init__  s    	re   c                 f   | j                    dd}| j                  x}}t        |t              r|j	                         }t        |t
              r/|j                  r#|j                  |d<   t        |t              |d<   nd |d<   |j                  j                  r;|j                  j                  j                  | j                  | j                        }n| j                  } |di |5  | j                  t        j                  k(  xs | j                  t        j                  k(  }|rh|j!                         j#                  | j$                        d   dk(  r9|j'                  | j                  t        j                  k(  rdnd      cd d d        S | j$                  }|E| j                  t        j(                  k(  s| j                  t        j*                  k(  rt-        d	      }|j/                  | j                        j'                  d
|z        j/                  |      cd d d        S # 1 sw Y   y xY w)NT)r  in_exprr-  
is_fk_exprr   ()z0 = 1z1 = 1rQ  r  r`   )r  r  rv   r  rh  r2   rb  db_valuer6   r  r  r  r  rE   r   r   r  r<  r   r  r   r   rQ   r'  )ra   r7  rN  r;  raw_noder  op_inr   s           rc   r#  zExpression.__sql__  s   (,		MdC	 (("xh,??$D dE"x'7'7%)]]Ik"&0&GIl#%)Ik"99YY))--dggtww?FWWF9 	 GGruu$<299(<E++DHH5a8D@{{dgg.>7GL	 	 ((C{255 0DGGryy4H&kS]WVf_-SX	 	 	s   (BH'BH''H0Nr  r  r`   re   rc   r
  r
    s    "re   r
  c                       e Zd Zd Zd Zy)r{  c                 $    | j                  |      S r_   )r|  r   s     rc   r   zStringExpression.__add__8  s    {{3re   c                 8    t        |t        j                  |       S r_   rz  )ra   r  s     rc   r  zStringExpression.__radd__:  s    RYY55re   N)rf   rg   rh   r   r  r`   re   rc   r{  r{  7  s     6re   r{  c                   *    e Zd Zd Zd Zd Zd Zd Zy)rb  c                 ^    |D cg c]  }|s|j                  dd       c}| _        y c c}w )N""")r   r  )ra   rT  rV  s      rc   r  zEntity.__init__?  s$    :>G$$dll3-G
Gs   **c                 .    t        | j                  |gz    S r_   )rb  r  r   s     rc   r   zEntity.__getattr__B  s    tzzTF*++re   c                 ,    t        | j                        S r_   )r]  r  r6  s     rc   r  zEntity.get_sort_keyE  s    TZZ  re   c                 j    t        | j                  j                  t        | j                        f      S r_   )r  r  rf   r]  r  r  s    rc   r  zEntity.__hash__H  s%    T^^,,eDJJ.?@AAre   c                 |    |j                  t        | j                  |j                  j                  xs d            S )Nr  )r  rW  r  r  r6  s     rc   r#  zEntity.__sql__K  s)    {{5SYY__-DEFFre   N)rf   rg   rh   r  r   r  r  r#  r`   re   rc   rb  rb  >  s    H,!BGre   rb  c                       e Zd ZddZd Zy)rQ   Nc                      || _         || _        y r_   r'  rL  ra   r'  rL  s      rc   r  zSQL.__init__P  s    re   c                     |j                  | j                         | j                  r%| j                  D ]  }|j                  |dd        |S NF)r3  )r  r'  rL  r~   ra   r7  r2  s      rc   r#  zSQL.__sql__T  sC    DHH;; 9		%%	89
re   r_   r  r`   re   rc   rQ   rQ   O  s    re   rQ   c                 f    t        d| z        }|s|S t        t        d      t        |      |f      S )Nz
CHECK (%s)
CONSTRAINT)rQ   rj  rb  )
constraintr  checks      rc   r   r   \  s4    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y)Function)sumcountavgrP  	array_aggNc                     || _         || _        d | _        d | _        || _        |r$|j                         | j                  v rd| _        y || _        y re  )r  	arguments_filter	_order_by_python_valuerh  no_coerce_functionsrb  )ra   r  r  rc  python_values        rc   r  zFunction.__init__f  sJ    	")DJJLD$<$<< DL!DLre   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1re   r`   )ra   r   r'  s    ` rc   r   zFunction.__getattr__q  s    	2re   c                     || _         y r_   )r   )ra   wheres     rc   filterzFunction.filterv  	    re   c                     || _         y r_   r!  )ra   orderings     rc   order_byzFunction.order_byz  	    !re   c                     || _         y r_   )r"  )ra   funcs     rc   r$  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[   WindowAliasrj  rQ   )	ra   r4  r/  r  r5  r6  windowr7  r;  s	            rc   overzFunction.over  sW    lF+!Fv&D|h %3:")49D s6{D122re   c                    |j                  | j                         t        | j                        s|j                  d       n| j                  }| j                  r;t        |      }t        |d   t        d      t        | j                        f      |d<    |dt        | j                              5  |j                  t        |D cg c]   }t        |t              r|nt        |d      " c}             d d d        | j                  r9|j                  d      j                  | j                        j                  d       |S c c}w # 1 sw Y   UxY w)	Nr  rr  ORDER BYT)in_functionfunction_arg_countFz FILTER (WHERE r  )r  r  r   r  r!  r\  rj  rQ   r(  r'  r)  rv   ra  rY   r   )ra   r7  r  args       rc   r#  zFunction.__sql__  s   DII4>>"KK>>D ~~Dz#T"Xs:%24>>%B%D ER #dnn:MN '(#*% 'sD1SuS%7HH*% & ''
 <<KK)*..t||<DDSI
*%' 's   3E%E-EEE)TNr_   NNNNNNN)rf   rg   rh   setr#  r  r   ra  rL  r*  r/  r$  r<  r#  r`   re   rc   r  r  c  st    JK	"
 
YY  
YY" " 
YY" " FJ373re   r  c                   \    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ROWSc
                    t         t        |           |t        |t              st	        |      }|t        |t              st	        |      }t        |      | _        t        |      | _        || _        || _	        | j                  | j                  t        d      |xs d| _        |	| _        || _        || _        || _        y )Nz(Cannot specify WINDOW end without start.w)r  r[   r  rv   rQ   r_  r4  r/  r  r5  r  r  r8  r6  _extends_exclude)ra   r4  r/  r  r5  r6  extendsr7  r  r8  r  s             rc   r  zWindow.__init__  s     	fd$&Zs%;JE?:c3#7c(C(6$X.
::$(("6GHHls$re   c                     |xs d| _         | S NrK  r  rH  s     rc   r  zWindow.alias  s    lsre   c                 .    t         j                  | _        y r_   )r[   rH  r6  r  s    rc   as_rangezWindow.as_range  s     ,,re   c                 .    t         j                  | _        y r_   )r[   rI  r6  r  s    rc   as_rowszWindow.as_rows  s     ++re   c                 .    t         j                  | _        y r_   )r[   rG  r6  r  s    rc   	as_groupszWindow.as_groups  s     --re   c                     || _         y r_   )rL  ra   r;  s     rc   rN  zWindow.extends  s	    re   c                 H    t        |t              rt        |      }|| _        y r_   )rv   r1  rQ   rM  )ra   frame_exclusions     rc   r7  zWindow.exclude  s    oz2!/2O're   c                 8    | t        d      S t        d| z        S )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGrQ   r^  s    rc   	followingzWindow.following  #    =,-->E)**re   c                 8    | t        d      S t        d| z        S )NzUNBOUNDED PRECEDINGz%d PRECEDINGr\  r^  s    rc   	precedingzWindow.preceding  r^  re   c                    |j                   t        k7  r8| j                  s,|j                  | j                         |j                  d        |d      5  g }| j
                  ^| j
                  }t        |t              rt        |j                        }nt        |t              rt        |      }|j                  |       | j                  r/|j                  t        d      t        | j                        f       | j                  r/|j                  t        d      t        | j                        f       | j                  [| j                   O| j"                  xs d}|j                  t        d|z        | j                  t        d      | j                   f       nt| j                  5|j                  t        | j"                  xs d      | j                  f       n3| j"                  '|j                  t        d	| j"                  z               | j$                  &|j                  t        d
      | j$                  f       |j'                  t)        |             d d d        |S # 1 sw Y   |S xY w)Nr  Tr'  zPARTITION BYr>  rI  z
%s BETWEENr   z%s UNBOUNDED PRECEDINGEXCLUDE)r  r@  r8  r  r  rL  rv   r[   rQ   r1  r  r4  r5  r(  r/  r  r5  r6  rM  r'  rj  )ra   r7  partsextframes        rc   r#  zWindow.__sql__  s   99$T\\KK$KKT" 	%E}}(mmc6*cjj/CZ0c(CS!  '!$"3"346 7 }}
O!$--02 3 zz%$((*>16u,-JJJHH	 
 'c$//";V<djjIJ,S!9DOO!KLM}}(c)ndmm<=GGHUO$=	%> 
?	%> 
s   H
I))I3)	NNNNNNNNFr_   )rf   rg   rh   rQ   CURRENT_ROWrE  rF  	NO_OTHERSrG  rH  rI  r  r  ra  rL  rR  rT  rV  rN  r7  rl  r]  r`  r#  r  r  s   @rc   r[   r[     s    m$KLEv;DK I FEDIMDH * 
YY' ' 
YY& & 
YY( ( 
YY  
YY( (
 + +
 + +
$re   r[   c                       e Zd Zd Zd Zd Zy)r:  c                     || _         y r_   )r;  rX  s     rc   r  zWindowAlias.__init__  r  re   c                 (    || j                   _        | S r_   )r;  r  )ra   window_aliass     rc   r  zWindowAlias.alias  s    )re   c                 T    |j                  | j                  j                  xs d      S rP  )r  r;  r  r6  s     rc   r#  zWindowAlias.__sql__"  s     {{4;;--455re   N)rf   rg   rh   r  r  r#  r`   re   rc   r:  r:    s    6re   r:  c                       e Zd ZddZd Zy)_InFunctionc                      || _         || _        y r_   )r;  r?  )ra   r;  r?  s      rc   r  z_InFunction.__init__'  s    	&re   c                      || j                         5  |j                  | j                        cd d d        S # 1 sw Y   y xY w)Nr?  )r?  r'  r;  r6  s     rc   r#  z_InFunction.__sql__+  s5    T--. 	&77499%	& 	& 	&s	   9ANrj  r  r`   re   rc   rn  rn  &  s    '&re   rn  c                       e Zd ZddZd Zy)r   Nc                 .    || _         || _        || _        y r_   )r  expression_tuplesdefault)ra   r  rt  ru  s       rc   r  zCase.__init__1  s    "!2re   c           	         t        d      g}| j                  |j                  | j                         | j                  D ]5  \  }}|j	                  t        d      |t        d      t        |      f       7 | j                  /|j	                  t        d      t        | j                        f       |j                  t        d              |d      5  |j                  t        |            cd d d        S # 1 sw Y   y xY w)NCASEWHENTHENELSEENDFrq  )	rQ   r  r  rt  r5  rn  ru  r'  rj  )ra   r7  clausesexprr~   s        rc   r#  zCase.__sql__6  s    v;->>%NN4>>*11 	>KD%NNCKKU);= >	> <<#NNCKT\\)BCDs5z"U# 	.778G,-	. 	. 	.s   C::Dr_   r  r`   re   rc   r   r   0  s    
.re   r   c                       e Zd ZddZd Zy)	ForUpdateNc                     |du rdn|}|j                         j                  d      r|d d }d}|| _        |t        |t        t
        t        f      s|f}|| _        || _        y )NTz
FOR UPDATEnowaiti)	rh  rt  _exprrv   r\  rC  r]  _of_nowait)ra   r}  ofr  s       rc   r  zForUpdate.__init__E  sd    #t||::<  *9DF
>*R$U1C"DBre   c                     |j                  | j                         | j                  3|j                  d      j                  t	        | j                               | j
                  r|j                  d       |S )Nz OF z NOWAIT)r  r  r  r'  r(  r  r6  s     rc   r#  zForUpdate.__sql__Q  sT    DJJ88KK##M$(($;<<<KK	"
re   r  r  r`   re   rc   r  r  D  s    
re   r  c                       e Zd ZddZd Zy)rj  c                 D   || _         || _        || _        |rt        | j                         dk(  rpt	        | j                   d   t
              rR| j                   d   j                  s8| j                   d   j                         f| _         d| j                   d   _        y y y y y )Nr   r   T)nodesglueparensr   rv   r
  r  rZ  )ra   r  r  r  s       rc   r  zNodeList.__init__[  s    
	c$**o*djjmZ0zz!}!!**Q---/1DJ!%DJJqM " 1 +6re   c                    t        | j                        }|dk(  r| j                  r|j                  d      S |S  || j                        5  t	        |dz
        D ];  }|j                  | j                  |          |j                  | j                         = |j                  | j                  |dz
            d d d        |S # 1 sw Y   |S xY w)Nr   r  r'  r   )r   r  r  r  r  r'  r  )ra   r7  n_nodesis       rc   r#  zNodeList.__sql__f  s    djj/a<(,3;;t$<<T[[) 	-7Q;' '

1&DII&' GGDJJw{+,		-
 
	-
 
s   A.CCN)r   Fr  r`   re   rc   rj  rj  Z  s    	&	re   rj  c                     t        | d      S Nr  rj  r  s    rc   r(  r(  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y)
_Namespace_namec                     || _         y r_   r  r  s     rc   r  z_Namespace.__init__|  s	    
re   c                     t        | |      S r_   )NamespaceAttributer   s     rc   r   z_Namespace.__getattr__~  s    !$--re   Nrt  r`   re   rc   r  r  z  s    I.Kre   r  c                       e Zd Zd Zd Zy)r  c                      || _         || _        y r_   )
_namespace
_attribute)ra   	namespace	attributes      rc   r  zNamespaceAttribute.__init__  s    ##re   c                     |j                  | j                  j                  dz         j                  t	        | j
                              S r  )r  r  r  r'  rb  r  r6  s     rc   r#  zNamespaceAttribute.__sql__  s6    ..45VDOO,-	/re   Nr  r`   re   rc   r  r    s    $/re   r  r1   c                   H     e Zd Z fdZej
                  d        Zd Z xZS )r0   c                 F    t         t        |           || _        d| _        y re  )r  r0   r  r9  _negatedra   r9  r  s     rc   r  zDQ.__init__  s    b$ "
re   c                 (    | j                    | _         y r_   )r  r  s    rc   r]  zDQ.__invert__  s     MM)re   c                 R    t        di | j                  }| j                  |_        |S r	  )r0   r9  r  r:  s     rc   rZ  zDQ.clone  s#    DJJre   )	rf   rg   rh   r  ra  rL  r]  rZ  r  r  s   @rc   r0   r0     s%    
 
YY* *re   r0   c                      t        |       S r_   )r)  )as    rc   rx   rx     s    #A& re   c                       e Zd Zd Zy)rM   c                     |j                         5  |j                  | j                        cd d d        S # 1 sw Y   y xY wr_   )r/  r'  r;  r6  s     rc   r#  zQualifiedNames.__sql__  s3     	&77499%	& 	& 	&s   6?Nr  r`   re   rc   rM   rM     r  re   rM   c                     t        | t              rN| j                  t        | j                        | j
                  t        | j                        | j                        S t        | t              rt        |       S | S r_   )
rv   r
  r  qualify_namesr  r  r   r  rC  rM   ro  s    rc   r  r    s^     $
#~~mDHH5tww+DHH5tyy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y)
OnConflictNc                     || _         || _        t        |      | _        || _        ||t        d      t        |      | _        || _        || _        y )NzIonly one of "conflict_target" and "conflict_constraint" may be specified.)	_action_updater_  	_preserve_wherer  _conflict_target_conflict_where_conflict_constraint)ra   actionr   preserver)  conflict_targetconflict_whereconflict_constraints           rc   r  zOnConflict.__init__  sc     %h/&+>+J G H H ,_ =-$7!re   c                 :    |j                   j                  | |      S r_   )r  conflict_statementra   r7  r9  s      rc   get_conflict_statementz!OnConflict.get_conflict_statement  s    yy++D%88re   c                 :    |j                   j                  | |      S r_   )r  conflict_updater  s      rc   get_conflict_updatezOnConflict.get_conflict_update  s    yy((u55re   c                     || _         y r_   )r  r  s     rc   r  zOnConflict.preserve  s	     re   c                     |r|rt        |t              st        d      |xs i }|r|j                  |       || _        y )NzGCannot mix data with keyword arguments in the OnConflict update method.)rv   dictr  r   r  )ra   _datar  s      rc   r   zOnConflict.update  sA    VJud$; 9 : :LL re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   r  rt   operatorand_ra   expressionss     rc   r)  zOnConflict.where  .    ;;";;.;6KX]]K8re   c                      d | _         || _        y r_   r  r  )ra   constraintss     rc   r  zOnConflict.conflict_target  s    $(! +re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   )r  rt   r  r  r  s     rc   r  zOnConflict.conflict_where  s4    +//1K?K%hmm[Are   c                      || _         d | _        y r_   r  )ra   r  s     rc   r  zOnConflict.conflict_constraint  s    $.! $re   rB  r_   )rf   rg   rh   r  r  r  ra  rL  r  r   r)  r  r  r  r`   re   rc   r  r    s    FJ6:%)896 
YY! ! 
YY  
YY9 9
 
YY, , 
YYB B
 
YY% %re   r  c                 0     t               d fd	       }|S )Nc                 r    || j                   n|}|st        dj                  z         | |g|i |S )Nz8Query must be bound to a database in order to call "%s".)rH  r<   rf   )ra   r  r  r  r  s       rc   r  z database_required.<locals>.inner  sN    %-%54>>8  "139??"C D DdH6t6v66re   r_   r   r  s   ` rc   database_requiredr    s     
6]7 7 Lre   c                   0    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 )	BaseQueryc                 d    || _         d | _        d | _        d | _        t	        t
        |   di | y r	  )rH  _cursor_wrapper	_row_type_constructorr  r  r  )ra   rH  r  r  s      rc   r  zBaseQuery.__init__  s3    "# i'1&1re   c                     || _         | S r_   r  r  s     rc   r  zBaseQuery.bind  r  re   c                 :    t         t        |          }d |_        |S r_   )r  r  rZ  r  r  s     rc   rZ  zBaseQuery.clone  s    i,. $re   c                 F    |rt         j                  | _        | S d | _        | S r_   )ROWr>  r  )ra   as_dicts     rc   dictszBaseQuery.dicts  s"    %, 37re   c                 F    |rt         j                  | _        | S d | _        | S r_   )r  r=  r  )ra   as_tuples     rc   tupleszBaseQuery.tuples  s"    &. 59re   c                 F    |rt         j                  | _        | S d | _        | S r_   )r  r?  r  )ra   as_namedtuples     rc   namedtupleszBaseQuery.namedtuples  s$    ,9 @Dre   c                 F    |rt         j                  nd | _        || _        | S r_   )r  r@  r  r  ra   constructors     rc   r5  zBaseQuery.objects  s    ,7T're   c                 X   | j                   xs | 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%:%:sxx$V,," (((*622(&vt/@/@AA;hFGGre   c                     t         r_   r\  r6  s     rc   r#  zBaseQuery.__sql__/  r^  re   c                     | j                   r| j                   j                         }n
t               }|j                  |       S r_   )rH  rJ  r#   r<  )ra   contexts     rc   r'  zBaseQuery.sql2  s1    >>nn446GiG}}T""re   c                 $    | j                  |      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                 R    t        | j                  |      j                               S r_   )ru  r  iteratorr  s     rc   r  zBaseQuery.iterator@  s    DLL*33566re   c                 l    | j                   (| j                  st        d      | j                          y y )NzQuery has not been executed.)r  rH  r  r  r  s    rc   _ensure_executionzBaseQuery._ensure_executionC  s/    '>> !?@@LLN (re   c                 L    | j                          t        | j                        S r_   )r  ru  r  r  s    rc   r  zBaseQuery.__iter__I  s     D(())re   c                     | j                          t        |t              r|j                  }n|}||dk\  r|dz   nd}| j                  j                  |       | j                  j                  |   S Nr   r   )r  rv   r~  r  r  
fill_cache	row_cache)ra   r~   rv  s      rc   r  zBaseQuery.__getitem__M  sh     eU#JJEE!&!EAIE''.##--e44re   c                 L    | j                          t        | j                        S r_   )r  r   r  r  s    rc   __len__zBaseQuery.__len__X  s     4''((re   c                     t        |       S r_   )rM  r  s    rc   __str__zBaseQuery.__str__\  s    t$$re   r_   rj  )rf   rg   rh   r  r>  r  r  r  rZ  ra  rL  r  r  r  r5  r  r#  r'  r  r  r  r  r  r  r  r  r
  r  r  s   @rc   r  r    s    xx2
 
YY  
YY  
YY  
YY 
H"# ' '"7*	5)%re   r  c                   ,     e Zd Zd fd	Zd Zd Z xZS )RawQueryc                 H    t        t        | 
  di | || _        || _        y r	  )r  r  r  r  _params)ra   r'  rL  r  r  s       rc   r  zRawQuery.__init__a  s#    h&00	re   c                     |j                  | j                         | j                  r$| j                  D ]  }|j                  |d        |S r  )r  r  r  r~   r  s      rc   r#  zRawQuery.__sql__f  sA    DII<< 2		%5	12
re   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S r_   r  r  r  ra   r  r  s      rc   r  zRawQuery._executem  =    '%%d+F#'#;#;F#CD ###re   r  )rf   rg   rh   r  r#  r  r  r  s   @rc   r  r  `  s    
$re   r  c                   R    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 )Queryc                 r    t        t        | 
  di | || _        || _        || _        || _        d | _        y r	  )r  r  r  r  r!  _limit_offsetr2  )ra   r)  r/  limitoffsetr  r  s         rc   r  zQuery.__init__u  s8    eT#-f-!re   c                     || _         y r_   )r2  )ra   cte_lists     rc   r4  zQuery.with_cte  r0  re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   r  r  s     rc   r)  zQuery.where  r  re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   )r  rt   r  or_r  s     rc   orwherezQuery.orwhere  s.    ;;";;.;6KX\\;7re   c                     || _         y r_   r-  ra   r!  s     rc   r/  zQuery.order_by  s	    re   c                 <    | j                   xs d|z   xs d | _         y r	  r-  r"  s     rc   order_by_extendzQuery.order_by_extend  s    >>/R69Bdre   c                     || _         y r_   )r  r  s     rc   r  zQuery.limit  r  re   c                     || _         y r_   )r  r  s     rc   r  zQuery.offset  r+  re   c                 :    |dkD  r|dz  }|| _         ||z  | _        y r  )r  r  )ra   pagepaginate_bys      rc   paginatezQuery.paginate  s%    !8AID!k)re   c                    | j                   r3|j                  d      j                  t        | j                                | j                  "| j
                  d|j                  j                  rN| j                  |j                  j                  n| j                  }|j                  d      j                  |       | j
                  *|j                  d      j                  | j
                         |S )Nz
 ORDER BY z LIMIT z OFFSET )r!  r  r'  r(  r  r  r  	limit_max)ra   r7  r  s      rc   _apply_orderingzQuery._apply_ordering  s    >>gl#c-/0;;"t||'?'*yy':':+/;;+>CII''DKKEKK	"&&u-<<#KK
#''5
re   c                 6   | j                   rt        d | j                   D              }|j                  d      5  |j                  |rdnd      j	                  t        | j                               j                  d       d d d        |S |S # 1 sw Y   |S xY w)Nc              3   4   K   | ]  }|j                     y wr_   )r/  )rm  r  s     rc   ro  z Query.__sql__.<locals>.<genexpr>  s     EsCNNEs   Fr  zWITH RECURSIVE zWITH r   )r2  anyrE  r  r'  r(  )ra   r7  r  s      rc   r#  zQuery.__sql__  s    >> EdnnEEI .  'y+gF#mDNN34'#,	 
 
s
 
 
s   ABB)NNNNr_   )   )rf   rg   rh   r  ra  rL  r4  r)  r   r/  r$  r  r  r*  r-  r#  r  r  s   @rc   r  r  t  s     
YY" " 
YY9 9
 
YY8 8
 
YY    
YYC C 
YY  
YY  
YY* *re   r  c                 (     t          fd       }|S )Nc                 *    r|| }} t        | |      S r_   )CompoundSelectQuery)ra   r  r  	operations     rc   r  z#__compound_select__.<locals>.method  s    %D"4E::re   )r  )r6  r  r  s   `` rc   __compound_select__r7    s    ; ; 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y)	SelectQuery	UNION ALLUNION	INTERSECTEXCEPTTr  c                     |st        d      t        | f|      j                  | j                        }t	        | dd       |j                  | j                        }|S )Nz/select_from() must specify one or more columns.r6  )r  rP   r  rH  r   r5  r6  r7  s      rc   r8  zSelectQuery.select_from  sV    NOO)$t~~& 	4$'3MM$**-Ere   N)rf   rg   rh   r7  r=  r   r@  r  	intersectr  except_r  r  r  r  r  r8  r`   re   rc   r9  r9    ss    -k::I(11EF-k::I+H55Gg";>H!'D9G";>H"8d;H	re   r9  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y
)
SelectBasec                 ^    t        | j                  | j                  xs t        |       f      S r_   )r  r  r  r#  r  s    rc   r  zSelectBase._get_hash  s#    T^^T[[%<BtH=>>re   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S r_   r  r  s      rc   r  zSelectBase._execute  r  re   c                 H    | j                  |      d | }|r|dk(  r|d   S |S y Nr   r   )r  )ra   r  rx  rowss       rc   peekzSelectBase.peek  s4    ||H%bq)1f47.$. re   c                 b    | j                   |k7  r|| _         d | _        | j                  ||      S )N)rx  )r  r  rH  )ra   r  rx  s      rc   ri  zSelectBase.first  s0    ;;!DK#'D yyQy''re   c                     |r| j                         j                  |      S | j                         j                  |      }|r|s|d   S |S r  )r  rH  r  )ra   r  r  r  r*  s        rc   scalarzSelectBase.scalar  sE    ::<$$X..kkm  *Xs1v636re   c              #   b   K   | j                         j                  |      D ]	  }|d     y wr  )r  r  )ra   r  r*  s      rc   scalarszSelectBase.scalars 	  s/     ;;=((2 	Ca&L	s   -/c                    | j                         j                  d      }|rd x|_        |_        	 |j                  L|j
                  @|j                  4|j                  (|j                  dur|j                  t        d            }t        |gt        j                  t        d            g      j                  |      S # t        $ r Y Dw xY w)N_wrappedT1)r/  r  r  r  _having	_group_by_windows	_distinct_simple_distinctr  rQ   r   rP   r5   COUNTrK  )ra   r  clear_limitrZ  s       rc   r  zSelectBase.count	  s    %%j1+//EL5=	}}$)@~~%%//*A%%T1SX. ugS 234;;HEE  		s   AC 	CCc                     | j                  t        d            }d|_        d |_        t	        |j                               S )NrP  r   )r  rQ   r  r  boolrK  )ra   r  rZ  s      rc   existszSelectBase.exists	  s3    SX&ELLN##re   c                 X    d | _         	 | j                  |      d   S # t        $ r Y y w xY wr  )r  r  
IndexErrorr  s     rc   r  zSelectBase.get	  s5    #	<<)!,, 		s    	))N)r   FFr  )rf   rg   rh   r  r  r  rH  ri  rK  rM  r  rZ  r  r`   re   rc   rB  rB    s    ?$ / /
 ( ( 7 7   F F $ $  re   rB  c                   T     e Zd Z fdZed        Zed        Zd Zd Z	 fdZ
 xZS )r5  c                 T    t         t        |           || _        || _        || _        y r_   )r  r5  r  r  r  r   )ra   r  r  r   r  s       rc   r  zCompoundSelectQuery.__init__'	  s&    !413re   c                 .    | j                   j                  S r_   )r  
_returningr  s    rc   ra  zCompoundSelectQuery._returning-	  s    xx"""re   c                     t        | j                  d      ft        d      f      j                  |      }t	        |j                               S )Nr   rP  )rP   r  rQ   r  rY  rK  )ra   r  r9  s      rc   rZ  zCompoundSelectQuery.exists1	  s;    

1'#c(5::8DELLN##re   c                 j    | j                   j                         | j                  j                         fS r_   )r  get_query_keyr   r  s    rc   _get_query_keyz"CompoundSelectQuery._get_query_key6	  s'    &&($((*@*@*BCCre   c                     |j                   j                  }|r	|t        k(  ry|t        k(  ry|t        k(  r>|j                   j
                  s|j                   j                  ryt        |t               S y NFT)	r  compound_select_parenthesesCSQ_PARENTHESES_NEVERCSQ_PARENTHESES_ALWAYSCSQ_PARENTHESES_UNNESTEDr  r?  rv   r5  )ra   r7  subqcsq_settings       rc   _wrap_parensz CompoundSelectQuery._wrap_parens9	  sj    ii;;k-BB2244yy  CII$9$9 
 "$(;<<< 5re   c                    |j                   t        k(  r| j                  |      S t        t        |   |       |j                  xs |j                   t        k(  } ||      5  | j                  || j                        }|j                  |d      5  |j                  | j                         d d d        |j                  d| j                  z         |j                         5  | j                  || j                        }|j                  |d      5  |j                  | j                         d d d        d d d        |j!                         5  | j#                  |       d d d        d d d        | j%                  |      S # 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   dxY w# 1 sw Y   FxY w# 1 sw Y   JxY w)Nr'  F)r  r  r  )r  rF  r  r  r5  r#  r  r@  rn  r  r?  r'  r  r  r!  r   rC  r-  r  )ra   r7  outer_parens
lhs_parens
rhs_parensr  s        rc   r#  zCompoundSelectQuery.__sql__K	  sz   99$$$S)) 	!405||B		\(A\* 	***39J!!j5!I "!"KK()! &!..sDHH=
%%*u%M &GGDHH%&& !!# *$$S)*!	*& $$!" "& && &* *!	* 	*sl   #0F4F/6F4%0FF1F9F4F(#F4F		F4FFF%	!F4(F1	-F44F=)rf   rg   rh   r  r  ra  r  rZ  re  rn  r#  r  r  s   @rc   r5  r5  &	  sE     # # $ $D=$% %re   r5  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                 b   t        t        | 
  di | t        |t              rt        |      n|xs g | _        || _        || _        || _	        d | _
        || _        || _        |	| _        |
| _        d x| _        | _        |r&t        |t"              r|| _        d | _        y || _        d | _        y r	  )r  rP   r  rv   r]  r\  
_from_listra  rR  rQ  rS  _for_update_for_update_of_for_update_nowait_lateralrT  rU  rY  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.J4	? )1.0 	!!%+"(155.(D)(0%  $ "*#re   c                 x    t         t        |          }|j                  rt	        |j                        |_        |S r_   )r  rP   rZ  ru  r\  ra   rZ  r  s     rc   rZ  zSelect.clone	  s3    fd)+#E$4$45Ere   c                     || _         y r_   ra  )ra   r  r  s      rc   r  zSelect.columns	  s	    !re   c                 >    t        | j                        |z   | _        y r_   )r]  ra  r  s     rc   select_extendzSelect.select_extend	  s    07:re   c                     | j                   S r_   r  r  s    rc   selected_columnszSelect.selected_columns	  s    re   c                     || _         y r_   r  r  s     rc   r  zSelect.selected_columns	  s	    re   c                 $    t        |      | _        y r_   )r\  ru  ra   sourcess     rc   from_zSelect.from_	  s    w-re   c                     | j                   st        d      | j                   j                         }| j                   j                  t	        ||||             y )NNo sources to join on.)ru  r  r  r  r  )ra   r  r  r  r  s        rc   rS  zSelect.join	  sD    566""$tD$	2>?re   c                 D    | j                  |t        j                  |      S r_   rS  r?   r4  r  s      rc   r  zSelect.left_outer_join	  s    yyt33re   c           
         g }|D ]n  }t        |t              rK|j                  st        d      |j	                  |j                  D cg c]  }t        ||       c}       ^|j                  |       p || _        y c c}w NzQCannot pass a table to group_by() that does not have columns explicitly declared.)rv   rS   r  r  r5  r   r  rR  ra   r  groupingr  col_names        rc   r{  zSelect.group_by	  s     		(F&%($ &1 2 2 17!B%- ")!: !B C '		( "	!Bs   A>
c                 X    t        | j                  xs d      |z   } | j                  | S )z$@Node.copy used from group_by() callr`   )r]  rR  r{  )ra   r!  r{  s      rc   group_by_extendzSelect.group_by_extend	  s+    -2.7t}}h''re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   )rQ  rt   r  r  r  s     rc   r|  zSelect.having	  s.    <<#<</K7Khmm[9re   c                 n    t        |      dk(  r|d   du s|d   du r|d   | _        y d| _        || _        y )Nr   r   TF)r   rU  rT  r  s     rc   r  zSelect.distinct	  s?    w<1'!*"4
e8K$+AJD!$)D!$DNre   c                 &    |r|| _         y d | _         y r_   )rS  )ra   r}  s     rc   r;  zSelect.window	  s    #*re   c                 >    |s||rd}|| _         || _        || _        y r>  )rv  rw  rx  )ra   r~  r  r  s       rc   r~  zSelect.for_update	  s(    r~J% "(re   c                     || _         y r_   )ry  )ra   r  s     rc   r  zSelect.lateral	  s	    re   c                     | j                   S r_   r  r  s    rc   re  zSelect._get_query_key	  s    {{re   c                 J    |j                  t        | j                              S r_   )r'  r(  ra  ra   r7  is_subquerys      rc   __sql_selection__zSelect.__sql_selection__	  s    ww}T__566re   c                    |j                   t        k(  r| j                  |      S | j                  r$|j                   t        k(  r|j                  d       |j                  }d d|xs |j                   t        k(  dd}|j                  j                  r|j                  j                  dk(  rd|d<    |j                  di |5  t        t        | 7  |       |j                  d       | j                  s| j                  _|j                  d       | j                  rB|j                  d	      j!                  t#        | j                              j                  d
       |j%                         5  | j'                  ||      }d d d        | j(                  rN|j%                  d      5  |j                  d      j!                  t+        | j(                               d d d        | j,                  *|j                  d      j!                  | j,                         | j.                  r3|j                  d      j!                  t+        | j.                               | j0                  *|j                  d      j!                  | j0                         | j2                  5|j                  d       |j!                  t+        | j2                               | j5                  |       | j6                  rl|j                  j8                  st;        d      |j                  d
       |j!                  t=        | j6                  | j>                  | j@                               d d d        |j                  j                  s"|j                  jB                  r| jD                  |S | jG                  |      S # 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   nxY w)NzLATERAL FT)r-  r?  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  rF  r  ry  r@  r  r  r  r?  r@  r?  r  rP   r#  rU  rT  r'  r)  rA  r  ru  r(  r  rR  rQ  rS  r-  rv  r~  r  r  rw  rx  r  r  r  )ra   r7  r  r  r  s       rc   r#  zSelect.__sql__	  s   99$$$S))==SYY,6KK
#ll &E399+D	
 99  SYY%A%AQ%F#(E- S&& ,	< &$',KK	"$$(BK(>>genc*4>>:;gcl!!# ?,,S+>? %%%%8 NKK)--mDOO.LMN {{&I&**4;;7~~L)--mDNN.KL||'J'++DLL9}}(J'dmm45   %yy++$ &4 5 5C 	$"2"2D4G4G"&"9"9; <W,	<b 99  SYY%6%6%)[[%8J$$M? ?N N',	< ,	<s>   B,O0N-&O)4N:E=O-N7	2O:O	?OO)
NNNNNNNNNNr_   TNNrj  r  )rf   rg   rh   r  rZ  ra  rL  r  r  r  r  r  r  r  r?   r3  rS  r  r{  r  r|  r  r;  r~  r  re  r  r#  r  r  s   @rc   rP   rP   i	  s`   >BFJ:>$0 
YY" "F	YY; ;      
YY( ( 
YY#'::$ @ @4 
YY" "(
 
YY: :
 
YY% % 
YY5 5 
YY) ) 
YY   7F% F%re   rP   c                   t     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 )_WriteQueryc                 ^    || _         || _        |rdnd| _        t        t        |   di | y )NTFr`   )r&  ra  _return_cursorr  r  r  )ra   r&  	returningr  r  s       rc   r  z_WriteQuery.__init__(
  s/    
#&/dUk4)3F3re   c                 "    t        || |||      S r  r  r  s        rc   r  z_WriteQuery.cte.
  r  re   c                 4    || _         |rd| _        y d| _        y NTF)ra  r  )ra   r  s     rc   r  z_WriteQuery.returning2
  s    #&/dUre   c                     | j                   rN|j                         5  |j                  d      j                  t	        | j                                d d d        |S |S # 1 sw Y   |S xY w)Nz RETURNING )ra  rA  r  r'  r(  r6  s     rc   apply_returningz_WriteQuery.apply_returning7
  sV    ??!!# OM*..}T__/MNO
s
O
s   4AA'c                     | j                   r| j                  |      }n|j                  |       }| j                  ||      S r_   )ra  execute_returningr  handle_resultr  s      rc   r  z_WriteQuery._execute=
  s<    ??++H5F%%d+F!!(F33re   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S r_   r  r  s      rc   r  z_WriteQuery.execute_returningD
  r  re   c                 @    | j                   r|S |j                  |      S r_   )r  rows_affectedr  s      rc   r  z_WriteQuery.handle_resultJ
  s!    M%%f--re   c                 ^    | j                   j                  |j                  | j                   <   y r_   )r&  rf   r  r6  s     rc   _set_table_aliasz_WriteQuery._set_table_aliasO
  s     (,

(;(;$**%re   c                 P    t         t        |   |       | j                  |       |S r_   )r  r  r#  r  ra   r7  r  s     rc   r#  z_WriteQuery.__sql__R
  s'    k4(- 	c"
re   r_   r  )rf   rg   rh   r  r  ra  rL  r  r  r  r  r  r  r#  r  r  s   @rc   r  r  '
  sH    4. 
YY; ;4$.
< re   r  c                   N     e Zd Zd fd	Zej
                  d        Z fdZ xZS )r  c                 J    t        t        | 
  |fi | || _        d | _        y r_   )r  r  r  r  _from)ra   r&  r   r  r  s       rc   r  zUpdate.__init__\
  s%    fd$U5f5
re   c                     || _         y r_   )r  r  s     rc   r  zUpdate.from_a
  s	    
re   c           
         t         t        |   |       |j                  d      5  |j	                  d       g }t        | j                  j                         |j                        D ]  \  }}t        |t              s0t        |t              r|j                  |      }n?t        |d      }n1t        |t              r!t        |t              r|j                  |      }t        |t              st!        |      }|j#                  t%        |t'        d      |f              |j)                  | j*                        j	                  d      j)                  t-        |             | j.                  rN|j1                  d	      5  |j	                  d
      j)                  t-        | j.                               d d d        | j2                  rC|j5                         5  |j	                  d      j)                  | j2                         d d d        | j7                  |       | j9                  |      cd d d        S # 1 sw Y   xY w# 1 sw Y   @xY w# 1 sw Y   y xY w)NTr0  zUPDATE r  Fr  r   z SET r'  r  r  )r  r  r#  rC  r  sortedr  r  r  rv   ra  r2   to_valuerY   rA   r6   r  r  rj  rQ   r'  r&  r(  r  rA  r  r?  r-  r  )ra   r7  r  krV  r  s        rc   r#  zUpdate.__sql__e
  s   fd#C(t, "	-KK	"Kt||1139L9LM ?1!!T*!!U+JJqM!!E25)jO.L 

1A!!U+%a(A""8QC!,<#=>?" c$**oggc-,-zz%%%%8 IKK)--mDJJ.GHI {{%%' <KK	*..t{{;<  %'',E"	- "	-6I I< <?"	- "	-s<   EI4H:8$I+I)I:I	?II	IIr_   )	rf   rg   rh   r  ra  rL  r  r#  r  r  s   @rc   r  r  [
  s*    
 
YY %- %-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y)Insert.DefaultValuesExceptionNr  r`   re   rc   DefaultValuesExceptionr  
  r  re   r  c                 t    t        t        | 
  |fi | || _        || _        || _        d | _        d| _        y re  )r  r	  r  _insertr  _on_conflict_query_type_as_rowcount)ra   r&  r  r  r  r  r  s         rc   r  zInsert.__init__
  s=    fd$U5f5'!re   c                     t        d      )Nz*INSERT queries cannot have a WHERE clause.r\  r  s     rc   r)  zInsert.where
  s    !"NOOre   c                     || _         y r_   )r  )ra   r  s     rc   as_rowcountzInsert.as_rowcount
  s
    (re   c                 8    |rt        d      | _        y d | _        y )NIGNOREr  r  )ra   ignores     rc   on_conflict_ignorezInsert.on_conflict_ignore
  s    4:Jx0re   c                 8    |rt        d      | _        y d | _        y Nr  r  )ra   r   s     rc   on_conflict_replacezInsert.on_conflict_replace
  s    5<Jy1$re   c                 <    |s|rt        |i || _        y d | _        y r_   r  r  s      rc   r  zInsert.on_conflict
  s#    =AVZ88"& 	re   c                 v    | j                   s| j                  d      | j                  | j                   f|      S )NError: no data to insert.)r  r  _generate_insertr6  s     rc   _simple_insertzInsert._simple_insert
  s4    ||--.IJJ$$dll_c::re   c                     i S r_   r`   r  s    rc   get_default_datazInsert.get_default_data
  s    	re   c                     | j                   j                  rQ| j                   j                  D cg c]1  }|| j                   j                  k7  rt        | j                   |      3 c}S y c c}w r_   )r&  r  r  r   )ra   cols     rc   get_default_columnszInsert.get_default_columns
  sZ    ::8<

8K8K 7djj555 DJJ, 7 7 7s   6A)c                 8   t        |      }| j                  }| j                         }|s	 t        |      }t        |t              s| j                         }|t        d      g }|D ]9  }t        |t              rt        | j                  |      }|j                  |       ; t        |      }	t        |      |	z
  D ]  }
|j                  |
        t        |fd      }t!        j"                  t        |f      |      }ng }t               }|D ]M  }t        |t              rt        | j                  |      }n|}|j                  |       |j%                  |       O |}t        |fd      D ]  }
|
|vs|j                  |
        t               }t               }i }|D ]  }||j&                  g}t        |t(              rr|j&                  |j*                  k7  r|j                  |j*                         |j,                  r|j%                  |       t        |t.              r|j%                  |       |||<    j1                  t3        |            j5                  d       |D cg c]"  }|t        |t(              r|j6                  nd f$ }}g }|D ]  }g }t        |t              }t9        |      D ]j  \  }\  }}	 |r||   D ]	  }	 ||   } n t:        ||   }t        |t@              rt        |tB              r||v rtE        ||d	      }|j                  |       l |j                  t3        |              |s| j                  d
      jG                  d      5  j1                  tI        |            cd d d        S # t        $ r | j                  d      w xY wc c}w # t:        $ r Y w xY w# t:        t<        f$ r? ||v r||   }t?        |      r' |       }n||v rd }nt        d|j&                  z        Y )w xY w# 1 sw Y   y xY w)NzError: no rows to insert.z!Bulk insert must specify columns.c                 &    | j                        S r_   r  r  r7  s    rc   rx   z)Insert._generate_insert.<locals>.<lambda>
      8H8H8M re   r  c                 &    | j                        S r_   r  r  s    rc   rx   z)Insert._generate_insert.<locals>.<lambda>
  r  re   z VALUES zMissing value for %s.F)r-  r  r  Tr0  )%ru  r  r  nextStopIterationr  rv   r   r  r  r1  r   r&  r  rC  r  	itertoolschainr  r  r2   column_namenullr6   r'  r)  r  r  	enumerater   r\  	callable_ra  rA   rY   rC  r(  )ra   r  r7  	rows_iterr  defaultsr*  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    L	-- ((* O9o c7+224?$%HII ! )F!&*5!(V!<LL() !Z
MJ6 &CLL%& !,MN!cVi@IM5D! %fj1!(V!<J!'J$$Z0$% $Gh,MN (d?NN3'( E	5 		,Fv{{+G&%(;;&"4"44NN6#5#56;;$((0fo6MM&)$+M&!		, 	 )*22:> "# 
65(AV__tL# # 
 #	8CF g.G*34F*G #&&FIP '4F&; +F(&)&k"'	+ #+N!!f "#t,C1G1791DyGCc"=#@ .v67G#	8J --.IJJt, 	677=45	6 	6G ! O112MNNOl#& $,1T1 !*- P)&v.$S>"%%C#33"()@6;;)NOOP(	6 	6sT   N .'N+
N?N0N?)PN(0	N<	9N?;N<	<N??A
PPPc                     |j                  t        | j                              j                  d      j                  | j                        S r   )r'  r)  r  r  r  r6  s     rc   _query_insertzInsert._query_insert/  s5    %dmm45T\\"	$re   c                 r    | j                   s|j                  d      S | j                   j                  |      S NzDEFAULT VALUES)rH  r  default_values_insertr6  s     rc   _default_valueszInsert._default_values5  s.    ~~;;/00~~33C88re   c                    t         t        |   |       |j                         5  d }| j                  | j                  j                  ||       }|j                  |xs t        d            j                  d      j                  | j                        j                  d       t        | j                  t              r4| j                  s(	 | j                  |       t        j"                  | _        nxt        | j                  t&        t        f      r'| j)                  |       t        j*                  | _        n1| j-                  | j                  |       t        j.                  | _        | j                  >| j                  j1                  ||       }| |j                  d      j                  |       | j3                  |      cd d d        S # | j                  $ r | j!                  |       Y w xY w# 1 sw Y   y xY w)NINSERTz INTO r   )r  r	  r#  rC  r  r  r'  rQ   r  r&  rv   r  r   r  r  r  r  SIMPLEr  r9  r   QUERYr  MULTIr  r  )ra   r7  stmtr   r  s       rc   r#  zInsert.__sql__:  s   fd#C( 	-D  ,((??TJc$'#h-(ghc$**ogcl$,,0.'', $*== DLL;*<=""3'#)<< %%dllC8#)<<   ,**>>sDI%KK$((0'',;	- 	- 22 .((-.	- 	-s1   B&G6GC(G6 G3/G62G33G66G?c                     | j                   >|j                  r2| j                  j                  r| j                  j                  f| _         	 t        t
        |   |      S # | j                  $ r Y y w xY wr_   )ra  returning_clauser&  r  r  r	  r  r  )ra   r  r  s     rc   r  zInsert._execute[  se    ??"x'@'@zz&&#zz668DO	/99** 		s   A   A21A2c                     | j                   r|S | j                  r|j                  |      S |j                  || j                        S r_   )r  r  r  last_insert_idr  r  s      rc   r  zInsert.handle_resultd  sC    M))&11&&vt/?/?@@re   NNNrj  )rf   rg   rh   r  r  r	  	Exceptionr  r  r)  ra  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"P 
YY) ) 
YYE E 
YYG G 
YY( (;
7
p6d$9
-BAre   r	  c                        e Zd Z fdZ xZS )r  c                    t         t        |   |       |j                  d      5  |j	                  d      j                  | j                         | j                  C|j                         5  |j	                  d      j                  | j                         d d d        | j                  |       | j                  |      cd d d        S # 1 sw Y   4xY w# 1 sw Y   y xY w)NTr0  DELETE FROM r  )r  r  r#  rC  r  r'  r&  r  r?  r-  r  r  s     rc   r#  zDelete.__sql__m  s    fd#C(t, 	-KK'++DJJ7{{&%%' <KK	*..t{{;<   %'',	- 	-< <	- 	-s$   AC.+C)CC	CC!)rf   rg   rh   r#  r  r  s   @rc   r  r  l  s    
- 
-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	y)
r9   Nc                     || _         t        |t              st        |      n|| _        || _        || _        || _        || _        || _	        y r_   )
r  rv   rS   rb  _table_expressionsr  _unique_safe_using)ra   r  r&  r  uniquesafer)  usings           rc   r  zIndex.__init__{  sC    
+5eU+CfUm'
re   c                     || _         y r_   )r  )ra   r  s     rc   r  z
Index.safe  s	    
re   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y r_   r  r  s     rc   r)  zIndex.where  r  re   c                     || _         y r_   )r  )ra   r  s     rc   r  zIndex.using  s	    re   c                    | j                   rdnd}|j                  d      5  |j                  |       | j                  r|j                  d       |j                  j
                  rzt        | j                  t              r`| j                  j                  rJt        | j                  j                  | j                        }t        | j                  j                        }n!t        | j                        }| j                  }|j                  |       | j                  4|j                  j                  r|j                  d| j                  z         |j                  d      j                  |      j                  d       | j                  4|j                  j                  s|j                  d	| j                  z         |j                  t!        | j"                  D cg c]  }t        |t$              rt'        |      n|! c}             | j(                  *|j                  d
      j                  | j(                         d d d        |S c c}w # 1 sw Y   |S xY w)NzCREATE UNIQUE INDEX zCREATE INDEX Tr0  IF NOT EXISTS z	 USING %sr  r   z	USING %s r  )r  rC  r  r  r  index_schema_prefixrv   r  rS   r  rb  r  rf   r'  r  index_using_precedes_tabler)  r  r1  rQ   r  )ra   r7  	statement
index_name
table_namer}  s         rc   r#  zIndex.__sql__  s   .2ll*	t, !	8KK	"zz,- yy,,$++u-$++2E2E#DKK$7$7D
#DKK$8$89
#DJJ/
![[
GGJ{{&yy33K$++56gfoc*ogcl{{&yy33K$++56GG$ --&/ (j9D	tC&/ 0 1 {{&I&**4;;7C!	8F 
&/;!	8F 
s   F>I!$IAIII)FFNNrj  r_   )
rf   rg   rh   r  ra  rL  r  r)  r  r#  r`   re   rc   r9   r9   z  sZ    DI#' 
YY  
YY9 9
 
YY %re   r9   c                   *     e Zd Z	 	 d fd	Zd Z xZS )rB   c           	          || _         || j                  ||      }|1|D ],  }t        |t              st	        |d      s!|j
                  }. t        t        | #  ||j                  j                  |||||       y )N
index_type)r  r&  r  r  r  r)  r  )r  _generate_name_from_fieldsrv   r2   r  r*  r  rB   r  r%  r&  )
ra   r6  fieldsr  r  r)  r  r  fieldr  s
            rc   r  zModelIndex.__init__  s    <225&AD= -eU+|0L!,,E- 	j$(++## 	) 	re   c                 0   g }|D ]  }t        |t              r#|j                  |j                         d          6t        |t              r t        |t
              s|j                         }t        |t
              sw|j                  |j                          |st        d      t        j                  dddj                  |            }|j                  }|j                  r|j                  n|j                  }t!        dj                  ||f            S )Nr   zJUnable to generate a name for the index, please explicitly specify a name.[^\w]+r(  rf  )rv   r1  r  r   ra  r2   rh  r  r  rerf  rS  r%  legacy_table_namesr  r'  _truncate_constraint_name)ra   r6  r,  r  r-  clean_field_namesrH  prefixs           rc   r+  z%ModelIndex._generate_name_from_fields  s     	4E%,U[[]1-.eT*:eU3K!LLNEeU+LL!2!23	4  : ; ; FF9b#((5/B{{"554??(6;L2M)NOOre   )FTNNN)rf   rg   rh   r  r+  r  r  s   @rc   rB   rB     s    EI"&$Pre   rB   c                     t        |       |kD  rBt        j                  | j                  d            j	                         }| d |dz
   d|d d } | S )Nutf-8rC  rf     )r   hashlibmd5encode	hexdigest)r  maxlen	name_hashs      rc   r2  r2    sQ    
:KK
 1 1' :;EEG	 *=VaZ 99Ra=I
re   c                        e Zd Z fdZ xZS )PeeweeExceptionc                 p    |r#t        |d   t              r|d   |dd  c| _        }t        t        |   |  y r  )rv   r  origr  r?  r  )ra   r  r  s     rc   r  zPeeweeException.__init__  s9    JtAw	2"1gtABxODItot-t4re   rf   rg   rh   r  r  r  s   @rc   r?  r?    s    5 5re   r?  c                       e Zd Zy)r8   Nr  r`   re   rc   r8   r8     r  re   r8   c                       e Zd Zy)r%   Nr  r`   re   rc   r%   r%     r  re   r%   c                       e Zd Zy)r'   Nr  r`   re   rc   r'   r'     r  re   r'   c                       e Zd Zy)r;   Nr  r`   re   rc   r;   r;     r  re   r;   c                       e Zd Zy)r<   Nr  r`   re   rc   r<   r<     r  re   r<   c                       e Zd Zy)r=   Nr  r`   re   rc   r=   r=     r  re   r=   c                       e Zd Zy)rD   Nr  r`   re   rc   rD   rD     r  re   rD   c                       e Zd Zy)rF   Nr  r`   re   rc   rF   rF     r  re   rF   c                       e Zd Zy)rK   Nr  r`   re   rc   rK   rK     r  re   rK   c                   "    e Zd ZdZd Zd Zd Zy)ExceptionWrapper
exceptionsc                     || _         y r_   rN  )ra   rO  s     rc   r  zExceptionWrapper.__init__  s	    $re   c                      y r_   r`   r  s    rc   r  zExceptionWrapper.__enter__      re   c                    |y t         B|j                  | j                  vr*t        |t         j                        r|j
                  d   }nGt        A|j                  | j                  vr)t        |t        j                        r|j
                  d   }|j                  | j                  v r:| j                  |j                     }|j                  }t        | ||g| |       y y r  )		pg_errorsrf   rO  rY  Error	__bases__
pg3_errorsr  r   )ra   r  	exc_value	tracebacknew_typeexc_argss         rc   r  zExceptionWrapper.__exit__  s     X%6%6doo%M(IOO4))!,H#DOO3(J$4$45))!,H/x'8'89H ~~HHhy<8<iH 0re   N)rf   rg   rh   r  r  r  r  r`   re   rc   rM  rM    s    I%Ire   rM  )ConstraintErrorr%   r'   r;   r<   r=   rD   rF   rK   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  r'  r  r  r&  ColumnMetadata)r  	data_typer  r  r&  ru  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                 L    t        t        | 
  di | | j                          y r	  )r  rh  r  reset)ra   r  r  s     rc   r  z_ConnectionState.__init__4  s    .88

re   c                 <    d| _         d | _        g | _        g | _        y r>  )closedconnr7  transactionsr  s    rc   rj  z_ConnectionState.reset8  s    	re   c                 <    || _         d| _        g | _        g | _        y re  )rm  rl  r7  rn  ra   rm  s     rc   set_connectionz_ConnectionState.set_connection>  s    	re   )rf   rg   rh   r  rj  rq  r  r  s   @rc   rh  rh  3  s    re   rh  c                       e Zd Zy)_ConnectionLocalNr  r`   re   rc   rs  rs  E  r  re   rs  c                       e Zd ZdZd Zd Zy)	_NoopLockr`   c                     | S r_   r`   r  s    rc   r  z_NoopLock.__enter__H  s    re   c                      y r_   r`   r  s       rc   r  z_NoopLock.__exit__I  rR  re   N)rf   rg   rh   r  r  r  r`   re   rc   ru  ru  F  s    I$7re   ru  c                   (    e Zd ZdZd Zd Zd Zd Zy)r  rK  c                     || _         y r_   ry  ra   rK  s     rc   r  zConnectionContext.__init__N  s    bDGre   c                 n    | j                   j                         r| j                   j                          y y r_   )rK  	is_closedconnectr  s    rc   r  zConnectionContext.__enter__O  s%    77GGOO re   c                 8    | j                   j                          y r_   )rK  closer  s       rc   r  zConnectionContext.__exit__R  s    477==?re   c                 2     t               fd       }|S )Nc                  j    t        j                        5   | i |cd d d        S # 1 sw Y   y xY wr_   )r  rK  r  s     rc   r  z)ConnectionContext.__call__.<locals>.innerT  s1    "477+ +4*6*+ + +   )2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  s    I( C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@        ZQy)Fr$   r.  r  NFTc                 
   t        t        | j                        | _        t        t        | j
                        | _        |r| j                  j                  |       |r| j                  j                  |       || _        || _	        |r)t               | _        t        j                         | _        nt               | _        t!               | _        |rt#        d       |t#        d       i | _         | j&                  |fi | y )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_safers  _state	threadingLock_lockrh  ru  r   connect_paramsinit)	ra   r  r  autorollbackr  r  
autocommitr  r  s	            rc   r  zDatabase.__init__p  s     'ud.>.>?%b$//:$$[1##J/&&*,DK")DJ*,DK"DJ I J
 ! < = !		(%f%re   c                     | j                         s| j                          || _        | j                  j	                  |       t        |       | _        y r_   )r}  r  r  r  r   rY  deferred)ra   r  r  s      rc   r  zDatabase.init  s>    ~~JJL ""6* N*re   c                     | j                         r| j                          | j                         }| j                  j                  j                  |       |j                          | S r_   )r}  r~  r  r  r7  r  r  r6  s     rc   r  zDatabase.__enter__  sD    >>LLNkkms#re   c                    | j                   j                  j                         }	 |j                  |||       | j                   j                  s| j	                          y y # | j                   j                  s| j	                          w w xY wr_   )r  r7  r  r  r  )ra   r  r  r  r7  s        rc   r  zDatabase.__exit__  s`    kkoo!!#	LL7F3;;??

 #4;;??

 #s   A! !)B
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                 6   | j                   5  | j                  rt        d      | j                  j                  s|r
	 d d d        yt        d      | j                  j                          t        5  | j                  j                  | j                                | j                  %| j                  | j                  j                         | j                  | j                  j                         d d d        d d d        y# 1 sw Y   xY w# 1 sw Y   yxY w)N@Error, database must be initialized before opening a connection.FzConnection already opened.T)r  r  r<   r  rl  rF   rj  __exception_wrapper__rq  r  server_version_set_server_versionrm  _initialize_connection)ra   reuse_if_opens     rc   r~  zDatabase.connect  s    ZZ 	>}}$ &D E E;;%%  	> 	> ''CDDKK& >**4==?;&&.,,T[[-=-=>++DKK,<,<=	>	> > >	> s*   1D+D2B D2DD	DDc                      y r_   r`   rp  s     rc   r  zDatabase._initialize_connection      re   c                     d| _         y r  )r  rp  s     rc   r  zDatabase._set_server_version  s
    re   c                    | j                   5  | j                  rt        d      | j                         rt	        d      | j
                  j                   }	 |r4t        5  | j                  | j
                  j                         d d d        | j
                  j                          |cd d d        S # 1 sw Y   .xY w# | j
                  j                          w xY w# 1 sw Y   y xY w)Nr  z7Attempting to close database while transaction is open.)r  r  r<   in_transactionrF   r  rl  r  _closerm  rj  )ra   is_opens     rc   r  zDatabase.close  s    ZZ 	}}$ &D E E""$& (> ? ?++,,,G$. 6DKK$4$456 !!#	 	6 6 !!#	 	s<   A
CB? &B3B?C3B<	8B??CCC'c                 $    |j                          y r_   )r  rp  s     rc   r  zDatabase._close  s    

re   c                 .    | j                   j                  S r_   r  rl  r  s    rc   r}  zDatabase.is_closed  s    {{!!!re   c                 0    | j                   j                   S r_   r  r  s    rc   is_connection_usablezDatabase.is_connection_usable  s    ;;%%%%re   c                 n    | j                         r| j                          | j                  j                  S r_   )r}  r~  r  rm  r  s    rc   
connectionzDatabase.connection  s%    >>LLN{{re   c                     |t        d       | j                         r(| j                  r| j                          nt	        d      | j
                  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  rm  r  )ra   commitnamed_cursors      rc   r  zDatabase.cursor  sR    IJ>>$%MNN{{&&((re   c                     |t        d       t        j                  ||f       t        5  | j	                         }|j                  ||xs d       d d d        |S # 1 sw Y   S xY wNr  r`   )r   loggerdebugr  r  r  )ra   r'  rL  r  r  s        rc   execute_sqlzDatabase.execute_sql  s_    IJc6]#" 	.[[]FNN3"-	. 	. s   'AA&c                     |t        d        | j                  di |}|j                  |      j                         \  }}| j	                  ||      S r  )r   rJ  r'  r9  r  )ra   r9  r  context_optionsr7  r'  rL  s          rc   r  zDatabase.execute  sS    IJ"d""5_5ggen**,VV,,re   c                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  dS )N)r  r  r2  rW  rh  r  r  r~  r#  r$  r,  r  )r  r  r2  rW  rh  r  r  r~  r#  r$  r,  r  r  s    rc   get_context_optionszDatabase.get_context_options  sp    ,,**ZZZZ+/+K+K"&"9"9#33//#'#;#;*.*I*I"11
 	
re   c                 l    | j                         }|r|j                  |        | j                  di |S r	  )r  r   context_class)ra   r  r  s      rc   rJ  zDatabase.get_sql_context  s5    **,NN?+!t!!,G,,re   c                     t         r_   r\  ra   r  r9  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                   rwt        d      }t        |j                   D cg c]  }t        |t              rt        |      n|! c}      }|j                  Tt        |t        d      |j                  g      }n2t        d      }|j                  }t        |t              rt        |      }g }|j                  rc|j                  D ]T  }t        t        d      t        |      fd      }t        t        |      t        d      |f      }	|j                  |	       V |j                  r|j                  j                         D ]  \  }
}t        |t              sVt        |
t              rt        |j                   |
      }
t        |
t"              r|
j%                  |      }nt'        |d	      }nt)        |      }|j                  t        t        |
      t        d      |f              ||t        d
      t+        |      g}|j,                  r/|j/                  t        d      t)        |j,                        f       t        |      S c c}w )NON CONFLICTrB  zON CONFLICT ON CONSTRAINTr1   rR  r  r   Fr  zDO UPDATE SET)r  rQ   r)  rv   r1  rb  r  rj  r  r  rc  r  r  r  ra  r   r&  r2   r  rY   rM   r(  r  r5  )ra   r  r9  r
  r  targetupdatesr  excluded
expressionr  rV  rc  s                rc   _build_on_conflict_updatez"Database._build_on_conflict_update   s	   ''}%D%&77'9  *#z:sC'9 :F **6!63w<#.#>#>#@ A 23D 55F&*-  %// +#S_mF6K$L),.%}V'<c#h'/'1 2
z*+ #++113 J1!!T* "!Z0#EKK3!!U+JJqM!!E2&q)Axq)93s8Q(GHIJ vs?3]75KLLL#g,{7I7I(JKLQ'9s   $I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                 $    |j                  d      S r  r  r6  s     rc   r  zDatabase.default_values_insertS  s    {{+,,re   c                 >    | j                         j                         S r_   )r  r  r  s    rc   session_startzDatabase.session_startV  s    !++--re   c                     	 | j                         }|j                  | j                                y# t        $ r Y yw xY wNFbeginT)pop_transactionr\  r  r  ra   txns     rc   session_commitzDatabase.session_commitY  sE    	&&(C 	

,,.
/  		   3 	??c                     	 | j                         }|j                  | j                                y# t        $ r Y yw xY wr  )r  r\  rollbackr  r  s     rc   session_rollbackzDatabase.session_rollbacka  sE    	&&(C 	4..01  		r  c                 @    t        | j                  j                        S r_   )rY  r  rn  r  s    rc   r  zDatabase.in_transactioni  s    DKK,,--re   c                 N    | j                   j                  j                  |       y r_   )r  rn  r  )ra   r  s     rc   push_transactionzDatabase.push_transactionl  s      ''4re   c                 J    | j                   j                  j                         S r_   )r  rn  r  r  s    rc   r  zDatabase.pop_transactiono  s    {{''++--re   c                 @    t        | j                  j                        S r_   )r   r  rn  r  s    rc   transaction_depthzDatabase.transaction_depthr  s    4;;++,,re   c                 b    | j                   j                  r| j                   j                  d   S y Nrr  )r  rn  r  s    rc   top_transactionzDatabase.top_transactionu  s)    ;;##;;++B// $re   c                      t        | g|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|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                     | j                         r| j                          t        5  | j                         j	                  d       d d d        y # 1 sw Y   y xY w)NBEGINr}  r~  r  r  r  r  s    rc   r  zDatabase.begin  sA    >>LLN" 	+KKM!!'*	+ 	+ 	+s    AAc                 x    t         5  | j                         j                  d       d d d        y # 1 sw Y   y xY w)NROLLBACKr  r  r  r  s    rc   r  zDatabase.rollback  s.    " 	.KKM!!*-	. 	. 	.    09c                 x    t         5  | j                         j                  d       d d d        y # 1 sw Y   y xY w)NCOMMITr  r  s    rc   r  zDatabase.commit  s.    " 	,KKM!!(+	, 	, 	,r  c              #      K   t        ||      D ]'  }| j                         5  |D ]  }|  	 d d d        ) y # 1 sw Y   4xY wwr_   )r    r  )ra   rw  rx  rz  r  s        rc   batch_commitzDatabase.batch_commit  sQ     R^ 	E   CI 	 s    A:AA	Ac                     t        |      r.|}|j                  j                  }|j                  j                  }|| j	                  |      v S )N)r  )r$  r%  r'  r  
get_tables)ra   r'  r  r6  s       rc   table_existszDatabase.table_exists  sC    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                 H    t        |      D ]  } |j                  di |  y r	  )sort_modelscreate_table)ra   modelsoptionsr6  s       rc   create_tableszDatabase.create_tables  s)     ( 	*EE))	*re   c                 Z    t        t        |            D ]  } |j                  di |  y r	  )r  r
  
drop_table)ra   r  r  r6  s       rc   drop_tableszDatabase.drop_tables  s.    k&1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\  r  s     rc   from_timestampzDatabase.from_timestamp  r^  re   c                 *    t         j                         S r_   )r5   randomr  s    rc   r  zDatabase.random  s    yy{re   c                 :    |D ]  }|j                  | ||        y )N)	bind_refsbind_backrefs)r  )ra   r  r!  r"  r6  s        rc   r  zDatabase.bind  s%     	OEJJtyJN	Ore   c                     t        || ||      S r_   _BoundModelsContext)ra   r  r!  r"  s       rc   r  zDatabase.bind_ctx  s    "64MJJre   c                     |j                  t               j                  t        d            j	                  t        d                  S )N0r'  rP   r  rQ   r)  r6  s     rc   get_noop_selectzDatabase.get_noop_select  s1    wwvx''C177CABBre   c                 ~     t         d      s% G  fdd      }t        dt        fd|i       _         j                  S )Nr  c                       e Zd ZW  Zy)Database.Model.<locals>.MetaNr  r  s   rc   r  r,    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  r2  rW  r  ri  rh  r~  r#  r$  r,  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  rJ  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  r  r  r  r  r  r)  r  rA   r`   re   rc   r$   r$   [  s   MKJEEN #8J!&INOIN@E?C!$&L+'"$ ""& 
)-
 -""+Z -..5.-0.3 +.,<""""""*'""""OKC  re   r$   c                 0      fd} fd}t        ||      S )Nc                 &    | j                        S r_   pragmar  s    rc   r{  z__pragma__.<locals>.__get__  s    {{4  re   c                 (    | j                  |      S r_   r4  )ra   r~   r  s     rc   __set__z__pragma__.<locals>.__set__  s    {{4''re   )r  )r  r{  r7  s   `  rc   
__pragma__r8    s    !(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dI 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&jN                  d        Z&d Z(d  Z)d! Z*d" Z+dJd#Z,dJd$Z-dKd%Z.dKd&Z/	 	 dLd'Z0dLd(Z1dJd)Z2dJd*Z3dKd+Z4dKd,Z5d- Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z<d4 Z=d5 Z>d6 Z?dKd7Z@d8 ZAdKd9ZBd: ZCd; ZDdKd<ZEdKd=ZFdKd>ZGdKd?ZHdKd@ZIdKdAZJdB ZKdC ZLdD ZMdE ZNdF ZOdG ZPdH ZQ xZRS )MrR   )r  r  r!  r)  r"  r/  GLOBr  )r  r  Trr  Fc                 X   |j                  dd      | _        t        t        |   |g|i | i | _        i | _        i | _        i | _        g | _	        t               | _        i | _        | j                  t        dd       | j                  t        dd       | j                   dk\  | _        y )Npragmasr`   r  rj   
date_trunc)r      r   )r  _pragmasr  rR   r  _aggregates_collations
_functions_window_functions_table_functionsrC  _extensions	_attachedregister_functionr   r   r  r  )ra   r  r  r  r  s       rc   r  zSqliteDatabase.__init__  s    

9b1nd,XGGG!# "50+qA1<C"11Z?re   Nc                     ||| _         t        | j                   t              r(t        | j                   j	                               | _         |%t
        dk  rt        j                  d       || _        || _	        t        t        | 2  |fi | y )N)r   #   r   z.RETURNING clause requires Sqlite 3.35 or newer)r?  rv   r  r\  r  __sqlite_version__r   r   r  _timeoutr  rR   r  )ra   r  r<  timeoutr  r  r  s         rc   r  zSqliteDatabase.init  su    #DMdmmT* !4!4!67DM'!J.NO$4D!nd(<V<re   c                      y r_   r`   rp  s     rc   r  z"SqliteDatabase._set_server_version  r  re   c                     t         t        d      t        j                  | j                  f| j                  d d| j
                  }	 | j                  |       |S #  |j                           xY w)NzSQLite driver not installed!)rL  isolation_level)sqlite3r8   r~  r  rK  r  _add_conn_hooksr  rp  s     rc   r  zSqliteDatabase._connect  ss    ?&'EFFt}} Ldmm/3L7;7J7JL	  & 	JJLs   
A A0c                    | j                   r| j                  |       | j                  r| j                  |       | j	                  |       | j                  |       | j                  |       | j                  dk\  r| j                  |       | j                  r"| j                  D ]  }|j                  |        | j                  r| j                  |       y y )N)r      r   )rF  _attach_databasesr?  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsrD  registerrE  _load_extensions)ra   rm  table_functions      rc   rQ  zSqliteDatabase._add_conn_hooks  s    >>""4(==d#d#d#T"*,''-  "&"7"7 .''-.!!$' re   c                     |j                         }| j                  D ]  \  }}|j                  d|d|d        |j                          y )NzPRAGMA z = ;)r  r?  r  r  )ra   rm  r  r5  r~   s        rc   rU  zSqliteDatabase._set_pragmas-  s@    !]] 	@MFENN>?	@re   c                     |j                         }| j                  j                         D ]  \  }}|j                  d|d|d        |j	                          y )NATTACH DATABASE "" AS "r  )r  rF  r  r  r  )ra   rm  r  r  rK  s        rc   rT  z SqliteDatabase._attach_databases3  sI    ,,. 	HHD"NNRFG	Hre   c                 .   |d|d|}d|z  }|t         urK|d|xs dz  z  }|rJt        | j                  xs d      }|||<   t        |j	                               | _        n|rt        d      | j                  |      j                         }|r|d   S y )Nr  ".z	PRAGMA %sz = %sr   r`   z/Cannot specify a permanent pragma without value)SENTINELr  r?  r\  r  r  r  fetchone)ra   r  r~   	permanentr  r'  r<  r*  s           rc   r5  zSqliteDatabase.pragma9  s    %s+CC 7ejq))Ct}}23$ $W]]_ 5N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_   )rK  r  s    rc   rL  zSqliteDatabase.timeoutV  s    }}re   c                     | j                   |k(  ry || _         | j                         s| j                  d|dz  z         y y )NzPRAGMA busy_timeout=%d;i  )rK  r}  r  )ra   secondss     rc   rL  zSqliteDatabase.timeoutZ  sA    ==G#~~ 6'D.IJ  re   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y r_   )r@  r  create_aggregatera   rm  r  klass
num_paramss        rc   rV  zSqliteDatabase._load_aggregatese  s<    )-)9)9)?)?)A 	;%D%5*!!$
E:	;re   c                 l    | j                   j                         D ]  \  }}|j                  ||        y r_   )rA  r  create_collation)ra   rm  r  r5   s       rc   rW  zSqliteDatabase._load_collationsi  s4    ((..0 	,HD"!!$+	,re   c                     | j                   j                         D ]&  \  }\  }}}|rd|ini } |j                  |||fi | ( y )Ndeterministic)rB  r  create_function)ra   rm  r  r5   n_paramsr~  r  s          rc   rX  zSqliteDatabase._load_functionsm  sQ    37??3H3H3J 	?/D/2x9Fo}5BF D  x>v>	?re   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y r_   )rC  r  create_window_functionrx  s        rc   rY  z%SqliteDatabase._load_window_functionsr  s>    )-)?)?)E)E)G 	A%D%5*''j%@	Are   c                     ||f| j                   |xs |j                  j                         <   | j                         s | j	                  | j                                y y r_   )r@  rf   rh  r}  rV  r  ra   ry  r  rz  s       rc   register_aggregatez!SqliteDatabase.register_aggregatev  sM    <A:;N7!5!5!78~~!!$//"34  re   c                       fd}|S )Nc                 .    j                  |        | S r_   )r  ry  r  rz  ra   s    rc   r'  z+SqliteDatabase.aggregate.<locals>.decorator|  s    ##E4<Lre   r`   ra   r  rz  r'  s   ``` rc   	aggregatezSqliteDatabase.aggregate{      	 re   c                     xs |j                   fd}||_        || j                  <   | j                         s | j	                  | j                                y y )Nc                  >    | t        dz        fz   }t        |      S )Nz
collate %s)rQ   rj  )r  r  r  s     rc   
_collationz5SqliteDatabase.register_collation.<locals>._collation  s%    #lT&9":!<<KK((re   )rf   rS  rA  r}  rW  r  )ra   r5   r  r  s     ` rc   register_collationz!SqliteDatabase.register_collation  sS    "r{{	) "!#~~!!$//"34  re   c                       fd}|S )Nc                 ,    j                  |        | S r_   )r  )r5   r  ra   s    rc   r'  z+SqliteDatabase.collation.<locals>.decorator  s    ##B-Ire   r`   ra   r  r'  s   `` rc   rS  zSqliteDatabase.collation  s    	 re   c                     |||f| j                   |xs |j                  <   | j                         s | j                  | j	                                y y r_   )rB  rf   r}  rX  r  )ra   r5   r  rz  r~  s        rc   rG  z SqliteDatabase.register_function  sD    02J/N+,~~  !23  re   c                       fd}|S )Nc                 0    j                  |        | S r_   )rG  )r5   r~  r  rz  ra   s    rc   r'  z&SqliteDatabase.func.<locals>.decorator  s    ""2tZGIre   r`   )ra   r  rz  r~  r'  s   ```` rc   r2  zSqliteDatabase.func  s    	 re   c                     |xs |j                   j                         }||f| j                  |<   | j                         s | j	                  | j                                y y r_   )rf   rh  rC  r}  rY  r  r  s       rc   register_window_functionz'SqliteDatabase.register_window_function  sR    -u~~++-(-z':t$~~''(9:  re   c                       fd}|S )Nc                 .    j                  |        | S r_   )r  r  s    rc   r'  z1SqliteDatabase.window_function.<locals>.decorator  s    ))%zBLre   r`   r  s   ``` rc   window_functionzSqliteDatabase.window_function  r  re   c                     |||_         | j                  j                  |       | j                         s |j	                  | j                                y y r_   )r  rD  r  r}  rZ  r  )ra   ry  r  s      rc   register_table_functionz&SqliteDatabase.register_table_function  sE    EJ$$U+~~NN4??,-  re   c                       fd}|S )Nc                 ,    j                  |        | S r_   )r  )ry  r  ra   s    rc   r'  z0SqliteDatabase.table_function.<locals>.decorator  s    ((5Lre   r`   r  s   `` rc   r\  zSqliteDatabase.table_function  s    	 re   c                     | j                   |= y r_   )r@  r  s     rc   unregister_aggregatez#SqliteDatabase.unregister_aggregate      T"re   c                     | j                   |= y r_   )rA  r  s     rc   unregister_collationz#SqliteDatabase.unregister_collation  r  re   c                     | j                   |= y r_   )rB  r  s     rc   unregister_functionz"SqliteDatabase.unregister_function  s    OOD!re   c                     | j                   |= y r_   )rC  r  s     rc   unregister_window_functionz)SqliteDatabase.unregister_window_function  s    ""4(re   c                     t        | j                        D ]  \  }}|j                  |k(  s n y| j                  j                  |       yrg  )r  rD  r  r  )ra   r  r  ry  s       rc   unregister_table_functionz(SqliteDatabase.unregister_table_function  sK    #D$9$9: 	JCzzT!	 !!#&re   c                 j    |j                  d       | j                  D ]  }|j                  |        y r>  )enable_load_extensionrE  load_extension)ra   rm  	extensions      rc   r[  zSqliteDatabase._load_extensions  s3    ""4()) 	+I	*	+re   c                     | j                   j                  |       | j                         s3| j                         }|j	                  d       |j                  |       y y r>  )rE  r  r}  r  r  r  )ra   r  rm  s      rc   r  zSqliteDatabase.load_extension  sM    Y'~~??$D&&t,	*  re   c                 :    | j                   j                  |       y r_   )rE  remove)ra   r  s     rc   unload_extensionzSqliteDatabase.unload_extension  s    	*re   c                     || j                   v r!| j                   |   |k(  ryt        d|z        || j                   |<   | j                         s| j                  d|d|d       y)NFzschema "%s" already attached.r`  ra  r  T)rF  rF   r}  r  )ra   filenamer  s      rc   attachzSqliteDatabase.attach  sa    4>>!~~d#x/"#BT#IJJ't~~xNOre   c                     || j                   vry| j                   |= | j                         s| j                  d|z         y)NFzDETACH DATABASE "%s"T)rF  r}  r  r  s     rc   detachzSqliteDatabase.detach  s>    t~~%NN4 ~~3d:;re   c                     | j                   s|j                  S |t        j                  k(  r		 |d   d   S |S # t        t
        t        f$ r Y |S w xY wr  )r  r  r	  r  r\  r   	TypeErrorr  s      rc   r  zSqliteDatabase.last_insert_id  s]    $$###6==(ay|#  )4 s   7 AAc                 f    	 |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  0    	*??" 	*==)))	*    00c                 8    |rd|z  nd}| j                  |       y )NzBEGIN %sr  r  )ra   	lock_typer%  s      rc   r  zSqliteDatabase.begin  s    .7J*W	#re   c                     t         5  | j                  j                  j                         cd d d        S # 1 sw Y   y xY wr_   )r  r  rm  r  r  s    rc   r  zSqliteDatabase.commit  s0    " 	-;;##**,	- 	- 	-   $5>c                     t         5  | j                  j                  j                         cd d d        S # 1 sw Y   y xY wr_   )r  r  rm  r  r  s    rc   r  zSqliteDatabase.rollback  s0    " 	/;;##,,.	/ 	/ 	/r  c                     |xs d}| j                  d|z  d      }|j                         D cg c]  \  }| c}S c c}w )Nmainz>SELECT name FROM "%s".sqlite_master WHERE type=? ORDER BY name)r&  r  fetchall)ra   r  r  r*  s       rc   r  zSqliteDatabase.get_tables
  sK    !6!! #9;A#BCMO & 12222s   <c                 j    d|xs dz  }| j                  |d      D cg c]
  }t        |  c}S c c}w )NzCSELECT name, sql FROM "%s".sqlite_master WHERE type=? ORDER BY namer  )view)r  rf  )ra   r  r'  r*  s       rc   	get_viewszSqliteDatabase.get_views  s<    #)#3V5.2.>.>sI.NOsc"OOOs   0c           
      @   |xs d}d|z  }| j                  ||df      }t        |j                               }t               }| j                  d|d|d      }|j                         D ],  }|d   }t	        |d         dk(  }	|	s|j                  |       . i }
t        |      D ]>  }| j                  d|d	|d      }|j                         D cg c]  }|d   	 c}|
|<   @ t        |      D cg c]  }t        |||   |
|   ||v |       c}S c c}w c c}w )
Nr  zVSELECT name, sql FROM "%s".sqlite_master WHERE tbl_name = ? AND type = ? ORDER BY namerv  PRAGMA "z".index_list("")r   rj   z".index_info(")r  r  r  rC  r   r  r  r`  )ra   r&  r  r9  r  index_to_sqlunique_indexesr*  r  	is_uniqueindex_columnsr&  s               rc   r  zSqliteDatabase.get_indexes  sS   !6ADJK!!%%)9:FOO-. !!#)5#2 3??$ 	)Cq6DCFq(I""4(		)  . 	NJ%%'-z'; <F;A??;L(MCQ(MM*%	N |,.  T"d#&. 	. )N.s   D5Dc                     | j                  d|xs dd|d      }|j                         D cg c]+  }t        |d   |d   |d    t        |d         ||d	         - c}S c c}w )
Nr  r  ".table_info("r  r   rj   r   r<  r;  )r  r  ra  rY  )ra   r&  r  r  r  s        rc   r  zSqliteDatabase.get_columns6  sv    !!#)#3V#3U#< =  *, qtQqTqt8T!A$Z!M , 	, ,s   0A"c                     | j                  d|xs dd|d      }t        d |j                               D cg c]  }|d   	 c}S c c}w )Nr  r  r  r  c                     | d   S r  r`   )r  s    rc   rx   z1SqliteDatabase.get_primary_keys.<locals>.<lambda>?  s
    1R5 re   r   r  r*  r  ra   r&  r  r  r*  s        rc   r  zSqliteDatabase.get_primary_keys<  sJ    !!#)#3V#3U#< ="(&//:K"LM3AMMMs   A	c           	          | j                  d|xs dd|d      }|j                         D cg c]  }t        |d   |d   |d   |       c}S c c}w )Nr  r  z".foreign_key_list("r  r   rj   r;  r  r  rc  r  s        rc   r  zSqliteDatabase.get_foreign_keysA  sd    !!#)#3V#3U#< = "??,. #3q63q63q65A . 	. .s   Ac                 "    t         j                  S r_   )rP  Binaryr  s    rc   get_binary_typezSqliteDatabase.get_binary_typeG  s    ~~re   c                     |j                   r|j                   j                         nd}|r+|dvr&t        d|j                   j                         z        S y y )Nr(  )nothingr   zINSERT OR %s)r  rh  rQ   upperra   r  r9  r  s       rc   r  z!SqliteDatabase.conflict_statementJ  sQ    0;0C0C$$**,f$99~(;(;(A(A(CCDD :6re   c                    | j                   dk  rMt        |j                  |j                  |j                  |j
                  |j                  f      rt        d      |j                  r|j                  j                         nd}|r|dvry |dk(  rt        d      S |j                  s|j                  st        d      |j                  rt        d      |j
                  st        d	      | j                  ||      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  r1  r  r  r  r  r  r  r  rh  rQ   r  )ra   ocr9  r  s       rc   r  zSqliteDatabase.conflict_updateO  s   +bjj"))R5H5H'') * 6 7 7 (*zz!!#rf$==Y/00BLL * + + $$ D E E$$ ? @ @ --b%88re   c                 :    t         j                  ||t              S N)r$  )r5   r  r   r  s      rc   r  zSqliteDatabase.extract_datek  s    ||Iz|DDre   c                 :    t         j                  ||t              S r  )r5   r=  simple_date_timer  s      rc   r  zSqliteDatabase.truncate_daten  s    }}Y
*:  < 	<re   c                 L    t         j                  d|      j                  d      S )NrI  integer)r5   r   rP  r  s     rc   r  zSqliteDatabase.to_timestampr  s    {{4,11)<<re   c                 .    t         j                  |d      S )N	unixepoch)r5   r   r  s     rc   r  zSqliteDatabase.from_timestampu  s    {{:{33re   )Nr<  Nr  r_   )Nrr  N)Srf   rg   rh   r  r  r,  r+  r-  r  r  r#  r,  rJ  r  r1  r  r  r  r  rQ  rU  rT  rd  r5  r8  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  r  rL  r  rV  rW  rX  rY  r  r  r  rS  rG  r2  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  r  s   @rc   rR   rR     s   ::))		++II

K J I'NN@=
(  !)E$   L)Jn-Ln-L#$89;'I;'I!"45]+K#$89 01Nn-Ln-L  ^^K K;,?
A5
5 ;=(,4;.$$#*+
++	*$-/3P
.B,N
.E
98E<=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  rI  TFc                 X    || _         || _        || _        t        t        |   |fi | y r_   )_register_unicode	_encoding_isolation_levelr  rG   r  )ra   r  register_unicodeencodingrO  r  r  s         rc   r  zPostgresqlDatabase.init  s/    !1! / $,X@@re   c                    t         t        d      | j                  j                         }| j                  j                  d      r|j                  d| j                         n|j                  d| j                         t        j                  di |}| j                  rHt        j                  t        j                  |       t        j                  t        j                  |       | j                  r|j                  | j                         | j                  r|j!                  | j                         d|_        |S )NzPostgres driver not installed!zpostgresql://dsndbnameTr`   )psycopg2r8   r  rL  r  rq  
setdefaultr~  r  pg_extensionsregister_typeUNICODEUNICODEARRAYr  set_client_encodingr  set_isolation_levelr  )ra   rL  rm  s      rc   r  zPostgresqlDatabase._connect  s    &'GHH $$))+==##O4eT]]3h6)&)!!''(=(=tD''(B(BDI>>$$T^^4  $$T%:%:;re   c                 T    |j                   | _         | j                   dk\  rd| _        y y )Nia T)r  r.  rp  s     rc   r  z&PostgresqlDatabase._set_server_version  s+    "11%'%)D" (re   c                     | j                   j                  ry| j                   j                  j                         }|t        j
                  k  S re  )r  rl  rm  get_transaction_statusr  TRANSACTION_STATUS_INERROR)ra   
txn_statuss     rc   r  z'PostgresqlDatabase.is_connection_usable  s=    ;;
 [[%%<<>
MDDDDre   c                 r    	 |t         j                  k7  r|S |d   d   S # t        t        t        f$ r Y y w xY wr  )r	  r  r\  r   r  r  s      rc   r  z!PostgresqlDatabase.last_insert_id  s>    	'6==86JfQilJHi0 		s     66c                 f    	 |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                     | j                         r| j                          |rd|z  }nd}t        5  | j                         j	                  |       d d d        y # 1 sw Y   y xY w)Nz$BEGIN TRANSACTION ISOLATION LEVEL %sr  r  )ra   rO  r
  s      rc   r  zPostgresqlDatabase.begin  sS    >>LLN9OKDD" 	(KKM!!$'	( 	( 	(s    AA#c                 ~    d}| j                  ||xs df      }|j                         D cg c]  \  }| c}S c c}w )NzSSELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = %s ORDER BY tablenamepublicr  )ra   r  r9  r  r&  s        rc   r  zPostgresqlDatabase.get_tables  s@    <!!%&*<H)>?$*OO$56&%666s   :c           
          d}| j                  ||xs df      }|j                         D cg c]   \  }}t        ||j                  d            " c}}S c c}}w )Nz\SELECT viewname, definition FROM pg_catalog.pg_views WHERE schemaname = %s ORDER BY viewnamer  z 	;)r  r  rf  strip)ra   r  r9  r  	view_namer'  s         rc   r  zPostgresqlDatabase.get_views  s^    ;!!%&*<H)>?(.(9;$Y Y		&(9: ; 	; ;s   %Ac                     d}| j                  ||d|xs df      }|j                         D cg c]4  \  }}}}t        ||j                  d      |j	                  d      ||      6 c}}}}S c c}}}}w )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  z ;,)r  r  r`  rstripr   )	ra   r&  r  r9  r  r  r'  r  r  s	            rc   r  zPostgresqlDatabase.get_indexes  s    9 !!%%f6H)IJ 6<__5FH H1D#y' dCJJt$4gmmC6H'0 H 	H Hs   9A0
c                     d}| j                  |||xs df      }t        | j                  ||            }|j                         D 	cg c]  \  }}}}	t	        |||dk(  ||v ||	       c}	}}}S c c}	}}}w )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  YESr  rC  r  r  ra  )
ra   r&  r  r9  r  pksr  r  r   dfs
             rc   r  zPostgresqlDatabase.get_columns  s    )
 !!%%1C8)DE$''v67*0//*;= =&D$B tRUBO = 	= =s   !A2
c                     d}d}| j                  ||||xs df      }|j                         D cg c]  \  }| c}S c c}w )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  r  )ra   r&  r  r9  ctyper  pks          rc   r  z#PostgresqlDatabase.get_primary_keys  sK    
( !!%%8J()KL$oo/0sr000s   >c           	          d}| j                  |||xs df      }|j                         D cg c]  }t        |d   |d   |d   |       c}S c c}w )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  r   r   rj   r  )ra   r&  r  r'  r  r*  s         rc   r  z#PostgresqlDatabase.get_foreign_keys  se    (  !!#v/A'BC!??,. #3q63q63q65A . 	. .s   Ac                 `    | j                  d|f      }t        |j                         d         S )Nz
            SELECT COUNT(*) FROM pg_class, pg_namespace
            WHERE relkind='S'
                AND pg_class.relnamespace = pg_namespace.oid
                AND relname=%sr   )r  rY  re  )ra   sequenceress      rc   r  z"PostgresqlDatabase.sequence_exists"  s6      " %-;	0
 CLLN1%&&re   c                 "    t         j                  S r_   )r  r  r  s    rc   r  z"PostgresqlDatabase.get_binary_type*  s    re   c                      y r_   r`   r  s      rc   r  z%PostgresqlDatabase.conflict_statement-      re   c                 L   |j                   r|j                   j                         nd}|dv rt        d      g}|j                  rM|j	                  t        |j                  D cg c]  }t        |t              rt        |      n|! c}             |j	                  t        d             t        |      S |r|dk7  rt        d      |j                  s|j                  st        d      |j                  s|j                  st        d      | j                  ||      S c c}w )	Nr(  )r  r  r  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  rh  rQ   r  r  r)  rv   r1  rb  rj  r  r  r  r  r  )ra   r  r9  r  rc  r  s         rc   r  z"PostgresqlDatabase.conflict_update0  s   ')zz!!#r**'(E""-!22/4 $.c:#>F3KCG/4 5 6 LL\*+E?"(* ) * * BLL ) * * %%)@)@ ? @ @ --b%88%/4s   #$D!c                 V    t         j                  t        |t        d      |f            S NFROMr5   EXTRACTrj  rQ   r  s      rc   r  zPostgresqlDatabase.extract_dateI  s!    zz(Is6{J#GHIIre   c                 .    t         j                  ||      S r_   )r5   
DATE_TRUNCr  s      rc   r  z PostgresqlDatabase.truncate_dateL  s    }}Y
33re   c                 &    | j                  d|      S )NEPOCH)r  r  s     rc   r  zPostgresqlDatabase.to_timestampO  s      *55re   c                 ,    t         j                  |      S r_   )r5   r  r  s     rc   r  z!PostgresqlDatabase.from_timestampR  s    z**re   c                     |j                  t               j                  t        d            j	                  t        d                  S )Nr'  falser(  r6  s     rc   r)  z"PostgresqlDatabase.get_noop_selectV  s1    wwvx''C177GEFFre   c                 ,    | j                  d|z         y )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  r2  rj  rh  r~  r  r  r.  r0  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r2  r  r  s   @rc   rG   rG   y  s    $	K  D1JE"8JNI=A!A.*
E*(7;H(	=1 .*'92J46+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   rI  z``Tl    FPIPES_AS_CONCATc                     d| j                   dd}|j                  |       d|v rt        r|j                  d      |d<   t	        t
        |   |fi | y )NrO  T)charsetsql_modeuse_unicodepasswordpasswd)r7  r   mysql_passwdr  r  rC   r  )ra   r  r  rL  r  s       rc   r  zMySQLDatabase.initx  sV    ! 	fL%zz*5F8mT';F;re   c                     t         t        d      t        j                  d| j                  dd| j                  }|S )NzMySQL driver not installed!T)rK  r  r`   )mysqlr8   r~  r  r  rp  s     rc   r  zMySQLDatabase._connect  sA    =&'DEE}} 4$ 4#224re   c                     	 |j                   }| j                  |      | _         y # t        $ r |j                         }Y 2w xY wr_   )r  r   get_server_info_extract_server_version)ra   rm  version_raws      rc   r  z!MySQLDatabase._set_server_version  sF    	1--K #::;G  	1..0K	1s   % A Ac                    |j                         }d|v rt        j                  d|      }nt        j                  d|      }|2t        d |j	                         d   j                  d      D              S t        j                  d|z         y)	Nmariaz(1\d\.\d+\.\d+)z(\d\.\d+\.\d+)c              3   2   K   | ]  }t        |        y wr_   )r   )rm  nums     rc   ro  z8MySQLDatabase._extract_server_version.<locals>.<genexpr>  s     NcSNrp  r   rR  z'Unable to determine MySQL version: "%s"r   )rh  r0  searchr]  groupsr   r   r   )ra   version	match_objs      rc   r@  z%MySQLDatabase._extract_server_version  s|    --/g		"4g>I		"3W=I NY-=-=-?-B-H-H-MNNN?'IJre   c                     | j                   j                  ry| j                   j                  }t        |d      r(| j                  d   dk(  rd}nd}	  |j
                  |  yy# t        $ r Y yw xY w)NFpingr   rC  r`   r  T)r  rl  rm  r  r  rK  r  )ra   rm  r  s      rc   r  z"MySQLDatabase.is_connection_usable  st    ;;{{4 ""1%*		4    s   A# #	A/.A/c                 $    |j                  d      S )Nz() VALUES ()r  r6  s     rc   r  z#MySQLDatabase.default_values_insert  s    {{>**re   c                     | j                         r| j                          t        5  | j                         }|r|j	                  d|z         |j	                  d       d d d        y # 1 sw Y   y xY w)Nz"SET TRANSACTION ISOLATION LEVEL %sr  r  )ra   rO  curss      rc   r  zMySQLDatabase.begin  s^    >>LLN" 	";;=DA,- .LL!	" 	" 	"s   8A((A1c                 T    d}| j                  |d      D cg c]  \  }| c}S c c}w )NzySELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type != %s ORDER BY table_name)VIEWr  )ra   r  r9  r&  s       rc   r  zMySQLDatabase.get_tables  s.    ' %)$4$4UI$FG&%GGGs   %c                 z    d}| j                  |      }|j                         D cg c]
  }t        |  c}S c c}w )NztSELECT table_name, view_definition FROM information_schema.views WHERE table_schema = DATABASE() ORDER BY table_name)r  r  rf  )ra   r  r9  r  r*  s        rc   r  zMySQLDatabase.get_views  s<    G !!%(.4oo.?@sc"@@@s   8c           
      J   | j                  d|z        }t               }i }|j                         D ]J  }|d   s|j                  |d          |j	                  |d   g        ||d      j                  |d          L |D cg c]  }t        |d ||   ||v |       c}S c c}w )NSHOW INDEX FROM `%s`r   rj   r;  )r  rC  r  r  r  r  r`  )ra   r&  r  r  r  indexesr*  r  s           rc   r  zMySQLDatabase.get_indexes  s    !!"85"@A??$ 	+Cq6

3q6"s1vr*CFO""3q6*		+ $% dD'$-O % 	% %s   B c                     d}| j                  ||f      }t        | j                  |            }|j                         D 	cg c]  \  }}}}	t	        |||dk(  ||v ||	       c}	}}}S c c}	}}}w )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_positionr  r  )
ra   r&  r  r'  r  r  r  r  r   r  s
             rc   r  zMySQLDatabase.get_columns  s    )
 !!#x0$''./*0//*;= =&D$B tRUBO = 	= =s   !A,
c                     | j                  d|z        }t        d |j                               D cg c]  }|d   	 c}S c c}w )NrS  c                     | d   dk(  S )Nrj   PRIMARYr`   )r*  s    rc   rx   z0MySQLDatabase.get_primary_keys.<locals>.<lambda>  s    3q6Y#6 re   r;  r  r  s        rc   r  zMySQLDatabase.get_primary_keys  sK    !!"85"@A68IJL3A L 	L Ls   Ac                     d}| j                  ||f      }|j                         D cg c]  \  }}}t        ||||       c}}}S c c}}}w )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 NULLr  )ra   r&  r  r9  r  r  rd  re  s           rc   r  zMySQLDatabase.get_foreign_keys  sc    : !!%%2 4:??3DF F/
K vz;FF 	F Fs   Ac                 "    t         j                  S r_   )r=  r  r  s    rc   r  zMySQLDatabase.get_binary_type  s    ||re   c                     |j                   sy |j                   j                         }|dk(  rt        d      S |dk(  rt        d      S |dk7  rt        d      y )Nr   r  r  zINSERT IGNOREr   zWUn-supported action for conflict resolution. MySQL supports REPLACE, IGNORE and UPDATE.)r  rh  rQ   r  r  s       rc   r  z MySQLDatabase.conflict_statement  sh    ""F$$**,Yy>!x''x J K K  re   c           	      f   |j                   s|j                  s|j                  rt        d      g }|j                  r| j
                  xs d}|d   dk(  r|dk\  rt        j                  }nt        j                  }|j                  D ]D  }t        |      }t        t        |      t        d       ||      f      }|j                  |       F |j                  r|j                  j                         D ]  \  }	}
t        |
t               sUt        |	t"              rt%        |j&                  |	      }	t        |	t(              r|	j+                  |
      }
nt-        |
d      }
|j                  t        t        |	      t        d      |
f              |rt        t        d	      t/        |      f      S y )
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VALUESrc  rj  rQ   r  r  r  rv   ra  r1  r   r&  r2   r  rY   r(  )ra   r  r9  r  rH  VALUE_FNr  entityr  r  rV  s              rc   r  zMySQLDatabase.conflict_update  s   !=!=++ + , ,    ))1TGqzRGz$98899%// +&v.%!&)HV$'& '
 z*+ #++113 
J1!!T* "!Z0#EKK3!!U+JJqM!!E2xq)93s8Q(GHI
J S!:;*735 6 6 re   c                 h    t         j                  t        t        |      t        d      |f            S r&  r(  r  s      rc   r  zMySQLDatabase.extract_date)  s%    zz(C	NCK#LMNNre   c                 H    t         j                  |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                 ,    t         j                  |      S r_   )r5   UNIX_TIMESTAMPr  s     rc   r  zMySQLDatabase.to_timestamp0  s      ,,re   c                 ,    t         j                  |      S r_   )r5   FROM_UNIXTIMEr  s     rc   r  zMySQLDatabase.from_timestamp3  s    
++re   c                 *    t         j                         S r_   )r5   randr  s    rc   r  zMySQLDatabase.random6  s    wwyre   c                 $    |j                  d      S )NzDO 0r  r6  s     rc   r)  zMySQLDatabase.get_noop_select9  s    {{6""re   r_   )&rf   rg   rh   r  r  r2  rW  rk  rh  r~  r$  r,  r.  r/  r7  r  r  r  r@  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r  r  s   @rc   rC   rC   ]  s    (*$ "K !J EE":J!%IO H<H
 +"HA
%	=L
F
K)6VO=-,#re   rC   c                   $    e Zd Zd Zd Zd Zd Zy)r  c                     || _         y r_   ry  r{  s     rc   r  z_manual.__init__A  s	    re   c                 2     t               fd       }|S )Nc                  j    t        j                        5   | i |cd d d        S # 1 sw Y   y xY wr_   )r  rK  r  s     rc   r  z_manual.__call__.<locals>.innerE  s1    ! +4*6*+ + +r  r   r  s   `` rc   r  z_manual.__call__D  r  re   c                     | j                   j                         }|t        |t              st	        d      | j                   j                  |        y )Nz?Cannot enter manual commit block while a transaction is active.)rK  r  rv   r  r  r  )ra   tops     rc   r  z_manual.__enter__K  sF    gg%%'?:c7#; 6 7 7  &re   c                 R    | j                   j                         | urt        d      y )Nz>Transaction stack corrupted while exiting manual commit block.)rK  r  r  r  s       rc   r  z_manual.__exit__R  s.    77""$D0 4 5 5 1re   Nr  r`   re   rc   r  r  @  s    '5re   r  c                   $    e Zd Zd Zd Zd Zd Zy)r  c                 $    || _         ||f| _        y r_   )rK  _transaction_argsra   rK  r  r  s       rc   r  z_atomic.__init__Y  s    "&re   c                 2     t               fd       }|S )Nc                      j                   \  }}t        j                  g|i |5   | i |cd d d        S # 1 sw Y   y xY wr_   )rw  r  rK  r  r  r  r  r5   ra   s       rc   r  z_atomic.__call__.<locals>.inner^  sJ    ))DAq*1** +4*6*+ + +	   <Ar   r  s   `` rc   r  z_atomic.__call__]       	r	+ 
	+ re   c                 v   | j                   j                         dk(  r1| j                  \  }} | j                   j                  |i || _        nRt        | j                   j                         t              rt        d      | j                   j                         | _        | j                  j                         S )Nr   z=Cannot enter atomic commit block while in manual commit mode.)rK  r  rw  r  _helperrv   r  r  r  r  r  r  s      rc   r  z_atomic.__enter__e  s    77$$&!+11LD&.477..??DL//17; 3 4 4  77,,.DL||%%''re   c                 <    | j                   j                  |||      S r_   )r  r  r  s       rc   r  z_atomic.__exit__p  s    ||$$Xw??re   Nr  r`   re   rc   r  r  X  s    0	(@re   r  c                   :    e Zd Zd Zd Zd Zd	dZd	dZd Zd Z	y)
r  c                 $    || _         ||f| _        y r_   )rK  _begin_argsrx  s       rc   r  z_transaction.__init__u  s     &>re   c                 2     t               fd       }|S )Nc                      j                   \  }}t        j                  g|i |5   | i |cd d d        S # 1 sw Y   y xY wr_   )r  r  rK  r{  s       rc   r  z$_transaction.__call__.<locals>.innerz  sJ    ##DAqdgg//Q/ +4*6*+ + +r|  r   r  s   `` rc   r  z_transaction.__call__y  r}  re   c                 Z    | j                   \  }} | j                  j                  |i | y r_   )r  rK  r  r  s      rc   _beginz_transaction._begin  s(    ''ft&v&re   c                 ^    | j                   j                          |r| j                          y y r_   )rK  r  r  ra   r  s     rc   r  z_transaction.commit  s!    KKM re   c                 ^    | j                   j                          |r| j                          y y r_   )rK  r  r  r  s     rc   r  z_transaction.rollback  s#    KKM re   c                     | j                   j                         dk(  r| j                          | j                   j                  |        | S r  )rK  r  r  r  r  s    rc   r  z_transaction.__enter__  s7    77$$&!+KKM  &re   c                 :   | j                   j                         }	 |r|dk(  r| j                  d       n|dk(  r	 | j                  d       | j                   j	                          y #  | j                  d        xY w# | j                   j	                          w xY wNr   F)rK  r  r  r  r  )ra   r  r  r  depths        rc   r  z_transaction.__exit__  s    ))+
	&EQJe$!KK&
 GG##%	MM%(GG##%s   A> A' 'A;;A> >BNrj  
rf   rg   rh   r  r  r  r  r  r  r  r`   re   rc   r  r  t  s%    *'

&re   r  c                   :    e Zd Zd	dZd Zd Zd
dZd Zd Zd Z	y)r  Nc                     || _         |xs! dt        j                         j                  z   | _        | j                  j                  | j                   j                        | _        y )Nrq   )rK  uuiduuid4hexsidrS  rW  
quoted_sid)ra   rK  r  s      rc   r  z_savepoint.__init__  sB    0#

 0 00((--6re   c                 2     t               fd       }|S )Nc                  j    t        j                        5   | i |cd d d        S # 1 sw Y   y xY wr_   )r  rK  r  s     rc   r  z"_savepoint.__call__.<locals>.inner  s1    DGG$ +4*6*+ + +r  r   r  s   `` rc   r  z_savepoint.__call__  r  re   c                 T    | j                   j                  d| j                  z         y )NzSAVEPOINT %s;rK  r  r  r  s    rc   r  z_savepoint._begin  s    Odoo=>re   c                 z    | j                   j                  d| j                  z         |r| j                          y y )NzRELEASE SAVEPOINT %s;)rK  r  r  r  r  s     rc   r  z_savepoint.commit  s+    3dooEF$++-5re   c                 T    | j                   j                  d| j                  z         y )NzROLLBACK TO SAVEPOINT %s;r  r  s    rc   r  z_savepoint.rollback  s    7$//IJre   c                 &    | j                          | S r_   )r  r  s    rc   r  z_savepoint.__enter__  s    re   c                 |    |r| j                          y 	 | j                  d       y #  | j                           xY w)NFr  )r  r  r  s       rc   r  z_savepoint.__exit__  s4    MMO%(s   ( ;r_   rj  r  r`   re   rc   r  r    s&    7
? Kre   r  c                   F    e Zd Zd Zd Zd Zd Zd ZddZd Z	d Z
dd	Zy
)r  c                 X    || _         d| _        d| _        d| _        d| _        g | _        y )Nr   F)r  r  rv  initialized	populatedr  r  s     rc   r  zCursorWrapper.__init__  s-    

 re   c                 Z    | j                   rt        | j                        S t        |       S r_   )r  ru  r  ResultIteratorr  s    rc   r  zCursorWrapper.__iter__  s#    >>''d##re   c                 .   t        |t              rD|j                  }||dk  r| j                          n| j                  |       | j                  |   S t        |t
              r'| j                  |dkD  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"99D|tax!%>>$''c"OOD1HD!4>>$'' ( ) )re   c                 :    | j                          | j                  S r_   )r  r  r  s    rc   r  zCursorWrapper.__len__  s    zzre   c                      y r_   r`   r  s    rc   r  zCursorWrapper.initialize  r  re   c                 X   | j                   j                         }|'d| _        | j                   j                          t        | j
                  s| j                          d| _        | xj                  dz  c_        | j                  |      }|r| j                  j                  |       |S )NTr   )r  re  r  r  r  r  r  r  process_rowr  r  )ra   cacher*  r  s       rc   iteratezCursorWrapper.iterate  s    kk""$;!DNKK!!OO#D

a
!!#&NN!!&)re   c                     |S r_   r`   ra   r*  s     rc   r  zCursorWrapper.process_row   s    
re   c              #   T   K   	 	 | j                  d       # t        $ r Y yw xY ww)z1Efficient one-pass iteration over the result set.FN)r  r  r  s    rc   r  zCursorWrapper.iterator  s5     ll5))  ! s   ( (	%(%(c                 .   |xs t        d      }|dk  rt        d      t        |       }| j                  |_        | j
                  s?|| j                  kD  r/	 |j                          | j
                  s|| j                  kD  r-y y y y # t        $ r Y y w xY w)NInfr   z"Negative values are not supported.)floatr  r  r  rv  r  r  r  )ra   rx  r  s      rc   r  zCursorWrapper.fill_cache  s    uq5ABB!$'..a$**n ..a$**n.n. ! s   B 	BBNrj  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y)r  c                     | j                   j                  }|D cg c].  }|d   |d   j                  d      dz   d  j                  d      0 c}| _        t        |      | _        y c c}w )Nr   rR  r   ()"`)r  descriptionrfindr  r  r   ncolsra   r  r   s      rc   _initialize_columnsz%DictCursorWrapper._initialize_columns  sd    kk--!,. !QqTZZ_q01288@ .%
.s   3A'c                     i }t        | j                        D ]$  }|j                  | j                  |   ||          & |S r_   )r  r  r  r  )ra   r*  r  r  s       rc   _row_to_dictzDictCursorWrapper._row_to_dict"  s@    tzz" 	7Adll1os1v6	7re   N)rf   rg   rh   r  r  r  r  r`   re   rc   r  r    s    & %J Kre   r  c                       e Zd Zd Zd Zy)r  c           
          | j                   j                  }t        j                  d|D cg c].  }|d   |d   j	                  d      dz   d  j                  d      0 c}      | _        y c c}w )NRowr   rR  r   r  )r  r  collections
namedtupler  r  tuple_classr  s      rc   r  z"NamedTupleCursorWrapper.initialize,  sj    kk--&11%>I:K9:AaD1C1$%&,,V4:K L :Ks   3A+
c                       | j                   | S r_   r  r  s     rc   r  z#NamedTupleCursorWrapper.process_row1  s    t%%re   N)rf   rg   rh   r  r  r`   re   rc   r  r  +  s    L
&re   r  c                   $     e Zd Z fdZd Z xZS )r  c                 :    t         t        |   |       || _        y r_   )r  r  r  r  )ra   r  r  r  s      rc   r  zObjectCursorWrapper.__init__6  s    !41&9&re   c                 H    | j                  |      } | j                  di |S r	  )r  r  )ra   r*  row_dicts      rc   r  zObjectCursorWrapper.process_row:  s(    $$S)t+(++re   rf   rg   rh   r  r  r  r  s   @rc   r  r  5  s    ',re   r  c                   "    e Zd Zd Zd Zd ZeZy)r  c                      || _         d| _        y r  )cursor_wrapperrv  )ra   r  s     rc   r  zResultIterator.__init__@  s    ,
re   c                     | S r_   r`   r  s    rc   r  zResultIterator.__iter__D  ri  re   c                 r   | j                   | j                  j                  k  r$| j                  j                  | j                      }nZ| j                  j                  s>| j                  j                          | j                  j                  | j                      }nt        | xj                   dz  c_         |S r  )rv  r  r  r  r  r  r  r(  s     rc   r  zResultIterator.nextG  s    ::++111%%//

;C$$..'')%%//

;C

a

re   N)rf   rg   rh   r  r  r  __next__r`   re   rc   r  r  ?  s    	 Hre   r  c                        e Zd Zd ZddZd Zy)FieldAccessorc                 .    || _         || _        || _        y r_   )r6  r-  r  ra   r6  r-  r  s       rc   r  zFieldAccessor.__init__W  s    

	re   Nc                 h    |%|j                   j                  | j                        S | j                  S r_   )__data__r  r  r-  rx  s      rc   r{  zFieldAccessor.__get__\  s-    $$((33zzre   c                     ||j                   | j                  <   |j                  j                  | j                         y r_   )r  r  _dirtyr  ra   ry  r~   s      rc   r7  zFieldAccessor.__set__a  s,    ',$))$DII&re   r_   )rf   rg   rh   r  r{  r7  r`   re   rc   r  r  V  s    

're   r  c                   2     e Zd Z fdZd ZddZd Z xZS )ForeignKeyAccessorc                 R    t         t        |   |||       |j                  | _        y r_   )r  r  r  	rel_model)ra   r6  r-  r  r  s       rc   r  zForeignKeyAccessor.__init__g  s"     $0tDre   c                 F   |j                   j                  | j                        }|| j                  |j                  v r| j                  |j                  vra| j                  j
                  rK| j                  j                  | j                  j                  |k(        }||j                  | j                  <   |j                  j                  | j                  |      S | j                  j                  s,| j                  j
                  r| j                  j                  |S r_   )
r  r  r  __rel__r-  	lazy_loadr  	rel_fieldr  r.   )ra   ry  r~   r  s       rc   get_rel_instancez#ForeignKeyAccessor.get_rel_instancek  s    !!%%dii0		X-=-= =yy 0 00TZZ5I5Inn(()=)=)FG.1  +##''		599TZZ%9%9..---re   c                 @    || j                  |      S | j                  S r_   )r  r-  rx  s      rc   r{  zForeignKeyAccessor.__get__v  s#    ((22zzre   c                    t        || j                        r[t        || j                  j                  j
                        |j                  | j
                  <   ||j                  | j
                  <   nt|j                  j                  | j
                        }||j                  | j
                  <   ||k7  s|/| j
                  |j                  v r|j                  | j
                  = |j                  j                  | j
                         y r_   )rv   r  r   r-  r  r  r  r  r  r  r  )ra   ry  r  fk_values       rc   r7  zForeignKeyAccessor.__set__{  s    c4>>*+23

8L8L8Q8Q+RHdii(*-HTYY'((,,TYY7H+.Hdii(x3;yyH,,,$$TYY/DII&re   r_   )rf   rg   rh   r  r  r{  r7  r  r  s   @rc   r  r  f  s    )	

're   r  c                       e Zd Zd ZddZy)BackrefAccessorc                 V    || _         |j                  | _        |j                  | _        y r_   )r-  r  r6  ra   r-  s     rc   r  zBackrefAccessor.__init__  s    
__
re   Nc                     |`| j                   j                  j                  }| j                  j	                         j                  | j                   t        ||      k(        S | S r_   )r-  r  r  r  r  r)  r   )ra   ry  rz  r  s       rc   r{  zBackrefAccessor.__get__  sR    ::'',,DNNVXU4::4)@@AC re   r_   )rf   rg   rh   r  r{  r`   re   rc   r  r    s    %
re   r  c                   $    e Zd ZdZd ZddZd Zy)ObjectIdAccessorz(Gives direct access to the underlying idc                     || _         y r_   )r-  r  s     rc   r  zObjectIdAccessor.__init__  s	    
re   Nc                 b   ||j                   j                  | j                  j                        }|o| j                  j                  |j                  v rM|j                  | j                  j                     }t        || j                  j                  j                        }|S | j                  S r_   )r  r  r-  r  r  r   r  )ra   ry  rz  r~   rel_objs        rc   r{  zObjectIdAccessor.__get__  s    %%))$**//:E}H4D4D!D"**4::??;)=)=)B)BCLzzre   c                 F    t        || j                  j                  |       y r_   )r  r-  r  r  s      rc   r7  zObjectIdAccessor.__set__  s    $**//51re   r_   )rf   rg   rh   r  r  r{  r7  r`   re   rc   r  r    s    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y)r2   r   FNr'  Tc                    |t        d       |}|| _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        |xs | j                  | _        || _        t"        xj$                  dz  c_        t"        j$                  | _        | j                  xr dxs d| j&                  f| _        y )NzL"db_column" has been deprecated in favor of "column_name" for Field objects.r   rj   )r   r  rv  r  r  ru  r  r  r  rS  	unindexedchoices	help_textverbose_namedefault_index_typer*  _hiddenr2   _field_counter_order	_sort_key)ra   r  rv  r  r  ru  r  r  r  rS  r  r  r  r  r*  	db_columnr  s                    rc   r  zField.__init__  s    
   > ?#K	
&&& """($?(?(? 	!****0q5ACre   c                 `    t        | j                  dz   | j                  j                  z         S r  )r  r  r6  rf   r  s    rc   r  zField.__hash__  s$    DIIOdjj&9&99::re   c                     t        | d      rJt        | dd       r=dt        |       j                  d| j                  j                  d| j
                  dS dt        |       j                  z  S )Nr6  r  r   : rR  r   z<%s: (unbound)>)r  r   r  rf   r6  r  r  s    rc   __repr__zField.__repr__  sY    4!gdFD&A$(J$7$7$(JJ$7$7$(II/ / !4:#6#666re   c           	          || _         |x| _        | _        | j                  xs || _        |rt	        ||| j                  || |             y y r_   )r6  r  	safe_namer  r  accessor_classra   r6  r  set_attributes       rc   r  z
Field.bind  sM    
%))	DN++3tE4!4!4UD$!GH re   c                 j    t        | j                  j                  j                  | j                        S r_   )r!   r6  r%  r&  r  r  s    rc   r  zField.column  s%    djj&&,,d.>.>??re   c                     |S r_   r`   r  s     rc   adaptzField.adapt  s    re   c                 ,    ||S | j                  |      S r_   r	  r  s     rc   r  zField.db_value      u<4::e+<<re   c                 ,    ||S | j                  |      S r_   r	  r  s     rc   r$  zField.python_value  r		  re   c                 2    t        || j                  d      S r  )rY   r  r  s     rc   r  zField.to_value  s    UDMM%88re   c                     | j                   S r_   )r  r6  s     rc   r  zField.get_sort_key  s    ~~re   c                 8    |j                  | j                        S r_   )r'  r  r6  s     rc   r#  zField.__sql__  s    wwt{{##re   c                      y r_   r`   r  s    rc   get_modifierszField.get_modifiers  r  re   c                 z   |rQ|j                   j                  r;|j                   j                  j                  | j                  | j                        }n| j                  }| j	                         }|r;|r9dj                  |D cg c]  }t        |       c}      }t        |d|d      S t        |      S c c}w )Nr  r  r  )r  r  r  
field_typer	  rS  rU  rQ   )ra   r7  column_type	modifiersr   modifier_literals         rc   ddl_datatypezField.ddl_datatype  s    399(())//33DOO48OOEK //K&&(	9#yy))DQ#a&)DE;0@ABB{## *Es   B8c                    t        | j                        g}| j                  |      }|r|j                  |       | j                  r|j                  t        d             | j                  s|j                  t        d             | j                  r|j                  t        d             | j                  r'|j                  t        d| j                  z               | j                  r|j                  | j                         | j                  r'|j                  t        d| j                  z               t        |      S )N	UNINDEXEDzNOT NULLr  zDEFAULT NEXTVAL('%s')r  )rb  r  r	  r  r  rQ   r  r  r  r  r5  rS  rj  )ra   r7  r  rb  s       rc   ddlz	Field.ddl  s    (()*%%c*	LL#>>LL[)*yyLLZ)LL]+,==LL4t}}DEFLL))*>>LL\DNN:;<re   )FFFNNFNNNFNNNNNFrj  )rf   rg   rh   r  r  r  r	  auto_incrementr  r	  r  r  r  r  r  r  r  r	  r  r$  r  r  r#  r	  r	  r	  r`   re   rc   r2   r2     s    NF"NNJFJN>BIM?C).	D@;7I @ @==9$$re   r2   c                       e Zd ZdZy)r   ANYNrf   rg   rh   r	  r`   re   rc   r   r     s    Jre   r   c                       e Zd ZdZd Zy)r:   r,  c                 <    	 t        |      S # t        $ r |cY S w xY wr_   )r   r  r  s     rc   r	  zIntegerField.adapt&  s%    	u: 	L	   
 Nrf   rg   rh   r	  r	  r`   re   rc   r:   r:   #  s    Jre   r:   c                       e Zd ZdZy)r   r  Nr	  r`   re   rc   r   r   -      Jre   r   c                       e Zd ZdZy)rO   r"  Nr	  r`   re   rc   rO   rO   1  s    Jre   rO   c                   &     e Zd ZdZdZ fdZ xZS )r   Tr  c                     |j                  d      du rt        dt        |       z        d|d<   t        t        |   |i | y )Nr  Fz %s must always be a primary key.T)r  r  r  r  r   r  r  s      rc   r  zAutoField.__init__9  sG    ::m$-?$t*LMM $}i'88re   )rf   rg   rh   r	  r	  r  r  r  s   @rc   r   r   5  s    NJ9 9re   r   c                       e Zd ZdZy)r   r  Nr	  r`   re   rc   r   r   @  s    Jre   r   c                   $     e Zd ZdZd fd	Z xZS )r7   z$INT GENERATED BY DEFAULT AS IDENTITYc                 >    |rd| _         t        t        |   di | y )Nz INT GENERATED ALWAYS AS IDENTITYr`   )r	  r  r7   r  )ra   generate_alwaysr  r  s      rc   r  zIdentityField.__init__G  s    @DOmT+5f5re   r  )rf   rg   rh   r	  r  r  r  s   @rc   r7   r7   D  s    7J6 6re   r7   c                        e Zd Z fdZ xZS )rH   c                 B    t        d       t        t        |   |i | y )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__N  s(     E 	F 	ot-t>v>re   rB  r  s   @rc   rH   rH   M  s    ? ?re   rH   c                       e Zd ZdZd Zy)r4   r+  c                 <    	 t        |      S # t        $ r |cY S w xY wr_   )r  r  r  s     rc   r	  zFloatField.adaptX  s%    	< 	L	r	  Nr 	  r`   re   rc   r4   r4   U  s    Jre   r4   c                       e Zd ZdZy)r/   r)  Nr	  r`   re   rc   r/   r/   _  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&  c                     || _         || _        || _        |xs t        j                  j
                  | _        t        j                  d      | j                   z  | _        t        t        | *  |i | y )Nr^  )
max_digitsdecimal_places
auto_rounddecimalDefaultContextroundingDecimal_expr  r*   r  )ra   r1	  r2	  r3	  r6	  r  r  r  s          rc   r  zDecimalField.__init__f  sc    $,$ CG$:$:$C$COOB'T-@-@,@A	lD*D;F;re   c                 2    | j                   | j                  gS r_   )r1	  r2	  r  s    rc   r	  zDecimalField.get_modifierso  s    !4!455re   c                     t         j                  }|s||S  |d      S | j                  r8 |t        |            }|j	                  | j
                  | j                        S |S )Nr   )r6	  )r4	  r7	  r3	  rR  quantizer8	  r6	  )ra   r~   Ddecimal_values       rc   r  zDecimalField.db_valuer  sZ    OO!M53qt3??i./M ))$))dmm)LLre   c                 |    |:t        |t        j                        r|S t        j                  t        |            S y r_   )rv   r4	  r7	  rR  r  s     rc   r$  zDecimalField.python_value{  s4    %1??9U#344 re   )r^  r<  FN)	rf   rg   rh   r	  r  r	  r  r$  r  r  s   @rc   r*   r*   c  s"    JCH<65re   r*   c                       e Zd Zd Zd Zd Zy)_StringFieldc                 ~    t        |t              r|S t        |t              r|j                  d      S t        |      S )Nr6  )rv   rR  rS  r   r  s     rc   r	  z_StringField.adapt  s5    eY'Lz*<<((re   c                 8    t        | t        j                  |      S r_   rz  r  s     rc   r   z_StringField.__add__  s    %5dBIIu%MMre   c                 8    t        |t        j                  |       S r_   rz  r  s     rc   r  z_StringField.__radd__  s    &6ubii&NNre   N)rf   rg   rh   r	  r   r  r`   re   rc   r@	  r@	    s      NNre   r@	  c                   *     e Zd ZdZd fd	Zd Z xZS )r   r1  c                 :    || _         t        t        |   |i | y r_   )
max_lengthr  r   r  )ra   rF	  r  r  r  s       rc   r  zCharField.__init__  s    $i'88re   c                 @    | j                   xr | j                   gxs d S r_   )rF	  r  s    rc   r	  zCharField.get_modifiers  s    4DOO#4<<re   )   )rf   rg   rh   r	  r  r	  r  r  s   @rc   r   r     s    J9=re   r   c                   "     e Zd ZdZ fdZ xZS )r3   r#  c                 R    t         t        |   |      }|r|j                         }|S r_   )r  r3   r$  r  )ra   r~   r  s     rc   r$  zFixedCharField.python_value  s'    nd8?KKMEre   )rf   rg   rh   r	  r$  r  r  s   @rc   r3   r3     s    J re   r3   c                       e Zd ZdZy)rT   r-  Nr	  r`   re   rc   rT   rT     s    Jre   rT   c                   0     e Zd ZdZd Zd fd	Zd Z xZS )r   r   c                 J    |t         | _        y |j                         | _        y r_   )	bytearrayr  r  r  s     rc   _db_hookzBlobField._db_hook  s!     )D ( 8 8 :Dre   c                    t         | _        |j                  j                  ryt	        |j                  j                  t
              r0|j                  j                  j                  | j                         n%| j                  |j                  j                         |j                  j                  j                  | j                         t        t        | 3  |||      S r_   )rN	  r  r%  r  rv   rL   r  rO	  	_db_hooksr  r  r   r  ra   r6  r  r	  r  s       rc   r  zBlobField.bind  s    %;;%++..6$$44T]]Cekk223
 	$$T]]3Y*5$FFre   c                     t        |t              r|j                  d      }t        |t              r| j	                  |      S |S )NrP  )rv   rR  r:  rS  r  r  s     rc   r  zBlobField.db_value  s;    eY'LL!56EeZ($$U++re   rj  )rf   rg   rh   r	  rO	  r  r  r  r  s   @rc   r   r     s    J;Gre   r   c                   &     e Zd Z fdZddZ xZS )r   c                 ^    |j                  dd       t        t        |   |i | d| _        y )Nru  r   r   )r  r  r   r  _BitField__current_flagr  s      rc   r  zBitField.__init__  s/    )Q'h&77re   c                     |"| 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                 >    || _         || _        t        |           y r_   )_field_valuer  r  )ra   r-  r~   FlagDescriptorr  s      rc   r  z.BitField.flag.<locals>.FlagDescriptor.__init__  s    ##nd46re   c                 N    | j                   j                  | j                         S r_   )r[	  r  r\	  r  s    rc   clearz+BitField.flag.<locals>.FlagDescriptor.clear  s    {{**DKK<88re   c                 L    | j                   j                  | j                        S r_   )r[	  r  r\	  r  s    rc   rC  z)BitField.flag.<locals>.FlagDescriptor.set  s    {{))$++66re   c                 v    || S t        || j                  j                        xs d}|| j                  z  dk7  S r  )r   r[	  r  r\	  )ra   ry  rz  r~   s       rc   r{  z-BitField.flag.<locals>.FlagDescriptor.__get__  s<    #K$++*:*:;@q+11re   c                     |dvrt        d      t        || j                  j                        xs d}|r|| j                  z  }n|| j                   z  }t        || j                  j                  |       y )N)TFz"Value must be either True or Falser   )r  r   r[	  r  r\	  r  )ra   ry  is_setr~   s       rc   r7  z-BitField.flag.<locals>.FlagDescriptor.__set__  sh    .$%IJJ$++*:*:;@qT[[(Edkk\)E$++"2"2E:re   c                 p    |j                  | j                  j                  | j                        dk7        S r  )r'  r[	  r  r\	  r6  s     rc   r#  z-BitField.flag.<locals>.FlagDescriptor.__sql__  s)    wwt{{224;;?1DEEre   r_   )
rf   rg   rh   r  r_	  rC  r{  r7  r#  r  )r  r]	  s   @rc   r]	  rY	    s"    7972
;Fre   r]	  )rV	  rC  )ra   r~   r]	  s     @rc   flagzBitField.flag  sM    =''EA%"'1*D	FZ 	F2 dE**re   r_   )rf   rg   rh   r  re	  r  r  s   @rc   r   r     s     
 +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yd Zy)BigBitFieldDatac                 "   || _         || _        | j                   j                  j                  | j                        }|st	               }nt        |t              st	        |      }|x| _        | j                   j                  | j                  <   y r_   )ry  r  r  r  rN	  rv   _buffer)ra   ry  r  r~   s       rc   r  zBigBitFieldData.__init__  sk     	&&**4995KEE9-e$E;@@t}}--dii8re   c                 8    | j                   j                          y r_   )ri	  r_	  r  s    rc   r_	  zBigBitFieldData.clear  s    re   c                     t        |d      \  }}t        | j                        }||k  r$| j                  j                  d|dz   |z
  z         ||fS )NrC      r   )divmodr   ri	  r5  ra   r  byte_numbyte_offsetcur_sizes        rc   _ensure_lengthzBigBitFieldData._ensure_length  sS     &sA+t||$xLLHqLH+D EF$$re   c                 `    | j                  |      \  }}| j                  |xx   d|z  z  cc<   y r  rr	  ri	  ra   r  ro	  rp	  s       rc   set_bitzBigBitFieldData.set_bit  s0     $ 3 3C 8+X1#34re   c                 b    | j                  |      \  }}| j                  |xx   d|z   z  cc<   y r  rt	  ru	  s       rc   	clear_bitzBigBitFieldData.clear_bit  s3     $ 3 3C 8+XA$4"55re   c                     | j                  |      \  }}| j                  |xx   d|z  z  cc<   t        | j                  |   d|z  z        S r  )rr	  ri	  rY  ru	  s       rc   
toggle_bitzBigBitFieldData.toggle_bit  sN     $ 3 3C 8+X1#34DLL*a;.>?@@re   c                     t        |d      \  }}t        | j                        }||k  ryt        | j                  |   d|z  z        S )NrC  Fr   )rm	  r   ri	  rY  rn	  s        rc   rc	  zBigBitFieldData.is_set  sI     &sA+t||$xDLL*a;.>?@@re   c                 N    |r| j                  |       y | j                  |       y r_   )rv	  rx	  )ra   r  r~   s      rc   r  zBigBitFieldData.__setitem__  s    #T)=re   c                 ,    t        | j                        S r_   )r   ri	  r  s    rc   r  zBigBitFieldData.__len__  s    4<<  re   c                    t        |t              r|j                  }n)t        |t        t        t
        f      r|}nt        d      t        |      t        |       z
  }|dkD  r| j                  j                  d|z         |S )NIncompatible data-typer   rl	  )	rv   rg	  ri	  bytesrN	  
memoryviewr  r   r5  )ra   r  datadiffs       rc   _get_compatible_dataz$BigBitFieldData._get_compatible_data   sj    e_-==Dy*=>D5664y3t9$!8T\\((48re   c           	      n   t        |t              r|j                  }n)t        |t        t        t
        f      r|}nt        d      t	        dt        t        |       t        |            z        }t        j                  | j                  |d      }t        |      D ]  \  }\  }} |||      ||<    |S )Nr	  rl	  r   )rq  )rv   rg	  ri	  r	  rN	  r	  r  maxr   r  zip_longestr  )	ra   r  r  r	  bufrw  r  r  bs	            rc   _bitwise_opzBigBitFieldData._bitwise_op+  s    e_-==Dy*=>D566#c$iU"<<=""4<<C"2 	IAv11XCF	
re   c                 B    | j                  |t        j                        S r_   )r	  r  r  r  s     rc   r  zBigBitFieldData.__and__8  s    x}}55re   c                 B    | j                  |t        j                        S r_   )r	  r  r  r  s     rc   r  zBigBitFieldData.__or__:      x||44re   c                 B    | j                  |t        j                        S r_   )r	  r  xorr  s     rc   r  zBigBitFieldData.__xor__<  r	  re   c              #   j   K   | j                   D ]   }t        d      D ]  }|d|z  z  rdnd  " y w)NrC  r   r   )ri	  r  )ra   r	  js      rc   r  zBigBitFieldData.__iter__?  s>      	1A1X 1aLaq01	1s   13c                 ,    t        | j                        S r_   )reprri	  r  s    rc   r  zBigBitFieldData.__repr__D  s    DLL!!re   r   r   c                 ,    t        | j                        S r_   rS  ri	  r  s    rc   r
  zBigBitFieldData.__str__G      dll++re   c                 ,    t        | j                        S r_   r	  r  s    rc   	__bytes__zBigBitFieldData.__bytes__J  r	  re   N)rf   rg   rh   r  r_	  rr	  rv	  rx	  rz	  rc	  r  r  __delitem__r  r	  r	  r  r  r  r  r  rm   version_infor
  r	  r`   re   rc   rg	  rg	    s~    A%56A
A K>K!	6551
"
Q	,	,re   rg	  c                   &     e Zd ZddZ fdZ xZS )BigBitFieldAccessorc                 J    || j                   S t        || j                        S r_   )r-  rg	  r  rx  s      rc   r{  zBigBitFieldAccessor.__get__O  s#    ::x33re   c                    t        |t              r|j                         }nt        |t              rt	        |      }nt        |t
              rt        |      }nct        |t              rt        |j                        }n=t        |t              r|j                  d      }nt        |t              st        d      t        t        | ;  ||       y )Nr6  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)rv   r	  tobytesbuffer_typer	  rN	  rS  rg	  ri	  rR  r:  r  r  r	  r7  )ra   ry  r~   r  s      rc   r7  zBigBitFieldAccessor.__set__S  s    eZ(MMOE{+%LEy)u%E/u}}-Ey)LL)EE:. 9 : :!405Are   r_   )rf   rg   rh   r{  r7  r  r  s   @rc   r	  r	  N  s    4B Bre   r	  c                   (     e Zd ZeZ fdZd Z xZS )r   c                 X    |j                  dt               t        t        |   |i | y )Nru  )r  rS  r  r   r  r  s      rc   r  zBigBitField.__init__g  s'    )Z0k4)4:6:re   c                      |t        |      S |S r_   )rS  r  s     rc   r  zBigBitField.db_valuek  s    $)$5z% @5@re   )rf   rg   rh   r	  r	  r  r  r  r  s   @rc   r   r   d  s    (N;Are   r   c                       e Zd ZdZd Zd Zy)rX   r/  c                 H   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   r1  r   r	  r  r/  r  r  s     rc   r  zUUIDField.db_valuer  s}    eZ(SZ2-=Lu%#e**:IIE*EeTYY'99	99U#'''	Ls   <B B!c                 l    t        |t        j                        r|S |t        j                  |      S d S r_   )rv   r  r/  r  s     rc   r$  zUUIDField.python_value  s.    eTYY'L#(#4tyy>$>re   Nrf   rg   rh   r	  r  r$  r`   re   rc   rX   rX   o  s    J?re   rX   c                       e Zd ZdZd Zd Zy)r   r0  c                 N   t        |t              rt        |      dk(  r| j                  |      S t        |t              r$t        |      dk(  rt        j                  |      }t        |t
        j                        r| j                  |j                        S |t        d      y )NrD  r	  )r  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)rv   r	  r   r  r1  r  r/  r  r  s     rc   r  zBinaryUUIDField.db_value  s    eU#E
b(8$$U++z*s5zR/?II%(EeTYY'$$U[[11 H I I re   c                     t        |t        j                        r|S t        |t              r|j	                         }n|rt        |t
              st        |      }|t        j                  |      S d S )Nr	  )rv   r  r/  r	  r	  r	  r  s     rc   r$  zBinaryUUIDField.python_value  sX    eTYY'Lz*MMOE:eU3%LE).):tyyu%DDre   Nr	  r`   re   rc   r   r     s    JIEre   r   c                       fd}|S )Nc                 d    | j                   j                  j                  j                  |       S r_   )r6  r%  r  r  )ra   r  s    rc   decz_date_part.<locals>.dec  s&    zz((55iFFre   r`   r  r	  s   ` rc   
_date_partr	    s    GJre   c                     |xs d }|D ]*  }	  |t         j                   j                  | |            c S  | S # t        $ r Y :w xY w)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     sY    0KL 	 1 1 : :5# FGG
 L  		s   %9	AAc                 r    	 t         j                   j                  | d      S # t        t        f$ r | cY S w xY w)Nr   )r   r	  r  r  r^  s    rc   r  r    s:      ))%1DEEz" s   " 66c                   $     e Zd ZdZd fd	Z xZS )_BaseFormattedFieldNc                 >    ||| _         t        t        |   |i | y r_   )r	  r  r	  r  )ra   r	  r  r  r  s       rc   r  z_BaseFormattedField.__init__  s%    "DL!414B6Bre   r_   )rf   rg   rh   r	  r  r  r  s   @rc   r	  r	    s    G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y)r)   r%  )r   r   r   c                 V    |r&t        |t              rt        || j                        S |S r_   )rv   r1  r   r	  r  s     rc   r	  zDateTimeField.adapt  s$    Zz2#E4<<88re   c                 `    | j                   j                  j                  j                  |       S r_   r6  r%  r  r  r  s    rc   r  zDateTimeField.to_timestamp  #    zz((55d;;re   c                 b    | j                   j                  j                  j                  ||       S r_   r6  r%  r  r  ra   rV  s     rc   truncatezDateTimeField.truncate  %    zz((66tTBBre   r   r   r   r   r   r   N)rf   rg   rh   r	  r	  r	  r  r	  r  r	  r   r   r   r   r   r   r`   re   rc   r)   r)     sz    JG
<C Jv&'DZ()E
:e$
%CJv&'Dj*+Fj*+Fre   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y	)
r(   r$  )r   r   r   c                     |r*t        |t              rd }t        || j                  |      S |r*t        |t        j                        r|j                         S |S )Nc                 "    | j                         S r_   )r   r	  s    rc   rx   z!DateField.adapt.<locals>.<lambda>  s    1668 re   )rv   r1  r   r	  r   r   ra   r~   pps      rc   r	  zDateField.adapt  sI    Zz2#B#E4<<<<z%):):;::<re   c                 `    | j                   j                  j                  j                  |       S r_   r	  r  s    rc   r  zDateField.to_timestamp  r	  re   c                 b    | j                   j                  j                  j                  ||       S r_   r	  r	  s     rc   r	  zDateField.truncate  r	  re   r   r   r   N)rf   rg   rh   r	  r	  r	  r  r	  r  r	  r   r   r   r`   re   rc   r(   r(     sM    JG<C Jv&'DZ()E
:e$
%Cre   r(   c                   r    e Zd ZdZg dZd Z e ed            Z e ed            Z	 e ed            Z
y)rU   r.  )r   r   r   r   r   c                 @   |rTt        |t              rd }t        || j                  |      S t        |t        j                        r|j                         S |Et        |t        j                        r+t        j                  j                  |z   j                         S |S )Nc                 "    | j                         S r_   )r   r	  s    rc   rx   z!TimeField.adapt.<locals>.<lambda>  s    qvvx re   )rv   r1  r   r	  r   r   	timedeltaminr	  s      rc   r	  zTimeField.adapt  s}    %,''t||R@@E8#4#45zz|#E83E3E!F%%))E17799re   r   r   r   N)rf   rg   rh   r	  r	  r	  r  r	  r   r   r   r`   re   rc   rU   rU     sB    JG	 Jv&'Dj*+Fj*+Fre   rU   c                       fd}|S )Nc                     | j                   j                  j                  }| j                  dkD  r| t	        | j                  d      z  n| }|j                  |j                  |            S Nr   Fr,  )r6  r%  r  
resolutionrY   r  r  )ra   rK  r}  r  s      rc   r	  z!_timestamp_date_part.<locals>.dec  s]    ZZ&&??Q& doo??,0 	y"*;*;D*ABBre   r`   r	  s   ` rc   _timestamp_date_partr	    s    C
 Jre   c                   ,   e Zd Z ed      D  cg c]  }d|z  	 c}} 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 c c}} w )rV   r7  r^  c                 B   |j                  dd       | _        | j                  sd| _        ns| j                  t        dd      v rd| j                  z  | _        nF| j                  | j                  vr.t	        ddj                  d | j                  D              z        d	| j                  z  | _        |j                  d
d      xs d| _        | j                  rt        nt        j                  j                  }|j                  d|       t        t        | :  |i | y )Nr	  r   rj   r7  r^  z,TimestampField resolution must be one of: %sr  c              3   2   K   | ]  }t        |        y wr_   )rU  )rm  r  s     rc   ro  z*TimestampField.__init__.<locals>.<genexpr>$  s     &N!s1v&Nrp  i@B r   Fru  )r  r	  r  valid_resolutionsr  rS  ticks_to_microsecondr   r   r   r   r  r  rV   r  )ra   r  r  dfltr  s       rc   r  zTimestampField.__init__  s     **\48DO__a+ DOO3DO__D$:$::K!YY&Nt7M7M&NNO P P$+t$>!::eU+4uvx'8'8'<'<)T*nd,d=f=re   c                     t        j                   t        j                  t        j                  |j	                                     d d  S )N   )r   r   gmtimemktime	timetuple)ra   r   s     rc   local_to_utczTimestampField.local_to_utc,  s4    
   $++dkk",,..I"J2A"NOOre   c                     t        j                  |j                               }t        j                  j	                  |      S r_   )calendartimegmutctimetupler   r   )ra   r   r   s      rc   utc_to_localzTimestampField.utc_to_local3  s0    
 __R__./  ..r22re   c                     | j                   r#t        j                  |j                               S t	        j
                  |j                               S r_   )r   r	  r	  r	  r   r	  r	  r  s     rc   get_timestampzTimestampField.get_timestamp;  s7    88??5#5#5#788;;u011re   c                    |y t        |t        j                        rnqt        |t        j                        r6t        j                  |j                  |j                  |j
                        }n!t        t        || j                  z              S | j                  |      }| j                  dkD  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_valueB  s    =eX../x}}-%%ejj%++uyyIEuUT__4566&&u-	??Q%++g56I(I5#$$re   c                 \   |t        |t        t        t        f      r| j                  dkD  r2t        || j                        \  }}t        || j                  z        }nd}| j                  rt        |      }nt        j                  j                  |      }|r|j                  |      }|S )Nr   r   )r	  )rv   r   r  longr	  rm	  r	  r   r   r   r   r   )ra   r~   ticksmicrosecondss       rc   r$  zTimestampField.python_valueS  s    EC3E!F"%eT__=u"54+D+D#DE xx(/ ))77>,?re   c                     | j                   dkD  r| t        | j                   d      z  n| }| j                  j                  j                  j                  |      S r	  )r	  rY   r6  r%  r  r  )ra   r}  s     rc   r  zTimestampField.from_timestampe  sL    ??Q& doo??,0 	zz((77==re   r   r   r   r   r   r   )rf   rg   rh   r  r	  r  r	  r	  r	  r  r$  r  r  r	  r   r   r   r   r   r   r  )rm  r  r  s   00@rc   rV   rV     s    (-a11Q1>"P32%"$>
 (01D)'23E
'.
/C(01D*845F*845Fm 2s   BrV   c                       e Zd Zd Zd Zy)r>   c                 `    |,t        j                  dt        j                  |            d   S y )N!Ir   )structr  socket	inet_atonra   r  s     rc   r  zIPField.db_values  s-    ?==v'7'7'<=a@@ re   c                 Z    |)t        j                  t        j                  d|            S y )Nr	  )r	  	inet_ntoar	  packr	  s     rc   r$  zIPField.python_valuew  s(    ?##FKKc$:;; re   N)rf   rg   rh   r  r$  r`   re   rc   r>   r>   r  s    A<re   r>   c                       e Zd ZdZeZy)r   r!  N)rf   rg   rh   r	  rY  r	  r`   re   rc   r   r   |  s    JEre   r   c                   &     e Zd Zd fd	Zd Z xZS )r   c                 @    t        t        | 
  |i | ||| _        y y r_   )r  r   r  r	  )ra   r	  r  r  r  s       rc   r  zBareField.__init__  s)    i'88DJ re   c                      y r_   r`   r6  s     rc   r	  zBareField.ddl_datatype  r#  re   r_   )rf   rg   rh   r  r	  r  r  s   @rc   r   r     s    
re   r   c                   t     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 fd	Zd Zd	 Z xZS )r6   c                 X   |j                  dd       t        t        |   |i | |t	        d       |}|	t	        d       |	}|t	        d       |}|dk(  | _        || _        || _        || _        d | _	        || _
        || _        || _        || _        |
| _        || _        || _        y )Nrv  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   r6  r-  r
  r
  r
  r	
  	_deferredr  to_fieldr

  r  r
  related_namer  r  r  s                   rc   r  zForeignKeyField.__init__  s    
 	'4(ot-t>v>  B CE B 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   r	  r   r   r:   r  s    rc   r	  zForeignKeyField.field_type  sF    $..)4>>,,,5"---&&&re   c                     t        | j                  t              s| j                  j                         S t        t
        |          S r_   )rv   r  r   r	  r  r6   )ra   r  s    rc   r	  zForeignKeyField.get_modifiers  s4    $..)4>>//11_d9;;re   c                 8    | j                   j                  |      S r_   )r  r	  r  s     rc   r	  zForeignKeyField.adapt  s    ~~##E**re   c                     t        || j                        r t        || j                  j                        }| j                  j                  |      S r_   )rv   r  r   r  r  r  r  s     rc   r  zForeignKeyField.db_value  s;    eT^^,E4>>#6#67E~~&&u--re   c                 h    t        || j                        r|S | j                  j                  |      S r_   )rv   r  r  r$  r  s     rc   r$  zForeignKeyField.python_value  s*    eT^^,L~~**511re   c                 <   | j                   s|j                  d      r|n|dz   | _         | j                  s6| j                   | _        | j                  |k(  rK| xj                  dz  c_        n5| j                  |k(  r&t        d|j                  j
                  d|d      | j                  r|| _        t        | j                  t              r&t        | j                  | j                        | _	        n1| j                  %| j                  j                  j                  | _	        t        t        | ?  |||       | j                  | _        t#        | j$                        r| j%                  |       | _        n| j$                  d c| _        | _        | j&                  sd|j                  j
                  z  | _        |r`t)        || j                  t+        |              | j&                  dvr1t)        | j                  | j&                  | j-                  |              y y y )N_idzForeignKeyField "z"."zA" specifies an object_id_name that conflicts with its field name.z%s_setz!+)r  rt  r

  r  r%  r  r
  r  rv   r  r1  r   r  r  r6   r  r 	  r  r
  r
  r  r  backref_accessor_classrR	  s       rc   r  zForeignKeyField.bind  s   '+}}U';tD"""&"2"2D""d*##u,#  D((-(8(8$@ A A """DNdnnj1$T^^T^^DDN^^#!^^11==DN 	ot)%}E,,T**+006DL262G2G/DL$/||#ekk&6&66DLE4..0@0FG||4'33D9; ( re   c           	      d   g }| j                   r/|j                  t        d      t        | j                         f       |j                  t        d      t	        | f      t        d      | j
                  t	        | j                  f      g       | j                  r'|j                  t        d| j                  z               | j                  r'|j                  t        d| j                  z               | j                  r'|j                  t        d| j                  z               t        |      S )Nr  zFOREIGN KEY
REFERENCESzON DELETE %szON UPDATE %szDEFERRABLE %s)r
  r5  rQ   rb  r)  r  r  r
  r  r
  r	
  rj  )ra   rc  s     rc   foreign_key_constraintz&ForeignKeyField.foreign_key_constraint  s    LL#l+VD4H4H-IJKdW%NNdnn./1 	2 >>LL^dnn<=>>>LL^dnn<=>??LL_t>?@re   c                     |j                  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.)rq  r   r  r%  r,  r   s     rc   r   zForeignKeyField.__getattr__  sk    ??4  !LMM4>>''...>>''..t44 ACGH I 	Ire   )NNNNNNNNNTNNrj  )rf   rg   rh   r  r	  r  r
  r  r  r	  r	  r	  r  r$  r  r
  r   r  r  s   @rc   r6   r6     sY    'N,BF<@?CDH!/F ' '<
+.
2
";H$Ire   r6   c                   b     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                    || _         |j                         | _        t        j                  j                  |        t        t        |   |j                  d      |j                  d      |j                  d             y )Nr  r  r  )r  r  r  )	field_kwargsrh  rel_model_namer+   _unresolvedr  r  r  r  )ra   r
  r  r  s      rc   r  zDeferredForeignKey.__init__  si    ",224&&**40 $0

=1F#

=1 	1 	3re   c                 B    t        | j                  fi | j                  S r_   )r+   r
  r
  )ra   memos     rc   __deepcopy__zDeferredForeignKey.__deepcopy__  s    !$"5"5K9J9JKKre   c                    t        |fddi| j                  }|j                  r1| j                  j                  j                  | j                  |       y | j                  j                  j                  | j                  |       y )Nr
  T)r6   r
  r  r6  r%  set_primary_keyr  	add_field)ra   r  r-  s      rc   	set_modelzDeferredForeignKey.set_model  sa    	OTOT=N=NOJJ,,TYY>JJ&&tyy%8re   c                    t        t        j                  t        j                  d            }|D ]Z  }|j
                  | j                  j                         k(  s+|j                  |        t        j                  j                  |       \ y )Nr  r  )
r  r+   r 
  r  
attrgetterr
  rf   rh  r'
  discard)	model_cls
unresolveddrs      rc   resolvezDeferredForeignKey.resolve%  so    .:: ( 3 3H =?
 	;B  I$6$6$<$<$>>Y'"..66r:	;re   r_   )rf   rg   rh   rC  r 
  r  rs  r  r#
  r'
  rl  r.
  r  r  s   @rc   r+   r+     s9    %K3 HL9 ; ;re   r+   c                       e Zd Zd Zd Zd Zy)r,   c                     g | _         y r_   )_refsr  s    rc   r  zDeferredThroughModel.__init__0  s	    
re   c                 @    | j                   j                  |||f       y r_   )r1
  r  r  s       rc   	set_fieldzDeferredThroughModel.set_field3  s    

5%./re   c                 t    | j                   D ])  \  }}}||_        |j                  j                  ||       + y r_   )r1
  through_modelr%  r&
  )ra   r5
  	src_modelm2mfieldr  s        rc   r'
  zDeferredThroughModel.set_model6  s8    )- 	6%Ix%2H"OO%%dH5	6re   N)rf   rg   rh   r  r3
  r'
  r`   re   rc   r,   r,   /  s    06re   r,   c                        e Zd ZdxZxZxZZdZy)	MetaFieldNF)rf   rg   rh   r  ru  r6  r  r  r`   re   rc   r9
  r9
  <  s    +//K/'/EDKre   r9
  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   | _
        y )NzCannot find foreign-key to "z" on "z" model.r   )r  r;
  r  r6  r  r5
  r%  
model_refsr  src_fkdest_fk)ra   r6  r-  r  src_fksdest_fksr  s         rc   r  z ManyToManyFieldAccessor.__init__B  s    %t5eUDI[[
"00$$**55djjA%%++66t~~F"jj$*<*<> ? ?"nnd.@.@B C Caj{re   c                    |<|sw| j                   j                  dk7  r^t        || j                   j                        }t        |t              r.|D cg c]"  }t        || j
                  j                        $ c}S t        || j                   j                  j                        }|2| j                  j                  rt        d| j                  d|d      t        || | j                        j                  | j                        j                  | j                        j!                  | j                   |k(        S | j                  S c c}w )Nr   zCannot get many-to-many "" for unsaved instance "rc  )r>
  r
  r   rv   r\  r?
  r  r  r-  _prevent_unsavedr  ManyToManyQueryr  rS  r5
  r6  r)  )ra   ry  rz  force_queryr
  r  src_ids          rc   r{  zManyToManyFieldAccessor.__get__R  s   4;;#6#6##=!(DKK,?,?@gt,GNOGC):):;OOXt{{'<'<'A'ABF~$**"="= 59ZZ"K L L#HdDNNCT$,,-T$**%U4;;&013
 zz Ps   'Ec                    t        || j                  j                  j                        }|2| j                  j
                  rt        d| j                  d|d      | j                  |d      }|j                  |d       y )NzCannot set many-to-many "rC
  rc  T)rF
  )clear_existing)	r   r>
  r  r  r-  rD
  r  r{  r  )ra   ry  r~   rG
  r9  s        rc   r7  zManyToManyFieldAccessor.__set__d  so    4;;#8#8#=#=>>djj9915XG H HX48		%	-re   re  )rf   rg   rh   r  r{  r7  r  r  s   @rc   r;
  r;
  A  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@   c                     |7t        |t              st        |      st        d      |s||t	        d      || _        || _        || _        || _        || _	        || _
        || _        y )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  r
  _through_model
_on_delete
_on_updaterD
  _is_backref)ra   r6  r
  r5
  r
  r
  prevent_unsavedrO
  s           rc   r  zManyToManyField.__init__p  s    $}.BC]+ !A 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                  j                  || |       y t        t
        |   |||       | j                  st        | j                  || j                  | j                  | j                  d      }| j                  xs |j                  j                  dz   | _        | j                  j                  j!                  | j                  |       y y )NT)r
  r5
  r
  r
  rO
  rq   )rv   rL
  r,   r3
  r  r@   r  rO
  r6  r5
  rM
  rN
  r
  r%  r  r  r&
  )ra   r6  r  r	  many_to_many_fieldr  s        rc   r  zManyToManyField.bind  s    d))+?@))%t<ot)%}E!0

"00//// ""  <<A5;;+;+;c+ADLNN  **4<<9KL  re   c                     t        | j                  | j                  f| j                   | j                  ff      D cg c]  \  }}|	 c}}S c c}}w r_   )r  rO
  r6  r  )ra   rf  r6  s      rc   
get_modelszManyToManyField.get_models  sS    &,tzz*!!!4>>2.4 '5 6(!U 6 	6 6s   Ac                 \    | j                   | j                         | _         | j                   S r_   )rL
  _create_through_modelr  s    rc   r5
  zManyToManyField.through_model  s+    &"&"<"<">D"""re   c                     || _         y r_   )rL
  r  s     rc   r5
  zManyToManyField.through_model  s
    #re   c                      j                         \  fD cg c]  }|j                  j                   c} 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 c c}w )Nc                      e Zd ZW j                  j                  j
                  ZW j                  j                  j                  Zd eW       z  ZW  j                  j                  W j                  j                  fdffZ
y)3ManyToManyField._create_through_model.<locals>.Metaz%s_%s_throughTN)rf   rg   rh   r6  r%  r  r  r]  r'  r  rT  )r  r   ra   tabless   rc   r  r\
    sb    zz''00HZZ%%,,F(5=8J))..#))..1Gre   r  )r
  r
  Through)
rV
  r%  r'  rM
  rN
  r  r6   rf   r  rA   )	ra   r6  r  rL  attrs
klass_namer  r   r]
  s	   `     @@@rc   rX
  z%ManyToManyField._create_through_model  s    ??$S7:CjAU%++((A	 	  $T__MIINNOC:6:IINNOC:6:D
 '*llCLLA
J%00# Bs   Cc                     | j                   S r_   )r5
  r  s    rc   get_through_modelz!ManyToManyField.get_through_model  s    !!!re   )NNNNTFrj  )rf   rg   rh   r;
  r	  r  rR
  r  rV
  r  r5
  r  rX
  rb
  r  r  s   @rc   r@   r@   m  s[    ,NJNCH'$-M$6
 # #
 $ $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                 l    ||n| j                   }| |       nd | _        t        t        |   |i | y r_   )field_classfield_instancer  rd
  r  )ra   rf
  r  r  r2   r  s        rc   r  zVirtualField.__init__  s:    *6D<L<L).):eglD*D;F;re   c                 T    | j                   | j                   j                  |      S |S r_   )rg
  r  r  s     rc   r  zVirtualField.db_value  s*    *&&//66re   c                 T    | j                   | j                   j                  |      S |S r_   )rg
  r$  r  s     rc   r$  zVirtualField.python_value  s*    *&&33E::re   c           	      x    || _         |x| _        x| _        | _        t	        ||| j                  || |             y r_   )r6  r  r  r 	  r  r	  r	  s       rc   r  zVirtualField.bind  s:    
8<<<49t~tT00dCDre   r_   rj  )	rf   rg   rh   rf
  r  r  r$  r  r  r  s   @rc   rd
  rd
    s    K<


Ere   rd
  c                   T    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y)r"   Nc                      || _         d | _        y r_   )field_names_safe_field_names)ra   rm
  s     rc   r  zCompositeKey.__init__  s    &!%re   c                     | j                   b| j                  | j                  S | j                  D cg c]/  }| j                  j                  j                  |   j
                  1 c}| _         | j                   S c c}w r_   )rn
  r6  rm
  r%  r,  r 	  ra   fs     rc   safe_field_nameszCompositeKey.safe_field_names  sv    !!)zz!''' 04/?/?&A*+ '+jj&6&6&=&=a&@&J&J &AD"%%%&As   4A;c           	      n    |-t        | j                  D cg c]  }t        ||       c}      S | S c c}w r_   )r]  rr
  r   )ra   ry  rz  rq
  s       rc   r{  zCompositeKey.__get__  s6    8M8MN1'(A.NOO Os   2c                     t        |t        t        f      st        d      t	        |      t	        | j
                        k7  rt        d      t        |      D ]  \  }}t        || j
                  |   |       ! y )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\  r]  r  r   rm
  r  r  r  )ra   ry  r~   r  field_values        rc   r7  zCompositeKey.__set__  s    %$/ 7 8 8u:T--.. H I I )% 0 	BCHd..s3[A	Bre   c                     t        | j                  |      D cg c]+  \  }}| j                  j                  j                  |   |k(  - }}}t        t        j                  |      S c c}}w r_   )ziprm
  r6  r%  r,  rt   r  r  )ra   r  r-  r~   r  s        rc   r  zCompositeKey.__eq__  sd    +.t/?/?+GI'5% 

((//6%? I Ihmm[11Is   0A'c                     | |k(   S r_   r`   r  s     rc   r  zCompositeKey.__ne__  s    re   c                 X    t        | j                  j                  | j                  f      S r_   )r  r6  rf   rm
  r  s    rc   r  zCompositeKey.__hash__   s"    TZZ(($*:*:;<<re   c           	          |j                   t        k7  }|j                  t        | j                  D cg c]%  }| j
                  j                  j                  |   ' c}d|            S c c}w r  )r  r@  r'  rj  rm
  r6  r%  r,  )ra   r7  r  r-  s       rc   r#  zCompositeKey.__sql__  sk     l*wwx.2.>.>!@%* "&!1!1!8!8!? !@AEvO P 	P !@s   *A)c                 j    || _         |x| _        x| _        | _        t	        || j                  |        y r_   )r6  r  r  r 	  r  r	  s       rc   r  zCompositeKey.bind  s/    
8<<<49t~tyy$'re   r_   rj  )rf   rg   rh   r  r  r  rr
  r{  r7  r  r  r  r#  r  r`   re   rc   r"   r"     sE    H& & &
B2
 =P(re   r"   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
_SortedFieldList_keys_itemsc                      g | _         g | _        y 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_   )ru  r
  r  s    rc   r  z_SortedFieldList.__iter__  r  re   c                     |j                   }t        | j                  |      }t        | j                  |      }|| j                  || v S r_   )r  r   r
  r   r
  )ra   r  r  r  r	  s        rc   __contains__z_SortedFieldList.__contains__  sA    NN

A&Q't{{1Q'''re   c                 L    | j                   j                  |j                        S r_   )r
  rv  r  r  s     rc   rv  z_SortedFieldList.index$  s    zz00re   c                     |j                   }t        | j                  |      }| j                  j                  ||       | j                  j                  ||       y r_   )r  r   r
  r  r
  )ra   r  r  r  s       rc   r  z_SortedFieldList.insert'  sC    NN

A&

!Q1d#re   c                 Z    | j                  |      }| j                  |= | j                  |= y r_   )rv  r
  r
  )ra   r  r  s      rc   r  z_SortedFieldList.remove-  s'    jjKKJJsOre   N)rf   rg   rh   r  r  r  r  r
  rv  r  r  r`   re   rc   r}
  r}
    s*    #I!(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"y)%rN   Nc                 Z    || _         || _        |j                  dt               || _        y )Nr  )r6  rH  r  rB  r  )ra   r6  r  r  s       rc   r  zSchemaManager.__init__7  s(    
!""7L9.re   c                     | j                   xs  | j                  j                  j                  }|t	        d| j                  z        |S )Nz=database attribute does not appear to be set on the model: %s)rH  r6  r%  r  r8   r{  s     rc   r  zSchemaManager.database=  sL    ^^8tzz//88:& (ACG::(N O O	re   c                     || _         y r_   r  r  s     rc   r  zSchemaManager.databaseE  s	    re   c                 N     | j                   j                  di | j                  S r	  )r  rJ  r  r  s    rc   _create_contextzSchemaManager._create_contextI  s"    ,t}},,Dt/C/CDDre   c                 @   |j                  dd      }| j                         }|j                  |rdnd       |r|j                  d       |j                  | j                        j                  d       g }g }| j                  j
                  }|j                  rh|j                  j                  D cg c]  }|j                  |   j                   }	}|j                  t        t        d      t        |	      f             |j                  D ]_  }
|j                  |
j!                  |             t#        |
t$              s4|
j&                  rA|j                  |
j)                                a |j*                  r|j-                  |j*                         |j-                  | j/                  |             |j                  t        ||z                |j0                  Wt3        |j0                        }|D ]=  }t#        |t4              st7        d      |j                  d      j                  |       ? g }|j8                  r|j                  d	       |j:                  r|j                  d
       |r#|j                  ddj=                  |      z         |S c c}w )N	temporaryFCREATE TEMPORARY TABLE CREATE TABLE r"  r   r  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr  r  )r  r
  r  r'  r6  r%  composite_keyr  rm
  r,  r  r  rj  rQ   r)  sorted_fieldsr	  rv   r6   r  r
  r  r5  _create_table_option_sqltable_settingsr_  r1  r  strict_tableswithout_rowidrS  )ra   r  r  is_tempr7  r  r  rH  
field_name
pk_columnsr-  r
  setting
extra_optss                 rc   _create_tablezSchemaManager._create_tableL  s;   ++k51""$-oNKK()

##C(zz,0,<,<,H,HJ( ++j188 JJ Jx]);)9*)E)G  H I '' 	CENN599S>*%1%..""5#?#?#AB	C
 t//0488AB ;!678*)$*=*=>N) 2!':6$%EFFC ((12
 
z00:z00AKK		* 556
9Js   3 Jc                    g }t        | j                  j                  j                  xs i |      }|s|S t	        |j                               D ]r  \  }}t        |t              s6t        |      r|j                  j                  }nt        t        |            }|j                  t        t        |      |fd             t |S )Nr   r  )rP  r6  r%  r  r  r  rv   ra  r$  r&  rQ   rU  r  rj  )ra   r  r  r  r~   s        rc   r
  z&SchemaManager._create_table_option_sqlv  s    TZZ--55;WEL 1 	@JCeT*E?!KK--EE
OELL3s8U"3#>?	@ re   c                 ^    | j                   j                   | j                  dd|i|       y Nr  r`   )r  r  r
  ra   r  r  s      rc   r  zSchemaManager.create_table  s*    0d00FdFgFGre   c                    | j                         j                  |j                  d      rdnd      }|r|j                  d       |j                  t	        t        |             j                  d      j                  |      S )Nr
  r
  r
  r"  r  )r
  r  r  r'  rb  r_  ra   r'  r9  r  rH  r7  s         rc   _create_table_aszSchemaManager._create_table_as  sr    ##%88K0 26EG 	 KK()V\*567U	re   c                 f     | j                   ||fd|i|}| j                  j                  |       y )Nr  )r
  r  r  r
  s         rc   create_table_aszSchemaManager.create_table_as  s2    #d##JIDIDIc"re   c                 
   | j                         j                  |rdnd      j                  | j                        }|j	                  d      r|j                  d      }|S |j	                  d      r|j                  d      }|S )NzDROP TABLE IF EXISTS zDROP TABLE cascade CASCADErestrictz	 RESTRICT)r
  r  r'  r6  r  )ra   r  r  r7  s       rc   _drop_tablezSchemaManager._drop_table  ss    ##%4/]KDJJ 	 ;;y!++j)C 
 [[$++k*C
re   c                 ^    | j                   j                   | j                  dd|i|       y r
  )r  r  r
  r
  s      rc   r  zSchemaManager.drop_table  s*    .d..DDDGDEre   c                 b   | j                   }|j                  s8| j                         j                  d      j	                  | j
                        S | j                         j                  d      j	                  | j
                        }|r|j                  d      }|r|j                  d      }|S )Nr  zTRUNCATE TABLE z RESTART IDENTITYr
  )r  r1  r
  r  r'  r6  )ra   restart_identityr
  rK  r7  s        rc   _truncate_tablezSchemaManager._truncate_table  s    ]]  ((*W^,SS_> ""$,,->?CCDJJO++12C++j)C
re   c                 Z    | j                   j                  | j                  ||             y r_   )r  r  r
  )ra   r
  r
  s      rc   r1  zSchemaManager.truncate_table  s"    d223CWMNre   c                     | j                   j                  j                         D cg c]  }| j                  ||       c}S c c}w r_   )r6  r%  fields_to_index_create_indexra   r  rv  s      rc   _create_indexeszSchemaManager._create_indexes  sF    !ZZ--==?A ""5$/ A 	A As   Ac                 :   t        |t              rm| j                  j                  s|j	                  d      }n |j
                  |k7  r|j	                  |      }t        | j                  t              rt        |      }| j                         j                  |      S re  )rv   r9   r  r.  r  r  rH  rR   r  r
  r'  )ra   rv  r  s      rc   r
  zSchemaManager._create_index  su    eU#==22

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

4($...9 &e,##%))%00re   c                 h    | j                  |      D ]  }| j                  j                  |        y N)r  )r
  r  r  ra   r  r9  s      rc   create_indexeszSchemaManager.create_indexes  s1    ))t)4 	)EMM!!%(	)re   c                     | j                   j                  j                         D cg c]$  }t        |t              r| j                  ||      & c}S c c}w r_   )r6  r%  r
  rv   r9   _drop_indexr
  s      rc   _drop_indexeszSchemaManager._drop_indexes  sL    !ZZ--==?-eU+   - - 	- -s   )Ac                 |   d}|r| j                   j                  r|dz  }t        |j                  t              rA|j                  j
                  r+t        |j                  j
                  |j                        }nt        |j                        }| j                         j                  |      j                  |      S )NzDROP INDEX z
IF EXISTS )r  r/  rv   r  rS   r  rb  r  r
  r  r'  )ra   rv  r  r%  r&  s        rc   r
  zSchemaManager._drop_index  s    !	DMM11%IellE*u||/C/C 4 4ekkBJ,J "#Z	"re   c                 h    | j                  |      D ]  }| j                  j                  |        y r
  )r
  r  r  r
  s      rc   drop_indexeszSchemaManager.drop_indexes  s1    ''T'2 	)EMM!!%(	)re   c                 x    |j                   r| j                  j                  st        d|j                  z        y )Nz@Sequences are either not supported, or are not defined for "%s".)r  r  r0  r  r  r  s     rc   _check_sequenceszSchemaManager._check_sequences  s8    ~~T]]%<%< 138::> ? ? &=re   c                     |j                   j                  j                  r4t        |j                   j                  j                  |j                        S t        |j                        S r_   )r6  r%  r  rb  r  r  s     rc   _sequence_for_fieldz!SchemaManager._sequence_for_field  sE    ;;##%++++22ENNCC%..))re   c                     | j                  |       | j                  j                  |j                        s=| j	                         j                  d      j                  | j                  |            S y )NzCREATE SEQUENCE r
  r  r  r  r
  r  r'  r
  r  s     rc   _create_sequencezSchemaManager._create_sequence  s[    e$}},,U^^<$_&W/0S11%89; =re   c                 b    | j                  |      }|| j                  j                  |       y y r_   )r
  r  r  ra   r-  seq_ctxs      rc   create_sequencezSchemaManager.create_sequence  s/    ''.MM!!'* re   c                     | j                  |       | j                  j                  |j                        r=| j	                         j                  d      j                  | j                  |            S y )NzDROP SEQUENCE r
  r  s     rc   _drop_sequencezSchemaManager._drop_sequence  s[    e$==((8$_&W-.S11%89; 9re   c                 b    | j                  |      }|| j                  j                  |       y y r_   )r
  r  r  r
  s      rc   drop_sequencezSchemaManager.drop_sequence  s/    %%e,MM!!'* re   c                    d|j                   j                  j                  d|j                  d|j                  j                  j                  }| j                         j                  d      j                  |j                         j                  d      j                  t        t        |                  j                  d      j                  |j                               S )Nfk_rf  _refs_zALTER TABLE z ADD CONSTRAINT r   )r6  r%  r'  r  r  r
  r  r'  rb  r2  r
  )ra   r-  r  s      rc   _create_foreign_keyz!SchemaManager._create_foreign_key  s    %*[[%6%6%A%A%*%6%6%*__%:%:%E%EG  "(U[[!+,V5d;<=U1134	6re   c                 X    | j                   j                  | j                  |             y r_   )r  r  r
  r  s     rc   create_foreign_keyz SchemaManager.create_foreign_key  s    d66u=>re   c                     | j                   j                  rD| j                  j                  j                  D ]   }|j
                  s| j                  |       " y y r_   )r  r0  r6  r%  r
  r  r
  r  s     rc   create_sequenceszSchemaManager.create_sequences  sH    ==""))77 0>>((/0 #re   c                 n    | j                           | j                  |fi | | j                  |       y r
  )r
  r  r
  )ra   r  table_optionss      rc   
create_allzSchemaManager.create_all  s4    $0-0&re   c                     | j                   j                  rD| j                  j                  j                  D ]   }|j
                  s| j                  |       " y y r_   )r  r0  r6  r%  r
  r  r
  r  s     rc   drop_sequenceszSchemaManager.drop_sequences  sH    ==""))77 .>>&&u-. #re   c                 P     | j                   |fi | |r| j                          y y r_   )r  r
  )ra   r  r
  r  s       rc   drop_allzSchemaManager.drop_all$  s)    ((! re   r_   rj  r]  r-  )#rf   rg   rh   r  r  r  r  r
  r
  r
  r  r
  r
  r
  r  r
  r1  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r`   re   rc   rN   rN   6  s    /   __ E(TH	#FOA
1)-
")?
*;+
;+
6?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y)MetadataNc                    |t        d       |}|| _        || _        i | _        i | _        i | _        t               | _        g | _        g | _	        i | _
        i | _        i | _        i | _        g | _        |j                  j!                         | _        || _        || _        |s-| j$                  r| j%                  |      n| j)                         }|| _        d | _        |rt/        |      ng | _        || _        || _        || _        d x| _        | _        || _        |	| _        || _         || _!        || _"        || _#        i | _$        i | _%        tM        jN                  t.              | _(        tM        jN                  t.              | _)        i | _*        |
xs i | _+        |jY                         D ]  \  }}t[        | ||        t]        |j_                               | _0        g | _1        y )NzC"db_table" has been deprecated in favor of "table_name" for Models.)2r   r6  r  r,  r  combinedr}
  _sorted_field_listr
  sorted_field_namesr  _default_by_name_default_dict_default_callables_default_callable_listrf   rh  r  r\  r1  make_table_namer'  r  r\  rT  r  r  r  r
  r	  only_save_dirty
depends_onr
  r
  r
  r
  refsbackrefsr  defaultdictr=
  model_backrefs
manytomanyr  r  r  rC  keys_additional_keysrQ	  )ra   r6  r  r'  rT  r  r  r  r
  r
  r  db_tabler\  r
  r
  r
  r
  r1  r  r  r~   s                        rc   r  zMetadata.__init__+  s     6 7!J
 "2"4"$ ""$&(#NN((*	,"4!00 --e4#335  %(/tG}R&&377T0.$,**"	%11$7)55d;}" ,,. 	&JCD#u%	& #FKKM 2 re   c                     | j                   r!t        j                  dd| j                        S t	        | j
                  j                        S )Nr/  rf  )r1  r0  rf  r  rj  r6  rf   r  s    rc   r
  zMetadata.make_table_namen  s7    ""66)S$))44tzz2233re   c                 H   |s|st        d      d | j                  d fg}t               }t        j                  | f      }|r|j
                  n|j                  }|r |       }||v r|j                  |       |rQ|j                  j                         D ]4  \  }	}
|j                  |	|
df       |j                  |
j                         6 |rQ|j                  j                         D ]4  \  }	}
|j                  |	|
df       |j                  |
j                         6 |r|S )Nz)One of `refs` or `backrefs` must be True.FT)r  r6  rC  r  dequer  popleftr  r
  r  r  r%  r
  )ra   r
  r
  depth_firstr  r  queuer  currfkr6  s              rc   model_graphzMetadata.model_graphs  s   HHII

D)*u!!4'*)u}}8Dt|XHHTN!%!2 .IBLL"eU!34LL-. !%!4!4!6 .IBLL"eT!23LL-.  re   c                     |j                   }|| j                  |<   | j                  |   j                  |       | j                  |j
                  j                  |<   |j
                  j                  | j                     j                  |       y r_   )r  r
  r=
  r  r6  r%  r
  r
  ra   r-  rels      rc   add_refzMetadata.add_ref  si    oo		%##E*$(JJ		5!		  ,33E:re   c                    |j                   }| j                  |= | j                  |   j                  |       |j                  j
                  |= |j                  j                  | j                     j                  |       y r_   )r  r
  r=
  r  r%  r
  r
  r6  r   s      rc   
remove_refzMetadata.remove_ref  sa    ooIIe##E*IIu%		  ,33E:re   c                 6    || j                   |j                  <   y r_   r
  r  r  s     rc   add_manytomanyzMetadata.add_manytomany  s    &+

#re   c                 2    | j                   |j                  = y r_   r  r  s     rc   remove_manytomanyzMetadata.remove_manytomany  s    OOEJJ're   c                     | j                   _t        | j                  | j                  D cg c]  }|j                   c}| j
                  | j                  | j                        | _         | j                   S c c}w )N)r  r  rH  )r  rS   r'  r
  r  r  r6  r  r  s     rc   r&  zMetadata.table  s`    ;;040B0BCu""C{{zz--)DK {{	 Ds   A8
c                     t        d      )NzCannot set the "table".r  r  s     rc   r&  zMetadata.table  s    677re   c                     d | _         y 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                     || _         | `y r_   )r  r&  r  s     rc   r  zMetadata.schema  s    Jre   c                     | j                   r t        | j                   | j                        S t        | j                        S r_   )r  rb  r'  r  s    rc   rb  zMetadata.entity  s-    <<$,,88$//**re   c                     t        | j                        | _        | j                  D cg c]  }|j                   c}| _        y c c}w r_   )r\  r
  r
  r  r
  rp
  s     rc   _update_sorted_fieldszMetadata._update_sorted_fields  s5    !$"9"9:373E3E"Fa166"F"Fs   Ac                     t        |t              r|j                  }| j                  j	                  |g       }| j
                  j	                  |g       }||fS r_   )rv   
ModelAliasr6  r=
  r  r
  )ra   r6  forwardrefsr
  s       rc   get_rel_for_modelzMetadata.get_rel_for_model  sN    eZ(KKEoo))%4&&**5"5X&&re   c                 z   || j                   v r| j                  |       n,|| j                  v r| j                  | j                  |          t	        |t
              sp| `|j                  | j                  ||       || j                   |j                  <   || j                  |j                  <   || j                  |j                  <   || j                  |j                  <   | j                  j                  |       | j                          |j                   |j                   | j"                  |<   t%        |j                         rK|j                   | j&                  |<   | j(                  j+                  |j                  |j                   f       nZ|j                   | j,                  |<   |j                   | j.                  |j                  <   n|j                  | j                  ||       t	        |t0              r| j3                  |       y t	        |t4              r|j                  r| j7                  |       y y y r_   )r,  remove_fieldr
  r	  rv   r9
  r&  r  r6  r  r  r  r
  r
  r  r  ru  r  r  r
  r
  r  r
  r
  r6   r  r@   r  )ra   r
  r-  r	  s       rc   r&
  zMetadata.add_field  s   $j)4??*""4??:#>?%+
JJtzz:}=&+DKK

#.3DLL**+(-DMM%**%/4DMM%++,##**51&&(}}(',}}e$U]]+5:]]D++E2//66

8=8G H 16D&&u-8=D))%**5JJtzz:}=e_-LL/EJJ& 5?/re   c                    || j                   vry | `| j                   j                  |      }| j                  |j                  = | j
                  |= 	 | j
                  |j                  = | j                  j                  |       | j                          |j                  | j                  |= | j                  j                  |d       rCt        | j                        D ]*  \  }\  }}||k(  s| j                  j                  |        nD nB| j                  j                  |d        | j                   j                  |j"                  d        t%        |t&              r| j)                  |       y y # t        $ r Y w xY wr_   )r,  r&  r  r  r  r
  r   r
  r  r  ru  r  r
  r  r
  r
  r
  r  rv   r6   r  )ra   r
  originalr  r  rf  s         rc   r  zMetadata.remove_field  sO   T[[(J;;??:.LL--.MM*%	h223 	&&x0""$'h'&&**8T:$-d.I.I$J LAyaz)3377:
 ""&&x6%%))(-->h0OOH% 1!  		s   E1 1	E>=E>c                     t        |t              | _        | j                  ||       || _        |j
                  xs t        |j                        | _        y r_   )rv   r"   r
  r&
  r  r	  rY  r  )ra   r  r-  s      rc   r%
  zMetadata.set_primary_key  sI    '|<tU#    !  	re   c                     | j                   r:t        | j                  j                  D cg c]  }| j                  |    c}      S | j                  dur| j                  fS dS c c}w )NFr`   )r
  r]  r  rm
  r,  )ra   r
  s     rc   r  zMetadata.get_primary_keys  sp    ,0,<,<,H,HJ( ++j1 J K K +/*:*:%*GD$$&OROJs   A$c                 v    | j                   j                         }| j                  D ]  \  }} |       ||<    |S r_   )r
  rL  r
  )ra   ddr
  ru  s       rc   get_default_dictzMetadata.get_default_dict  s@    ""'')#'#>#> 	'J$YBzN	'	re   c           	         g }| j                   D ]e  }|j                  r|j                  s|j                  s)|j	                  t        | j                  |f|j                  |j                               g | j                  D ]  }t        |t              r|j	                  |       %t        |t        t        f      s<|\  }}g }|D ]`  }t        |t              r|j	                  | j                  |          2t        |t              r|j	                  |       Tt        d|z         |j	                  t        | j                  ||              |S )N)r  r  z;Expected either a field name or a subclass of Node. Got: %s)r  )r
  r  rv  r  r  rB   r6  r*  rT  rv   ra  r\  r]  r1  r
  r  )ra   rT  rq
  	index_objindex_partsr  r,  rV  s           rc   r
  zMetadata.fields_to_index#  s-   ## 	?A}}ww!((z$**qd18801 > ?		?  	NI)T*y)Ie}5&/#V' MD!$
3dmmD&9:#D$/d+( *EGK*L M MM z$**fVLM	N  re   c                     || _         || j                  j                  _        | `t        |t              r|j                  d }| j                  D ]
  } ||        y r_   )	r  r6  r  rH  r&  rv   rL   r  rQ	  )ra   r  hooks      rc   set_databasezMetadata.set_database>  sT     '/

$J h&8<<+?HNN 	DN	re   c                     || _         | `y r_   )r'  r&  )ra   r'  s     rc   set_table_namezMetadata.set_table_nameK  s    $Jre   )NNNNNNFNNNNNFFNT)TTTrj  )rf   rg   rh   r  r
  r
  r  r  r  r	  r  r&  r  deleterr  rb  r  r  r&
  r  r%
  r  r  r
  r$  r&  r`   re   rc   r
  r
  *  s    FJ<@AEDHEI$(AF4
2;;,(   \\8 8 ]]    ]]  + +G'!'F&:"P6re   r
  c                   (     e Zd Zg Z fdZd Z xZS )SubclassAwareMetadatac                 j    t        t        | 
  |g|i | | j                  j	                  |       y r_   )r  r)  r  r  r  ra   r6  r  r  r  s       rc   r  zSubclassAwareMetadata.__init__S  s/    #T3EKDKFK5!re   c                 6    | j                   D ]
  } ||        y r_   )r  )ra   r5   r6  s      rc   
map_modelsz SubclassAwareMetadata.map_modelsW  s    [[ 	EuI	re   )rf   rg   rh   r  r  r-  r  r  s   @rc   r)  r)  P  s    F"re   r)  c                       e Zd Zy)r.   Nr  r`   re   rc   r.   r.   \  r  re   r.   c                   l     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  rT  r  r  r  r\  r
  r
  r1  r
  r
  c                 |    |t         k(  s|d   j                  t         k(  rt        t            |||fi |S i }|j                  dd       }|r9|j                  j                         D ]  \  }}|j                  d      r|||<    t        |dd       }	d x}
}|D ]  }t        |d      s|j                  }|t        |j                        } j                  |j                  z  }|j                  D ]  }||v s||vs|j                  |   ||<     |j!                  d|j"                         |j!                  d|j$                         |j                  j                         D ]J  \  }}||v rt'        |t(              s|j*                  j                  r3t        |j*                        ||<   L  |j                  dd       xs i }|j-                  d	t.              }|j-                  d
t0              }t        t            |||fi | d x _         _         | fi | _         | fi | _        g } j                  j                         D ]V  \  }}t'        |t8              s|j                  r|	rt;        d|z        |j                  r||}
}	D|j=                  ||f       X |	'|dur |||j>                  fntA               df\  }	}
n&d}	n#t'        |	tB              rd}
d j                  _"        |	dur j                  jG                  |
|	       |D ]!  \  }} j                  jI                  ||       # t         d      rd|vrtK         d fd       d j                  z  }d jL                  i}tO        |tP        f|      }| _(         jS                          tT        jW                           S )Nr   r  rf  r  r%  r  r  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr#  __composite_key__Tr
  r  c                 F    dj                   d| j                         dS )Nr   r  r   )rf   r
  )ra   r  s    rc   rx   z#ModelBase.__new__.<locals>.<lambda>  s    dlln3. re   z%sDoesNotExistrg   ),rG  rf   r  r0  r  r  rY  r  rq  r   r  r%  r   r  inheritabler
  r  r  r  rv   r  r-  r  r
  rN   r  r  r  r2   r  r  r  r   r"   r
  r%
  r&
  r  rg   r  r.   validate_modelr+   r.
  )r  r  basesr_
  r  meta_optionsrH  r  rV  r  pk_name	parent_pkr	  	base_metaall_inheritablesoptsr  Schemar,  r  r~   r-  exc_name	exc_attrsexception_classr  s   `                        rc   r  zModelBase.__new__e  s   :q!2!2j!@C0dE5 ;39; ; yy&++- (1||C(&'LO( T=$/"")
  	1A1g&I $Y%:%:;	!oo	0J0JJO'' <'A\,A&/&8&8&;LO< ##J	0B0BC##Hi.>.>?****, 1A:xa/8K8K'0E!H	1	1(   !148>B 6A!!"8-H Is+CueNvN%))s{--	S*E*,,,,. 	0JC%'$$$%F%MNN&&"'BMM3,/	0 :%"+"7 !*9>>: )T2 G L))G&*CII#U?II%%gr2! 	-KD%IIe,	- 3	"z'>C &. / $cll2!3>>2	x,)D* 	""3'
re   c                      d| j                   z  S )Nz<Model: %s>)rf   r  s    rc   r  zModelBase.__repr__  s    t}},,re   c                 4    t        | j                               S r_   )ru  r  r  s    rc   r  zModelBase.__iter__  s    DKKM""re   c                 $    | j                  |      S r_   )	get_by_idra   r  s     rc   r  zModelBase.__getitem__  s    ~~c""re   c                 (    | j                  ||       y r_   )	set_by_id)ra   r  r~   s      rc   r  zModelBase.__setitem__  s    sE"re   c                 &    | j                  |       y r_   )delete_by_idrH  s     rc   r	  zModelBase.__delitem__  s    #re   c                 R    	 | j                  |       y# | j                  $ r Y yw xY wr  )rG  r.   rH  s     rc   r
  zModelBase.__contains__  s2    	NN3     		s    &&c                 >    | j                         j                         S r_   )r  r  r  s    rc   r  zModelBase.__len__  s    {{}""$$re   c                      yr>  r`   r  s    rc   __bool__zModelBase.__bool__  s    tre   c                 L    |j                  | j                  j                        S r_   )r'  r%  r&  r6  s     rc   r#  zModelBase.__sql__  s    wwtzz''((re   )rf   rg   rh   rC  r7  r  r  r  r  r  r	  r
  r  rP  __nonzero__r#  r  r  s   @rc   r0  r0  _  sI     : ;K
Yv-###%#K)re   r0  c                       e Zd Zd Zd Zd Zy)r%  c                 <    || _         || _        || _        || _        y r_   )r  r  r!  r"  )ra   r  r  r!  r"  s        rc   r  z_BoundModelsContext.__init__  s     "*re   c           	      4   g | _         | j                  D ]w  }| j                   j                  |j                  j                         |j                  | j                  | j                  | j                  t        | j                               y | j                  S N)rM  )	r  r  r  r%  r  r  r!  r"  rC  )ra   r6  s     rc   r  z_BoundModelsContext.__enter__  sx     [[ 	2E&&u{{';';<JJt}}dnnd6H6H #DKK 0  2	2 {{re   c           	          t        | j                  | j                        D ]A  \  }}|j                  || j                  | j
                  t        | j                               C y rV  )rw
  r  r  r  r!  r"  rC  )ra   r  r  r  r6  rK  s         rc   r  z_BoundModelsContext.__exit__  sS    T[[$*=*=> 	2IE2JJr4>>4+=+= #DKK 0  2	2re   N)rf   rg   rh   r  r  r  r`   re   rc   r%  r%    s    +2re   r%  c                      e Zd Zd Zd Zed        Zed1d       Zed        Zed        Z	ed1d       Z
ed1d	       Zed1d
       Zed        Zed1d       Zed1d       Zed        Zed        Zed        Zed1d       Zed1d       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#d2d Z$d! Z%ed"        Z&d3d#Z'd4d$Z(d% Z)d& Z*d' Z+d( Z,ed5d)       Z-ed6d*       Z.ed+        Z/ed3d,       Z0ed6d-       Z1ed.        Z2ed/        Z3ed0        Z4y)7rA   c                     |j                  dd       ri | _        n| j                  j                         | _        t	        | j                        | _        i | _        |D ]  }t        | |||           y )N__no_default__)r  r  r%  r  rC  r  r  r  )ra   r  r  r  s       rc   r  zModel.__init__  sb    ::&-DM JJ779DM$--( 	(AD!VAY'	(re   c                 `    | j                   j                  durt        | j                        S dS )NFzn/a)r%  r  rU  _pkr  s    rc   r
  zModel.__str__  s&     $

 6 6e Cs488}NNre   c                      y r_   r`   r  s    rc   r8  zModel.validate_model  s    re   Nc                     t        | |      S r_   )r  )r  r  s     rc   r  zModel.alias  s    #u%%re   c                 T    | }|s| j                   j                  }t        | ||      S )N)
is_default)r%  r
  ModelSelect)r  r,  ra  s      rc   r  zModel.select  s*    Z
YY,,F3:>>re   c           	         i }|r]t        |t              s|rt        d|z        |S |D ]6  }	 t        |t              r|n| j                  j
                  |   }||   ||<   8 |r'|D ]"  }	 ||   || j                  j
                  |   <   $ |S # t        $ r' t        |t              st        d|d|d      |}Y dw xY w# t        $ r ||   |t        | |      <   Y ww xY w)Nz/Data cannot be mixed with keyword arguments: %szUnrecognized field name: "z" in rR  )	rv   r  r  r2   r%  r
  r   ra  r   )r  r	  r  
normalizedr  r-  s         rc   _normalize_datazModel._normalize_data  s   
dD)$ &57;&< = = 	. $.sE$:S"%))"4"4S"9  %)I
5!	.  @@:@+Jsyy11#67@
     %c40(,/*7 8 8E	    @4:3KJwsC01@s#   +B*C -B=<B= CCc                 :    t        | | j                  ||            S r_   )ModelUpdatere  )r  _Model__datar   s      rc   r   zModel.update.      3 3 3FF CDDre   c                 :    t        | | j                  ||            S r_   )ModelInsertre  r  rh  r  s      rc   r  zModel.insert2  ri  re   c                     t        | ||      S r  )rk  r  rG  r,  s      rc   insert_manyzModel.insert_many6  s    3tV<<re   c                 ~    |D cg c]   }t        |t              rt        | |      n|" }}t        | ||      S c c}w r  )rv   r1  r   rk  )r  r9  r,  r-  r  s        rc   insert_fromzModel.insert_from:  sM     ,23"' +5UJ*G73& 3 33ug>>3s   %:c                 F     | j                   |fi |j                  d      S r  r  rl  s      rc   r   zModel.replace@  s#    szz&+F+77	BBre   c                 F    | j                  ||      j                  d      S )N)rG  r,  r  )ro  r  rn  s      rc   replace_manyzModel.replace_manyD  s"    $v6Y'	)re   c                     t        | ||      S r_   )ModelRaw)r  r'  rL  s      rc   rawz	Model.rawJ  s    S&))re   c                     t        |       S r_   )ModelDeleter^  s    rc   r  zModel.deleteN  s    3re   c                 :     | di |}|j                  d       |S )NT)force_insertr`   )save)r  r9  insts      rc   createzModel.createR  s     |U|		t	$re   c                    |t        ||      }n|g}t        | j                  j                        }| j                  j                  r1| j                  j
                  j                  }|j                  |       | j                  j                  j                  r3| j                  j
                  dur| j                  j                         }nd }|D cg c]  }| j                  j                  |    }}g |D ]I  }	t        |	t              rj                  |	j                         /j                  |	j                         K |D ]s  }
fd|
D        }| j!                  ||      j#                         }|s2|5t%        ||
      D ]0  \  }}t%        ||      D ]  \  }}t'        ||j                  |        2 u y c c}w )NFc              3   \   K   | ]  }D cg c]  }t        ||       c}   y c c}w wr_   )r   )rm  r6  rq
  r_
  s      rc   ro  z$Model.bulk_create.<locals>.<genexpr>s  s.      ) 277AgeQ'7 )7s   	,',)r,  )r    r\  r%  r
  r	  r  r  r  r  r  r  r,  rv   r6   r  r

  ro  r  rw
  r  )r  
model_list
batch_sizebatchesrm
  r;  	pk_fieldsr
  r,  r-  batchr  r   r*  r6  pk_fieldobj_idr_
  s                    @rc   bulk_createzModel.bulk_createX  s   !j*5G!lG39977899##ii++00Gw'99..99  -		224IIALM:#))"":.MM 	)E%1U112UZZ(		)  	>E)"')E//%/7??ACS_"%c5/ >JC.1)S.A >*6x}}f=>>	> Ns    F>c                    t        | j                  j                  t              rt	        d      |D cg c]-  }t        |t
              r| j                  j                  |   n|/ }}|D cg c]*  }t        |t              r|j                  n|j                  , }}|t        ||      }n|g}d}| j                  j                  }	|D ]  }
|
D cg c]  }|j                   }}i }t        ||      D ]x  \  }}g }|
D ][  }t        ||      }t        |t              s|j                  |      }|j!                  |	j                  |j                        |f       ] t#        |	|      }|||<   z || j%                  |      j'                  | j                  j                  j)                  |            j+                         z  } |S c c}w c c}w c c}w )NzGbulk_update() is not supported for models with a composite primary key.r   )rv   r%  r  r"   r  r1  r,  r6   r

  r  r    r\  rw
  r   ra  r  r  r   r   r)  r  r  )r  r  r,  r  rq
  r-  r_
  r  rx  r  r  r6  id_listr   r   r  r~   cases                     rc   bulk_updatezModel.bulk_update{  s   cii++\: 8 9 9
 "# *4Az)B#))""1%I # # /56%* *4E?)K%%jj! 6 6 !j*5G!lGYY"" 	E.34Uuyy4G4F"651 %t" BE#E40E%eT2 %u 5LL"++eii"8%!@A	B
 B $u% #**V$5..227;<79A	  =#6 5s   2G,/GGc                     t        | d      S r	  )NoopModelSelectr^  s    rc   noopz
Model.noop  s    sB''re   c                 &   | j                         }|r\t        |      dk(  r?t        |d   t              r,|j	                  | j
                  j                  |d   k(        }n |j                  | }|r |j                  di |}|j                         S )Nr   r   r`   )	r  r   rv   r   r)  r%  r  r*  r  )r  r9  filterssqs       rc   r  z	Model.get  sz    ZZ\5zQ:eAh#<XXcii33uQx?@RXXu%%W%Bvvxre   c                 F    	  | j                   |i |S # t        $ r Y y w xY wr_   )r  r.   )r  r9  r  s      rc   get_or_nonezModel.get_or_none  s/    	377E-W-- 		s    	  c                 R    | j                  | j                  j                  |k(        S r_   )r  r%  r  r  r  s     rc   rG  zModel.get_by_id  s     wwsyy,,233re   c                     || j                  |      j                         S | j                  |      j                  | j                  j
                  |k(        j                         S r_   )r  r  r   r)  r%  r  )r  r  r~   s      rc   rJ  zModel.set_by_id  sP    ;::e$,,..JJu%U39900C78Dre   c                     | j                         j                  | j                  j                  |k(        j	                         S r_   )r  r)  r%  r  r  r  s     rc   rL  zModel.delete_by_id  s1    zz|!!#))"7"72"=>FFHHre   c                 J   |j                  di       }| j                         }|j                         D ]#  \  }}|j                  t	        | |      |k(        }% 	 |j                         dfS # | j                  $ r 	 |r|j                  |       | j                  j                  j                         5   | j                  di |dfcd d d        cY S # 1 sw Y   nxY wY y # t        $ r4}	 |j                         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  r)  r   r  r.   r   r%  r  r  r~  r;   )r  r  r  r9  r-  r~   excs          rc   get_or_createzModel.get_or_create  s   ::j"-

"LLN 	>LE5KKU 3u <=E	>	99;%% 
		MM(+YY''..0 6%3:://56 6 6 6!  99;--'' I
	s`   A, ,D"<7C!3C	C!D"C	C!!	D+D<D=D"DDDD"c                 B     | j                         j                  |i |S r_   )r  r*  )r  dq_nodesr  s      rc   r*  zModel.filter  s     "szz|""H888re   c                     | j                   j                  dur*t        | | j                   j                  j                        S y re  )r%  r  r   r 	  r  s    rc   get_idzModel.get_id  s8    
 ::!!.4!7!7!A!ABB /re   c                 Z    t        | | j                  j                  j                  |       y r_   )r  r%  r  r  r  s     rc   r\  z	Model._pk  s    djj,,1159re   c                 H    | j                   j                  | j                  k(  S r_   )r%  r  r\  r  s    rc   _pk_exprzModel._pk_expr  s    zz%%11re   c                     i }|D ]V  }t        |t              r| j                  j                  |   }|j                  |v s;||j                     ||j                  <   X |S r_   )rv   r1  r%  r
  r  )ra   
field_dictonlynew_datar-  s        rc   _prune_fieldszModel._prune_fields  s^     	>E%,

++E2zzZ''1%**'=$		>
 re   c           	         | j                   j                  D ]f  }|j                  }||v xr& ||   d u xr | j                  j	                  |      d u}|s>t        | |t        | |             | j                  |   ||<   h y 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+00Kz) :;'4/:  -T9  k74+EF*.--*D
;'	Ere   c                    | j                   j                         }| j                  j                  dur#| j                  j                  }| j                  }nd x}}|| j                  ||      }nQ| j                  j                  r;|s9| j                  || j                        }|s| j                  j                          y| j                  |       d}| j                  j                  r||j                  |j                  d        ||s| j                  j                  r$|j                  D ]  }|j                  |d         n|j                  |j                  d        |st!        d       | j"                  di |j%                  | j'                               j)                         }n|g | j*                  di |j)                         }|e| j                  j                  s|M|| _        | j                  j-                  |j                         n  | j*                  di |j)                          | xj                  t/        |      z  c_        |S )NFr   zno data to save!r`   )r  rL  r%  r  r\  r  r
  dirty_fieldsr  r_	  r  r	  r  r  r
  rm
  r  r   r)  r  r  r  r*
  rC  )	ra   r{  r  r  r  pk_valuerG  pk_part_namer  s	            rc   r|  z
Model.save  s   ]]'')
::!!.zz--HxxH"&&Hx++J=JZZ''++J8I8IJJ!!#((4::$$)9NN8==$/zz''$,$8$8 7LNN<67 x}}d3 !3444;;,,224==?CKKMD!*z*224B~4::#<#<#+#3##HMM2DKK%*%--/s:&re   c                 ,    t        | j                        S r_   )rY  r  r  s    rc   is_dirtyzModel.is_dirty3  r  re   c                     | j                   j                  D cg c]  }|j                  | j                  v s| c}S c c}w r_   )r%  r
  r  r  rp
  s     rc   r  zModel.dirty_fields6  s/    ::33Maqvv7LMMMs   >>c              #     K   t        |       }t        |       d fg}i }t               }|r|j                         \  }}||v r|j                  |       |j                  j
                  j                         D ]  \  }}	|	|u s|'|| j                  |j                  j                     k(  }
n||z  }
|	j                  |	j                  j                        j                  |
      }|j                  r|s{|j                  |	g       j                  |
|f       |j                  |	|f        |rt!        t#        |            D ]"  }|j%                  |d      D ]  \  }}||f  $ y wr	  )r  rC  r  r  r%  r
  r  r  r  r  r  r  r)  r  r  r  r  r
  r  )ra   search_nullablemodel_classr  queriesr  ry  r9  r
  r  r;  r  r   r  qs                  rc   dependencieszModel.dependencies:  sQ    4jt*d#$u 99;LE5}HHUO!&!5!5!;!;!= 	8I+u}$--0A0A"BBD;D%,,Y__-H-HI"U4[ ww/&&y"5<<dBZHLL)X!67	8   +d+, 	A Q+ A!e	s   C0E)3:E)/:E)c                    |r| j                         D ]  \  }}|j                  }|j                  r>|s< |j                  di |j                  d ij                  |      j                          \|j                         j                  |      j                           t        |       j                         j                  | j                               j                         S r	  )
r  r6  r  r   r  r)  r  r  r  r  )ra   r  delete_nullabler9  r
  r6  s         rc   delete_instancezModel.delete_instanceT  s    !..0 :	r77? ELL3BGGT?399%@HHJLLN((/779: Dz  "((9AACCre   c                 D    t        | j                  | j                  f      S r_   )r  r  r\  r  s    rc   r  zModel.__hash__^  s    T^^TXX.//re   c                     |j                   | j                   k(  xr) | j                  d uxr | j                  |j                  k(  S r_   )r  r\  r  s     rc   r  zModel.__eq__a  s=    OOt~~- "HHD "HH		!	#re   c                     | |k(   S r_   r`   r  s     rc   r  zModel.__ne__g  s    5=  re   c                    |j                   j                  G|j                   j                  r1	 |j                  t	        | |j                   j                              S |j                  t	        t        | | j                  j                  j                        | j                  j                  j                              S # t
        t        f$ r Y sw xY w)Nr,  )r  r-  r  r'  rY   r  r  r   r%  r  r  r  r6  s     rc   r#  zModel.__sql__j  s     99*syy/C/CwwuTSYY5H5HIJJ wwuWT4::+A+A+F+FG'+zz'='='F'FH I 	I z* s   /C   CCc                 >   | j                   j                  |u}| j                   j                  |       |s|re|
t               }| j                   j	                  ||      }|D ]7  \  }}}	||vs|j                   j                  |       |j                  |       9 |S )N)r
  r
  )r%  r  r$  rC  r
  r  )
r  r  r!  r"  rM  is_differentGrf  r6  
is_backrefs
             rc   r  z
Model.bind~  s    yy))9		x(5		%%9}%MA() ($5*(KK,,X6LL'( re   c                      t        | f|||      S r_   r$  )r  r  r!  r"  s       rc   r  zModel.bind_ctx  s    "C68YNNre   c                     | j                   }| j                  j                  j                  |j                  j
                  |j                        S r_   )r%  r  r  r  r&  rf   r  )r  Ms     rc   r  zModel.table_exists  s6    II{{##001A1A188LLre   c                 \   d|v rt        d       |j                  d      }|r1| j                  j                  j                  s| j                         ry | j                  j                  r&|j                  d| j                  j                          | j                  j                  |fi | y )Nfail_silentlyzU"fail_silently" has been deprecated in favor of "safe" for the create_table() method.r
  )
r   r  r  r  r.  r  r%  r
  r  r
  )r  r  r  s      rc   r  zModel.create_table  s    g% C D;;/D,,>>!99{CII,?,?@t/w/re   c                    |r1| j                   j                  j                  s| j                         sy | j                  j
                  r&|j                  d| j                  j
                          | j                   j                  ||fi | y )Nr
  )r  r  r/  r  r%  r
  r  r
  )r  r  r
  r  s       rc   r  zModel.drop_table  sh    ,,<<##%99{CII,?,?@T>=W=re   c                 <     | j                   j                  di | y r	  )r  r1  )r  r  s     rc   r1  zModel.truncate_table  s    """-W-re   c                     t        | |fi |S r_   )rB   r  r,  r  s      rc   rv  zModel.index  s    #v000re   c                    t        |      dk(  rBt        |d   t        t        f      r)| j                  j
                  j                  |d          y | j                  j
                  j                  t        | |fi |       y rF  )r   rv   rQ   r9   r%  rT  r  rB   r  s      rc   	add_indexzModel.add_index  s_    v;!
6!9sEl CII$$VAY/II$$ZV%Fv%FGre   r_   )FNrj  r]  )TTNr-  )5rf   rg   rh   r  r
  classmethodr8  r  r  re  r   r  ro  rq  r   rt  rw  r  r~  r  r  r  r  r  rG  rJ  rL  r  r*  r  r  r\  r  r  r  r  r|  r  r  r  r  r  r  r  r#  r  r  r  r  r  r1  rv  r  r`   re   rc   rA   rA     s   	(O   & & ? ?  4 E E E E = = ? ?
 C C ) )
 * *      
  >  >D $ $L ( ( 
 
   4 4 D D I I  ( 9 9C 6
CZZ: :2	E)V! N N4D0#!I(   O O M M 0 0 > > . . 1 1 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
y)r  z3Provide a separate reference to a model in a query.Nc                 @    || j                   d<   || j                   d<   y )Nr6  r  )rY  )ra   r6  r  s      rc   r  zModelAlias.__init__  s    !&g!&gre   c                    | j                   f| j                   j                  z   D ]6  }	 |j                  |   }t        |t              r|j                  d |       c S 8 t        | j                   |      }t        |t              r2t        j                  | |      | j                  |<   | j                  |   S |S # t        $ r Y w xY wr_   )r6  rV  rY  rv   r  r{  r   r   r2   
FieldAliasr~  )ra   r   r	  r  
model_attrs        rc   r   zModelAlias.__getattr__  s    
 **!5!55 	Ajj&c?3;;tT22 4	 TZZ.
j%(","3"3D*"EDMM$==&&  s   0B88	CCc                     t        d      )Nz'Cannot set attributes on model aliases.r  r   s      rc   r   zModelAlias.__setattr__  s    FGGre   c                 |    | j                   j                  j                  D cg c]  }t        | |       c}S c c}w r_   )r6  r%  r
  r   )ra   rx  s     rc   get_field_aliaseszModelAlias.get_field_aliases  s-    *.***:*:*M*MNQa NNNs   9c                 >    |s| j                         }t        | |      S r_   )r  rb  )ra   	selections     rc   r  zModelAlias.select  s     ..0I4++re   c                 &     | j                   di |S r	  )r6  )ra   r  s     rc   r  zModelAlias.__call__  s    tzz#F##re   c                    |j                   t        k(  r|j                  | j                        S | j                  r| j                  |j
                  | <   |j                   t        k(  rc|j                  | j                  j                  j                        j                  d      j                  t        |j
                  |                S |j                  t        |j
                  |                S r  )r  rB  r'  r6  r  r  r@  r%  rb  r  rb  r6  s     rc   r#  zModelAlias.__sql__  s    99$774::&&::&*jjCd#99$S))001WV_S 1 1$ 789; 776#"3"3D"9:;;re   r_   )rf   rg   rh   r  r  r   r   r  r  r  r#  r`   re   rc   r  r    s*    ='&HO,
$<re   r  c                   F    e Zd Zd Zed        Zd Zd Zd Zd Z	d Z
d Zy	)
r  c                 B    || _         |j                  | _        || _        y r_   )rM  r6  r-  )ra   rM  r-  s      rc   r  zFieldAlias.__init__  s    \\

re   c                 >     G d d| t        |            } |||      S )Nc                       e Zd Zy)&FieldAlias.create.<locals>._FieldAliasNr  r`   re   rc   _FieldAliasr    s    re   r  )r  )r  rM  r-  r  s       rc   r~  zFieldAlias.create  s!    	#tE{ 	65))re   c                 B    t        | j                  | j                        S r_   )r  rM  r-  r  s    rc   rZ  zFieldAlias.clone  s    $++tzz22re   c                 8    | j                   j                  |      S r_   )r-  r	  r  s     rc   r	  zFieldAlias.adapt  s    4::#3#3E#::re   c                 8    | j                   j                  |      S r_   )r-  r$  r  s     rc   r$  zFieldAlias.python_value  s    $***A*A%*H#Hre   c                 8    | j                   j                  |      S r_   )r-  r  r  s     rc   r  zFieldAlias.db_value  s    djj&9&9%&@@re   c                 P    |dk(  r| j                   S t        | j                  |      S )Nr6  )rM  r   r-  r   s     rc   r   zFieldAlias.__getattr__  s"    "got{{L74::t3LLre   c                 t    |j                  t        | j                  | j                  j                              S r_   )r'  r!   rM  r-  r  r6  s     rc   r#  zFieldAlias.__sql__  s&    wwvdkk4::+A+ABCCre   N)rf   rg   rh   r  r  r~  rZ  r	  r$  r  r   r#  r`   re   rc   r  r    s7    
 * *
3 ;H@MDre   r  c                      t                t               g  fdd }t         |      D ]
  } |        S )Nc                 R   | v r| vrj                  |        | j                  j                  j                         D ]  \  }}|j                  r |        | j                  j
                  r#| j                  j
                  D ]
  } |        j                  |        y y y r_   )r  r%  r
  r  r  r
  r  )r6  r  r  
dependencydfsr  r.  r  s       rc   r  zsort_models.<locals>.dfs  s    F?uD0HHUO*/++*:*:*@*@*B #&Y #++	N	#
 {{%%"'++"8"8 $J
O$OOE"  1?re   c                 Z    | j                   j                  | j                   j                  fS r_   )r%  r  r'  )r   s    rc   rx   zsort_models.<locals>.<lambda>   s    qww||QWW%7%78 re   r  )rC  r  )r  r%  r   r  r.  r  s   `  @@@rc   r
  r
    sF    [F5DH# 9EF& AOre   c                   h     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        | 
  |i | | j                  s&| j                  j
                  j                  | _        y y r_   )r  r  r  rH  r6  r%  r  r  s      rc   r  z_ModelQueryHelper.__init__)  s;    /@@~~!ZZ--66DN re   c                 d    t         j                  | _        || j                  | _        y || _        y r_   )r  r@  r  r6  r  r  s     rc   r5  z_ModelQueryHelper.objects.  s%    *5*=DJJ;re   c                 P   | j                   xs | j                  }|t        j                  k(  r| 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                        S |t        j                  k(  r,t        || j                  | j                  | j                        S t!        d|z        r  )r  r  r  rA  _get_model_cursor_wrapperr>  ModelDictCursorWrapperr6  ra  r=  ModelTupleCursorWrapperr?  ModelNamedTupleCursorWrapperr@  ModelObjectCursorWrapperr  r  r  s      rc   r  z%_ModelQueryHelper._get_cursor_wrapper3  s    >>:T%:%:syy 11&99!)&$**dooNN"*64::tOO(/

04A A(+FDJJ,0OOT=N=NP P ;hFGGre   c                 F    t        || j                  g | j                        S r_   )r  r6  r  s     rc   r  z+_ModelQueryHelper._get_model_cursor_wrapperD  s    '

B

KKre   r_   )rf   rg   rh   r  rA  r  r  ra  rL  r5  r  r  r  r  s   @rc   r  r  &  s8    yy7
 
YYO OH"Lre   r  c                   $     e Zd Z fdZd Z xZS )rv  c                 N    || _         d| _        t        t        |   d||d| y )Nr`   r  )r6  ra  r  rv  r  )ra   r6  r'  rL  r  r  s        rc   r  zModelRaw.__init__I  s*    
h&H3vHHre   c                     	 | j                         d   S # t        $ rA | j                         \  }}| j                  j	                  | j                  d|d|      w xY w)Nr   . instance matching query does not exist:
SQL: 	
Params: )r  r\  r'  r6  r.   r  s      rc   r  zModelRaw.getN  sc    	E<<>!$$ 	E((*KC**))+/::sF+D E E	Es
    A
A)rf   rg   rh   r  r  r  r  s   @rc   rv  rv  H  s    I
Ere   rv  c                   t    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y)BaseModelSelectc                 2    t        | j                  | d|      S )Nr:  ModelCompoundSelectQueryr6  r   s     rc   r=  zBaseModelSelect.union_allY      '

D+sKKre   c                 2    t        | j                  | d|      S )Nr;  r  r   s     rc   r@  zBaseModelSelect.union]  s    '

D'3GGre   c                 2    t        | j                  | d|      S )Nr<  r  r   s     rc   r?  zBaseModelSelect.intersecta  r  re   c                 2    t        | j                  | d|      S )Nr=  r  r   s     rc   r@  zBaseModelSelect.except_e  s    '

D(CHHre   c                 d    | j                   s| j                          t        | j                         S r_   )r  r  ru  r  s    rc   r  zBaseModelSelect.__iter__i  s%    ##LLND(())re   c                      t        | g|i |S r_   )rI   )ra   
subqueriesr  s      rc   rI   zBaseModelSelect.prefetchn  s    4z4V44re   Nc                     | j                  dd      }d |_        	 |j                  |      d   S # t        $ rA |j	                         \  }}| j
                  j                  |j
                  d|d|      w xY w)Nr   r   r  r  )r*  r  r  r\  r'  r6  r.   )ra   r  rZ  r'  rL  s        rc   r  zBaseModelSelect.getq  s~    a# $	F==*1-- 	F))+KC**))+0;;V+E F F	Fs
   / A
A9c                 f    	 | j                  |      S # | j                  j                  $ r Y y w xY w)N)r  )r  r6  r.   r  s     rc   r  zBaseModelSelect.get_or_none|  s4    	88X8..zz&& 		s    00c           
      h   g }|D ]  }t        |      r&|j                  |j                  j                         4t	        |t
              rK|j                  st        d      |j                  |j                  D cg c]  }t        ||       c}       |j                  |        || _
        y c c}w r  )r$  r5  r%  r
  rv   rS   r  r  r   r  rR  r  s        rc   r{  zBaseModelSelect.group_by  s     	(F : :;FE*$ &1 2 2 17!B%- ")!: !B C '	( "	!Bs   9B/
r_   )rf   rg   rh   r=  r   r@  r  r?  r  r@  r  r  rI   r  r  ra  rL  r{  r`   re   rc   r  r  X  s[    LGHFLGIG*
5	F 
YY" "re   r  c                   $     e Zd Z fdZd Z xZS )r  c                 :    || _         t        t        |   |i | y r_   )r6  r  r  r  r+  s       rc   r  z!ModelCompoundSelectQuery.__init__  s    
&6GGre   c                 8    | j                   j                  |      S r_   )r  r  r  s     rc   r  z2ModelCompoundSelectQuery._get_model_cursor_wrapper  s    xx11&99re   )rf   rg   rh   r  r  r  r  s   @rc   r  r    s    H:re   r  c           
         g }| D ]  }t        |      r&|j                  |j                  j                         4t	        |t
              r |j                  |j                                dt	        |t              r@|j                  r4|j                  |j                  D cg c]  }t        ||       c}       |j                  |        |S c c}w r_   )r$  r5  r%  r
  rv   r  r  rS   r  r   r  )fields_or_modelsr,  fmr  s       rc   _normalize_model_selectr    s    F B<MM"((001J'MM"..01E"r{{MMr{{C72s+CDMM" M Ds   C
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 )rb  c                 ~    |x| _         | _        i | _        || _        t	        |      }t
        t        |   |g|       y r_   )r6  	_join_ctx_joins_is_defaultr  r  rb  r  )ra   r6  r  ra  r,  r  s        rc   r  zModelSelect.__init__  s>    &++
T^%()9:k4)5'6:re   c                 x    t         t        |          }|j                  rt	        |j                        |_        |S r_   )r  rb  rZ  r  r  r  s     rc   rZ  zModelSelect.clone  s.    k4.0<<-ELre   c                 h    |s| j                   s"d| _         t        |      }t        t        |   | S | S re  )r  r  r  rb  r  )ra   r  r,  r  s      rc   r  zModelSelect.select  s8    4#3#3$D,-=>Fd2F;;re   c                 H    d| _         t        |      }t        t        |   | S re  )r  r  r  rb  r  )ra   r  r,  r  s      rc   r  zModelSelect.select_extend  s'     (1[$5v>>re   Nc                 >    || j                   | _        | S || _        | S r_   )r6  r  r6  s     rc   switchzModelSelect.switch  s$    '*{ 9<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 y)NTFre  )r$  rv   rS   r  r  r6  rb  )ra   r
  s     rc   
_get_modelzModelSelect._get_model  sg    C=9U#

::u$$Z(99e##[)99e##re   c           	         t        |t              }|r |xs |j                  }|j                         }| j	                  |      \  }}| j	                  |      \  }}	|r|r|| _        |}
|r|	st        |t              r||j                  |u r$|j                  j                  |j                     }nG|j                  |u r$|j                  j                  |j                     }nt        d|d|d|d      d }nt        |t              r|}d }nd }| j                  ||||      \  }}||rdnd}|	rdnd}|r7t        |t        ||            }t        |t        |j                  |            }n6t        |t        ||            }t        |t        |j                  |            }||k(  }|s(||s|j                  }n|j                  j                  }no|rm|k||j                   k(  r\|sZt#        d|d|d	      t        |t$              r8t&        }
|xs |j                  }|s t        |t(              r|xs |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   rG  r  r  r  r  r!   rM  r%  r  r  r   r2   _generate_on_clauser   r  r

  r  r  r  rS   rf   )ra   r
  r  r  r   on_aliasr6
  src_is_model
dest_modeldest_is_modelr  r
  fk_fieldr  src_attr	dest_attrr  r   s                     rc   _normalize_joinzModelSelect._normalize_join  s3    b%($299DB #'//#"6	<$(OOD$9!
M!DN$K !]
2v8N99#(66rww?HYY$&)//77@H(*,i*E F F B&#'#;#;:x$5 Hj z%16}&3F	!$)(DEC!#wx/A/A8'LMC!#wx'BCC!$0B0BI(NOCSj'
#==D%++00Dh2H333J =A8"M N N f%K&4;;DJtU3,t}}D+&&re   c                 V   |j                   }dx}}||j                  v r|j                  |   }n||j                  v r|j                  |   }d}|s|yt        d|d|d      |At	        |t
              r|j                  n|}|D 	cg c]  }	|	|u s|r|	j                  |u r|	 }}	t        |      dk(  r|d   |fS |B|D ]+  }
|
j                  |j                   j                  k(  s'|
|fc S  t        d	|d|d
      d }t	        |t              r|j                  |j                  }}t        |      }t	        |t              r(t	        |t
              r|j                  n|}||v r|}|dfS t	        |t              r$t	        |t
              r|j                  n|}||v r|}|dfS c c}	w )NFTre  z#Unable to find foreign key between z and z,. Please specify an explicit join condition.r   r   z"More than one foreign key between z*. Please specify which you are joining on.)r%  r=
  r
  r  rv   r  r-  r  r   r  r
  r  r   rC  r2   )ra   r
  r  r
  r  rH  r  r  r  rq
  r
  r  r   fk_setlhs_frhs_fs                   rc   r!  zModelSelect._generate_on_clause  s   yy!&&
Y 4??"-IT(((++D1IJ~"!4) * * ! )38Z(Hhnn# $- Dqv+$)@  DI D y>QQ<++:   *77djjoo-z>)* !4) * * b*%vvrvvC ^F#u%%/Z%@		cF?$H  C'%/Z%@		cF?$HQDs   	F&c                    || j                   n|}|t        j                  k(  s|t        j                  k(  rd}ny|t        j                  k7  rY| j                  ||||      \  }}}|rL| j                  j                  |g        | j                  |   j                  ||||f       n|t        d      | j                  st        d      | j                  j                         }| j                  j                  t        ||||             y )NTz)Cannot specify on clause with cross join.r  )r  r?   r2  r:  r8  r)  r  r  r  r  ru  r  r  )ra   r  r  r  r
  r   r  r  s           rc   rS  zModelSelect.joinX  s     #dnn$	T5F5F(FB$**$$($8$8dB$M!Bk&&sB/C ''t[)(LM^HII566""$tD$	2>?re   c                 H    | j                  |t        j                  |||      S r_   r  )ra   r  r  r
  r   s        rc   r  zModelSelect.left_outer_joinl  s    yytC>>re   c                 ,    | j                  |||||      S r_   )rS  )ra   r
  r  r  r  r   s         rc   	join_fromzModelSelect.join_fromo  s    yyy"c488re   c                    t        | j                        dk(  r8| j                  s,t        || j                  | j
                  | j                        S t        || j                  | j
                  | j                  | j                        S r  )r   ru  r  r  r6  ra  ModelCursorWrapperr  s     rc   r  z%ModelSelect._get_model_cursor_wrapperr  sg    t1$T[[+FDJJ,0OOTZZI I!&$**doo"&//4;;@ 	@re   c                     | j                   }| j                  j                  |g       D ]  \  }}}}||k(  s| c S   | j                  |      j                  |fd|i|j                  |      S )Nr  )r  r  r  r  rS  )	ra   lmrmr  join_kwargsjoin_ctxr  rf  r  s	            rc   ensure_joinzModelSelect.ensure_joiny  sp    >>'+{{r2'> 	#D![!rz	 $t{{2##B=2==DDXNNre   c                    g }g }t         t        f}t        |j                               D ]9  \  }}| j                  }d|v r:|j                  dd      d   t        v r|j                  dd      \  }}t        |   }n|
t        d   }n	t        d   }d|vrt        ||      }	n|j                  d      D ]  }
| j                  j                  |d      D ]=  \  }}}}t        ||
d       }	||
k(  s!t        |t              s+|j                  |
k(  s;|} ^ t        ||
      }	|nt        |	|      s{|	j                  }|j                  |	        |j                   |	|             < ||fS #  Y xY w)Nr
  r   r  r  r`   )r6   r  r  r  r6  rsplitr-   r   r   r  r  rv   r  r  r  r  )ra   qdictr  joinsfksr  r~   r
  r  r  piecer  r   rf  s                 rc   convert_dict_to_nodez ModelSelect.convert_dict_to_node  st   0 / 	0JC::Ds{szz$215C**T1-R^%%3 %T3/
 YYt_ 5E,0KKOOD",E 5(dAq*1$t*DZ5=Zj-I-1ZZ5-@#'D!5 &-T5%9
 ,J1L#-#7#7D!LL45 LLJ./9	0: e| %s   E++E/	c                    |rE|rCt        t        j                  |D cg c]  }|j                          c}      t	        di |z  }nm|rBt        t        j                  |D cg c]  }|j                          c}      t               z  }n)|rt	        di |t               z  }n| j                         S t        j                  |g      }g }t               }|r|j                         }t        |t              s#d|j                  fd|j                  ffD ]  \  }	}
t        |
t              r| j                  |
j                        \  }}|D ])  }||vs|j!                  |       |j#                  |       + t        t        j                  |      }|
j$                  rt'        |      }t)        ||	|       |j!                  |
        |r|r|s|j                  }| j                         }|D ]t  }t        |t*              r|j,                  |j.                  }}|}n4t        |t0              r$|j,                  |j.                  }}|j2                  }|j5                        }v |j7                  |      S c c}w c c}w )Nr  r   r`   )rt   r  r  rZ  r0   rC  r  r
  rC  r
  rv   r
  r  r   r@  r9  r  r  r  r\  r  r6   r6  r  r  r-  r9  r)  )ra   r  r  r  dq_noder  dq_joins
seen_joinsr
  sider?  r9  r=  rS  r  r-  r5  r6  	field_objs                      rc   r*  zModelSelect.filter  s   Fhmm-FAaggi-FG|F|$Ghmm-FAaggi-FG!|$Gl6lZ\1G::< wi(U
99;DdJ/!& 1E4883DE $eeR(#'#<#<U[[#ILE5 % 1z1$OOD1&NN401 "(u!=J~~%,Z%8
D$
3HHUO$	 ( 6kkG

 	9E%1eooB!	E?3eooB!KK	%%b"i8E	9 {{7##] .G .Gs   I7
"I<
c                 T     | j                   j                  j                  || |fi |S r_   )r6  r  r
  )ra   r  r  rH  s       rc   r  zModelSelect.create_table  s(    1tzz!!11$dKdKKre   c                 8   | j                   rk|rit        | j                        dkD  rQ| j                  j                  j
                  dur/|j                  | j                  j                  j
                        S |j                  t        | j                              S r  )r  r   ra  r6  r%  r  r'  r(  r  s      rc   r  zModelSelect.__sql_selection__  sl    DOO0Dq0H::''u4774::++7788ww}T__566re   r  r_   r  r  rj  )rf   rg   rh   r  rZ  r  r  r  r  r)  r!  ra  rL  r?   r3  rS  r  r1  r  r9  r@  r*  r  r  r  r  s   @rc   rb  rb    s    ;?
	A'F?B 
YY#'::$Dt @ @&? .2ZZDt 9@O!F1$fL7re   rb  c                       e Zd Zd Zd Zy)r  c                 `    | j                   j                  j                  j                  |      S r_   )r6  r%  r  r)  r6  s     rc   r#  zNoopModelSelect.__sql__  s#    zz((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    s    >%re   r  c                   .     e Zd Z fdZ fdZd Z xZS )_ModelWriteQueryHelperc                 B    || _         t        t        |   |g|i | y r_   )r6  r  rM  r  r+  s       rc   r  z_ModelWriteQueryHelper.__init__  s$    
$d4ULTLVLre   c                     g }|D ]D  }t        |      r&|j                  |j                  j                         4|j	                  |       F t        t        |   | S r_   )r$  r5  r%  r
  r  r  rM  r  )ra   r  r  r  r  s       rc   r  z _ModelWriteQueryHelper.returning  sU     	#D~TZZ556T"		#
 +T<eDDre   c                 v    | j                   j                  j                  }|j                  |j                  |<   y r_   )r6  r%  r&  rf   r  )ra   r7  r&  s      rc   r  z'_ModelWriteQueryHelper._set_table_alias  s+    

  &&#(>>% re   )rf   rg   rh   r  r  r  r  r  s   @rc   rM  rM    s    ME2re   rM  c                       e Zd Zy)rg  Nr  r`   re   rc   rg  rg        re   rg  c                   L     e Zd Zej                  Z fdZ fdZd Zd Z	 xZ
S )rk  c                 0   t        t        | 
  |i | | j                  v| j                  j
                  j                  U| j                  j
                  j                  j                  r*| j                  j
                  j                         | _        y y y y r_   )	r  rk  r  ra  r6  r%  r  r  r  r  s      rc   r  zModelInsert.__init__  sw    k4)4:6:??"tzz'7'7'@'@'Lzz((99"&**"2"2"C"C"E : (M"re   c                 j    |r!| j                   t        j                  | _         t        t        |   | S r_   )r  r  rA  r  rk  r  )ra   r  r  s     rc   r  zModelInsert.returning	  s.    
 / YYDN[$19==re   c                 B    | j                   j                  j                  S r_   )r6  r%  r  r  s    rc   r  zModelInsert.get_default_data  s    zz(((re   c                     | j                   j                  j                  }| j                   j                  j                  r|dd  S |S r  )r6  r%  r
  r	  )ra   r,  s     rc   r  zModelInsert.get_default_columns  s:    !!//!ZZ--<<vabzH&Hre   )rf   rg   rh   r  r=  r  r  r  r  r  r  r  s   @rc   rk  rk     s#    yyF>)Ire   rk  c                       e Zd Zy)ry  Nr  r`   re   rc   ry  ry    rR  re   ry  c                   8     e Zd Z fdZd ZddZd Zd Z xZS )rE
  c                     || _         || _        |j                  j                  j                  | _        |j                  j                  j                  | _        t        t        | *  ||fg|i | y r_   )	_instance	_accessorr>
  r  r  	_src_attrr?
  
_dest_attrr  rE
  r  )ra   ry  accessorr  r  r  r  s         rc   r  zManyToManyQuery.__init__  s^    !!!2277"**4499ot-cC6KDKFKre   c                 ~    t        |d   t              r$|D cg c]  }t        || j                         c}S |S c c}w r  )rv   rA   r   r^  )ra   model_or_id_listr  s      rc   _id_listzManyToManyQuery._id_list&  s:    &q)51=MNcGC1NN Os   :c                    |r| j                          | j                  }t        | j                  | j                        }t        |t              rq|j                  t        |      |j                  j                        }|j                  j                  |j                  |j                  g|      j                          y t        |      }|sy | j!                  |      D cg c]0  }|j                  j"                  ||j                  j"                  |i2 }}|j                  j%                  |      j                          y c c}w )N)r,  r9  )r_	  r\  r   r[  r]  rv   r9  r  rY   r?
  r  r5
  rq  r>
  r  r_  rb  r  ro  )ra   r~   rI
  r_  rG
  r9  rel_idinsertss           rc   r  zManyToManyQuery.add+  s   JJL>>8e[)MMf  **,E "".. )9)9: / $WY 'E&
 #mmE24  $$f  %%v/ 4G 4 ""..w7??A	4s   !5Ec                    t        | j                  | j                        }t        |t              rt        |j
                  | j                        }|j                  |      }| j                  j                  j                         j                  | j                  j                  |z  | j                  j                  |k(  z        j                         S t        |      }|sy | j                  j                  j                         j                  | j                  j                  | j!                  |      z  | j                  j                  |k(  z        j                         S r_   )r   r[  r]  rv   r9  r6  r^  r  r\  r5
  r  r)  r?
  r>
  r  r_  rb  )ra   r~   rG
  r  r  s        rc   r  zManyToManyQuery.removeB  s   8e[)U[[$//:F}}V,HNN00VXU//8;..&8:; WY  !'ENN00VXU//4==3GG..&8:; WY re   c                     t        | j                  | j                        }| j                  j                  j                         j                  | j                  j                  |k(        j                         S r_   )	r   r[  r]  r\  r5
  r  r)  r>
  r  )ra   rG
  s     rc   r_	  zManyToManyQuery.clearX  sO    8,,t~~,,67	re   r  )	rf   rg   rh   r  rb  r  r  r_	  r  r  s   @rc   rE
  rE
    s    L 
B. ,re   rE
  c                       fd}|S )Nc                 D    	  |       S # t         t        f$ r | cY S w xY wr_   )r  r  )r~   	conv_funcs    rc   validatez#safe_python_value.<locals>.validatea  s,    	U##:& 	L	s    r`   )rj  rk  s   ` rc   safe_python_valuerl  `  s    
 Ore   c                   .     e Zd Z fdZd ZeZd Z xZS )BaseModelCursorWrapperc                 P    t         t        |   |       || _        |xs g | _        y r_   )r  rn  r  r6  r  )ra   r  r6  r  r  s       rc   r  zBaseModelCursorWrapper.__init__j  s%    $d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 ]@  \  }}|d   x}}	|j                  d      }
|
dk7  r||
dz   d  }|j                  d      }| j                  j                  |       	 | j                  |   }|j!                         }|j%                         }|r|	| j                  |<   t'        |t(              r=|j*                  r|j,                  ||<   |||<   |r|j.                  | j                  |<   t'        |t0              r|j2                  r|j2                  ||<   t'        |t4              r|j*                  r|j6                  |j6                  ||<   L|j8                  sZt'        |j8                  d   t:              sy|j8                  d   j!                         }t'        |t<              r |j>                  d   }|jA                  |      }t'        |t(              stC        |j,                        ||<   ||v s|j*                  r||   j,                  ||<   t'        |tD              s(|jF                  |k(  s9||   ||<   C y # t"        $ r ||v r||   x}}nY ]Y w xY w)Nr   rR  rr  r   r  )$r6  r%  r
  r&  r  r  r   r  r  
convertersr,  r  r  r  r  r  rh  r\  rf  rv   r2   rb  r$  r  rC  rE  r  r"  r  ra  rb  r  r  rl  r!   rM  )ra   r
  r&  r  rq  r,  r  description_itemr  orig_column	dot_indexr   r;  rf  ri  rT  s                   rc   r  z*BaseModelCursorWrapper._initialize_columnso  s   ::##,,

  &&kk--001
(,v

'::* $v

22f%.{%; =	3!C!#3A#66F[
 S)IB	A/\\&)FLL'
);;s+  (  ((*H$/S!
 $&##&*&7&7JsO"s(,		DLL%D*-(2E2E"*"5"5
3D(+%%1&*&8&8JsO^^
4>>!3Dd(K !NN1-446E!%0${{2 (T 2!%/*;E<N<N*O
38#<<&.v&6&C&CJsOdF+u0D"*6"2F3K{=	3"  X%&.v&66Ht  $s   L  LL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   rn  rn  i  s    $
G3R %J"re   rn  c                       e Zd Zd Zy)r  c                     i }| j                   | j                  }}| j                  }t        | j                        D ]+  }||   }||v r||    ||   ||         ||<   $||   ||<   - |S r_   )r  rq  r,  r  r  )ra   r*  r  r  rq  r,  r  r   s           rc   r  z"ModelDictCursorWrapper.process_row  s    "llDOOtzz" 	&A1:Dv~x!}(,z!}SV4t"1vt	& re   N)rf   rg   rh   r  r`   re   rc   r  r    s    re   r  c                       e Zd ZeZd Zy)r  c           	          | j                   | j                  }}| j                  t        | j                        D cg c]  }||    ||   ||         n||    c}      S c c}w r_   )r  rq  r  r  r  )ra   r*  r  rq  r  s        rc   r  z#ModelTupleCursorWrapper.process_row  sk    "llDOO4::&!( '1m&?]Z]3q6"SVK!( ) 	) !(s   A!N)rf   rg   rh   r]  r  r  r`   re   rc   r  r    s    K)re   r  c                       e Zd Zd Zy)r  c                       j                          g }t         j                        D ]   }|j                   j                  |          " t        j                  d|       _         fd _        y )Nr  c                 "     j                   |  S r_   r  )r*  ra   s    rc   rx   z9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    '7t'7'7'= re   )	r  r  r  r  r  r  r  r  r  )ra   
attributesr  s   `  rc   r  z'ModelNamedTupleCursorWrapper.initialize  s_      "
tzz" 	/Adll1o.	/&11%D=re   N)rf   rg   rh   r  r`   re   rc   r  r    s    >re   r  c                   (     e Zd Z fdZ fdZ xZS )r  c                 ^    || _         t        |      | _        t        t        |   |||       y r_   )r  r$  r  r  r  )ra   r  r6  r  r  r  s        rc   r  z!ModelObjectCursorWrapper.__init__  s+    & -&6vufMre   c                     t         t        |   |      }| j                  r0 | j                  dddi|}|j
                  j                          |S  | j                  di |S )NrZ  r   r`   )r  r  r  r$  r  r  r_	  )ra   r*  r	  r  r  s       rc   r  z$ModelObjectCursorWrapper.process_row  sa    -t@E=="$""<!<t<CJJJ#4##+d++re   r  r  s   @rc   r  r    s    N
, ,re   r  c                   *     e Zd Z fdZd Zd Z xZS )r3  c                 L    t         t        |   |||       || _        || _        y r_   )r  r3  r  rz  r=  )ra   r  r6  r  rz  r=  r  s         rc   r  zModelCursorWrapper.__init__  s%     $0G"
re   c           	         | j                          t        | j                  D cg c]  }||j                   c}      }| j                  | j
                  }}| j                  | j                  i| _        i | _        g | _        t        j                  | j                        }t               }|r|j                         }t        |t              r7|j                  |j                          |j                  |j"                         Y|| j$                  vrht        |t&              }| j$                  |   D ]g  \  }	}
}}|	| j                  vs|| j                  |	<   | j                  j                  ||
|	||f       |j)                  |	       |j                  |	       i |r|D ]V  }|| j                  vst+        |      r|| j                  |<   -t        |t,              s>|j                  | j                  |<   X | j                  D ]%  \  }}}}}||v xr
 ||v xs ||v | j                  |<   ' g | _        t1        |      D ]  \  }}| j                  }	| j                  |   }|*t        |t2              r|j4                  }	n|j                  }	nt        |t6              r[|j8                  | j                  vr6t;        |j=                         d|j8                  d|j8                  d      |j8                  }	n<t        |t>              r|j=                         }t        |t@              r|j4                  }	| j.                  j                  |	        y c c}w )Nz specifies bind-to z, but z# is not among the selected sources.)!r  rC  r,  r6  r  r  key_to_constructorsrc_is_destsrc_to_destr  r
  rz  r
  rv   r  r  r  r   r=  r  r  r$  r  column_keysr  r  rM  rL  r  r  rh  ra  r!   )ra   r-  selected_srcr  r  r  destsr
  r  r  r   r  r  r
  rf  r  r  r;  s                     rc   r  zModelCursorWrapper.initialize  s     "T[[ 2E$0 "KK 2 3++t||#'::tzz":!!$..1==?D$%TXX&TXX&4::% t,G59ZZ5E &1T;	d5553>D++C0 $$++T4g-6-8 9IIcNLL%& ,   	=C$111C=36D++C0Z03699D++C0	= #'"2"2 	NCD!Q$'5L %Ndl6J 7M9<9L S!	N "6* 	)IC**CKK$E eZ0,,C++CD&)99D$;$;;$&*kkmTYY		&K L L iidD);;=DdF+++C##C()	)[2s   Mc                    i }g }| j                   j                         D ]%  \  }} |d      ||<   |j                  ||          ' || j                     }t	               }t        | j                        D ]  \  }}|j                  ||      }	| j                  |   }
||   }||j                  |       | j                  |   r | j                  |   |      }t        |	t              r||	|
<   yt        |	|
|        | j                  D ]f  \  }}}}}||   }		 ||   }|	!|||vr| j                   j                  |      s8|	|vr||vr|j#                  d      rR|r||	|<   Zt        |	||       h |D ]-  }	t        |	t$              s|	j&                  j)                          / || j                     S # t        $ r Y w xY w)NT)rZ  z
OUTER JOIN)r  r  r  r6  rC  r  r  r  r  r  rq  rv   r  r  r  r   r  rt  rA   r  r_	  )ra   r*  r5  object_listr  r  default_instanceset_keysr  ry  r  r~   r
  r   r  r  r  joined_instances                     rc   r  zModelCursorWrapper.process_row?  s    $ 7 7 = = ? 	-C&d;GCLws|,	- #4::.5!$"2"23 	1HC {{3(89H\\#&FHE S!s#,,U3(D)#( &%0	1" 6:5E5E 	91S$gys|H")$- 4<H$T-=-=-A-A$-G x'D,@%%l3!0$8-	92 $ 	(H(E*%%'	( tzz""3  s   F33	F?>F?)rf   rg   rh   r  r  r  r  r  s   @rc   r3  r3    s    
C)J8#re   r3  c                   0     e Zd Z	 	 d fd	Zd Zd Z xZS )PrefetchQueryc           	         |r|r?||D cg c]  }|j                    }}|D cg c]  }|j                  j                   }}n4||D cg c]  }|j                   }}|D cg c]  }|j                   }}t	        t        ||            }|j                   }t        t        | #  | ||||||      S c c}w c c}w c c}w c c}w r_   )	r6  r  r  r  r\  rw
  r  r  r  )
r  r9  r,  r  
rel_modelsfield_to_namer6  r-  foreign_key_attrsr  s
            rc   r  zPrefetchQuery.__new__|  s    %;A!B%%++!BJ!BGM$NeU__%9%9$N!$N%?E!Fe%//!FJ!F=C$DEUZZ$D!$D V->!?@M]C0
JuN 	N "C$N "G$Ds   B3B8B=$Cc                    | j                   rN| j                  D ]>  }|j                  |j                     }||f}||v s%t	        ||j                  ||          @ y | j
                  D ]  \  }}|j                  |j                  j                     }||f}|j                  |g       }|D ])  }t	        |||       |j                  j                          + t	        ||j                  |        y r_   )r  r,  r  r  r  r  r  r  r  r_	  r
  )	ra   ry  id_mapr-  
identifierr  attnamerel_instancesr}  s	            rc   populate_instancezPrefetchQuery.populate_instance  s    ?? ?%..uzz:
j)&=Hejj&+>	? #'"4"4 @w%..u/C/CD
j) &

3 3) (DD'84KK%%'( %--?@re   c                     | j                   D ]i  \  }}|j                  j                  |j                  |         }||f}| j                  r|||<   D|j                  |g        ||   j                  |       k y r_   )r  r  r$  r  r  r  r  )ra   ry  r  r-  r  identityr  s          rc   store_instancezPrefetchQuery.store_instance  sv    "00 	-NE733H4E4Eg4NOH(#C&s!!#r*s""8,	-re   )NNNNN)rf   rg   rh   r  r  r  r  r  s   @rc   r  r  z  s    EI*.N @"-re   r  _PrefetchQuery)r9  r,  r  r  r  r6  c                 	   t        |       g}t        |      D ]`  \  }}t        |t              r|\  }}nd }t        |t              st        |      st        |t              r|j                         }|j                  }t        t        |dz               D ]  }d x}	}
||   }|j                  }|j                  x}}t        |t              r|j                  }|j                  j                  j                  |g       }|rQ|D cg c]  }t        ||j                          }	}|D cg c]"  }t        ||j"                  j                         $ }}n%|j                  j$                  j                  |      }
|	s|
s||u s| n |rd|z  nd}t'        d||      |r|fnd }|	rI|t(        j*                  k(  r[t-        t.        j0                  t3        |	      D cg c]  \  }}||j                  |      z   c}}      }|j5                  |      }n|t(        j6                  k(  rg }t9               }t3        |	      D ]H  \  }}|j;                  t        |j<                  |j>                        |k(         |jA                  |       J |jC                         jE                   |j                  | t-        t.        j0                  |            }|j;                  t        ||	d|             |
sg }g }|
D ]K  }t        ||j"                  j                         }t        ||j                         }|j;                  ||f       M |t(        j*                  k(  rW|D ](  \  }}|j;                  ||j                  |      z         * |j5                  t-        t.        j0                  |            }n|t(        j6                  k(  rg }|D ]J  \  }}|j;                  |       t        |j<                  |j>                        }|j;                  ||k(         L |jC                         jE                   |j                  | t-        t.        j0                  |            }|j;                  t        ||
d|             c |S c c}w c c}w c c}}w )Nr   z	 using %sr(  z-Error: unable to find foreign key for query: )r  FT)#r  r  rv   r]  r  r$  r  r  r6  r  r  r9  r%  r=
  r  r   r  r  r
  r   rJ   rB  rt   r  r  rw
  r)  r?   rC  r  rw   r  r  r  rS  )r  r	  prefetch_typefixed_queriesr  r  target_modelsubquery_modelr	  r>  r
  fixed
last_query
last_modellast_objrelsr
  r  tgt_errr  r  r}  
select_pksr,  r
  r  r&  
select_fksr  s                                rc   prefetch_add_subqueryr    s5   "2&'M , FP8h&%-"HlL(E*x/Ah
+(H!%A,' 	FA!!C(!!$EJ$)KK/J*j1'--
!''2266z2FDBFGBw~rww7GGFJKwx):):;KK)//>>BB:Nx|x'?'3';	F$ 5AkL0bG 2:G"E F F #/D 3 33hll$'SM-3 R :,,R00-3 4 $>>$/-"4"44 U
!#sm 'FBKK
bnn E KLNN2&' $,,.33%J%%z2hllD1 4 3   xeT!JKDF# 5#NG4E4E4J4JK	"8W\\:y(345
  3 33+1 J'IxKK	Z->->x-H HIJ#>>&t*DE-"4"44
+1 5'Ix%%h/$Z\\83G3GHFKK	V 345 $,,.33%J%%z2hllD1 4 3   x4!NOMFPP m HK -3s   Q>&'RRc                    |s| S |j                  dt        j                        }|rt        d|z        t	        | ||      }i }i }t        |      D ]  }|j                  }|j                  r7|j                  D ](  }	|j                  |	g        ||	   j                  |       * |j                  |i        ||   }
t        |j                  |            }|j                  D ]L  }|j                  r|j                  ||
       |s$||   D ]!  }|j                  |||j                            # N  t!        j                        S )Nr  zUnrecognized arguments: %s)r  rJ   rB  r  r  r  r6  r,  r  r  r  rY  r  r9  r  r  r\  )r  r	  r  r  r  depsrel_mappqquery_modelr  r  has_relationsry  r  s                 rc   rI   rI     sB   	JJ0C0CDM5>??)"j-HMDG}% Ehh99]] .	""9b1	"))"-. 	R(k"W[[56 	EHyy!!(F3";/ EC))(DODE		EE$ >re   r_   r`   r  r  )@   (X  bisectr   r   
contextlibr   rL  r   	functoolsr	   inspectr
   r	  r  r   r4	  r8  r  loggingr  r0  r	  r	  rm   r  r   r  r   collections.abcr   ImportError	pysqlite3r   pysq3	pysqlite2rP  sqlite_version_infopsycopg2cffir   rZ  r  r   r  r   rT  psycopg2.extrasr   pg_register_uuidr  psycopgrW  r;  pymysqlr=  MySQLdb__version____all__r\   Handler	getLoggerr  
addHandlerr	  unicoderR  rU  rS  bufferr	  rt  callabler  r\  r]  	frozensetrC  r  execrr   builtinsrs   rt   r	  r	  r1  r   r	  r  r   r	  r   r   r   register_adapterr7	  r   r   r   r   register_converterrJ  r   r   r   rf  r   r   r   r  r   rs  rd  rE   r  r  ler  ger  lshiftr-   r  r?   r  rJ   r  r@  rB  rD  rF  ri  rj  rk  compilere  rg  rG  rJ  rP  rW  r$  r_  rc  rj  r    r|  rL   r&   r  r  r  r  r  r#   rM  r1  ra  rn  rv  r~  r  r  r  r  r3  r  r  r  rS   r  rZ   r  rC  r!   r  r  r  rG  rL  r\  r  r  rY   r  r   r   r  rU  rY  r
  r{  rb  rQ   r   r  r5   r[   r:  rn  r   r  rj  r(  r)  r  r  r1   r0   rW   rM   r  r  r  r  r  r  r7  r9  rB  r5  rP   r  r  r	  r  r9   rB   r2  r?  r8   r%   r'   r;   r<   r=   rD   rF   rK   rM  
EXCEPTIONSr  r`  ra  rc  rf  rh  localrs  ru  r  r$   r8  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   rg	  r	  r   rX   r   r	  r   r  r	  r)   r(   rU   r	  rV   r>   r   r   r6   r+   r,   r9
  r;
  r@   rd
  r"   r}
  rN   r
  r)  r.   r  r0  r%  rA   r  r  r
  r  rv  r  r  r  rb  r  rM  rg  rk  ry  rE
  rl  rn  r  r  r  r  r3  r  r  rI   r`   re   rc   <module>r     s     %            	   
    $') **g.I.II	#FOO 40
	A,  L\# 
		8	$   +-   A!IJK))LI	3/K	?@ ), !1IIJKJD	36KXw'F((L g((99%%F'' GW__c2GX]]C0GX]]C0
7"8K		J 	!  !2!24DE"""6<8""";0AB 44" IJ    !!#  -113 !4 X !4 X $;)Ht H 8   	 		
 	 	   	 	   	  	  !" #$ %& '( )* 
+, -. /0 12 34 56 7> 
++
++;;
++;;
++
//
.246 
  	 				 	 
		
 
	 
	 
	 	 	 	 	 	 		 	 
	  
!	" 
#	$ %	& '	. 
 "	 
$	& 
	

 
	
 	     2::23 2::34  "
$ )?
 9GC9 &;F &;RE 0 $f #)!6 )!X,"K""8 .: ; ,.h0f h0V:(.6 DF V f B4 B/8T /8d$f $N zzE 
3 
38 82\*OY \*~9 , )  F</6 <~K K\PZ P,
"* 
"'F 'V $0K $0N"[ "2k 2$6 $	2\; 	25J 5*&K &&
2; 
2{ D34) )X6z 6GZ G"
* 
>Cz CL dDkT k\	6$ 	6&$ &.: .( ,z 0!' / / j!   	'&[ &7% 7%td% d%N$y $(LI L^% ,>&+ >H@%* @%F{%Z {%|1% 1h/-[ /-d\A[ \A~-[ ->D >B%P %PP5i 5
 2? 1 *O * $ $ )] ) +_ + (M ( , , +} + +} +Iv I. &"$$"*(( 0)%'
 )4  '&&13 (''DF ,[++46  &{%%noFv $ @' ?8 8 }( }@&S4X S4la; a;H]#H ]#F5f 50@f @8-&6 -&`# #RIF IX $&m &,+ ,V .'F ' ' 'Df 2v 2&rJ rju 5 l  9 99 6I 6?i ? * 55 5>	O5 	O= =Y   >&+|_ &+R\,f \,~B- B,A) A? ?.Ei E4
C% C,' ,6&# &6,# ,4X6_ X6v<o <5 
 ~Ie ~IB ;  ;F
66 
6 
).m ).XP"i P"fE9 E06(9 6(rv Jq"F q"hcv cL		H 	 $9 #~) ~)B2& 2*DHN9d+ DHN7< 7<tD D2.L LDE ( E 9"' 9"x:0C :s7/6 s7l	%k %2. 2&	(& 	I(& I4	(& 	?k ?DR". R"j3 ")4 )>#: >,5 ,"C#/ C#L+-*K**+; >M N +-\JZy~  $##$
  -   G  		  	  Hy 
  		  J   	r  goo 0  )(()s  &w< -x 4x/ x= /
y :y	 y' y3 z #z" { <x
xx,xx,x%"x,$x%%x,+x,/x:9x:=yy	yy yy 	y$#y$'y0/y03y>=y>zzzzzzzz"{ ?{ {{