
    !ile                    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. d dl,m/Z0  e.        	 d dl1Z1d dl1m(Z2 d dl3m4Z4 d dl5m/Z6 d dl5m7Z8 dZ9	 d dl:Z;dZ=g dZ>	 d dlm?Z?  ej                  d      ZBeBj                   e?              ej                  d    dk(  r&eEZFeGZHeIZJej                  ZKeLZMeNeOePeQfZR eSd       d ZTn?d dlUZU	 d dlmVZV d dlmWZW d ZMeGZFeXZHeYZJeGZZe[Z\eNeOePeQe]fZR e^eUd      ZTej                  ZKdd Z`ej                  d!k  r-ej                  j                  Zaej                  j                  Zbnd" Zad# Zbe"r e"j                  ej                  eG        e"j                  ej                  eG        e"j                  ej0                  eG       ej                  d!k\  rLd$ Zfd% Zgd& Zh e"j                  ej                  ef        e"j                  d'eg        e"j                  d(eh       e"jF                  Zjnd)Zj eQd*      Zkd+Zld,d-d.d/d0d1d*Zmemj                         Znd2end3<   d4end5<   d6 Zod7 Zpd8 Zqd9 Zr G d: d;es      Zt eu       Zv etdi d<d<d=d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZdZd[d\d]d]d^d_d`d`dadadbdbdcdcdddddedfdgdhZw etej                  ej                  ej                  ej                  ej                  ej                  ej                  di dj dk dl dm dn      Z etdi dodpdqdrdrdrdsdsdtdudvdvdwdwdxdxdydydzd{d|d}d~d}ddpdududdddddddsddZ etddddddddd	      Z etddddd      Z etdd      ZdZdZdZdZdZd ZdZdZ ej                  d      Z ej                  d      ZdZeufdZd Zd Zd Zd Zd Zd Zd Z G d deu      Z G d deu      Z G d de      Z G d deu      Z G d deu      Z G d d ej:                  dd            Zd Z G d deu      Zd Zd Z G d deu      Z G d deu      Z G d deu      Z G d deu      Z G d de      Z G d de      Z G d deu      ZdÄ ZejV                  dfdĄZ G dń de      Z G dǄ deu      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ׄ deu      Z G dل deu      Z G dۄ de      Z G d݄ de      Z G d߄ de      Z G d deu      Z G d dee      Z G d de      Z G d de      ZddZ G d de      Z G d de      ZddZddZ G d de      Z G d deī      Z G d de      Z G d de      ZǐddZd Z G d de      Z edd      Z G d de      Z G d de      Z G d  de      Z G d de      Z G d de      Z G d de      Zѐd ZҐd	 Z G d
 de      Z G d de      Z eԐd      Z G d de      Zאd Z G d de      Zِd Z G d de      Zېd Z G d de      Z G d deݫ      Z G d deݫ      ZߐddZ G d d e߫      Z G d! d"eee      Z G d# d$e      Z G d% d&e      Z G d' d(e߫      Z G d) d*e      Z G d+ d,e      Z G d- d.e      Z G d/ d0e      Z G d1 d2e      Zdd3Z G d4 d5e      Z G d6 d7e      Z G d8 d9e      Z G d: d;e      Z G d< d=e      Z G d> d?e      Z G d@ dAe      Z G dB dCe      Z G dD dEe      Z G dF dGe      Z G dH dIeu      ZeeeeeeeeeeeedJZ ee      Z ej:                  dKdL      Z ej:                  dMdN      Z ej:                  dOdP      Z ej:                  dQdR      Z G dS dTeu      Z G dU dVeej                        Z  G dW dXeu      Z G dY dZeu      Z G d[ d\e      Zd] Z G d^ d_e      Z G d` daeu      Z G db dce      Z G dd dee      Z G df dge      Z	 G dh die      Z
 G dj dkeu      Z G dl dmeu      Z G dn doeu      Z G dp dqeu      Z G dr dseu      Z G dt due      Z G dv dwe      Z G dx dye      Z G dz d{eu      Z G d| d}eu      Z G d~ de      Z G d deu      Z G d deu      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de!      Z" G d de      Z# G d de      Z$ G d de$      Z% G d de%      Z& G d de$      Z' G d deu      Z( G d de(e      Z) G d dee      Z* G d deu      Z+ G d de      Z, G d de)      Z- G d de      Z. G d de)      Z/d Z0ddZ1d Z2 G d de      Z3 G d de3      Z4 G d de3      Z5 G d de3      Z6d Z7 G d de      Z8 G d dÐe      Z9 G dĄ dŐe      Z: G dƄ dǐe      Z; G dȄ dɐe      Z< G dʄ dːe      Z= G d̄ deu      Z> G d΄ dϐe      Z? G dЄ dѐe      Z@ G d҄ dӐe?      ZA G dԄ dՐe?      ZB G dք dאe?      ZC G d؄ deu      ZD G dڄ deu      ZE G d܄ deu      ZF G dބ dߐeF      ZG G d de      ZH G d deI      ZJ G d deu      ZK G d d eeJe            ZL G d de      ZM G d de      ZNd ZO G d deu      ZP G d dePeޫ      ZQ G d deP      ZR G d deRe      ZSd ZT G d deRe      ZU G d deU      ZV G d deP      ZW G d deWe      ZX G d deWe      ZY G d  deWe      ZZ G d deU      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^      Za G d de]      Zb G d d ej:                  dd            Zcd Zdd Zey# 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xZ'xZ)Z0Y w xY w# e$ r dxZ1xZ2xZ6Z8Y w xY w# e$ r 	 d dl<Z;dZ9n# e$ r dZ;Y nw xY wY 	w xY w# e$ r  G d dej                        Z?Y w xY w# e$ r
 d dlmVZV Y w xY w(      )bisect_left)bisect_rightcontextmanager)deepcopywraps)isclassN)Mapping)dbapi2)compat)errors)
extensions)register_uuid)Json)TransactionStatus)JsonbFTz4.0.1)LAnyFieldAsIs	AutoField	BareFieldBigAutoFieldBigBitFieldBigIntegerFieldBinaryUUIDFieldBitField	BlobFieldBooleanFieldCaseCast	CharFieldCheckchunkedColumnCompositeKeyContextDatabaseDatabaseErrorDatabaseProxy	DataError	DateFieldDateTimeFieldDecimalFieldDefaultDeferredForeignKeyDeferredThroughModel
DJANGO_MAPDoesNotExistDoubleFieldDQ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     U/home/crogers2287/.openclaw/agents/magoo/.venv/lib/python3.12/site-packages/peewee.pyemitzNullHandler.emit   s        N)__name__
__module____qualname__rh   rd   ri   rg   r`   r`      s    	ri   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    rg   print_rv      s&    



ri   )Callable)reducec                 "    t        | t              S rc   )
isinstancerw   )cs    rg   <lambda>r|      s    *Q1 ri   printc                 D    |j                   |ur|j                  |      |rc   )__traceback__with_traceback)tpvaluetbs      rg   reraiser      s&    b(&&r**ri   )      c                     t         j                   j                  | t         j                  j                        j	                  d       S )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rg   utcfromtimestampr      s6    !!rh&7&7&;&;<%	'ri   c                      t         j                   j                  t         j                  j                        j	                  d       S )Nr   )r   nowr   r   r   rd   ri   rg   utcnowr      s2    !!X&&**+%	'ri   c                 $    | j                  d      S N )	isoformatds    rg   datetime_adapterr      s    C(8!8ri   c                 `    t        j                  t        t        | j	                  d             S )N   -)r   datemapintsplitr   s    rg   convert_dater      s    HMM3sAGGDM3J$KKri   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      :rn   z{:0<6.6}   )r   r   r   lenformatdecoder   )tr   timeymr   t_fullhourminutesecondusecs              rg   convert_timestampr      s    JD$#tzz$/0GAq!TZZ%F#&sF1IOOD,A#B D&&6{a:,,VAY-=-=-?@A$$Q1dFFDIIri   r   	timestampr   r   r   )yearmonthdayr   r   r   )%Y-%m-%d %H:%M:%S%Y-%m-%d %H:%M:%S.%f%Y-%m-%d%H:%M:%S%H:%M:%S.%f%H:%Mz%Y-01-01 00:00:00z%Y-%m-01 00:00:00z%Y-%m-%d 00:00:00z%Y-%m-%d %H:00:00z%Y-%m-%d %H:%M:00r   z%Y-%m-%d %H:%i:00r   z%Y-%m-%d %H:%i:%Sr   c                 T    | t         v sJ |sy t        |t              }t        ||       S rc   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rg   _sqlite_date_partr   
  s0    .(((	/+F	GB2{##ri   c                 l    | t         v sJ |sy t        |t              }|j                  t         |          S rc   )__sqlite_date_trunc__r   r   strftimer   s      rg   _sqlite_date_truncr     s9    ////	/+F	GB;;,[9::ri   c                 2    t        j                  | |      d uS rc   )research)regexr   s     rg   _sqlite_regexpr     s    99UE"$..ri   c                 8    t        j                  | t               y rc   )warningswarnDeprecationWarningrt   s    rg   __deprecated__r     s    MM!'(ri   c                   $    e Zd Zd Zd Zd Zd Zy)attrdictc                 >    	 | |   S # t         $ r t        |      w xY wrc   )KeyErrorAttributeErrorre   attrs     rg   __getattr__zattrdict.__getattr__!  s+    	': 	' &&	's    c                     || |<   y rc   rd   re   r   r   s      rg   __setattr__zattrdict.__setattr__&  s
    UT
ri   c                 (    | j                  |       | S rc   updatere   rhss     rg   __iadd__zattrdict.__iadd__'  s    T[[-d{ri   c                 >    t        |       }|j                  |       |S rc   )r   r   )re   r   r   s      rg   __add__zattrdict.__add__(  s    Aaxri   N)rj   rk   rl   r   r   r   r   rd   ri   rg   r   r      s    '
 ;:Gri   r   ANDORADD+SUB-MUL*DIV/BIN_AND&BIN_OR|XOR#MOD%EQ=LT<LTEz<=GT>GTEz>=NEz!=INNOT_INzNOT INISIS_NOTzIS NOTLIKEILIKEBETWEENREGEXPIREGEXPCONCATz||BITWISE_NEGATION~c                 8    t        | t        j                  |      S rc   )
ExpressionrI   r  lrs     rg   r|   r|   T  s    z!RUUA. ri   c                 8    t        | t        j                  |      S rc   )r  rI   r	  r  s     rg   r|   r|   U      :aA6 ri   c                 8    t        | t        j                  |      S rc   )r  rI   r
  r  s     rg   r|   r|   V  s    Arww2 ri   c                 8    t        | t        j                  |      S rc   )r  rI   r  r  s     rg   r|   r|   W  s    *Q!4 ri   c                 8    t        | t        j                  |      S rc   )r  rI   r  r  s     rg   r|   r|   X  r  ri   )eqltltegtgteneinisis_notlikeilikeregexpAUTOINTEGERBIGAUTOBIGINTBLOBBOOLSMALLINTCHARDATEDATETIMEDECIMALDEFAULT DOUBLEREALFLOATINTTEXTTIMEUUIDUUIDBVARCHARz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOINzFULL OUTER JOINz
CROSS JOINzNATURAL JOINLATERALzLEFT JOIN LATERAL)	INNER
LEFT_OUTERRIGHT_OUTERFULL
FULL_OUTERCROSSNATURALr>  LEFT_LATERALr   r         )TUPLEDICTNAMED_TUPLECONSTRUCTORMODEL)WHERErC         z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])_metaclass_helper_c                       | t         |fi       S rc   )
MODEL_BASE)metabases     rg   with_metaclassrV    s    
TGR((ri   c                 L    | j                         }|r|j                  |       |S rc   )copyr   )source	overridesmergeds      rg   
merge_dictr\    s!    [[]Fi Mri   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      rg   quoterc    sF    
4yA~Aw||K((88=TYY{+=>>=s   Ac                 <    t        |       xr t        | t              S rc   )r
   
issubclassrE   )os    rg   r|   r|     s    WQZ8Jq%$8 ri   c                 >    | t        | t        t        f      r| S | fS y rc   )rz   listtupler   s    rg   ensure_tuplerk    s'    "54-8uFuhF ri   c                 B    | t        | t              r| S t        |       S y rc   )rz   NodeEntityrj  s    rg   ensure_entityro    s%    "5$/uBVE]B ri   c                 v    t         j                  d|       }t        j                  d|      j                         S )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)ru   firsts     rg   make_snake_caserv    s0      1-E%06688ri   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rc   )rh  ).0gs     rg   	<genexpr>zchunked.<locals>.<genexpr>  s      Ca$q' C   	fillvalue)objectizip_longestiterindex)itnmarkergroups       rg   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rc   rd   argskwargsr9   re   s     rg   innerz1_callable_context_manager.__call__.<locals>.inner  s(     +4*6*+ + +s   r   re   r9   r  s   `` rg   __call__z"_callable_context_manager.__call__       	r	+ 
	+ ri   N)rj   rk   rl   r  rd   ri   rg   r  r    s    ri   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 )rP   z;
    Create a proxy or placeholder for another object.
    obj
_callbacksc                 4    g | _         | j                  d        y rc   )r  
initializere   s    rg   __init__zProxy.__init__  s    ri   c                 D    || _         | j                  D ]
  } ||        y rc   r  )re   r  callbacks      rg   r  zProxy.initialize  s#     	HSM	ri   c                 <    | j                   j                  |       |S rc   )r  append)re   r  s     rg   attach_callbackzProxy.attach_callback  s    x(ri   c                       fd}|S )Nc                 j    | j                   t        d       t        | j                         |i |S NzCannot use uninitialized Proxy.r  r   r   )re   r  r  methods      rg   r  z Proxy.passthrough.<locals>.inner  s6    xx$%FGG,7488V,d=f==ri   rd   r  r  s   ` rg   passthroughzProxy.passthrough  s    	> ri   	__enter____exit__c                 \    | j                   t        d      t        | j                   |      S r  r  r   s     rg   r   zProxy.__getattr__  s)    88 !BCCtxx&&ri   c                 ^    || j                   vrt        d      t        t        |   ||      S )NzCannot set attribute on proxy.)	__slots__r   superrP   r   )re   r   r   	__class__s      rg   r   zProxy.__setattr__  s/    t~~% !ABBUD-dE::ri   )rj   rk   rl   __doc__r  r  r  r  r  r  r  r   r   __classcell__r  s   @rg   rP   rP     sH     &I
 K(I:&H'
; ;ri   rP   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 rc   ConnectionContextr  s    rg   connection_contextz DatabaseProxy.connection_context       &&ri   c                      t        | g|i |S rc   _atomicre   r  r  s      rg   atomiczDatabaseProxy.atomic       t-d-f--ri   c                     t        |       S rc   _manualr  s    rg   manual_commitzDatabaseProxy.manual_commit      t}ri   c                      t        | g|i |S rc   _transactionr  s      rg   transactionzDatabaseProxy.transaction      D242622ri   c                     t        |       S rc   
_savepointr  s    rg   	savepointzDatabaseProxy.savepoint      $ri   c                 ~     t         d      s% G  fdd      }t        dt        fd|i       _         j                  S )Nr  c                       e Zd ZW  Zy)!DatabaseProxy.Model.<locals>.MetaNrj   rk   rl   databaser  s   rg   Metar        4ri   r  	BaseModelhasattrtyperE   r  re   r  s   ` rg   rE   zDatabaseProxy.Model  3    tX&''{UHvtnEDK{{ri   N)rj   rk   rl   r  r  r  r  r  r  r  propertyrE   rd   ri   rg   r)   r)     s9     0I'.3  ri   r)   c                       e Zd Zy)ModelDescriptorNrj   rk   rl   rd   ri   rg   r  r        ri   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    rg   r  zAliasManager.__init__  s!    		ri   c                 :    | j                   | j                  dz
     S Nr   )r  r  r  s    rg   mappingzAliasManager.mapping   s    }}T001455ri   c                     || j                   vr'| xj                  dz  c_        d| j                  z  | |<   | j                   |   S )Nr   zt%d)r  r  re   rY  s     rg   addzAliasManager.add$  s=    %MMQM 4==0DL||F##ri   c                     |rHt        t        | j                              D ]'  }|| j                  |   v s| j                  |   |   c S  | j	                  |      S rc   )reversedranger  r  r  )re   rY  	any_depthidxs       rg   getzAliasManager.get*  sZ    d&9&9 :; 6T]]3//==-f556 xxri   c                 $    | j                  |      S rc   )r  r  s     rg   __getitem__zAliasManager.__getitem__1  s    xxri   c                 "    || j                   |<   y rc   )r  )re   rY  aliass      rg   __setitem__zAliasManager.__setitem__4  s    $Vri   c                     | xj                   dz  c_         | j                   t        | j                        kD  r| j                  j                  i        y y r  )r  r   r  r  r  s    rg   r  zAliasManager.push7  sA    q T]]!33MM  $ 4ri   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    rg   popzAliasManager.pop<  s-    !#EFFq ri   NF)rj   rk   rl   r  r  r  r  r  r  r  r  r  r  rd   ri   rg   r  r    s>    :I 6 6$  %%
!ri   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 rc   )r  r  __new__)clsscopeparenthesesr  r  s       rg   r  zState.__new__D  s    UC(e[&IIri   c                     || j                   n|}|r8| j                  r,| j                  j                         }|j                  |       n|r|}n| j                  }t	        ||fi |S rc   )r  settingsrX  r   r  )re   r  r  r  r  s        rg   r  zState.__call__G  s]    #m

 dmm}}))+HOOF#H}}HUK4844ri   c                 8    | j                   j                  |      S rc   )r  r  )re   	attr_names     rg   r   zState.__getattr__U  s    }}  ++ri   NN)rj   rk   rl   SCOPE_NORMALr  r  r   r  r  s   @rg   r  r  B  s    'U J5,ri   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  rd   rd   )re   r  r  s     rg   r  z __scope_context__.<locals>.innerZ  s0     ((( 	J	 	 	s   (	(%(r   )r  r  s   ` rg   __scope_context__r  Y  s      Lri   c                       e Zd ZdZd Zd Zd Zed        Zed        Z	ed        Z
d Z ee      Z ee      Z ee      Z ee      Z ee      Zd	 Zd
 Zed        Zd Zd ZddZd Zd Zd Z y)r&   )stack_sql_valuesalias_managerstatec                 l    g | _         g | _        g | _        t               | _        t        di || _        y Nrd   )r  r  r  r  r  r  r  )re   r  s     rg   r  zContext.__init__d  s0    
	)^&X&
ri   c                 @    t        di | j                  j                  S r  )r&   r  r  r  s    rg   as_newzContext.as_newk  s    -,,--ri   c                 *    |d   j                  |       S r  get_sort_keyre   items     rg   column_sort_keyzContext.column_sort_keyn  s    Aw##D))ri   c                 .    | j                   j                  S rc   )r  r  r  s    rg   r  zContext.scopeq  s    zzri   c                 .    | j                   j                  S rc   )r  r  r  s    rg   r  zContext.parenthesesu  s    zz%%%ri   c                 .    | j                   j                  S rc   )r  subqueryr  s    rg   r!  zContext.subqueryy  s    zz"""ri   c                     |r!|j                  d      | j                  k(  r|d= | j                  j                  | j                          | j                  di || _        | S r  )r  r  r  r  r  )re   rZ  s     rg   r  zContext.__call__}  sQ    w/4::='"

$**%TZZ,),
ri   c                 @    | j                   r| j                  d       | S )N()r  literalr  s    rg   r  zContext.__enter__  s    LLri   c                 |    | j                   r| j                  d       | j                  j                         | _        y )N))r  r%  r  r  r  re   exc_typeexc_valexc_tbs       rg   r  zContext.__exit__  s)    LLZZ^^%
ri   c              #   |   K   | j                   j                          d  | j                   j                          y wrc   )r  r  r  r  s    rg   
push_aliaszContext.push_alias  s-     ! s   :<c                     t        |t        t        f      r|j                  |       S t	        |      r%|j
                  j                  j                  |       S | j                  t        |            S rc   )	rz   rm  r&   __sql__is_model_metatablesqlr]   re   r  s     rg   r3  zContext.sql  sR    cD'?+;;t$$c]99??**40088E#J''ri   c                 <    | j                   j                  |       | S rc   )r  r  )re   keywords     rg   r%  zContext.literal  s    		!ri   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  r9  rz   rm  r3  r0  scope_columnvalue_literalsr%  _query_val_transformr  r  param)re   r   r9  	add_params       rg   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 rc   )r  extendr  re   ctxs     rg   r/  zContext.__sql__  s1    		"4<<(
ri   c                 @    | j                  |      j                         S rc   )r3  queryre   nodes     rg   parsezContext.parse  s    xx~##%%ri   c                 P    dj                  | j                        | j                  fS )Nr4  )r_  r  r  r  s    rg   rE  zContext.query  s    wwtyy!4<<//ri   NT)!rj   rk   rl   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-  r3  r%  r   r/  rH  rE  rd   ri   rg   r&   r&   a  s    FI'.*     & & # # %\2L$\2L$\2L!),I$\2L
&
 ! !
(L2
&0ri   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&   r3  rE  r  r>  r   ri  r   r=  )rE  dbrC  r3  paramsr>  s         rg   query_to_stringrY    s     
T	*B	~  "i''%.&&(KC
IIOO"sE|kk#t$s/8999ri   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_escaperU  NULL)
rz   	text_typer   r   r   
bytes_typer   UnicodeDecodeErrorr   str)vs    rg   r=  r=    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	)rm  TFc                     | j                   j                  | j                         }| j                  j                         |_        |S rc   )r  r  __dict__rX  r4  s     rg   clonez
Node.clone  s3    nn$$T^^4}}))+
ri   c                     t         rc   NotImplementedErrorrB  s     rg   r/  zNode.__sql__       !!ri   c                       fd}|S )Nc                 @    | j                         } |g|i | |S rc   )rf  )re   r  r  rf  r  s       rg   r  zNode.copy.<locals>.inner  s%    JJLE5*4*6*Lri   rd   r  s   ` rg   rX  z	Node.copy  s    	 ri   c                 V    || j                   k7  r| j                         }||_         |S | S rc   )_coercerf  )re   rn  rf  s      rg   coercezNode.coerce  s*    dll"JJLE#EMLri   c                      yNFrd   r  s    rg   is_aliaszNode.is_alias  s    ri   c                     | S rc   rd   r  s    rg   unwrapzNode.unwrap      ri   NT)rj   rk   rl   rn  __isabstractmethod__rf  r/  staticmethodrX  ro  rr  rt  rd   ri   rg   rm  rm    s:    G 
"  ri   rm  c                        e Zd ZdZd Zd ZeZy)ColumnFactoryrG  c                     || _         y rc   r{  rF  s     rg   r  zColumnFactory.__init__  	    	ri   c                 .    t        | j                  |      S rc   )r$   rG  r   s     rg   r   zColumnFactory.__getattr__      dii&&ri   Nrj   rk   rl   r  r  r   r  rd   ri   rg   rz  rz    s    I'Kri   rz  c                       e Zd ZdZddZy)_DynamicColumnrd   Nc                      |t        |      S | S rc   )rz  re   instanceinstance_types      rg   __get__z_DynamicColumn.__get__'  s     **ri   rc   rj   rk   rl   r  r  rd   ri   rg   r  r  $  s    Iri   r  c                       e Zd ZdZddZy)_ExplicitColumnrd   Nc                 &    |t        d|z        | S )NzM%s specifies columns explicitly, and does not support dynamic column lookups.r   r  s      rg   r  z_ExplicitColumn.__get__0  s)     *,456 6 ri   rc   r  rd   ri   rg   r  r  -  s    Iri   r  c                       e Zd Zd Zd Zy)Starc                     || _         y rc   )rY  r  s     rg   r  zStar.__init__9  	    ri   c                 h    |j                  t        | j                              j                  d      S )Nz.*)r3  rQ   rY  r%  rB  s     rg   r/  zStar.__sql__;  s%    ww~dkk23;;DAAri   Nrj   rk   rl   r  r/  rd   ri   rg   r  r  8  s    Bri   r  c                        e Zd Z e       Zd fd	Zej                  d        Zd Z	e
d        Zej                  dfdZddZddZd	 Zd
 Zd Z xZS )SourceNc                 8    t         t        |           || _        y rc   )r  r  r  _alias)re   r  r  s     rg   r  zSource.__init__B  s    fd$&ri   c                     || _         y rc   r  re   names     rg   r  zSource.aliasF  	    ri   c                 8    |st        d      f}t        | f|      S )Nr   )rU   rT   re   columnss     rg   selectzSource.selectJ  s    3xkGtgw''ri   c                     t        |       S rc   )r  r  s    rg   __star__zSource.__star__O  s    Dzri   c                     t        | |||      S rc   Join)re   dest	join_typeons       rg   r_  zSource.joinS  s    D$	2..ri   c                 :    t        | |t        j                  |      S rc   )r  rC   r@  re   r  r  s      rg   left_outer_joinzSource.left_outer_joinV  s    D$44ri   c                 "    t        || |||      S N)	recursiver  materializedCTEre   r  r  r  r  s        rg   ctez
Source.cteY      4G ,. 	.ri   c                 T    | j                   r| j                   fS |j                  |    fS rc   )r  r  rB  s     rg   r  zSource.get_sort_key]  s)    ;;KK>!!!$'))ri   c                     |j                   t        k(  r[| j                  r| j                  |j                  | <   |j	                  d      j                  t        |j                  |                 |S N AS )r  rL  r  r  r%  r3  rn  rB  s     rg   apply_aliaszSource.apply_aliasb  sW     99${{*.++!!$'KK##F3+<+<T+B$CD
ri   c                     | j                   r| j                   |j                  | <   |j                  t        |j                  |                S rc   )r  r  r3  rn  rB  s     rg   apply_columnzSource.apply_columnk  s<    ;;&*kkCd#wwvc//5677ri   rc   FNN)rj   rk   rl   r  r{   r  rm  rX  r  r  r  r  rC   r?  r_  r  r  r  r  r  r  r  s   @rg   r  r  ?  sj    A 
YY (
   $(::$ /5.*
8ri   r  c                        e Zd Z fdZej
                  d        Zd Zd Zd Z	d Z
d Zd Z eej                        Z eej                         Z eej$                        Z eej(                        Z xZS )	_HashableSourcec                 L    t        t        | 
  |i | | j                          y rc   )r  r  r  _update_hashre   r  r  r  s      rg   r  z_HashableSource.__init__r  s#    ot-t>v>ri   c                 2    || _         | j                          y rc   )r  r  r  s     rg   r  z_HashableSource.aliasv  s    ri   c                 .    | j                         | _        y rc   )	_get_hash_hashr  s    rg   r  z_HashableSource._update_hash{  s    ^^%
ri   c                 Z    t        | j                  | j                  | j                  f      S rc   )hashr  _pathr  r  s    rg   r  z_HashableSource._get_hash~  s     T^^TZZ=>>ri   c                     | j                   S rc   )r  r  s    rg   __hash__z_HashableSource.__hash__  s    zzri   c                     t        |t              r| j                  |j                  k(  S t        | t        j
                  |      S rc   )rz   r  r  r  rI   r   re   others     rg   __eq__z_HashableSource.__eq__  2    e_-::,,$u--ri   c                     t        |t              r| j                  |j                  k7  S t        | t        j
                  |      S rc   )rz   r  r  r  rI   r  r  s     rg   __ne__z_HashableSource.__ne__  r  ri   c                       fd}|S )Nc                     t        | |      S rc   r  re   r   ops     rg   r  z!_HashableSource._e.<locals>.inner  s    dB,,ri   rd   )r  r  s   ` rg   _ez_HashableSource._e  s    	-ri   )rj   rk   rl   r  rm  rX  r  r  r  r  r  r  r  rI   r   __lt__r  __le__r  __gt__r  __ge__r  r  s   @rg   r  r  q  st     
YY &?.
.
 YFZFYFZFri   r  c                 .     t                fd       }|S )Nc                 n     | g|i |}| j                   r|j                  | j                         S |S rc   )rT  bind)re   r  r  resultmeths       rg   r  z __bind_database__.<locals>.inner  s6    d,T,V,>>;;t~~..ri   r   )r  r  s   ` rg   __bind_database__r    s     
4[ 
 Lri   c                       fd}|S )Nc                 ,    r|| }} t        | |      S )N)r  r  )re   r  invertedr  s     rg   r  z__join__.<locals>.method  s    %DD%955ri   rd   )r  r  r  s   `` rg   __join__r    s    6 Mri   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)rj   rk   rl   r  rC   r?  __and__r@  r   rA  __sub__rC  __or__rD  __mul____rand____radd____rsub____ror____rmul__rd   ri   rg   r  r    s    tzz"Gt'Gt''(Gdoo&Ftzz"G

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

T2Hri   r  c                   $    e Zd Zd Zd Zd Zd Zy)_BoundTableContextc                      || _         || _        y rc   )r2  r  )re   r2  r  s      rg   r  z_BoundTableContext.__init__  s    
 ri   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rc   )r  r2  r  r  s     rg   r  z*_BoundTableContext.__call__.<locals>.inner  s7    #DJJ> +4*6*+ + +s   4=r   r  s   `` rg   r  z_BoundTableContext.__call__  r  ri   c                 $   | j                   j                  | _        | j                   j                  | j                         | j                   j
                  /| j                   j
                  j                  | j                         | j                   S rc   )r2  rT  _orig_databaser  r  _modelr  s    rg   r  z_BoundTableContext.__enter__  s^    "jj22

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

++,::(JJ""4#6#67 )ri   Nrj   rk   rl   r  r  r  r  rd   ri   rg   r  r    s    !8ri   r  c                        e Zd Z	 	 d fd	Zd ZddZddZd Zed        Z	edd       Z
edd       Zedd	       Zed
        Zd Z xZS )rW   c           	      f   || _         || _        || _        || _        |r||fn|f| _        || _        || _        t        t        | '  |       |-t               | _        |D ]  }t        | |t        | |              |r,| j                  r| n| j                  }	t        |	|      | _        y d | _        y Nr  )rj   _columns_primary_key_schemar  r  rT  r  rW   r  r  r{   setattrr$   r   primary_key)re   r  r  r  schemar  r  rT  columncol_srcr  s             rg   r  zTable.__init__  s    ''-fd^D7
"eT#%#0 $&DF! <ffT6&:;< "mmdG&w<D#Dri   c           	          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                        S )N)r  r  r  r  r  rT  )rW   rj   r  r   r  r  r  rT  r  s    rg   rf  zTable.clone  sB    MMMM))<<++;;nn& 	&ri   c                     || _         | S rc   rT  re   r  s     rg   r  z
Table.bind      !ri   c                     t        | |      S rc   )r  r
  s     rg   bind_ctxzTable.bind_ctx  s    !$11ri   c                 p    t        | j                  | j                  | j                  | j                  f      S rc   )r  r  r  r  r  r  s    rg   r  zTable._get_hash  s&    T^^TZZdkkJKKri   c                     |s/| j                   r#| j                   D cg c]  }t        | |       }}t        | f|      S c c}w rc   )r  r$   rT   )re   r  r  s      rg   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  r{   itemsr   Insert)re   r  r  r  srckeyr   s          rg   r  zTable.insert  sZ    !>RvF--$TVVC$lln 2
U,1wsC()2d67;;ri   c                 F    | j                  ||      j                  d      S )Nr  REPLACEr  on_conflict)re   r  r  r  s       rg   r   zTable.replace  s"    vw7Y'	)ri   c                     |rG|i n|}|j                         D ].  \  }}| j                  r| n| j                  }||t        ||      <   0 t	        | |      S )Nr   )r  r  r{   r   Update)re   r   r  r  r   r  s         rg   r   zTable.update  sZ    !>RvF$lln 2
U"mmd,1wsC()2 d6**ri   c                     t        |       S rc   )Deleter  s    rg   deletezTable.delete  s    d|ri   c                 \   |j                   t        k(  r!|j                  t        | j                         S | j
                  r| j
                  |j                  | <   |j                   t        k(  r0| j                  |j                  t        | j                               S | j                  |      S rc   )
r  rN  r3  rn  r  r  r  rL  r  r  rB  s     rg   r/  zTable.__sql__  s    99$7764::.//;;&*kkCd#99$##CGGFDJJ,?$@AA $$S))ri   )NNNNNNrc   r  )rj   rk   rl   r  rf  r  r  r  r  r  r  r   r   r   r/  r  r  s   @rg   rW   rW     s    DH48$.	&2L ( (
 < < ) )
 + +  *ri   rW   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)re   r$  r   r  r  r  r  s         rg   r  zJoin.__init__0  s1    dD""/"ri   c                     || _         | S rc   )r%  )re   	predicates     rg   r  zJoin.on7  s    ri   c                    |j                  | j                        j                  d| j                  z        j                  | j                         | j
                  *|j                  d      j                  | j
                         |S )N %s  ON )r3  r$  r%  r  r   r%  rB  s     rg   r/  zJoin.__sql__;  s\    	
#dhh-
'&4>>)
*
#dhh-88KK##DHH-
ri   )	rj   rk   rl   rC   r?  r  r  r/  r  r  s   @rg   r  r  /  s    +/::$d ri   r  c                   P     e Zd Zd fd	Zd Zej                  d        Zd Z xZ	S )r^   c                 J    || _         || _        t        t        |   |       y r  )r  r  r  r^   r  )re   valuesr  r  r  s       rg   r  zValuesList.__init__F  s#    j$(u(5ri   c                 l    t        | j                  t        | j                        | j                  f      S rc   )r  r  idr  r  r  s    rg   r  zValuesList._get_hashK  s%    T^^R%5t{{CDDri   c                     || _         y rc   )r  )re   namess     rg   r  zValuesList.columnsN  s	    ri   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  rL  r  r  r%  r3  CommaNodeListr  EnclosedNodeListrn  r  )re   rC  rowr{   entitiess        rg   r/  zValuesList.__sql__R  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  )
rj   rk   rl   r  r  rm  rX  r  r/  r  r  s   @rg   r^   r^   E  s+    6
E 
YY ri   r^   c                   J     e Zd Z	 	 d fd	Zd Zd Zd ZeZd ZeZ	d Z
 xZS )r  c                     || _         || _        || _        || _        |*|D cg c]  }t	        |t
              rt        |      n|! }}|| _        d|_        t        t        | /  |       y c c}w )Nrd   r  )r  _query
_recursive_materializedrz   
basestringrn  r  	_cte_listr  r  r  )re   r  rE  r  r  r  r{   r  s          rg   r  zCTE.__init__i  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  rT   with_cter  r:  rT  objectsmodelr   re   r  rE  s      rg   select_fromzCTE.select_fromv  s     7 8 8 )(4.$t{{,,- 		MM$++"3"34E   		s   %A5 5	BBc                 l    t        | j                  | j                  t        | j                        f      S rc   )r  r  r  r/  r:  r  s    rg   r  zCTE._get_hash  s$    T^^T[["T[[/BCCri   c                     | j                   j                         }t        | j                  ||z   | j                  | j
                        S rc   r:  rf  r  r  r;  r  re   r   rf  s      rg   	union_allzCTE.union_all  5    !!#4;;T__dmmLLri   c                     | j                   j                         }t        | j                  ||z  | j                  | j
                        S rc   rG  rH  s      rg   unionz	CTE.union  rJ  ri   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 Tr3  )r  rP  r3  rn  r  r-  r  r  r%  r5  r<  rK  r:  rB  s     rg   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  )rj   rk   rl   r  rD  r  rI  r   rL  r  r/  r  r  s   @rg   r  r  h  s8    =A".DM GM Fri   r  c                   $   e Zd ZdZej
                  dd       Zd Zd Zd Z	d Z
ddZeZddZeZd	 Zdd
Z eej$                        Z eej(                        Z eej,                        Z ee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 rc   )
_converter)re   r9  s     rg   r9  zColumnBase.converter  s	    #ri   c                 "    |rt        | |      S | S rc   )Aliasre   r  s     rg   r  zColumnBase.alias  s    u%%ri   c                     | S rc   rd   r  s    rg   unaliaszColumnBase.unalias  ru  ri   c                     t        | |      S rc   )BindTo)re   r  s     rg   bind_tozColumnBase.bind_to  s    dD!!ri   c                     t        | |      S rc   )r    )re   as_types     rg   castzColumnBase.cast  s    D'""ri   c                     t        | ||      S N)	collationnulls)Ascre   r_  r`  s      rg   asczColumnBase.asc  s    49E::ri   c                     t        | ||      S r^  )Descrb  s      rg   desczColumnBase.desc  s    DIU;;ri   c                     t        |       S rc   )Negatedr  s    rg   
__invert__zColumnBase.__invert__  r  ri   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 rc   r  )re   r   invr  s     rg   r  zColumnBase._e.<locals>.inner  s$    !#r400dB,,ri   rd   )r  rl  r  s   `` rg   r  zColumnBase._e  s    
	- ri   T)rl  c                 `    |t         j                  nt         j                  }t        | ||      S rc   )rI   r  r   r  r  s      rg   r  zColumnBase.__eq__  s$    kRUUruu$C((ri   c                 `    |t         j                  nt         j                  }t        | ||      S rc   )rI   r	  r  r  r  s      rg   r  zColumnBase.__ne__  s$    +RYY255$C((ri   c                 `    |rt         j                  nt         j                  }t        | |d       S rc   )rI   r  r	  r  )re   is_nullr  s      rg   rp  zColumnBase.is_null  s"    RUU299$D))ri   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\%Fr8  ESCAPE)findr   NodeListr]   rU   )re   ru   templates      rg   _escape_like_exprzColumnBase._escape_like_expr   s    66#;!qvvc{a/166$<13D		$'//U;CCCOA hle4Hde,. / / !|ri   c           	          t        |t              r5t        dt        j                  t        |t        j                  d            }n| j                  |d      }t        | t        j                  |      S )Nr   z%%%s%%rz   rm  r  rI   r  rx  r  r   s     rg   containszColumnBase.contains  sU    c4 S"))'RYY<>C ((h7C$#..ri   c                     t        |t              rt        |t        j                  d      }n| j                  |d      }t        | t        j                  |      S )Nr   z%s%%rz  r   s     rg   
startswithzColumnBase.startswith  C    c4 S"))S1C((f5C$#..ri   c                     t        |t              rt        dt        j                  |      }n| j                  |d      }t        | t        j                  |      S )Nr   z%%%srz  r   s     rg   endswithzColumnBase.endswith  r~  ri   c           
      b    t        | t        j                  t        |t	        d      |f            S )Nr   )r  rI   r  rv  rU   )re   lohis      rg   betweenzColumnBase.between  s%    $

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

DII66t|ri   c                 .    t        t        d      | f      S )NDISTINCTrv  rU   r  s    rg   distinctzColumnBase.distinct+  s    Z$/00ri   c                 4    t        | t        d|z        f      S )N
COLLATE %sr  re   r_  s     rg   collatezColumnBase.collate.  s    s<)#;<=>>ri   c                      yr  rd   rB  s     rg   r  zColumnBase.get_sort_key1  s    ri   rc   r  r  rv  )Trj   rk   rl   rQ  rm  rX  r9  r  rV  rY  r\  rc  __pos__rf  __neg__ri  r  rI   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  iregexprp  rx  r{  r}  r  r  r  r  __iter__r  r  r  rd   ri   rg   rO  rO    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?ri   rO  c                   $    e Zd Zd Zd Zd Zd Zy)r$   c                      || _         || _        y rc   )rY  r  )re   rY  r  s      rg   r  zColumn.__init__6  s    	ri   c                     |j                   t        k(  r| j                  fS | j                  j	                  |      | j                  fz   S rc   )r  rN  r  rY  r  rB  s     rg   r  zColumn.get_sort_key:  s:    99$II<;;++C0DII<??ri   c                 D    t        | j                  | j                  f      S rc   )r  rY  r  r  s    rg   r  zColumn.__hash__@  s    T[[$)),--ri   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Nr^  )r  rN  r3  rn  r  r;  rY  r%  rB  s     rg   r/  zColumn.__sql__C  sz    99$776$)),--!!# Pwwt{{+33C8<<VDII=NOP P Ps   ABB'N)rj   rk   rl   r  r  r  r/  rd   ri   rg   r$   r$   5  s    @.Pri   r$   c                       e Zd Zd Zd Zd Zy)WrappedNodec                 Z    || _         t        |dd      | _        t        |dd       | _        y )Nrn  TrQ  )rG  r   rn  rQ  rF  s     rg   r  zWrappedNode.__init__L  s)    	tY5!$d;ri   c                 6    | j                   j                         S rc   )rG  rr  r  s    rg   rr  zWrappedNode.is_aliasQ  s    yy!!##ri   c                 6    | j                   j                         S rc   )rG  rt  r  s    rg   rt  zWrappedNode.unwrapT  s    yy!!ri   N)rj   rk   rl   r  rr  rt  rd   ri   rg   r  r  K  s    <
$"ri   r  c                       e Zd ZdZd Zd Zy)EntityFactoryr{  c                     || _         y rc   r{  rF  s     rg   r  zEntityFactory.__init__Z  r}  ri   c                 .    t        | j                  |      S rc   )rn  rG  r   s     rg   r   zEntityFactory.__getattr__\  r  ri   N)rj   rk   rl   r  r  r   rd   ri   rg   r  r  X  s    I'ri   r  c                       e Zd ZdZddZy)_DynamicEntityrd   Nc                 4    |t        |j                        S | S rc   )r  r  r  s      rg   r  z_DynamicEntity.__get__b  s     11ri   rc   r  rd   ri   rg   r  r  `  s    Iri   r  c                        e Zd Z e       Z fdZd Zed        Zej                  d        Zd	dZ
d Zd Zd Z xZS )
rS  c                 :    t         t        |   |       || _        y rc   )r  rS  r  r  )re   rG  r  r  s      rg   r  zAlias.__init__k  s    eT#D)ri   c                 ,    t        | j                        S rc   )r  r  r  s    rg   r  zAlias.__hash__o      DKK  ri   c                     | j                   S rc   r  r  s    rg   r  z
Alias.namer  s    {{ri   c                     || _         y rc   r  re   r   s     rg   r  z
Alias.nameu  	    ri   c                 J    || j                   S t        | j                   |      S rc   )rG  rS  rT  s     rg   r  zAlias.aliasy  s"    =99E**ri   c                     | j                   S rc   r{  r  s    rg   rV  zAlias.unalias      yyri   c                      yrJ  rd   r  s    rg   rr  zAlias.is_alias  s    ri   c                    |j                   t        k(  rL|j                  | j                        j	                  d      j                  t        | j                              S |j                  t        | j                              S r  )r  rL  r3  rG  r%  rn  r  rB  s     rg   r/  zAlias.__sql__  sY    99$S^WV_S,-/
 776$++.//ri   rc   )rj   rk   rl   r  r{   r  r  r  r  setterr  rV  rr  r/  r  r  s   @rg   rS  rS  h  sS    A!  	[[ +0ri   rS  c                   $     e Zd Z fdZd Z xZS )rX  c                 :    t         t        |   |       || _        y rc   )r  rX  r  r  )re   rG  r  r  s      rg   r  zBindTo.__init__  s    fd$T*	ri   c                 8    |j                  | j                        S rc   r3  rG  rB  s     rg   r/  zBindTo.__sql__  s    wwtyy!!ri   rj   rk   rl   r  r/  r  r  s   @rg   rX  rX    s    "ri   rX  c                       e Zd Zd Zd Zy)rh  c                     | j                   S rc   r{  r  s    rg   ri  zNegated.__invert__  r  ri   c                 V    |j                  d      j                  | j                        S )NzNOT )r%  r3  rG  rB  s     rg   r/  zNegated.__sql__  s     {{6"&&tyy11ri   Nrj   rk   rl   ri  r/  rd   ri   rg   rh  rh    s    2ri   rh  c                   $    e Zd Zd Zd Zd Zd Zy)BitwiseMixinc                 $    | j                  |      S rc   )r  r  s     rg   r  zBitwiseMixin.__and__  s    ||E""ri   c                 $    | j                  |      S rc   )r  r  s     rg   r  zBitwiseMixin.__or__  s    {{5!!ri   c                 @    | j                  |j                               S rc   )r  bin_negatedr  s     rg   r  zBitwiseMixin.__sub__  s    ||E--/00ri   c                     t        |       S rc   )BitwiseNegatedr  s    rg   ri  zBitwiseMixin.__invert__  s    d##ri   N)rj   rk   rl   r  r  r  ri  rd   ri   rg   r  r    s    #"1$ri   r  c                       e Zd Zd Zd Zy)r  c                     | j                   S rc   r{  r  s    rg   ri  zBitwiseNegated.__invert__  r  ri   c                    |j                   j                  r;|j                   j                  j                  | j                  | j                        }n| j                  }|j	                  |      j                  | j                        S rc   )r  
operationsr  r  r%  r3  rG  )re   rC  op_sqls      rg   r/  zBitwiseNegated.__sql__  sZ    99YY))--dggtww?FWWF{{6"&&tyy11ri   Nr  rd   ri   rg   r  r    s    2ri   r  c                       e Zd ZddZd Zy)r]   Nc                 f   || _         || _        |xr t        | j                   t              | _        | j                  rtg | _        | j                   D ]]  }t        |t              r| j
                  j                  |       /| j
                  j                  t        || j                               _ y y rc   )	r   r9  rz   multi_typesmultir-  rm  r  r]   )re   r   r9  unpackr  s        rg   r  zValue.__init__  s    
"C
4::{ C
::DK

 DdD)KK&&t,KK&&uT4>>'BC	D ri   c                     | j                   r$|j                  t        | j                              S |j	                  | j                  | j
                        S rc   )r  r3  r5  r-  r   r9  rB  s     rg   r/  zValue.__sql__  s;    ::77+DKK899yyT^^44ri   rJ  r  rd   ri   rg   r]   r]     s    
D5ri   r]   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)r<  r  rB  s     rg   r/  zValueLiterals.__sql__  s/    % 	&77499%	& 	& 	&s   /8Nrj   rk   rl   r/  rd   ri   rg   r  r        &ri   r  c                     t        | |d      S NFr  )r]   )r   r9  s     rg   r   r     s    	%00ri   c                   $     e Zd Z fdZd Z xZS )r    c                 H    t         t        |   |       || _        d| _        y rq  )r  r    r  _castrn  )re   rG  r\  r  s      rg   r  zCast.__init__  s     dD"4(
ri   c                     |j                  d      j                  | j                        j                  d| j                  z        S )NzCAST(z AS %s))r%  r3  rG  r  rB  s     rg   r/  zCast.__sql__  s4    !TYYTZZ/0	2ri   r  r  s   @rg   r    r      s    
2ri   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)ru  lastz<Ordering nulls= parameter must be "first" or "last", got: %s)r  r  r  	directionr_  r`  rt  r  )re   rG  r  r_  r`  r  s        rg   r  zOrdering.__init__  sY    h&t,""
U[[]*;; /167 8 8 <5ri   c                 D    t        | j                  | j                  |      S rc   )r  rG  r  r  s     rg   r  zOrdering.collate  s    		4>>9==ri   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   ru  )r   r   z&unsupported value for nulls= ordering.)rt  r  r   rG  rp  )re   r`  ifnullnotnulls       rg   _null_ordering_casezOrdering._null_ordering_case  s`    ;;=F""OFG[[]g%"OFGEFFDDII--/8:GDDri   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)	r`  r  nulls_orderingr3  r  r%  rG  r  r_  rB  s     rg   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
ri   r  rc   )rj   rk   rl   r  r  r  r/  r  r  s   @rg   r  r    s    8>E	ri   r  c                     t        | d||      S )NASCr  rG  r_  r`  s      rg   ra  ra    s    D%E22ri   c                     t        | d||      S )NDESCr   r  s      rg   re  re    s    D&)U33ri   c                       e Zd ZddZd Zy)r  c                 <    || _         || _        || _        || _        y rc   )r$  r  r   flat)re   r$  r  r   r  s        rg   r  zExpression.__init__  s    	ri   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_exprr9  
is_fk_exprr   ()z0 = 1z1 = 1r]  r)  rd   )r  r$  rz   r  rt  r6   rn  db_valuer:   r  r  r  r  rI   r  r  r  rH  r   r%  r  r	  rU   r3  )re   rC  rZ  rG  raw_noder  op_inr   s           rg   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  rd   ri   rg   r  r    s    "ri   r  c                       e Zd Zd Zd Zy)r  c                 $    | j                  |      S rc   )r  r   s     rg   r   zStringExpression.__add__=  s    {{3ri   c                 8    t        |t        j                  |       S rc   r  )re   r$  s     rg   r  zStringExpression.__radd__?  s    RYY55ri   N)rj   rk   rl   r   r  rd   ri   rg   r  r  <  s     6ri   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)rn  c                 ^    |D cg c]  }|s|j                  dd       c}| _        y c c}w )N""")r   r  )re   r`  rb  s      rg   r  zEntity.__init__D  s$    :>G$$dll3-G
Gs   **c                 .    t        | j                  |gz    S rc   )rn  r  r   s     rg   r   zEntity.__getattr__G  s    tzzTF*++ri   c                 ,    t        | j                        S rc   )ri  r  rB  s     rg   r  zEntity.get_sort_keyJ  s    TZZ  ri   c                 j    t        | j                  j                  t        | j                        f      S rc   )r  r  rj   ri  r  r  s    rg   r  zEntity.__hash__M  s%    T^^,,eDJJ.?@AAri   c                 |    |j                  t        | j                  |j                  j                  xs d            S )Nr  )r%  rc  r  r  rB  s     rg   r/  zEntity.__sql__P  s)    {{5SYY__-DEFFri   N)rj   rk   rl   r  r   r  r  r/  rd   ri   rg   rn  rn  C  s    H,!BGri   rn  c                       e Zd ZddZd Zy)rU   Nc                      || _         || _        y rc   r3  rX  re   r3  rX  s      rg   r  zSQL.__init__U  s    ri   c                     |j                  | j                         | j                  r%| j                  D ]  }|j                  |dd        |S NF)r?  )r%  r3  rX  r   re   rC  r>  s      rg   r/  zSQL.__sql__Y  sC    DHH;; 9		%%	89
ri   rc   r  rd   ri   rg   rU   rU   T  s    ri   rU   c                 f    t        d| z        }|s|S t        t        d      t        |      |f      S )Nz
CHECK (%s)
CONSTRAINT)rU   rv  rn  )
constraintr  checks      rg   r"   r"   a  s4    z)*ES&te<==ri   c                     t        d| z        S )Nz
DEFAULT %srU   rj  s    rg   r.   r.   h  s    |e#$$ri   c                       e Zd Z ed      Zd
dZd Zej                  dd       Z	ej                  d        Z
ej                  dd       Z	 	 ddZd	 Zy)Function)sumcountavgr\  	array_aggNc                     || _         || _        d | _        d | _        || _        |r$|j                         | j                  v rd| _        y || _        y rq  )r  	arguments_filter	_order_by_python_valuert  no_coerce_functionsrn  )re   r  r-  ro  python_values        rg   r  zFunction.__init__o  sJ    	")DJJLD$<$<< DL!DLri   c                     fd}|S )Nc                      t        | fi |S rc   )r'  )r  r  r   s     rg   	decoratorz'Function.__getattr__.<locals>.decorator{  s    D$1&11ri   rd   )re   r   r5  s    ` rg   r   zFunction.__getattr__z  s    	2ri   c                     || _         y rc   )r.  )re   wheres     rg   filterzFunction.filter  	    ri   c                     || _         y rc   r/  )re   orderings     rg   order_byzFunction.order_by  	    !ri   c                     || _         y rc   )r0  )re   funcs     rg   r2  zFunction.python_value  s
    !ri   c           	          t        |t              r||}|t        |      }nt        ||||||d      }t        | t	        d      |f      S )NT)partition_byr=  r  end
frame_typeexclude_inlineOVER)rz   r_   WindowAliasrv  rU   )	re   rB  r=  r  rC  rD  windowrE  rG  s	            rg   overzFunction.over  sW    lF+!Fv&D|h %3:")49D s6{D122ri   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
  r~  ORDER BYT)in_functionfunction_arg_countFz FILTER (WHERE r'  )r%  r  r   r-  r/  rh  rv  rU   r4  r3  r5  rz   rm  r]   r.  )re   rC  r  args       rg   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)TNrc   NNNNNNN)rj   rk   rl   setr1  r  r   rm  rX  r8  r=  r2  rJ  r/  rd   ri   rg   r'  r'  l  st    JK	"
 
YY  
YY" " 
YY" " FJ373ri   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  rz   rU   rk  rB  r=  r  rC  r  r  rF  rD  _extends_exclude)re   rB  r=  r  rC  rD  extendsrE  r  rF  r  s             rg   r  zWindow.__init__  s     	fd$&Zs%;JE?:c3#7c(C(6$X.
::$(("6GHHls$ri   c                     |xs d| _         | S NrY  r  rT  s     rg   r  zWindow.alias  s    lsri   c                 .    t         j                  | _        y rc   )r_   rV  rD  r  s    rg   as_rangezWindow.as_range  s     ,,ri   c                 .    t         j                  | _        y rc   )r_   rW  rD  r  s    rg   as_rowszWindow.as_rows  s     ++ri   c                 .    t         j                  | _        y rc   )r_   rU  rD  r  s    rg   	as_groupszWindow.as_groups  s     --ri   c                     || _         y rc   )rZ  re   rI  s     rg   r\  zWindow.extends  s	    ri   c                 H    t        |t              rt        |      }|| _        y rc   )rz   r=  rU   r[  )re   frame_exclusions     rg   rE  zWindow.exclude  s    oz2!/2O'ri   c                 8    | t        d      S t        d| z        S )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGr%  rj  s    rg   	followingzWindow.following  #    =,-->E)**ri   c                 8    | t        d      S t        d| z        S )NzUNBOUNDED PRECEDINGz%d PRECEDINGr%  rj  s    rg   	precedingzWindow.preceding  rk  ri   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  Tr3  zPARTITION BYrL  rW  z
%s BETWEENr   z%s UNBOUNDED PRECEDINGEXCLUDE)r  rL  rF  r%  r  rZ  rz   r_   rU   r=  r  rB  rA  r4  r=  r  rC  rD  r[  r3  rv  )re   rC  partsextframes        rg   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)	NNNNNNNNFrc   )rj   rk   rl   rU   CURRENT_ROWrS  rT  	NO_OTHERSrU  rV  rW  r  r  rm  rX  r`  rb  rd  r\  rE  rx  rj  rm  r/  r  r  s   @rg   r_   r_     s    m$KLEv;DK I FEDIMDH * 
YY' ' 
YY& & 
YY( ( 
YY  
YY( (
 + +
 + +
$ri   r_   c                       e Zd Zd Zd Zd Zy)rH  c                     || _         y rc   )rI  rf  s     rg   r  zWindowAlias.__init__$  r  ri   c                 (    || j                   _        | S rc   )rI  r  )re   window_aliass     rg   r  zWindowAlias.alias'  s    )ri   c                 T    |j                  | j                  j                  xs d      S r^  )r%  rI  r  rB  s     rg   r/  zWindowAlias.__sql__+  s     {{4;;--455ri   N)rj   rk   rl   r  r  r/  rd   ri   rg   rH  rH  #  s    6ri   rH  c                       e Zd ZddZd Zy)_InFunctionc                      || _         || _        y rc   )rG  rM  )re   rG  rM  s      rg   r  z_InFunction.__init__0  s    	&ri   c                      || j                         5  |j                  | j                        cd d d        S # 1 sw Y   y xY w)NrM  )rM  r3  rG  rB  s     rg   r/  z_InFunction.__sql__4  s5    T--. 	&77499%	& 	& 	&s	   9ANrv  r  rd   ri   rg   r{  r{  /  s    '&ri   r{  c                       e Zd ZddZd Zy)r   Nc                 .    || _         || _        || _        y rc   )r'  expression_tuplesdefault)re   r'  r  r  s       rg   r  zCase.__init__:  s    "!2ri   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ENDFr~  )	rU   r'  r  r  rA  r{  r  r3  rv  )re   rC  clausesexprr   s        rg   r/  zCase.__sql__?  s    v;->>%NN4>>*11 	>KD%NNCKKU);= >	> <<#NNCKT\\)BCDs5z"U# 	.778G,-	. 	. 	.s   C::Drc   r  rd   ri   rg   r   r   9  s    
.ri   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)	rt  r  _exprrz   rh  rQ  ri  _of_nowait)re   r  ofr  s       rg   r  zForUpdate.__init__N  sd    #t||::<  *9DF
>*R$U1C"DBri   c                     |j                  | j                         | j                  3|j                  d      j                  t	        | j                               | j
                  r|j                  d       |S )Nz OF z NOWAIT)r%  r  r  r3  r4  r  rB  s     rg   r/  zForUpdate.__sql__Z  sT    DJJ88KK##M$(($;<<<KK	"
ri   r  r  rd   ri   rg   r  r  M  s    
ri   r  c                       e Zd ZddZd Zy)rv  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   rz   r  r  rf  )re   r  r  r  s       rg   r  zNodeList.__init__d  s    
	c$**o*djjmZ0zz!}!!**Q---/1DJ!%DJJqM " 1 +6ri   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
  r3  r   )r   r  r  r%  r  r3  r  )re   rC  n_nodesis       rg   r/  zNodeList.__sql__o  s    djj/a<(,3;;t$<<T[[) 	-7Q;' '

1&DII&' GGDJJw{+,		-
 
	-
 
s   A.CCN)r   Fr  rd   ri   rg   rv  rv  c  s    	&	ri   rv  c                     t        | d      S Nr  rv  r  s    rg   r4  r4  {  s    E4  ri   c                     t        | dd      S )Nr  Tr  r  s    rg   r5  r5    s    E4&&ri   c                        e Zd ZdZd Zd ZeZy)
_Namespace_namec                     || _         y rc   r  r  s     rg   r  z_Namespace.__init__  s	    
ri   c                     t        | |      S rc   )NamespaceAttributer   s     rg   r   z_Namespace.__getattr__  s    !$--ri   Nr  rd   ri   rg   r  r    s    I.Kri   r  c                       e Zd Zd Zd Zy)r  c                      || _         || _        y rc   )
_namespace
_attribute)re   	namespace	attributes      rg   r  zNamespaceAttribute.__init__  s    ##ri   c                     |j                  | j                  j                  dz         j                  t	        | j
                              S r  )r%  r  r  r3  rn  r  rB  s     rg   r/  zNamespaceAttribute.__sql__  s6    ..45VDOO,-	/ri   Nr  rd   ri   rg   r  r    s    $/ri   r  r5   c                   H     e Zd Z fdZej
                  d        Zd Z xZS )r4   c                 F    t         t        |           || _        d| _        y rq  )r  r4   r  rE  _negatedre   rE  r  s     rg   r  zDQ.__init__  s    b$ "
ri   c                 (    | j                    | _         y rc   )r  r  s    rg   ri  zDQ.__invert__  s     MM)ri   c                 R    t        di | j                  }| j                  |_        |S r  )r4   rE  r  rF  s     rg   rf  zDQ.clone  s#    DJJri   )	rj   rk   rl   r  rm  rX  ri  rf  r  r  s   @rg   r4   r4     s%    
 
YY* *ri   r4   c                      t        |       S rc   )r5  )as    rg   r|   r|     s    #A& ri   c                       e Zd Zd Zy)rQ   c                     |j                         5  |j                  | j                        cd d d        S # 1 sw Y   y xY wrc   )r;  r3  rG  rB  s     rg   r/  zQualifiedNames.__sql__  s3     	&77499%	& 	& 	&s   6?Nr  rd   ri   rg   rQ   rQ     r  ri   rQ   c                     t        | t              rN| j                  t        | j                        | j
                  t        | j                        | j                        S t        | t              rt        |       S | S rc   )
rz   r  r  qualify_namesr$  r  r   r  rO  rQ   r{  s    rg   r  r    s^     $
#~~mDHH5tww+DHH5tyyB 	B	D*	%d##Kri   c                       e Zd Z	 	 	 ddZd Zd Zej                  d        Zej                  dd       Z	ej                  d        Z
ej                  d        Zej                  d	        Zej                  d
        Zy)
OnConflictNc                     || _         || _        t        |      | _        || _        ||t        d      t        |      | _        || _        || _        y )NzIonly one of "conflict_target" and "conflict_constraint" may be specified.)	_action_updaterk  	_preserve_wherer  _conflict_target_conflict_where_conflict_constraint)re   actionr   preserver7  conflict_targetconflict_whereconflict_constraints           rg   r  zOnConflict.__init__  sc     %h/&+>+J G H H ,_ =-$7!ri   c                 :    |j                   j                  | |      S rc   )r  conflict_statementre   rC  rE  s      rg   get_conflict_statementz!OnConflict.get_conflict_statement  s    yy++D%88ri   c                 :    |j                   j                  | |      S rc   )r  conflict_updater  s      rg   get_conflict_updatezOnConflict.get_conflict_update  s    yy((u55ri   c                     || _         y rc   )r  r  s     rg   r  zOnConflict.preserve  s	     ri   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.)rz   dictr  r   r  )re   _datar  s      rg   r   zOnConflict.update  sA    VJud$; 9 : :LL ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   r  rx   operatorand_re   expressionss     rg   r7  zOnConflict.where  .    ;;";;.;6KX]]K8ri   c                      d | _         || _        y rc   r  r  )re   constraintss     rg   r  zOnConflict.conflict_target  s    $(! +ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   )r  rx   r  r  r  s     rg   r  zOnConflict.conflict_where  s4    +//1K?K%hmm[Ari   c                      || _         d | _        y rc   r  )re   r"  s     rg   r  zOnConflict.conflict_constraint  s    $.! $ri   rP  rc   )rj   rk   rl   r  r  r  rm  rX  r  r   r7  r  r  r  rd   ri   rg   r  r    s    FJ6:%)896 
YY! ! 
YY  
YY9 9
 
YY, , 
YYB B
 
YY% %ri   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".)rT  r@   rj   )re   r  r  r  r  s       rg   r  z database_required.<locals>.inner  sN    %-%54>>8  "139??"C D DdH6t6v66ri   rc   r   r  s   ` rg   database_requiredr    s     
6]7 7 Lri   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  )rT  _cursor_wrapper	_row_type_constructorr  r  r  )re   rT  r  r  s      rg   r  zBaseQuery.__init__  s3    "# i'1&1ri   c                     || _         | S rc   r	  r
  s     rg   r  zBaseQuery.bind  r  ri   c                 :    t         t        |          }d |_        |S rc   )r  r  rf  r  r  s     rg   rf  zBaseQuery.clone  s    i,. $ri   c                 F    |rt         j                  | _        | S d | _        | S rc   )ROWrJ  r  )re   as_dicts     rg   dictszBaseQuery.dicts  s"    %, 37ri   c                 F    |rt         j                  | _        | S d | _        | S rc   )r  rI  r  )re   as_tuples     rg   tupleszBaseQuery.tuples  s"    &. 59ri   c                 F    |rt         j                  | _        | S d | _        | S rc   )r  rK  r  )re   as_namedtuples     rg   namedtupleszBaseQuery.namedtuples  s$    ,9 @Dri   c                 F    |rt         j                  nd | _        || _        | S rc   )r  rL  r  r  re   constructors     rg   rA  zBaseQuery.objects$  s    ,7T'ri   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  rJ  DictCursorWrapperrI  CursorWrapperrK  NamedTupleCursorWrapperrL  ObjectCursorWrapperr  r  re   cursorrow_types      rg   _get_cursor_wrapperzBaseQuery._get_cursor_wrapper*  s    >>:T%:%:sxx$V,," (((*622(&vt/@/@AA;hFGGri   c                     t         rc   rh  rB  s     rg   r/  zBaseQuery.__sql__8  rj  ri   c                     | j                   r| j                   j                         }n
t               }|j                  |       S rc   )rT  rV  r&   rH  )re   contexts     rg   r3  zBaseQuery.sql;  s1    >>nn446GiG}}T""ri   c                 $    | j                  |      S rc   )_executer
  s     rg   executezBaseQuery.executeB  s    }}X&&ri   c                     t         rc   rh  r
  s     rg   r  zBaseQuery._executeF  rj  ri   c                 R    t        | j                  |      j                               S rc   )r  r	  iteratorr
  s     rg   r  zBaseQuery.iteratorI  s    DLL*33566ri   c                 l    | j                   (| j                  st        d      | j                          y y )NzQuery has not been executed.)r  rT  r  r	  r  s    rg   _ensure_executionzBaseQuery._ensure_executionL  s/    '>> !?@@LLN (ri   c                 L    | j                          t        | j                        S rc   )r  r  r  r  s    rg   r  zBaseQuery.__iter__R  s     D(())ri   c                     | j                          t        |t              r|j                  }n|}||dk\  r|dz   nd}| j                  j                  |       | j                  j                  |   S Nr   r   )r  rz   r  r  r  
fill_cache	row_cache)re   r   r  s      rg   r  zBaseQuery.__getitem__V  sh     eU#JJEE!&!EAIE''.##--e44ri   c                 L    | j                          t        | j                        S rc   )r  r   r  r  s    rg   __len__zBaseQuery.__len__a  s     4''((ri   c                     t        |       S rc   )rY  r  s    rg   __str__zBaseQuery.__str__e  s    t$$ri   rc   rv  )rj   rk   rl   r  rJ  r  r  r  rf  rm  rX  r  r  r  rA  r  r/  r3  r  r	  r  r  r  r  r  r  r  r  r  s   @rg   r  r    s    xx2
 
YY  
YY  
YY  
YY 
H"# ' '"7*	5)%ri   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)re   r3  rX  r  r  s       rg   r  zRawQuery.__init__j  s#    h&00	ri   c                     |j                  | j                         | j                  r$| j                  D ]  }|j                  |d        |S r  )r%  r  r  r   r  s      rg   r/  zRawQuery.__sql__o  sA    DII<< 2		%5	12
ri   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S rc   r  r	  r  re   r  r  s      rg   r  zRawQuery._executev  =    '%%d+F#'#;#;F#CD ###ri   r  )rj   rk   rl   r  r/  r  r  r  s   @rg   r  r  i  s    
$ri   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_offsetr>  )re   r7  r=  limitoffsetr  r  s         rg   r  zQuery.__init__~  s8    eT#-f-!ri   c                     || _         y rc   )r>  )re   cte_lists     rg   r@  zQuery.with_cte  r>  ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   r  r  s     rg   r7  zQuery.where  r  ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   )r  rx   r  or_r  s     rg   orwherezQuery.orwhere  s.    ;;";;.;6KX\\;7ri   c                     || _         y rc   r;  re   r-  s     rg   r=  zQuery.order_by  s	    ri   c                 <    | j                   xs d|z   xs d | _         y r  r;  r/  s     rg   order_by_extendzQuery.order_by_extend  s    >>/R69Bdri   c                     || _         y rc   )r$  r  s     rg   r&  zQuery.limit  r  ri   c                     || _         y rc   )r%  r  s     rg   r'  zQuery.offset  r9  ri   c                 :    |dkD  r|dz  }|| _         ||z  | _        y r  )r$  r%  )re   pagepaginate_bys      rg   paginatezQuery.paginate  s%    !8AID!k)ri   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%  r3  r4  r$  r%  r  	limit_max)re   rC  r&  s      rg   _apply_orderingzQuery._apply_ordering  s    >>gl#c-/0;;"t||'?'*yy':':+/;;+>CII''DKKEKK	"&&u-<<#KK
#''5
ri   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rc   )r;  )ry  r  s     rg   r{  z Query.__sql__.<locals>.<genexpr>  s     EsCNNEs   Fr!  zWITH RECURSIVE zWITH r   )r>  anyrQ  r%  r3  r4  )re   rC  r  s      rg   r/  zQuery.__sql__  s    >> EdnnEEI .  'y+gF#mDNN34'#,	 
 
s
 
 
s   ABB)NNNNrc   )   )rj   rk   rl   r  rm  rX  r@  r7  r-  r=  r1  r&  r'  r7  r:  r/  r  r  s   @rg   r"  r"  }  s     
YY" " 
YY9 9
 
YY8 8
 
YY    
YYC C 
YY  
YY  
YY* *ri   r"  c                 (     t          fd       }|S )Nc                 *    r|| }} t        | |      S rc   )CompoundSelectQuery)re   r  r  	operations     rg   r  z#__compound_select__.<locals>.method  s    %D"4E::ri   )r  )rC  r  r  s   `` rg   __compound_select__rD    s    ; ; Mri   c                       e Zd Z ed      xZZ ed      xZZ ed      xZZ	 ed      xZ
Z edd      Z edd      Z edd      Z edd      Zd Z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.rB  )r  rT   r  rT  r   rA  rB  rC  s      rg   rD  zSelectQuery.select_from  sV    NOO)$t~~& 	4$'3MM$**-Eri   N)rj   rk   rl   rD  rI  r   rL  r  	intersectr  except_r  r  r  r  r  rD  rd   ri   rg   rF  rF    ss    -k::I(11EF-k::I+H55Gg";>H!'D9G";>H"8d;H	ri   rF  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 rc   )r  r  r  r/  r  s    rg   r  zSelectBase._get_hash  s#    T^^T[[%<BtH=>>ri   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S rc   r  r  s      rg   r  zSelectBase._execute  r   ri   c                 H    | j                  |      d | }|r|dk(  r|d   S |S y Nr   r   )r	  )re   r  r  rowss       rg   peekzSelectBase.peek  s4    ||H%bq)1f47.$. ri   c                 b    | j                   |k7  r|| _         d | _        | j                  ||      S )N)r  )r$  r  rU  )re   r  r  s      rg   ru  zSelectBase.first  s0    ;;!DK#'D yyQy''ri   c                     |r| j                         j                  |      S | j                         j                  |      }|r|s|d   S |S r  )r  rU  r  )re   r  r  r  r6  s        rg   scalarzSelectBase.scalar	  sE    ::<$$X..kkm  *Xs1v636ri   c              #   b   K   | j                         j                  |      D ]	  }|d     y wr  )r  r	  )re   r  r6  s      rg   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  rU   r   rT   r9   COUNTrX  )re   r  clear_limitrf  s       rg   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 )Nr]  r   )r  rU   r$  r%  boolrX  )re   r  rf  s      rg   existszSelectBase.exists	  s3    SX&ELLN##ri   c                 X    d | _         	 | j                  |      d   S # t        $ r Y y w xY wr  )r  r	  
IndexErrorr
  s     rg   r  zSelectBase.get#	  s5    #	<<)!,, 		s    	))N)r   FFr  )rj   rk   rl   r  r  r  rU  ru  rX  rZ  r)  rg  r  rd   ri   rg   rO  rO    s    ?$ / /
 ( ( 7 7   F F $ $  ri   rO  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 )rB  c                 T    t         t        |           || _        || _        || _        y rc   )r  rB  r  r$  r  r   )re   r$  r  r   r  s       rg   r  zCompoundSelectQuery.__init__0	  s&    !413ri   c                 .    | j                   j                  S rc   )r$  
_returningr  s    rg   rn  zCompoundSelectQuery._returning6	  s    xx"""ri   c                     t        | j                  d      ft        d      f      j                  |      }t	        |j                               S )Nr   r]  )rT   r&  rU   r  rf  rX  )re   r  rE  s      rg   rg  zCompoundSelectQuery.exists:	  s;    

1'#c(5::8DELLN##ri   c                 j    | j                   j                         | j                  j                         fS rc   )r$  get_query_keyr   r  s    rg   _get_query_keyz"CompoundSelectQuery._get_query_key?	  s'    &&($((*@*@*BCCri   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  rM  rz   rB  )re   rC  subqcsq_settings       rg   _wrap_parensz CompoundSelectQuery._wrap_parensB	  sj    ii;;k-BB2244yy  CII$9$9 
 "$(;<<< 5ri   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)Nr3  F)r  r!  r)  )r  rR  r  r  rB  r/  r!  rL  r{  r$  rK  r3  r%  r  r-  r   rO  r:  r  )re   rC  outer_parens
lhs_parens
rhs_parensr  s        rg   r/  zCompoundSelectQuery.__sql__T	  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=)rj   rk   rl   r  r  rn  r  rg  rr  r{  r/  r  r  s   @rg   rB  rB  /	  sE     # # $ $D=$% %ri   rB  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 )rT   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  rT   r  rz   ri  rh  
_from_listrn  r_  r^  r`  _for_update_for_update_of_for_update_nowait_lateralra  rb  rf  r  )re   	from_listr  group_byhavingr  windows
for_updatefor_update_ofr  lateralr  r  s               rg   r  zSelect.__init__s	  s     	fd$.v..8E.J4	? )1.0 	!!%+"(155.(D)(0%  $ "*#ri   c                 x    t         t        |          }|j                  rt	        |j                        |_        |S rc   )r  rT   rf  r  rh  re   rf  r  s     rg   rf  zSelect.clone	  s3    fd)+#E$4$45Eri   c                     || _         y rc   rn  )re   r  r  s      rg   r  zSelect.columns	  s	    !ri   c                 >    t        | j                        |z   | _        y rc   )ri  rn  r  s     rg   select_extendzSelect.select_extend	  s    07:ri   c                     | j                   S rc   r  r  s    rg   selected_columnszSelect.selected_columns	  s    ri   c                     || _         y rc   r  r  s     rg   r  zSelect.selected_columns	  s	    ri   c                 $    t        |      | _        y rc   )rh  r  re   sourcess     rg   from_zSelect.from_	  s    w-ri   c                     | j                   st        d      | j                   j                         }| j                   j                  t	        ||||             y )NNo sources to join on.)r  r  r  r  r  )re   r  r  r  r  s        rg   r_  zSelect.join	  sD    566""$tD$	2>?ri   c                 D    | j                  |t        j                  |      S rc   r_  rC   r@  r  s      rg   r  zSelect.left_outer_join	  s    yyt33ri   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.)rz   rW   r  r  rA  r   r  r_  re   r  groupingr  col_names        rg   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() callrd   )ri  r_  r  )re   r-  r  s      rg   group_by_extendzSelect.group_by_extend	  s+    -2.7t}}h''ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   )r^  rx   r  r  r  s     rg   r  zSelect.having	  s.    <<#<</K7Khmm[9ri   c                 n    t        |      dk(  r|d   du s|d   du r|d   | _        y d| _        || _        y )Nr   r   TF)r   rb  ra  r  s     rg   r  zSelect.distinct	  s?    w<1'!*"4
e8K$+AJD!$)D!$DNri   c                 &    |r|| _         y d | _         y rc   )r`  )re   r  s     rg   rI  zSelect.window	  s    #*ri   c                 >    |s||rd}|| _         || _        || _        y rJ  )r  r  r  )re   r  r  r  s       rg   r  zSelect.for_update	  s(    r~J% "(ri   c                     || _         y rc   )r  )re   r  s     rg   r  zSelect.lateral	  s	    ri   c                     | j                   S rc   r  r  s    rg   rr  zSelect._get_query_key	  s    {{ri   c                 J    |j                  t        | j                              S rc   )r3  r4  rn  re   rC  is_subquerys      rg   __sql_selection__zSelect.__sql_selection__	  s    ww}T__566ri   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)r9  rM  r  r!  r   r  zSELECT z	DISTINCT zON r   r3   FROM  WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.rd   )$r  rR  r  r  rL  r%  r!  r  rM  rN  rK  r  rT   r/  rb  ra  r3  r5  rM  r  r  r4  r  r_  r^  r`  r:  r  r  r  r  r  r  r  r  r  )re   rC  r  r  r  s       rg   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)
NNNNNNNNNNrc   TNNrv  r  )rj   rk   rl   r  rf  rm  rX  r  r  r  r  r  r  r  rC   r?  r_  r  r  r  r  r  rI  r  r  rr  r  r/  r  r  s   @rg   rT   rT   r	  s`   >BFJ:>$0 
YY" "F	YY; ;      
YY( ( 
YY#'::$ @ @4 
YY" "(
 
YY: :
 
YY% % 
YY5 5 
YY) ) 
YY   7F% F%ri   rT   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 )NTFrd   )r2  rn  _return_cursorr  r  r  )re   r2  	returningr  r  s       rg   r  z_WriteQuery.__init__1
  s/    
#&/dUk4)3F3ri   c                 "    t        || |||      S r  r  r  s        rg   r  z_WriteQuery.cte7
  r  ri   c                 4    || _         |rd| _        y d| _        y NTF)rn  r  )re   r  s     rg   r  z_WriteQuery.returning;
  s    #&/dUri   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 )rn  rM  r%  r3  r4  rB  s     rg   apply_returningz_WriteQuery.apply_returning@
  sV    ??!!# OM*..}T__/MNO
s
O
s   4AA'c                     | j                   r| j                  |      }n|j                  |       }| j                  ||      S rc   )rn  execute_returningr	  handle_resultr  s      rg   r  z_WriteQuery._executeF
  s<    ??++H5F%%d+F!!(F33ri   c                     | j                   '|j                  |       }| j                  |      | _         | j                   S rc   r  r  s      rg   r  z_WriteQuery.execute_returningM
  r   ri   c                 @    | j                   r|S |j                  |      S rc   )r  rows_affectedr  s      rg   r  z_WriteQuery.handle_resultS
  s!    M%%f--ri   c                 ^    | j                   j                  |j                  | j                   <   y rc   )r2  rj   r  rB  s     rg   _set_table_aliasz_WriteQuery._set_table_aliasX
  s     (,

(;(;$**%ri   c                 P    t         t        |   |       | j                  |       |S rc   )r  r  r/  r  re   rC  r  s     rg   r/  z_WriteQuery.__sql__[
  s'    k4(- 	c"
ri   rc   r  )rj   rk   rl   r  r  rm  rX  r  r  r  r  r  r  r/  r  r  s   @rg   r  r  0
  sH    4. 
YY; ;4$.
< ri   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 rc   )r  r  r  r  _from)re   r2  r   r  r  s       rg   r  zUpdate.__init__e
  s%    fd$U5f5
ri   c                     || _         y rc   )r  r  s     rg   r  zUpdate.from_j
  s	    
ri   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)NTr=  zUPDATE r  Fr  r   z SET r3  r  r  )r  r  r/  rO  r%  sortedr  r  r  rz   rm  r6   to_valuer]   rE   r:   r  r  rv  rU   r3  r2  r4  r  rM  r  rK  r:  r  )re   rC  r  krb  r  s        rg   r/  zUpdate.__sql__n
  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rc   )	rj   rk   rl   r  rm  rX  r  r/  r  r  s   @rg   r  r  d
  s*    
 
YY %- %-ri   r  c                       e Zd ZdZdZdZ G d de      Zd fd	Zd Z	e
j                  dd       Ze
j                  dd	       Ze
j                  dd
       Ze
j                  d        Zd Zd Zd Zd Zd Zd Z fdZ fdZd Z xZS )r  r   r   rn   c                       e Zd Zy)Insert.DefaultValuesExceptionNr  rd   ri   rg   DefaultValuesExceptionr  
  r  ri   r  c                 t    t        t        | 
  |fi | || _        || _        || _        d | _        d| _        y rq  )r  r  r  _insertr  _on_conflict_query_type_as_rowcount)re   r2  r  r  r  r  r  s         rg   r  zInsert.__init__
  s=    fd$U5f5'!ri   c                     t        d      )Nz*INSERT queries cannot have a WHERE clause.rh  r  s     rg   r7  zInsert.where
  s    !"NOOri   c                     || _         y rc   )r  )re   r  s     rg   as_rowcountzInsert.as_rowcount
  s
    (ri   c                 8    |rt        d      | _        y d | _        y )NIGNOREr  r  )re   ignores     rg   on_conflict_ignorezInsert.on_conflict_ignore
  s    4:Jx0ri   c                 8    |rt        d      | _        y d | _        y Nr  r  )re   r   s     rg   on_conflict_replacezInsert.on_conflict_replace
  s    5<Jy1$ri   c                 <    |s|rt        |i || _        y d | _        y rc   r  r  s      rg   r  zInsert.on_conflict
  s#    =AVZ88"& 	ri   c                 v    | j                   s| j                  d      | j                  | j                   f|      S )NError: no data to insert.)r  r  _generate_insertrB  s     rg   _simple_insertzInsert._simple_insert
  s4    ||--.IJJ$$dll_c::ri   c                     i S rc   rd   r  s    rg   get_default_datazInsert.get_default_data
  s    	ri   c                     | j                   j                  rQ| j                   j                  D cg c]1  }|| j                   j                  k7  rt        | j                   |      3 c}S y c c}w rc   )r2  r  r   r   )re   cols     rg   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 rc   r  r  rC  s    rg   r|   z)Insert._generate_insert.<locals>.<lambda>
      8H8H8M ri   r  c                 &    | j                        S rc   r  r  s    rg   r|   z)Insert._generate_insert.<locals>.<lambda>
  r  ri   z VALUES zMissing value for %s.F)r9  r  r  Tr=  )%r  r  r  nextStopIterationr  rz   r   r  r  r=  r   r2  r  rQ  r  	itertoolschainr  r  r6   column_namenullr:   r3  r5  r%  r  	enumerater   ri  	callable_rm  rE   r]   rO  r4  )re   r  rC  	rows_iterr  defaultsr6  accumr  
column_setr  clean_columnsseen
column_obj	fk_fieldsnullable_columnsvalue_lookupslookupscolumns_converters
all_valuesr-  is_dictr  r9  lookupvals     `                       rg   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   )r3  r5  r  r%  r  rB  s     rg   _query_insertzInsert._query_insert8  s5    %dmm45T\\"	$ri   c                 r    | j                   s|j                  d      S | j                   j                  |      S NzDEFAULT VALUES)rT  r%  default_values_insertrB  s     rg   _default_valueszInsert._default_values>  s.    ~~;;/00~~33C88ri   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/  rO  r  r  r3  rU   r%  r2  rz   r  r   r  r  r  r  SIMPLEr  rF  r  QUERYr  MULTIr  r  )re   rC  stmtr   r  s       rg   r/  zInsert.__sql__C  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rc   )rn  returning_clauser2  r   r  r  r  r  )re   r  r  s     rg   r  zInsert._executed  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 rc   )r  r  r  last_insert_idr  r  s      rg   r  zInsert.handle_resultm  sC    M))&11&&vt/?/?@@ri   NNNrv  )rj   rk   rl   r  r  r  	Exceptionr  r  r7  rm  rX  r  r  r  r  r  r  r  r  r  r  r/  r  r  r  r  s   @rg   r  r  
  s    FEE11"P 
YY) ) 
YYE E 
YYG G 
YY( (;
7
p6d$9
-BAri   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)NTr=  DELETE FROM r  )r  r  r/  rO  r%  r3  r2  r  rK  r:  r  r  s     rg   r/  zDelete.__sql__v  s    fd#C(t, 	-KK'++DJJ7{{&%%' <KK	*..t{{;<   %'',	- 	-< <	- 	-s$   AC.+C)CC	CC!)rj   rk   rl   r/  r  r  s   @rg   r  r  u  s    
- 
-ri   r  c                       e Zd Z	 	 ddZej
                  d	d       Zej
                  d        Zej
                  d
d       Zej
                  d
d       Z	d Z
y)r=   Nc	                     || _         t        |t              st        |      n|| _        || _        || _        || _        || _        || _	        || _
        | j                  | j                  st        d      y y Nz-NULLS DISTINCT is only available with UNIQUE.)r  rz   rW   rn  _table_expressionsr  _unique_safe_using_nulls_distinctr  )	re   r  r2  r  uniquesafer7  usingnulls_distincts	            rg   r  zIndex.__init__  sr    
+5eU+CfUm'
-+DLLLMM 5A+ri   c                     || _         y rc   )r'  )re   r'  s     rg   r+  z
Index.safe  s	    
ri   c                 z    | j                   | j                   f|z   }t        t        j                  |      | _         y rc   r  r  s     rg   r7  zIndex.where  r  ri   c                     || _         y rc   )r(  )re   r(  s     rg   r,  zIndex.using  s	    ri   c                 D    || j                   st        d      || _        y r#  )r&  r  r)  )re   r-  s     rg   r-  zIndex.nulls_distinct  s"    %dllLMM-ri   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(                         | j*                  |j                  | j*                  rdnd       d d d        |S c c}w # 1 sw Y   |S xY w)NzCREATE UNIQUE INDEX zCREATE INDEX Tr=  IF NOT EXISTS z	 USING %sr*  r   z	USING %s r  z NULLS DISTINCTz NULLS NOT DISTINCT)r&  rO  r%  r'  r  index_schema_prefixrz   r$  rW   r  rn  r  rj   r3  r(  index_using_precedes_tabler5  r%  r=  rU   r  r)  )re   rC  	statement
index_name
table_namer  s         rg   r/  zIndex.__sql__  s   .2ll*	t, %	3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;;7##/1E1E-13I%	3N 
&/;%	3N 
s   F>J !$I;A,J ;J  J
)FFNNNrv  rc   )rj   rk   rl   r  rm  rX  r+  r7  r,  r-  r/  rd   ri   rg   r=   r=     ss    DI8<N 
YY  
YY9 9
 
YY  
YY. .
)ri   r=   c                   *     e Zd Z	 	 d fd	Zd Z xZS )rF   c	           
          || _         || j                  ||      }|1|D ],  }	t        |	t              st	        |	d      s!|	j
                  }. t        t        | #  ||j                  j                  ||||||       y )N
index_type)r  r2  r  r*  r+  r7  r,  r-  )r  _generate_name_from_fieldsrz   r6   r  r;  r  rF   r  r1  r2  )re   rB  fieldsr*  r+  r7  r,  r  r-  fieldr  s             rg   r  zModelIndex.__init__  s    <225&AD= -eU+|0L!,,E- 	j$(++##) 	) 	+ri   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]+r4  rr  )rz   r=  r  r   rm  r6   rt  r  r  r   rr  r_  r1  legacy_table_namesr  r8  _truncate_constraint_name)re   rB  r=  r  r>  clean_field_namesrT  prefixs           rg   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Ori   )FTNNNN)rj   rk   rl   r  r<  r  r  s   @rg   rF   rF     s    EI7;+&Pri   rF   c                     t        |       |kD  rBt        j                  | j                  d            j	                         }| d |dz
   d|d d } | S )Nutf-8rO  rr     )r   hashlibmd5encode	hexdigest)r"  maxlen	name_hashs      rg   rB  rB    sQ    
:KK
 1 1' :;EEG	 *=VaZ 99Ra=I
ri   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  )rz   r  origr  rO  r  )re   r  r  s     rg   r  zPeeweeException.__init__  s9    JtAw	2"1gtABxODItot-t4ri   rj   rk   rl   r  r  r  s   @rg   rO  rO    s    5 5ri   rO  c                       e Zd Zy)r<   Nr  rd   ri   rg   r<   r<   	  r  ri   r<   c                       e Zd Zy)r(   Nr  rd   ri   rg   r(   r(   
  r  ri   r(   c                       e Zd Zy)r*   Nr  rd   ri   rg   r*   r*     r  ri   r*   c                       e Zd Zy)r?   Nr  rd   ri   rg   r?   r?     r  ri   r?   c                       e Zd Zy)r@   Nr  rd   ri   rg   r@   r@     r  ri   r@   c                       e Zd Zy)rA   Nr  rd   ri   rg   rA   rA     r  ri   rA   c                       e Zd Zy)rH   Nr  rd   ri   rg   rH   rH     r  ri   rH   c                       e Zd Zy)rJ   Nr  rd   ri   rg   rJ   rJ     r  ri   rJ   c                       e Zd Zy)rO   Nr  rd   ri   rg   rO   rO     r  ri   rO   c                   "    e Zd ZdZd Zd Zd Zy)ExceptionWrapper
exceptionsc                     || _         y rc   r^  )re   r_  s     rg   r  zExceptionWrapper.__init__  s	    $ri   c                      y rc   rd   r  s    rg   r  zExceptionWrapper.__enter__      ri   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_errorsrj   r_  re  Error	__bases__
pg3_errorsr  r   )re   r)  	exc_value	tracebacknew_typeexc_argss         rg   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 0ri   N)rj   rk   rl   r  r  r  r  rd   ri   rg   r]  r]    s    I%Iri   r]  )ConstraintErrorr(   r*   r?   r@   rA   rH   rJ   rO   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  r3  r  r*  r2  ColumnMetadata)r  	data_typer  r  r2  r  ForeignKeyMetadata)r  
dest_tabledest_columnr2  ViewMetadata)r  r3  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  rx  r  reset)re   r  r  s     rg   r  z_ConnectionState.__init__K  s    .88

ri   c                 <    d| _         d | _        g | _        g | _        y rJ  )closedconnrC  transactionsr  s    rg   rz  z_ConnectionState.resetO  s    	ri   c                 <    || _         d| _        g | _        g | _        y rq  )r}  r|  rC  r~  re   r}  s     rg   set_connectionz_ConnectionState.set_connectionU  s    	ri   )rj   rk   rl   r  rz  r  r  r  s   @rg   rx  rx  J  s    ri   rx  c                       e Zd Zy)_ConnectionLocalNr  rd   ri   rg   r  r  \  r  ri   r  c                       e Zd ZdZd Zd Zy)	_NoopLockrd   c                     | S rc   rd   r  s    rg   r  z_NoopLock.__enter___  s    ri   c                      y rc   rd   r(  s       rg   r  z_NoopLock.__exit__`  rb  ri   N)rj   rk   rl   r  r  r  rd   ri   rg   r  r  ]  s    I$7ri   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)r  rW  c                     || _         y rc   r  re   rW  s     rg   r  zConnectionContext.__init__e  s    bDGri   c                 n    | j                   j                         r| j                   j                          y y rc   )rW  	is_closedconnectr  s    rg   r  zConnectionContext.__enter__f  s%    77GGOO ri   c                 8    | j                   j                          y rc   )rW  closer(  s       rg   r  zConnectionContext.__exit__i  s    477==?ri   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rc   )r  rW  r  s     rg   r  z)ConnectionContext.__call__.<locals>.innerk  s1    "477+ +4*6*+ + +   )2r   r  s   `` rg   r  zConnectionContext.__call__j  r  ri   N)rj   rk   rl   r  r  r  r  r  rd   ri   rg   r  r  c  s    I( Cri   r  c                      e Zd ZeZi Zi ZdZdZdZ	e
ZdZdZdZdZdZdZdZdZdZdZ	 	 	 dAdZd Zd Zd	 Zd
 Zd ZdBdZd Zd Zd Zd Z d Z!d Z"d Z#dCdZ$dCdZ%d Z&d Z'd Z(d Z)d Z*d Z+dCdZ,d Z-d Z.d Z/d  Z0d! Z1d" Z2d# Z3d$ Z4d% Z5d& Z6d' Z7d( Z8d) Z9d* Z:d+ Z;d, Z<d- Z=d. Z>dCd/Z?dCd0Z@dCd1ZAdCd2ZBdCd3ZCdCd4ZDd5 ZEd6 ZFd7 ZGd8 ZHd9 ZId: ZJd; ZKd< ZLdDd=ZMdDd>ZNd? ZOePd@        ZQy)Er'   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.)r\  FIELDfield_types_field_typesrI   r  _operationsr   autoconnectthread_safer  _state	threadingLock_lockrx  r  r   connect_paramsinit)	re   r  r  autorollbackr  r  
autocommitr  r  s	            rg   r  zDatabase.__init__  s     'ud.>.>?%b$//:$$[1##J/&&*,DK")DJ*,DK"DJ I J
 ! < = !		(%f%ri   c                     | j                         s| j                          || _        | j                  j	                  |       t        |       | _        y rc   )r  r  r  r  r   rf  deferred)re   r  r  s      rg   r  zDatabase.init  s>    ~~JJL ""6* N*ri   c                     | j                         r| j                          | j                         }| j                  j                  j                  |       |j                          | S rc   )r  r  r  r  rC  r  r  rB  s     rg   r  zDatabase.__enter__  sD    >>LLNkkms#ri   c                    | j                   j                  j                         }	 |j                  |||       | j                   j                  s| j	                          y y # | j                   j                  s| j	                          w w xY wrc   )r  rC  r  r  r  )re   r)  r*  r+  rC  s        rg   r  zDatabase.__exit__  s`    kkoo!!#	LL7F3;;??

 #4;;??

 #s   A! !)B
c                     t        |       S rc   r  r  s    rg   r  zDatabase.connection_context  r  ri   c                     t         rc   rh  r  s    rg   _connectzDatabase._connect  rj  ri   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  r|  rJ   rz  __exception_wrapper__r  r  server_version_set_server_versionr}  _initialize_connection)re   reuse_if_opens     rg   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 rc   rd   r  s     rg   r  zDatabase._initialize_connection      ri   c                     d| _         y r  r  r  s     rg   r  zDatabase._set_server_version  s
    ri   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_transactionrJ   r  r|  r  _closer}  rz  )re   is_opens     rg   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 rc   )r  r  s     rg   r  zDatabase._close  s    

ri   c                 .    | j                   j                  S rc   r  r|  r  s    rg   r  zDatabase.is_closed  s    {{!!!ri   c                 0    | j                   j                   S rc   r  r  s    rg   is_connection_usablezDatabase.is_connection_usable  s    ;;%%%%ri   c                 n    | j                         r| j                          | j                  j                  S rc   )r  r  r  r}  r  s    rg   
connectionzDatabase.connection  s%    >>LLN{{ri   c                     | j                         r(| j                  r| j                          nt        d      | j                  j
                  j                         S )Nz&Error, database connection not opened.)r  r  r  r@   r  r}  r  )re   named_cursors     rg   r  zDatabase.cursor  sC    >>$%MNN{{&&((ri   c                     t         j                  ||f       t        5  | j                         }|j	                  ||xs d       d d d        |S # 1 sw Y   S xY wr  )loggerdebugr  r  r	  )re   r3  rX  r  s       rg   execute_sqlzDatabase.execute_sql	  sP    c6]#" 	.[[]FNN3"-	. 	. s   'AAc                      | j                   di |}|j                  |      j                         \  }}| j                  ||      S r  )rV  r3  rE  r  )re   rE  context_optionsrC  r3  rX  s         rg   r	  zDatabase.execute  sD    "d""5_5ggen**,VV,,ri   c                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  dS )N)r  r  r>  rc  ru  r  r  r  r4  r5  r9  r  )r  r  r>  rc  ru  r  r  r  r4  r5  r9  r  r  s    rg   get_context_optionszDatabase.get_context_options  sp    ,,**ZZZZ+/+K+K"&"9"9#33//#'#;#;*.*I*I"11
 	
ri   c                 l    | j                         }|r|j                  |        | j                  di |S r  )r  r   context_class)re   r  r  s      rg   rV  zDatabase.get_sql_context%  s5    **,NN?+!t!!,G,,ri   c                     t         rc   rh  re   r  rE  s      rg   r  zDatabase.conflict_statement+  rj  ri   c                     t         rc   rh  r  s      rg   r  zDatabase.conflict_update.  rj  ri   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 CONFLICTrN  zON CONFLICT ON CONSTRAINTr5   r^  r  r   Fr  zDO UPDATE SET)r  rU   r5  rz   r=  rn  r  rv  r  r  ro  r  r  r  rm  r   r2  r6   r  r]   rQ   r4  r  rA  )re   r  rE  r  r  targetupdatesr  excluded
expressionr  rb  rp  s                rg   _build_on_conflict_updatez"Database._build_on_conflict_update1  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 rc   )	lastrowidre   r  
query_types      rg   r  zDatabase.last_insert_id^  s    ri   c                     |j                   S rc   )rowcountre   r  s     rg   r  zDatabase.rows_affecteda  s    ri   c                 $    |j                  d      S r  r%  rB  s     rg   r  zDatabase.default_values_insertd  s    {{+,,ri   c                 >    | j                         j                         S rc   )r  r  r  s    rg   session_startzDatabase.session_startg  s    !++--ri   c                     	 | j                         }|j                  | j                                y# t        $ r Y yw xY wNFbeginT)pop_transactionri  commitr  re   txns     rg   session_commitzDatabase.session_commitj  sE    	&&(C 	

,,.
/  		   3 	??c                     	 | j                         }|j                  | j                                y# t        $ r Y yw xY wr  )r  ri  rollbackr  r  s     rg   session_rollbackzDatabase.session_rollbackr  sE    	&&(C 	4..01  		r  c                 @    t        | j                  j                        S rc   )rf  r  r~  r  s    rg   r  zDatabase.in_transactionz  s    DKK,,--ri   c                 N    | j                   j                  j                  |       y rc   )r  r~  r  )re   r  s     rg   push_transactionzDatabase.push_transaction}  s      ''4ri   c                 J    | j                   j                  j                         S rc   )r  r~  r  r  s    rg   r  zDatabase.pop_transaction  s    {{''++--ri   c                 @    t        | j                  j                        S rc   )r   r  r~  r  s    rg   transaction_depthzDatabase.transaction_depth  s    4;;++,,ri   c                 b    | j                   j                  r| j                   j                  d   S y Nr~  )r  r~  r  s    rg   top_transactionzDatabase.top_transaction  s)    ;;##;;++B// $ri   c                      t        | g|i |S rc   r  r  s      rg   r  zDatabase.atomic  r  ri   c                     t        |       S rc   r  r  s    rg   r  zDatabase.manual_commit  r  ri   c                      t        | g|i |S rc   r  r  s      rg   r  zDatabase.transaction  r  ri   c                     t        |       S rc   r  r  s    rg   r  zDatabase.savepoint  r  ri   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    rg   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    rg   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    rg   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rc   )r#   r  )re   r  r  r  r  s        rg   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  )r0  r1  r8  r  
get_tables)re   r8  r  rB  s       rg   table_existszDatabase.table_exists  sC    JE//J[[''FT__F_;;;ri   c                     t         rc   rh  )re   r  s     rg   r  zDatabase.get_tables  rj  ri   c                     t         rc   rh  re   r2  r  s      rg   get_indexeszDatabase.get_indexes  rj  ri   c                     t         rc   rh  r  s      rg   get_columnszDatabase.get_columns  rj  ri   c                     t         rc   rh  r  s      rg   get_primary_keyszDatabase.get_primary_keys  rj  ri   c                     t         rc   rh  r  s      rg   get_foreign_keyszDatabase.get_foreign_keys  rj  ri   c                     t         rc   rh  )re   seqs     rg   sequence_existszDatabase.sequence_exists  rj  ri   c                 H    t        |      D ]  } |j                  di |  y r  )sort_modelscreate_table)re   modelsoptionsrB  s       rg   create_tableszDatabase.create_tables  s)     ( 	*EE))	*ri   c                 Z    t        t        |            D ]  } |j                  di |  y r  )r  r  
drop_table)re   r  r  rB  s       rg   drop_tableszDatabase.drop_tables  s.    k&12 	'EE&v&	'ri   c                     t         rc   rh  re   	date_part
date_fields      rg   extract_datezDatabase.extract_date  rj  ri   c                     t         rc   rh  r$  s      rg   truncate_datezDatabase.truncate_date  rj  ri   c                     t         rc   rh  re   r&  s     rg   to_timestampzDatabase.to_timestamp  rj  ri   c                     t         rc   rh  r+  s     rg   from_timestampzDatabase.from_timestamp  rj  ri   c                 *    t         j                         S rc   )r9   randomr  s    rg   r0  zDatabase.random  s    yy{ri   c                 :    |D ]  }|j                  | ||        y )N)	bind_refsbind_backrefs)r  )re   r  r2  r3  rB  s        rg   r  zDatabase.bind  s%     	OEJJtyJN	Ori   c                     t        || ||      S rc   _BoundModelsContext)re   r  r2  r3  s       rg   r  zDatabase.bind_ctx  s    "64MJJri   c                     |j                  t               j                  t        d            j	                  t        d                  S )N0r3  rT   r  rU   r7  rB  s     rg   get_noop_selectzDatabase.get_noop_select  s1    wwvx''C177CABBri   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   rg   r  r=    r  ri   r  r  r  r  s   ` rg   rE   zDatabase.Model  r  ri   )TFNNNTr  rc   TT)Rrj   rk   rl   r&   r  r  r  r>  rc  r  rv  ru  r  r4  r5  r9  r  r  safe_create_indexsafe_drop_index	sequencestruncate_tabler  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  rV  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.  r0  r  r  r:  r  rE   rd   ri   rg   r'   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  ri   r'   c                 0      fd} fd}t        ||      S )Nc                 &    | j                        S rc   pragmar  s    rg   r  z__pragma__.<locals>.__get__  s    {{4  ri   c                 (    | j                  |      S rc   rE  )re   r   r  s     rg   __set__z__pragma__.<locals>.__set__  s    {{4''ri   )r  )r  r  rH  s   `  rg   
__pragma__rI    s    !(GW%%ri   c                       e Zd Zej                  ej
                  ej
                  ej                  ej
                  ej                  dZdddZ	dZ
dZeZdZ	 	 dF fd		ZdG 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+dHd#Z,dHd$Z-dId%Z.dId&Z/	 	 dJd'Z0dJd(Z1dHd)Z2dHd*Z3d+ Z4d, Z5d- Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z<dId4Z=d5 Z>dId6Z?d7 Z@d8 ZAdId9ZBdId:ZCdId;ZDdId<ZEdId=ZFdId>ZGd? ZHd@ ZIdA ZJdB ZKdC ZLdD ZMdE ZN xZOS )KrV   )r*  r+  r-  r5  r.  r;  GLOBr
  )r
  r  Tr~  FNc                    |j                  dd       }|t        d      |xs d| _        t        t        |   |g|i | i | _        i | _        i | _        i | _	        t               | _        i | _        | j                  dk\  | _        | j                  t         dd       | j                  t"        dd       |r| j                  t$        dd       |rd	d
lm}m}	  || |	       y y )Nisolation_levelz/isolation_level must be None when using peewee.rd   )r      r   r%  rn   
date_truncr'  r   )register_udf_groupsRANK)r  r<   _pragmasr  rV   r  _aggregates_collations
_functions_window_functionsrQ  _extensions	_attachedr  r  register_functionr   r   r   playhouse.sqlite_udfrP  rQ  )re   r  pragmasregexp_functionrank_functionsr  r  	isolationrP  rQ  r  s             rg   r  zSqliteDatabase.__init__  s    JJ0$7	 & (7 8 8  2nd,XGGG!#5"11Z?0+qA1<C"">8Q?Fd+ ri   c                     ||| _         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)rR  rz   r  rh  r  __sqlite_version__r   r   r  _timeoutr  rV   r  )re   r  r[  timeoutr  r  r  s         rg   r  zSqliteDatabase.init  su    #DMdmmT* !4!4!67DM'!J.NO$4D!nd(<V<ri   c                      y rc   rd   r  s     rg   r  z"SqliteDatabase._set_server_version)  r  ri   c                     t         t        d      t        j                  | j                  f| j                  d d| j
                  }	 | j                  |       |S #  |j                           xY w)NzSQLite driver not installed!)rc  rM  )sqlite3r<   r  r  rb  r  _add_conn_hooksr  r  s     rg   r  zSqliteDatabase._connect,  ss    ?&'EFFt}} Ldmm/3L7;7J7JL	  & 	JJLs   
A A0c                 Z   | j                   r| j                  |       | j                  r| j                  |       | j	                  |       | j                  |       | j                  |       | j                  dk\  r| j                  |       | j                  r| j                  |       y y )N)r      r   )rX  _attach_databasesrR  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsrW  _load_extensionsr  s     rg   rg  zSqliteDatabase._add_conn_hooks8  s    >>""4(==d#d#d#T"*,''-!!$' ri   c                     |j                         }| j                  D ]  \  }}|j                  d|d|d        |j                          y )NzPRAGMA z = ;)r  rR  r	  r  )re   r}  r  rF  r   s        rg   rk  zSqliteDatabase._set_pragmasE  s@    !]] 	@MFENN>?	@ri   c                     |j                         }| j                  j                         D ]  \  }}|j                  d|d|d        |j	                          y )NATTACH DATABASE "" AS "r  )r  rX  r  r	  r  )re   r}  r  r  rW  s        rg   rj  z SqliteDatabase._attach_databasesK  sI    ,,. 	HHD"NNRFG	Hri   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   rd   z/Cannot specify a permanent pragma without value)SENTINELr  rR  rh  r  r  r  fetchone)re   r  r   	permanentr  r3  r[  r6  s           rg   rF  zSqliteDatabase.pragmaQ  s    %s+CC 7ejq))Ct}}23$ $W]]_ 5NOOs#,,.q6M ri   
cache_sizeforeign_keysjournal_modejournal_size_limit	mmap_size	page_sizeread_uncommittedsynchronouswal_autocheckpointapplication_iduser_versiondata_versionc                     | j                   S rc   )rb  r  s    rg   rc  zSqliteDatabase.timeoutn  s    }}ri   c                     | j                   |k(  ry || _         | j                         s| j                  d|dz  z         y y )NzPRAGMA busy_timeout=%d;i  )rb  r  r  )re   secondss     rg   rc  zSqliteDatabase.timeoutr  sA    ==G#~~ 6'D.IJ  ri   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y rc   )rS  r  create_aggregatere   r}  r  klass
num_paramss        rg   rl  zSqliteDatabase._load_aggregates}  s<    )-)9)9)?)?)A 	;%D%5*!!$
E:	;ri   c                 l    | j                   j                         D ]  \  }}|j                  ||        y rc   )rT  r  create_collation)re   r}  r  r9   s       rg   rm  zSqliteDatabase._load_collations  s4    ((..0 	,HD"!!$+	,ri   c                     | j                   j                         D ]&  \  }\  }}}|rd|ini } |j                  |||fi | ( y )Ndeterministic)rU  r  create_function)re   r}  r  r9   n_paramsr  r  s          rg   rn  zSqliteDatabase._load_functions  sQ    37??3H3H3J 	?/D/2x9Fo}5BF D  x>v>	?ri   c                 t    | j                   j                         D ]  \  }\  }}|j                  |||        y rc   )rV  r  create_window_functionr  s        rg   ro  z%SqliteDatabase._load_window_functions  s>    )-)?)?)E)E)G 	A%D%5*''j%@	Ari   c                     ||f| j                   |xs |j                  j                         <   | j                         s | j	                  | j                                y y rc   )rS  rj   rt  r  rl  r  re   r  r  r  s       rg   register_aggregatez!SqliteDatabase.register_aggregate  sM    <A:;N7!5!5!78~~!!$//"34  ri   c                       fd}|S )Nc                 .    j                  |        | S rc   )r  r  r  r  re   s    rg   r5  z+SqliteDatabase.aggregate.<locals>.decorator  s    ##E4<Lri   rd   re   r  r  r5  s   ``` rg   	aggregatezSqliteDatabase.aggregate      	 ri   c                     xs |j                   fd}||_        || j                  <   | j                         s | j	                  | j                                y y )Nc                  >    | t        dz        fz   }t        |      S )Nz
collate %s)rU   rv  )r  r  r  s     rg   
_collationz5SqliteDatabase.register_collation.<locals>._collation  s%    #lT&9":!<<KK((ri   )rj   r_  rT  r  rm  r  )re   r9   r  r  s     ` rg   register_collationz!SqliteDatabase.register_collation  sS    "r{{	) "!#~~!!$//"34  ri   c                       fd}|S )Nc                 ,    j                  |        | S rc   )r  )r9   r  re   s    rg   r5  z+SqliteDatabase.collation.<locals>.decorator  s    ##B-Iri   rd   )re   r  r5  s   `` rg   r_  zSqliteDatabase.collation  s    	 ri   c                     |||f| j                   |xs |j                  <   | j                         s | j                  | j	                                y y rc   )rU  rj   r  rn  r  )re   r9   r  r  r  s        rg   rY  z SqliteDatabase.register_function  sD    02J/N+,~~  !23  ri   c                       fd}|S )Nc                 0    j                  |        | S rc   )rY  )r9   r  r  r  re   s    rg   r5  z&SqliteDatabase.func.<locals>.decorator  s    ""2tZGIri   rd   )re   r  r  r  r5  s   ```` rg   r@  zSqliteDatabase.func  s    	 ri   c                     |xs |j                   j                         }||f| j                  |<   | j                         s | j	                  | j                                y y rc   )rj   rt  rV  r  ro  r  r  s       rg   register_window_functionz'SqliteDatabase.register_window_function  sR    -u~~++-(-z':t$~~''(9:  ri   c                       fd}|S )Nc                 .    j                  |        | S rc   )r  r  s    rg   r5  z1SqliteDatabase.window_function.<locals>.decorator  s    ))%zBLri   rd   r  s   ``` rg   window_functionzSqliteDatabase.window_function  r  ri   c                     | j                   |= y rc   )rS  r  s     rg   unregister_aggregatez#SqliteDatabase.unregister_aggregate      T"ri   c                     | j                   |= y rc   )rT  r  s     rg   unregister_collationz#SqliteDatabase.unregister_collation  r  ri   c                     | j                   |= y rc   )rU  r  s     rg   unregister_functionz"SqliteDatabase.unregister_function  s    OOD!ri   c                     | j                   |= y rc   )rV  r  s     rg   unregister_window_functionz)SqliteDatabase.unregister_window_function  s    ""4(ri   c                 j    |j                  d       | j                  D ]  }|j                  |        y rJ  )enable_load_extensionrW  load_extension)re   r}  	extensions      rg   rp  zSqliteDatabase._load_extensions  s3    ""4()) 	+I	*	+ri   c                     | j                   j                  |       | j                         s3| j                         }|j	                  d       |j                  |       y y rJ  )rW  r  r  r  r  r  )re   r  r}  s      rg   r  zSqliteDatabase.load_extension  sM    Y'~~??$D&&t,	*  ri   c                 :    | j                   j                  |       y rc   )rW  remove)re   r  s     rg   unload_extensionzSqliteDatabase.unload_extension  s    	*ri   c                     || j                   v r!| j                   |   |k(  ryt        d|z        || j                   |<   | j                         s| j                  d|d|d       y)NFzschema "%s" already attached.rt  ru  r  T)rX  rJ   r  r  )re   filenamer  s      rg   attachzSqliteDatabase.attach  sa    4>>!~~d#x/"#BT#IJJ't~~xNOri   c                     || j                   vry| j                   |= | j                         s| j                  d|z         y)NFzDETACH DATABASE "%s"T)rX  r  r  r  s     rg   detachzSqliteDatabase.detach  s>    t~~%NN4 ~~3d:;ri   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  ri  r   	TypeErrorr  s      rg   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rc   r  r   r  r  s     rg   r  zSqliteDatabase.rows_affected  0    	*??" 	*==)))	*    00c                 8    |rd|z  nd}| j                  |       y )NzBEGIN %sr  r  )re   	lock_typer6  s      rg   r  zSqliteDatabase.begin   s    .7J*W	#ri   c                 \    t         5  | j                  d      cd d d        S # 1 sw Y   y xY wr  r  r  r  s    rg   r  zSqliteDatabase.commit  s(    " 	.##H-	. 	. 	.   "+c                 \    t         5  | j                  d      cd d d        S # 1 sw Y   y xY wr  r  r  s    rg   r  zSqliteDatabase.rollback  s(    " 	0##J/	0 	0 	0r  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)r2  r  fetchall)re   r  r  r6  s       rg   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  rv  )re   r  r3  r6  s       rg   	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 namer  PRAGMA "z".index_list("")r   rn   z".index_info(")r  r  r  rQ  r   r  r  rp  )re   r2  r  rE  r  index_to_sqlunique_indexesr6  r  	is_uniqueindex_columnsr7  s               rg   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   rn   r   rH  rG  )r  r  rq  rf  )re   r2  r  r  r  s        rg   r  zSqliteDatabase.get_columns8  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  rd   )r  s    rg   r|   z1SqliteDatabase.get_primary_keys.<locals>.<lambda>A  s
    1R5 ri   r   r  r8  r  re   r2  r  r  r6  s        rg   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   rn   rG  r  r  rs  r  s        rg   r  zSqliteDatabase.get_foreign_keysC  sd    !!#)#3V#3U#< = "??,. #3q63q63q65A . 	. .s   Ac                 "    t         j                  S rc   )rf  Binaryr  s    rg   get_binary_typezSqliteDatabase.get_binary_typeI      ~~ri   c                     |j                   r|j                   j                         nd}|r+|dvr&t        d|j                   j                         z        S y y )Nr4  )nothingr   zINSERT OR %s)r  rt  rU   upperre   r  rE  r  s       rg   r  z!SqliteDatabase.conflict_statementL  sQ    0;0C0C$$**,f$99~(;(;(A(A(CCDD :6ri   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.r4  )r  r   r4  r  zON CONFLICT DO NOTHINGzIf you are not performing any updates (or preserving any INSERTed values), then the conflict resolution action should be set to "NOTHING".zMSQLite does not support specifying named constraints for conflict resolution.zISQLite requires that a conflict target be specified when doing an upsert.)r  r>  r  r  r  r  r  r  r  rt  rU   r  )re   ocrE  r  s       rg   r  zSqliteDatabase.conflict_updateQ  s   +bjj"))R5H5H'') * 6 7 7 (*zz!!#rf$==Y/00BLL * + + $$ D E E$$ ? @ @ --b%88ri   c                 :    t         j                  ||t              S N)r2  )r9   r%  r   r$  s      rg   r'  zSqliteDatabase.extract_datem  s    ||Iz|DDri   c                 :    t         j                  ||t              S r  )r9   rO  simple_date_timer$  s      rg   r)  zSqliteDatabase.truncate_datep  s    }}Y
*:  < 	<ri   c                 L    t         j                  d|      j                  d      S )NrU  integer)r9   r   r\  r+  s     rg   r,  zSqliteDatabase.to_timestampt  s    {{4,11)<<ri   c                 .    t         j                  |d      S )N	unixepoch)r9   r   r+  s     rg   r.  zSqliteDatabase.from_timestampw  s    {{:{33ri   )NFF)NrH  Nr  rc   )Nr~  N)Prj   rk   rl   r  r(  r8  r7  r9  r  r  r4  r9  ra  r  rB  r  r  r  r  rg  rk  rj  rx  rF  rI  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  rc  r  rl  rm  rn  ro  r  r  r  r_  rY  r@  r  r  r  r  r  r  rp  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   @rg   rV   rV     s   ::))		++II

K J I'NN?D %,0=
( !)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;$$#*+
++	*$.03P
.B,N
.E
98E<=4ri   rV   c                   "    e Zd Zi Zd Zd Zd Zy)_BasePsycopgAdapterc                 v    | j                   j                         D ci c]  \  }}||
 c}}| _        y c c}}w rc   )isolation_levelsr  isolation_levels_inv)re   r  rb  s      rg   r  z_BasePsycopgAdapter.__init__~  s6    !2288:%<QAqD%<! %<s   5c                 D    t        |t              r| j                  |   S |S rc   )rz   ra  r  re   rM  s     rg   isolation_level_intz'_BasePsycopgAdapter.isolation_level_int  s#    os+,,_==ri   c                 D    t        |t              r| j                  |   S |S rc   )rz   r   r  r   s     rg   isolation_level_strz'_BasePsycopgAdapter.isolation_level_str  s#    os+((99ri   N)rj   rk   rl   r  r  r  r  rd   ri   rg   r  r  {  s    <
ri   r  c                   \     e Zd ZdddddZ fdZd Zd Zd	 Zd
 Zd Z	d Z
d Zd Z xZS )Psycopg2AdapterREAD COMMITTEDREPEATABLE READSERIALIZABLEREAD UNCOMMITTEDr   rn   r   rG  c                 d    t         t        |           t        | _        t        | _        d| _        y rJ  )r  r  r  Json_pg2	json_type
jsonb_typecast_json_casere   r  s    rg   r  zPsycopg2Adapter.__init__  s&    ot-/!""ri   c                 &    t         t        d      y )Nz#psycopg2 postgres driver not found.)psycopg2r<   r  s    rg   check_driverzPsycopg2Adapter.check_driver  s    &'LMM ri   c                 "    t         j                  S rc   )r  r  r  s    rg   r  zPsycopg2Adapter.get_binary_type  s    ri   c                    |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                         |S )Npostgresql://dsndbnamerd   )r  r}  
setdefaultr  r  _register_unicodepg_extensionsregister_typeUNICODEUNICODEARRAY	_encodingset_client_encoding)re   rW  rX  r}  s       rg   r  zPsycopg2Adapter.connect  s    ;;!!/2eR[[1h4)&)''(=(=tD''(B(BDI<<$$R\\2ri   c                     |j                   S rc   r  r  s     rg   get_server_versionz"Psycopg2Adapter.get_server_version  s    """ri   c                 H    |j                         }|t        j                  k  S rc   )get_transaction_statusr  TRANSACTION_STATUS_INERRORre   r}  
txn_statuss      rg   r  z$Psycopg2Adapter.is_connection_usable  s!    002
MDDDDri   c                     |j                         }|t        j                  k(  ry|t        j                  k(  r|j	                          y|t        j
                  k7  r|j                          yrt  )r$  r  TRANSACTION_STATUS_UNKNOWNr%  rz  TRANSACTION_STATUS_IDLEr  r&  s      rg   is_connection_reusablez&Psycopg2Adapter.is_connection_reusable  s[    002
 AAA=CCCJJL  =@@@MMOri   c                     |j                         }|t        j                  k(  ry|t        j                  k7  r|j	                          yr  )r$  r  r)  r*  r  r&  s      rg   is_connection_closedz$Psycopg2Adapter.is_connection_closed  s;    002
AAA=@@@MMOri   c                 V    t         j                  t        |t        d      |f            S NFROMr9   EXTRACTrv  rU   r$  s      rg   r'  zPsycopg2Adapter.extract_date  s!    zz(Is6{J#GHIIri   rj   rk   rl   r  r  r  r  r  r"  r  r+  r-  r'  r  r  s   @rg   r  r    sG    	#N#EJri   r  c                   \     e Zd ZdddddZ fdZd Zd Zd	 Zd
 Zd Z	d Z
d Zd Z xZS )Psycopg3Adapterr	  r  r  r  r
  c                 d    t         t        |           t        | _        t
        | _        d| _        y rq  )r  r5  r  Json_pg3r  	Jsonb_pg3r  r  r  s    rg   r  zPsycopg3Adapter.__init__  s&    ot-/!##ri   c                 &    t         t        d      y )Nz"psycopg postgres driver not found.)psycopgr<   r  s    rg   r  zPsycopg3Adapter.check_driver  s    ?&'KLL ri   c                 "    t         j                  S rc   )r:  r  r  s    rg   r  zPsycopg3Adapter.get_binary_type  r  ri   c                     |j                   j                  d      r|j                  d|j                          n|j                  d|j                          t        j                  di |S )Nr  conninfor  rd   )r  r}  r  r:  r  )re   rW  rX  s      rg   r  zPsycopg3Adapter.connect  sN    ;;!!/2j"++6h4(((ri   c                 .    |j                   j                  S rc   )pgconnr  r  s     rg   r"  z"Psycopg3Adapter.get_server_version  s    {{)))ri   c                 P    |j                   j                  t        j                  k  S rc   )r?  transaction_statusr   INERRORr  s     rg   r  z$Psycopg3Adapter.is_connection_usable  s    {{--0A0I0IIIri   c                     |j                   j                  }|t        j                  k(  ry|t        j                  k(  r|j                          y|t        j                  k7  r|j                          yrt  )r?  rA  r   UNKNOWNrB  rz  IDLEr  r&  s      rg   r+  z&Psycopg3Adapter.is_connection_reusable  s_    [[33
 *222,444JJL  ,111MMOri   c                     |j                   j                  }|t        j                  k(  ry|t        j                  k7  r|j                          yr  )r?  rA  r   rD  rE  r  r&  s      rg   r-  z$Psycopg3Adapter.is_connection_closed  s>    [[33
*222,111MMOri   c                 h    t         j                  t        t        |      t        d      |f            S r/  r1  r$  s      rg   r'  zPsycopg3Adapter.extract_date  %    zz(C	NCK#LMNNri   r3  r  s   @rg   r5  r5    sG    	$M)*JOri   r5  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eZeZ	 	 d( fd	Zd Zd Zd Zd)dZd Zd)dZd)dZd)dZd)dZd)dZd)dZd)dZd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z( xZ)S )*rK   SERIAL	BIGSERIALBYTEABOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONr;  )	r(  r*  r,  r-  r1  r2  r5  r;  r<  r  z~*)r  r  rU  TFc                    || _         || _        |j                  dd      }t        |r| j	                         | _        n| j                         | _        | j
                  j                  |      | _        t        t        | .  |fi | y )Nprefer_psycopg3F)r  r  r  r:  psycopg3_adapter_adapterpsycopg2_adapterr  _isolation_levelr  rK   r  )re   r  register_unicodeencodingrM  r  rR  r  s          rg   r  zPostgresqlDatabase.init#  s~    !1! **%6>? 113DM 113DM !% A A! 	 $,X@@ri   c                     | j                   j                           | j                   j                  | fi | j                  }| j                  r|j                  | j                         d|_        |S rJ  )rT  r  r  r  rV  set_isolation_levelr  r  s     rg   r  zPostgresqlDatabase._connect5  s^    ""$ %t}}$$TAT-@-@A  $$T%:%:;ri   c                 r    | j                   j                  |      | _        | j                  dk\  rd| _        y y )Nia T)rT  r"  r  r?  r  s     rg   r  z&PostgresqlDatabase._set_server_versionB  s4    "mm>>tD%'%)D" (ri   c                     | j                   j                  ry| j                  j                  | j                   j                        S rq  )r  r|  rT  r  r}  r  s    rg   r  z'PostgresqlDatabase.is_connection_usableG  s3    ;;
 }}11$++2B2BCCri   c                 r    	 |t         j                  k7  r|S |d   d   S # t        t        t        f$ r Y y w xY wr  )r  r  ri  r   r  r  s      rg   r  z!PostgresqlDatabase.last_insert_idP  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rc   r  r  s     rg   r  z PostgresqlDatabase.rows_affectedV  r  r  c                    | j                         r| j                          |r!| j                  j                  |      }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  r  rT  r  r  r  r	  )re   rM  txn_typer  s       rg   r  zPostgresqlDatabase.begin\  sg    >>LLN}}88IH9HDDD" 	(KKM!!$'	( 	( 	(s    A55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  )re   r  rE  r  r2  s        rg   r  zPostgresqlDatabase.get_tablesg  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 viewnamerb  z 	;)r  r  rv  strip)re   r  rE  r  	view_namer3  s         rg   r  zPostgresqlDatabase.get_viewsm  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  rb  z ;,)r  r  rp  rstripr   )	re   r2  r  rE  r  r  r3  r  r  s	            rg   r  zPostgresqlDatabase.get_indexest  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_positionrb  YESr  rQ  r  r  rq  )
re   r2  r  rE  r  pksr  r  r   dfs
             rg   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 KEYrb  r  )re   r2  r  rE  ctyper  pks          rg   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 = %srb  r   r   rn   r  )re   r2  r  r3  r  r6  s         rg   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  rf  ry  )re   sequenceress      rg   r  z"PostgresqlDatabase.sequence_exists  s6      " %-;	0
 CLLN1%&&ri   c                 6    | j                   j                         S rc   )rT  r  r  s    rg   r  z"PostgresqlDatabase.get_binary_type  s    }},,..ri   c                      y rc   rd   r  s      rg   r  z%PostgresqlDatabase.conflict_statement      ri   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 )	Nr4  )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  rt  rU   r  r  r5  rz   r=  rn  rv  r  r  r  r  r  )re   r  rE  r  rp  r  s         rg   r  z"PostgresqlDatabase.conflict_update  s   ')zz!!#r**'(E""-!22/4 $.c:#>F3KCG/4 5 6 LL\*+E?"(* ) * * BLL ) * * %%)@)@ ? @ @ --b%88%/4s   #$D!c                 :    | j                   j                  ||      S rc   )rT  r'  r$  s      rg   r'  zPostgresqlDatabase.extract_date  s    }})))Z@@ri   c                 .    t         j                  ||      S rc   )r9   
DATE_TRUNCr$  s      rg   r)  z PostgresqlDatabase.truncate_date  s    }}Y
33ri   c                 &    | j                  d|      S )NEPOCH)r'  r+  s     rg   r,  zPostgresqlDatabase.to_timestamp  s      *55ri   c                 ,    t         j                  |      S rc   )r9   r,  r+  s     rg   r.  z!PostgresqlDatabase.from_timestamp  s    z**ri   c                     |j                  t               j                  t        d            j	                  t        d                  S )Nr8  falser9  rB  s     rg   r:  z"PostgresqlDatabase.get_noop_select  s1    wwvx''C177GEFFri   c                 ,    | j                  d|z         y )Nzset time zone "%s";r  )re   r   s     rg   set_time_zonez PostgresqlDatabase.set_time_zone  s    .9:ri   c                 D    | j                   j                  |      | _        y rc   )rT  r  rV  r   s     rg   rZ  z&PostgresqlDatabase.set_isolation_level  s     $ A A!ri   r  rc   )*rj   rk   rl   r  r  r>  rw  ru  r  r  r  r?  rA  r  rU  r5  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r)  r,  r.  r:  r  rZ  r  r  s   @rg   rK   rK     s    $	K  D1JE"8JNI&&=A!A$*
D*	(7;H(	=1 .*'/92A46+G;ri   rK   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 )-rG   zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTr-  rO  rP  r7  zVARCHAR(40)zVARBINARY(16))r(  r*  r-  r2  r5  r7  r;  r<  zLIKE BINARYr
  zREGEXP BINARYr  r   )r
  r  r  r  r   rU  z``Tl    FPIPES_AS_CONCATc                     d| j                   dd}|j                  |       d|v rt        r|j                  d      |d<   t	        t
        |   |fi | y )Nr[  T)charsetsql_modeuse_unicodepasswordpasswd)r  r   mysql_passwdr  r  rG   r  )re   r  r  rX  r  s       rg   r  zMySQLDatabase.init  sV    ! 	fL%zz*5F8mT';F;ri   c                     t         t        d      t        j                  d| j                  dd| j                  }|S )NzMySQL driver not installed!T)rW  r  rd   )mysqlr<   r  r  r  r  s     rg   r  zMySQLDatabase._connect  sA    =&'DEE}} 4$ 4#224ri   c                     	 |j                   }| j                  |      | _         y # t        $ r |j                         }Y 2w xY wrc   )r  r   get_server_info_extract_server_version)re   r}  version_raws      rg   r  z!MySQLDatabase._set_server_version#  sF    	1--K #::;G  	1..0K	1s   % A Ac                 B   t        |t              r|S |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rc   )r   )ry  nums     rg   r{  z8MySQLDatabase._extract_server_version.<locals>.<genexpr>3  s     NcSNr|  r   r^  z'Unable to determine MySQL version: "%s"r   )	rz   ri  rt  r   r   groupsr   r   r   )re   version	match_objs      rg   r  z%MySQLDatabase._extract_server_version*  s    gu%N--/g		"4g>I		"3W=I NY-=-=-?-B-H-H-MNNN?'IJri   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   rO  rd   r  T)r  r|  r}  r  r  r  r  )re   r}  r  s      rg   r  z"MySQLDatabase.is_connection_usable8  st    ;;{{4 ""1%*		4    s   A# #	A/.A/c                 $    |j                  d      S )Nz() VALUES ()r  rB  s     rg   r  z#MySQLDatabase.default_values_insertH  s    {{>**ri   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  )re   rM  curss      rg   r  zMySQLDatabase.beginK  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  )re   r  rE  r2  s       rg   r  zMySQLDatabase.get_tablesU  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  rv  )re   r  rE  r  r6  s        rg   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   rn   rG  )r  rQ  r  r  r  r  rp  )re   r2  r  r  r*  indexesr6  r  s           rg   r  zMySQLDatabase.get_indexesb  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_positionrj  rk  )
re   r2  r  r3  r  rl  r  r  r   rm  s
             rg   r  zMySQLDatabase.get_columnsn  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 )Nr  c                     | d   dk(  S )Nrn   PRIMARYrd   )r6  s    rg   r|   z0MySQLDatabase.get_primary_keys.<locals>.<lambda>|  s    3q6Y#6 ri   rG  r  r  s        rg   r  zMySQLDatabase.get_primary_keysy  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  )re   r2  r  rE  r  r  rt  ru  s           rg   r  zMySQLDatabase.get_foreign_keys~  sc    : !!%%2 4:??3DF F/
K vz;FF 	F Fs   Ac                 "    t         j                  S rc   )r  r  r  s    rg   r  zMySQLDatabase.get_binary_type  s    ||ri   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  rt  rU   r  r  s       rg   r  z MySQLDatabase.conflict_statement  sh    ""F$$**,Yy>!x''x J K K  ri   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  r9   VALUEVALUESro  rv  rU   r  r  r  rz   rm  r=  r   r2  r6   r  r]   r4  )re   r  rE  r  r  VALUE_FNr  entityr  r  rb  s              rg   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 ri   c                 h    t         j                  t        t        |      t        d      |f            S r/  r1  r$  s      rg   r'  zMySQLDatabase.extract_date  rH  ri   c                 H    t         j                  |t        |   t              S r  )r9   DATE_FORMAT__mysql_date_trunc__r  r$  s      rg   r)  zMySQLDatabase.truncate_date  s%    ~~j*>y*I+;  = 	=ri   c                 ,    t         j                  |      S rc   )r9   UNIX_TIMESTAMPr+  s     rg   r,  zMySQLDatabase.to_timestamp  s      ,,ri   c                 ,    t         j                  |      S rc   )r9   FROM_UNIXTIMEr+  s     rg   r.  zMySQLDatabase.from_timestamp  s    
++ri   c                 *    t         j                         S rc   )r9   randr  s    rg   r0  zMySQLDatabase.random  s    wwyri   c                 $    |j                  d      S )NzDO 0r  rB  s     rg   r:  zMySQLDatabase.get_noop_select  s    {{6""ri   rc   )&rj   rk   rl   r  r  r>  rc  rx  ru  r  r5  r9  r?  r@  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r)  r,  r.  r0  r:  r  r  s   @rg   rG   rG     s    (*$ "K !J EE":J!%IO H<H +"HA
%	=L
F
K)6VO=-,#ri   rG   c                   $    e Zd Zd Zd Zd Zd Zy)r  c                     || _         y rc   r  r  s     rg   r  z_manual.__init__  s	    ri   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rc   )r  rW  r  s     rg   r  z_manual.__call__.<locals>.inner  s1    ! +4*6*+ + +r  r   r  s   `` rg   r  z_manual.__call__  r  ri   c                     | j                   j                         }|t        |t              st	        d      | j                   j                  |        y )Nz?Cannot enter manual commit block while a transaction is active.)rW  r  rz   r  r  r  )re   tops     rg   r  z_manual.__enter__  sF    gg%%'?:c7#; 6 7 7  &ri   c                 R    | j                   j                         | urt        d      y )Nz>Transaction stack corrupted while exiting manual commit block.)rW  r  r  r(  s       rg   r  z_manual.__exit__  s.    77""$D0 4 5 5 1ri   Nr  rd   ri   rg   r  r    s    '5ri   r  c                   $    e Zd Zd Zd Zd Zd Zy)r  c                 $    || _         ||f| _        y rc   )rW  _transaction_argsre   rW  r  r  s       rg   r  z_atomic.__init__  s    "&ri   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rc   )r  r  rW  r  r  r  r  r9   re   s       rg   r  z_atomic.__call__.<locals>.inner  sJ    ))DAq*1** +4*6*+ + +	   <Ar   r  s   `` rg   r  z_atomic.__call__       	r	+ 
	+ ri   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.)rW  r  r  r  _helperrz   r  r  r  r  r  r  s      rg   r  z_atomic.__enter__  s    77$$&!+11LD&.477..??DL//17; 3 4 4  77,,.DL||%%''ri   c                 <    | j                   j                  |||      S rc   )r  r  r(  s       rg   r  z_atomic.__exit__  s    ||$$Xw??ri   Nr  rd   ri   rg   r  r    s    0	(@ri   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 rc   )rW  _begin_argsr  s       rg   r  z_transaction.__init__  s     &>ri   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rc   )r  r  rW  r  s       rg   r  z$_transaction.__call__.<locals>.inner  sJ    ##DAqdgg//Q/ +4*6*+ + +r  r   r  s   `` rg   r  z_transaction.__call__  r  ri   c                 Z    | j                   \  }} | j                  j                  |i | y rc   )r  rW  r  r  s      rg   _beginz_transaction._begin  s(    ''ft&v&ri   c                 ^    | j                   j                          |r| j                          y y rc   )rW  r  r  re   r  s     rg   r  z_transaction.commit!  s!    KKM ri   c                 ^    | j                   j                          |r| j                          y y rc   )rW  r  r  r  s     rg   r  z_transaction.rollback&  s#    KKM ri   c                     | j                   j                         dk(  r| j                          | j                   j                  |        | S r  )rW  r  r  r  r  s    rg   r  z_transaction.__enter__+  s7    77$$&!+KKM  &ri   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)rW  r  r  r  r  )re   r)  r*  r+  depths        rg   r  z_transaction.__exit__1  s    ))+
	&EQJe$!KK&
 GG##%	MM%(GG##%s   A> A' 'A;;A> >BNrv  
rj   rk   rl   r  r  r  r  r  r  r  rd   ri   rg   r  r    s%    *'

&ri   r  c                   <    e Zd Zd	dZd Zd Zd
dZd
dZd Zd Z	y)r  Nc                     || _         |xs! dt        j                         j                  z   | _        | j                  j                  | j                   j                        | _        y )Nru   )rW  uuiduuid4hexsidr_  rc  
quoted_sid)re   rW  r  s      rg   r  z_savepoint.__init__A  sB    0#

 0 00((--6ri   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rc   )r  rW  r  s     rg   r  z"_savepoint.__call__.<locals>.innerG  s1    DGG$ +4*6*+ + +r  r   r  s   `` rg   r  z_savepoint.__call__F  r  ri   c                 T    | j                   j                  d| j                  z         y )NzSAVEPOINT %s;)rW  r  r  r  s    rg   r  z_savepoint._beginM  s    Odoo=>ri   c                 z    | j                   j                  d| j                  z         |r| j                          y y )NzRELEASE SAVEPOINT %s;rW  r  r  r  r  s     rg   r  z_savepoint.commitP  s+    3dooEF$++-5ri   c                 z    | j                   j                  d| j                  z         |r| j                          y y )NzROLLBACK TO SAVEPOINT %s;r  r  s     rg   r  z_savepoint.rollbackT  s+    7$//IJ$++-5ri   c                 &    | j                          | S rc   )r  r  s    rg   r  z_savepoint.__enter__X  s    ri   c                     |r| j                  d       y 	 | j                  d       y #  | j                  d        xY w)NFr  )r  r  r(  s       rg   r  z_savepoint.__exit__\  s<    MM% %(E*s   ) >rc   rv  r  rd   ri   rg   r  r  @  s%    7
?  ri   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)  r  initialized	populatedr  r  s     rg   r  zCursorWrapper.__init__k  s-    

 ri   c                 Z    | j                   rt        | j                        S t        |       S rc   )r  r  r  ResultIteratorr  s    rg   r  zCursorWrapper.__iter__s  s#    >>''d##ri   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.)rz   r  r  r  r  r   r  )re   r  r  s      rg   r  zCursorWrapper.__getitem__x  s    dE"99D|tax!%>>$''c"OOD1HD!4>>$'' ( ) )ri   c                 :    | j                          | j                  S rc   )r  r)  r  s    rg   r  zCursorWrapper.__len__  s    zzri   c                      y rc   rd   r  s    rg   r  zCursorWrapper.initialize  r  ri   c                 X   | j                   j                         }|'d| _        | j                   j                          t        | j
                  s| j                          d| _        | xj                  dz  c_        | j                  |      }|r| j                  j                  |       |S )NTr   )r  ry  r  r  r  r  r  r)  process_rowr  r  )re   cacher6  r  s       rg   iteratezCursorWrapper.iterate  s    kk""$;!DNKK!!OO#D

a
!!#&NN!!&)ri   c                     |S rc   rd   re   r6  s     rg   r  zCursorWrapper.process_row  s    
ri   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    rg   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)  r  r  r  r  )re   r  r  s      rg   r  zCursorWrapper.fill_cache  s    uq5ABB!$'..a$**n ..a$**n.n. ! s   B 	BBNrv  r  )rj   rk   rl   r  r  r  r  r  r  r  r  r  rd   ri   rg   r  r  j  s/    $
)ri   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   r^  r   ()"`)r  descriptionrfindrd  r  r   ncolsre   r	  r   s      rg   _initialize_columnsz%DictCursorWrapper._initialize_columns  sd    kk--!,. !QqTZZ_q01288@ .%
.s   3A'c                     i }t        | j                        D ]$  }|j                  | j                  |   ||          & |S rc   )r  r	  r  r  )re   r6  r  r  s       rg   _row_to_dictzDictCursorWrapper._row_to_dict  s@    tzz" 	7Adll1os1v6	7ri   N)rj   rk   rl   r
	  r  r	  r  rd   ri   rg   r  r    s    & %J Kri   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   r^  r   r	  )r  r	  collections
namedtupler	  rd  tuple_classr		  s      rg   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 rc   r	  r  s     rg   r  z#NamedTupleCursorWrapper.process_row  s    t%%ri   N)rj   rk   rl   r  r  rd   ri   rg   r  r    s    L
&ri   r  c                   $     e Zd Z fdZd Z xZS )r  c                 :    t         t        |   |       || _        y rc   )r  r  r  r  )re   r  r  r  s      rg   r  zObjectCursorWrapper.__init__  s    !41&9&ri   c                 H    | j                  |      } | j                  di |S r  )r	  r  )re   r6  row_dicts      rg   r  zObjectCursorWrapper.process_row  s(    $$S)t+(++ri   rj   rk   rl   r  r  r  r  s   @rg   r  r    s    ',ri   r  c                   "    e Zd Zd Zd Zd ZeZy)r  c                      || _         d| _        y r  )cursor_wrapperr  )re   r	  s     rg   r  zResultIterator.__init__  s    ,
ri   c                     | S rc   rd   r  s    rg   r  zResultIterator.__iter__  ru  ri   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  )r  r	  r)  r  r  r  r  r4  s     rg   r  zResultIterator.next  s    ::++111%%//

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

;C

a

ri   N)rj   rk   rl   r  r  r  __next__rd   ri   rg   r  r    s    	 Hri   r  c                        e Zd Zd ZddZd Zy)FieldAccessorc                 .    || _         || _        || _        y rc   )rB  r>  r  re   rB  r>  r  s       rg   r  zFieldAccessor.__init__  s    

	ri   Nc                 h    |%|j                   j                  | j                        S | j                  S rc   )__data__r  r  r>  r  s      rg   r  zFieldAccessor.__get__  s-    $$((33zzri   c                     ||j                   | j                  <   |j                  j                  | j                         y rc   )r%	  r  _dirtyr  re   r  r   s      rg   rH  zFieldAccessor.__set__  s,    ',$))$DII&ri   rc   )rj   rk   rl   r  r  rH  rd   ri   rg   r!	  r!	    s    

'ri   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 rc   )r  r*	  r  	rel_model)re   rB  r>  r  r  s       rg   r  zForeignKeyAccessor.__init__  s"     $0tDri   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 rc   )
r%	  r  r  __rel__r>  	lazy_loadr,	  	rel_fieldr  r2   )re   r  r   r  s       rg   get_rel_instancez#ForeignKeyAccessor.get_rel_instance  s    !!%%dii0		X-=-= =yy 0 00TZZ5I5Inn(()=)=)FG.1  +##''		599TZZ%9%9..---ri   c                 @    || j                  |      S | j                  S rc   )r1	  r>  r  s      rg   r  zForeignKeyAccessor.__get__  s#    ((22zzri   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 rc   )rz   r,	  r   r>  r0	  r  r%	  r.	  r  r'	  r  )re   r  r  fk_values       rg   rH  zForeignKeyAccessor.__set__  s    c4>>*+23

8L8L8Q8Q+RHdii(*-HTYY'((,,TYY7H+.Hdii(x3;yyH,,,$$TYY/DII&ri   rc   )rj   rk   rl   r  r1	  r  rH  r  r  s   @rg   r*	  r*	    s    )	

'ri   r*	  c                       e Zd Zd ZddZy)BackrefAccessorc                 V    || _         |j                  | _        |j                  | _        y rc   )r>  r,	  rB  re   r>  s     rg   r  zBackrefAccessor.__init__&  s    
__
ri   Nc                     |`| j                   j                  j                  }| j                  j	                         j                  | j                   t        ||      k(        S | S rc   )r>  r0	  r  r,	  r  r7  r   )re   r  r  r  s       rg   r  zBackrefAccessor.__get__+  sR    ::'',,DNNVXU4::4)@@AC ri   rc   )rj   rk   rl   r  r  rd   ri   rg   r6	  r6	  %  s    %
ri   r6	  c                   $    e Zd ZdZd ZddZd Zy)ObjectIdAccessorz(Gives direct access to the underlying idc                     || _         y rc   )r>  r8	  s     rg   r  zObjectIdAccessor.__init__6  s	    
ri   Nc                 b   ||j                   j                  | j                  j                        }|o| j                  j                  |j                  v rM|j                  | j                  j                     }t        || j                  j                  j                        }|S | j                  S rc   )r%	  r  r>  r  r.	  r   r0	  )re   r  r  r   rel_objs        rg   r  zObjectIdAccessor.__get__9  s    %%))$**//:E}H4D4D!D"**4::??;)=)=)B)BCLzzri   c                 F    t        || j                  j                  |       y rc   )r  r>  r  r(	  s      rg   rH  zObjectIdAccessor.__set__C  s    $**//51ri   rc   )rj   rk   rl   r  r  r  rH  rd   ri   rg   r;	  r;	  4  s    22ri   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dZd Zd Zd Zd Zd Zy)r6   r   FNr3  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   rn   )r   r  r  r*  r  r  r  r  rt  r_  	unindexedchoices	help_textverbose_namedefault_index_typer;  _hiddenr6   _field_counter_order	_sort_key)re   r  r  r*  r  r  r  r  rt  r_  rB	  rC	  rD	  rE	  r;  	db_columnrG	  s                    rg   r  zField.__init__P  s    
   > ?#K	
&&& """($?(?(? 	!****0q5ACri   c                 `    t        | j                  dz   | j                  j                  z         S r  )r  r  rB  rj   r  s    rg   r  zField.__hash__p  s$    DIIOdjj&9&99::ri   c                     t        | d      rJt        | dd       r=dt        |       j                  d| j                  j                  d| j
                  dS dt        |       j                  z  S )NrB  r  r   : r^  r  z<%s: (unbound)>)r  r   r  rj   rB  r  r  s    rg   __repr__zField.__repr__s  sY    4!gdFD&A$(J$7$7$(JJ$7$7$(II/ / !4:#6#666ri   c           	          || _         |x| _        | _        | j                  xs || _        |rt	        ||| j                  || |             y y rc   )rB  r  	safe_namer  r  accessor_classre   rB  r  set_attributes       rg   r  z
Field.bindz  sM    
%))	DN++3tE4!4!4UD$!GH ri   c                 j    t        | j                  j                  j                  | j                        S rc   )r$   rB  r1  r2  r  r  s    rg   r  zField.column  s%    djj&&,,d.>.>??ri   c                     |S rc   rd   r  s     rg   adaptzField.adapt  s    ri   c                 ,    ||S | j                  |      S rc   rW	  r  s     rg   r  zField.db_value      u<4::e+<<ri   c                 ,    ||S | j                  |      S rc   rY	  r  s     rg   r2  zField.python_value  rZ	  ri   c                 2    t        || j                  d      S r  )r]   r  )re   r   cases      rg   r  zField.to_value  s    UDMM%88ri   c                     | j                   S rc   )rJ	  rB  s     rg   r  zField.get_sort_key  s    ~~ri   c                 8    |j                  | j                        S rc   )r3  r  rB  s     rg   r/  zField.__sql__  s    wwt{{##ri   c                      y rc   rd   r  s    rg   get_modifierszField.get_modifiers  r  ri   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_typera	  r_  ra  rU   )re   rC  column_type	modifiersr   modifier_literals         rg   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 NULLro  zDEFAULT NEXTVAL('%s')r  )rn  r  rg	  r  rB	  rU   r  r  rt  r  rA  r_  rv  )re   rC  r  rr  s       rg   ddlz	Field.ddl  s    (()*%%c*	LL#>>LL[)*yyLLZ)LL]+,==LL4t}}DEFLL))*>>LL\DNN:;<ri   )FFFNNFNNNFNNNNNFrv  r  )rj   rk   rl   rH	  rI	  r!	  rR	  auto_incrementrF	  rc	  r  r  r  rO	  r  r  r  rW	  r  r2  r  r  r/  ra	  rg	  rj	  rd   ri   rg   r6   r6   G  s    NF"NNJFJN>BIM?C).	D@;7I @ @==9$$ri   r6   c                       e Zd ZdZy)r   ANYNrj   rk   rl   rc	  rd   ri   rg   r   r     s    Jri   r   c                       e Zd ZdZd Zy)r>   r8  c                 <    	 t        |      S # t        $ r |cY S w xY wrc   )r   r  r  s     rg   rW	  zIntegerField.adapt  s%    	u: 	L	   
 Nrj   rk   rl   rc	  rW	  rd   ri   rg   r>   r>     s    Jri   r>   c                       e Zd ZdZy)r   r+  Nrn	  rd   ri   rg   r   r         Jri   r   c                       e Zd ZdZy)rS   r.  Nrn	  rd   ri   rg   rS   rS     s    Jri   rS   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      rg   r  zAutoField.__init__  sG    ::m$-?$t*LMM $}i'88ri   )rj   rk   rl   rk	  rc	  r  r  r  s   @rg   r   r     s    NJ9 9ri   r   c                       e Zd ZdZy)r   r*  Nrn	  rd   ri   rg   r   r     s    Jri   r   c                   $     e Zd ZdZd fd	Z xZS )r;   z$INT GENERATED BY DEFAULT AS IDENTITYc                 >    |rd| _         t        t        |   di | y )Nz INT GENERATED ALWAYS AS IDENTITYrd   )rc	  r  r;   r  )re   generate_alwaysr  r  s      rg   r  zIdentityField.__init__  s    @DOmT+5f5ri   r  )rj   rk   rl   rc	  r  r  r  s   @rg   r;   r;     s    7J6 6ri   r;   c                        e Zd Z fdZ xZS )rL   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  rL   r  r  s      rg   r  zPrimaryKeyField.__init__  s(     E 	F 	ot-t>v>ri   rR  r  s   @rg   rL   rL     s    ? ?ri   rL   c                       e Zd ZdZd Zy)r8   r7  c                 <    	 t        |      S # t        $ r |cY S w xY wrc   )r	  r  r  s     rg   rW	  zFloatField.adapt  s%    	< 	L	rq	  Nrr	  rd   ri   rg   r8   r8     s    Jri   r8   c                       e Zd ZdZy)r3   r5  Nrn	  rd   ri   rg   r3   r3     rt	  ri   r3   c                   :     e Zd ZdZ	 	 d fd	Zd Zd Zd Z xZS )r-   r2  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  )re   r	  r	  r	  r	  r  r  r  s          rg   r  zDecimalField.__init__  sc    $,$ CG$:$:$C$COOB'T-@-@,@A	lD*D;F;ri   c                 2    | j                   | j                  gS rc   )r	  r	  r  s    rg   ra	  zDecimalField.get_modifiers  s    !4!455ri   c                     t         j                  }|s||S  |d      S | j                  r8 |t        |            }|j	                  | j
                  | j                        S |S )Nr   )r	  )r	  r	  r	  r^  quantizer	  r	  )re   r   Ddecimal_values       rg   r  zDecimalField.db_value  sZ    OO!M53qt3??i./M ))$))dmm)LLri   c                 |    |:t        |t        j                        r|S t        j                  t        |            S y rc   )rz   r	  r	  r^  r  s     rg   r2  zDecimalField.python_value  s4    %1??9U#344 ri   )r  rH  FN)	rj   rk   rl   rc	  r  ra	  r  r2  r  r  s   @rg   r-   r-      s"    JCH<65ri   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 )NrF  )rz   r^  r_  r   r  s     rg   rW	  z_StringField.adapt   s5    eY'Lz*<<((ri   c                 8    t        | t        j                  |      S rc   r  r  s     rg   r   z_StringField.__add__'  s    %5dBIIu%MMri   c                 8    t        |t        j                  |       S rc   r  r  s     rg   r  z_StringField.__radd__(  s    &6ubii&NNri   N)rj   rk   rl   rW	  r   r  rd   ri   rg   r	  r	    s      NNri   r	  c                   *     e Zd ZdZd fd	Zd Z xZS )r!   r=  c                 :    || _         t        t        |   |i | y rc   )
max_lengthr  r!   r  )re   r	  r  r  r  s       rg   r  zCharField.__init__.  s    $i'88ri   c                 @    | j                   xr | j                   gxs d S rc   )r	  r  s    rg   ra	  zCharField.get_modifiers2  s    4DOO#4<<ri   )   )rj   rk   rl   rc	  r  ra	  r  r  s   @rg   r!   r!   +  s    J9=ri   r!   c                   "     e Zd ZdZ fdZ xZS )r7   r/  c                 R    t         t        |   |      }|r|j                         }|S rc   )r  r7   r2  rd  )re   r   r  s     rg   r2  zFixedCharField.python_value9  s'    nd8?KKMEri   )rj   rk   rl   rc	  r2  r  r  s   @rg   r7   r7   6  s    J ri   r7   c                       e Zd ZdZy)rX   r9  Nrn	  rd   ri   rg   rX   rX   @  s    Jri   rX   c                   &     e Zd Zd Zd fd	Z xZS )FieldDatabaseHookc                     t        d      )NzSubclasses must implementrh  r
  s     rg   _db_hookzFieldDatabaseHook._db_hookE  s    !"=>>ri   c                    |j                   j                  t        |j                   j                  t              rA|j                   j                  j	                  | j
                         | j                  d        n7| j                  |j                   j                         n| j                  d        |j                   j                  j                  | j
                         t        t        | +  |||      S rc   )r1  r  rz   rP   r  r	  	_db_hooksr  r  r	  r  re   rB  r  rT	  r  s       rg   r  zFieldDatabaseHook.bindH  s    ;;+%++..6$$44T]]Cd#ekk223MM$
 	$$T]]3&25$NNri   rv  )rj   rk   rl   r	  r  r  r  s   @rg   r	  r	  D  s    ?O Ori   r	  c                       e Zd ZdZd Zd Zy)r   r,  c                 J    |t         | _        y |j                         | _        y rc   )	bytearrayr  r  r
  s     rg   r	  zBlobField._db_hook\  s!     )D ( 8 8 :Dri   c                     t        |t              r|j                  d      }t        |t              r| j	                  |      S |S )Nr\  )rz   r^  rJ  r_  r  r  s     rg   r  zBlobField.db_valueb  s;    eY'LL!56EeZ($$U++ri   N)rj   rk   rl   rc	  r	  r  rd   ri   rg   r   r   Y  s    J;ri   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 )Nr  r   r   )r  r  r   r  _BitField__current_flagr  s      rg   r  zBitField.__init__k  s/    )Q'h&77ri   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 rc   )_field_valuer  r  )re   r>  r   FlagDescriptorr  s      rg   r  z.BitField.flag.<locals>.FlagDescriptor.__init__x  s    ##nd46ri   c                 N    | j                   j                  | j                         S rc   )r	  r  r	  r  s    rg   clearz+BitField.flag.<locals>.FlagDescriptor.clear|  s    {{**DKK<88ri   c                 L    | j                   j                  | j                        S rc   )r	  r  r	  r  s    rg   rQ  z)BitField.flag.<locals>.FlagDescriptor.set~  s    {{))$++66ri   c                 v    || S t        || j                  j                        xs d}|| j                  z  dk7  S r  )r   r	  r  r	  )re   r  r  r   s       rg   r  z-BitField.flag.<locals>.FlagDescriptor.__get__  s<    #K$++*:*:;@q+11ri   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  )re   r  is_setr   s       rg   rH  z-BitField.flag.<locals>.FlagDescriptor.__set__  sh    .$%IJJ$++*:*:;@qT[[(Edkk\)E$++"2"2E:ri   c                 p    |j                  | j                  j                  | j                        dk7        S r  )r3  r	  r  r	  rB  s     rg   r/  z-BitField.flag.<locals>.FlagDescriptor.__sql__  s)    wwt{{224;;?1DEEri   rc   )
rj   rk   rl   r  r	  rQ  r  rH  r/  r  )r  r	  s   @rg   r	  r	  w  s"    7972
;Fri   r	  )r	  rO  )re   r   r	  s     @rg   flagzBitField.flagp  sM    =''EA%"'1*D	FZ 	F2 dE**ri   rc   )rj   rk   rl   r  r	  r  r  s   @rg   r   r   j  s     
 +ri   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	e	Z
d ZeZd	 Zd
 Zd Zd Zd Zd Zd Zd Z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 rc   )r  r  r%	  r  r	  rz   _buffer)re   r  r  r   s       rg   r  zBigBitFieldData.__init__  sk     	&&**4995KEE9-e$E;@@t}}--dii8ri   c                 8    | j                   j                          y rc   )r	  r	  r  s    rg   r	  zBigBitFieldData.clear  s    ri   c                     t        |d      \  }}t        | j                        }||k  r$| j                  j                  d|dz   |z
  z         ||fS )NrO      r   )divmodr   r	  rA  re   r  byte_numbyte_offsetcur_sizes        rg   _ensure_lengthzBigBitFieldData._ensure_length  sS     &sA+t||$xLLHqLH+D EF$$ri   c                 `    | j                  |      \  }}| j                  |xx   d|z  z  cc<   y r  r	  r	  re   r  r	  r	  s       rg   set_bitzBigBitFieldData.set_bit  s0     $ 3 3C 8+X1#34ri   c                 b    | j                  |      \  }}| j                  |xx   d|z   z  cc<   y r  r	  r	  s       rg   	clear_bitzBigBitFieldData.clear_bit  s3     $ 3 3C 8+XA$4"55ri   c                     | j                  |      \  }}| j                  |xx   d|z  z  cc<   t        | j                  |   d|z  z        S r  )r	  r	  rf  r	  s       rg   
toggle_bitzBigBitFieldData.toggle_bit  sN     $ 3 3C 8+X1#34DLL*a;.>?@@ri   c                     t        |d      \  }}t        | j                        }||k  ryt        | j                  |   d|z  z        S )NrO  Fr   )r	  r   r	  rf  r	  s        rg   r	  zBigBitFieldData.is_set  sI     &sA+t||$xDLL*a;.>?@@ri   c                 N    |r| j                  |       y | j                  |       y rc   )r	  r	  )re   r  r   s      rg   r  zBigBitFieldData.__setitem__  s    #T)=ri   c                 ,    t        | j                        S rc   )r   r	  r  s    rg   r  zBigBitFieldData.__len__  s    4<<  ri   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   r	  )	rz   r	  r	  bytesr	  
memoryviewr  r   rA  )re   r  datadiffs       rg   _get_compatible_dataz$BigBitFieldData._get_compatible_data  sj    e_-==Dy*=>D5664y3t9$!8T\\((48ri   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	  r	  r   )r}  )rz   r	  r	  r	  r	  r	  r  maxr   r  zip_longestr  )	re   r  r  r	  bufr  r  r  bs	            rg   _bitwise_opzBigBitFieldData._bitwise_op  s    e_-==Dy*=>D566#c$iU"<<=""4<<C"2 	IAv11XCF	
ri   c                 B    | j                  |t        j                        S rc   )r	  r  r  r  s     rg   r  zBigBitFieldData.__and__  s    x}}55ri   c                 B    | j                  |t        j                        S rc   )r	  r  r,  r  s     rg   r  zBigBitFieldData.__or__      x||44ri   c                 B    | j                  |t        j                        S rc   )r	  r  xorr  s     rg   r  zBigBitFieldData.__xor__  r	  ri   c              #   j   K   | j                   D ]   }t        d      D ]  }|d|z  z  rdnd  " y w)NrO  r   r   )r	  r  )re   r	  js      rg   r  zBigBitFieldData.__iter__  s>      	1A1X 1aLaq01	1s   13c                 ,    t        | j                        S rc   )reprr	  r  s    rg   rO	  zBigBitFieldData.__repr__  s    DLL!!ri   r   r   c                 ,    t        | j                        S rc   r_  r	  r  s    rg   r  zBigBitFieldData.__str__      dll++ri   c                 ,    t        | j                        S rc   r	  r  s    rg   	__bytes__zBigBitFieldData.__bytes__  r	  ri   N)rj   rk   rl   r  r	  r	  r	  r	  r	  r	  r  r  __delitem__r  r	  r	  r  r  r  r  rO	  rq   version_infor  r	  rd   ri   rg   r	  r	    s~    A%56A
A K>K!	6551
"
Q	,	,ri   r	  c                   &     e Zd ZddZ fdZ xZS )BigBitFieldAccessorc                 J    || j                   S t        || j                        S rc   )r>  r	  r  r  s      rg   r  zBigBitFieldAccessor.__get__  s#    ::x33ri   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 )NrF  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)rz   r	  tobytesbuffer_typer	  r	  r_  r	  r	  r^  rJ  r  r  r	  rH  )re   r  r   r  s      rg   rH  zBigBitFieldAccessor.__set__  s    eZ(MMOE{+%LEy)u%E/u}}-Ey)LL)EE:. 9 : :!405Ari   rc   )rj   rk   rl   r  rH  r  r  s   @rg   r	  r	    s    4B Bri   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 )Nr  )r  r_  r  r   r  r  s      rg   r  zBigBitField.__init__  s'    )Z0k4)4:6:ri   c                      |t        |      S |S rc   )r_  r  s     rg   r  zBigBitField.db_value  s    $)$5z% @5@ri   )rj   rk   rl   r	  rR	  r  r  r  r  s   @rg   r   r     s    (N;Ari   r   c                       e Zd ZdZd Zd Zy)r\   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    rP  r	  )rz   r=  r   r	  r  r;  r  r  s     rg   r  zUUIDField.db_value  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 rc   )rz   r  r;  r  s     rg   r2  zUUIDField.python_value$  s.    eTYY'L#(#4tyy>$>ri   Nrj   rk   rl   rc	  r  r2  rd   ri   rg   r\   r\     s    J?ri   r\   c                       e Zd ZdZd Zd Zy)r   r<  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 )NrP  r	  )r  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)rz   r	  r   r  r=  r  r;  r  r  s     rg   r  zBinaryUUIDField.db_value-  s    eU#E
b(8$$U++z*s5zR/?II%(EeTYY'$$U[[11 H I I ri   c                     t        |t        j                        r|S t        |t              r|j	                         }n|rt        |t
              st        |      }|t        j                  |      S d S )Nr	  )rz   r  r;  r	  r	  r	  r  s     rg   r2  zBinaryUUIDField.python_value:  sX    eTYY'Lz*MMOE:eU3%LE).):tyyu%DDri   Nr	  rd   ri   rg   r   r   *  s    JIEri   r   c                       fd}|S )Nc                 d    | j                   j                  j                  j                  |       S rc   )rB  r1  r  r'  )re   r%  s    rg   decz_date_part.<locals>.decE  s&    zz((55iFFri   rd   r%  r
  s   ` rg   
_date_partr
  D  s    GJri   c                     |xs d }|D ]*  }	  |t         j                   j                  | |            c S  | S # t        $ r Y :w xY w)Nc                     | S rc   rd   xs    rg   r|   z"format_date_time.<locals>.<lambda>J  s    a ri   )r   strptimer  )r   formatspost_processfmts       rg   r   r   I  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  rj  s    rg   r  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 rc   )r
  r  r
  r  )re   r
  r  r  r  s       rg   r  z_BaseFormattedField.__init__\  s%    "DL!414B6Bri   rc   )rj   rk   rl   r
  r  r  r  s   @rg   r
  r
  Y  s    GC Cri   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,   r1  )r   r   z%Y-%m-%d %H:%M:%S.%f%zz%Y-%m-%d %H:%M:%S%zr   c                 V    |r&t        |t              rt        || j                        S |S rc   )rz   r=  r   r
  r  s     rg   rW	  zDateTimeField.adaptl  s$    Zz2#E4<<88ri   c                 `    | j                   j                  j                  j                  |       S rc   rB  r1  r  r,  r  s    rg   r,  zDateTimeField.to_timestampq  #    zz((55d;;ri   c                 b    | j                   j                  j                  j                  ||       S rc   rB  r1  r  r)  re   rb  s     rg   truncatezDateTimeField.truncatet  %    zz((66tTBBri   r   r   r   r   r   r   N)rj   rk   rl   rc	  r
  rW	  r,  r
  r  r
  r   r   r   r   r   r   rd   ri   rg   r,   r,   b  sz    JG
<C Jv&'DZ()E
:e$
%CJv&'Dj*+Fj*+Fri   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+   r0  )r   r   r   c                     |r*t        |t              rd }t        || j                  |      S |r*t        |t        j                        r|j                         S |S )Nc                 "    | j                         S rc   )r   r

  s    rg   r|   z!DateField.adapt.<locals>.<lambda>  s    1668 ri   )rz   r=  r   r
  r   r   re   r   pps      rg   rW	  zDateField.adapt  sI    Zz2#B#E4<<<<z%):):;::<ri   c                 `    | j                   j                  j                  j                  |       S rc   r
  r  s    rg   r,  zDateField.to_timestamp  r
  ri   c                 b    | j                   j                  j                  j                  ||       S rc   r
  r
  s     rg   r
  zDateField.truncate  r
  ri   r   r   r   N)rj   rk   rl   rc	  r
  rW	  r,  r
  r  r
  r   r   r   rd   ri   rg   r+   r+     sM    JG<C Jv&'DZ()E
:e$
%Cri   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)rY   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 rc   )r   r

  s    rg   r|   z!TimeField.adapt.<locals>.<lambda>  s    qvvx ri   )rz   r=  r   r
  r   r   	timedeltaminr!
  s      rg   rW	  zTimeField.adapt  s}    %,''t||R@@E8#4#45zz|#E83E3E!F%%))E17799ri   r   r   r   N)rj   rk   rl   rc	  r
  rW	  r  r
  r   r   r   rd   ri   rg   rY   rY     sB    JG	 Jv&'Dj*+Fj*+Fri   rY   c                       fd}|S )Nc                     | j                   j                  j                  }| j                  dkD  r| t	        | j                  d      z  n| }|j                  |j                  |            S Nr   Fr8  )rB  r1  r  
resolutionr]   r'  r.  )re   rW  r  r%  s      rg   r
  z!_timestamp_date_part.<locals>.dec  s]    ZZ&&??Q& doo??,0 	y"*;*;D*ABBri   rd   r
  s   ` rg   _timestamp_date_partr.
    s    C
 Jri   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 )rZ   rG  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   rn   rG  r  z,TimestampField resolution must be one of: %sr  c              3   2   K   | ]  }t        |        y wrc   )ra  )ry  r  s     rg   r{  z*TimestampField.__init__.<locals>.<genexpr>  s     &N!s1v&Nr|  i@B r   Fr  )r  r-
  r  valid_resolutionsr  r_  ticks_to_microsecondr   r   r   r   r  r  rZ   r  )re   r  r  dfltr  s       rg   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=ri   c                     t        j                   t        j                  t        j                  |j	                                     d d  S )N   )r   r   gmtimemktime	timetuple)re   r   s     rg   local_to_utczTimestampField.local_to_utc  s4    
   $++dkk",,..I"J2A"NOOri   c                     t        j                  |j                               }t        j                  j	                  |      S rc   )calendartimegmutctimetupler   r   )re   r   r   s      rg   utc_to_localzTimestampField.utc_to_local  s0    
 __R__./  ..r22ri   c                     | j                   r#t        j                  |j                               S t	        j
                  |j                               S rc   )r   r<
  r=
  r>
  r   r8
  r9
  r  s     rg   get_timestampzTimestampField.get_timestamp  s7    88??5#5#5#788;;u011ri   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ư>)rz   r   r   r   r   r   r   roundr-
  rA
  microsecond)re   r   r   s      rg   r  zTimestampField.db_value  s    =eX../x}}-%%ejj%++uyyIEuUT__4566&&u-	??Q%++g56I(I5#$$ri   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   )rD
  )rz   r   r	  longr-
  r	  r3
  r   r   r   r   r   )re   r   ticksmicrosecondss       rg   r2  zTimestampField.python_value  s    EC3E!F"%eT__=u"54+D+D#DE xx(/ ))77>,?ri   c                     | j                   dkD  r| t        | j                   d      z  n| }| j                  j                  j                  j                  |      S r,
  )r-
  r]   rB  r1  r  r.  )re   r  s     rg   r.  zTimestampField.from_timestamp  sL    ??Q& doo??,0 	zz((77==ri   r   r   r   r   r   r   )rj   rk   rl   r  r2
  r  r:
  r?
  rA
  r  r2  r.  r  r.
  r   r   r   r   r   r   r  )ry  r  r  s   00@rg   rZ   rZ     s    (-a11Q1>"P32%"$>
 (01D)'23E
'.
/C(01D*845F*845Fm 2s   BrZ   c                       e Zd Zd Zd Zy)rB   c                 `    |,t        j                  dt        j                  |            d   S y )N!Ir   )structr  socket	inet_atonre   r  s     rg   r  zIPField.db_value  s-    ?==v'7'7'<=a@@ ri   c                 Z    |)t        j                  t        j                  d|            S y )NrL
  )rN
  	inet_ntoarM
  packrP
  s     rg   r2  zIPField.python_value  s(    ?##FKKc$:;; ri   N)rj   rk   rl   r  r2  rd   ri   rg   rB   rB     s    A<ri   rB   c                       e Zd ZdZeZy)r   r-  N)rj   rk   rl   rc	  rf  rW	  rd   ri   rg   r   r   "  s    JEri   r   c                   &     e Zd Zd fd	Zd Z xZS )r   c                 @    t        t        | 
  |i | ||| _        y y rc   )r  r   r  rW	  )re   rW	  r  r  r  s       rg   r  zBareField.__init__(  s)    i'88DJ ri   c                      y rc   rd   rB  s     rg   rg	  zBareField.ddl_datatype-  rx  ri   rc   )rj   rk   rl   r  rg	  r  r  s   @rg   r   r   '  s    
ri   r   c                   |     e Zd ZeZeZ	 	 	 	 d fd	Zed        Z	 fdZ
d Zd Zd Zd Zd fd	Zdd	Zd
 Z xZS )r:   c                 X   |j                  dd       t        t        |   |i | |t	        d       |}|	t	        d       |	}|t	        d       |}|dk(  | _        || _        || _        || _        d | _	        || _
        || _        || _        || _        |
| _        || _        || _        y )Nr  TzP"rel_model" has been deprecated in favor of "model" for ForeignKeyField objects.zO"to_field" has been deprecated in favor of "field" for ForeignKeyField objects.zK"related_name" has been deprecated in favor of "backref" for Field objects.re   )r  r  r:   r  r   _is_self_referencer,	  r0	  declared_backrefbackref	on_delete	on_update
deferrabler  object_id_namer/	  constraint_name)re   rB  r>  r\
  r]
  r^
  r_
  	_deferredr,	  to_fieldr`
  r/	  ra
  related_namer  r  r  s                   rg   r  zForeignKeyField.__init__5  s    
 	'4(ot-t>v>  B CE B CE# : ;"G"'6/ '""$!,".ri   c                     t        | j                  t              s| j                  j                  S t        | j                  t              rt
        j                  S t        j                  S rc   )rz   r0	  r   rc	  r   r   r>   r  s    rg   rc	  zForeignKeyField.field_typeX  sF    $..)4>>,,,5"---&&&ri   c                     t        | j                  t              s| j                  j                         S t        t
        |          S rc   )rz   r0	  r   ra	  r  r:   r  s    rg   ra	  zForeignKeyField.get_modifiers`  s4    $..)4>>//11_d9;;ri   c                     | j                   xsQ d| j                  j                  j                  d| j                  d| j
                  j                  j                  S )Nfk_rr  _refs_)ra
  rB  r1  r8  r  r,	  r  s    rg   get_constraint_namez#ForeignKeyField.get_constraint_namee  sI    ## -JJ''NN  ++(- 	-ri   c                 8    | j                   j                  |      S rc   )r0	  rW	  r  s     rg   rW	  zForeignKeyField.adaptk  s    ~~##E**ri   c                     t        || j                        r t        || j                  j                        }| j                  j                  |      S rc   )rz   r,	  r   r0	  r  r  r  s     rg   r  zForeignKeyField.db_valuen  s;    eT^^,E4>>#6#67E~~&&u--ri   c                 h    t        || j                        r|S | j                  j                  |      S rc   )rz   r,	  r0	  r2  r  s     rg   r2  zForeignKeyField.python_values  s*    eT^^,L~~**511ri   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  r  r`
  r  r1  r  rZ
  r,	  rz   r0	  r=  r   r  r  r:   r  rQ	  r  r[
  r\
  r  r;	  backref_accessor_classr	  s       rg   r  zForeignKeyField.bindx  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; ( ri   c           	         g }| j                   s|r>| j                         }|j                  t        d      t	        t        |            g       |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)ra
  rj
  rA  rU   rn  rB  r5  r,	  r0	  r]
  r  r^
  r_
  rv  )re   explicit_namerp  r  s       rg   foreign_key_constraintz&ForeignKeyField.foreign_key_constraint  s    =++-DLLL!0679 : 	dW%NNdnn./1 	2 >>LL^dnn<=>>>LL^dnn<=>??LL_t>?@ri   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.)r}  r   r,	  r1  r=  r   s     rg   r   zForeignKeyField.__getattr__  sk    ??4  !LMM4>>''...>>''..t44 ACGH I 	Iri   )NNNNNNNNNTNNrv  r  )rj   rk   rl   r*	  rR	  r6	  rp
  r  r  rc	  ra	  rj
  rW	  r  r2  r  rt
  r   r  r  s   @rg   r:   r:   1  s^    'N,BF<@?CDH!/F ' '<
-+.
2
";H,Iri   r:   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_kwargsrt  rel_model_namer/   _unresolvedr  r  r  r  )re   rz
  r  r  s      rg   r  zDeferredForeignKey.__init__  si    ",224&&**40 $0

=1F#

=1 	1 	3ri   c                 B    t        | j                  fi | j                  S rc   )r/   rz
  ry
  )re   memos     rg   __deepcopy__zDeferredForeignKey.__deepcopy__  s    !$"5"5K9J9JKKri   c                    t        |fddi| j                  }|j                  r1| j                  j                  j                  | j                  |       y | j                  j                  j                  | j                  |       y )Nrb
  T)r:   ry
  r  rB  r1  set_primary_keyr  	add_field)re   r,	  r>  s      rg   	set_modelzDeferredForeignKey.set_model  sa    	OTOT=N=NOJJ,,TYY>JJ&&tyy%8ri   c                    t        t        j                  t        j                  d            }|D ]Z  }|j
                  | j                  j                         k(  s+|j                  |        t        j                  j                  |       \ y )NrI	  r  )
r  r/   r{
  r  
attrgetterrz
  rj   rt  r
  discard)	model_cls
unresolveddrs      rg   resolvezDeferredForeignKey.resolve  so    .:: ( 3 3H =?
 	;B  I$6$6$<$<$>>Y'"..66r:	;ri   rc   )rj   rk   rl   rQ  r{
  r  r  r  r~
  r
  rx  r
  r  r  s   @rg   r/   r/     s9    %K3 HL9 ; ;ri   r/   c                       e Zd Zd Zd Zd Zy)r0   c                     g | _         y rc   )_refsr  s    rg   r  zDeferredThroughModel.__init__  s	    
ri   c                 @    | j                   j                  |||f       y rc   )r
  r  r#	  s       rg   	set_fieldzDeferredThroughModel.set_field  s    

5%./ri   c                 t    | j                   D ])  \  }}}||_        |j                  j                  ||       + y rc   )r
  through_modelr1  r
  )re   r
  	src_modelm2mfieldr  s        rg   r
  zDeferredThroughModel.set_model  s8    )- 	6%Ix%2H"OO%%dH5	6ri   N)rj   rk   rl   r  r
  r
  rd   ri   rg   r0   r0     s    06ri   r0   c                        e Zd ZdxZxZxZZdZy)	MetaFieldNF)rj   rk   rl   r  r  rB  r  r  rd   ri   rg   r
  r
    s    +//K/'/EDKri   r
  c                   ,     e Zd Z fdZddZd Z xZS )ManyToManyFieldAccessorc                    t         t        |   |||       |j                  | _        |j                  | _        |j
                  | _        | j
                  j                  j                  | j                     }| j
                  j                  j                  | j                     }|s&t        d| j                  d| j
                  d      |s&t        d| j                  d| j
                  d      |d   | _	        |d   | _
        y )NzCannot find foreign-key to "z" on "z" model.r   )r  r
  r  rB  r,	  r
  r1  
model_refsr  src_fkdest_fk)re   rB  r>  r  src_fksdest_fksr  s         rg   r  z ManyToManyFieldAccessor.__init__  s    %t5eUDI[[
"00$$**55djjA%%++66t~~F"jj$*<*<> ? ?"nnd.@.@B C Caj{ri   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 "rw  )r
  r\
  r   rz   rh  r
  r  r0	  r>  _prevent_unsavedr  ManyToManyQueryr,	  r_  r
  rB  r7  )re   r  r  force_queryr\
  r  src_ids          rg   r  zManyToManyFieldAccessor.__get__  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 "r
  rw  T)r
  )clear_existing)	r   r
  r0	  r  r>  r
  r  r  r  )re   r  r   r
  rE  s        rg   rH  zManyToManyFieldAccessor.__set__  so    4;;#8#8#=#=>>djj9915XG H HX48		%	-ri   rq  )rj   rk   rl   r  r  rH  r  r  s   @rg   r
  r
    s    # $.ri   r
  c                   |     e Zd ZeZ	 	 d	dZd Zd
 fd	Zd Ze	d        Z
e
j                  d        Z
d Zd Z xZS )rD   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.)rz   r0   r0  r  r  r,	  r\
  _through_model
_on_delete
_on_updater
  _is_backref)re   rB  r\
  r
  r]
  r^
  prevent_unsavedr
  s           rg   r  zManyToManyField.__init__   s    $}.BC]+ !A B BI$9Y=R  "? @ @+## /&ri   c                     t        |       S rc   )r
  r  s    rg   _get_descriptorzManyToManyField._get_descriptor2  s    &t,,ri   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\
  r
  r]
  r^
  r
  ru   )rz   r
  r0   r
  r  rD   r  r
  rB  r
  r
  r
  r\
  r1  r  r,	  r
  )re   rB  r  rT	  many_to_many_fieldr  s        rg   r  zManyToManyField.bind5  s    d))+?@))%t<ot)%}E!0

"00//// ""  <<A5;;+;+;c+ADLNN  **4<<9KL  ri   c                     t        | j                  | j                  f| j                   | j                  ff      D cg c]  \  }}|	 c}}S c c}}w rc   )r  r
  rB  r,	  )re   rr  rB  s      rg   
get_modelszManyToManyField.get_modelsG  sS    &,tzz*!!!4>>2.4 '5 6(!U 6 	6 6s   Ac                 \    | j                   | j                         | _         | j                   S rc   )r
  _create_through_modelr  s    rg   r
  zManyToManyField.through_modelL  s+    &"&"<"<">D"""ri   c                     || _         y rc   )r
  r  s     rg   r
  zManyToManyField.through_modelR  s
    #ri   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)rj   rk   rl   rB  r1  r  r  ri  r8  r  r  )r$  r   re   tabless   rg   r  r
  Z  sb    zz''00HZZ%%,,F(5=8J))..#))..1Gri   r  )r]
  r^
  Through)
r
  r1  r8  r
  r
  r  r:   rj   r  rE   )	re   rB  r  rX  attrs
klass_namer$  r   r
  s	   `     @@@rg   r
  z%ManyToManyField._create_through_modelV  s    ??$S7:CjAU%++((A	 	  $T__MIINNOC:6:IINNOC:6:D
 '*llCLLA
J%00# Bs   Cc                     | j                   S rc   )r
  r  s    rg   get_through_modelz!ManyToManyField.get_through_modelk  s    !!!ri   )NNNNTFrv  )rj   rk   rl   r
  rR	  r  r
  r  r
  r  r
  r  r
  r
  r  r  s   @rg   rD   rD     s[    ,NJNCH'$-M$6
 # #
 $ $1*"ri   rD   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 rc   )field_classfield_instancer  r
  r  )re   r
  r  r  r6   r  s        rg   r  zVirtualField.__init__s  s:    *6D<L<L).):eglD*D;F;ri   c                 T    | j                   | j                   j                  |      S |S rc   )r
  r  r  s     rg   r  zVirtualField.db_valuex  s*    *&&//66ri   c                 T    | j                   | j                   j                  |      S |S rc   )r
  r2  r  s     rg   r2  zVirtualField.python_value}  s*    *&&33E::ri   c           	      x    || _         |x| _        x| _        | _        t	        ||| j                  || |             y rc   )rB  r  r  rQ	  r  rR	  rS	  s       rg   r  zVirtualField.bind  s:    
8<<<49t~tT00dCDri   rc   rv  )	rj   rk   rl   r
  r  r  r2  r  r  r  s   @rg   r
  r
  p  s    K<


Eri   r
  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 rc   )field_names_safe_field_names)re   r
  s     rg   r  zCompositeKey.__init__  s    &!%ri   c                     | j                   b| j                  | j                  S | j                  D cg c]/  }| j                  j                  j                  |   j
                  1 c}| _         | j                   S c c}w rc   )r
  rB  r
  r1  r=  rQ	  re   fs     rg   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 rc   )ri  r
  r   )re   r  r  r
  s       rg   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.)	rz   rh  ri  r  r   r
  r  r  r  )re   r  r   r  field_values        rg   rH  zCompositeKey.__set__  s    %$/ 7 8 8u:T--.. H I I )% 0 	BCHd..s3[A	Bri   c                     t        | j                  |      D cg c]+  \  }}| j                  j                  j                  |   |k(  - }}}t        t        j                  |      S c c}}w rc   )zipr
  rB  r1  r=  rx   r  r  )re   r  r>  r   r  s        rg   r  zCompositeKey.__eq__  sd    +.t/?/?+GI'5% 

((//6%? I Ihmm[11Is   0A'c                     | |k(   S rc   rd   r  s     rg   r  zCompositeKey.__ne__  s    ri   c                 X    t        | j                  j                  | j                  f      S rc   )r  rB  rj   r
  r  s    rg   r  zCompositeKey.__hash__  s"    TZZ(($*:*:;<<ri   c           	          |j                   t        k7  }|j                  t        | j                  D cg c]%  }| j
                  j                  j                  |   ' c}d|            S c c}w r  )r  rL  r3  rv  r
  rB  r1  r=  )re   rC  r  r>  s       rg   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 rc   )rB  r  r  rQ	  r  rS	  s       rg   r  zCompositeKey.bind  s/    
8<<<49t~tyy$'ri   rc   rv  )rj   rk   rl   rt  r  r  r
  r  rH  r  r  r  r/  r  rd   ri   rg   r%   r%     sE    H& & &
B2
 =P(ri   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 rc   r
  r  s    rg   r  z_SortedFieldList.__init__  s    
ri   c                      | j                   |   S rc   )r
  )re   r  s     rg   r  z_SortedFieldList.__getitem__  s    {{1~ri   c                 ,    t        | j                        S rc   )r  r
  r  s    rg   r  z_SortedFieldList.__iter__  r  ri   c                     |j                   }t        | j                  |      }t        | j                  |      }|| j                  || v S rc   )rJ	  r   r
  r   r
  )re   r  r  r  r	  s        rg   __contains__z_SortedFieldList.__contains__  sA    NN

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

A&

!Q1d#ri   c                 Z    | j                  |      }| j                  |= | j                  |= y rc   )r  r
  r
  )re   r  r  s      rg   r  z_SortedFieldList.remove  s'    jjKKJJsOri   N)rj   rk   rl   r  r  r  r  r
  r  r  r  rd   ri   rg   r
  r
    s*    #I!(1$ri   r
  c                      e Zd Zd!dZed        Zej                  d        Zd Zd"dZd Z	d"dZ
d"d	Zd"d
Zd"dZd"dZd#dZd#dZd"dZd"dZd"dZd"dZd Zd"dZd 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)%rR   Nc                 Z    || _         || _        |j                  dt               || _        y )Nr  )rB  rT  r  rN  r  )re   rB  r  r  s       rg   r  zSchemaManager.__init__  s(    
!""7L9.ri   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)rT  rB  r1  r  r<   r  s     rg   r  zSchemaManager.database  sL    ^^8tzz//88:& (ACG::(N O O	ri   c                     || _         y rc   r	  r  s     rg   r  zSchemaManager.database  s	    ri   c                 N     | j                   j                  di | j                  S r  )r  rV  r  r  s    rg   _create_contextzSchemaManager._create_context  s"    ,t}},,Dt/C/CDDri   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 r3  r   ro  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr  r  )r  r
  r%  r3  rB  r1  composite_keyr  r
  r=  r  r  rv  rU   r5  sorted_fieldsrj	  rz   r:   r  rt
  r  rA  _create_table_option_sqltable_settingsrk  r=  r  strict_tableswithout_rowidr_  )re   r+  r  is_temprC  r  r  rT  
field_name
pk_columnsr>  r
  setting
extra_optss                 rg   _create_tablezSchemaManager._create_table  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  )r\  rB  r1  r  r  r  rz   rm  r0  r2  rU   ra  r  rv  )re   r  r  r  r   s        rg   r
  z&SchemaManager._create_table_option_sql&  s    TZZ--55;WEL 1 	@JCeT*E?!KK--EE
OELL3s8U"3#>?	@ ri   c                 ^    | j                   j                   | j                  dd|i|       y Nr+  rd   )r  r	  r
  re   r+  r  s      rg   r  zSchemaManager.create_table5  s*    0d00FdFgFGri   c                    | j                         j                  |j                  d      rdnd      }|r|j                  d       |j                  t	        t        |             j                  d      j                  |      S )Nr
  r
  r
  r3  r  )r
  r%  r  r3  rn  rk  re   r8  rE  r+  rT  rC  s         rg   _create_table_aszSchemaManager._create_table_as8  sr    ##%88K0 26EG 	 KK()V\*567U	ri   c                 f     | j                   ||fd|i|}| j                  j                  |       y )Nr+  )r  r  r	  r   s         rg   create_table_aszSchemaManager.create_table_asC  s2    #d##JIDIDIc"ri   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%  r3  rB  r  )re   r+  r  rC  s       rg   _drop_tablezSchemaManager._drop_tableG  ss    ##%4/]KDJJ 	 ;;y!++j)C 
 [[$++k*C
ri   c                 ^    | j                   j                   | j                  dd|i|       y r
  )r  r	  r  r
  s      rg   r!  zSchemaManager.drop_tableQ  s*    .d..DDDGDEri   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  rB  r
  r%  r3  rB  )re   restart_identityr  rW  rC  s        rg   _truncate_tablezSchemaManager._truncate_tableT  s    ]]  ((*W^,SS_> ""$,,->?CCDJJO++12C++j)C
ri   c                 Z    | j                   j                  | j                  ||             y rc   )r  r	  r  )re   r  r  s      rg   rB  zSchemaManager.truncate_tablea  s"    d223CWMNri   c                     | j                   j                  j                         D cg c]  }| j                  ||       c}S c c}w rc   )rB  r1  fields_to_index_create_indexre   r+  r  s      rg   _create_indexeszSchemaManager._create_indexesd  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 rq  )rz   r=   r  r?  r+  r'  rT  rV   r  r
  r3  )re   r  r+  s      rg   r  zSchemaManager._create_indexh  su    eU#==22

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

4($...9 &e,##%))%00ri   c                 h    | j                  |      D ]  }| j                  j                  |        y N)r+  )r  r  r	  re   r+  rE  s      rg   create_indexeszSchemaManager.create_indexest  s1    ))t)4 	)EMM!!%(	)ri   c                     | j                   j                  j                         D cg c]$  }t        |t              r| j                  ||      & c}S c c}w rc   )rB  r1  r  rz   r=   _drop_indexr  s      rg   _drop_indexeszSchemaManager._drop_indexesx  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@  rz   r$  rW   r  rn  r  r
  r%  r3  )re   r  r+  r6  r7  s        rg   r  zSchemaManager._drop_index}  s    !	DMM11%IellE*u||/C/C 4 4ekkBJ,J "#Z	"ri   c                 h    | j                  |      D ]  }| j                  j                  |        y r  )r  r  r	  r  s      rg   drop_indexeszSchemaManager.drop_indexes  s1    ''T'2 	)EMM!!%(	)ri   c                 x    |j                   r| j                  j                  st        d|j                  z        y )Nz@Sequences are either not supported, or are not defined for "%s".)rt  r  rA  r  r  r8	  s     rg   _check_sequenceszSchemaManager._check_sequences  s8    ~~T]]%<%< 138::> ? ? &=ri   c                     |j                   j                  j                  r4t        |j                   j                  j                  |j                        S t        |j                        S rc   )rB  r1  r  rn  rt  r8	  s     rg   _sequence_for_fieldz!SchemaManager._sequence_for_field  sE    ;;##%++++22ENNCC%..))ri   c                     | j                  |       | j                  j                  |j                        s=| j	                         j                  d      j                  | j                  |            S y )NzCREATE SEQUENCE r  r  r  rt  r
  r%  r3  r!  r8	  s     rg   _create_sequencezSchemaManager._create_sequence  s[    e$}},,U^^<$_&W/0S11%89; =ri   c                 b    | j                  |      }|| j                  j                  |       y y rc   )r$  r  r	  re   r>  seq_ctxs      rg   create_sequencezSchemaManager.create_sequence  s/    ''.MM!!'* ri   c                     | j                  |       | j                  j                  |j                        r=| j	                         j                  d      j                  | j                  |            S y )NzDROP SEQUENCE r#  r8	  s     rg   _drop_sequencezSchemaManager._drop_sequence  s[    e$==((8$_&W-.S11%89; 9ri   c                 b    | j                  |      }|| j                  j                  |       y y rc   )r*  r  r	  r&  s      rg   drop_sequencezSchemaManager.drop_sequence  s/    %%e,MM!!'* ri   c                     | j                         j                  d      j                  |j                        j                  d      j                  |j	                  d            S )NzALTER TABLE z ADD T)r
  r%  r3  rB  rt
  r8	  s     rg   _create_foreign_keyz!SchemaManager._create_foreign_key  sI     "(U[[!!U11$78	:ri   c                 X    | j                   j                  | j                  |             y rc   )r  r	  r.  r8	  s     rg   create_foreign_keyz SchemaManager.create_foreign_key  s    d66u=>ri   c                     | j                   j                  rD| j                  j                  j                  D ]   }|j
                  s| j                  |       " y y rc   )r  rA  rB  r1  r
  rt  r(  r8	  s     rg   create_sequenceszSchemaManager.create_sequences  sH    ==""))77 0>>((/0 #ri   c                 n    | j                           | j                  |fi | | j                  |       y r  )r2  r  r  )re   r+  table_optionss      rg   
create_allzSchemaManager.create_all  s4    $0-0&ri   c                     | j                   j                  rD| j                  j                  j                  D ]   }|j
                  s| j                  |       " y y rc   )r  rA  rB  r1  r
  rt  r,  r8	  s     rg   drop_sequenceszSchemaManager.drop_sequences  sH    ==""))77 .>>&&u-. #ri   c                 P     | j                   |fi | |r| j                          y y rc   )r!  r7  )re   r+  r7  r  s       rg   drop_allzSchemaManager.drop_all  s)    ((! ri   rc   rv  rj  r>  )#rj   rk   rl   r  r  r  r  r
  r
  r
  r  r  r  r  r!  r  rB  r  r  r  r  r  r  r  r!  r$  r(  r*  r,  r.  r0  r2  r5  r7  r9  rd   ri   rg   rR   rR     s    /   __ E(TH	#FOA
1)-
")?
*;+
;+
:?0'
."ri   rR   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   rB  r  r=  r  combinedr
  _sorted_field_listr
  sorted_field_namesr  _default_by_name_default_dict_default_callables_default_callable_listrj   rt  r  table_functionrA  make_table_namer8  r$  rh  r  r  r  r  r
  rk	  only_save_dirty
depends_onr
  r
  r
  r
  refsbackrefsr	  defaultdictr
  model_backrefs
manytomanyr  r  r  rQ  keys_additional_keysr	  )re   rB  r  r8  r  r  r  r  rF  rG  r  db_tablerD  r
  r
  r
  r
  rA  r  r  r   s                        rg   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 ri   c                     | j                   r!t        j                  dd| j                        S t	        | j
                  j                        S )Nr@  rr  )rA  r   rr  r  rv  rB  rj   r  s    rg   rE  zMetadata.make_table_name  s7    ""66)S$))44tzz2233ri   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  rB  rQ  r	  dequer  popleftr  rH  r  r  r1  rI  )re   rH  rI  depth_firstr  r  queuer  currfkrB  s              rg   model_graphzMetadata.model_graph  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-.  ri   c                     |j                   }|| j                  |<   | j                  |   j                  |       | j                  |j
                  j                  |<   |j
                  j                  | j                     j                  |       y rc   )r,	  rH  r
  r  rB  r1  rI  rK  re   r>  rels      rg   add_refzMetadata.add_ref7  si    oo		%##E*$(JJ		5!		  ,33E:ri   c                    |j                   }| j                  |= | j                  |   j                  |       |j                  j
                  |= |j                  j                  | j                     j                  |       y rc   )r,	  rH  r
  r  r1  rI  rK  rB  rZ  s      rg   
remove_refzMetadata.remove_ref>  sa    ooIIe##E*IIu%		  ,33E:ri   c                 6    || j                   |j                  <   y rc   rL  r  r8	  s     rg   add_manytomanyzMetadata.add_manytomanyE  s    &+

#ri   c                 2    | j                   |j                  = y rc   r`  r8	  s     rg   remove_manytomanyzMetadata.remove_manytomanyH  s    OOEJJ'ri   c                     | j                   _t        | j                  | j                  D cg c]  }|j                   c}| j
                  | j                  | j                        | _         | j                   S c c}w )N)r  r  rT  )r$  rW   r8  r
  r  r  rB  r  r8	  s     rg   r2  zMetadata.tableK  s`    ;;040B0BCu""C{{zz--)DK {{	 Ds   A8
c                     t        d      )NzCannot set the "table".r  r  s     rg   r2  zMetadata.tableV  s    677ri   c                     d | _         y rc   )r$  r  s    rg   r2  zMetadata.tableZ  r  ri   c                     | j                   S rc   )r  r  s    rg   r  zMetadata.schema^  s    ||ri   c                     || _         | `y rc   )r  r2  r  s     rg   r  zMetadata.schemab  s    Jri   c                     | j                   r t        | j                   | j                        S t        | j                        S rc   )r  rn  r8  r  s    rg   r  zMetadata.entityg  s-    <<$,,88$//**ri   c                     t        | j                        | _        | j                  D cg c]  }|j                   c}| _        y c c}w rc   )rh  r>  r
  r  r?  r
  s     rg   _update_sorted_fieldszMetadata._update_sorted_fieldsn  s5    !$"9"9:373E3E"Fa166"F"Fs   Ac                     t        |t              r|j                  }| j                  j	                  |g       }| j
                  j	                  |g       }||fS rc   )rz   
ModelAliasrB  r
  r  rK  )re   rB  forwardrefsrI  s       rg   get_rel_for_modelzMetadata.get_rel_for_modelr  sN    eZ(KKEoo))%4&&**5"5X&&ri   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 rc   )r=  remove_fieldrL  rc  rz   r
  r2  r  rB  r  r  r  r=  r>  r  rk  r  r  r  rB  rC  r  rA  r@  r:   r\  rD   ra  )re   r
  r>  rT	  s       rg   r
  zMetadata.add_fieldy  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?/ri   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rc   )r=  r2  r  r  r  r=  r   r>  r  rk  r  r  rB  r  rC  rA  r@  r  rz   r:   r^  )re   r
  originalr  r  rr  s         rg   rq  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 rc   )rz   r%   r
  r
  r  rk	  rf  rt  )re   r  r>  s      rg   r
  zMetadata.set_primary_key  sI    '|<tU#    !  	ri   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 )NFrd   )r
  ri  r  r
  r=  )re   r
  s     rg   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 rc   )r@  rX  rC  )re   ddr
  r  s       rg   get_default_dictzMetadata.get_default_dict  s@    ""'')#'#>#> 	'J$YBzN	'	ri   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  r  r*  r  rF   rB  r;  r  rz   rm  rh  ri  r=  r=  r  )re   r  r
  	index_objindex_partsr*  r=  rb  s           rg   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  ri   c                     || _         || j                  j                  _        | `t        |t              r|j                  d }| j                  D ]
  } ||        y rc   )	r  rB  r  rT  r2  rz   rP   r  r	  )re   r  hooks      rg   set_databasezMetadata.set_database  sT     '/

$J h&8<<+?HNN 	DN	ri   c                     || _         | `y rc   )r8  r2  )re   r8  s     rg   set_table_namezMetadata.set_table_name  s    $Jri   )NNNNNNFNNNNNFFNT)TTTrv  )rj   rk   rl   r  rE  rX  r\  r^  ra  rc  r  r2  r  deleterr  r  rk  ro  r
  rq  r
  r  rx  r  r~  r  rd   ri   rg   r;  r;    s    FJ<@AEDHEI$(AF4
2;;,(   \\8 8 ]]    ]]  + +G'!'F&:"P6ri   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 rc   )r  r  r  r  r  re   rB  r  r  r  s       rg   r  zSubclassAwareMetadata.__init__  s/    #T3EKDKFK5!ri   c                 6    | j                   D ]
  } ||        y rc   )r  )re   r9   rB  s      rg   
map_modelsz SubclassAwareMetadata.map_models  s    [[ 	EuI	ri   )rj   rk   rl   r  r  r  r  r  s   @rg   r  r    s    F"ri   r  c                       e Zd Zy)r2   Nr  rd   ri   rg   r2   r2     r  ri   r2   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  r  r  r  r  rD  r
  rF  rA  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  rr  r  r1  r  r  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr/  __composite_key__Tr  rO	  c                 F    dj                   d| j                         dS )Nr   rN	  r  )rj   r  )re   r   s    rg   r|   z#ModelBase.__new__.<locals>.<lambda>^  s    dlln3. ri   z%sDoesNotExistrk   ),rS  rj   r  r  r  r  re  r  r}  r   r  r1  r   r  inheritablerN  r  r  r  rz   r!	  r>  r  r;  rR   r%	  r.	  r  r6   r  r  r  r   r%   r
  r
  r
  r  rk   r  r2   validate_modelr/   r
  )r   r  basesr
  r  meta_optionsrT  r  rb  rq  pk_name	parent_pkr	  	base_metaall_inheritablesoptsr  Schemar=  r  r   r>  exc_name	exc_attrsexception_classr  s   `                        rg   r  zModelBase.__new__  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'
ri   c                      d| j                   z  S )Nz<Model: %s>)rj   r  s    rg   rO	  zModelBase.__repr__k  s    t}},,ri   c                 4    t        | j                               S rc   )r  r  r  s    rg   r  zModelBase.__iter__n  s    DKKM""ri   c                 $    | j                  |      S rc   )	get_by_idre   r  s     rg   r  zModelBase.__getitem__q  s    ~~c""ri   c                 (    | j                  ||       y rc   )	set_by_id)re   r  r   s      rg   r  zModelBase.__setitem__t  s    sE"ri   c                 &    | j                  |       y rc   )delete_by_idr  s     rg   r	  zModelBase.__delitem__w  s    #ri   c                 R    	 | j                  |       y# | j                  $ r Y yw xY wr  )r  r2   r  s     rg   r
  zModelBase.__contains__z  s2    	NN3     		s    &&c                 >    | j                         j                         S rc   )r  r)  r  s    rg   r  zModelBase.__len__  s    {{}""$$ri   c                      yrJ  rd   r  s    rg   __bool__zModelBase.__bool__  s    tri   c                 L    |j                  | j                  j                        S rc   )r3  r1  r2  rB  s     rg   r/  zModelBase.__sql__  s    wwtzz''((ri   )rj   rk   rl   rQ  r  r  rO	  r  r  r  r	  r
  r  r  __nonzero__r/  r  r  s   @rg   r  r  
  sI     : ;K
Yv-###%#K)ri   r  c                       e Zd Zd Zd Zd Zy)r6  c                 <    || _         || _        || _        || _        y rc   )r  r  r2  r3  )re   r  r  r2  r3  s        rg   r  z_BoundModelsContext.__init__  s     "*ri   c           	      4   g | _         | j                  D ]w  }| j                   j                  |j                  j                         |j                  | j                  | j                  | j                  t        | j                               y | j                  S N)r[  )	r  r  r  r1  r  r  r2  r3  rQ  )re   rB  s     rg   r  z_BoundModelsContext.__enter__  sx     [[ 	2E&&u{{';';<JJt}}dnnd6H6H #DKK 0  2	2 {{ri   c           	          t        | j                  | j                        D ]A  \  }}|j                  || j                  | j
                  t        | j                               C y r  )r
  r  r  r  r2  r3  rQ  )re   r)  r*  r+  rB  rW  s         rg   r  z_BoundModelsContext.__exit__  sS    T[[$*=*=> 	2IE2JJr4>>4+=+= #DKK 0  2	2ri   N)rj   rk   rl   r  r  r  rd   ri   rg   r6  r6    s    +2ri   r6  c                      e Zd Zd Zd Zed        Zed2d       Zed        Zed        Z	ed2d       Z
ed2d	       Zed2d
       Zed        Zed2d       Zed2d       Zed        Zed        Zed        Zed2d       Zed2d       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#d3d Z$d! Z%ed"        Z&ed#        Z'd4d$Z(d5d%Z)d& Z*d' Z+d( Z,d) Z-ed6d*       Z.ed7d+       Z/ed,        Z0ed8d-       Z1ed7d.       Z2ed/        Z3ed0        Z4ed1        Z5y)9rE   c                     |j                  dd       ri | _        n| j                  j                         | _        t	        | j                        | _        i | _        |D ]  }t        | |||           y )N__no_default__)r  r%	  r1  rx  rQ  r'	  r.	  r  )re   r  r  r  s       rg   r  zModel.__init__  sb    ::&-DM JJ779DM$--( 	(AD!VAY'	(ri   c                 `    | j                   j                  durt        | j                        S dS )NFzn/a)r1  r  ra  _pkr  s    rg   r  zModel.__str__  s&     $

 6 6e Cs488}NNri   c                      y rc   rd   r   s    rg   r  zModel.validate_model  s    ri   Nc                     t        | |      S rc   )rm  )r   r  s     rg   r  zModel.alias  s    #u%%ri   c                 T    | }|s| j                   j                  }t        | ||      S )N)
is_default)r1  r
  ModelSelect)r   r=  r  s      rg   r  zModel.select  s*    Z
YY,,F3:>>ri   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 r^  )	rz   r  r  r6   r1  r=  r   rm  r   )r   r	  r  
normalizedr  r>  s         rg   _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 rc   )ModelUpdater  )r   _Model__datar   s      rg   r   zModel.update      3 3 3FF CDDri   c                 :    t        | | j                  ||            S rc   )ModelInsertr  r   r  r  s      rg   r  zModel.insert  r  ri   c                     t        | ||      S r  )r  r   rT  r=  s      rg   insert_manyzModel.insert_many  s    3tV<<ri   c                 ~    |D cg c]   }t        |t              rt        | |      n|" }}t        | ||      S c c}w r  )rz   r=  r   r  )r   rE  r=  r>  r  s        rg   insert_fromzModel.insert_from  sM     ,23"' +5UJ*G73& 3 33ug>>3s   %:c                 F     | j                   |fi |j                  d      S r  r  r  s      rg   r   zModel.replace  s#    szz&+F+77	BBri   c                 F    | j                  ||      j                  d      S )N)rT  r=  r  )r  r  r  s      rg   replace_manyzModel.replace_many  s"    $v6Y'	)ri   c                     t        | ||      S rc   )ModelRaw)r   r3  rX  s      rg   rawz	Model.raw  s    S&))ri   c                     t        |       S rc   )ModelDeleter  s    rg   r   zModel.delete  s    3ri   c                 :     | di |}|j                  d       |S )NT)force_insertrd   )save)r   rE  insts      rg   createzModel.create  s     |U|		t	$ri   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rc   )r   )ry  rB  r
  r
  s      rg   r{  z$Model.bulk_create.<locals>.<genexpr>  s.      ) 277AgeQ'7 )7s   	,',)r=  )r#   rh  r1  r?  rk	  r  r  r  r  r  r  r=  rz   r:   r  r`
  r  r	  r
  r  )r   
model_list
batch_sizebatchesr
  r  	pk_fieldsr
  r=  r>  batchr  ru  r6  rB  pk_fieldobj_idr
  s                    @rg   bulk_createzModel.bulk_create  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 ]z  \  }}g }|
D ]]  }t        ||      }t        |t              s|j                  |d      }|j!                  |	j                  |j                        |f       _ t#        |	|      }|||<   | || 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   T)r]	  )rz   r1  r  r%   r  r=  r=  r:   r`
  r  r#   r  r
  r   rm  r  r  r   r   r7  r  r	  )r   r  r=  r  r
  r>  r
  r  r  rq  r  rB  id_listr   r   r  r   r]	  s                     rg   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 %u4 @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    rg   noopz
Model.noopM  s    sB''ri   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   rd   )	r  r   rz   r   r7  r1  r  r8  r  )r   rE  filterssqs       rg   r  z	Model.getQ  sz    ZZ\5zQ:eAh#<XXcii33uQx?@RXXu%%W%Bvvxri   c                 F    	  | j                   |i |S # t        $ r Y y w xY wrc   )r  r2   )r   rE  r  s      rg   get_or_nonezModel.get_or_none^  s/    	377E-W-- 		s    	  c                 R    | j                  | j                  j                  |k(        S rc   )r  r1  r  r   rq  s     rg   r  zModel.get_by_ide  s     wwsyy,,233ri   c                     || j                  |      j                         S | j                  |      j                  | j                  j
                  |k(        j                         S rc   )r  r	  r   r7  r1  r  )r   r  r   s      rg   r  zModel.set_by_idi  sP    ;::e$,,..JJu%U39900C78Dri   c                     | j                         j                  | j                  j                  |k(        j	                         S rc   )r   r7  r1  r  r	  r  s     rg   r  zModel.delete_by_idq  s1    zz|!!#))"7"72"=>FFHHri   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  FTrd   )r  r  r  r7  r   r  r2   r   r1  r  r  r  r?   )r   r  r  rE  r>  r   excs          rg   get_or_createzModel.get_or_createu  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 rc   )r  r8  )r   dq_nodesr  s      rg   r8  zModel.filter  s     "szz|""H888ri   c                     | j                   j                  dur*t        | | j                   j                  j                        S y rq  )r1  r  r   rQ	  r  s    rg   get_idzModel.get_id  s8    
 ::!!.4!7!7!A!ABB /ri   c                 Z    t        | | j                  j                  j                  |       y rc   )r  r1  r  r  r  s     rg   r  z	Model._pk  s    djj,,1159ri   c                 H    | j                   j                  | j                  k(  S rc   )r1  r  r  r  s    rg   _pk_exprzModel._pk_expr  s    zz%%11ri   c                     i }|D ]V  }t        |t              r| j                  j                  |   }|j                  |v s;||j                     ||j                  <   X |S rc   )rz   r=  r1  r=  r  )re   
field_dictonlynew_datar>  s        rg   _prune_fieldszModel._prune_fields  s^     	>E%,

++E2zzZ''1%**'=$		>
 ri   c           	         | j                   j                  D ]f  }|j                  }||v xr& ||   d u xr | j                  j	                  |      d u}|s>t        | |t        | |             | j                  |   ||<   h y rc   )r1  rH  r  r.	  r  r  r   r%	  )re   r  foreign_key_fieldforeign_key
conditionss        rg   _populate_unsaved_relationsz!Model._populate_unsaved_relations  s    !% 	E+00Kz) :;'4/:  -T9  k74+EF*.--*D
;'	Eri   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!rd   )r%	  rX  r1  r  r  r   rF  dirty_fieldsr'	  r	  r  rk	  r  r  r
  r
  r  r   r7  r  r	  r  r
  rQ  )	re   r  r  r  r  pk_valuerT  pk_part_namerq  s	            rg   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:&ri   c                 ,    t        | j                        S rc   )rf  r'	  r  s    rg   is_dirtyzModel.is_dirty  r  ri   c                     | j                   j                  D cg c]  }|j                  | j                  v s| c}S c c}w rc   r1  r
  r  r'	  r
  s     rg   r  zModel.dirty_fields  s/    ::33Maqvv7LMMMs   >>c                     | j                   j                  D cg c]&  }|j                  | j                  v r|j                  ( c}S c c}w rc   r  r
  s     rg   dirty_field_nameszModel.dirty_field_names  s?     $

 8 8 *166T[[(  * 	* *s   +A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                  r|r|j                  |
       |j                  |
|f        |r$t!        t#        |            D ]"  }|j%                  |d      D ]  \  }}||f  $ y wr  )r  rQ  r  r  r1  rI  r  r%	  r0	  r  r  r  r7  r  r  r  r  r  r  )re   search_nullableexclude_null_childrenmodel_classr  queriesr  r  rE  rW  r,	  rG  r!  r   r  qs                   rg   dependencieszModel.dependencies  si    4jt*d#$u 99;LE5}HHUO!&!5!5!;!;!= <I+u}$--0A0A"BBD;D%,,Y__-H-HI"U4[ ww/&&y"5<<dBZHww#8 +i%:;< * +d+, 	A Q+ A!e	s   C0F	3AF	:F	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 )N)r  rd   )
r  rB  r  r   r  r7  r	  r   r  r  )re   r  delete_nullablerE  rW  rB  s         rg   delete_instancezModel.delete_instance	  s    !..EX.Y :	r77? ELL3BGGT?399%@HHJLLN((/779: Dz  "((9AACCri   c                 D    t        | j                  | j                  f      S rc   )r  r  r  r  s    rg   r  zModel.__hash__  s    T^^TXX.//ri   c                     |j                   | j                   k(  xr) | j                  d uxr | j                  |j                  k(  S rc   )r  r  r  s     rg   r  zModel.__eq__  s=    OOt~~- "HHD "HH		!	#ri   c                     | |k(   S rc   rd   r  s     rg   r  zModel.__ne__  s    5=  ri   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)Nr8  )r  r9  r	  r3  r]   r  r  r   r1  r  r  r  rB  s     rg   r/  zModel.__sql__  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)rH  rI  )r1  r  r~  rQ  rX  r  )
r   r  r2  r3  r[  is_differentGrr  rB  
is_backrefs
             rg   r  z
Model.bind3  s    yy))9		x(5		%%9}%MA() ($5*(KK,,X6LL'( ri   c                      t        | f|||      S rc   r5  )r   r  r2  r3  s       rg   r  zModel.bind_ctxA  s    "C68YNNri   c                     | j                   }| j                  j                  j                  |j                  j
                  |j                        S rc   )r1  r  r  r  r2  rj   r  )r   Ms     rg   r  zModel.table_existsE  s6    II{{##001A1A188LLri   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  r1  r
  r  r5  )r   r+  r  s      rg   r  zModel.create_tableJ  s    g% C D;;/D,,>>!99{CII,?,?@t/w/ri   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  r1  r
  r  r9  )r   r+  r7  r  s       rg   r!  zModel.drop_tableX  sh    ,,<<##%99{CII,?,?@T>=W=ri   c                 <     | j                   j                  di | y r  )r  rB  )r   r  s     rg   rB  zModel.truncate_tablea  s    """-W-ri   c                     t        | |fi |S rc   )rF   r   r=  r  s      rg   r  zModel.indexe  s    #v000ri   c                    t        |      dk(  rBt        |d   t        t        f      r)| j                  j
                  j                  |d          y | j                  j
                  j                  t        | |fi |       y rS  )r   rz   rU   r=   r1  r  r  rF   r*  s      rg   	add_indexzModel.add_indexi  s_    v;!
6!9sEl CII$$VAY/II$$ZV%Fv%FGri   rc   )FNr	  rj  )TTNr>  rv  )6rj   rk   rl   r  r  classmethodr  r  r  r  r   r  r  r  r   r  r  r   r  r  r  r  r  r  r  r  r  r  r8  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r/  r  r  r  r  r!  rB  r  r,  rd   ri   rg   rE   rE     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 * *>D0#!I(   O O M M 0 0 > > . . 1 1 H Hri   rE   c                   <    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
y)rm  z3Provide a separate reference to a model in a query.Nc                 @    || j                   d<   || j                   d<   y )NrB  r  )re  )re   rB  r  s      rg   r  zModelAlias.__init__s  s    !&g!&gri   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rc   )rB  rf  re  rz   r  r  r   r   r6   
FieldAliasr  )re   r   r	  r  
model_attrs        rg   r   zModelAlias.__getattr__w  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      rg   r   zModelAlias.__setattr__  s    FGGri   c                 |    | j                   j                  j                  D cg c]  }t        | |       c}S c c}w rc   )rB  r1  r?  r   )re   r  s     rg   get_field_aliaseszModelAlias.get_field_aliases  s-    *.***:*:*M*MNQa NNNs   9c                 >    |s| j                         }t        | |      S rc   )r5  r  )re   	selections     rg   r  zModelAlias.select  s     ..0I4++ri   c                 &     | j                   di |S r  )rB  )re   r  s     rg   r  zModelAlias.__call__  s    tzz#F##ri   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  rN  r3  rB  r  r  rL  r1  r  r%  rn  rB  s     rg   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:;;ri   rc   )rj   rk   rl   r  r  r   r   r5  r  r  r/  rd   ri   rg   rm  rm  q  s*    ='&HO,
$<ri   rm  c                   F    e Zd Zd Zed        Zd Zd Zd Zd Z	d Z
d Zy	)
r1  c                 B    || _         |j                  | _        || _        y rc   )rY  rB  r>  )re   rY  r>  s      rg   r  zFieldAlias.__init__  s    \\

ri   c                 >     G d d| t        |            } |||      S )Nc                       e Zd Zy)&FieldAlias.create.<locals>._FieldAliasNr  rd   ri   rg   _FieldAliasr>    s    ri   r?  )r  )r   rY  r>  r?  s       rg   r  zFieldAlias.create  s!    	#tE{ 	65))ri   c                 B    t        | j                  | j                        S rc   )r1  rY  r>  r  s    rg   rf  zFieldAlias.clone  s    $++tzz22ri   c                 8    | j                   j                  |      S rc   )r>  rW	  r  s     rg   rW	  zFieldAlias.adapt  s    4::#3#3E#::ri   c                 8    | j                   j                  |      S rc   )r>  r2  r  s     rg   r2  zFieldAlias.python_value  s    $***A*A%*H#Hri   c                 8    | j                   j                  |      S rc   )r>  r  r  s     rg   r  zFieldAlias.db_value  s    djj&9&9%&@@ri   c                 P    |dk(  r| j                   S t        | j                  |      S )NrB  )rY  r   r>  r   s     rg   r   zFieldAlias.__getattr__  s"    "got{{L74::t3LLri   c                 t    |j                  t        | j                  | j                  j                              S rc   )r3  r$   rY  r>  r  rB  s     rg   r/  zFieldAlias.__sql__  s&    wwvdkk4::+A+ABCCri   N)rj   rk   rl   r  r-  r  rf  rW	  r2  r  r   r/  rd   ri   rg   r1  r1    s7    
 * *
3 ;H@MDri   r1  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 rc   )r  r1  rH  r  r  rG  r  )rB  r  r,	  
dependencydfsr  r<  r  s       rg   rI  zsort_models.<locals>.dfs  s    F?uD0HHUO*/++*:*:*@*@*B #&Y #++	N	#
 {{%%"'++"8"8 $J
O$OOE"  1?ri   c                 Z    | j                   j                  | j                   j                  fS rc   )r1  r  r8  )r   s    rg   r|   zsort_models.<locals>.<lambda>  s    qww||QWW%7%78 ri   r  )rQ  r  )r  r1  r   rI  r<  r  s   `  @@@rg   r  r    sF    [F5DH# 9EF& AOri   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 rc   )r  rL  r  rT  rB  r1  r  r  s      rg   r  z_ModelQueryHelper.__init__  s;    /@@~~!ZZ--66DN ri   c                 d    t         j                  | _        || j                  | _        y || _        y rc   )r  rL  r  rB  r  r  s     rg   rA  z_ModelQueryHelper.objects  s%    *5*=DJJ;ri   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  rM  _get_model_cursor_wrapperrJ  ModelDictCursorWrapperrB  rn  rI  ModelTupleCursorWrapperrK  ModelNamedTupleCursorWrapperrL  ModelObjectCursorWrapperr  r  r   s      rg   r  z%_ModelQueryHelper._get_cursor_wrapper  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Gri   c                 F    t        || j                  g | j                        S rc   )rT  rB  r  s     rg   rP  z+_ModelQueryHelper._get_model_cursor_wrapper  s    '

B

KKri   rc   )rj   rk   rl   r  rM  r  r  rm  rX  rA  r  rP  r  r  s   @rg   rL  rL    s8    yy7
 
YYO OH"Lri   rL  c                   $     e Zd Z fdZd Z xZS )r  c                 N    || _         d| _        t        t        |   d||d| y )Nrd   r  )rB  rn  r  r  r  )re   rB  r3  rX  r  r  s        rg   r  zModelRaw.__init__  s*    
h&H3vHHri   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	  ri  r3  rB  r2   r  s      rg   r  zModelRaw.get  sc    	E<<>!$$ 	E((*KC**))+/::sF+D E E	Es
    A
A)rj   rk   rl   r  r  r  r  s   @rg   r  r    s    I
Eri   r  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 )NrG  ModelCompoundSelectQueryrB  r   s     rg   rI  zBaseModelSelect.union_all      '

D+sKKri   c                 2    t        | j                  | d|      S )NrH  r^  r   s     rg   rL  zBaseModelSelect.union  s    '

D'3GGri   c                 2    t        | j                  | d|      S )NrI  r^  r   s     rg   rL  zBaseModelSelect.intersect  r`  ri   c                 2    t        | j                  | d|      S )NrJ  r^  r   s     rg   rM  zBaseModelSelect.except_  s    '

D(CHHri   c                 d    | j                   s| j                          t        | j                         S rc   )r  r	  r  r  s    rg   r  zBaseModelSelect.__iter__  s%    ##LLND(())ri   c                      t        | g|i |S rc   )rM   )re   
subqueriesr  s      rg   rM   zBaseModelSelect.prefetch#  s    4z4V44ri   Nc                     | j                  dd      }d |_        	 |j                  |      d   S # t        $ rA |j	                         \  }}| j
                  j                  |j
                  d|d|      w xY w)Nr   r   rY  rZ  )r7  r  r	  ri  r3  rB  r2   )re   r  rf  r3  rX  s        rg   r  zBaseModelSelect.get&  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  rB  r2   r
  s     rg   r  zBaseModelSelect.get_or_none1  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  )r0  rA  r1  r
  rz   rW   r  r  r   r  r_  r  s        rg   r  zBaseModelSelect.group_by7  s     	(F : :;FE*$ &1 2 2 17!B%- ")!: !B C '	( "	!Bs   9B/
rc   )rj   rk   rl   rI  r   rL  r  rL  r  rM  r  r  rM   r  r  rm  rX  r  rd   ri   rg   r\  r\    s[    LGHFLGIG*
5	F 
YY" "ri   r\  c                   $     e Zd Z fdZd Z xZS )r_  c                 :    || _         t        t        |   |i | y rc   )rB  r  r_  r  r  s       rg   r  z!ModelCompoundSelectQuery.__init__J  s    
&6GGri   c                 8    | j                   j                  |      S rc   )r$  rP  r  s     rg   rP  z2ModelCompoundSelectQuery._get_model_cursor_wrapperN  s    xx11&99ri   )rj   rk   rl   r  rP  r  r  s   @rg   r_  r_  I  s    H:ri   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 rc   )r0  rA  r1  r
  rz   rm  r5  rW   r  r   r  )fields_or_modelsr=  fmr  s       rg   _normalize_model_selectrp  R  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 )r  c                 ~    |x| _         | _        i | _        || _        t	        |      }t
        t        |   |g|       y rc   )rB  	_join_ctx_joins_is_defaultrp  r  r  r  )re   rB  rn  r  r=  r  s        rg   r  zModelSelect.__init__a  s>    &++
T^%()9:k4)5'6:ri   c                 `    t         t        |          }t        |j                        |_        |S rc   )r  r  rf  r  rt  r  s     rg   rf  zModelSelect.cloneh  s'    k4.0ELL)ri   c                 h    |s| j                   s"d| _         t        |      }t        t        |   | S | S rq  )ru  rp  r  r  r  )re   rn  r=  r  s      rg   r  zModelSelect.selectm  s8    4#3#3$D,-=>Fd2F;;ri   c                 H    d| _         t        |      }t        t        |   | S rq  )ru  rp  r  r  r  )re   r  r=  r  s      rg   r  zModelSelect.select_extendt  s'     (1[$5v>>ri   Nc                 >    || j                   | _        | S || _        | S rc   )rB  rs  rB  s     rg   switchzModelSelect.switchy  s$    '*{ 9<ri   c                     t        |      r|dfS t        |t              r|j                  r|j                  dfS t        |t              r|j
                  dfS t        |t              r|j
                  dfS y)NTFrq  )r0  rz   rW   r  rm  rB  r  )re   r  s     rg   
_get_modelzModelSelect._get_model}  sg    C=9U#

::u$$Z(99e##[)99e##ri   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 r^  r  r  zCannot assign join alias to "zF", as this attribute is the object_id_name for the foreign-key field "r  )rz   rS  r  r  r|  rs  r$   rY  r1  r  r  r   r6   _generate_on_clauser   r0	  r`
  r  r  r  rW   rj   )re   r  r  r  r   on_aliasr
  src_is_model
dest_modeldest_is_modelr  rc
  fk_fieldr!  src_attr	dest_attrr$  r   s                     rg   _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+&&ri   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 )NFTrq  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.)r1  r
  rK  r  rz   r1  r>  r0	  r   r  r  r$  r   rQ  r6   )re   r  r  rc
  r  rT  r!  r  r  r
  rW  r$  r   fk_setlhs_frhs_fs                   rg   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  )rs  rC   r>  rF  rD  r  rt  r  r  r  r  r  r  )re   r  r  r  r  r   r  r  s           rg   r_  zModelSelect.join  s     #dnn$	T5F5F(FB$**$$($8$8dB$M!Bk&&sB/C ''t[)(LM^HII566""$tD$	2>?ri   c                 H    | j                  |t        j                  |||      S rc   r  )re   r  r  r  r   s        rg   r  zModelSelect.left_outer_join   s    yytC>>ri   c                 ,    | j                  |||||      S rc   )r_  )re   r  r  r  r  r   s         rg   	join_fromzModelSelect.join_from#  s    yyy"c488ri   c                    t        | j                        dk(  r8| j                  s,t        || j                  | j
                  | j                        S t        || j                  | j
                  | j                  | j                        S r  )r   r  rt  rT  rB  rn  ModelCursorWrapperr  s     rg   rP  z%ModelSelect._get_model_cursor_wrapper&  sg    t1$T[[+FDJJ,0OOTZZI I!&$**doo"&//4;;@ 	@ri   c                     | j                   }| j                  j                  |g       D ]  \  }}}}||k(  s| c S   | j                  |      j                  |fd|i|j                  |      S )Nr  )rs  rt  r  rz  r_  )	re   lmrmr  join_kwargsjoin_ctxr  rr  r  s	            rg   ensure_joinzModelSelect.ensure_join-  sp    >>'+{{r2'> 	#D![!rz	 $t{{2##B=2==DDXNNri   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)Nrv
  r   r#  r  rd   )r:   r6	  r  r  rB  rsplitr1   r   r   rt  r  rz   rm  r  r,	  r  )re   qdictr  joinsfksr  r   rV  r  r2  piecer  r   rr  s                 rg   convert_dict_to_nodez ModelSelect.convert_dict_to_node4  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   rd   )rx   r  r  rf  r4   rO  r	  rR  rQ  rS  rz   r  r$  r   r  rE  r  r  r  rh  r  r:   rB  r,	  r6	  r>  r  r7  )re   r  r  r  dq_noder  dq_joins
seen_joinsrV  sider  rE  r  r_  r  r>  r  r  	field_objs                      rg   r8  zModelSelect.filterW  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 rc   )rB  r  r  )re   r  r+  rT  s       rg   r  zModelSelect.create_table  s(    1tzz!!11$dKdKKri   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  )ru  r   rn  rB  r1  r  r3  r4  r  s      rg   r  zModelSelect.__sql_selection__  sl    DOO0Dq0H::''u4774::++7788ww}T__566ri   r  rc   r  r  rv  )rj   rk   rl   r  rf  r  r  rz  r|  r  r~  rm  rX  rC   r?  r_  r  r  rP  r  r  r8  r  r  r  r  s   @rg   r  r  `  s    ;
?
	A'F?B 
YY#'::$Dt @ @&? .2ZZDt 9@O!F1$fL7ri   r  c                       e Zd Zd Zd Zy)r  c                 `    | j                   j                  j                  j                  |      S rc   )rB  r1  r  r:  rB  s     rg   r/  zNoopModelSelect.__sql__  s#    zz((88==ri   c                     t        |      S rc   )r  r  s     rg   r  z#NoopModelSelect._get_cursor_wrapper  s    V$$ri   N)rj   rk   rl   r/  r  rd   ri   rg   r  r    s    >%ri   r  c                   .     e Zd Z fdZ fdZd Z xZS )_ModelWriteQueryHelperc                 B    || _         t        t        |   |g|i | y rc   )rB  r  r  r  r  s       rg   r  z_ModelWriteQueryHelper.__init__  s$    
$d4ULTLVLri   c                     g }|D ]D  }t        |      r&|j                  |j                  j                         4|j	                  |       F t        t        |   | S rc   )r0  rA  r1  r
  r  r  r  r  )re   r  r  r  r  s       rg   r  z _ModelWriteQueryHelper.returning  sU     	#D~TZZ556T"		#
 +T<eDDri   c                 v    | j                   j                  j                  }|j                  |j                  |<   y rc   )rB  r1  r2  rj   r  )re   rC  r2  s      rg   r  z'_ModelWriteQueryHelper._set_table_alias  s+    

  &&#(>>% ri   )rj   rk   rl   r  r  r  r  r  s   @rg   r  r    s    ME2ri   r  c                       e Zd Zy)r  Nr  rd   ri   rg   r  r        ri   r  c                   L     e Zd Zej                  Z fdZ fdZd Zd Z	 xZ
S )r  c                 0   t        t        | 
  |i | | j                  v| j                  j
                  j                  U| j                  j
                  j                  j                  r*| j                  j
                  j                         | _        y y y y rc   )	r  r  r  rn  rB  r1  r  r  r  r  s      rg   r  zModelInsert.__init__  sw    k4)4:6:??"tzz'7'7'@'@'Lzz((99"&**"2"2"C"C"E : (M"ri   c                 j    |r!| j                   t        j                  | _         t        t        |   | S rc   )r  r  rM  r  r  r  )re   r  r  s     rg   r  zModelInsert.returning  s.    
 / YYDN[$19==ri   c                 B    | j                   j                  j                  S rc   )rB  r1  r  r  s    rg   r  zModelInsert.get_default_data  s    zz(((ri   c                     | j                   j                  j                  }| j                   j                  j                  r|dd  S |S r  )rB  r1  r
  rk	  )re   r=  s     rg   r  zModelInsert.get_default_columns  s:    !!//!ZZ--<<vabzH&Hri   )rj   rk   rl   r  rI  r  r  r  r  r  r  r  s   @rg   r  r    s#    yyF>)Iri   r  c                       e Zd Zy)r  Nr  rd   ri   rg   r  r    r  ri   r  c                   8     e Zd Z fdZd ZddZd Zd Z xZS )r
  c                     || _         || _        |j                  j                  j                  | _        |j                  j                  j                  | _        t        t        | *  ||fg|i | y rc   )	_instance	_accessorr
  r0	  r  	_src_attrr
  
_dest_attrr  r
  r  )re   r  accessorr[  r  r  r  s         rg   r  zManyToManyQuery.__init__  s^    !!!2277"**4499ot-cC6KDKFKri   c                 ~    t        |d   t              r$|D cg c]  }t        || j                         c}S |S c c}w r  )rz   rE   r   r  )re   model_or_id_listr  s      rg   _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=  rE  )r	  r  r   r  r  rz   rF  r  r]   r
  r0	  r
  r  r
  r	  rk  r  r  r  )re   r   r
  r  r
  rE  rel_idinsertss           rg   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 rc   )r   r  r  rz   rF  rB  r  r  r  r
  r   r7  r
  r
  r	  rk  r  )re   r   r
  r  r!  s        rg   r  zManyToManyQuery.remove  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 ri   c                     t        | j                  | j                        }| j                  j                  j                         j                  | j                  j                  |k(        j                         S rc   )	r   r  r  r  r
  r   r7  r
  r	  )re   r
  s     rg   r	  zManyToManyQuery.clear  sO    8,,t~~,,67	ri   r  )	rj   rk   rl   r  r  r  r  r	  r  r  s   @rg   r
  r
    s    L 
B. ,ri   r
  c                       fd}|S )Nc                 D    	  |       S # t         t        f$ r | cY S w xY wrc   )r  r  )r   	conv_funcs    rg   validatez#safe_python_value.<locals>.validate  s,    	U##:& 	L	s    rd   )r  r  s   ` rg   safe_python_valuer    s    
 Ori   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 rc   )r  r  r  rB  r  )re   r  rB  r  r  s       rg   r  zBaseModelCursorWrapper.__init__  s%    $d4V<
mri   c                 >   | j                   j                  j                  }| j                   j                  j                  }| j                  j
                  }t        | j                  j
                        | _        g | _        d g| j                  z  x| _	        }d g| j                  z  x| _
        }t        |      D ]@  \  }}|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   r^  r~  r   r	  )$rB  r1  r=  r2  r  r	  r   r	  r  
convertersr=  r  r	  rd  r  r  rt  ri  rr  rz   r6   rn  r2  r  rO  rQ  r'  r0  r-  rm  rn  r  r  r  r$   rY  )re   r=  r2  r	  r  r=  r  description_itemr  orig_column	dot_indexr  rG  rr  ru  r`  s                   rg   r
	  z*BaseModelCursorWrapper._initialize_columns#  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         rc   rh  r  s     rg   r  z"BaseModelCursorWrapper.process_rown  rj  ri   )rj   rk   rl   r  r
	  r  r  r  r  s   @rg   r  r    s    $
G3R %J"ri   r  c                       e Zd Zd Zy)rQ  c                     i }| j                   | j                  }}| j                  }t        | j                        D ]+  }||   }||v r||    ||   ||         ||<   $||   ||<   - |S rc   )r  r  r=  r  r	  )re   r6  r  r  r  r=  r  r   s           rg   r  z"ModelDictCursorWrapper.process_rows  s    "llDOOtzz" 	&A1:Dv~x!}(,z!}SV4t"1vt	& ri   N)rj   rk   rl   r  rd   ri   rg   rQ  rQ  r  s    ri   rQ  c                       e Zd ZeZd Zy)rR  c           	          | j                   | j                  }}| j                  t        | j                        D cg c]  }||    ||   ||         n||    c}      S c c}w rc   )r  r  r  r  r	  )re   r6  r  r  r  s        rg   r  z#ModelTupleCursorWrapper.process_row  sk    "llDOO4::&!( '1m&?]Z]3q6"SVK!( ) 	) !(s   A!N)rj   rk   rl   ri  r  r  rd   ri   rg   rR  rR    s    K)ri   rR  c                       e Zd Zd Zy)rS  c                       j                          g }t         j                        D ]   }|j                   j                  |          " t        j                  d|       _         fd _        y )Nr	  c                 "     j                   |  S rc   r	  )r6  re   s    rg   r|   z9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    '7t'7'7'= ri   )	r
	  r  r	  r  r  r	  r	  r	  r  )re   
attributesr  s   `  rg   r  z'ModelNamedTupleCursorWrapper.initialize  s_      "
tzz" 	/Adll1o.	/&11%D=ri   N)rj   rk   rl   r  rd   ri   rg   rS  rS    s    >ri   rS  c                   (     e Zd Z fdZ fdZ xZS )rT  c                 ^    || _         t        |      | _        t        t        |   |||       y rc   )r  r0  r  rT  r  )re   r  rB  r  r  r  s        rg   r  z!ModelObjectCursorWrapper.__init__  s+    & -&6vufMri   c                     t         t        |   |      }| j                  r0 | j                  dddi|}|j
                  j                          |S  | j                  di |S )Nr  r   rd   )r  rT  r  r0  r  r'	  r	  )re   r6  r	  r  r  s       rg   r  z$ModelObjectCursorWrapper.process_row  sa    -t@E=="$""<!<t<CJJJ#4##+d++ri   r	  r  s   @rg   rT  rT    s    N
, ,ri   rT  c                   *     e Zd Z fdZd Zd Z xZS )r  c                 L    t         t        |   |||       || _        || _        y rc   )r  r  r  r  r  )re   r  rB  r  r  r  r  s         rg   r  zModelCursorWrapper.__init__  s%     $0G"
ri   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
	  rQ  r=  rB  r  r  key_to_constructorsrc_is_destsrc_to_destr	  rR  r  rS  rz   r  r  r$  r   r  r  r  r0  rm  column_keysr  r1  rY  rX  r  r  rt  rm  r$   )re   r>  selected_srcr  r  r  destsrV  r	  r  r   r  r  r  rr  r  r  rG  s                     rg   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)r  z
OUTER JOIN)r  r  r  rB  rQ  r  r  r  r  r  r  rz   r  r  r  r   r  r  rE   r'	  r	  )re   r6  rA  object_listr  r  default_instanceset_keysr  r  r  r   r  r   r  r	  r  joined_instances                     rg   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?)rj   rk   rl   r  r  r  r  r  s   @rg   r  r    s    
C)J8#ri   r  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 rc   )	rB  r0	  r  r,	  rh  r
  r  r  r  )
r   rE  r=  r!  
rel_modelsfield_to_namerB  r>  foreign_key_attrsr  s
            rg   r  zPrefetchQuery.__new__0   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 rc   )r!  r=  r%	  r  r  r  r0	  r  r'	  r	  r\
  )	re   r  id_mapr>  
identifierr  attnamerel_instancesr  s	            rg   populate_instancezPrefetchQuery.populate_instance@   s    ?? ?%..uzz:
j)&=Hejj&+>	? #'"4"4 @w%..u/C/CD
j) &

3 3) (DD'84KK%%'( %--?@ri   c                     | j                   D ]i  \  }}|j                  j                  |j                  |         }||f}| j                  r|||<   D|j                  |g        ||   j                  |       k y rc   )r  r0	  r2  r%	  r!  r  r  )re   r  r  r>  r  identityr  s          rg   store_instancezPrefetchQuery.store_instanceQ   sv    "00 	-NE733H4E4Eg4NOH(#C&s!!#r*s""8,	-ri   )NNNNN)rj   rk   rl   r  r  r  r  r  s   @rg   r  r  .   s    EI*.N @"-ri   r  _PrefetchQuery)rE  r=  r!  r  r  rB  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 %sr4  z-Error: unable to find foreign key for query: )r  FT)#r  r  rz   ri  r"  r0  rm  r  rB  r  r  rE  r1  r
  r  r   r  r0	  rK  r   rN   rN  rx   r  r,  r
  r7  rC   rQ  r  r{   r  r  r  r_  )r  rf  prefetch_typefixed_queriesr  r!  target_modelsubquery_modelr	  r  rI  fixed
last_query
last_modellast_objrelsrW  rl  tgt_errr  rq  r  
select_pksr=  r\
  r0	  r  
select_fksr  s                                rg   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  rN   rN  r  r	  r  rB  r=  r  r  r  rf  r  rE  r  r  rh  )r  rf  r  r  r  depsrel_mappqquery_modelr,	  r  has_relationsr  r[  s                 rg   rM   rM      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$ >ri   rc   rd   r  r  )@   (f  bisectr   r   
contextlibr   rX  r   	functoolsr	   inspectr
   r<
  r	  r   r	  rH  r  loggingr  r   rN
  rM
  rq   r  r   r  r   collections.abcr   ImportError	pysqlite3r   pysq3	pysqlite2rf  sqlite_version_infopsycopg2cffir   registerr  r   rd  r   r  psycopg2.extrasr   pg_register_uuidr   r  r:  rg  
psycopg.pqr   psycopg.types.jsonr7  r   r8  r  pymysqlr  MySQLdb__version____all__r`   Handler	getLoggerr  
addHandlerr	  unicoder^  ra  r_  bufferr	  r  callabler  rh  ri  	frozensetrQ  r  execrv   builtinsrw   rx   r	  r	  r=  r   rF
  r  r   r	  r   r   r   register_adapterr	  r   r   r   r   register_converterra  r   r   r   r  r   r   r   r   r  r   r  rx  rI   r  r  ler  ger!  lshiftr1   r  rC   r  rN   r  rL  rN  rP  rR  rv  rw  rx  compilerq  rs  rS  rV  r\  rc  r0  rk  ro  rv  r#   r  rP   r)   r  r  r	  r  r  r&   rY  r=  rm  rz  r  r  r  r  r  r  r?  r  r  r  rW   r  r^   r  rO  r$   r  r  r  rS  rX  rh  r  r  r]   r  r   r    r  ra  re  r  r  rn  rU   r"   r.   r'  r9   r_   rH  r{  r   r  rv  r4  r5  r  r  r5   r4   r[   rQ   r  r  r  r  r  r"  rD  rF  rO  rB  rT   r  r  r  r  r=   rF   rB  r  rO  r<   r(   r*   r?   r@   rA   rH   rJ   rO   r]  
EXCEPTIONSr  rp  rq  rs  rv  rx  localr  r  r  r'   rI  rV   r  r  r5  rK   rG   r  r  r  r  r  r  r  r  r  r!	  r*	  r6	  r;	  r6   r   r>   r   rS   r   r   r;   rL   r8   r3   r-   r	  r!   r7   rX   r	  r   r   r	  r	  r   r\   r   r
  r   r  r
  r,   r+   rY   r.
  rZ   rB   r   r   r:   r/   r0   r
  r
  rD   r
  r%   r
  rR   r;  r  r2   r  r  r6  rE   rm  r1  r  rL  r  r\  r_  rp  r  r  r  r  r  r  r
  r  r  rQ  rR  rS  rT  r  r  r	  rM   rd   ri   rg   <module>r7     sI     %            	   
    $') **g.I.II	#FOO+,4A07,,35  M^# 
		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> 
++
++;;
++;;
++
//
.6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 &1
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~-[ -KD K\&P &PR5i 5
 2? 1 *O * $ $ )] ) +_ + (M ( , , +} + +} +Iv I. &"$$"*(( 0)%'
 )4  '&&13 (''DF ,[++46  &{%%noFv $ @' ?8 8 w( wt&D4X D4N& $@J) @JF8O) 8Ovi iX_#H _#J5f 50@f @8-&6 -&`$ $T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  O O*!5 "&+|_ &+R\,f \,~B- B,A) A? ?.Ei E4
C% C,' ,:&# &6,# ,4X6_ X6v<o <5 
 HIe HIV ;  ;F
66 
6 
).m ).XP"i P"fE9 E06(9 6(rv Jl"F l"^cv cL		H 	 $9 #~) ~)B2& 2*NHN9d+ NHb7< 7<tD D2.L LDE ( E 9"' 9"x:0C :r7/6 r7j	%k %2. 2&	(& 	I(& I4	(& 	?k ?DR". R"j3 ")4 )>#: >,5 ,"C#/ C#L+-*K**+; >M N +-\JZaD  $##$
  -   G  		  +&**H*y8+  7266G6j68i7   	t  goo 0  )(()s   &y/ -z 4z" z0 /#z< { 2{" =| (|$ /y>=y>zzzzzzzz"z-,z-0z98z9<{
{{{"| ({/.| /{96| 8{99| ?| |! |!$|32|3