
    ViM                       S SK Jr  S SK Jr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKr S SKJr   S S	KJr    S SK"r"\ (       a  \ RF                  \"RF                  :  a  \ r" S S
K$J%r%  \%RL                  " 5          S SK'r'S SK'J(r)   S SK'J*r+   S SK,J-r.  \." 5          S SK0J*r1  Sr2 S SK3r4Sr6/ SQr7 S SKJ8r8  \Rt                  " S5      r;\;Ry                  \8" 5       5        \Rz                  S    S:X  a&  \>r?\@rA\BrC\R                  rD\ErF\G\H\I\J4rK\L" S5        S rMO@S SKNrN S SKJOrO  S SKJPrP  S rF\@r?\QrA\RrC\@rS\TrU\G\H\I\J\V4rK\W" \NS5      rM\R                  rDGS	S jrY\Rz                  S:  a-  \R                  R                  rZ\R                  R                  r[OS rZS  r[\"(       a  \"R                  " \R                  \@5        \"R                  " \R                  \@5        \"R                  " \R0                  \@5        \Rz                  S:  aL  S! r_S" r`S# ra\"R                  " \R                  \_5        \"R                  " S$\`5        \"R                  " S%\a5        \"RF                  rcOS&rc\J" S'5      rdS(reS)S*S+S,S-S.S'.rf\fR                  5       rgS/\gS0'   S1\gS2'   S3 rhS4 riS5 rj " S6 S7\k5      rl\m" 5       rn\l" GS
0 S8S8_S9S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_SJSK_SLSM_SNSO_SPSQ_SRSS_STSU_SVSV_SWSX_SYSY_SZS[_S\S\_S]S]_S^S^_S_S__S`S`_SaSb_ScSd_6ro\l" \R                  \R                  \R                  \R                  \R                  \R                  \R                  Se Sf Sg Sh Si.5      rw\l" GS
0 SjSk_SlSm_SmSm_SnSn_SoSp_SqSq_SrSr_SsSs_StSt_SuSv_SwSx_SySx_SzSk_SpSp_S{S{_S|S|_S}S{_S~Sn_SS_6rx\l" SSSSSSSSSS9	ry\l" SSSSSS9rz\l" SSS9r{Sr|Sr}Sr~SrSrS rSrSr\GR                  " S5      r\GR                  " S5      rSr\m4S jrS rS rS rS rS rS rS r " S S\m5      r " S S\m5      r " S S\5      r " S S\m5      r " S S\m5      r " S S\GR*                  " SS5      5      rS r " S S\m5      rS rS r " S S\m5      r " S S\m5      r " S S\m5      r " S S\m5      r " S S\5      r " S S\5      r " S S\m5      rS r\yGRF                  S4S jr " S S\5      r " S S\m5      r " S S\\5      r " S S\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      r " S S\m5      r " S S\m5      r " S S\5      r " S S\5      r " S S\5      r " S S\m5      r " S S\\5      r " S S\5      r " S S\5      rS r " S S\5      r " S S\5      rGSS jrGSS jr " S S\5      r " S S\5      r " S S\5      r " S S\5      rGS	S jr " S S\5      r\" SS5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " GS  GS\5      rGS rGS r " GS GS\5      r " GS GS\5      r\" GS5      r " GS	 GS
\5      rGS r " GS GS\5      rGS r " GS GS\5      rGS r " GS GS\5      r " GS GS\5      r " GS GS\5      rGSGS jr " GS GS\5      r " GS GS\\\5      r " GS GS\5      r " GS GS \5      r " GS! GS"\5      r " GS# GS$\5      r " GS% GS&\5      r " GS' GS(\5      r " GS) GS*\5      r " GS+ GS,\5      rGSGS- jr " GS. GS/\/5      r " GS0 GS1\5      r " GS2 GS3\5      r " GS4 GS5\5      r " GS6 GS7\5      r " GS8 GS9\5      r " GS: GS;\5      r " GS< GS=\5      r " GS> GS?\5      r " GS@ GSA\5      r " GSB GSC\m5      r\\\\\\\\\\\\GSD.r\" \5      r\GR*                  " GSEGSF5      r\GR*                  " GSGGSH5      r\GR*                  " GSIGSJ5      r\GR*                  " GSKGSL5      r " GSM GSN\m5      r " GSO GSP\\GR                  5      r " GSQ GSR\m5      r " GSS GST\m5      r " GSU GSV\5      rGSW r " GSX GSY\5      r " GSZ GS[\5      r " GS\ GS]\5      r " GS^ GS_\m5      r " GS` GSa\m5      r " GSb GSc\m5      Gr  " GSd GSe\m5      Gr " GSf GSg\m5      Gr " GSh GSiG\5      Gr " GSj GSkG\5      Gr " GSl GSmG\5      Gr " GSn GSo\m5      Gr " GSp GSq\m5      Gr " GSr GSsG\5      Gr " GSt GSu\m5      Gr	 " GSv GSw\m5      Gr
 " GSx GSy\5      Gr " GSz GS{G\5      Gr " GS| GS}G\5      Gr " GS~ GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GS\G\5      Gr " GS GS\m5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr  " GS GSG\5      Gr!GS Gr"GS	GS jGr#GS Gr$ " GS GSG\5      Gr% " GS GSG\%5      Gr& " GS GSG\%5      Gr' " GS GSG\%5      Gr(GS Gr) " GS GSG\5      Gr* " GS GSG\5      Gr+ " GS GSG\5      Gr, " GS GSG\5      Gr- " GS GSG\5      Gr. " GS GSG\5      Gr/ " GS GS\m5      Gr0 " GS GSG\5      Gr1 " GS GSG\5      Gr2 " GS GSG\15      Gr3 " GS GSG\15      Gr4 " GS GSG\15      Gr5 " GS GS\m5      Gr6 " GS GS\m5      Gr7 " GS GS\m5      Gr8 " GS GSG\85      Gr9 " GS GS\/5      Gr: " GS GSG\;5      Gr< " GS GS\m5      Gr= " GS GS\" G\<\5      5      Gr> " GS GS\5      Gr? " GS GSG\5      Gr@GS GrA " GS GS\m5      GrB " GS GSG\B\5      GrC " GS GSG\B5      GrD " GS GSG\D\5      GrEGS GrF " GS GSG\D\5      GrG " GS GSG\G5      GrH " GS GSG\B5      GrI " GS GSG\I\5      GrJ " GS GSG\I\5      GrK " GS GSG\I\5      GrL " GS GSG\G5      GrMGS GrN " GS GSG\5      GrO " GS GSG\O5      GrP " GS GSG\P5      GrQ " GS GSG\Q5      GrR " GS GS G\P5      GrS " GS GSG\O5      GrT " GS GS\GR*                  " GSGS5      5      GrUGS GrVGS GrWg! \ a
    S SKJr   GNf = f! \ a     S S	K!Jr    GN! \ a    Sr   GNf = ff = f! \ a    \ r" GNf = f! \ a     GNf = f! \ a    Sr+ GNf = f! \ a    S=r'r+ GNf = f! \/ a     GNf = f! \ a    Sr1 GNf = f! \ a     S SK5r4Sr2 GN! \ a    Sr4  GNf = ff = f! \ a     " S S\Rr                  5      r8 GNf = f! \ a
    S SKJOrO   GNf = f(      )bisect_left)bisect_rightcontextmanager)deepcopywraps)isclassN)Mapping)dbapi2)compat)
extensions)errors)register_uuidFTz3.18.3)KAnyFieldAsIs	AutoField	BareFieldBigAutoFieldBigBitFieldBigIntegerFieldBinaryUUIDFieldBitField	BlobFieldBooleanFieldCaseCast	CharFieldCheckchunkedColumnCompositeKeyContextDatabaseDatabaseErrorDatabaseProxy	DataError	DateFieldDateTimeFieldDecimalFieldDeferredForeignKeyDeferredThroughModel
DJANGO_MAPDoesNotExistDoubleFieldDQEXCLUDEDFieldFixedCharField
FloatFieldfnForeignKeyFieldIdentityFieldImproperlyConfiguredIndexIntegerFieldIntegrityErrorInterfaceErrorInternalErrorIPFieldJOINManyToManyFieldModel
ModelIndexMySQLDatabaseNotSupportedErrorOPOperationalErrorPostgresqlDatabasePrimaryKeyFieldprefetchPREFETCH_TYPEProgrammingErrorProxyQualifiedNamesSchemaManagerSmallIntegerFieldSelectSQLSqliteDatabaseTable	TextField	TimeFieldTimestampFieldTuple	UUIDFieldValue
ValuesListWindow)NullHandlerc                       \ rS rSrS rSrg)r\      c                     g N )selfrecords     Y/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/peewee.pyemitNullHandler.emit   s        ra   N)__name__
__module____qualname____firstlineno__re   __static_attributes__ra   rg   rd   r\   r\      s    	rg   r\   peewee   z4def reraise(tp, value, tb=None): raise tp, value, tbc                     [         R                  R                  U 5        [         R                  R                  S5        g )N
)sysstdoutwritess    rd   print_rv      s&    



rg   )Callable)reducec                 "    [        U [        5      $ r`   )
isinstancerw   )cs    rd   <lambda>r|      s    *Q1rg   printc                 F    UR                   ULa  UR                  U5      eUer`   )__traceback__with_traceback)tpvaluetbs      rd   reraiser      s&    b(&&r**rg   )      c                     [         R                   R                  U [         R                  R                  S9R	                  S S9$ )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rd   utcfromtimestampr      s6    !!rh&7&7&;&;<%	'rg   c                      [         R                   R                  [         R                  R                  5      R	                  S S9$ )Nr   )r   nowr   r   r   ra   rg   rd   utcnowr      s2    !!X&&**+%	'rg   c                 $    U R                  S5      $ N )	isoformatds    rd   datetime_adapterr      s    C(8!8rg   c                 b    [         R                  " [        [        U R	                  S5      5      6 $ )N   -)r   datemapintsplitr   s    rd   convert_dater      s    HMM3sAGGDM3J$KKrg   c           	         U R                  S5      u  p[        [        UR                  S5      5      u  p4nUR                   " S5      n[        [        US   R                  S5      5      u  pxn	[        U5      S:X  a,  [        SR	                  US   R                  5       5      5      n
OSn
[        R                  " X4XWXU
5      $ )	N    r      .r      :rn   z{:0<6.6}   )r   r   r   lenformatdecoder   )tr   timeymr   t_fullhourminutesecondusecs              rd   convert_timestampr      s    JD#tzz$/0GA!ZZ%F#&sF1IOOD,A#B D&6{a:,,VAY-=-=-?@A$$Q1FDIIrg   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                 `    U [         ;   d   eU(       d  g [        U[        5      n[        X 5      $ r`   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rd   _sqlite_date_partr   	  s.    .(((	/+F	GB2##rg   c                 z    U [         ;   d   eU(       d  g [        U[        5      nUR                  [         U    5      $ r`   )__sqlite_date_trunc__r   r   strftimer   s      rd   _sqlite_date_truncr     s9    ////	/+F	GB;;,[9::rg   c                 :    [         R                  " U [        5        g r`   )warningswarnDeprecationWarningrt   s    rd   __deprecated__r     s    MM!'(rg   c                   ,    \ rS rSrS rS rS rS rSrg)attrdicti  c                 >     X   $ ! [          a    [        U5      ef = fr`   )KeyErrorAttributeErrorrb   attrs     rd   __getattr__attrdict.__getattr__  s)    	': 	' &&	's    c                     X U'   g r`   ra   rb   r   r   s      rd   __setattr__attrdict.__setattr__"  s    UT
rg   c                 (    U R                  U5        U $ r`   updaterb   rhss     rd   __iadd__attrdict.__iadd__#  s    T[[-d{rg   c                 <    [        U 5      o"R                  U5        U$ r`   )r   r   )rb   r   r   s      rd   __add__attrdict.__add__$  s    Aaxrg   ra   N)	rh   ri   rj   rk   r   r   r   r   rl   ra   rg   rd   r   r     s    '
 ;:Grg   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    [        U [        R                  U5      $ r`   )
ExpressionrE   r  lrs     rd   r|   r|   P  s    z!RUUA.rg   c                 8    [        U [        R                  U5      $ r`   )r  rE   r	  r  s     rd   r|   r|   Q  s    Arww2rg   c                 8    [        U [        R                  U5      $ r`   )r  rE   r
  r  s     rd   r|   r|   R  s    *Q!4rg   c                 8    [        U [        R                  U5      $ r`   )r  rE   r  r  s     rd   r|   r|   S  s    :aA6rg   )eqltltegtgteneinislikeilikeregexpAUTOINTEGERBIGAUTOBIGINTBLOBBOOLSMALLINTCHARDATEDATETIMEDECIMALDEFAULT DOUBLEREALFLOATINTTEXTTIMEUUIDUUIDBVARCHARz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOINzFULL OUTER JOINz
CROSS JOINzNATURAL JOINLATERALzLEFT JOIN LATERAL)	INNER
LEFT_OUTERRIGHT_OUTERFULL
FULL_OUTERCROSSNATURALr:  LEFT_LATERALr   r         )TUPLEDICTNAMED_TUPLECONSTRUCTORMODEL)WHEREr?         z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])_metaclass_helper_c                      U " [         U40 5      $ r`   )
MODEL_BASE)metabases     rd   with_metaclassrR    s    
TGR((rg   c                 V    U R                  5       nU(       a  UR                  U5        U$ r`   )copyr   )source	overridesmergeds      rd   
merge_dictrX    s!    [[]Fi Mrg   c                     [        U 5      S:X  a  U S   R                  U5      $ SR                  U  Vs/ s H  o"R                  U5      PM     sn5      $ s  snf )Nr   r   .)r   join)pathquote_charsparts      rd   quoter_    sH    
4yA~Aw||K((88=YY{+=>>=s   Ac                 F    [        U 5      =(       a    [        U [        5      $ r`   )r
   
issubclassrA   )os    rd   r|   r|     s    WQZ8Jq%$88rg   c                 J    U b   [        U [        [        45      (       a  U $ U 4$ g r`   )rz   listtupler   s    rd   ensure_tuplerg    s*    "54-88uFuhF rg   c                 N    U b"  [        U [        5      (       a  U $ [        U 5      $ g r`   )rz   NodeEntityrf  s    rd   ensure_entityrk    s(    "5$//uBVE]B rg   c                 v    [         R                  SU 5      n[        R                  SU5      R                  5       $ )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)ru   firsts     rd   make_snake_caserr    s0      1-E%06688rg   c              #      #    [        5       nS [        [        U 5      /U-  SU06 5        H"  nUS   UL a  X3R                  U5      S 2	 Uv   M$     g 7f)Nc              3   8   #    U  H  n[        U5      v   M     g 7fr`   )rd  ).0gs     rd   	<genexpr>chunked.<locals>.<genexpr>  s!      C $Ba$q'' $B   	fillvalue)objectizip_longestiterindex)itnmarkergroups       rd   r    r      s`     XFC<$r(a $B:@$B C9kk&)*+	Cs   AAc                       \ rS rSrS rSrg)_callable_context_manageri  c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                  N   > T   T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   ra   argskwargsr5   rb   s     rd   inner1_callable_context_manager.__call__.<locals>.inner  s    4*6* s   
$r   rb   r5   r  s   `` rd   __call__"_callable_context_manager.__call__       	r	+ 
	+ rg   ra   N)rh   ri   rj   rk   r  rl   ra   rg   rd   r  r    s    rg   r  c                   n   ^  \ rS rSrSrSrS rS rS rS r	\	" S5      r
\	" S	5      rS
 rU 4S jrSrU =r$ )rL   i  z3
Create a proxy or placeholder for another object.
obj
_callbacksc                 4    / U l         U R                  S 5        g r`   )r  
initializerb   s    rd   __init__Proxy.__init__  s    rg   c                 F    Xl         U R                   H  nU" U5        M     g r`   r  )rb   r  callbacks      rd   r  Proxy.initialize  s    HSM (rg   c                 <    U R                   R                  U5        U$ r`   )r  append)rb   r  s     rd   attach_callbackProxy.attach_callback  s    x(rg   c                    ^  U 4S jnU$ )Nc                 l   > U R                   c  [        S5      e[        U R                   T5      " U0 UD6$ NzCannot use uninitialized Proxy.r  r   r   )rb   r  r  methods      rd   r   Proxy.passthrough.<locals>.inner  s4    xx$%FGG488V,d=f==rg   ra   r  r  s   ` rd   passthroughProxy.passthrough  s    	> rg   	__enter____exit__c                 ^    U R                   c  [        S5      e[        U R                   U5      $ r  r  r   s     rd   r   Proxy.__getattr__  s)    88 !BCCtxx&&rg   c                 ^   > XR                   ;  a  [        S5      e[        [        U ]  X5      $ )NzCannot set attribute on proxy.)	__slots__r   superrL   r   )rb   r   r   	__class__s      rd   r   Proxy.__setattr__  s+    ~~% !ABBUD-d::rg   )r  r  )rh   ri   rj   rk   __doc__r  r  r  r  r  r  r  r   r   rl   __classcell__r  s   @rd   rL   rL     sH     &I
 K(I:&H'
; ;rg   rL   c                   J    \ rS rSrSrSrS rS rS rS r	S r
\S	 5       rS
rg)r&   i  zD
Proxy implementation specifically for proxying `Database` objects.
)r  r  _Modelc                     [        U 5      $ r`   ConnectionContextr  s    rd   connection_context DatabaseProxy.connection_context       &&rg   c                      [        U /UQ70 UD6$ r`   _atomicrb   r  r  s      rd   atomicDatabaseProxy.atomic      t-d-f--rg   c                     [        U 5      $ r`   _manualr  s    rd   manual_commitDatabaseProxy.manual_commit      t}rg   c                      [        U /UQ70 UD6$ r`   _transactionr  s      rd   transactionDatabaseProxy.transaction      D242622rg   c                     [        U 5      $ r`   
_savepointr  s    rd   	savepointDatabaseProxy.savepoint      $rg   c                    ^  [        T S5      (       d&   " U 4S jS5      n[        S[        4SU05      T l        T R                  $ )Nr  c                      > \ rS rSr Y rSrg)!DatabaseProxy.Model.<locals>.Metai  ra   Nrh   ri   rj   rk   databaserl   r  s   rd   Metar        4rg   r  	BaseModelhasattrtyperA   r  rb   r  s   ` rd   rA   DatabaseProxy.Model  6    tX&&''{UHvtnEDK{{rg   )r  N)rh   ri   rj   rk   r  r  r  r  r  r  r  propertyrA   rl   ra   rg   rd   r&   r&     s9     0I'.3  rg   r&   c                       \ rS rSrSrg)ModelDescriptori  ra   Nrh   ri   rj   rk   rl   ra   rg   rd   r  r        trg   r  c                   V    \ rS rSrSrS r\S 5       rS rSS jr	S r
S rS	 rS
 rSrg)AliasManageri  )_counter_current_index_mappingc                 N    SU l         SU l        / U l        U R                  5         g Nr   )r  r  r  pushr  s    rd   r  AliasManager.__init__  s!    		rg   c                 :    U R                   U R                  S-
     $ Nr   )r  r  r  s    rd   mappingAliasManager.mapping  s    }}T001455rg   c                     XR                   ;  a&  U =R                  S-  sl        SU R                  -  X'   U R                   U   $ )Nr   zt%d)r  r  rb   rU  s     rd   addAliasManager.add  s9    %MMQM 4==0DL||F##rg   c                     U(       aK  [        [        U R                  5      5       H)  nXR                  U   ;   d  M  U R                  U   U   s  $    U R	                  U5      $ r`   )reversedranger  r  r  )rb   rU  	any_depthidxs       rd   getAliasManager.get%  sS    d&9&9 :;]]3//==-f55 < xxrg   c                 $    U R                  U5      $ r`   )r   r  s     rd   __getitem__AliasManager.__getitem__,  s    xxrg   c                      X R                   U'   g r`   )r  )rb   rU  aliass      rd   __setitem__AliasManager.__setitem__/  s    $Vrg   c                     U =R                   S-  sl         U R                   [        U R                  5      :  a  U R                  R                  0 5        g g r  )r  r   r  r  r  s    rd   r  AliasManager.push2  sA    q T]]!33MM  $ 4rg   c                 d    U R                   S:X  a  [        S5      eU =R                   S-  sl         g )Nr   z&Cannot pop() from empty alias manager.)r  
ValueErrorr  s    rd   popAliasManager.pop7  s-    !#EFFq rg   NF)rh   ri   rj   rk   r  r  r  r  r  r   r  r  r  r  rl   ra   rg   rd   r  r    s>    :I 6 6$  %%
!rg   r  c                   @   ^  \ rS rSr\S4U 4S jjrSS jrS rSrU =r	$ )Statei=  Fc                 ,   > [         [        U ]  XX#5      $ r`   )r  r  __new__)clsscopeparenthesesr  r  s       rd   r  State.__new__?  s    UC([IIrg   c                     Uc  U R                   OUnU(       a=  U R                  (       a,  U R                  R                  5       nUR                  U5        OU(       a  UnOU R                  n[	        X40 UD6$ r`   )r  settingsrT  r   r  )rb   r  r  r  r  s        rd   r  State.__call__B  s[    #m

 dmm}}))+HOOF#H}}HU4844rg   c                 8    U R                   R                  U5      $ r`   )r  r   )rb   	attr_names     rd   r   State.__getattr__P  s    }}  ++rg   ra   NN)
rh   ri   rj   rk   SCOPE_NORMALr  r  r   rl   r  r  s   @rd   r  r  =  s    'U J5, ,rg   r  _State)r  r  r  c                 &   ^  [         U 4S j5       nU$ )Nc              ;   ^   >#    U " SST0UD6   U v   S S S 5        g ! , (       d  f       g = f7fNr  ra   ra   )rb   r  r  s     rd   r   __scope_context__.<locals>.innerU  s&     (((J )((s   -	-
*-r   )r  r  s   ` rd   __scope_context__r%  T  s      Lrg   c                       \ rS rSrSrS rS rS r\S 5       r	\S 5       r
\S 5       rS	 r\" \5      r\" \5      r\" \5      r\" \5      r\" \5      rS
 rS r\S 5       rS rS rSS jrS rS r S r!Sr"g)r#   i\  )stack_sql_valuesalias_managerstatec                 l    / U l         / U l        / U l        [        5       U l        [        S0 UD6U l        g Nra   )r'  r(  r)  r  r*  r  r+  )rb   r  s     rd   r  Context.__init___  s0    
	)^&X&
rg   c                 @    [        S0 U R                  R                  D6$ r-  )r#   r+  r  r  s    rd   as_newContext.as_newf  s    -,,--rg   c                 *    US   R                  U 5      $ r  get_sort_keyrb   items     rd   column_sort_keyContext.column_sort_keyi  s    Aw##D))rg   c                 .    U R                   R                  $ r`   )r+  r  r  s    rd   r  Context.scopel  s    zzrg   c                 .    U R                   R                  $ r`   )r+  r  r  s    rd   r  Context.parenthesesp  s    zz%%%rg   c                 .    U R                   R                  $ r`   )r+  subqueryr  s    rd   r>  Context.subqueryt  s    zz"""rg   c                     U(       a"  UR                  S5      U R                  :X  a  US	 U R                  R                  U R                  5        U R                  " S0 UD6U l        U $ r#  )r   r  r'  r  r+  )rb   rV  s     rd   r  Context.__call__x  sO    w/4::='"

$**%ZZ,),
rg   c                 J    U R                   (       a  U R                  S5        U $ )N()r  literalr  s    rd   r  Context.__enter__  s    LLrg   c                     U R                   (       a  U R                  S5        U R                  R                  5       U l        g )N))r  rD  r'  r  r+  rb   exc_typeexc_valexc_tbs       rd   r  Context.__exit__  s)    LLZZ^^%
rg   c              #   |   #    U R                   R                  5         S v   U R                   R                  5         g 7fr`   )r*  r  r  r  s    rd   
push_aliasContext.push_alias  s,     !    :<c                     [        U[        [        45      (       a  UR                  U 5      $ [	        U5      (       a%  UR
                  R                  R                  U 5      $ U R                  [        U5      5      $ r`   )	rz   ri  r#   __sql__is_model_metatablesqlrY   rb   r  s     rd   rV  Context.sql  sW    cD'?++;;t$$c]]99??**40088E#J''rg   c                 <    U R                   R                  U5        U $ r`   )r(  r  )rb   keywords     rd   rD  Context.literal  s    		!rg   Nc                    U(       a	  U" U5      nO9Uc6  U R                   R                  (       a  U R                   R                  U5      n[        U[        5      (       a!  U " S S9   U R	                  U5      sS S S 5        $ [        U5      (       a+  U R                  5          U R	                  U5      sS S S 5        $ U R                   R                  (       a  U R                  [        U5      5      $ U R                  R                  U5        U(       a.  U R                  U R                   R                  =(       d    S5      $ U $ ! , (       d  f       N= f! , (       d  f       N= f)N	converter?)r+  r^  rz   ri  rV  rS  scope_columnvalue_literalsrD  _query_val_transformr)  r  param)rb   r   r^  	add_params       rd   r   Context.value  s    e$E4::#7#7 JJ((/EeT""%xx &%e__
 ""$xx %$ ::$$<< 4U ;<<E"8At||DJJ,,34KtK &% %$s   %E E
E
E!c                     UR                   R                  U R                   5        UR                  R                  U R                  5        U$ r`   )r(  extendr)  rb   ctxs     rd   rR  Context.__sql__  s1    		"4<<(
rg   c                 @    U R                  U5      R                  5       $ r`   )rV  queryrb   nodes     rd   parseContext.parse  s    xx~##%%rg   c                 P    SR                  U R                  5      U R                  4$ )Nr0  )r[  r(  r)  r  s    rd   rl  Context.query  s    wwtyy!4<<//rg   )r(  r)  r*  r'  r+  NT)#rh   ri   rj   rk   r  r  r0  r7  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   rN  rV  rD  r   rR  ro  rl  rl   ra   rg   rd   r#   r#   \  s    FI'.*     & & # # %\2L$\2L$\2L!),I$\2L
&
 ! !
(L2
&0rg   r#   c                 R   [        U SS 5      nUb  UR                  5       nO
[        5       nUR                  U 5      R	                  5       u  p4U(       d  U$ UR
                  R                  =(       d    SnUS:X  a  UR                  SS5      nU[        [        [        U5      5      -  $ )N	_databaser_  %s)r   get_sql_contextr#   rV  rl  r+  rc  r   re  r   rb  )rl  dbri  rV  paramsrc  s         rd   query_to_stringr    s     
T	*B	~  "i''%.&&(KC
IIOO"sE|kk#t$s/8999rg   c                    [        U [        [        R                  [        R                  [        R                  45      (       a  SU -  n U $ [        U [
        5      (       a   U R                  S5      n SU -  n U $ [        U [        5      (       a  S[        U 5      -  n U $ U c  Sn U $ [        U 5      n U $ ! [         a    U R                  S5      n  N]f = f)Nz'%s'utf8raw_unicode_escaper~  NULL)
rz   	text_typer   r   r   
bytes_typer   UnicodeDecodeErrorr   str)vs    rd   rb  rb    s    !i!2!2HMMmm% & &QJ H 
Az	"	"	/ A QJ H 
As		3q6M
 H	 
 H FH " 	/-.A	/s   !B2 2CCc                   N    \ rS rSrSrSrS rS r\S 5       r	SS jr
S rS	 rS
rg)ri  i  TFc                     U R                   R                  U R                   5      nU R                  R                  5       Ul        U$ r`   )r  r  __dict__rT  rW  s     rd   clone
Node.clone  s3    nn$$T^^4}}))+
rg   c                     [         er`   NotImplementedErrorrh  s     rd   rR  Node.__sql__      !!rg   c                    ^  U 4S jnU$ )Nc                 @   > U R                  5       nT" U/UQ70 UD6  U$ r`   )r  )rb   r  r  r  r  s       rd   r  Node.copy.<locals>.inner   s%    JJLE5*4*6*Lrg   ra   r  s   ` rd   rT  	Node.copy  s    	 rg   c                 T    XR                   :w  a  U R                  5       nXl         U$ U $ r`   )_coercer  )rb   r  r  s      rd   coerceNode.coerce  s&    ll"JJLE#MLrg   c                     gNFra   r  s    rd   is_aliasNode.is_alias  s    rg   c                     U $ r`   ra   r  s    rd   unwrapNode.unwrap      rg   ra   NT)rh   ri   rj   rk   r  __isabstractmethod__r  rR  staticmethodrT  r  r  r  rl   ra   rg   rd   ri  ri    s:    G 
"  rg   ri  c                   (    \ rS rSrSrS rS r\rSrg)ColumnFactoryi  rn  c                     Xl         g r`   r  rm  s     rd   r  ColumnFactory.__init__      	rg   c                 .    [        U R                  U5      $ r`   )r!   rn  r   s     rd   r   ColumnFactory.__getattr__      dii&&rg   N	rh   ri   rj   rk   r  r  r   r  rl   ra   rg   rd   r  r    s    I'Krg   r  c                   "    \ rS rSrSrSS jrSrg)_DynamicColumni  ra   Nc                 "    Ub  [        U5      $ U $ r`   )r  rb   instanceinstance_types      rd   __get___DynamicColumn.__get__"  s     **rg   r`   rh   ri   rj   rk   r  r  rl   ra   rg   rd   r  r    s    Irg   r  c                   "    \ rS rSrSrSS jrSrg)_ExplicitColumni(  ra   Nc                 (    Ub  [        SU-  5      eU $ )NzM%s specifies columns explicitly, and does not support dynamic column lookups.r   r  s      rd   r  _ExplicitColumn.__get__+  s)     *,456 6 rg   r`   r  ra   rg   rd   r  r  (  s    Irg   r  c                        \ rS rSrS rS rSrg)Stari3  c                     Xl         g r`   rU  r  s     rd   r  Star.__init__4      rg   c                 h    UR                  [        U R                  5      5      R                  S5      $ )Nz.*)rV  rM   rU  rD  rh  s     rd   rR  Star.__sql__6  s%    ww~dkk23;;DAArg   r  Nrh   ri   rj   rk   r  rR  rl   ra   rg   rd   r  r  3  s    Brg   r  c                      ^  \ rS rSr\" 5       rSU 4S jjr\R                  S 5       r	S r
\S 5       r\R                  S4S jrSS jrSS	 jrS
 rS rS rSrU =r$ )Sourcei:  Nc                 6   > [         [        U ]  5         Xl        g r`   )r  r  r  _alias)rb   r  r  s     rd   r  Source.__init__=  s    fd$&rg   c                     Xl         g r`   r  rb   names     rd   r  Source.aliasA  s    rg   c                 B    U(       d  [        S5      4n[        U 4U5      $ )Nr   )rQ   rP   rb   columnss     rd   selectSource.selectE  s    3xkGtgw''rg   c                     [        U 5      $ r`   )r  r  s    rd   __star__Source.__star__J  s    Dzrg   c                     [        XX#5      $ r`   Join)rb   dest	join_typeons       rd   r[  Source.joinN  s    D	..rg   c                 8    [        X[        R                  U5      $ r`   )r  r?   r<  rb   r  r  s      rd   left_outer_joinSource.left_outer_joinQ  s    D44rg   c                     [        XX#US9$ N)	recursiver  materializedCTErb   r  r  r  r  s        rd   cte
Source.cteT      4 ,. 	.rg   c                 ^    U R                   (       a  U R                   4$ UR                  U    4$ r`   )r  r*  rh  s     rd   r4  Source.get_sort_keyX  s)    ;;KK>!!!$'))rg   c                     UR                   [        :X  a`  U R                  (       a  U R                  UR                  U '   UR	                  S5      R                  [        UR                  U    5      5        U$ N AS )r  ru  r  r*  rD  rV  rj  rh  s     rd   apply_aliasSource.apply_alias]  sW     99${{*.++!!$'KK##F3+<+<T+B$CD
rg   c                     U R                   (       a  U R                   UR                  U '   UR                  [        UR                  U    5      5      $ r`   )r  r*  rV  rj  rh  s     rd   apply_columnSource.apply_columnf  s<    ;;&*kkCd#wwvc//5677rg   r  r`   FNN)rh   ri   rj   rk   r  r{   r  ri  rT  r  r  r  r  r?   r;  r[  r  r  r4  r  r  rl   r  r  s   @rd   r  r  :  so    A 
YY (
   $(::$ /5.*
8 8rg   r  c                      ^  \ rS rSrU 4S jr\R                  S 5       rS rS r	S r
S rS rS	 r\" \R                  5      r\" \R"                  5      r\" \R&                  5      r\" \R*                  5      rS
rU =r$ )_HashableSourceil  c                 N   > [         [        U ]
  " U0 UD6  U R                  5         g r`   )r  r  r  _update_hashrb   r  r  r  s      rd   r  _HashableSource.__init__m  s#    ot-t>v>rg   c                 0    Xl         U R                  5         g r`   )r  r  r  s     rd   r  _HashableSource.aliasq  s    rg   c                 .    U R                  5       U l        g r`   )	_get_hash_hashr  s    rd   r  _HashableSource._update_hashv  s    ^^%
rg   c                 Z    [        U R                  U R                  U R                  45      $ r`   )hashr  _pathr  r  s    rd   r  _HashableSource._get_hashy  s     T^^TZZ=>>rg   c                     U R                   $ r`   )r  r  s    rd   __hash___HashableSource.__hash__|  s    zzrg   c                     [        U[        5      (       a  U R                  UR                  :H  $ [        U [        R
                  U5      $ r`   )rz   r  r  r  rE   r   rb   others     rd   __eq___HashableSource.__eq__  5    e_--::,,$u--rg   c                     [        U[        5      (       a  U R                  UR                  :g  $ [        U [        R
                  U5      $ r`   )rz   r  r  r  rE   r  r  s     rd   __ne___HashableSource.__ne__  r  rg   c                    ^  U 4S jnU$ )Nc                    > [        U TU5      $ r`   r  rb   r   ops     rd   r  !_HashableSource._e.<locals>.inner  s    dB,,rg   ra   )r  r  s   ` rd   _e_HashableSource._e  s    	-rg   )r  r  )rh   ri   rj   rk   r  ri  rT  r  r  r  r  r  r  r  rE   r   __lt__r   __le__r  __gt__r  __ge__rl   r  r  s   @rd   r  r  l  st     
YY &?.
.
 YFZFYFZFrg   r  c                 0   ^  [        T 5      U 4S j5       nU$ )Nc                 x   > T" U /UQ70 UD6nU R                   (       a  UR                  U R                   5      $ U$ r`   )r}  bind)rb   r  r  resultmeths       rd   r   __bind_database__.<locals>.inner  s6    d,T,V,>>;;t~~..rg   r   )r(  r  s   ` rd   __bind_database__r*    s     
4[ 
 Lrg   c                    ^ ^ UU 4S jnU$ )Nc                 *   > T(       a  Xp[        XTS9$ )N)r  r  )rb   r  invertedr  s     rd   r  __join__.<locals>.method  s    %D955rg   ra   )r  r-  r  s   `` rd   __join__r/    s    6 Mrg   c                   r   \ rS rSr\" \R                  5      r\" \R                  5      r	\" \R                  5      r\" \R                  5      r\" \R                  5      r\" \R                  SS9r\" \R                  SS9r\" \R                  SS9r\" \R                  SS9r\" \R                  SS9rSrg)	BaseTablei  Tr-  ra   N)rh   ri   rj   rk   r/  r?   r;  __and__r<  r   r=  __sub__r?  __or__r@  __mul____rand____radd____rsub____ror____rmul__rl   ra   rg   rd   r1  r1    s    tzz"Gt'Gt''(Gdoo&Ftzz"G

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

T2Hrg   r1  c                   ,    \ rS rSrS rS rS rS rSrg)_BoundTableContexti  c                     Xl         X l        g r`   )rU  r  )rb   rU  r  s      rd   r  _BoundTableContext.__init__  s    
 rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                     > [        TR                  TR                  5         T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r=  rU  r  r  s     rd   r  *_BoundTableContext.__call__.<locals>.inner  s.    #DJJ>4*6* ?>>s	   4
Ar   r  s   `` rd   r  _BoundTableContext.__call__  r  rg   c                 &   U R                   R                  U l        U R                   R                  U R                  5        U R                   R
                  b/  U R                   R
                  R                  U R                  5        U R                   $ r`   )rU  r}  _orig_databaser&  r  _modelr  s    rd   r  _BoundTableContext.__enter__  s^    "jj22

&::(JJ""4==1zzrg   c                     U R                   R                  U R                  5        U R                   R                  b0  U R                   R                  R                  U R                  5        g g r`   )rU  r&  rE  rF  rH  s       rd   r  _BoundTableContext.__exit__  sK    

++,::(JJ""4#6#67 )rg   )rE  r  rU  N	rh   ri   rj   rk   r  r  r  r  rl   ra   rg   rd   r=  r=    s    !8rg   r=  c                      ^  \ rS rSr  SU 4S jjrS rSS jrSS jrS r\	S 5       r
\	SS j5       r\	SS	 j5       r\	SS
 j5       r\	S 5       rS rSrU =r$ )rS   i  c           	      p  > Xl         X l        X0l        X@l        U(       a  XA4OU4U l        X`l        Xpl        [        [        U ]'  US9  Ub-  [        5       U l        U H  n[        X[        X5      5        M     U(       a0  U R                  (       a  U OU R                  n	[        X5      U l        g S U l        g Nr  )rh   _columns_primary_key_schemar
  rF  r}  r  rS   r  r  r{   setattrr!   r   primary_key)rb   r  r  rS  schemar  rF  r}  columncol_srcr  s             rd   r  Table.__init__  s    ''-f^D7
"eT#%#0 $&DF!fT&:; " "mmdG&w<D#Drg   c           
          [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S9$ )N)r  rS  rT  r  rF  r}  )rS   rh   rO  rP  rQ  r  rF  r}  r  s    rd   r  Table.clone  sB    MMMM))<<++;;nn& 	&rg   c                     Xl         U $ r`   r}  rb   r  s     rd   r&  
Table.bind      !rg   c                     [        X5      $ r`   )r=  r\  s     rd   bind_ctxTable.bind_ctx  s    !$11rg   c                 p    [        U R                  U R                  U R                  U R                  45      $ r`   )r	  r  r
  r  rF  r  s    rd   r  Table._get_hash  s&    T^^TZZdkkJKKrg   c                     U(       d6  U R                   (       a%  U R                    Vs/ s H  n[        X5      PM     nn[        U 4U5      $ s  snf r`   )rO  r!   rP   )rb   r  rU  s      rd   r  Table.select  s=    4==:>--H-vd+-GHtgw'' Is   Ac                     U(       aL  Uc  0 OUnU R                   (       a  U OU R                  nUR                  5        H  u  pVXa[        XE5      '   M     [	        XUS9$ Ninsertr  )rO  r{   itemsr   Insert)rb   ri  r  r  srckeyr   s          rd   ri  Table.insert  sM    !>RvF--$TVVC$lln
,1ws() -d7;;rg   c                 >    U R                  XS9R                  S5      $ )Nrh  REPLACEri  on_conflict)rb   ri  r  r  s       rd   r   Table.replace  s     v7Y'	)rg   c                     U(       aL  Uc  0 OUnUR                  5        H1  u  p4U R                  (       a  U OU R                  nXA[        XS5      '   M3     [	        XS9$ )Nr   )rj  rO  r{   r   Update)rb   r   r  rm  r   rl  s         rd   r   Table.update  sM    !>RvF$lln
"mmd,1ws() - d**rg   c                     [        U 5      $ r`   )Deleter  s    rd   deleteTable.delete  s    d|rg   c                 j   UR                   [        :X  a!  UR                  [        U R                  6 5      $ U R
                  (       a  U R
                  UR                  U '   UR                   [        :X  a0  U R                  UR                  [        U R                  6 5      5      $ U R                  U5      $ r`   )
r  rw  rV  rj  r
  r  r*  ru  r  r  rh  s     rd   rR  Table.__sql__  s    99$7764::.//;;&*kkCd#99$##CGGFDJJ,?$@AA $$S))rg   )	rh   rO  r}  rF  r
  rP  rQ  r{   rS  )NNNNNNr`   r  )rh   ri   rj   rk   r  r  r&  r`  r  r*  r  ri  r   r   ry  rR  rl   r  r  s   @rd   rS   rS     s    DH48$.	&2L ( (
 < < ) )
 + +  * *rg   rS   c                   R   ^  \ rS rSr\R
                  SS4U 4S jjrS rS rSr	U =r
$ )r  i*  Nc                 X   > [         [        U ]  US9  Xl        X l        X0l        X@l        g rM  )r  r  r  lhsr   r  _on)rb   r  r   r  r  r  r  s         rd   r  Join.__init__+  s)    dD""/"rg   c                     Xl         U $ r`   )r  )rb   	predicates     rd   r  Join.on2  s    rg   c                    UR                  U R                  5      R                  SU R                  -  5      R                  U R                  5        U R
                  b*  UR                  S5      R                  U R
                  5        U$ )N %s  ON )rV  r  rD  r  r   r  rh  s     rd   rR  Join.__sql__6  s\    	
#dhh-
'&4>>)
*
#dhh-88KK##DHH-
rg   )r  r  r  r   )rh   ri   rj   rk   r?   r;  r  r  rR  rl   r  r  s   @rd   r  r  *  s"    +/::$d  rg   r  c                   \   ^  \ rS rSrSU 4S jjrS r\R                  S 5       rS r	Sr
U =r$ )rZ   i@  c                 @   > Xl         X l        [        [        U ]  US9  g rM  )r)  rO  r  rZ   r  )rb   valuesr  r  r  s       rd   r  ValuesList.__init__A  s    j$(u(5rg   c                 l    [        U R                  [        U R                  5      U R                  45      $ r`   )r	  r  idr)  r  r  s    rd   r  ValuesList._get_hashF  s%    T^^R%5t{{CDDrg   c                     Xl         g r`   )rO  )rb   namess     rd   r  ValuesList.columnsI  s    rg   c                 >   U R                   (       a  U R                   UR                  U '   UR                  [        :X  d  UR                  [        :X  Ga  U" UR
                  (       + S9   UR                  S5      R                  [        U R                   Vs/ s H  n[        U5      PM     sn5      5      nS S S 5        UR                  [        :X  a  UR                  S5      R                  [        UR                  U    5      5        U R                  (       a?  U R                   Vs/ s H  n[        U5      PM     nnUR                  [        U5      5        U$ UR                  [        UR                  U    5      5        U$ s  snf ! , (       d  f       N= fs  snf )Nr  zVALUES r  )r  r*  r  ru  r  r  rD  rV  CommaNodeListr)  EnclosedNodeListrj  rO  )rb   ri  rowr{   entitiess        rd   rR  ValuesList.__sql__M  s8   ;;&*kkCd#99$		\(AS__!45	*M<@LL+J<HS+C0L+J K L  6 yyL(F#''s/@/@/F(GH==37==A=aq	=HAGG,X67 
 GGF3,,T234
+J 65  Bs$   ).F	F,F	(FF		
F)rO  r)  r  )rh   ri   rj   rk   r  r  ri  rT  r  rR  rl   r  r  s   @rd   rZ   rZ   @  s0    6
E 
YY  rg   rZ   c                   V   ^  \ rS rSr  S	U 4S jjrS rS rS r\rS r	\	r
S rSrU =r$ )
r  ic  c                    > Xl         X l        X0l        XPl        Ub2  U Vs/ s H%  n[	        U[
        5      (       a  [        U5      OUPM'     nnX@l        SUl        [        [        U ]/  US9  g s  snf )Nra   rN  )r  _query
_recursive_materializedrz   
basestringrj  rO  	_cte_listr  r  r  )rb   r  rl  r  r  r  r{   r  s          rd   r  CTE.__init__d  sv    #) ') '1 %/q*$=$=vay1D '  )c4!!-	)s   ,A.c                    U(       d  [        S5      e[        U 4U5      R                  U 5      R                  U R                  R
                  5      n UR                  U R                  R                  5      nU$ ! [         a     U$ f = f)NzFselect_from() must specify one or more columns from the CTE to select.)	r  rP   with_cter&  r  r}  objectsmodelr   rb   r  rl  s      rd   select_fromCTE.select_fromq  s     7 8 8 )(4.$t{{,,- 		MM$++"3"34E   		s   %A: :
BBc                 l    [        U R                  U R                  [        U R                  5      45      $ r`   )r	  r  r  r  r  r  s    rd   r  CTE._get_hash  s$    T^^T[["T[[/BCCrg   c                     U R                   R                  5       n[        U R                  X!-   U R                  U R
                  5      $ r`   r  r  r  r  r  rO  rb   r   r  s      rd   	union_allCTE.union_all  3    !!#4;;T__dmmLLrg   c                     U R                   R                  5       n[        U R                  X!-  U R                  U R
                  5      $ r`   r  r  s      rd   union	CTE.union  r  rg   c                    UR                   [        :w  a$  UR                  [        U R                  5      5      $ UR                  5          U R                  UR                  U '   UR                  [        U R                  5      5        U R                  (       a3  UR                  S5      R                  [        U R                  5      5        UR                  S5        U R                  (       a  UR                  S5        O U R                  SL a  UR                  S5        UR                  SS9   UR                  U R                  5        S S S 5        S S S 5        U$ ! , (       d  f       N= f! , (       d  f       U$ = f)Nr   r  zMATERIALIZED FzNOT MATERIALIZED Tr  )r  ry  rV  rj  r  rN  r*  rO  rD  r  r  rt  r  rh  s     rd   rR  CTE.__sql__  s   99	!776$++.//^^&*kkCd#GGF4;;'(}}C $$%5dmm%DEKK!!O,##u,/0!!d!3$ 4  
 43  
s%   	C%E-.E
E-
E*	&E--
E<)r  rO  r  r  r  r  )rh   ri   rj   rk   r  r  r  r  r   r  r5  rR  rl   r  r  s   @rd   r  r  c  s=    =A".DM GM F rg   r  c                      \ rS rSrSr\R                  SS j5       rS rS r	S r
S rSS jr\rSS	 jr\rS
 rSS jr\" \R&                  5      r\" \R*                  5      r\" \R.                  5      r\" \R2                  5      r\" \R6                  5      r\" \R:                  5      =rr\" \R@                  5      r!\" \R.                  SS9r"\" \R2                  SS9r#\" \R6                  SS9r$\" \R:                  SS9=r%r&\" \R&                  SS9r'\" \R*                  SS9r(\" \R@                  SS9r)S r*S r+\" \RX                  5      r-\" \R\                  5      r/\" \R`                  5      r1\" \Rd                  5      r3\" \Rh                  5      r5\" \Rl                  5      r7\" \Rp                  5      r9\" \Rt                  5      r;\" \Rp                  5      r<\" \Rt                  5      r=\" \R|                  5      r?\" \R                  5      rA\" \Rh                  5      rB\" \R                  5      rD\" \R                  5      rF\" \R                  5      rHSS jrIS rJS rKS rLS rMS rNS rOS rPSrQS rRS rSS rTSrUg) 
ColumnBasei  Nc                     Xl         g r`   
_converter)rb   r^  s     rd   r^  ColumnBase.converter  s    #rg   c                 *    U(       a  [        X5      $ U $ r`   )Aliasrb   r  s     rd   r  ColumnBase.alias  s    %%rg   c                     U $ r`   ra   r  s    rd   unaliasColumnBase.unalias  r  rg   c                     [        X5      $ r`   )BindTo)rb   r  s     rd   bind_toColumnBase.bind_to  s    d!!rg   c                     [        X5      $ r`   )r   )rb   as_types     rd   castColumnBase.cast  s    D""rg   c                     [        XUS9$ N)	collationnulls)Ascrb   r  r  s      rd   ascColumnBase.asc  s    4E::rg   c                     [        XUS9$ r  )Descr  s      rd   descColumnBase.desc  s    DU;;rg   c                     [        U 5      $ r`   )Negatedr  s    rd   
__invert__ColumnBase.__invert__  r  rg   c                    ^ ^ UU 4S jnU$ )z
Lightweight factory which returns a method that builds an Expression
consisting of the left-hand and right-hand operands, using `op`.
c                 F   > T(       a  [        UTU 5      $ [        U TU5      $ r`   r  )rb   r   invr  s     rd   r  ColumnBase._e.<locals>.inner  s$    !#r400dB,,rg   ra   )r  r  r  s   `` rd   r  ColumnBase._e  s    
	- rg   T)r  c                 `    Uc  [         R                  O[         R                  n[        XU5      $ r`   )rE   r  r   r  r  s      rd   r  ColumnBase.__eq__  s"    kRUUruu$C((rg   c                 `    Uc  [         R                  O[         R                  n[        XU5      $ r`   )rE   r  r  r  r  s      rd   r  ColumnBase.__ne__  s"    +RYY255$C((rg   c                 h    U(       a  [         R                  O[         R                  n[        XS 5      $ r`   )rE   r  r  r  )rb   is_nullr  s      rd   r  ColumnBase.is_null  s     RUU299$D))rg   c           	      >   UR                  S5      S:  d*  UR                  S5      S:  d  UR                  S5      S:  a[  UR                  SS5      R                  SS5      R                  SS5      n[        [        X!-  SS	9[	        S
5      [        SSS	945      $ X!-  $ )N_r   r   \z\\z\_z\%Fr]  ESCAPE)findr   NodeListrY   rQ   )rb   ru   templates      rd   _escape_like_exprColumnBase._escape_like_expr  s    66#;!qvvc{a/166$<13D		$'//U;CCCOA hle4Hde,. / / |rg   c           	          [        U[        5      (       a5  [        S[        R                  [        U[        R                  S5      5      nOU R                  US5      n[        U [        R                  U5      $ )Nr   z%%%s%%rz   ri  r  rE   r  r  r
  r   s     rd   containsColumnBase.contains  sX    c4  S"))'RYY<>C ((h7C$#..rg   c                     [        U[        5      (       a  [        U[        R                  S5      nOU R                  US5      n[        U [        R                  U5      $ )Nr   z%s%%r  r   s     rd   
startswithColumnBase.startswith  F    c4  S"))S1C((f5C$#..rg   c                     [        U[        5      (       a  [        S[        R                  U5      nOU R                  US5      n[        U [        R                  U5      $ )Nr   z%%%sr  r   s     rd   endswithColumnBase.endswith  r  rg   c           
      b    [        U [        R                  [        U[	        S5      U45      5      $ )Nr   )r  rE   r  r  rQ   )rb   lohis      rd   betweenColumnBase.between  s%    $

Hb#e*b5I,JKKrg   c                 8    [        U [        R                  U5      $ r`   StringExpressionrE   r  r   s     rd   concatColumnBase.concat  s    bii55rg   c                     [        U[        5      (       aK  UR                  b  UR                  c  [	        S5      eU R                  UR                  UR                  5      $ X:H  $ )Nz4BETWEEN range must have both a start- and end-point.)rz   slicestartstopr  r  r5  s     rd   r  ColumnBase.__getitem__  sU    dE""zz!TYY%6  ". / /<<

DII66|rg   c                 .    [        [        S5      U 45      $ )NDISTINCTr  rQ   r  s    rd   distinctColumnBase.distinct&  s    Z$/00rg   c                 4    [        U [        SU-  5      45      $ )N
COLLATE %sr  rb   r  s     rd   collateColumnBase.collate)  s    s<)#;<=>>rg   c                     gr-  ra   rh  s     rd   r4  ColumnBase.get_sort_key,  s    rg   r  r`   r  r  r  )Vrh   ri   rj   rk   r  ri  rT  r^  r  r  r  r  r  __pos__r  __neg__r  r  rE   r   r3  r   r5  r   r   r   r4  r   r6  r   __div____truediv__r   __xor__r8  r9  r;  __rdiv____rtruediv__r7  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  iregexpr  r  r  r  r  r  r  r  __iter__r  r  r4  rl   ra   rg   rd   r  r    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?rg   r  c                   ,    \ rS rSrS rS rS rS rSrg)r!   i0  c                     Xl         X l        g r`   )rU  r  )rb   rU  r  s      rd   r  Column.__init__1  s    	rg   c                     UR                   [        :X  a  U R                  4$ U R                  R	                  U5      U R                  4-   $ r`   )r  rw  r  rU  r4  rh  s     rd   r4  Column.get_sort_key5  s:    99$II<;;++C0DII<??rg   c                 D    [        U R                  U R                  45      $ r`   )r	  rU  r  r  s    rd   r  Column.__hash__;  s    T[[$)),--rg   c                 `   UR                   [        :X  a$  UR                  [        U R                  5      5      $ UR                  5          UR                  U R                  5      R                  S5      R                  [        U R                  5      5      sS S S 5        $ ! , (       d  f       g = fNrZ  )r  rw  rV  rj  r  r`  rU  rD  rh  s     rd   rR  Column.__sql__>  sm    99$776$)),--!!#wwt{{+33C8<<VDII=NO $##s   	AB
B-)r  rU  N)	rh   ri   rj   rk   r  r4  r  rR  rl   ra   rg   rd   r!   r!   0  s    @.Prg   r!   c                   &    \ rS rSrS rS rS rSrg)WrappedNodeiF  c                 X    Xl         [        USS5      U l        [        USS 5      U l        g )Nr  Tr  )rn  r   r  r  rm  s     rd   r  WrappedNode.__init__G  s'    	tY5!$d;rg   c                 6    U R                   R                  5       $ r`   )rn  r  r  s    rd   r  WrappedNode.is_aliasL  s    yy!!##rg   c                 6    U R                   R                  5       $ r`   )rn  r  r  s    rd   r  WrappedNode.unwrapO  s    yy!!rg   )r  r  rn  N)rh   ri   rj   rk   r  r  r  rl   ra   rg   rd   r3  r3  F  s    <
$"rg   r3  c                   $    \ rS rSrSrS rS rSrg)EntityFactoryiS  r  c                     Xl         g r`   r  rm  s     rd   r  EntityFactory.__init__U  r  rg   c                 .    [        U R                  U5      $ r`   )rj  rn  r   s     rd   r   EntityFactory.__getattr__W  r  rg   N)rh   ri   rj   rk   r  r  r   rl   ra   rg   rd   r;  r;  S  s    I'rg   r;  c                   "    \ rS rSrSrSS jrSrg)_DynamicEntityi[  ra   Nc                 6    Ub  [        UR                  5      $ U $ r`   )r;  r  r  s      rd   r  _DynamicEntity.__get__]  s     11rg   r`   r  ra   rg   rd   rA  rA  [  s    Irg   rA  c                      ^  \ rS rSr\" 5       rU 4S jrS r\S 5       r	\	R                  S 5       r	SS jrS rS rS	 rS
rU =r$ )r  ic  c                 8   > [         [        U ]  U5        X l        g r`   )r  r  r  r  )rb   rn  r  r  s      rd   r  Alias.__init__f  s    eT#D)rg   c                 ,    [        U R                  5      $ r`   )r	  r  r  s    rd   r  Alias.__hash__j      DKK  rg   c                     U R                   $ r`   r  r  s    rd   r  
Alias.namem  s    {{rg   c                     Xl         g r`   r  rb   r   s     rd   r  rK  p      rg   c                 L    Uc  U R                   $ [        U R                   U5      $ r`   )rn  r  r  s     rd   r  Alias.aliast  s"    =99E**rg   c                     U R                   $ r`   r  r  s    rd   r  Alias.unaliasz      yyrg   c                     grs  ra   r  s    rd   r  Alias.is_alias}  s    rg   c                 
   UR                   [        :X  aL  UR                  U R                  5      R	                  S5      R                  [        U R                  5      5      $ UR                  [        U R                  5      5      $ r  )r  ru  rV  rn  rD  rj  r  rh  s     rd   rR  Alias.__sql__  sY    99$S^WV_S,-/
 776$++.//rg   r  r`   )rh   ri   rj   rk   rA  r{   r  r  r  r  setterr  r  r  rR  rl   r  r  s   @rd   r  r  c  sX    A!  	[[ +0 0rg   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  i  c                 8   > [         [        U ]  U5        X l        g r`   )r  r  r  r  )rb   rn  r  r  s      rd   r  BindTo.__init__  s    fd$T*	rg   c                 8    UR                  U R                  5      $ r`   rV  rn  rh  s     rd   rR  BindTo.__sql__  s    wwtyy!!rg   )r  rh   ri   rj   rk   r  rR  rl   r  r  s   @rd   r  r    s    " "rg   r  c                        \ rS rSrS rS rSrg)r  i  c                     U R                   $ r`   r  r  s    rd   r  Negated.__invert__  rS  rg   c                 V    UR                  S5      R                  U R                  5      $ )NzNOT )rD  rV  rn  rh  s     rd   rR  Negated.__sql__  s     {{6"&&tyy11rg   ra   Nrh   ri   rj   rk   r  rR  rl   ra   rg   rd   r  r    s    2rg   r  c                   ,    \ rS rSrS rS rS rS rSrg)BitwiseMixini  c                 $    U R                  U5      $ r`   )r"  r  s     rd   r3  BitwiseMixin.__and__  s    ||E""rg   c                 $    U R                  U5      $ r`   )r#  r  s     rd   r5  BitwiseMixin.__or__  s    {{5!!rg   c                 @    U R                  UR                  5       5      $ r`   )r"  bin_negatedr  s     rd   r4  BitwiseMixin.__sub__  s    ||E--/00rg   c                     [        U 5      $ r`   )BitwiseNegatedr  s    rd   r  BitwiseMixin.__invert__  s    d##rg   ra   N)	rh   ri   rj   rk   r3  r5  r4  r  rl   ra   rg   rd   rg  rg    s    #"1$rg   rg  c                        \ rS rSrS rS rSrg)rp  i  c                     U R                   $ r`   r  r  s    rd   r  BitwiseNegated.__invert__  rS  rg   c                    UR                   R                  (       a;  UR                   R                  R                  U R                  U R                  5      nOU R                  nUR	                  U5      R                  U R                  5      $ r`   )r+  
operationsr   r  rD  rV  rn  )rb   ri  op_sqls      rd   rR  BitwiseNegated.__sql__  sZ    99YY))--dggtww?FWWF{{6"&&tyy11rg   ra   Nre  ra   rg   rd   rp  rp    s    2rg   rp  c                   $    \ rS rSrSS jrS rSrg)rY   i  Nc                    Xl         X l        U=(       a    [        U R                   [        5      U l        U R                  (       a{  / U l        U R                    Hc  n[        U[        5      (       a  U R
                  R                  U5        M5  U R
                  R                  [        X@R                  5      5        Me     g g r`   )	r   r^  rz   multi_typesmultir  ri  r  rY   )rb   r   r^  unpackr6  s        rd   r  Value.__init__  s~    
"C
4::{ C
::DK

dD))KK&&t,KK&&uT>>'BC	 # rg   c                     U R                   (       a$  UR                  [        U R                  5      5      $ UR	                  U R                  U R
                  5      $ r`   )r|  rV  r  r  r   r^  rh  s     rd   rR  Value.__sql__  s;    ::77+DKK899yyT^^44rg   )r^  r|  r   r  rs  r  ra   rg   rd   rY   rY     s    
D5rg   rY   c                       \ rS rSrS rSrg)ValueLiteralsi  c                 z    U" SS9   UR                  U R                  5      sS S S 5        $ ! , (       d  f       g = f)NT)ra  r]  rh  s     rd   rR  ValueLiterals.__sql__  s&    %77499% &%%s   ,
:ra   Nrh   ri   rj   rk   rR  rl   ra   rg   rd   r  r        &rg   r  c                     [        U SS9$ NFr}  )rY   rf  s    rd   r   r     s    u%%rg   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r   i  c                 F   > [         [        U ]  U5        X l        SU l        g r  )r  r   r  _castr  )rb   rn  r  r  s      rd   r  Cast.__init__  s    dD"4(
rg   c                     UR                  S5      R                  U R                  5      R                  SU R                  -  5      $ )NzCAST(z AS %s))rD  rV  rn  r  rh  s     rd   rR  Cast.__sql__  s4    !TYYTZZ/0	2rg   )r  r  r_  r  s   @rd   r   r     s    
2 2rg   r   c                   B   ^  \ rS rSrSU 4S jjrSS jrS rS rSrU =r	$ )	Orderingi  c                    > [         [        U ]  U5        X l        X0l        X@l        U(       a#  UR                  5       S;  a  [        SU-  5      eg g )N)rq  lastz<Ordering nulls= parameter must be "first" or "last", got: %s)r  r  r  	directionr  r  rp  r  )rb   rn  r  r  r  r  s        rd   r  Ordering.__init__  sS    h&t,""
U[[]*;; /167 8 8 <5rg   c                 D    [        U R                  U R                  U5      $ r`   )r  rn  r  r  s     rd   r  Ordering.collate  s    		4>>9==rg   c                     UR                  5       S:X  a  Su  p#O$UR                  5       S:X  a  Su  p#O[        S5      e[        S U R                  R	                  5       U44U5      $ )Nr  )r   r   rq  )r   r   z&unsupported value for nulls= ordering.)rp  r  r   rn  r  )rb   r  ifnullnotnulls       rd   _null_ordering_caseOrdering._null_ordering_case  s`    ;;=F""OFG[[]g%"OFGEFFDDII--/8:GDDrg   c                 0   U R                   (       aT  UR                  R                  (       d9  UR                  U R	                  U R                   5      5      R                  S5        UR                  U R                  5      R                  SU R                  -  5        U R                  (       a  UR                  SU R                  -  5        U R                   (       a9  UR                  R                  (       a  UR                  SU R                   -  5        U$ )N,  %sz COLLATE %sz	 NULLS %s)	r  r+  nulls_orderingrV  r  rD  rn  r  r  rh  s     rd   rR  Ordering.__sql__  s    ::cii66GGD,,TZZ89AA$G		""54>>#9:>>KK67::#))22KKdjj01
rg   )r  r  r  r  r`   )
rh   ri   rj   rk   r  r  r  rR  rl   r  r  s   @rd   r  r    s    8>E	 	rg   r  c                     [        U SX5      $ )NASCr  rn  r  r  s      rd   r  r    s    D%22rg   c                     [        U SX5      $ )NDESCr  r  s      rd   r  r    s    D&)33rg   c                   $    \ rS rSrSS jrS rSrg)r  i  c                 4    Xl         X l        X0l        X@l        g r`   )r  r  r   flat)rb   r  r  r   r  s        rd   r  Expression.__init__  s    	rg   c                    U R                   (       + SS.nU R                  =p4[        U[        5      (       a  UR	                  5       n[        U[
        5      (       a4  UR                  (       a#  UR                  US'   [        U[        5      US'   OS US'   UR                  R                  (       a;  UR                  R                  R                  U R                  U R                  5      nOU R                  nU" S0 UD6   U R                  [        R                  :H  =(       d    U R                  [        R                  :H  nU(       aj  UR!                  5       R#                  U R$                  5      S   S:X  a:  UR'                  U R                  [        R                  :X  a  SOS5      sS S S 5        $ U R$                  nUcG  U R                  [        R(                  :X  d  U R                  [        R*                  :X  a  [-        S	5      nUR/                  U R                  5      R'                  S
U-  5      R/                  U5      sS S S 5        $ ! , (       d  f       g = f)NT)r  in_exprr^  
is_fk_exprr   ()z0 = 1z1 = 1r  r  ra   )r  r  rz   r3  r  r2   r  db_valuer6   r+  rv  r   r  rE   r  r  r0  ro  r   rD  r  r  rQ   rV  )rb   ri  rV  rn  raw_noderw  op_inr   s           rd   rR  Expression.__sql__  s   (,		MdC	 (("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)I2BI
I)r  r  r  r   Nr  r  ra   rg   rd   r  r    s    "rg   r  c                        \ rS rSrS rS rSrg)r  i7  c                 $    U R                  U5      $ r`   )r  r   s     rd   r   StringExpression.__add__8  s    {{3rg   c                 8    [        U[        R                  U 5      $ r`   r  )rb   r  s     rd   r8  StringExpression.__radd__:  s    RYY55rg   ra   N)rh   ri   rj   rk   r   r8  rl   ra   rg   rd   r  r  7  s     6rg   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	rj  i>  c                 n    U Vs/ s H  o"(       d  M  UR                  SS5      PM     snU l        g s  snf )N""")r   r
  )rb   r\  r^  s      rd   r  Entity.__init__?  s+    :>G$$$-dll3-$G
Gs   
22c                 .    [        U R                  U/-   6 $ r`   )rj  r
  r   s     rd   r   Entity.__getattr__B  s    tzzTF*++rg   c                 ,    [        U R                  5      $ r`   )re  r
  rh  s     rd   r4  Entity.get_sort_keyE  s    TZZ  rg   c                 j    [        U R                  R                  [        U R                  5      45      $ r`   )r	  r  rh   re  r
  r  s    rd   r  Entity.__hash__H  s%    T^^,,eDJJ.?@AArg   c                     UR                  [        U R                  UR                  R                  =(       d    S5      5      $ )Nr  )rD  r_  r
  r+  rh  s     rd   rR  Entity.__sql__K  s)    {{5SYY__-DEFFrg   )r
  N)
rh   ri   rj   rk   r  r   r4  r  rR  rl   ra   rg   rd   rj  rj  >  s    H,!BGrg   rj  c                   $    \ rS rSrSS jrS rSrg)rQ   iO  Nc                     Xl         X l        g r`   rV  r  rb   rV  r  s      rd   r  SQL.__init__P  s    rg   c                     UR                  U R                  5        U R                  (       a$  U R                   H  nUR                  USSS9  M     U$ NF)rd  )rD  rV  r  r   rb   ri  rc  s      rd   rR  SQL.__sql__T  s>    DHH;;		%%	8 %
rg   )r  rV  r`   r  ra   rg   rd   rQ   rQ   O  s    rg   rQ   c                 p    [        SU -  5      nU(       d  U$ [        [        S5      [        U5      U45      $ )Nz
CHECK (%s)
CONSTRAINT)rQ   r  rj  )
constraintr  checks      rd   r   r   \  s4    z)*ES&te<==rg   c                       \ rS rSr\" S5      rSS jrS r\R                  SS j5       r
\R                  S 5       r\R                  SS j5       r  SS	 jrS
 rSrg)Functionic  )sumcountavgr  	array_aggNc                     Xl         X l        S U l        S U l        X@l        U(       a&  UR                  5       U R                  ;   a  SU l        g X0l        g r  )r  	arguments_filter	_order_by_python_valuerp  no_coerce_functionsr  )rb   r  r  r  python_values        rd   r  Function.__init__f  sB    	")DJJLD$<$<< DL!Lrg   c                    ^ U4S jnU$ )Nc                     > [        TU 40 UD6$ r`   )r  )r  r  r   s     rd   	decorator'Function.__getattr__.<locals>.decoratorr  s    D$1&11rg   ra   )rb   r   r  s    ` rd   r   Function.__getattr__q  s    	2rg   c                     Xl         g r`   )r  )rb   wheres     rd   filterFunction.filterv      rg   c                     Xl         g r`   r  )rb   orderings     rd   order_byFunction.order_byz      !rg   c                     Xl         g r`   )r  )rb   funcs     rd   r  Function.python_value~  s    !rg   c           
          [        U[        5      (       a  Uc  UnUb  [        U5      nO[        XX4UUSS9n[        U [	        S5      U45      $ )NT)partition_byr  r  end
frame_typeexclude_inlineOVER)rz   r[   WindowAliasr  rQ   )	rb   r  r  r  r  r  windowr  rn  s	            rd   overFunction.over  sV    lF++!Fv&D| %:")49D s6{D122rg   c                    UR                  U R                  5        [        U R                  5      (       d  UR                  S5        OU R                  nU R                  (       a;  [        U5      n[        US   [        S5      [        U R                  5      45      US'   U" S[        U R                  5      S9   UR                  [        U Vs/ s H&  n[        U[        5      (       a  UO[        US5      PM(     sn5      5        S S S 5        U R                  (       a9  UR                  S5      R                  U R                  5      R                  S5        U$ s  snf ! , (       d  f       N_= f)	Nr  r{  ORDER BYT)in_functionfunction_arg_countFz FILTER (WHERE rG  )rD  r  r   r  r  rd  r  rQ   r  rV  r  rz   ri  rY   r  )rb   ri  r  args       rd   rR  Function.__sql__  s   DII4>>""KK>>D ~~Dz#T"Xs:%24>>%B%D ER #dnn:MN(#*%# 'sD11SuS%7HH#*% & ' O
 <<KK)*..t||<DDSI
*% ONs   :E -E<E E  
E.)r  r  r  r  r  r  )TNr`   NNNNNNN)rh   ri   rj   rk   setr  r  r   ri  rT  r  r  r  r  rR  rl   ra   rg   rd   r  r  c  st    JK	"
 
YY  
YY" " 
YY" " FJ373rg   r  c                   r  ^  \ rS rSr\" S5      r\" S5      r\" S5      r\" S5      rSr	Sr
Sr   SU 4S	 jjrSS
 jr\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  SS j5       r\R                  SS j5       r\SS j5       r\SS j5       rS rSrU =r$ )r[   i  zCURRENT ROWGROUPTIESz	NO OTHERSGROUPSRANGEROWSc
                   > [         [        U ]  5         Ub   [        U[        5      (       d  [	        U5      nUb   [        U[        5      (       d  [	        U5      n[        U5      U l        [        U5      U l        X0l        X@l	        U R                  c  U R                  b  [        S5      eU=(       d    SU l        Xl        XPl        X`l        Xpl        g )Nz(Cannot specify WINDOW end without start.w)r  r[   r  rz   rQ   rg  r  r  r  r  r  r  r  r  _extends_exclude)rb   r  r  r  r  r  extendsr  r  r  r  s             rd   r  Window.__init__  s     	fd$&Zs%;%;JE?:c3#7#7c(C(6$X.
::$(("6GHHls$rg   c                 &    U=(       d    SU l         U $ Nr  r  r  s     rd   r  Window.alias  s    lsrg   c                 .    [         R                  U l        g r`   )r[   r  r  r  s    rd   as_rangeWindow.as_range  s     ,,rg   c                 .    [         R                  U l        g r`   )r[   r  r  r  s    rd   as_rowsWindow.as_rows  s     ++rg   c                 .    [         R                  U l        g r`   )r[   r
  r  r  s    rd   	as_groupsWindow.as_groups  s     --rg   c                     Xl         g r`   )r  rb   r  s     rd   r  Window.extends  s    rg   c                 P    [        U[        5      (       a  [        U5      nXl        g r`   )rz   r  rQ   r  )rb   frame_exclusions     rd   r  Window.exclude  s    oz22!/2O'rg   c                 :    U c  [        S5      $ [        SU -  5      $ )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGrQ   rf  s    rd   	followingWindow.following  #    =,-->E)**rg   c                 :    U c  [        S5      $ [        SU -  5      $ )NzUNBOUNDED PRECEDINGz%d PRECEDINGr&  rf  s    rd   	precedingWindow.preceding  r)  rg   c                 D   UR                   [        :w  a=  U R                  (       d,  UR                  U R                  5        UR                  S5        U" SS9   / nU R
                  bh  U R
                  n[        U[        5      (       a  [        UR                  5      nO [        U[        5      (       a  [        U5      nUR                  U5        U R                  (       a/  UR                  [        S5      [        U R                  5      45        U R                  (       a/  UR                  [        S5      [        U R                  5      45        U R                  ba  U R                   bT  U R"                  =(       d    SnUR                  [        SU-  5      U R                  [        S5      U R                   45        O{U R                  b:  UR                  [        U R"                  =(       d    S5      U R                  45        O4U R"                  b'  UR                  [        S	U R"                  -  5      5        U R$                  b&  UR                  [        S
5      U R$                  45        UR'                  [)        U5      5        S S S 5        U$ ! , (       d  f       U$ = f)Nr  Tr  zPARTITION BYr   r  z
%s BETWEENr   z%s UNBOUNDED PRECEDINGEXCLUDE)r  ru  r  rD  r  r  rz   r[   rQ   r  r  r  rg  r  r  r  r  r  r  rV  r  )rb   ri  partsextframes        rd   rR  Window.__sql__  s   99$T\\KK$KKT"E}}(mmc6**cjj/CZ0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.J
J)	r  r  r  r  r  r  r  r  r  )	NNNNNNNNFr`   )rh   ri   rj   rk   rQ   CURRENT_ROWr  r	  	NO_OTHERSr
  r  r  r  r  ri  rT  r  r  r  r  r  r  r'  r+  rR  rl   r  r  s   @rd   r[   r[     s    m$KLEv;DK I FEDIMDH * 
YY' ' 
YY& & 
YY( ( 
YY  
YY( (
 + +
 + +
$ $rg   r[   c                   &    \ rS rSrS rS rS rSrg)r  i  c                     Xl         g r`   r  r   s     rd   r  WindowAlias.__init__  r  rg   c                 &    XR                   l        U $ r`   )r  r  )rb   window_aliass     rd   r  WindowAlias.alias  s    )rg   c                 ^    UR                  U R                  R                  =(       d    S5      $ r  )rD  r  r  rh  s     rd   rR  WindowAlias.__sql__"  s     {{4;;--455rg   r7  N)rh   ri   rj   rk   r  r  rR  rl   ra   rg   rd   r  r    s    6rg   r  c                   $    \ rS rSrSS jrS rSrg)_InFunctioni&  c                     Xl         X l        g r`   )rn  r  )rb   rn  r  s      rd   r  _InFunction.__init__'  s    	&rg   c                     U" U R                   S9   UR                  U R                  5      sS S S 5        $ ! , (       d  f       g = f)Nr  )r  rV  rn  rh  s     rd   rR  _InFunction.__sql__+  s,    T--.77499% /..	   6
A)r  rn  Nr  r  ra   rg   rd   r?  r?  &  s    '&rg   r?  c                   $    \ rS rSrSS jrS rSrg)r   i0  Nc                 (    Xl         X l        X0l        g r`   )r  expression_tuplesdefault)rb   r  rH  rI  s       rd   r  Case.__init__1  s    "!2rg   c           	         [        S5      /nU R                  b  UR                  U R                  5        U R                   H5  u  p4UR	                  [        S5      U[        S5      [        U5      45        M7     U R                  b/  UR	                  [        S5      [        U R                  5      45        UR                  [        S5      5        U" SS9   UR                  [        U5      5      sS S S 5        $ ! , (       d  f       g = f)NCASEWHENTHENELSEENDFrC  )	rQ   r  r  rH  rg  r?  rI  rV  r  )rb   ri  clausesexprr   s        rd   rR  Case.__sql__6  s    v;->>%NN4>>*11KDNNCKKU);= > 2 <<#NNCKT\\)BCDs5z"U#778G,- $##s   C::
D)rI  rH  r  r`   r  ra   rg   rd   r   r   0  s    
.rg   r   c                   $    \ rS rSrSS jrS rSrg)	ForUpdateiD  Nc                     USL a  SOUnUR                  5       R                  S5      (       a  US S nSnXl        Ub#  [        U[        [
        [        45      (       d  U4nX l        X0l        g )NTz
FOR UPDATEnowaiti)	rp  r  _exprrz   rd  r  re  _of_nowait)rb   rR  ofrW  s       rd   r  ForUpdate.__init__E  sd    #t||::<  **9DF
>*R$U1C"D"DBrg   c                     UR                  U R                  5        U R                  b3  UR                  S5      R                  [	        U R                  5      5        U R
                  (       a  UR                  S5        U$ )Nz OF z NOWAIT)rD  rX  rY  rV  r  rZ  rh  s     rd   rR  ForUpdate.__sql__Q  sT    DJJ88KK##M$(($;<<<KK	"
rg   )rX  rZ  rY  r  r  ra   rg   rd   rU  rU  D  s    
rg   rU  c                   $    \ rS rSrSS jrS rSrg)r  iZ  c                 ^   Xl         X l        X0l        U(       a  [        U R                   5      S:X  az  [	        U R                   S   [
        5      (       aW  U R                   S   R                  (       d8  U R                   S   R                  5       4U l         SU R                   S   l        g g g g g )Nr   r   T)nodesglueparensr   rz   r  r  r  )rb   ra  rb  rc  s       rd   r  NodeList.__init__[  s    
	c$**o*djjmZ00zz!}!!**Q---/1DJ!%DJJqM " 1 +6rg   c                    [        U R                  5      nUS:X  a$  U R                  (       a  UR                  S5      $ U$ U" U R                  S9   [	        US-
  5       H<  nUR                  U R                  U   5        UR                  U R                  5        M>     UR                  U R                  US-
     5        S S S 5        U$ ! , (       d  f       U$ = f)Nr   r  r  r   )r   ra  rc  rD  r  rV  rb  )rb   ri  n_nodesis       rd   rR  NodeList.__sql__f  s    djj/a<(,3;;t$<<T[[)7Q;'

1&DII& ( GGDJJw{+,	 *
 
 *)
 
s   A0C


C)rb  ra  rc  N)r   Fr  ra   rg   rd   r  r  Z  s    	&	rg   r  c                     [        U S5      $ Nr  r  ra  s    rd   r  r  r  s    E4  rg   c                     [        U SS5      $ )Nr  Trk  rl  s    rd   r  r  v  s    E4&&rg   c                   (    \ rS rSrSrS rS r\rSrg)
_Namespaceiz  _namec                     Xl         g r`   rp  r  s     rd   r  _Namespace.__init__|  s    
rg   c                     [        X5      $ r`   )NamespaceAttributer   s     rd   r   _Namespace.__getattr__~  s    !$--rg   Nr  ra   rg   rd   ro  ro  z  s    I.Krg   ro  c                        \ rS rSrS rS rSrg)ru  i  c                     Xl         X l        g r`   )
_namespace
_attribute)rb   	namespace	attributes      rd   r  NamespaceAttribute.__init__  s    ##rg   c                     UR                  U R                  R                  S-   5      R                  [	        U R
                  5      5      $ r0  )rD  ry  rq  rV  rj  rz  rh  s     rd   rR  NamespaceAttribute.__sql__  s6    ..45VDOO,-	/rg   )rz  ry  Nr  ra   rg   rd   ru  ru    s    $/rg   ru  r1   c                   R   ^  \ rS rSrU 4S jr\R                  S 5       rS rSr	U =r
$ )r0   i  c                 D   > [         [        U ]  5         Xl        SU l        g r  )r  r0   r  rl  _negatedrb   rl  r  s     rd   r  DQ.__init__  s    b$ "
rg   c                 0    U R                   (       + U l         g r`   )r  r  s    rd   r  DQ.__invert__  s     MM)rg   c                 R    [        S0 U R                  D6nU R                  Ul        U$ r-  )r0   rl  r  rm  s     rd   r  DQ.clone  s#    DJJrg   )r  rl  )rh   ri   rj   rk   r  ri  rT  r  r  rl   r  r  s   @rd   r0   r0     s*    
 
YY* * rg   r0   c                      [        U 5      $ r`   )r  )as    rd   r|   r|     s
    #A&rg   c                       \ rS rSrS rSrg)rM   i  c                     UR                  5          UR                  U R                  5      sS S S 5        $ ! , (       d  f       g = fr`   )r`  rV  rn  rh  s     rd   rR  QualifiedNames.__sql__  s*    77499%  rE  ra   Nr  ra   rg   rd   rM   rM     r  rg   rM   c                    [        U [        5      (       aN  U R                  [        U R                  5      U R
                  [        U R                  5      U R                  5      $ [        U [        5      (       a  [        U 5      $ U $ r`   )
rz   r  r  qualify_namesr  r  r   r  r  rM   r  s    rd   r  r    sd     $
##~~mDHH5tww+DHH5tyyB 	B	D*	%	%d##Krg   c                      \ rS rSr   SS jrS rS r\R                  S 5       r	\R                  SS j5       r
\R                  S 5       r\R                  S	 5       r\R                  S
 5       r\R                  S 5       rSrg)
OnConflicti  Nc                     Xl         X l        [        U5      U l        X@l        Ub  Ub  [        S5      e[        U5      U l        X`l        Xpl        g )NzIonly one of "conflict_target" and "conflict_constraint" may be specified.)	_action_updaterg  	_preserve_wherer  _conflict_target_conflict_where_conflict_constraint)rb   actionr   preserver  conflict_targetconflict_whereconflict_constraints           rd   r  OnConflict.__init__  sY     %h/&+>+J G H H ,_ =-$7!rg   c                 8    UR                   R                  X5      $ r`   )r+  conflict_statementrb   ri  rl  s      rd   get_conflict_statement!OnConflict.get_conflict_statement  s    yy++D88rg   c                 8    UR                   R                  X5      $ r`   )r+  conflict_updater  s      rd   get_conflict_updateOnConflict.get_conflict_update  s    yy((55rg   c                     Xl         g r`   )r  r  s     rd   r  OnConflict.preserve  s     rg   c                     U(       a'  U(       a   [        U[        5      (       d  [        S5      eU=(       d    0 nU(       a  UR                  U5        Xl        g )NzGCannot mix data with keyword arguments in the OnConflict update method.)rz   dictr  r   r  )rb   _datar  s      rd   r   OnConflict.update  sB    VJud$;$; 9 : :LL rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   r  rx   operatorand_rb   expressionss     rd   r  OnConflict.where  .    ;;";;.;6KX]]K8rg   c                     S U l         Xl        g r`   r  r  )rb   constraintss     rd   r  OnConflict.conflict_target  s    $(! +rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   )r  rx   r  r  r  s     rd   r  OnConflict.conflict_where  s4    +//1K?K%hmm[Arg   c                     Xl         S U l        g r`   r  )rb   r  s     rd   r  OnConflict.conflict_constraint  s    $.! $rg   )r  r  r  r  r  r  r  r  r`   )rh   ri   rj   rk   r  r  r  ri  rT  r  r   r  r  r  r  rl   ra   rg   rd   r  r    s    FJ6:%)896 
YY! ! 
YY  
YY9 9
 
YY, , 
YYB B
 
YY% %rg   r  c                 4   ^  [        T 5      SU 4S jj5       nU$ )Nc                 |   > Uc  U R                   OUnU(       d  [        STR                  -  5      eT" X/UQ70 UD6$ )Nz8Query must be bound to a database in order to call "%s".)r}  r<   rh   )rb   r  r  r  r  s       rd   r   database_required.<locals>.inner  sL    %-%54>>8  "139??"C D Dd6t6v66rg   r`   r   r  s   ` rd   database_requiredr    s     
6]7 7 Lrg   c                   J  ^  \ rS rSr\R
                  rSU 4S jjrSS jrU 4S jr	\
R                  SS j5       r\
R                  SS j5       r\
R                  SS j5       r\
R                  SS j5       rS	 rS
 rS r\S 5       rS rSS jrS rS rS rS rS rSrU =r$ )	BaseQueryi  c                 d   > Xl         S U l        S U l        S U l        [        [
        U ]  " S0 UD6  g r-  )r}  _cursor_wrapper	_row_type_constructorr  r  r  )rb   r}  r  r  s      rd   r  BaseQuery.__init__  s1    "# i'1&1rg   c                     Xl         U $ r`   r[  r\  s     rd   r&  BaseQuery.bind  r^  rg   c                 :   > [         [        U ]  5       nS Ul        U$ r`   )r  r  r  r  r  s     rd   r  BaseQuery.clone  s    i,. $rg   c                 P    U(       a  [         R                  U l        U $ S U l        U $ r`   )ROWrF  r  )rb   as_dicts     rd   dictsBaseQuery.dicts  s"    %, 37rg   c                 P    U(       a  [         R                  U l        U $ S U l        U $ r`   )r  rE  r  )rb   as_tuples     rd   tuplesBaseQuery.tuples  s"    &. 59rg   c                 P    U(       a  [         R                  U l        U $ S U l        U $ r`   )r  rG  r  )rb   as_namedtuples     rd   namedtuplesBaseQuery.namedtuples  s$    ,9 @Drg   c                 N    U(       a  [         R                  OS U l        Xl        U $ r`   )r  rH  r  r  rb   constructors     rd   r  BaseQuery.objects  s    ,7T'rg   c                 h   U R                   =(       d    U R                  nU[        R                  :X  a  [	        U5      $ U[        R
                  :X  a  [        U5      $ U[        R                  :X  a  [        U5      $ U[        R                  :X  a  [        XR                  5      $ [        SU-  5      eNzUnrecognized row type: "%s".)r  default_row_typer  rF  DictCursorWrapperrE  CursorWrapperrG  NamedTupleCursorWrapperrH  ObjectCursorWrapperr  r  rb   cursorrow_types      rd   _get_cursor_wrapperBaseQuery._get_cursor_wrapper!  s    >>:T%:%:sxx$V,," (((*622(&v/@/@AA;hFGGrg   c                     [         er`   r  rh  s     rd   rR  BaseQuery.__sql__/  r  rg   c                     U R                   (       a  U R                   R                  5       nO
[        5       nUR                  U 5      $ r`   )r}  r  r#   ro  )rb   contexts     rd   rV  BaseQuery.sql2  s1    >>nn446GiG}}T""rg   c                 $    U R                  U5      $ r`   )_executer\  s     rd   executeBaseQuery.execute9  s    }}X&&rg   c                     [         er`   r  r\  s     rd   r  BaseQuery._execute=  r  rg   c                 R    [        U R                  U5      R                  5       5      $ r`   )r~  r  iteratorr\  s     rd   r  BaseQuery.iterator@  s    DLL*33566rg   c                 x    U R                   c-  U R                  (       d  [        S5      eU R                  5         g g )NzQuery has not been executed.)r  r}  r  r  r  s    rd   _ensure_executionBaseQuery._ensure_executionC  s/    '>> !?@@LLN (rg   c                 L    U R                  5         [        U R                  5      $ r`   )r  r~  r  r  s    rd   r'  BaseQuery.__iter__I  s     D(())rg   c                     U R                  5         [        U[        5      (       a  UR                  nOUnUb  US:  a  US-   OSnU R                  R                  U5        U R                  R                  U   $ Nr   r   )r  rz   r  r  r  
fill_cache	row_cache)rb   r   r  s      rd   r  BaseQuery.__getitem__M  sk     eU##JJEE!&!EAIE''.##--e44rg   c                 L    U R                  5         [        U R                  5      $ r`   )r  r   r  r  s    rd   __len__BaseQuery.__len__X  s     4''((rg   c                     [        U 5      $ r`   )r  r  s    rd   __str__BaseQuery.__str__\  s    t$$rg   )r  r  r}  r  r`   r  )rh   ri   rj   rk   r  rF  r  r  r&  r  ri  rT  r  r  r  r  r  rR  rV  r  r  r  r  r  r'  r  r  r  rl   r  r  s   @rd   r  r    s    xx2
 
YY  
YY  
YY  
YY 
H"# ' '"7*	5)% %rg   r  c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )RawQueryi`  c                 F   > [         [        U ]
  " S0 UD6  Xl        X l        g r-  )r  r
  r  r(  _params)rb   rV  r  r  r  s       rd   r  RawQuery.__init__a  s    h&00	rg   c                     UR                  U R                  5        U R                  (       a#  U R                   H  nUR                  USS9  M     U$ r  )rD  r(  r  r   r  s      rd   rR  RawQuery.__sql__f  s<    DII<<		%5	1 &
rg   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ r`   r  r  r  rb   r  r  s      rd   r  RawQuery._executem  =    '%%d+F#'#;#;F#CD ###rg   )r  r  r(  r  )	rh   ri   rj   rk   r  rR  r  rl   r  r  s   @rd   r
  r
  `  s    
$ $rg   r
  c                   d  ^  \ rS rSrSU 4S jjr\R                  S 5       r\R                  S 5       r\R                  S 5       r	\R                  S 5       r
\R                  S 5       r\R                  SS j5       r\R                  SS	 j5       r\R                  SS
 j5       rS rS rSrU =r$ )Queryit  c                 l   > [         [        U ]
  " S0 UD6  Xl        X l        X0l        X@l        S U l        g r-  )r  r  r  r  r  _limit_offsetr  )rb   r  r  limitoffsetr  r  s         rd   r  Query.__init__u  s0    eT#-f-!rg   c                     Xl         g r`   )r  )rb   cte_lists     rd   r  Query.with_cte  r  rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   r  r  s     rd   r  Query.where  r  rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   )r  rx   r  or_r  s     rd   orwhereQuery.orwhere  s.    ;;";;.;6KX\\;7rg   c                     Xl         g r`   r  rb   r  s     rd   r  Query.order_by  s    rg   c                 P    U R                   =(       d    SU-   =(       d    S U l         g r-  r  r'  s     rd   order_by_extendQuery.order_by_extend  s    >>/R69Bdrg   c                     Xl         g r`   )r  rM  s     rd   r  Query.limit  rN  rg   c                     Xl         g r`   )r  rM  s     rd   r  Query.offset  r  rg   c                 8    US:  a  US-  nX l         X-  U l        g r  )r  r  )rb   pagepaginate_bys      rd   paginateQuery.paginate  s!    !8AID!)rg   c                    U R                   (       a3  UR                  S5      R                  [        U R                   5      5        U R                  c(  U R
                  bj  UR                  R                  (       aO  U R                  c  UR                  R                  OU R                  nUR                  S5      R                  U5        U R
                  b*  UR                  S5      R                  U R
                  5        U$ )Nz
 ORDER BY z LIMIT z OFFSET )r  rD  rV  r  r  r  r+  	limit_max)rb   ri  r  s      rd   _apply_orderingQuery._apply_ordering  s    >>gl#c-/0;;"t||'?'*yy':':+/;;+>CII''DKKEKK	"&&u-<<#KK
#''5
rg   c                 N   U R                   (       a  [        S U R                    5       5      nUR                  SS9   UR                  U(       a  SOS5      R	                  [        U R                   5      5      R                  S5        S S S 5        U$ U$ ! , (       d  f       U$ = f)Nc              3   8   #    U  H  oR                   v   M     g 7fr`   )r  )ru  r  s     rd   rw   Query.__sql__.<locals>.<genexpr>  s     EnsNNnry  Fr>  zWITH RECURSIVE zWITH r   )r  anyrz  rD  rV  r  )rb   ri  r  s      rd   rR  Query.__sql__  s}    >> EdnnEEI .'y+gF#mDNN34'#,	 /
 
s
 /.
 
s   AB
B$)r  r  r  r  r  )NNNNr`   )   )rh   ri   rj   rk   r  ri  rT  r  r  r$  r  r*  r  r  r3  r7  rR  rl   r  r  s   @rd   r  r  t  s     
YY" " 
YY9 9
 
YY8 8
 
YY    
YYC C 
YY  
YY  
YY* * rg   r  c                 *   ^ ^ [         UU 4S j5       nU$ )Nc                 0   > T(       a  Xp[        U TU5      $ r`   )CompoundSelectQuery)rb   r  r-  	operations     rd   r  #__compound_select__.<locals>.method  s    %"4E::rg   )r*  )rC  r-  r  s   `` rd   __compound_select__rE    s    ; ; Mrg   c                       \ rS rSr\" S5      =rr\" S5      =rr\" S5      =r	r
\" S5      =rr\" SSS9r\" SSS9r\" SSS9r\" SSS9rS rS	rg
)SelectQueryi  	UNION ALLUNION	INTERSECTEXCEPTTr2  c                     U(       d  [        S5      e[        U 4U5      R                  U R                  5      n[	        U SS 5      b  UR                  U R                  5      nU$ )Nz/select_from() must specify one or more columns.r  )r  rP   r&  r}  r   r  r  r  s      rd   r  SelectQuery.select_from  sV    NOO)$t~~& 	4$'3MM$**-Erg   ra   N)rh   ri   rj   rk   rE  r  r   r  r5  	intersectr3  except_r4  r8  r:  r7  r9  r  rl   ra   rg   rd   rG  rG    ss    -k::I(11EF-k::I+H55Gg";>H!'D9G";>H"8d;H	rg   rG  c                       \ rS rSrS rS r\SS j5       r\SS j5       r\SS j5       r	\S 5       r
\SS j5       r\S	 5       r\S
 5       rSrg)
SelectBasei  c                 h    [        U R                  U R                  =(       d    [        U 5      45      $ r`   )r	  r  r  r  r  s    rd   r  SelectBase._get_hash  s#    T^^T[[%<BtH=>>rg   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ r`   r  r  s      rd   r  SelectBase._execute  r  rg   c                 T    U R                  U5      S U nU(       a  US:X  a  US   $ U$ g Nr   r   )r  )rb   r  r  rowss       rd   peekSelectBase.peek  s4    ||H%bq)1f47.$. rg   c                 Z    U R                   U:w  a  X l         S U l        U R                  XS9$ )N)r  )r  r  rY  )rb   r  r  s      rd   rq  SelectBase.first  s,    ;;!K#'D yyy''rg   c                     U(       a  U R                  5       R                  U5      $ U R                  5       R                  U5      nU(       a  U(       d  US   $ U$ r  )r  rY  r  )rb   r  r  r  r  s        rd   scalarSelectBase.scalar  sE    ::<$$X..kkm  *Xs1v636rg   c              #   f   #    U R                  5       R                  U5       H
  nUS   v   M     g 7fr  )r  r  )rb   r  r  s      rd   scalarsSelectBase.scalars 	  s)     ;;=((2Ca&L 3s   /1c                    U R                  5       R                  S5      nU(       a  S =Ul        Ul         UR                  cP  UR
                  cC  UR                  c6  UR                  c)  UR                  SLa  UR                  [        S5      5      n[        U/[        R                  [        S5      5      /5      R                  U5      $ ! [         a     NEf = f)N_wrappedT1)r  r  r  r  _having	_group_by_windows	_distinct_simple_distinctr  rQ   r   rP   r5   COUNTr^  )rb   r  clear_limitr  s       rd   r  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                     U R                  [        S5      5      nSUl        S Ul        [	        UR                  5       5      $ )Nre  r   )r  rQ   r  r  boolr^  )rb   r  r  s      rd   existsSelectBase.exists	  s3    SX&ELLN##rg   c                 Z    S U l          U R                  U5      S   $ ! [         a     g f = fr  )r  r  
IndexErrorr\  s     rd   r   SelectBase.get	  s5    #	<<)!,, 		s    
**)r  r  N)r   FFr  )rh   ri   rj   rk   r  r  r  rY  rq  r^  ra  r  rp  r   rl   ra   rg   rd   rQ  rQ    s    ?$ / /
 ( ( 7 7   F F $ $  rg   rQ  c                   `   ^  \ rS rSrU 4S jr\S 5       r\S 5       rS r	S r
U 4S jrSrU =r$ )	rB  i&	  c                 N   > [         [        U ]  5         Xl        X l        X0l        g r`   )r  rB  r  r  r  r   )rb   r  r  r   r  s       rd   r  CompoundSelectQuery.__init__'	  s     !413rg   c                 .    U R                   R                  $ r`   )r  
_returningr  s    rd   rz  CompoundSelectQuery._returning-	  s    xx"""rg   c                     [        U R                  S5      4[        S5      45      R                  U5      n[	        UR                  5       5      $ )Nr   re  )rP   r  rQ   r&  ro  r^  )rb   r  rl  s      rd   rp  CompoundSelectQuery.exists1	  s;    

1'#c(5::8DELLN##rg   c                 j    U R                   R                  5       U R                  R                  5       4$ r`   )r  get_query_keyr   r  s    rd   _get_query_key"CompoundSelectQuery._get_query_key6	  s'    &&($((*@*@*BCCrg   c                    UR                   R                  nU(       a
  U[        :X  a  gU[        :X  a  gU[        :X  aL  UR                   R
                  (       d  UR                   R                  (       a  g[        U[        5      (       + $ g NFT)	r+  compound_select_parenthesesCSQ_PARENTHESES_NEVERCSQ_PARENTHESES_ALWAYSCSQ_PARENTHESES_UNNESTEDr  r  rz   rB  )rb   ri  subqcsq_settings       rd   _wrap_parens CompoundSelectQuery._wrap_parens9	  sj    ii;;k-BB2244yy  CII$9$9 
 "$(;<<< 5rg   c                   > UR                   [        :X  a  U R                  U5      $ [        [        U ]  U5        UR                  =(       d    UR                   [        :H  nU" US9   U R                  XR                  5      nUR                  USS9   UR                  U R                  5        S S S 5        UR                  SU R                  -  5        UR                  5          U R                  XR                  5      nUR                  USS9   UR                  U R                  5        S S S 5        S S S 5        UR!                  5          U R#                  U5        S S S 5        S S S 5        U R%                  U5      $ ! , (       d  f       N= f! , (       d  f       Nj= f! , (       d  f       Ns= f! , (       d  f       NZ= f! , (       d  f       Nc= f)Nr  F)r  r>  r  )r  r{  r  r  rB  rR  r>  ru  r  r  rt  rV  rD  r  rN  r   rx  r7  r  )rb   ri  outer_parens
lhs_parens
rhs_parensr  s        rd   rR  CompoundSelectQuery.__sql__K	  sW   99$$$S)) 	!405||B		\(A\***39J!!j5!I! JKK()!!..sHH=
%%*u%MGGDHH% N " !!#$$S) $! +& $$! JI NM "! $#! +*sl   &,GE?.6G$,F!F,F!4GF2G?
F		G
FF!!
F/	+G2
G 	<G
G)r  r  r   )rh   ri   rj   rk   r  r  rz  r  rp  r  r  rR  rl   r  r  s   @rd   rB  rB  &	  sE     # # $ $D=$% %rg   rB  c                   .  ^  \ rS rSr   SU 4S jjrU 4S jr\R                  S 5       r\r	\R                  S 5       r
\S 5       r\R                  S 5       r\R                  S	 5       r\R                  \R                   S4S
 j5       rSS jr\R                  S 5       rS r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  SS j5       r\R                  SS j5       rS rSS jrU 4S jrSrU =r$ )rP   ii	  Nc                 l  > [         [        U ]
  " S0 UD6  [        U[        5      (       a  [        U5      OU=(       d    / U l        X l        X0l        X@l	        S U l
        Xpl        Xl        Xl        Xl        S =U l        U l        U(       a"  [        U["        5      (       a  XPl        OXPl        S U l        g r-  )r  rP   r  rz   re  rd  
_from_listrz  rg  rf  rh  _for_update_for_update_of_for_update_nowait_lateralri  rj  ro  r  )rb   	from_listr  group_byhavingr  windows
for_updatefor_update_ofrW  lateralr  r  s               rd   r  Select.__init__j	  s     	fd$.v..8E.J.J4	? )1.0 	!!%+"(155.(D))(0%!)#rg   c                    > [         [        U ]  5       nUR                  (       a  [	        UR                  5      Ul        U$ r`   )r  rP   r  r  rd  rb   r  r  s     rd   r  Select.clone	  s3    fd)+#E$4$45Erg   c                     Xl         g r`   rz  )rb   r  r  s      rd   r  Select.columns	  s    !rg   c                 >    [        U R                  5      U-   U l        g r`   )re  rz  r  s     rd   select_extendSelect.select_extend	  s    07:rg   c                     U R                   $ r`   r  r  s    rd   selected_columnsSelect.selected_columns	  s    rg   c                     Xl         g r`   r  rM  s     rd   r  r  	  s    rg   c                 $    [        U5      U l        g r`   )rd  r  rb   sourcess     rd   from_Select.from_	  s    w-rg   c                     U R                   (       d  [        S5      eU R                   R                  5       nU R                   R                  [	        XAX#5      5        g )NNo sources to join on.)r  r  r  r  r  )rb   r  r  r  r6  s        rd   r[  Select.join	  s@    566""$tD	>?rg   c                 D    U R                  U[        R                  U5      $ r`   r[  r?   r<  r  s      rd   r  Select.left_outer_join	  s    yyt33rg   c           
      "   / nU H|  n[        U[        5      (       aS  UR                  (       d  [        S5      eUR	                  UR                   Vs/ s H  n[        X45      PM     sn5        Mk  UR                  U5        M~     X l        g s  snf NzQCannot pass a table to group_by() that does not have columns explicitly declared.)rz   rS   rO  r  rg  r   r  rg  rb   r  groupingrU  col_names        rd   r  Select.group_by	  s    F&%(($ &1 2 2 17!B1@X ")!:1@!B C '  "	!Bs   B
c                 b    [        U R                  =(       d    S5      U-   nU R                  " U6 $ )z$@Node.copy used from group_by() callra   )re  rg  r  )rb   r  r  s      rd   group_by_extendSelect.group_by_extend	  s)    -2.7}}h''rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   )rf  rx   r  r  r  s     rd   r  Select.having	  s.    <<#<</K7Khmm[9rg   c                 r    [        U5      S:X  a  US   SL d  US   SL a  US   U l        g SU l        Xl        g )Nr   r   TF)r   rj  ri  r  s     rd   r  Select.distinct	  s=    w<1'!*"4
e8K$+AJD!$)D!$Nrg   c                 .    U(       a  Xl         g S U l         g r`   )rh  )rb   r  s     rd   r  Select.window	  s    #*rg   c                 N    U(       d  Uc  U(       a  SnXl         X l        X0l        g rs  )r  r  r  )rb   r  r[  rW  s       rd   r  Select.for_update	  s"    r~J% "(rg   c                     Xl         g r`   )r  )rb   r  s     rd   r  Select.lateral	  s    rg   c                     U R                   $ r`   r  r  s    rd   r  Select._get_query_key	  s    {{rg   c                 J    UR                  [        U R                  5      5      $ r`   )rV  r  rz  rb   ri  is_subquerys      rd   __sql_selection__Select.__sql_selection__	  s    ww}T__566rg   c                 :  > UR                   [        :X  a  U R                  U5      $ U R                  (       a%  UR                   [        :X  a  UR                  S5        UR                  nS SU=(       d    UR                   [        :H  SS.nUR                  R                  (       a  UR                  R                  S:X  a  SUS'   UR                  " S0 UD6   [        [        U ]7  U5        UR                  S5        U R                  (       d  U R                  bd  UR                  S5        U R                  (       aB  UR                  S	5      R!                  [#        U R                  5      5      R                  S
5        UR%                  5          U R'                  X5      nS S S 5        U R(                  (       aK  UR%                  SS9   UR                  S5      R!                  [+        U R(                  5      5        S S S 5        U R,                  b*  UR                  S5      R!                  U R,                  5        U R.                  (       a3  UR                  S5      R!                  [+        U R.                  5      5        U R0                  b*  UR                  S5      R!                  U R0                  5        U R2                  b5  UR                  S5        UR!                  [+        U R2                  5      5        U R5                  U5        U R6                  (       aq  UR                  R8                  (       d  [;        S5      eUR                  S
5        UR!                  [=        U R6                  U R>                  U R@                  5      5        S S S 5        UR                  R                  (       d(  UR                  RB                  (       a  U RD                  c  U$ U RG                  U5      $ ! , (       d  f       GNP= f! , (       d  f       GN= f! , (       d  f       N= f)NzLATERAL FT)r^  r  r  r>  r   r  zSELECT z	DISTINCT zON r   r   FROM  WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.ra   )$r  r{  r  r  ru  rD  r>  r+  r  r  rt  r  rP   rR  rj  ri  rV  r  rv  r  r  r  r  rg  rf  rh  r7  r  r  r  rU  r  r  r  r  r  )rb   ri  r  r+  r  s       rd   rR  Select.__sql__	  s   99$$$S))==SYY,6KK
#ll &E399+D	
 99  SYY%A%AQ%F#(E- && &$',KK	"$$(BK(>>genc*4>>:;gcl!!#,,S> $ %%%%8KK)--mDOO.LM 9 {{&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 $# 98' '&s>   B7PO((P4O:;FP(
O7	2P:
P		P
P)r  ri  r  r  r  r  rg  rf  r  rz  rj  rh  )
NNNNNNNNNNr`   TNNr  r  )rh   ri   rj   rk   r  r  ri  rT  r  r  r  r  r  rX  r  r?   r;  r[  r  r  r  r  r  r  r  r  r  r  rR  rl   r  r  s   @rd   rP   rP   i	  s`   >BFJ:>$0 
YY" "F	YY; ;      
YY( ( 
YY#'::$ @ @4 
YY" "(
 
YY: :
 
YY% % 
YY5 5 
YY) ) 
YY   7F% F%rg   rP   c                      ^  \ rS rSrSU 4S jjrSS jr\R                  S 5       rS r	S r
S rS rS	 rU 4S
 jrSrU =r$ )_WriteQueryi'
  c                 f   > Xl         X l        U(       a  SOSU l        [        [        U ]  " S0 UD6  g )NTFra   )rU  rz  _return_cursorr  r  r  )rb   rU  	returningr  r  s       rd   r  _WriteQuery.__init__(
  s+    
#&/dUk4)3F3rg   c                     [        XX#US9$ r  r  r  s        rd   r  _WriteQuery.cte.
  r  rg   c                 <    Xl         U(       a  SU l        g SU l        g NTF)rz  r  )rb   r  s     rd   r  _WriteQuery.returning2
  s    #&/dUrg   c                     U R                   (       aN  UR                  5          UR                  S5      R                  [	        U R                   5      5        S S S 5        U$ U$ ! , (       d  f       U$ = f)Nz RETURNING )rz  rv  rD  rV  r  rh  s     rd   apply_returning_WriteQuery.apply_returning7
  sQ    ??!!#M*..}T__/MN $
s
 $#
s   4A""
A1c                     U R                   (       a  U R                  U5      nOUR                  U 5      nU R                  X5      $ r`   )rz  execute_returningr  handle_resultr  s      rd   r  _WriteQuery._execute=
  s:    ??++H5F%%d+F!!(33rg   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ r`   r  r  s      rd   r  _WriteQuery.execute_returningD
  r  rg   c                 J    U R                   (       a  U$ UR                  U5      $ r`   )r  rows_affectedr  s      rd   r  _WriteQuery.handle_resultJ
  s!    M%%f--rg   c                 ^    U R                   R                  UR                  U R                   '   g r`   )rU  rh   r*  rh  s     rd   _set_table_alias_WriteQuery._set_table_aliasO
  s     (,

(;(;$**%rg   c                 P   > [         [        U ]  U5        U R                  U5        U$ r`   )r  r  rR  r  rb   ri  r  s     rd   rR  _WriteQuery.__sql__R
  s'    k4(- 	c"
rg   )r  r  rz  rU  r`   r  )rh   ri   rj   rk   r  r  ri  rT  r  r  r  r  r  r  rR  rl   r  r  s   @rd   r  r  '
  sH    4. 
YY; ;4$.
< rg   r  c                   \   ^  \ rS rSrSU 4S jjr\R                  S 5       rU 4S jrSr	U =r
$ )ru  i[
  c                 J   > [         [        U ]
  " U40 UD6  X l        S U l        g r`   )r  ru  r  r  _from)rb   rU  r   r  r  s       rd   r  Update.__init__\
  s#    fd$U5f5
rg   c                     Xl         g r`   )r  r  s     rd   r  Update.from_a
  s    
rg   c           
      
  > [         [        U ]  U5        UR                  SS9   UR	                  S5        / n[        U R                  R                  5       UR                  S9 H  u  p4[        U[        5      (       d2  [        U[        5      (       a  UR                  U5      nOF[        USS9nO;[        U[        5      (       a&  [        U[        5      (       a  UR                  U5      n[        U[        5      (       d  [!        U5      nUR#                  [%        U['        S5      U45      5        M     UR)                  U R*                  5      R	                  S5      R)                  [-        U5      5        U R.                  (       aK  UR1                  SS	9   UR	                  S
5      R)                  [-        U R.                  5      5        S S S 5        U R2                  (       aC  UR5                  5          UR	                  S5      R)                  U R2                  5        S S S 5        U R7                  U5        U R9                  U5      sS S S 5        $ ! , (       d  f       N= f! , (       d  f       NJ= f! , (       d  f       g = f)NTr<  zUPDATE rm  Fr  r   z SET r  r  r  )r  ru  rR  rx  rD  sortedr  rj  r7  rz   ri  r2   to_valuerY   rA   r6   r  r  r  rQ   rV  rU  r  r  rv  r  rt  r7  r  )rb   ri  r  kr  r  s        rd   rR  Update.__sql__e
  s   fd#C(t,KK	"Kt||1139L9LM!!T**!!U++JJqM!!E25))jO.L.L 

1A!!U++%a(A""8QC!,<#=> N" c$**oggc-,-zz%%%%8KK)--mDJJ.GH 9 {{%%'KK	*..t{{; (  %'',E -,6 98 ('? -,s<   E3I44I)I44+I#)I4
I 	I4#
I1	-I44
J)r  r  r`   )rh   ri   rj   rk   r  ri  rT  r  rR  rl   r  r  s   @rd   ru  ru  [
  s*    
 
YY %- %-rg   ru  c                   2  ^  \ rS rSrSrSrSr " S S\5      rSU 4S jjr	S r
\R                  SS	 j5       r\R                  SS
 j5       r\R                  SS j5       r\R                  S 5       rS rS rS rS rS rS rU 4S jrU 4S jrS rSrU =r$ )rk  i
  r   r   rn   c                       \ rS rSrSrg)Insert.DefaultValuesExceptioni
  ra   Nr  ra   rg   rd   DefaultValuesExceptionr  
      Trg   r  c                 p   > [         [        U ]
  " U40 UD6  X l        X0l        X@l        S U l        SU l        g r  )r  rk  r  _insertrO  _on_conflict_query_type_as_rowcount)rb   rU  ri  r  rr  r  r  s         rd   r  Insert.__init__
  s7    fd$U5f5'!rg   c                     [        S5      e)Nz*INSERT queries cannot have a WHERE clause.r  r  s     rd   r  Insert.where
  s    !"NOOrg   c                     Xl         g r`   )r	  )rb   r	  s     rd   as_rowcountInsert.as_rowcount
  s    (rg   c                 B    U(       a  [        S5      U l        g S U l        g )NIGNOREr  r  )rb   ignores     rd   on_conflict_ignoreInsert.on_conflict_ignore
  s    4:Jx0rg   c                 B    U(       a  [        S5      U l        g S U l        g Nrp  r  )rb   r   s     rd   on_conflict_replaceInsert.on_conflict_replace
  s    5<Jy1$rg   c                 P    U(       d  U(       a  [        U0 UD6U l        g S U l        g r`   r  r  s      rd   rr  Insert.on_conflict
  s#    =AVZ88"& 	rg   c                     U R                   (       d  U R                  S5      eU R                  U R                   4U5      $ )NError: no data to insert.)r  r  _generate_insertrh  s     rd   _simple_insertInsert._simple_insert
  s4    ||--.IJJ$$dll_c::rg   c                     0 $ r`   ra   r  s    rd   get_default_dataInsert.get_default_data
  s    	rg   c                     U R                   R                  (       aV  U R                   R                   Vs/ s H4  nXR                   R                  :w  d  M  [        U R                   U5      PM6     sn$ g s  snf r`   )rU  rO  rP  r   )rb   cols     rd   get_default_columnsInsert.get_default_columns
  s`    ::8<

8K8K 78Kjj555 -GDJJ,8K 7 7 7s   A3A3c                   ^ [        U5      nU R                  nU R                  5       nU(       d   [        U5      n[        U[        5      (       d  U R                  5       nUc  [        S5      eO/ nU H?  n[        U[        5      (       a  [        U R                  U5      nUR                  U5        MA     [        U5      n	[        U5      U	-
   H  n
UR                  U
5        M     [        UU4S jS9n[         R"                  " [        U45      U5      nO/ n[        5       nU HS  n[        U[        5      (       a  [        U R                  U5      nOUnUR                  U5        UR%                  U5        MU     Un[        UU4S jS9 H  n
X;  d  M
  UR                  U
5        M     [        5       n[        5       n0 nU H  nXR&                  /n[        U[(        5      (       a}  UR&                  UR*                  :w  a  UR                  UR*                  5        UR,                  (       a  UR%                  U5        [        U[.        5      (       a  UR%                  U5        UUU'   M     TR1                  [3        U5      5      R5                  S5        U Vs/ s H(  nU[        U[(        5      (       a  UR6                  OS 4PM*     nn/ nU H  n/ n[        U[        5      n[9        U5       Hz  u  nu  nn U(       a  UU    H	  n UU   n  O   [:        eUU   n [        U[@        5      (       a  [        U[B        5      (       a  X;   a  [E        UUSS	9nUR                  U5        M|     UR                  [3        U5      5        M     U(       d  U R                  S
5      eTRG                  SS9   TR1                  [I        U5      5      sS S S 5        $ ! [         a    U R                  S5      ef = fs  snf ! [:         a     GM  f = f! [:        [<        4 aF    X;   a  XX   n[?        U5      (       a  U" 5       n GN!X;   a  S n GN+[        SUR&                  -  5      ef = f! , (       d  f       g = f)NzError: no rows to insert.z!Bulk insert must specify columns.c                 &   > U R                  T5      $ r`   r3  r  ri  s    rd   r|   )Insert._generate_insert.<locals>.<lambda>
      8H8H8Mrg   r  c                 &   > U R                  T5      $ r`   r3  r*  s    rd   r|   r+  
  r,  rg   z VALUES zMissing value for %s.F)r^  r}  r  Tr<  )%r~  rO  r"  nextStopIterationr  rz   r   r&  r  r  r   rU  r  r  r  	itertoolschainr  r  r2   column_namenullr6   rV  r  rD  r  	enumerater   rs  	callable_ri  rA   rY   rx  r  )rb   ri  ri  	rows_iterr  defaultsr  accumrU  
column_setr%  clean_columnsseen
column_obj	fk_fieldsnullable_columnsvalue_lookupslookupscolumns_converters
all_valuesr  is_dictrg  r^  lookupvals     `                       rd   r  Insert._generate_insert
  s   L	-- ((* O9o c7++224?$%HII # !F!&*55!(V!<LL( " !Z
MJ6CLL% 7 !,MN!cVi@IM5D!fj11!(V!<J!'J$$Z0$ " $Gh,MN?NN3' O E	5F{{+G&%((;;&"4"44NN6#5#56;;$((0fo66MM&)$+M&!  	 )*22:> "#! 
65(A(AV__tL! 	 # 
CF g.G*34F*G&&FIP '4F&;F(&)&k"'	 '< #+N!!f "#t,,C1G1G171DyGCc"= +H@ .v67G J --.IJJt,77=45 -,G ! O112MNNOl#& $,1T1 !*- P)&.$S>>"%%C3"()@6;;)NOOP( -,s_   O /O7;PO<PP4Q'O4<
P	P
P	P0Q$Q$Q$'
Q5c                     UR                  [        U R                  5      5      R                  S5      R                  U R                  5      $ r   )rV  r  rO  rD  r  rh  s     rd   _query_insertInsert._query_insert/  s5    %dmm45T\\"	$rg   c                 |    U R                   (       d  UR                  S5      $ U R                   R                  U5      $ NzDEFAULT VALUES)r}  rD  default_values_insertrh  s     rd   _default_valuesInsert._default_values5  s.    ~~;;/00~~33C88rg   c                 :  > [         [        U ]  U5        UR                  5          S nU R                  b  U R                  R                  X5      nUR                  U=(       d    [        S5      5      R                  S5      R                  U R                  5      R                  S5        [        U R                  [        5      (       a9  U R                  (       d(   U R                  U5        [        R"                  U l        O}[        U R                  [&        [        45      (       a'  U R)                  U5        [        R*                  U l        O1U R-                  U R                  U5        [        R.                  U l        U R                  b>  U R                  R1                  X5      nUb   UR                  S5      R                  U5        U R3                  U5      sS S S 5        $ ! U R                   a    U R!                  U5         GNf = f! , (       d  f       g = f)NINSERTz INTO r   )r  rk  rR  rx  r  r  rV  rQ   rD  rU  rz   r  r   rO  r  r  rM  SIMPLEr  rG  rH  QUERYr  MULTIr  r  )rb   ri  stmtr   r  s       rd   rR  Insert.__sql__:  s   fd#C(D  ,((??Jc$'#h-(ghc$**ogcl$,,00.'', $*== DLL;*<==""3'#)<< %%dllC8#)<<   ,**>>sI%KK$((0'',;   22 .((-.  s1   B5HG$,C.H$!H	HH		H
Hc                   > U R                   cH  UR                  (       a7  U R                  R                  (       a  U R                  R                  4U l          [        [
        U ]  U5      $ ! U R                   a     g f = fr`   )rz  returning_clauserU  rP  r  rk  r  r  )rb   r  r  s     rd   r  Insert._execute[  se    ??"x'@'@zz&&#zz668DO	/99** 		s   A+ +A>=A>c                     U R                   (       a  U$ U R                  (       a  UR                  U5      $ UR                  X R                  5      $ r`   )r  r	  r  last_insert_idr  r  s      rd   r  Insert.handle_resultd  sA    M))&11&&v/?/?@@rg   )r	  rO  r  r  r  rz  NNNr  )rh   ri   rj   rk   rQ  rR  rS  	Exceptionr  r  r  ri  rT  r  r  r  rr  r  r"  r&  r  rH  rM  rR  r  r  rl   r  r  s   @rd   rk  rk  
  s    FEE11"P 
YY) ) 
YYE E 
YYG G 
YY( (;
7
p6d$9
-BA Arg   rk  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )rx  il  c                   > [         [        U ]  U5        UR                  SS9   UR	                  S5      R                  U R                  5        U R                  bC  UR                  5          UR	                  S5      R                  U R                  5        S S S 5        U R                  U5        U R                  U5      sS S S 5        $ ! , (       d  f       N9= f! , (       d  f       g = f)NTr<  DELETE FROM r  )r  rx  rR  rx  rD  rV  rU  r  rt  r7  r  r  s     rd   rR  Delete.__sql__m  s    fd#C(t,KK'++DJJ7{{&%%'KK	*..t{{; (   %'', -, (' -,s$   AC,+C
)C

C	C
C)ra   )rh   ri   rj   rk   rR  rl   r  r  s   @rd   rx  rx  l  s    
- 
-rg   rx  c                       \ rS rSr  S	S jr\R                  S
S j5       r\R                  S 5       r\R                  SS j5       r	S r
Srg)r9   iz  Nc                     Xl         [        U[        5      (       d  [        U5      OUU l        X0l        X`l        X@l        XPl        Xpl	        g r`   )
rq  rz   rS   rj  _table_expressionsr  _unique_safe_using)rb   r  rU  r  uniquesafer  usings           rd   r  Index.__init__{  s:    
+5eU+C+CfUm'
rg   c                     Xl         g r`   )rg  )rb   rg  s     rd   rj  
Index.safe  s    
rg   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g r`   r  r  s     rd   r  Index.where  r  rg   c                     Xl         g r`   )rh  )rb   rh  s     rd   rk  Index.using  s    rg   c                 $   U R                   (       a  SOSnUR                  SS9   UR                  U5        U R                  (       a  UR                  S5        UR                  R
                  (       a  [        U R                  [        5      (       ae  U R                  R                  (       aJ  [        U R                  R                  U R                  5      n[        U R                  R                  5      nO![        U R                  5      nU R                  nUR                  U5        U R                  b9  UR                  R                  (       a  UR                  SU R                  -  5        UR                  S5      R                  U5      R                  S5        U R                  b9  UR                  R                  (       d  UR                  S	U R                  -  5        UR                  [!        U R"                   Vs/ s H%  n[        U[$        5      (       a  ['        U5      OUPM'     sn5      5        U R(                  b*  UR                  S
5      R                  U R(                  5        S S S 5        U$ s  snf ! , (       d  f       U$ = f)NzCREATE UNIQUE INDEX zCREATE INDEX Tr<  IF NOT EXISTS z	 USING %sr  r   z	USING %s r  )rf  rx  rD  rg  r+  index_schema_prefixrz   rd  rS   rQ  rj  rq  rh   rV  rh  index_using_precedes_tabler  re  r  rQ   r  )rb   ri  	statement
index_name
table_namerR  s         rd   rR  Index.__sql__  s   .2ll*	t,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$ --&/-D (j99D	tC-&/ 0 1 {{&I&**4;;7C -F 
&/; -,F 
s   GJ ,I;/AJ ;J  
J)re  rq  rg  rd  rf  rh  r  )FFNNr  r`   )rh   ri   rj   rk   r  ri  rT  rj  r  rk  rR  rl   ra   rg   rd   r9   r9   z  sZ    DI#' 
YY  
YY9 9
 
YY %rg   r9   c                   6   ^  \ rS rSr  SU 4S jjrS rSrU =r$ )rB   i  c           
        > Xl         Uc  U R                  X5      nUc?  U H9  n[        U[        5      (       d  M  [	        US5      (       d  M-  UR
                  nM;     [        [        U ]#  UUR                  R                  UUUUUS9  g )N
index_type)r  rU  r  ri  rj  r  rk  )rF  _generate_name_from_fieldsrz   r2   r  r}  r  rB   r  rT  rU  )
rb   r  fieldsri  rj  r  rk  r  fieldr  s
            rd   r  ModelIndex.__init__  s    <225AD=eU++|0L0L!,,E   	j$(++## 	) 	rg   c                 t   / nU H  n[        U[        5      (       a$  UR                  UR                  5       S   5        M<  [        U[        5      (       a%  [        U[
        5      (       d  UR                  5       n[        U[
        5      (       d  M  UR                  UR                  5        M     U(       d  [        S5      e[        R                  " SSSR                  U5      5      nUR                  nUR                  (       a  UR                  OUR                  n[!        SR                  Xu45      5      $ )Nr   zJUnable to generate a name for the index, please explicitly specify a name.[^\w]+r0  r  )rz   r  r  r   ri  r2   r  r2  r  rern  r[  rT  legacy_table_namesr  ry  _truncate_constraint_name)rb   r  r  r8  r  clean_field_namesrP  prefixs           rd   r~  %ModelIndex._generate_name_from_fields  s    E%,,U[[]1-.eT**:eU3K3K!LLNEeU++LL!2!23   : ; ; FF9b#((5/B{{"554??(62M)NOOrg   )rF  )FTNNN)rh   ri   rj   rk   r  r~  rl   r  r  s   @rd   rB   rB     s    EI"&$P Prg   rB   c                     [        U 5      U:  aE  [        R                  " U R                  S5      5      R	                  5       nU S US-
   < SUS S < 3n U $ )Nutf-8rK  r     )r   hashlibmd5encode	hexdigest)r  maxlen	name_hashs      rd   r  r    sQ    
:KK
 1 1' :;EEG	 *=VaZ 99Ra=I
rg   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PeeweeExceptioni  c                    > U(       a(  [        US   [        5      (       a  US   USS  sU l        n[        [        U ]  " U6   g r  )rz   r]  origr  r  r  )rb   r  r  s     rd   r  PeeweeException.__init__  s<    JtAw	22"1gtABxODItot-t4rg   )r  rh   ri   rj   rk   r  rl   r  r  s   @rd   r  r    s    5 5rg   r  c                       \ rS rSrSrg)r8   i  ra   Nr  ra   rg   rd   r8   r8     r  rg   r8   c                       \ rS rSrSrg)r%   i  ra   Nr  ra   rg   rd   r%   r%     s    drg   r%   c                       \ rS rSrSrg)r'   i  ra   Nr  ra   rg   rd   r'   r'     s    rg   r'   c                       \ rS rSrSrg)r;   i  ra   Nr  ra   rg   rd   r;   r;     s    Trg   r;   c                       \ rS rSrSrg)r<   i  ra   Nr  ra   rg   rd   r<   r<         trg   r<   c                       \ rS rSrSrg)r=   i  ra   Nr  ra   rg   rd   r=   r=     s    Drg   r=   c                       \ rS rSrSrg)rD   i  ra   Nr  ra   rg   rd   rD   rD     s    rg   rD   c                       \ rS rSrSrg)rF   i  ra   Nr  ra   rg   rd   rF   rF     r  rg   rF   c                       \ rS rSrSrg)rK   i  ra   Nr  ra   rg   rd   rK   rK     r  rg   rK   c                   *    \ rS rSrSrS rS rS rSrg)ExceptionWrapperi  
exceptionsc                     Xl         g r`   r  )rb   r  s     rd   r  ExceptionWrapper.__init__  s    $rg   c                     g r`   ra   r  s    rd   r  ExceptionWrapper.__enter__  s    rg   c                    Uc  g [         bI  UR                  U R                  ;  a/  [        U[         R                  5      (       a  UR
                  S   nOO[        bH  UR                  U R                  ;  a.  [        U[        R                  5      (       a  UR
                  S   nUR                  U R                  ;   a9  U R                  UR                     nUR                  n[        XD" U/UQ76 U5        g g r  )		pg_errorsrh   r  ra  Error	__bases__
pg3_errorsr  r   )rb   rI  	exc_value	tracebacknew_typeexc_argss         rd   r  ExceptionWrapper.__exit__  s     X%6%6doo%M(IOO44))!,H#DOO3(J$4$455))!,H/x'8'89H ~~HHhy<8<iH 0rg   N)	rh   ri   rj   rk   r  r  r  r  rl   ra   rg   rd   r  r    s    I%Irg   r  )ConstraintErrorr%   r'   r;   r<   r=   rD   rF   rK   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  rV  r  ri  rU  ColumnMetadata)r  	data_typer3  rS  rU  rI  ForeignKeyMetadata)rU  
dest_tabledest_columnrU  ViewMetadata)r  rV  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )_ConnectionStatei3  c                 N   > [         [        U ]
  " S0 UD6  U R                  5         g r-  )r  r  r  reset)rb   r  r  s     rd   r  _ConnectionState.__init__4  s    .88

rg   c                 <    SU l         S U l        / U l        / U l        g rs  closedconnri  transactionsr  s    rd   r  _ConnectionState.reset8  s    	rg   c                 :    Xl         SU l        / U l        / U l        g r  )r  r  ri  r  rb   r  s     rd   set_connection_ConnectionState.set_connection>  s    	rg   r  )	rh   ri   rj   rk   r  r  r  rl   r  r  s   @rd   r  r  3  s     rg   r  c                       \ rS rSrSrg)_ConnectionLocaliE  ra   Nr  ra   rg   rd   r  r  E  s    4rg   r  c                   $    \ rS rSrSrS rS rSrg)	_NoopLockiF  ra   c                     U $ r`   ra   r  s    rd   r  _NoopLock.__enter__H  s    rg   c                     g r`   ra   rH  s       rd   r  _NoopLock.__exit__I  s    4rg   N)rh   ri   rj   rk   r  r  r  rl   ra   rg   rd   r  r  F  s    I$7rg   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)r  iL  r  c                     Xl         g r`   r  rb   r  s     rd   r  ConnectionContext.__init__N  s    bGrg   c                 x    U R                   R                  5       (       a  U R                   R                  5         g g r`   )r  	is_closedconnectr  s    rd   r  ConnectionContext.__enter__O  s(    77GGOO rg   c                 8    U R                   R                  5         g r`   )r  closerH  s       rd   r  ConnectionContext.__exit__R  s    477==?rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                  t   > [        TR                  5         T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r  r  r  s     rd   r  )ConnectionContext.__call__.<locals>.innerT  s(    "477+4*6* ,++   )
7r   r  s   `` rd   r  ConnectionContext.__call__S  r  rg   N)
rh   ri   rj   rk   r  r  r  r  r  rl   ra   rg   rd   r  r  L  s    I( Crg   r  c                      \ rS rSr\r0 r0 rSrSr	Sr
\rSrSrSrSrSrSrSrSrSrSr   SCS jrS rS	 rS
 rS rS rSDS jrS rS rS r S r!S r"S r#S r$SES jr%SES jr&SFS jr'S r(S r)S r*S r+S r,SFS jr-S r.S r/S  r0S! r1S" r2S# r3S$ r4S% r5S& r6S' r7S( r8S) r9S* r:S+ r;S, r<S- r=S. r>S/ r?SFS0 jr@SFS1 jrASFS2 jrBSFS3 jrCSFS4 jrDSFS5 jrES6 rFS7 rGS8 rHS9 rIS: rJS; rKS< rLS= rMSGS> jrNSGS? jrOS@ rP\QSA 5       rRSBrSg)Hr$   i[  r_  r  NFTc                 2   [        [        U R                  5      U l        [        [        U R
                  5      U l        U(       a  U R                  R                  U5        U(       a  U R                  R                  U5        Xpl        X l	        U(       a*  [        5       U l        [        R                  " 5       U l        O[        5       U l        [!        5       U l        U(       a  [#        S5        Ub  [#        S5        0 U l        U R&                  " U40 UD6  g )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.)rX  FIELDfield_types_field_typesrE   rv  _operationsr   autoconnectthread_safer  _state	threadingLock_lockr  r  r   connect_paramsinit)	rb   r  r  autorollbackr  rv  
autocommitr  r  s	            rd   r  Database.__init__p  s     'ud.>.>?%b$//:$$[1##J/&&*,DK")DJ*,DK"DJ I J
 ! < = !		(%f%rg   c                     U R                  5       (       d  U R                  5         Xl        U R                  R	                  U5        [        U5      (       + U l        g r`   )r  r  r  r  r   ro  deferred)rb   r  r  s      rd   r  Database.init  s?    ~~JJL ""6* N*rg   c                     U R                  5       (       a  U R                  5         U R                  5       nU R                  R                  R                  U5        UR                  5         U $ r`   )r  r  r  r  ri  r  r  rh  s     rd   r  Database.__enter__  sG    >>LLNkkms#rg   c                 ,   U R                   R                  R                  5       n UR                  XU5        U R                   R                  (       d  U R	                  5         g g ! U R                   R                  (       d  U R	                  5         f f = fr`   )r  ri  r  r  r  )rb   rI  rJ  rK  ri  s        rd   r  Database.__exit__  s^    kkoo!!#	LLF3;;??

 #4;;??

 #s   A% %.Bc                     [        U 5      $ r`   r  r  s    rd   r  Database.connection_context  r  rg   c                     [         er`   r  r  s    rd   _connectDatabase._connect  r  rg   c                 j   U R                      U R                  (       a  [        S5      eU R                  R                  (       d  U(       a
   S S S 5        g[        S5      eU R                  R                  5         [           U R                  R                  U R                  5       5        U R                  c%  U R                  U R                  R                  5        U R                  U R                  R                  5        S S S 5        S S S 5        g! , (       d  f       N= f! , (       d  f       g= f)N@Error, database must be initialized before opening a connection.FzConnection already opened.T)r  r  r<   r  r  rF   r  __exception_wrapper__r  r  server_version_set_server_versionr  _initialize_connection)rb   reuse_if_opens     rd   r  Database.connect  s    ZZ}}$ &D E E;;%%   Z ''CDDKK&**4==?;&&.,,T[[-=-=>++DKK,<,<=	 '   '& Z s+   A D$+D$BDD$
D!	D$$
D2c                     g r`   ra   r  s     rd   r
  Database._initialize_connection      rg   c                     SU l         g r  r  r  s     rd   r	  Database._set_server_version  s
    rg   c                    U R                      U R                  (       a  [        S5      eU R                  5       (       a  [	        S5      eU R
                  R                  (       + n U(       a4  [           U R                  U R
                  R                  5        S S S 5        U R
                  R                  5         UsS S S 5        $ ! , (       d  f       N3= f! U R
                  R                  5         f = f! , (       d  f       g = f)Nr  z7Attempting to close database while transaction is open.)r  r  r<   in_transactionrF   r  r  r  _closer  r  )rb   is_opens     rd   r  Database.close  s    ZZ}}$ &D E E""$$& (> ? ?++,,,G$.DKK$4$45 / !!# Z /. !!# Zs<   AC6&C3&CC!C6
C	CC33C66
Dc                 $    UR                  5         g r`   )r  r  s     rd   r  Database._close  s    

rg   c                 .    U R                   R                  $ r`   r  r  r  s    rd   r  Database.is_closed  s    {{!!!rg   c                 8    U R                   R                  (       + $ r`   r  r  s    rd   is_connection_usableDatabase.is_connection_usable  s    ;;%%%%rg   c                 x    U R                  5       (       a  U R                  5         U R                  R                  $ r`   )r  r  r  r  r  s    rd   
connectionDatabase.connection  s(    >>LLN{{rg   c                     Ub  [        S5        U R                  5       (       a-  U R                  (       a  U R                  5         O[	        S5      eU R
                  R                  R                  5       $ )N,"commit" has been deprecated and is a no-op.z&Error, database connection not opened.)r   r  r  r  r<   r  r  r  )rb   commitnamed_cursors      rd   r  Database.cursor  sU    IJ>>$%MNN{{&&((rg   c                     Ub  [        S5        [        R                  X45        [           U R	                  5       nUR                  X=(       d    S5        S S S 5        U$ ! , (       d  f       W$ = fNr$  ra   )r   loggerdebugr  r  r  )rb   rV  r  r%  r  s        rd   execute_sqlDatabase.execute_sql  sY    IJc]#"[[]FNN3"- #  #" s   +A  
A/c                     Ub  [        S5        U R                  " S0 UD6nUR                  U5      R                  5       u  pVU R	                  XV5      $ r)  )r   r  rV  rl  r,  )rb   rl  r%  context_optionsri  rV  r  s          rd   r  Database.execute  sM    IJ""5_5ggen**,,,rg   c                    U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  S.$ )N)r  rv  rc  r_  r  r  r  r  ru  rv  r6  r  )r  r  rc  r_  r  r  r  r  ru  rv  r6  r  r  s    rd   get_context_optionsDatabase.get_context_options  sp    ,,**ZZZZ+/+K+K"&"9"9#33//#'#;#;*.*I*I"11
 	
rg   c                 v    U R                  5       nU(       a  UR                  U5        U R                  " S0 UD6$ r-  )r2  r   context_class)rb   r/  r  s      rd   r  Database.get_sql_context  s3    **,NN?+!!,G,,rg   c                     [         er`   r  rb   rr  rl  s      rd   r  Database.conflict_statement  r  rg   c                     [         er`   r  r8  s      rd   r  Database.conflict_update  r  rg   c           	      
   UR                   (       a  [        S5      n[        UR                    Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     sn5      nUR                  b!  [        U[        S5      UR                  /5      nO7[        S5      nUR                  n[        U[        5      (       a  [        U5      n/ nUR                  (       ab  UR                   HR  n[        [        S5      [        U5      4SS9n[        [        U5      [        S5      U45      n	UR                  U	5        MT     UR                  (       a  UR                  R                  5        H  u  p[        U[        5      (       d]  [        U
[        5      (       a  [        UR                   U
5      n
[        U
["        5      (       a  U
R%                  U5      nO['        USS	9nO[)        U5      nUR                  [        [        U
5      [        S5      U45      5        M     X5[        S
5      [+        U5      /nUR,                  (       a/  UR/                  [        S5      [)        UR,                  5      45        [        U5      $ s  snf )NON CONFLICTrJ  zON CONFLICT ON CONSTRAINTr1   rZ  rb  r   Fr  zDO UPDATE SET)r  rQ   r  rz   r  rj  r  r  r  r  rk  r  r  rj  ri  r   rU  r2   r  rY   rM   r  r  rg  )rb   rr  rl  rT  r%  targetupdatesrU  excluded
expressionr  r  r/  s                rd   _build_on_conflict_update"Database._build_on_conflict_update   s   ''}%D%&77'97C  *#z::sC7'9 :F **6!63w<#.#>#>#@ A 23D 55F&*--  %//#S_mF6K$L),.%}V'<c#h'/'1 2
z* 0 #++113!!T** "!Z00#EKK3!!U++JJqM!!E2&q)Axq)93s8Q(GHI 4 s?3]75KLLL#g,{7I7I(JKLQ'9s   ,J c                     UR                   $ r`   )	lastrowidrb   r  
query_types      rd   rZ  Database.last_insert_idM  s    rg   c                     UR                   $ r`   )rowcountrb   r  s     rd   r  Database.rows_affectedP  s    rg   c                 $    UR                  S5      $ rK  rD  rh  s     rd   rL  Database.default_values_insertS  s    {{+,,rg   c                 >    U R                  5       R                  5       $ r`   )r  r  r  s    rd   session_startDatabase.session_startV  s    !++--rg   c                      U R                  5       nUR                  U R                  5       S9  g! [         a     gf = fNFbeginT)pop_transactionrs  r%  r  rb   txns     rd   session_commitDatabase.session_commitY  sE    	&&(C 	

,,.
/  		   0 
==c                      U R                  5       nUR                  U R                  5       S9  g! [         a     gf = frU  )rX  rs  rollbackr  rY  s     rd   session_rollbackDatabase.session_rollbacka  sE    	&&(C 	4..01  		r]  c                 @    [        U R                  R                  5      $ r`   )ro  r  r  r  s    rd   r  Database.in_transactioni  s    DKK,,--rg   c                 N    U R                   R                  R                  U5        g r`   )r  r  r  )rb   r  s     rd   push_transactionDatabase.push_transactionl  s      ''4rg   c                 J    U R                   R                  R                  5       $ r`   )r  r  r  r  s    rd   rX  Database.pop_transactiono  s    {{''++--rg   c                 @    [        U R                  R                  5      $ r`   )r   r  r  r  s    rd   transaction_depthDatabase.transaction_depthr  s    4;;++,,rg   c                 l    U R                   R                  (       a  U R                   R                  S   $ g Nr{  )r  r  r  s    rd   top_transactionDatabase.top_transactionu  s)    ;;##;;++B// $rg   c                      [        U /UQ70 UD6$ r`   r  r  s      rd   r  Database.atomicy  r  rg   c                     [        U 5      $ r`   r  r  s    rd   r  Database.manual_commit|  r  rg   c                      [        U /UQ70 UD6$ r`   r  r  s      rd   r  Database.transaction  r  rg   c                     [        U 5      $ r`   r  r  s    rd   r  Database.savepoint  r  rg   c                     U R                  5       (       a  U R                  5         [           U R                  5       R	                  S5        S S S 5        g ! , (       d  f       g = f)NBEGINr  r  r  r  r  r  s    rd   rW  Database.begin  s;    >>LLN"KKM!!'* #""s    A
A#c                     [            U R                  5       R                  S5        S S S 5        g ! , (       d  f       g = f)NROLLBACKr  r  r  r  s    rd   r_  Database.rollback  s%    "KKM!!*- #""    0
>c                     [            U R                  5       R                  S5        S S S 5        g ! , (       d  f       g = f)NCOMMITr~  r  s    rd   r%  Database.commit  s%    "KKM!!(+ #""r  c              #      #    [        X5       H)  nU R                  5          U H  nUv   M	     S S S 5        M+     g ! , (       d  f       M=  = f7fr`   )r    r  )rb   r  r  r  r  s        rd   batch_commitDatabase.batch_commit  s7     R^E CI !  $s   A<A
A	Ac                     [        U5      (       a.  UnUR                  R                  nUR                  R                  nXR	                  US9;   $ )N)rT  )rS  rT  ry  rT  
get_tables)rb   ry  rT  r  s       rd   table_existsDatabase.table_exists  sD    JE//J[[''F__F_;;;rg   c                     [         er`   r  )rb   rT  s     rd   r  Database.get_tables  r  rg   c                     [         er`   r  rb   rU  rT  s      rd   get_indexesDatabase.get_indexes  r  rg   c                     [         er`   r  r  s      rd   get_columnsDatabase.get_columns  r  rg   c                     [         er`   r  r  s      rd   get_primary_keysDatabase.get_primary_keys  r  rg   c                     [         er`   r  r  s      rd   get_foreign_keysDatabase.get_foreign_keys  r  rg   c                     [         er`   r  )rb   seqs     rd   sequence_existsDatabase.sequence_exists  r  rg   c                 L    [        U5       H  nUR                  " S0 UD6  M     g r-  )sort_modelscreate_table)rb   modelsoptionsr  s       rd   create_tablesDatabase.create_tables  s"     (E)) )rg   c                 ^    [        [        U5      5       H  nUR                  " S0 UD6  M     g r-  )r  r  
drop_table)rb   r  r  r  s       rd   drop_tablesDatabase.drop_tables  s'    k&12E&v& 3rg   c                     [         er`   r  rb   	date_part
date_fields      rd   extract_dateDatabase.extract_date  r  rg   c                     [         er`   r  r  s      rd   truncate_dateDatabase.truncate_date  r  rg   c                     [         er`   r  rb   r  s     rd   to_timestampDatabase.to_timestamp  r  rg   c                     [         er`   r  r  s     rd   from_timestampDatabase.from_timestamp  r  rg   c                 *    [         R                  5       $ r`   )r5   randomr  s    rd   r  Database.random  s    yy{rg   c                 6    U H  nUR                  XUS9  M     g )N)	bind_refsbind_backrefs)r&  )rb   r  r  r  r  s        rd   r&  Database.bind  s    EJJtJN rg   c                     [        XX#5      $ r`   _BoundModelsContext)rb   r  r  r  s       rd   r`  Database.bind_ctx  s    "6JJrg   c                     UR                  [        5       R                  [        S5      5      R	                  [        S5      5      5      $ )N0rV  rP   r  rQ   r  rh  s     rd   get_noop_selectDatabase.get_noop_select  s1    wwvx''C177CABBrg   c                    ^  [        T S5      (       d&   " U 4S jS5      n[        S[        4SU05      T l        T R                  $ )Nr  c                      > \ rS rSr Y rSrg)Database.Model.<locals>.Metai  ra   Nr  r  s   rd   r  r    r  rg   r  r  r  r  s   ` rd   rA   Database.Model  r  rg   )r  r  r  r  r  r  r  r  r  r  r  )TFNNNTr  r  r`   TT)Trh   ri   rj   rk   r#   r5  r  rv  rc  r_  r  r  r  r  ru  rv  r6  r  rW  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  r2  r  r  r  rC  rZ  r  rL  rR  r[  r`  r  re  rX  rj  rn  r  r  r  r  rW  r_  r%  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r`  r  r  rA   rl   ra   rg   rd   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  rg   r$   c                 2   ^  U 4S jnU 4S jn[        X5      $ )Nc                 &   > U R                  T5      $ r`   pragmar  s    rd   r  __pragma__.<locals>.__get__  s    {{4  rg   c                 (   > U R                  TU5      $ r`   r  )rb   r   r  s     rd   __set____pragma__.<locals>.__set__  s    {{4''rg   )r  )r  r  r  s   `  rd   
__pragma__r    s    !(G%%rg   c                   F  ^  \ rS rSr\R
                  \R                  \R                  \R                  \R                  \R                  S.r	SSS.r
SrSr\rSrU 4S	 jrSKU 4S jjrS rS rS rS rS r\SS
4S jr\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r \" S5      r!\" S5      r"\" S5      r#\" S5      r$\" S5      r%\&S 5       r'\'RP                  S 5       r'S  r)S! r*S" r+S# r,SLS$ jr-SLS% jr.SMS& jr/SMS' jr0  SNS( jr1SNS) jr2SLS* jr3SLS+ jr4SMS, jr5SMS- jr6S. r7S/ r8S0 r9S1 r:S2 r;S3 r<S4 r=S5 r>S6 r?S7 r@SMS8 jrAS9 rBSMS: jrCS; rDS< rESMS= jrFSMS> jrGSMS? jrHSMS@ jrISMSA jrJSMSB jrKSC rLSD rMSE rNSF rOSG rPSH rQSI rRSJrSU =rT$ )OrR   i  )r&  r'  r)  r1  r*  r7  GLOBr	  )r	  r
  Tr{  Fc                 Z  > UR                  SS5      U l        [        [        U ]  " U/UQ70 UD6  0 U l        0 U l        0 U l        0 U l        / U l	        [        5       U l        0 U l        U R                  [        SS5        U R                  [        SS5        U R                   S:  U l        g )Npragmasra   r  rn   
date_trunc)r      r   )r  _pragmasr  rR   r  _aggregates_collations
_functions_window_functions_table_functionsr  _extensions	_attachedregister_functionr   r   r  r  )rb   r  r  r  r  s       rd   r  SqliteDatabase.__init__  s    

9b1nd,XGGG!# "50+qA1<C"11Z?rg   Nc                 .  > Ub  X l         [        U R                   [        5      (       a(  [        U R                   R	                  5       5      U l         Ub&  [
        S:  a  [        R                  " S5        X@l        X0l	        [        [        U ]2  " U40 UD6  g )N)r   #   r   z.RETURNING clause requires Sqlite 3.35 or newer)r  rz   r  rd  rj  __sqlite_version__r   r   rW  _timeoutr  rR   r  )rb   r  r  timeoutrW  r  r  s         rd   r  SqliteDatabase.init  sr    #MdmmT** !4!4!67DM'!J.NO$4!nd(<V<rg   c                     g r`   ra   r  s     rd   r	  "SqliteDatabase._set_server_version  r  rg   c                     [         c  [        S5      e[         R                  " U R                  4U R                  S S.U R
                  D6n U R                  U5        U$ !   UR                  5         e = f)NzSQLite driver not installed!)r  isolation_level)sqlite3r8   r  r  r  r  _add_conn_hooksr  r  s     rd   r  SqliteDatabase._connect  ss    ?&'EFFt}} Ldmm/3L7;7J7JL	  & 	JJLs   A A2c                    U R                   (       a  U R                  U5        U R                  (       a  U R                  U5        U R	                  U5        U R                  U5        U R                  U5        U R                  S:  a  U R                  U5        U R                  (       a$  U R                   H  nUR                  U5        M     U R                  (       a  U R                  U5        g g )N)r      r   )r  _attach_databasesr  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsr  registerr  _load_extensions)rb   r  table_functions      rd   r  SqliteDatabase._add_conn_hooks  s    >>""4(==d#d#d#T"*,''-  "&"7"7''- #8!!$' rg   c                     UR                  5       nU R                   H  u  p4UR                  SU< SU< S35        M!     UR                  5         g )NzPRAGMA z = ;)r  r  r  r  )rb   r  r  r  r   s        rd   r  SqliteDatabase._set_pragmas-  s7    !]]MFNN>? +rg   c                     UR                  5       nU R                  R                  5        H  u  p4UR                  SU< SU< S35        M!     UR	                  5         g )NATTACH DATABASE "" AS "r  )r  r  rj  r  r  )rb   r  r  r  r  s        rd   r   SqliteDatabase._attach_databases3  s@    ,,.HDNNRFG /rg   c                 f   Ub
  SU< SU< 3nSU-  nU[         LaY  USU=(       d    S-  -  nU(       a@  [        U R                  =(       d    S5      nX&U'   [        UR	                  5       5      U l        OU(       a  [        S5      eU R                  U5      R                  5       nU(       a  US   $ g )Nr  ".z	PRAGMA %sz = %sr   ra   z/Cannot specify a permanent pragma without value)SENTINELr  r  rd  rj  r  r,  fetchone)rb   rm  r   	permanentrT  rV  r  r  s           rd   r  SqliteDatabase.pragma9  s    %s+CC 7ejq))Ct}}23$ $W]]_ 5NOOs#,,.q6M rg   
cache_sizeforeign_keysjournal_modejournal_size_limit	mmap_size	page_sizeread_uncommittedsynchronouswal_autocheckpointapplication_iduser_versiondata_versionc                     U R                   $ r`   )r  r  s    rd   r  SqliteDatabase.timeoutV  s    }}rg   c                     U R                   U:X  a  g Xl         U R                  5       (       d  U R                  SUS-  -  5        g g )NzPRAGMA busy_timeout=%d;i  )r  r  r,  )rb   secondss     rd   r  r	  Z  sB    ==G#~~ 6'D.IJ  rg   c                 t    U R                   R                  5        H  u  nu  p4UR                  X$U5        M     g r`   )r  rj  create_aggregaterb   r  r  klass
num_paramss        rd   r  SqliteDatabase._load_aggregatese  s4    )-)9)9)?)?)A%D%5!!$E: *Brg   c                 l    U R                   R                  5        H  u  p#UR                  X#5        M     g r`   )r  rj  create_collation)rb   r  r  r5   s       rd   r  SqliteDatabase._load_collationsi  s+    ((..0HD!!$+ 1rg   c                     U R                   R                  5        H*  u  nu  p4nU(       a  SU0O0 nUR                  " X$U40 UD6  M,     g )Ndeterministic)r  rj  create_function)rb   r  r  r5   n_paramsr+	  r  s          rd   r  SqliteDatabase._load_functionsm  sG    37??3H3H3J/D/29Fo}5BF  >v> 4Krg   c                 t    U R                   R                  5        H  u  nu  p4UR                  X$U5        M     g r`   )r  rj  create_window_functionr#	  s        rd   r  %SqliteDatabase._load_window_functionsr  s4    )-)?)?)E)E)G%D%5''%@ *Hrg   c                     X4U R                   U=(       d    UR                  R                  5       '   U R                  5       (       d   U R	                  U R                  5       5        g g r`   )r  rh   rp  r  r  r!  rb   r$	  r  r%	  s       rd   register_aggregate!SqliteDatabase.register_aggregatev  sN    <A;N7!5!5!78~~!!$//"34  rg   c                    ^ ^^ UUU 4S jnU$ )Nc                 .   > TR                  U TT5        U $ r`   )r4	  r$	  r  r%	  rb   s    rd   r  +SqliteDatabase.aggregate.<locals>.decorator|  s    ##E4<Lrg   ra   rb   r  r%	  r  s   ``` rd   	aggregateSqliteDatabase.aggregate{      	 rg   c                    ^ T=(       d    UR                   mU4S jnX1l        XR                  T'   U R                  5       (       d   U R	                  U R                  5       5        g g )Nc                  >   > U [        ST-  5      4-   n[        U5      $ )Nz
collate %s)rQ   r  )r  r  r  s     rd   
_collation5SqliteDatabase.register_collation.<locals>._collation  s%    #lT&9":!<<KK((rg   )rh   r  r  r  r  r!  )rb   r5   r  r@	  s     ` rd   register_collation!SqliteDatabase.register_collation  sR    "r{{	) "!#~~!!$//"34  rg   c                    ^ ^ UU 4S jnU$ )Nc                 ,   > TR                  U T5        U $ r`   )rB	  )r5   r  rb   s    rd   r  +SqliteDatabase.collation.<locals>.decorator  s    ##B-Irg   ra   rb   r  r  s   `` rd   r  SqliteDatabase.collation  s    	 rg   c                     XU4U R                   U=(       d    UR                  '   U R                  5       (       d   U R                  U R	                  5       5        g g r`   )r  rh   r  r  r!  )rb   r5   r  r%	  r+	  s        rd   r   SqliteDatabase.register_function  sE    02/N+,~~  !23  rg   c                     ^ ^^^ UUUU 4S jnU$ )Nc                 0   > TR                  U TTT5        U $ r`   )r  )r5   r+	  r  r%	  rb   s    rd   r  &SqliteDatabase.func.<locals>.decorator  s    ""2tZGIrg   ra   )rb   r  r%	  r+	  r  s   ```` rd   r  SqliteDatabase.func  s    	 	 rg   c                     U=(       d    UR                   R                  5       nX4U R                  U'   U R                  5       (       d   U R	                  U R                  5       5        g g r`   )rh   rp  r  r  r  r!  r3	  s       rd   register_window_function'SqliteDatabase.register_window_function  sS    -u~~++-(-':t$~~''(9:  rg   c                    ^ ^^ UUU 4S jnU$ )Nc                 .   > TR                  U TT5        U $ r`   )rP	  r8	  s    rd   r  1SqliteDatabase.window_function.<locals>.decorator  s    ))%zBLrg   ra   r:	  s   ``` rd   window_functionSqliteDatabase.window_function  r=	  rg   c                     Ub  X!l         U R                  R                  U5        U R                  5       (       d   UR	                  U R                  5       5        g g r`   )r  r  r  r  r 	  r!  )rb   r$	  r  s      rd   register_table_function&SqliteDatabase.register_table_function  sF    J$$U+~~NN4??,-  rg   c                    ^ ^ UU 4S jnU$ )Nc                 ,   > TR                  U T5        U $ r`   )rX	  )r$	  r  rb   s    rd   r  0SqliteDatabase.table_function.<locals>.decorator  s    ((5Lrg   ra   rG	  s   `` rd   r	  SqliteDatabase.table_function  s    	 rg   c                     U R                   U	 g r`   )r  r  s     rd   unregister_aggregate#SqliteDatabase.unregister_aggregate      T"rg   c                     U R                   U	 g r`   )r  r  s     rd   unregister_collation#SqliteDatabase.unregister_collation  ra	  rg   c                     U R                   U	 g r`   )r  r  s     rd   unregister_function"SqliteDatabase.unregister_function  s    OOD!rg   c                     U R                   U	 g r`   )r  r  s     rd   unregister_window_function)SqliteDatabase.unregister_window_function  s    ""4(rg   c                     [        U R                  5       H  u  p#UR                  U:X  d  M    O   gU R                  R                  U5        gr  )r4  r  r  r  )rb   r  r  r$	  s       rd   unregister_table_function(SqliteDatabase.unregister_table_function  sD    #D$9$9:JCzzT! ; !!#&rg   c                 n    UR                  S5        U R                   H  nUR                  U5        M     g rs  )enable_load_extensionr  load_extension)rb   r  	extensions      rd   r	  SqliteDatabase._load_extensions  s.    ""4())I	* *rg   c                     U R                   R                  U5        U R                  5       (       d3  U R                  5       nUR	                  S5        UR                  U5        g g rs  )r  r  r  r!  ro	  rp	  )rb   rq	  r  s      rd   rp	  SqliteDatabase.load_extension  sP    Y'~~??$D&&t,	*  rg   c                 :    U R                   R                  U5        g r`   )r  remove)rb   rq	  s     rd   unload_extensionSqliteDatabase.unload_extension  s    	*rg   c                     X R                   ;   a"  U R                   U   U:X  a  g[        SU-  5      eXR                   U'   U R                  5       (       d  U R                  SU< SU< S35        g)NFzschema "%s" already attached.r	  r		  r  T)r  rF   r  r,  )rb   filenamer  s      rd   attachSqliteDatabase.attach  s`    >>!~~d#x/"#BT#IJJ't~~xNOrg   c                     XR                   ;  a  gU R                   U	 U R                  5       (       d  U R                  SU-  5        g)NFzDETACH DATABASE "%s"T)r  r  r,  r  s     rd   detachSqliteDatabase.detach  s?    ~~%NN4 ~~3d:;rg   c                     U R                   (       d  UR                  $ U[        R                  :X  a	   US   S   $ U$ ! [        [
        [        4 a     U$ f = fr  )rW  rF  rk  rQ  rs  r   	TypeErrorrG  s      rd   rZ  SqliteDatabase.last_insert_id  s]    $$###6==(ay|#  )4 s   = AAc                 h     UR                   $ ! [         a    UR                  R                   s $ f = fr`   rK  r   r  rL  s     rd   r  SqliteDatabase.rows_affected  0    	*??" 	*==)))	*     11c                 B    U(       a  SU-  OSnU R                  U5        g )NzBEGIN %sry  r,  )rb   	lock_typerw  s      rd   rW  SqliteDatabase.begin  s    .7J*W	#rg   c                     [            U R                  R                  R                  5       sS S S 5        $ ! , (       d  f       g = fr`   )r  r  r  r%  r  s    rd   r%  SqliteDatabase.commit  s'    ";;##**, #""	   $5
Ac                     [            U R                  R                  R                  5       sS S S 5        $ ! , (       d  f       g = fr`   )r  r  r  r_  r  s    rd   r_  SqliteDatabase.rollback  s'    ";;##,,. #""r	  c                     U=(       d    SnU R                  SU-  S5      nUR                  5        Vs/ s H  u  o3PM     sn$ s  snf )Nmainz>SELECT name FROM "%s".sqlite_master WHERE type=? ORDER BY name)rU  r,  fetchall)rb   rT  r  r  s       rd   r  SqliteDatabase.get_tables
  sQ    !6!! #9;A#BCMO & 12 1 1222   Ac                 z    SU=(       d    S-  nU R                  US5       Vs/ s H  n[        U6 PM     sn$ s  snf )NzCSELECT name, sql FROM "%s".sqlite_master WHERE type=? ORDER BY namer	  )view)r,  r  )rb   rT  rV  r  s       rd   	get_viewsSqliteDatabase.get_views  sB    #)#3V5.2.>.>sI.NO.Nsc".NOOOs   8c           
      h   U=(       d    SnSU-  nU R                  X1S45      n[        UR                  5       5      n[        5       nU R                  SU< SU< S35      nUR                  5        H3  nUS   n[	        US   5      S:H  n	U	(       d  M"  UR                  U5        M5     0 n
[        U5       HB  nU R                  SU< S	U< S35      nUR                  5        Vs/ s H  owS   PM	     snX'   MD     [        U5       Vs/ s H  n[        UXX   X   X;   U5      PM     sn$ s  snf s  snf )
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	  r  r   r  r  r  )rb   rU  rT  rl  r  index_to_sqlunique_indexesr  r  	is_uniqueindex_columnsrx  s               rd   r  SqliteDatabase.get_indexes  sJ   !6ADJK!!%)9:FOO-. !!#)5#2 3??$Cq6DCFq(Iy""4(	 %  .J%%'-z'; <F;A??;L(M;LCQ;L(MM% / |,. - "#& -. 	. )N.s   $D*D/c                     U R                  SU=(       d    S< SU< S35      nUR                  5        Vs/ s H/  n[        US   US   US   (       + [        US   5      XS	   5      PM1     sn$ s  snf )
Nr	  r	  ".table_info("r	  r   rn   r   rD  rC  )r,  r	  r  ro  )rb   rU  rT  r  r  s        rd   r  SqliteDatabase.get_columns6  sy    !!#)#3V#3U#< =  *,*A qtQqTqt8T!A$Z!M*, 	, ,s   6A/c                     U R                  SU=(       d    S< SU< S35      n[        S UR                  5       5       Vs/ s H  oDS   PM	     sn$ s  snf )Nr	  r	  r	  r	  c                     U S   $ rm  ra   )r  s    rd   r|   1SqliteDatabase.get_primary_keys.<locals>.<lambda>?  s    1R5rg   r   r,  r  r	  rb   rU  rT  r  r  s        rd   r  SqliteDatabase.get_primary_keys<  sN    !!#)#3V#3U#< ="(&//:K"LM"L3A"LMMMs   Ac           	          U R                  SU=(       d    S< SU< S35      nUR                  5        Vs/ s H  n[        US   US   US   U5      PM     sn$ s  snf )Nr	  r	  z".foreign_key_list("r	  r   rn   rC  r,  r	  r  r	  s        rd   r  SqliteDatabase.get_foreign_keysA  si    !!#)#3V#3U#< = "??,.,C #3q63q63q65A,. 	. .s   !Ac                 "    [         R                  $ r`   )r  Binaryr  s    rd   get_binary_typeSqliteDatabase.get_binary_typeG  s    ~~rg   c                     UR                   (       a  UR                   R                  5       OSnU(       a-  US;  a&  [        SUR                   R                  5       -  5      $ g g )Nr0  )nothingr   zINSERT OR %s)r  rp  rQ   upperrb   rr  rl  r  s       rd   r  !SqliteDatabase.conflict_statementJ  sQ    0;0C0C$$**,f$99~(;(;(A(A(CCDD :6rg   c                 J   U R                   S:  aR  [        UR                  UR                  UR                  UR
                  UR                  45      (       a  [        S5      eUR                  (       a  UR                  R                  5       OSnU(       a  US;  a  g US:X  a  [        S5      $ UR                  (       d  UR                  (       d  [        S5      eUR                  (       a  [        S5      eUR
                  (       d  [        S	5      eU R                  X5      $ )
N)r      r   zFSQLite does not support specifying which values to preserve or update.r0  )r	  r   r0  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  rp  rQ   rC  )rb   ocrl  r  s       rd   r  SqliteDatabase.conflict_updateO  s   +bjj"))R5H5H'') * * 6 7 7 (*zz!!#rf$==Y/00BLL * + + $$ D E E$$ ? @ @ --b88rg   c                 2    [         R                  X[        S9$ N)r  )r5   r  r   r  s      rd   r  SqliteDatabase.extract_datek  s    ||I|DDrg   c                 2    [         R                  X[        S9$ r	  )r5   r  simple_date_timer  s      rd   r  SqliteDatabase.truncate_daten  s    }}Y*:  < 	<rg   c                 L    [         R                  SU5      R                  S5      $ )Nr~  integer)r5   r   r  r  s     rd   r  SqliteDatabase.to_timestampr  s    {{4,11)<<rg   c                 .    [         R                  US5      $ )N	unixepoch)r5   r   r  s     rd   r  SqliteDatabase.from_timestampu  s    {{:{33rg   )r  r  r  r  r  r  r  r  r  r  rW  )NrD  Nrm  r`   )Nr{  N)Urh   ri   rj   rk   r  r$  r4  r3  r5  r  rv  ru  r6  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  rX  r  r  r  r  r4	  r;	  rB	  r  r  r  rP	  rU	  rX	  r	  r_	  rc	  rf	  ri	  rl	  r	  rp	  rw	  r{	  r~	  rZ  r  rW  r%  r_  r  r	  r  r  r  r  r	  r  r  r  r  r  r  rl   r  r  s   @rd   rR   rR     s   ::))		++II

K J I'NN@=
(  !)E$   L)Jn-Ln-L#$89;'I;'I!"45]+K#$89 01Nn-Ln-L  ^^K K;,?
A5
5 ;=(,4;.$$#*+
++	*$-/3P
.B,N
.E
98E<=4 4rg   rR   c            
         ^  \ rS rSrSSSSSSSS	SS
.	rSSS.rSr\rSr	Sr
SrSrSr  S)U 4S jjrS rS rS rS*S jrS rS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS rS rS  rS! rS" rS# r S$ r!S% r"S& r#S' r$S(r%U =r&$ )+rG   iy  SERIAL	BIGSERIALBYTEABOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONr7  )	r$  r&  r(  r)  r-  r.  r1  r7  r8  r  z~*)r  r  r~  TFc                 T   > X l         X0l        X@l        [        [        U ]  " U40 UD6  g r`   )_register_unicode	_encoding_isolation_levelr  rG   r  )rb   r  register_unicodeencodingr  r  r  s         rd   r  PostgresqlDatabase.init  s)    !1! / $,X@@rg   c                    [         c  [        S5      eU R                  R                  5       nU R                  R                  S5      (       a  UR                  SU R                  5        OUR                  SU R                  5        [         R                  " S0 UD6nU R                  (       aJ  [        R                  " [        R                  U5        [        R                  " [        R                  U5        U R                  (       a  UR                  U R                  5        U R                  (       a  UR!                  U R                  5        SUl        U$ )NzPostgres driver not installed!zpostgresql://dsndbnameTra   )psycopg2r8   r  rT  r  r  
setdefaultr  r	  pg_extensionsregister_typeUNICODEUNICODEARRAYr	  set_client_encodingr	  set_isolation_levelr  )rb   r  r  s      rd   r  PostgresqlDatabase._connect  s    &'GHH $$))+==##O44eT]]3h6)&)!!''(=(=tD''(B(BDI>>$$T^^4  $$T%:%:;rg   c                 V    UR                   U l         U R                   S:  a  SU l        g g )Nia T)r  r  r  s     rd   r	  &PostgresqlDatabase._set_server_version  s+    "11%'%)D" (rg   c                     U R                   R                  (       a  gU R                   R                  R                  5       nU[        R
                  :  $ r  )r  r  r  get_transaction_statusr	  TRANSACTION_STATUS_INERROR)rb   
txn_statuss     rd   r  'PostgresqlDatabase.is_connection_usable  s=    ;;
 [[%%<<>
MDDDDrg   c                 v     U[         R                  :w  a  U$ US   S   $ ! [        [        [        4 a     g f = fr  )rk  rQ  rs  r   r	  rG  s      rd   rZ  !PostgresqlDatabase.last_insert_id  s>    	'6==86JfQilJHi0 		s       88c                 h     UR                   $ ! [         a    UR                  R                   s $ f = fr`   r	  rL  s     rd   r   PostgresqlDatabase.rows_affected  r	  r	  c                     U R                  5       (       a  U R                  5         U(       a  SU-  nOSn[           U R                  5       R	                  U5        S S S 5        g ! , (       d  f       g = f)Nz$BEGIN TRANSACTION ISOLATION LEVEL %sry  rz  )rb   r  rT  s      rd   rW  PostgresqlDatabase.begin  sM    >>LLN9OKDD"KKM!!$' #""s    A$$
A2c                     SnU R                  X!=(       d    S45      nUR                  5        Vs/ s H  u  oDPM     sn$ s  snf )NzSSELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = %s ORDER BY tablenamepublicr	  )rb   rT  rl  r  rU  s        rd   r  PostgresqlDatabase.get_tables  sD    <!!%*<H)>?$*OO$56$5&%$5666s   A c           
          SnU R                  X!=(       d    S45      nUR                  5        VVs/ s H  u  pE[        XER                  S5      5      PM!     snn$ s  snnf )Nz\SELECT viewname, definition FROM pg_catalog.pg_views WHERE schemaname = %s ORDER BY viewnamer	  z 	;)r,  r	  r  strip)rb   rT  rl  r  	view_namerV  s         rd   r	  PostgresqlDatabase.get_views  s^    ;!!%*<H)>?(.(9;(9$Y Y		&(9:(9; 	; ;s   &Ac                     SnU R                  X1SU=(       d    S45      nUR                  5        VVVVs/ s H1  u  pVpx[        XVR                  S5      UR	                  S5      Xq5      PM3     snnnn$ s  snnnnf )Na  
            SELECT
                i.relname, idxs.indexdef, idx.indisunique,
                array_to_string(ARRAY(
                    SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
                    FROM generate_subscripts(idx.indkey, 1) AS k
                    ORDER BY k), ',')
            FROM pg_catalog.pg_class AS t
            INNER JOIN pg_catalog.pg_index AS idx ON t.oid = idx.indrelid
            INNER JOIN pg_catalog.pg_class AS i ON idx.indexrelid = i.oid
            INNER JOIN pg_catalog.pg_indexes AS idxs ON
                (idxs.tablename = t.relname AND idxs.indexname = i.relname)
            WHERE t.relname = %s AND t.relkind = %s AND idxs.schemaname = %s
            ORDER BY idx.indisunique DESC, i.relname;r  r	  z ;,)r,  r	  r  rstripr   )	rb   rU  rT  rl  r  r  rV  r	  r  s	            rd   r  PostgresqlDatabase.get_indexes  s|    9 !!%f6H)IJ 6<__5FH5F1Dy dJJt$4gmmC6H'05FH 	H Hs   8A3
c                     SnU R                  X1U=(       d    S45      n[        U R                  X5      5      nUR                  5        VVVV	s/ s H  u  pgp[	        XhUS:H  Xe;   X5      PM     sn	nnn$ s  sn	nnnf )Nz
            SELECT column_name, is_nullable, data_type, column_default
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = %s
            ORDER BY ordinal_positionr	  YESr,  r  r  r	  r  )
rb   rU  rT  rl  r  pksr  r3  r   dfs
             rd   r  PostgresqlDatabase.get_columns  s|    )
 !!%1C8)DE$''67*0//*;=*;&D tUO*;= 	= =s    A4
c                     SnSnU R                  X4X=(       d    S45      nUR                  5        Vs/ s H  u  ofPM     sn$ s  snf )Na  
            SELECT kc.column_name
            FROM information_schema.table_constraints AS tc
            INNER JOIN information_schema.key_column_usage AS kc ON (
                tc.table_name = kc.table_name AND
                tc.table_schema = kc.table_schema AND
                tc.constraint_name = kc.constraint_name)
            WHERE
                tc.constraint_type = %s AND
                tc.table_name = %s AND
                tc.table_schema = %sPRIMARY KEYr	  r	  )rb   rU  rT  rl  ctyper  pks          rd   r  #PostgresqlDatabase.get_primary_keys  sM    
( !!%8J()KL$oo/0/sr/000r	  c           	          SnU R                  X1U=(       d    S45      nUR                  5        Vs/ s H  n[        US   US   US   U5      PM     sn$ s  snf )Na%  
            SELECT DISTINCT
                kcu.column_name, ccu.table_name, ccu.column_name
            FROM information_schema.table_constraints AS tc
            JOIN information_schema.key_column_usage AS kcu
                ON (tc.constraint_name = kcu.constraint_name AND
                    tc.constraint_schema = kcu.constraint_schema AND
                    tc.table_name = kcu.table_name AND
                    tc.table_schema = kcu.table_schema)
            JOIN information_schema.constraint_column_usage AS ccu
                ON (ccu.constraint_name = tc.constraint_name AND
                    ccu.constraint_schema = tc.constraint_schema)
            WHERE
                tc.constraint_type = 'FOREIGN KEY' AND
                tc.table_name = %s AND
                tc.table_schema = %sr	  r   r   rn   r	  )rb   rU  rT  rV  r  r  s         rd   r  #PostgresqlDatabase.get_foreign_keys  sh    (  !!#v/A'BC!??,.,C #3q63q63q65A,. 	. .s   !Ac                 `    U R                  SU45      n[        UR                  5       S   5      $ )Nz
            SELECT COUNT(*) FROM pg_class, pg_namespace
            WHERE relkind='S'
                AND pg_class.relnamespace = pg_namespace.oid
                AND relname=%sr   )r,  ro  r	  )rb   sequenceress      rd   r  "PostgresqlDatabase.sequence_exists"  s6      " %-;	0
 CLLN1%&&rg   c                 "    [         R                  $ r`   )r	  r	  r  s    rd   r	  "PostgresqlDatabase.get_binary_type*  s    rg   c                     g r`   ra   r8  s      rd   r  %PostgresqlDatabase.conflict_statement-      rg   c                    UR                   (       a  UR                   R                  5       OSnUS;   a  [        S5      /nUR                  (       aU  UR	                  [        UR                   Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     sn5      5        UR	                  [        S5      5        [        U5      $ U(       a  US:w  a  [        S5      eUR                  (       d  UR                  (       d  [        S5      eUR                  (       d  UR                  (       d  [        S5      eU R                  X5      $ s  snf )	Nr0  )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  rp  rQ   r  r  r  rz   r  rj  r  r  r  r  r  rC  )rb   r	  rl  r  r/  r%  s         rd   r  "PostgresqlDatabase.conflict_update0  s   ')zz!!#r**'(E""-!22/42 $.c:#>#>F3KCG2/4 5 6 LL\*+E?"(* ) * * BLL ) * * %%)@)@ ? @ @ --b88%/4s   /,Ec                 V    [         R                  [        U[        S5      U45      5      $ NFROMr5   EXTRACTr  rQ   r  s      rd   r  PostgresqlDatabase.extract_dateI  s!    zz(Is6{J#GHIIrg   c                 ,    [         R                  X5      $ r`   )r5   
DATE_TRUNCr  s      rd   r   PostgresqlDatabase.truncate_dateL  s    }}Y33rg   c                 &    U R                  SU5      $ )NEPOCH)r  r  s     rd   r  PostgresqlDatabase.to_timestampO  s      *55rg   c                 ,    [         R                  U5      $ r`   )r5   r  r  s     rd   r  !PostgresqlDatabase.from_timestampR  s    z**rg   c                     UR                  [        5       R                  [        S5      5      R	                  [        S5      5      5      $ )Nr  falser  rh  s     rd   r  "PostgresqlDatabase.get_noop_selectV  s1    wwvx''C177GEFFrg   c                 ,    U R                  SU-  5        g )Nzset time zone "%s";r	  )rb   r   s     rd   set_time_zone PostgresqlDatabase.set_time_zoneY  s    .9:rg   )r	  r	  r	  r  r  r  r`   )'rh   ri   rj   rk   r  rv  rc  r  r  r  r  rW  r  r  r  r  r	  r  rZ  r  rW  r  r	  r  r  r  r  r  r	  r  r  r  r  r  r  r  r%
  rl   r  r  s   @rd   rG   rG   y  s    $	K  D1JE"8JNI=A!A.*
E*(7;H(	=1 .*'92J46+G; ;rg   rG   c            	         ^  \ rS rSrSSSSSSSS	S
.rSSSSSS.rSrSr\r	Sr
SrSrSrSrSrU 4S jrS rS rS rS rS rS.S jrS.S jrS.S jrS.S  jrS.S! jrS.S" jrS.S# jrS$ rS% rS& rS' r S( r!S) r"S* r#S+ r$S, r%S-r&U =r'$ )/rC   i]  zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTr)  r	  r	  r3  zVARCHAR(40)zVARBINARY(16))r$  r&  r)  r.  r1  r3  r7  r8  zLIKE BINARYr	  zREGEXP BINARYr  r   )r	  r
  r  r  r   r~  z``Tl    FPIPES_AS_CONCATc                    > SU R                   SS.nUR                  U5        SU;   a  [        (       a  UR                  S5      US'   [        [
        U ]  " U40 UD6  g )Nr  T)charsetsql_modeuse_unicodepasswordpasswd)r+
  r   mysql_passwdr  r  rC   r  )rb   r  r  r  r  s       rd   r  MySQLDatabase.initx  sX    ! 	fLL%zz*5F8mT';F;rg   c                     [         c  [        S5      e[         R                  " SU R                  SS.U R                  D6nU$ )NzMySQL driver not installed!T)r  r  ra   )mysqlr8   r  r  r  r  s     rd   r  MySQLDatabase._connect  sA    =&'DEE}} 4$ 4#224rg   c                      UR                   nU R                  U5      U l         g ! [         a    UR                  5       n N3f = fr`   )r  r   get_server_info_extract_server_version)rb   r  version_raws      rd   r	  !MySQLDatabase._set_server_version  sF    	1--K #::;G  	1..0K	1s   % AAc                 X   [        U[        5      (       a  U$ UR                  5       nSU;   a  [        R                  " SU5      nO[        R                  " SU5      nUb2  [        S UR                  5       S   R                  S5       5       5      $ [        R                  " SU-  5        g)	Nmariaz(1\d\.\d+\.\d+)z(\d\.\d+\.\d+)c              3   8   #    U  H  n[        U5      v   M     g 7fr`   )r   )ru  nums     rd   rw  8MySQLDatabase._extract_server_version.<locals>.<genexpr>  s     N-McS-Mry  r   rZ  z'Unable to determine MySQL version: "%s"r   )	rz   re  rp  r  searchgroupsr   r   r   )rb   version	match_objs      rd   r6
  %MySQLDatabase._extract_server_version  s    gu%%N--/g		"4g>I		"3W=I NY-=-=-?-B-H-H-MNNN?'IJrg   c                     U R                   R                  (       a  gU R                   R                  n[        US5      (       a)  U R                  S   S:X  a  SnOSn UR
                  " U6   gg! [         a     gf = f)NFpingr   rK  ra   r  T)r  r  r  r  r  rD
  r]  )rb   r  r  s      rd   r  "MySQLDatabase.is_connection_usable  su    ;;{{4  ""1%*		4    s   A. .
A;:A;c                 $    UR                  S5      $ )Nz() VALUES ()rO  rh  s     rd   rL  #MySQLDatabase.default_values_insert  s    {{>**rg   c                    U R                  5       (       a  U R                  5         [           U R                  5       nU(       a  UR	                  SU-  5        UR	                  S5        S S S 5        g ! , (       d  f       g = f)Nz"SET TRANSACTION ISOLATION LEVEL %sry  rz  )rb   r  curss      rd   rW  MySQLDatabase.begin  sX    >>LLN";;=DA,- .LL! #""s   =A22
B c                 X    SnU R                  US5       Vs/ s H  u  o3PM     sn$ s  snf )NzySELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type != %s ORDER BY table_name)VIEWr	  )rb   rT  rl  rU  s       rd   r  MySQLDatabase.get_tables  s4    ' %)$4$4UI$FG$F&%$FGGGs   'c                     SnU R                  U5      nUR                  5        Vs/ s H  n[        U6 PM     sn$ s  snf )NztSELECT table_name, view_definition FROM information_schema.views WHERE table_schema = DATABASE() ORDER BY table_name)r,  r	  r  )rb   rT  rl  r  r  s        rd   r	  MySQLDatabase.get_views  sB    G !!%(.4oo.?@.?sc".?@@@s   ;c           
      Z   U R                  SU-  5      n[        5       n0 nUR                  5        HO  nUS   (       d  UR                  US   5        UR	                  US   / 5        XVS      R                  US   5        MQ     U Vs/ s H  n[        US XW   Xt;   U5      PM     sn$ s  snf )NSHOW INDEX FROM `%s`r   rn   rC  )r,  r  r	  r  r	  r  r  )rb   rU  rT  r  ri  indexesr  r  s           rd   r  MySQLDatabase.get_indexes  s    !!"85"@A??$Cq6

3q6"s1vr*FO""3q6*	 % $%#D dD'-O#% 	% %s   B(c                     SnU R                  X145      n[        U R                  U5      5      nUR                  5        VVVV	s/ s H  u  pgp[	        XhUS:H  Xe;   X5      PM     sn	nnn$ s  sn	nnnf )Nz
            SELECT column_name, is_nullable, data_type, column_default
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = DATABASE()
            ORDER BY ordinal_positionr	  r	  )
rb   rU  rT  rV  r  r	  r  r3  r   r	  s
             rd   r  MySQLDatabase.get_columns  st    )
 !!#x0$''./*0//*;=*;&D tUO*;= 	= =s    A*
c                     U R                  SU-  5      n[        S UR                  5       5       Vs/ s H  oDS   PM	     sn$ s  snf )NrQ
  c                     U S   S:H  $ )Nrn   PRIMARYra   )r  s    rd   r|   0MySQLDatabase.get_primary_keys.<locals>.<lambda>  s    3q6Y#6rg   rC  r	  r	  s        rd   r  MySQLDatabase.get_primary_keys  sR    !!"85"@A68IJLJ AJL 	L Ls   Ac                     SnU R                  X145      nUR                  5        VVVs/ s H  u  pVn[        XVXq5      PM     snnn$ s  snnnf )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	  )rb   rU  rT  rl  r  rU  r  r  s           rd   r  MySQLDatabase.get_foreign_keys  s[    : !!%2 4:??3DF3D/K v;F3DF 	F Fs   Ac                 "    [         R                  $ r`   )r2
  r	  r  s    rd   r	  MySQLDatabase.get_binary_type  s    ||rg   c                     UR                   (       d  g UR                   R                  5       nUS:X  a  [        S5      $ US:X  a  [        S5      $ US:w  a  [        S5      eg )Nr   rp  r  zINSERT IGNOREr   zWUn-supported action for conflict resolution. MySQL supports REPLACE, IGNORE and UPDATE.)r  rp  rQ   r  r	  s       rd   r   MySQLDatabase.conflict_statement  sh    ""F$$**,Yy>!x''x J K K  rg   c           	         UR                   (       d"  UR                  (       d  UR                  (       a  [        S5      e/ nUR                  (       a  U R
                  =(       d    SnUS   S:X  a  US:  a  [        R                  nO[        R                  nUR                   HE  n[        U5      n[        [        U5      [        S5      U" U5      45      nUR                  U5        MG     UR                  (       a  UR                  R                  5        H  u  p[        U
[         5      (       d\  [        U	["        5      (       a  [%        UR&                  U	5      n	[        U	[(        5      (       a  U	R+                  U
5      n
O
[-        U
SS9n
UR                  [        [        U	5      [        S5      U
45      5        M     U(       a  [        [        S	5      [/        U5      45      $ g )
NzfMySQL does not support the specification of where clauses or conflict targets for conflict resolution.r   r   
   )rc
  r   r   r   Fr  zON DUPLICATE KEY UPDATE)r  r  r  r  r  r  r5   VALUEVALUESrk  r  rQ   r  r  rj  rz   ri  r  r   rU  r2   r  rY   r  )rb   rr  rl  r@  r@
  VALUE_FNrU  entityrB  r  r  s              rd   r  MySQLDatabase.conflict_update   s   !=!=++ + , ,    ))1TGqzRGz$98899%//&v.%!&)HV$'& '
 z* 0 #++113!!T** "!Z00#EKK3!!U++JJqM!!E2xq)93s8Q(GHI 4 S!:;*735 6 6 rg   c                 h    [         R                  [        [        U5      [        S5      U45      5      $ r
  r
  r  s      rd   r  MySQLDatabase.extract_date+  s%    zz(C	NCK#LMNNrg   c                 B    [         R                  U[        U   [        S9$ r	  )r5   DATE_FORMAT__mysql_date_trunc__r	  r  s      rd   r  MySQLDatabase.truncate_date.  s%    ~~j*>y*I+;  = 	=rg   c                 ,    [         R                  U5      $ r`   )r5   UNIX_TIMESTAMPr  s     rd   r  MySQLDatabase.to_timestamp2  s      ,,rg   c                 ,    [         R                  U5      $ r`   )r5   FROM_UNIXTIMEr  s     rd   r  MySQLDatabase.from_timestamp5  s    
++rg   c                 *    [         R                  5       $ r`   )r5   randr  s    rd   r  MySQLDatabase.random8  s    wwyrg   c                 $    UR                  S5      $ )NzDO 0rO  rh  s     rd   r  MySQLDatabase.get_noop_select;  s    {{6""rg   r  r`   )(rh   ri   rj   rk   r  rv  rc  r_  r  r  r  rv  r6  r  r  r+
  r  r  r	  r6
  r  rL  rW  r  r	  r  r  r  r  r	  r  r  r  r  r  r  r  r  rl   r  r  s   @rd   rC   rC   ]  s    (*$ "K !J EE":J!%IO H<H +"HA
%	=L
F
K)6VO=-,# #rg   rC   c                   ,    \ rS rSrS rS rS rS rSrg)r  iB  c                     Xl         g r`   r  r  s     rd   r  _manual.__init__C  s    rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                  t   > [        TR                  5         T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r  r  r  s     rd   r  _manual.__call__.<locals>.innerG  s(    !4*6* "!!r  r   r  s   `` rd   r  _manual.__call__F  r  rg   c                     U R                   R                  5       nUb   [        U[        5      (       d  [	        S5      eU R                   R                  U 5        g )Nz?Cannot enter manual commit block while a transaction is active.)r  rn  rz   r  r  re  )rb   tops     rd   r  _manual.__enter__M  sI    gg%%'?:c7#;#; 6 7 7  &rg   c                 T    U R                   R                  5       U La  [        S5      eg )Nz>Transaction stack corrupted while exiting manual commit block.)r  rX  r  rH  s       rd   r  _manual.__exit__T  s.    77""$D0 4 5 5 1rg   r  NrJ  ra   rg   rd   r  r  B  s    '5rg   r  c                   ,    \ rS rSrS rS rS rS rSrg)r  iZ  c                      Xl         X#4U l        g r`   )r  _transaction_argsrb   r  r  r  s       rd   r  _atomic.__init__[  s    "&rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                     > TR                   u  p#[        TR                  /UQ70 UD6   T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r
  r  r  r  r  r  r  r5   rb   s       rd   r  _atomic.__call__.<locals>.inner`  s?    ))DA*1**4*6* +**	   ;
A	r   r  s   `` rd   r  _atomic.__call___       	r	+ 
	+ rg   c                    U R                   R                  5       S:X  a0  U R                  u  pU R                   R                  " U0 UD6U l        OW[        U R                   R                  5       [        5      (       a  [        S5      eU R                   R                  5       U l        U R                  R                  5       $ )Nr   z=Cannot enter atomic commit block while in manual commit mode.)r  rj  r
  r  _helperrz   rn  r  r  r  r  r  s      rd   r  _atomic.__enter__g  s    77$$&!+11LD77..??DL//17;; 3 4 4  77,,.DL||%%''rg   c                 :    U R                   R                  XU5      $ r`   )r
  r  rH  s       rd   r  _atomic.__exit__r  s    ||$$X??rg   )r
  r
  r  NrJ  ra   rg   rd   r  r  Z  s    0	(@rg   r  c                   F    \ rS rSrS rS rS rSS jrSS jrS r	S r
S	rg
)r  iv  c                      Xl         X#4U l        g r`   )r  _begin_argsr
  s       rd   r  _transaction.__init__w  s     >rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                     > TR                   u  p#[        TR                  /UQ70 UD6   T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r
  r  r  r
  s       rd   r  $_transaction.__call__.<locals>.inner|  s?    ##DAdgg//Q/4*6* 0//r
  r   r  s   `` rd   r  _transaction.__call__{  r
  rg   c                 X    U R                   u  pU R                  R                  " U0 UD6  g r`   )r
  r  rW  r  s      rd   _begin_transaction._begin  s$    ''t&v&rg   c                 h    U R                   R                  5         U(       a  U R                  5         g g r`   )r  r%  r
  rb   rW  s     rd   r%  _transaction.commit  s!    KKM rg   c                 h    U R                   R                  5         U(       a  U R                  5         g g r`   )r  r_  r
  r
  s     rd   r_  _transaction.rollback  s#    KKM rg   c                     U R                   R                  5       S:X  a  U R                  5         U R                   R                  U 5        U $ r  )r  rj  r
  re  r  s    rd   r  _transaction.__enter__  s7    77$$&!+KKM  &rg   c                 H   U R                   R                  5       n U(       a  US:X  a  U R                  S5        OUS:X  a   U R                  S5        U R                   R	                  5         g !   U R                  S5        e = f! U R                   R	                  5         f = fNr   F)r  rj  r_  r%  rX  )rb   rI  rJ  rK  depths        rd   r  _transaction.__exit__  s    ))+
	&EQJe$!KK&
 GG##%	MM%(GG##%s   %B A. .BB B!)r
  r  Nr  rh   ri   rj   rk   r  r  r
  r%  r_  r  r  rl   ra   rg   rd   r  r  v  s%    *'

&rg   r  c                   F    \ rS rSrSS jrS rS rSS jrS rS r	S	 r
S
rg)r  i  Nc                     Xl         U=(       d"    S[        R                  " 5       R                  -   U l        U R                  R                  U R                   R                  5      U l        g )Nru   )r  uuiduuid4hexsidr[  r_  
quoted_sid)rb   r  r
  s      rd   r  _savepoint.__init__  s@    0#

 0 00((--6rg   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                  t   > [        TR                  5         T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr`   )r  r  r  s     rd   r  "_savepoint.__call__.<locals>.inner  s(    DGG$4*6* %$$r  r   r  s   `` rd   r  _savepoint.__call__  r  rg   c                 T    U R                   R                  SU R                  -  5        g )NzSAVEPOINT %s;r  r,  r
  r  s    rd   r
  _savepoint._begin  s    Odoo=>rg   c                     U R                   R                  SU R                  -  5        U(       a  U R                  5         g g )NzRELEASE SAVEPOINT %s;)r  r,  r
  r
  r
  s     rd   r%  _savepoint.commit  s+    3dooEF$++-5rg   c                 T    U R                   R                  SU R                  -  5        g )NzROLLBACK TO SAVEPOINT %s;r
  r  s    rd   r_  _savepoint.rollback  s    7$//IJrg   c                 &    U R                  5         U $ r`   )r
  r  s    rd   r  _savepoint.__enter__  s    rg   c                     U(       a  U R                  5         g  U R                  SS9  g !   U R                  5         e = f)NFrV  )r_  r%  rH  s       rd   r  _savepoint.__exit__  s4    MMO%(s   * =)r  r
  r
  r`   r  r
  ra   rg   rd   r  r    s&    7
? Krg   r  c                   R    \ rS rSrS rS rS rS rS rSS jr	S r
S	 rSS
 jrSrg)r  i  c                 V    Xl         SU l        SU l        SU l        SU l        / U l        g )Nr   F)r  r  r  initialized	populatedr  rL  s     rd   r  CursorWrapper.__init__  s+    

 rg   c                 d    U R                   (       a  [        U R                  5      $ [        U 5      $ r`   )r
  r~  r  ResultIteratorr  s    rd   r'  CursorWrapper.__iter__  s#    >>''d##rg   c                 H   [        U[        5      (       aF  UR                  nUb  US:  a  U R                  5         OU R                  U5        U R                  U   $ [        U[
        5      (       a(  U R                  US:  a  UOS5        U R                  U   $ [        S5      e)Nr   z6CursorWrapper only supports integer and slice indexes.)rz   r  r  r   r  r   r  )rb   r6  r  s      rd   r  CursorWrapper.__getitem__  s    dE""99D|tax!%>>$''c""OOD1HD!4>>$'' ( ) )rg   c                 :    U R                  5         U R                  $ r`   )r   r  r  s    rd   r  CursorWrapper.__len__  s    zzrg   c                     g r`   ra   r  s    rd   r  CursorWrapper.initialize  r  rg   c                 n   U R                   R                  5       nUc'  SU l        U R                   R                  5         [        eU R
                  (       d  U R                  5         SU l        U =R                  S-  sl        U R                  U5      nU(       a  U R                  R                  U5        U$ )NTr   )r  r	  r
  r  r/  r
  r  r  process_rowr  r  )rb   cacher  r'  s       rd   iterateCursorWrapper.iterate  s    kk""$;!DNKK!!OO#D

a
!!#&NN!!&)rg   c                     U$ r`   ra   rb   r  s     rd   r
  CursorWrapper.process_row  s    
rg   c              #   X   #      U R                  S5      v   M  ! [         a     gf = f7f)z1Efficient one-pass iteration over the result set.FN)r
  r/  r  s    rd   r  CursorWrapper.iterator  s4     ll5))  ! s   * *
'*'*c                 R   U=(       d    [        S5      nUS:  a  [        S5      e[        U 5      nU R                  Ul        U R
                  (       dE  XR                  :  a5   UR                  5         U R
                  (       d  XR                  :  a  M3  g g g g ! [         a     g f = f)NInfr   z"Negative values are not supported.)floatr  r
  r  r  r
  r.  r/  )rb   r  r  s      rd   r   CursorWrapper.fill_cache  s    uq5ABB!$'..a**n ..a**n.n. ! s   #B 
B&%B&)r  r  r  r
  r
  r  Nr  rb
  )rh   ri   rj   rk   r  r'  r  r  r  r
  r
  r  r   rl   ra   rg   rd   r  r    s/    $
)rg   r  c                   (    \ rS rSrS r\rS r\rSrg)r  i  c                     U R                   R                  nU Vs/ s H/  nUS   US   R                  S5      S-   S  R                  S5      PM1     snU l        [        U5      U l        g s  snf )Nr   rZ  r   ()"`)r  descriptionrfindr	  r  r   ncolsrb   r
  r   s      rd   _initialize_columns%DictCursorWrapper._initialize_columns  si    kk--!,.!,A !QqTZZ_q01288@!,.%
.s   6A*c                     0 n[        U R                  5       H$  nUR                  U R                  U   X   5        M&     U$ r`   )r  r
  r	  r  )rb   r  r'  rg  s       rd   _row_to_dictDictCursorWrapper._row_to_dict$  s9    tzz"Adll1osv6 #rg   )r  r
  N)	rh   ri   rj   rk   r
  r  r
  r
  rl   ra   rg   rd   r  r    s    & %J Krg   r  c                        \ rS rSrS rS rSrg)r  i-  c           
          U R                   R                  n[        R                  " SU Vs/ s H.  o"S   US   R	                  S5      S-   S  R                  S5      PM0     sn5      U l        g s  snf )NRowr   rZ  r   r
  )r  r
  collections
namedtupler
  r	  tuple_classr
  s      rd   r  "NamedTupleCursorWrapper.initialize.  sl    kk--&11%>I:K>IaD1C1$%&,,V4k:K L :Ks   5A.
c                      U R                   " U6 $ r`   r
  r
  s     rd   r
  #NamedTupleCursorWrapper.process_row3  s    %%rg   r
  N)rh   ri   rj   rk   r  r
  rl   ra   rg   rd   r  r  -  s    L
&rg   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  i7  c                 8   > [         [        U ]  U5        X l        g r`   )r  r  r  r  )rb   r  r  r  s      rd   r  ObjectCursorWrapper.__init__8  s    !41&9&rg   c                 H    U R                  U5      nU R                  " S0 UD6$ r-  )r
  r  )rb   r  row_dicts      rd   r
  ObjectCursorWrapper.process_row<  s&    $$S)+(++rg   )r  rh   ri   rj   rk   r  r
  rl   r  r  s   @rd   r  r  7  s    ', ,rg   r  c                   *    \ rS rSrS rS rS r\rSrg)r
  iA  c                     Xl         SU l        g r  cursor_wrapperr  )rb   r  s     rd   r  ResultIterator.__init__B  s    ,
rg   c                     U $ r`   ra   r  s    rd   r'  ResultIterator.__iter__F  r  rg   c                 ~   U R                   U R                  R                  :  a$  U R                  R                  U R                      nO_U R                  R                  (       d>  U R                  R                  5         U R                  R                  U R                      nO[        eU =R                   S-  sl         U$ r  )r  r  r  r  r
  r
  r/  rW  s     rd   r.  ResultIterator.nextI  s    ::++111%%//

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

;C

a

rg   r   N)	rh   ri   rj   rk   r  r'  r.  __next__rl   ra   rg   rd   r
  r
  A  s    	 Hrg   r
  c                   *    \ rS rSrS rSS jrS rSrg)FieldAccessoriX  c                 (    Xl         X l        X0l        g r`   )r  r  r  rb   r  r  r  s       rd   r  FieldAccessor.__init__Y  s    

	rg   Nc                 j    Ub%  UR                   R                  U R                  5      $ U R                  $ r`   )__data__r   r  r  r  s      rd   r  FieldAccessor.__get__^  s-    $$((33zzrg   c                 ~    X!R                   U R                  '   UR                  R                  U R                  5        g r`   )r  r  _dirtyr  rb   r  r   s      rd   r  FieldAccessor.__set__c  s*    ',$))$DII&rg   )r  r  r  r`   )rh   ri   rj   rk   r  r  r  rl   ra   rg   rd   r	  r	  X  s    

'rg   r	  c                   >   ^  \ rS rSrU 4S jrS rSS jrS rSrU =r	$ )ForeignKeyAccessorih  c                 P   > [         [        U ]  XU5        UR                  U l        g r`   )r  r  r  	rel_model)rb   r  r  r  r  s       rd   r  ForeignKeyAccessor.__init__i  s      $0tDrg   c                 l   UR                   R                  U R                  5      nUc  U R                  UR                  ;   a  U R                  UR                  ;  ae  U R                  R
                  (       aJ  U R                  R                  U R                  R                  U:H  5      nX1R                  U R                  '   UR                  R                  U R                  U5      $ U R                  R                  (       d1  U R                  R
                  (       a  U R                  R                  eU$ r`   )
r  r   r  __rel__r  	lazy_loadr  	rel_fieldr3  r.   )rb   r  r   r  s       rd   get_rel_instance#ForeignKeyAccessor.get_rel_instancem  s    !!%%dii0		X-=-= =yy 0 00TZZ5I5Inn(()=)=)FG.1  +##''		599TZZ%9%9..---rg   c                 B    Ub  U R                  U5      $ U R                  $ r`   )r  r  r  s      rd   r  ForeignKeyAccessor.__get__x  s#    ((22zzrg   c                     [        X R                  5      (       aY  [        X R                  R                  R
                  5      UR                  U R
                  '   X!R                  U R
                  '   OvUR                  R                  U R
                  5      nX!R                  U R
                  '   X#:w  d  Uc1  U R
                  UR                  ;   a  UR                  U R
                  	 UR                  R                  U R
                  5        g r`   )rz   r  r   r  r  r  r  r  r   r  r  )rb   r  r  fk_values       rd   r  ForeignKeyAccessor.__set__}  s    c>>**+23

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

' 
'rg   r  c                   $    \ rS rSrS rSS jrSrg)BackrefAccessori  c                 T    Xl         UR                  U l        UR                  U l        g r`   )r  r  r  rb   r  s     rd   r  BackrefAccessor.__init__  s    
__
rg   Nc                     Ub_  U R                   R                  R                  nU R                  R	                  5       R                  U R                   [        X5      :H  5      $ U $ r`   )r  r  r  r  r  r  r   )rb   r  r  r  s       rd   r  BackrefAccessor.__get__  sP    ::'',,DNNVXU4::)@@AC rg   )r  r  r  r`   )rh   ri   rj   rk   r  r  rl   ra   rg   rd   r%  r%    s    %
rg   r%  c                   .    \ rS rSrSrS rSS jrS rSrg)	ObjectIdAccessori  z(Gives direct access to the underlying idc                     Xl         g r`   r  r'  s     rd   r  ObjectIdAccessor.__init__  s    
rg   Nc                 h   Ub  UR                   R                  U R                  R                  5      nUcp  U R                  R                  UR                  ;   aL  UR                  U R                  R                     n[        X@R                  R                  R                  5      nU$ U R                  $ r`   )r  r   r  r  r  r   r  )rb   r  r  r   rel_objs        rd   r  ObjectIdAccessor.__get__  s    %%))$**//:E}H4D4D!D"**4::??;)=)=)B)BCLzzrg   c                 D    [        XR                  R                  U5        g r`   )rR  r  r  r  s      rd   r  ObjectIdAccessor.__set__  s    **//51rg   r.  r`   )	rh   ri   rj   rk   r  r  r  r  rl   ra   rg   rd   r,  r,    s    22rg   r,  c                       \ rS rSrSrSr\rSrSr	Sr
Sr     SS jrS rS	 rSS
 jr\S 5       rS rS rS rS rS rS rS rS rS rSrg)r2   i  r   FNr/  Tc                    Ub  [        S5        UnXl        X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl	        Xl
        Xl        Xl        Xl        U=(       d    U R                  U l        UU l        ["        =R$                  S-  sl        ["        R$                  U l        U R                  =(       a    S=(       d    SU R&                  4U l        g )NzL"db_column" has been deprecated in favor of "column_name" for Field objects.r   rn   )r   r3  r  ri  r2  rI  rS  r  r	
  r  	unindexedchoices	help_textverbose_namedefault_index_typer}  _hiddenr2   _field_counter_order	_sort_key)rb   r3  r  ri  r2  rI  rS  r  r	
  r  r7  r8  r9  r:  r}  	db_columnr<  s                    rd   r  Field.__init__  s    
   > ?#K	
&&& """($?(?(? 	!****0q5ACrg   c                 `    [        U R                  S-   U R                  R                  -   5      $ r0  )r	  r  r  rh   r  s    rd   r  Field.__hash__  s$    DIIOdjj&9&99::rg   c                     [        U S5      (       aR  [        U SS 5      (       a@  S[        U 5      R                  < SU R                  R                  < SU R
                  < S3$ S[        U 5      R                  -  $ )Nr  r  r   : rZ  r  z<%s: (unbound)>)r  r   r  rh   r  r  r  s    rd   __repr__Field.__repr__  s_    4!!gdFD&A&A$(J$7$7$(JJ$7$7$(II/ / !4:#6#666rg   c           	          Xl         U=U l        U l        U R                  =(       d    UU l        U(       a  [	        XU R                  XU5      5        g g r`   )r  r  	safe_namer2  rR  accessor_classrb   r  r  set_attributes       rd   r&  
Field.bind  sG    
%))	DN++3tE!4!4U$!GH rg   c                 j    [        U R                  R                  R                  U R                  5      $ r`   )r!   r  rT  rU  r2  r  s    rd   rU  Field.column  s%    djj&&,,d.>.>??rg   c                     U$ r`   ra   rM  s     rd   adaptField.adapt  s    rg   c                 .    Uc  U$ U R                  U5      $ r`   rQ  rM  s     rd   r  Field.db_value      u<4::e+<<rg   c                 .    Uc  U$ U R                  U5      $ r`   rT  rM  s     rd   r  Field.python_value  rV  rg   c                 *    [        XR                  SS9$ r  )rY   r  rM  s     rd   r  Field.to_value  s    UMM%88rg   c                     U R                   $ r`   )r?  rh  s     rd   r4  Field.get_sort_key  s    ~~rg   c                 8    UR                  U R                  5      $ r`   )rV  rU  rh  s     rd   rR  Field.__sql__  s    wwt{{##rg   c                     g r`   ra   r  s    rd   get_modifiersField.get_modifiers  r  rg   c                    U(       aV  UR                   R                  (       a;  UR                   R                  R                  U R                  U R                  5      nOU R                  nU R	                  5       nU(       aE  U(       a>  SR                  U Vs/ s H  n[        U5      PM     sn5      n[        U< SU< S35      $ [        U5      $ s  snf )Nr  rC  rG  )r+  r  r   
field_typer`  r[  r  rQ   )rb   ri  column_type	modifiersr   modifier_literals         rd   ddl_datatypeField.ddl_datatype  s    399(())//33DOO48OOEK //K&&(	9#yy))D)Q#a&))DE;0@ABB{## *Es   Cc                    [        U R                  5      /nU R                  U5      nU(       a  UR                  U5        U R                  (       a  UR                  [        S5      5        U R                  (       d  UR                  [        S5      5        U R                  (       a  UR                  [        S5      5        U R                  (       a'  UR                  [        SU R                  -  5      5        U R                  (       a  UR                  U R                  5        U R                  (       a'  UR                  [        SU R                  -  5      5        [        U5      $ )N	UNINDEXEDzNOT NULLr
  zDEFAULT NEXTVAL('%s')r  )rj  r2  rg  r  r7  rQ   r3  rS  r	
  r  rg  r  r  )rb   ri  r8  r  s       rd   ddl	Field.ddl  s    (()*%%c*	LL#>>LL[)*yyLLZ)LL]+,==LL4t}}DEFLL))*>>LL\DNN:;<rg   )r<  r>  r?  r8  r  r2  r  rI  r9  r  r}  r  r  r3  rS  rI  r	
  r7  ri  r:  )FFFNNFNNNFNNNNNFr  )rh   ri   rj   rk   r=  r>  r	  rJ  auto_incrementr;  rc  r}  r  r  rF  r&  r  rU  rQ  r  r  r  r4  rR  r`  rg  rk  rl   ra   rg   rd   r2   r2     s    NF"NNJFJN>BIM?C).	D@;7I @ @==9$$rg   r2   c                       \ rS rSrSrSrg)r   i!  ANYra   Nrh   ri   rj   rk   rc  rl   ra   rg   rd   r   r   !  s    Jrg   r   c                       \ rS rSrSrS rSrg)r:   i%  r4  c                 >     [        U5      $ ! [         a    Us $ f = fr`   )r   r  rM  s     rd   rQ  IntegerField.adapt(  s%    	u: 	L	   
 ra   Nrh   ri   rj   rk   rc  rQ  rl   ra   rg   rd   r:   r:   %  s    Jrg   r:   c                       \ rS rSrSrSrg)r   i/  r'  ra   Nrp  ra   rg   rd   r   r   /      Jrg   r   c                       \ rS rSrSrSrg)rO   i3  r*  ra   Nrp  ra   rg   rd   rO   rO   3  s    Jrg   rO   c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )r   i7  Tr$  c                    > UR                  S5      SL a  [        S[        U 5      -  5      eSUS'   [        [        U ]  " U0 UD6  g )NrS  Fz %s must always be a primary key.T)r   r  r  r  r   r  r   s      rd   r  AutoField.__init__;  sG    ::m$-?$t*LMM $}i'88rg   ra   )	rh   ri   rj   rk   rm  rc  r  rl   r  r  s   @rd   r   r   7  s    NJ9 9rg   r   c                       \ rS rSrSrSrg)r   iB  r&  ra   Nrp  ra   rg   rd   r   r   B  s    Jrg   r   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )r7   iF  z$INT GENERATED BY DEFAULT AS IDENTITYc                 J   > U(       a  SU l         [        [        U ]  " S0 UD6  g )Nz INT GENERATED ALWAYS AS IDENTITYra   )rc  r  r7   r  )rb   generate_alwaysr  r  s      rd   r  IdentityField.__init__I  s    @DOmT+5f5rg   )rc  r  )rh   ri   rj   rk   rc  r  rl   r  r  s   @rd   r7   r7   F  s    7J6 6rg   r7   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )rH   iO  c                 D   > [        S5        [        [        U ]  " U0 UD6  g )Nz"PrimaryKeyField" has been renamed to "AutoField". Please update your code accordingly as this will be completely removed in a subsequent release.)r   r  rH   r  r   s      rd   r  PrimaryKeyField.__init__P  s(     E 	F 	ot-t>v>rg   ra   r  r  s   @rd   rH   rH   O  s    ? ?rg   rH   c                       \ rS rSrSrS rSrg)r4   iW  r3  c                 >     [        U5      $ ! [         a    Us $ f = fr`   )r
  r  rM  s     rd   rQ  FloatField.adaptZ  s%    	< 	L	rt  ra   Nru  ra   rg   rd   r4   r4   W  s    Jrg   r4   c                       \ rS rSrSrSrg)r/   ia  r1  ra   Nrp  ra   rg   rd   r/   r/   a  rw  rg   r/   c                   F   ^  \ rS rSrSr  SU 4S jjrS rS rS rSr	U =r
$ )	r*   ie  r.  c                    > Xl         X l        X0l        U=(       d    [        R                  R
                  U l        [        R                  " S5      U R                  * -  U l        [        [        U ]*  " U0 UD6  g )Nrc
  )
max_digitsdecimal_places
auto_rounddecimalDefaultContextroundingDecimal_expr  r*   r  )rb   r  r  r  r  r  r  r  s          rd   r  DecimalField.__init__h  s]    $,$ CG$:$:$C$COOB'T-@-@,@A	lD*D;F;rg   c                 2    U R                   U R                  /$ r`   )r  r  r  s    rd   r`  DecimalField.get_modifiersq  s    !4!455rg   c                     [         R                  nU(       d  Uc  U$ U" S5      $ U R                  (       a5  U" [        U5      5      nUR	                  U R
                  U R                  S9$ U$ )Nr   )r  )r  r  r  r  quantizer  r  )rb   r   Ddecimal_values       rd   r  DecimalField.db_valuet  sZ    OO!M53qt3??i./M ))$))dmm)LLrg   c                     Ub@  [        U[        R                  5      (       a  U$ [        R                  " [        U5      5      $ g r`   )rz   r  r  r  rM  s     rd   r  DecimalField.python_value}  s7    %11??9U#344 rg   )r  r  r  r  r  )rc
  rD  FN)rh   ri   rj   rk   rc  r  r`  r  r  rl   r  r  s   @rd   r*   r*   e  s'    JCH<65 5rg   r*   c                   &    \ rS rSrS rS rS rSrg)_StringFieldi  c                     [        U[        5      (       a  U$ [        U[        5      (       a  UR                  S5      $ [        U5      $ )Nr  )rz   r  r  r   rM  s     rd   rQ  _StringField.adapt  s;    eY''Lz**<<((rg   c                 8    [        U [        R                  U5      $ r`   r  r  s     rd   r   _StringField.__add__  s    %5dBIIu%MMrg   c                 8    [        U[        R                  U 5      $ r`   r  r  s     rd   r8  _StringField.__radd__  s    &6ubii&NNrg   ra   N)rh   ri   rj   rk   rQ  r   r8  rl   ra   rg   rd   r  r    s      NNrg   r  c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )r   i  r9  c                 :   > Xl         [        [        U ]  " U0 UD6  g r`   )
max_lengthr  r   r  )rb   r  r  r  r  s       rd   r  CharField.__init__  s    $i'88rg   c                 T    U R                   =(       a    U R                   /=(       d    S $ r`   r  r  s    rd   r`  CharField.get_modifiers  s    4DOO#4<<rg   r  )   )	rh   ri   rj   rk   rc  r  r`  rl   r  r  s   @rd   r   r     s    J9= =rg   r   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )r3   i  r+  c                 \   > [         [        U ]  U5      nU(       a  UR                  5       nU$ r`   )r  r3   r  r	  )rb   r   r  s     rd   r  FixedCharField.python_value  s'    nd8?KKMErg   ra   )rh   ri   rj   rk   rc  r  rl   r  r  s   @rd   r3   r3     s    J rg   r3   c                       \ rS rSrSrSrg)rT   i  r5  ra   Nrp  ra   rg   rd   rT   rT     s    Jrg   rT   c                   <   ^  \ rS rSrSrS rSU 4S jjrS rSrU =r	$ )r   i  r(  c                 L    Uc  [         U l        g UR                  5       U l        g r`   )	bytearrayr  r	  r\  s     rd   _db_hookBlobField._db_hook  s!     )D ( 8 8 :Drg   c                   > [         U l        UR                  R                  (       a~  [	        UR                  R                  [
        5      (       a0  UR                  R                  R                  U R                  5        O%U R                  UR                  R                  5        UR                  R                  R                  U R                  5        [        [        U ]3  XU5      $ r`   )r  r  rT  r  rz   rL   r  r  	_db_hooksr  r  r   r&  rb   r  r  rL  r  s       rd   r&  BlobField.bind  s    %;;%++..66$$44T]]Cekk223
 	$$T]]3Y*5FFrg   c                     [        U[        5      (       a  UR                  S5      n[        U[        5      (       a  U R	                  U5      $ U$ )Nr  )rz   r  r  r  r  rM  s     rd   r  BlobField.db_value  sA    eY''LL!56EeZ(($$U++rg   )r  r  )
rh   ri   rj   rk   rc  r  r&  r  rl   r  r  s   @rd   r   r     s    J;G rg   r   c                   2   ^  \ rS rSrU 4S jrSS jrSrU =r$ )r   i  c                 `   > UR                  SS5        [        [        U ]  " U0 UD6  SU l        g )NrI  r   r   )r	  r  r   r  _BitField__current_flagr   s      rd   r  BitField.__init__  s/    )Q'h&77rg   c                    ^ Uc"  U R                   nU =R                   S-  sl         O
US-  U l          " U4S jS[        5      mT" X5      $ )Nr   c                   N   >^  \ rS rSrUU 4S jrS rS rS	S jrS rS r	Sr
U =r$ )
%BitField.flag.<locals>.FlagDescriptori  c                 :   > Xl         X l        [        TU ]  5         g r`   )_field_valuer  r  )rb   r  r   FlagDescriptorr  s      rd   r  .BitField.flag.<locals>.FlagDescriptor.__init__  s    ##nd46rg   c                 N    U R                   R                  U R                  ) 5      $ r`   )r  r"  r  r  s    rd   clear+BitField.flag.<locals>.FlagDescriptor.clear  s    {{**DKK<88rg   c                 L    U R                   R                  U R                  5      $ r`   )r  r#  r  r  s    rd   r  )BitField.flag.<locals>.FlagDescriptor.set  s    {{))$++66rg   c                 ~    Uc  U $ [        XR                  R                  5      =(       d    SnX0R                  -  S:g  $ r  )r   r  r  r  )rb   r  r  r   s       rd   r  -BitField.flag.<locals>.FlagDescriptor.__get__  s8    #K++*:*:;@q+11rg   c                     US;  a  [        S5      e[        XR                  R                  5      =(       d    SnU(       a  X0R                  -  nOX0R                  ) -  n[        XR                  R                  U5        g )NTFz"Value must be either True or Falser   )r  r   r  r  r  rR  )rb   r  is_setr   s       rd   r  -BitField.flag.<locals>.FlagDescriptor.__set__  s`    .$%IJJ++*:*:;@q[[(Ekk\)E++"2"2E:rg   c                 p    UR                  U R                  R                  U R                  5      S:g  5      $ r  )rV  r  r"  r  rh  s     rd   rR  -BitField.flag.<locals>.FlagDescriptor.__sql__  s)    wwt{{224;;?1DEErg   )r  r  r`   )rh   ri   rj   rk   r  r  r  r  r  rR  rl   r  )r  r  s   @rd   r  r    s(    7972
;F Frg   r  )r  r  )rb   r   r  s     @rd   flagBitField.flag  sK    =''EA%"'1*D	FZ 	F2 d**rg   )__current_flagr`   )rh   ri   rj   rk   r  r  rl   r  r  s   @rd   r   r     s     
 +  +rg   r   c                       \ rS rSrS rS rS rS rS rS r	S r
\
rS	 r\rS
 rS rS rS rS rS rS rS r\R.                  S   S:  a  S rSrgS rSrg)BigBitFieldDatai  c                 2   Xl         X l        U R                   R                  R                  U R                  5      nU(       d  [	        5       nO [        U[        5      (       d  [	        U5      nU=U l        U R                   R                  U R                  '   g r`   )r  r  r  r   r  rz   _buffer)rb   r  r  r   s       rd   r  BigBitFieldData.__init__  sj     	&&**4995KEE9--e$E;@@t}}--dii8rg   c                 8    U R                   R                  5         g r`   )r  r  r  s    rd   r  BigBitFieldData.clear  s    rg   c                     [        US5      u  p#[        U R                  5      nXB::  a$  U R                  R                  SUS-   U-
  -  5        X#4$ )NrK      r   )divmodr   r  rg  rb   r  byte_numbyte_offsetcur_sizes        rd   _ensure_lengthBigBitFieldData._ensure_length  sM     &sAt||$LLHqLH+D EF$$rg   c                 ^    U R                  U5      u  p#U R                  U==   SU-  -  ss'   g r  r  r  rb   r  r  r  s       rd   set_bitBigBitFieldData.set_bit  s.     $ 3 3C 8X1#34rg   c                 `    U R                  U5      u  p#U R                  U==   SU-  ) -  ss'   g r  r  r  s       rd   	clear_bitBigBitFieldData.clear_bit
  s1     $ 3 3C 8XA$4"55rg   c                     U R                  U5      u  p#U R                  U==   SU-  -  ss'   [        U R                  U   SU-  -  5      $ r  )r  r  ro  r  s       rd   
toggle_bitBigBitFieldData.toggle_bit  sL     $ 3 3C 8X1#34DLL*a;.>?@@rg   c                     [        US5      u  p#[        U R                  5      nXB::  a  g[        U R                  U   SU-  -  5      $ )NrK  Fr   )r  r   r  ro  r  s        rd   r  BigBitFieldData.is_set  sE     &sAt||$DLL*a;.>?@@rg   c                 X    U(       a  U R                  U5        g U R                  U5        g r`   )r  r  )rb   r6  r   s      rd   r  BigBitFieldData.__setitem__  s    #T)=rg   c                 ,    [        U R                  5      $ r`   )r   r  r  s    rd   r  BigBitFieldData.__len__  s    4<<  rg   c                    [        U[        5      (       a  UR                  nO.[        U[        [        [
        45      (       a  UnO[        S5      e[        U5      [        U 5      -
  nUS:  a  U R                  R                  SU-  5        U$ )NIncompatible data-typer   r  )	rz   r  r  bytesr  
memoryviewr  r   rg  )rb   r  datadiffs       rd   _get_compatible_data$BigBitFieldData._get_compatible_data"  sp    e_--==Dy*=>>D5664y3t9$!8T\\((48rg   c           	      |   [        U[        5      (       a  UR                  nO.[        U[        [        [
        45      (       a  UnO[        S5      e[	        S[        [        U 5      [        U5      5      -  5      n[        R                  " U R                  USS9n[        U5       H  u  nu  pxU" Xx5      XF'   M     U$ )Nr  r  r   )rz  )rz   r  r  r  r  r  r  maxr   r0  zip_longestr4  )	rb   r  r  r  bufr  rg  r  bs	            rd   _bitwise_opBigBitFieldData._bitwise_op-  s    e_--==Dy*=>>D566#c$iU"<<=""4<<C"2IAvXCF '
rg   c                 B    U R                  U[        R                  5      $ r`   )r  r  r  r  s     rd   r3  BigBitFieldData.__and__:  s    x}}55rg   c                 B    U R                  U[        R                  5      $ r`   )r  r  r#  r  s     rd   r5  BigBitFieldData.__or__<      x||44rg   c                 B    U R                  U[        R                  5      $ r`   )r  r  xorr  s     rd   r  BigBitFieldData.__xor__>  r  rg   c              #   |   #    U R                    H(  n[        S5       H  nUSU-  -  (       a  SOSv   M     M*     g 7f)NrK  r   r   )r  r  )rb   r  js      rd   r'  BigBitFieldData.__iter__A  s3     A1XaLaq0  rP  c                 ,    [        U R                  5      $ r`   )reprr  r  s    rd   rF  BigBitFieldData.__repr__F  s    DLL!!rg   r   r   c                 ,    [        U R                  5      $ r`   r  r  r  s    rd   r  BigBitFieldData.__str__I      dll++rg   c                 ,    [        U R                  5      $ r`   r  r  s    rd   	__bytes__BigBitFieldData.__bytes__L  r  rg   )r  r  r  N)rh   ri   rj   rk   r  r  r  r  r  r  r  r  r  __delitem__r  r  r  r3  r5  r  r'  rF  rq   version_infor  r  rl   ra   rg   rd   r  r    s~    A%56A
A K>K!	6551
"
Q	,	,rg   r  c                   2   ^  \ rS rSrSS jrU 4S jrSrU =r$ )BigBitFieldAccessoriP  c                 J    Uc  U R                   $ [        XR                  5      $ r`   )r  r  r  r  s      rd   r  BigBitFieldAccessor.__get__Q  s!    ::x33rg   c                   > [        U[        5      (       a  UR                  5       nO[        U[        5      (       a  [	        U5      nO[        U[
        5      (       a  [        U5      nOr[        U[        5      (       a  [        UR                  5      nOG[        U[        5      (       a  UR                  S5      nO [        U[        5      (       d  [        S5      e[        [        U ];  X5        g )Nr  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)rz   r  tobytesbuffer_typer  r  r  r  r  r  r  r  r  r  r  )rb   r  r   r  s      rd   r  BigBitFieldAccessor.__set__U  s    eZ((MMOE{++%LEy))u%E//u}}-Ey))LL)EE:.. 9 : :!40Arg   ra   r`   )rh   ri   rj   rk   r  r  rl   r  r  s   @rd   r  r  P  s    4B Brg   r  c                   2   ^  \ rS rSr\rU 4S jrS rSrU =r	$ )r   if  c                 Z   > UR                  S[        5        [        [        U ]  " U0 UD6  g )NrI  )r	  r  r  r   r  r   s      rd   r  BigBitField.__init__i  s'    )Z0k4)4:6:rg   c                 "    Ub  [        U5      $ U$ r`   )r  rM  s     rd   r  BigBitField.db_valuem  s    $)$5z% @5@rg   ra   )
rh   ri   rj   rk   r  rJ  r  r  rl   r  r  s   @rd   r   r   f  s    (N;A Arg   r   c                   $    \ rS rSrSrS rS rSrg)rX   iq  r7  c                 h   [        U[        5      (       a  [        U5      S:X  a  U$ [        U[        5      (       a#  [        U5      S:X  a  [        R
                  " US9n[        U[        R
                  5      (       a  UR                  $  [        R
                  " U5      R                  $ !   Us $ = f)N    rL  r  )rz   r  r   r  r
  r7  r
  rM  s     rd   r  UUIDField.db_valuet  s    eZ((SZ2-=Lu%%#e**:IIE*EeTYY''99	99U#'''	Ls   B+ +B1c                 z    [        U[        R                  5      (       a  U$ Ub  [        R                  " U5      $ S $ r`   )rz   r
  r7  rM  s     rd   r  UUIDField.python_value  s1    eTYY''L#(#4tyy>$>rg   ra   Nrh   ri   rj   rk   rc  r  r  rl   ra   rg   rd   rX   rX   q  s    J?rg   rX   c                   $    \ rS rSrSrS rS rSrg)r   i  r8  c                 n   [        U[        5      (       a   [        U5      S:X  a  U R                  U5      $ [        U[        5      (       a#  [        U5      S:X  a  [
        R                  " US9n[        U[
        R                  5      (       a  U R                  UR                  5      $ Ub  [        S5      eg )NrL  r-  )r
  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)rz   r  r   r  r  r
  r7  r  rM  s     rd   r  BinaryUUIDField.db_value  s    eU##E
b(8$$U++z**s5zR/?II%(EeTYY''$$U[[11 H I I rg   c                    [        U[        R                  5      (       a  U$ [        U[        5      (       a  UR	                  5       nO'U(       a   [        U[
        5      (       d  [        U5      nUb  [        R                  " US9$ S $ )Nr.  )rz   r
  r7  r  r#  r  rM  s     rd   r  BinaryUUIDField.python_value  sa    eTYY''Lz**MMOE:eU33%LE).):tyyu%DDrg   ra   Nr2  ra   rg   rd   r   r     s    JIErg   r   c                    ^  U 4S jnU$ )Nc                 d   > U R                   R                  R                  R                  TU 5      $ r`   )r  rT  r  r  )rb   r  s    rd   dec_date_part.<locals>.dec  s&    zz((55iFFrg   ra   r  r:  s   ` rd   
_date_partr=    s    GJrg   c                     U=(       d    S nU H)  n U" [         R                   R                  X5      5      s  $    U $ ! [         a     M<  f = f)Nc                     U $ r`   ra   xs    rd   r|   "format_date_time.<locals>.<lambda>  s    arg   )r   strptimer  )r   formatspost_processfmts       rd   r   r     sR    0KL	 1 1 : :5 FGG 
 L  		s   $>
AAc                 t     [         R                   R                  U S5      $ ! [        [        4 a    U s $ f = f)Nr   )r   rC  r	  r  rf  s    rd   r	  r	    s:      ))%1DEEz" s   " 77c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )_BaseFormattedFieldi  Nc                 @   > Ub  Xl         [        [        U ]  " U0 UD6  g r`   )rD  r  rI  r  )rb   rD  r  r  r  s       rd   r  _BaseFormattedField.__init__  s#    "L!414B6Brg   )rD  r`   )rh   ri   rj   rk   rD  r  rl   r  r  s   @rd   rI  rI    s    GC Crg   rI  c                       \ rS rSrSr/ SQrS rS rS r\	" \
" S5      5      r\	" \
" S5      5      r\	" \
" S	5      5      r\	" \
" S
5      5      r\	" \
" S5      5      r\	" \
" S5      5      rSrg)r)   i  r-  )r   r   r   c                 h    U(       a*  [        U[        5      (       a  [        XR                  5      $ U$ r`   )rz   r  r   rD  rM  s     rd   rQ  DateTimeField.adapt  s%    Zz22#E<<88rg   c                 `    U R                   R                  R                  R                  U 5      $ r`   r  rT  r  r  r  s    rd   r  DateTimeField.to_timestamp  #    zz((55d;;rg   c                 `    U R                   R                  R                  R                  X5      $ r`   r  rT  r  r  rb   r^  s     rd   truncateDateTimeField.truncate  #    zz((66tBBrg   r   r   r   r   r   r   ra   N)rh   ri   rj   rk   rc  rD  rQ  r  rV  r  r=  r   r   r   r   r   r   rl   ra   rg   rd   r)   r)     sz    JG
<C Jv&'DZ()E
:e$
%CJv&'Dj*+Fj*+Frg   r)   c                       \ rS rSrSr/ SQrS rS rS r\	" \
" S5      5      r\	" \
" S5      5      r\	" \
" S	5      5      rS
rg)r(   i  r,  )r   r   r   c                     U(       a.  [        U[        5      (       a  S n[        XR                  U5      $ U(       a/  [        U[        R                  5      (       a  UR                  5       $ U$ )Nc                 "    U R                  5       $ r`   )r   r@  s    rd   r|   !DateField.adapt.<locals>.<lambda>  s
    1668rg   )rz   r  r   rD  r   r   rb   r   pps      rd   rQ  DateField.adapt  sM    Zz22#B#E<<<<z%):):;;::<rg   c                 `    U R                   R                  R                  R                  U 5      $ r`   rP  r  s    rd   r  DateField.to_timestamp  rR  rg   c                 `    U R                   R                  R                  R                  X5      $ r`   rT  rU  s     rd   rV  DateField.truncate  rX  rg   r   r   r   ra   N)rh   ri   rj   rk   rc  rD  rQ  r  rV  r  r=  r   r   r   rl   ra   rg   rd   r(   r(     sM    JG<C Jv&'DZ()E
:e$
%Crg   r(   c                   z    \ rS rSrSr/ SQrS r\" \" S5      5      r	\" \" S5      5      r
\" \" S5      5      rSrg	)
rU   i  r6  )r   r   r   r   r   c                 h   U(       a]  [        U[        5      (       a  S n[        XR                  U5      $ [        U[        R                  5      (       a  UR                  5       $ UbJ  [        U[        R                  5      (       a+  [        R                  R                  U-   R                  5       $ U$ )Nc                 "    U R                  5       $ r`   )r   r@  s    rd   r|   !TimeField.adapt.<locals>.<lambda>  s
    qvvxrg   )rz   r  r   rD  r   r   	timedeltaminr]  s      rd   rQ  TimeField.adapt   s    %,,''||R@@E8#4#455zz|#E83E3E!F!F%%))E17799rg   r   r   r   ra   N)rh   ri   rj   rk   rc  rD  rQ  r  r=  r   r   r   rl   ra   rg   rd   rU   rU     sB    JG	 Jv&'Dj*+Fj*+Frg   rU   c                    ^  U 4S jnU$ )Nc                    > U R                   R                  R                  nU R                  S:  a  U [	        U R                  SS9-  OU nUR                  TUR                  U5      5      $ Nr   Fr]  )r  rT  r  
resolutionrY   r  r  )rb   r  rR  r  s      rd   r:  !_timestamp_date_part.<locals>.dec  s]    ZZ&&??Q& doo??,0 	y"*;*;D*ABBrg   ra   r<  s   ` rd   _timestamp_date_partrp    s    C
 Jrg   c                   <  ^ \ rS rSr\" S5       V Vs/ s H  nSU-  PM
     snn rU4S jrS rS rS r	S r
S	 rS
 r\" \" S5      5      r\" \" S5      5      r\" \" S5      5      r\" \" S5      5      r\" \" S5      5      r\" \" S5      5      rSrU=r$ s  snn f )rV   i  r  rc
  c                 j  > UR                  SS 5      U l        U R                  (       d  SU l        OwU R                  [        SS5      ;   a  SU R                  -  U l        OHU R                  U R                  ;  a.  [	        SSR                  S U R                   5       5      -  5      eS	U R                  -  U l        UR                  S
S5      =(       d    SU l        U R                  (       a  [        O[        R                  R                  nUR                  SU5        [        [        U ]:  " U0 UD6  g )Nrn  r   rn   r  rc
  z,TimestampField resolution must be one of: %sr  c              3   8   #    U  H  n[        U5      v   M     g 7fr`   )r  )ru  rg  s     rd   rw  *TimestampField.__init__.<locals>.<genexpr>&  s     &N7M!s1vv7Mry  i@B r   FrI  )r  rn  r  valid_resolutionsr  r[  ticks_to_microsecondr   r   r   r   r	  r  rV   r  )rb   r  r  dfltr  s       rd   r  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=rg   c                     [         R                   " [        R                  " [        R                  " UR	                  5       5      5      S S 6 $ )N   )r   r   gmtimemktime	timetuple)rb   r   s     rd   local_to_utcTimestampField.local_to_utc.  s4    
   $++dkk",,..I"J2A"NOOrg   c                     [         R                  " UR                  5       5      n[        R                  R	                  U5      $ r`   )calendartimegmutctimetupler   r   )rb   r   r   s      rd   utc_to_localTimestampField.utc_to_local5  s0    
 __R__./  ..r22rg   c                     U R                   (       a$  [        R                  " UR                  5       5      $ [        R
                  " UR                  5       5      $ r`   )r   r  r  r  r   r|  r}  rM  s     rd   get_timestampTimestampField.get_timestamp=  s7    88??5#5#5#788;;u011rg   c                    Uc  g [        U[        R                  5      (       a  Ov[        U[        R                  5      (       a7  [        R                  " UR                  UR                  UR
                  5      nO [        [        XR                  -  5      5      $ U R                  U5      nU R                  S:  a  X!R                  S-  -  nX R                  -  n[        [        U5      5      $ )Nr   gư>)rz   r   r   r   r   r   r   roundrn  r  microsecond)rb   r   r   s      rd   r  TimestampField.db_valueD  s    =eX..//x}}--%%ejj%++uyyIEuU__4566&&u-	??Q++g56I(I5#$$rg   c                 r   Ub  [        U[        [        [        45      (       a  U R                  S:  a/  [        XR                  5      u  p[        X R                  -  5      nOSnU R                  (       a  [        U5      nO[        R                  R                  U5      nU(       a  UR                  US9nU$ )Nr   r   )r  )rz   r   r
  longrn  r  rv  r   r   r   r   r   )rb   r   ticksmicrosecondss       rd   r  TimestampField.python_valueU  s    EC3E!F!F"%e__="5+D+D#DE xx(/ ))77>,?rg   c                     U R                   S:  a  U [        U R                   SS9-  OU nU R                  R                  R                  R                  U5      $ rm  )rn  rY   r  rT  r  r  )rb   rR  s     rd   r  TimestampField.from_timestampg  sL    ??Q& doo??,0 	zz((77==rg   r   r   r   r   r   r   )rn  rv  r   )rh   ri   rj   rk   r  ru  r  r~  r  r  r  r  r  r  rp  r   r   r   r   r   r   rl   r  )ru  rg  r  s   00@rd   rV   rV     s    (-a11Q1>"P32%"$>
 (01D)'23E
'.
/C(01D*845F*845Fm 2s   BrV   c                        \ rS rSrS rS rSrg)r>   it  c                 f    Ub.  [         R                  " S[        R                  " U5      5      S   $ g )N!Ir   )structr}  socket	inet_atonrb   rE  s     rd   r  IPField.db_valueu  s-    ?==v'7'7'<=a@@ rg   c                 `    Ub+  [         R                  " [        R                  " SU5      5      $ g )Nr  )r  	inet_ntoar  packr  s     rd   r  IPField.python_valuey  s(    ?##FKKc$:;; rg   ra   N)rh   ri   rj   rk   r  r  rl   ra   rg   rd   r>   r>   t  s    A<rg   r>   c                       \ rS rSrSr\rSrg)r   i~  r)  ra   N)rh   ri   rj   rk   rc  ro  rQ  rl   ra   rg   rd   r   r   ~  s    JErg   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )r   i  c                 B   > [         [        U ]
  " U0 UD6  Ub  Xl        g g r`   )r  r   r  rQ  )rb   rQ  r  r  r  s       rd   r  BareField.__init__  s'    i'88J rg   c                     g r`   ra   rh  s     rd   rg  BareField.ddl_datatype  r
  rg   rT  r`   )rh   ri   rj   rk   r  rg  rl   r  r  s   @rd   r   r     s    
 rg   r   c                      ^  \ rS rSr\r\r    SU 4S jjr\	S 5       r
U 4S jrS rS rS rS rSU 4S	 jjrSS
 jrS rSrU =r$ )r6   i  c                 L  > UR                  SS5        [        [        U ]  " U0 UD6  Ub  [	        S5        UnU	b  [	        S5        U	nUb  [	        S5        UnUS:H  U l        Xl        X l        X0l        S U l	        X@l
        XPl        X`l        Xpl        Xl        Xl        Xl        g )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.rb   )r	  r  r6   r  r   _is_self_referencer  r  declared_backrefbackref	on_delete	on_update
deferrabler  object_id_namer  constraint_name)rb   r  r  r  r  r  r  	_deferredr  to_fieldr  r  r  related_namer  r  r  s                   rd   r  ForeignKeyField.__init__  s    
 	'4(ot-t>v>  B CE B CE# : ;"G"'6/ '""$!,".rg   c                     [        U R                  [        5      (       d  U R                  R                  $ [        U R                  [        5      (       a  [
        R                  $ [        R                  $ r`   )rz   r  r   rc  r   r   r:   r  s    rd   rc  ForeignKeyField.field_type  sL    $..)44>>,,,55"---&&&rg   c                    > [        U R                  [        5      (       d  U R                  R                  5       $ [        [
        U ]  5       $ r`   )rz   r  r   r`  r  r6   )rb   r  s    rd   r`  ForeignKeyField.get_modifiers  s7    $..)44>>//11_d9;;rg   c                     U R                   =(       dT    SU R                  R                  R                  < SU R                  < SU R
                  R                  R                  < 3$ )Nfk_r  _refs_)r  r  rT  ry  r2  r  r  s    rd   get_constraint_name#ForeignKeyField.get_constraint_name  sN    ## - -JJ''NN  ++(- 	-rg   c                 8    U R                   R                  U5      $ r`   )r  rQ  rM  s     rd   rQ  ForeignKeyField.adapt  s    ~~##E**rg   c                     [        XR                  5      (       a  [        XR                  R                  5      nU R                  R                  U5      $ r`   )rz   r  r   r  r  r  rM  s     rd   r  ForeignKeyField.db_value  s:    e^^,,E>>#6#67E~~&&u--rg   c                 p    [        XR                  5      (       a  U$ U R                  R                  U5      $ r`   )rz   r  r  r  rM  s     rd   r  ForeignKeyField.python_value  s+    e^^,,L~~**511rg   c                   > U R                   (       d"  UR                  S5      (       a  UOUS-   U l         U R                  (       d7  U R                   U l        U R                  U:X  a  U =R                  S-  sl        O8U R                  U:X  a(  [        SUR                  R
                  < SU< S35      eU R                  (       a  Xl        [        U R                  [        5      (       a&  [        U R                  U R                  5      U l	        O2U R                  c%  U R                  R                  R                  U l	        [        [        U ]?  XU5        U R                  U l        [#        U R$                  5      (       a  U R%                  U 5      U l        OU R$                  S sU l        U l        U R&                  (       d  SUR                  R
                  -  U l        U(       aa  [)        XR                  [+        U 5      5        U R&                  S;  a1  [)        U R                  U R&                  U R-                  U 5      5        g g g )N_idzForeignKeyField "z"."zA" specifies an object_id_name that conflicts with its field name.z%s_setz!+)r2  r  r  r  rT  r  r  r  rz   r  r  r   rS  r  r6   r&  rI  r5  r  r  rR  r,  backref_accessor_classr  s       rd   r&  ForeignKeyField.bind  s   '+}}U';';tD"""&"2"2D""d*##u,#  D((-(8(8$@ A A """Ndnnj11$T^^T^^DDN^^#!^^11==DN 	ot)%}E,,T**++006DL262G2G/DL$/||#ekk&6&66DLE..0@0FG||4'33D9; ( rg   c           	         / nU R                   (       d  U(       a>  U R                  5       nUR                  [        S5      [	        [        U5      5      /5        UR                  [        S5      [        U 45      [        S5      U R                  [        U R                  45      /5        U R                  (       a'  UR                  [        SU R                  -  5      5        U R                  (       a'  UR                  [        SU R                  -  5      5        U R                  (       a'  UR                  [        SU R                  -  5      5        [        U5      $ )Nr  zFOREIGN KEY
REFERENCESzON DELETE %szON UPDATE %szDEFERRABLE %s)r  r  rg  rQ   rj  r  r  r  r  r  r  r  r  r  )rb   explicit_namer/  r  s       rd   foreign_key_constraint&ForeignKeyField.foreign_key_constraint  s    =++-DLLL!0679 : 	dW%NNdnn./1 	2 >>LL^dnn<=>>>LL^dnn<=>??LL_t>?@rg   c                     UR                  S5      (       a  [        S5      eXR                  R                  R                  ;   a#  U R                  R                  R                  U   $ [        SU-  5      e)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  rT  r  r   s     rd   r   ForeignKeyField.__getattr__  sl    ??4   !LMM>>''...>>''..t44 ACGH I 	Irg   )r  r  r2  r  r  r  r  r  r  r  r  r  r  rI  )NNNNNNNNNTNNr  r  )rh   ri   rj   rk   r  rJ  r%  r  r  r  rc  r`  r  rQ  r  r  r&  r  r   rl   r  r  s   @rd   r6   r6     sd    'N,BF<@?CDH!/F ' '<
-+.
2
";H,I Irg   r6   c                   n   ^  \ rS rSr\" 5       rU 4S jr\R                  rSS jr	S r
\S 5       rSrU =r$ )r+   i  c                    > X l         UR                  5       U l        [        R                  R                  U 5        [        [        U ]  UR                  S5      UR                  S5      UR                  S5      S9  g )Nr2  r3  rS  )r2  r3  rS  )	field_kwargsrp  rel_model_namer+   _unresolvedr  r  r  r   )rb   r  r  r  s      rd   r  DeferredForeignKey.__init__  sg    ",224&&**40 $0

=1F#

=1 	1 	3rg   c                 B    [        U R                  40 U R                  D6$ r`   )r+   r  r  )rb   memos     rd   __deepcopy__DeferredForeignKey.__deepcopy__&  s    !$"5"5K9J9JKKrg   c                    [        U4SS0U R                  D6nUR                  (       a1  U R                  R                  R                  U R                  U5        g U R                  R                  R                  U R                  U5        g )Nr  T)r6   r  rS  r  rT  set_primary_keyr  	add_field)rb   r  r  s      rd   	set_modelDeferredForeignKey.set_model)  sa    	OTOT=N=NOJJ,,TYY>JJ&&tyy%8rg   c                 "   [        [        R                  [        R                  " S5      S9nU H]  nUR
                  U R                  R                  5       :X  d  M-  UR                  U 5        [        R                  R                  U5        M_     g )Nr>  r  )
r  r+   r  r  
attrgetterr  rh   rp  r  discard)	model_cls
unresolveddrs      rd   resolveDeferredForeignKey.resolve1  sj    .:: ( 3 3H =?
B  I$6$6$<$<$>>Y'"..66r: rg   )r  r  r`   )rh   ri   rj   rk   r  r  r  r|  r  r  r  r  r  rl   r  r  s   @rd   r+   r+     s9    %K3 HL9 ; ;rg   r+   c                   &    \ rS rSrS rS rS rSrg)r,   i;  c                     / U l         g r`   _refsr  s    rd   r  DeferredThroughModel.__init__<  s	    
rg   c                 >    U R                   R                  XU45        g r`   )r  r  r  s       rd   	set_fieldDeferredThroughModel.set_field?  s    

5./rg   c                 r    U R                    H'  u  p#nXl        UR                  R                  XC5        M)     g r`   )r  through_modelrT  r  )rb   r  	src_modelm2mfieldr  s        rd   r  DeferredThroughModel.set_modelB  s-    )-%I%2"OO%%d5 *4rg   r  N)rh   ri   rj   rk   r  r  r  rl   ra   rg   rd   r,   r,   ;  s    06rg   r,   c                   (    \ rS rSrS=r=r=rrSrSr	g)	MetaFieldiH  NFra   )
rh   ri   rj   rk   r2  rI  r  r  rS  rl   ra   rg   rd   r  r  H  s    +//K/'/EDKrg   r  c                   8   ^  \ rS rSrU 4S jrSS jrS rSrU =r$ )ManyToManyFieldAccessoriM  c                 ,  > [         [        U ]  XU5        UR                  U l        UR                  U l        UR
                  U l        U R
                  R                  R                  U R                     nU R
                  R                  R                  U R                     nU(       d(  [        SU R                  < SU R
                  < S35      eU(       d(  [        SU R                  < SU R
                  < S35      eUS   U l	        US   U l
        g )NzCannot find foreign-key to "z" on "z" model.r   )r  r  r  r  r  r  rT  
model_refsr  src_fkdest_fk)rb   r  r  r  src_fksdest_fksr  s         rd   r   ManyToManyFieldAccessor.__init__N  s    %t5eDI[[
"00$$**55djjA%%++66t~~F"jj$*<*<> ? ?"nnd.@.@B C Caj{rg   c                    UGbN  U(       d~  U R                   R                  S:w  ad  [        XR                   R                  5      n[        U[        5      (       a0  U Vs/ s H"  n[        XPR
                  R                  5      PM$     sn$ [        XR                   R                  R                  5      nUc9  U R                  R                  (       a  [        SU R                  < SU< S35      e[        XU R                  5      R                  U R                  5      R                  U R                  5      R!                  U R                   U:H  5      $ U R                  $ s  snf )Nr   zCannot get many-to-many "" for unsaved instance "r	  )r  r  r   rz   rd  r  r  r  r  _prevent_unsavedr  ManyToManyQueryr  r[  r  r  r  )rb   r  r  force_queryr  r  src_ids          rd   r  ManyToManyFieldAccessor.__get__^  s    4;;#6#6##=!(KK,?,?@gt,,GNOwGC):):;wOOX{{'<'<'A'ABF~$**"="= 59ZZ"K L L#HDNNCT$,,-T$**%U4;;&013
 zz Ps   )Ec                    [        XR                  R                  R                  5      nUc9  U R                  R
                  (       a  [        SU R                  < SU< S35      eU R                  USS9nUR                  USS9  g )NzCannot set many-to-many "r  r	  T)r  )clear_existing)	r   r  r  r  r  r   r  r  r  )rb   r  r   r  rl  s        rd   r  ManyToManyFieldAccessor.__set__p  sm    ;;#8#8#=#=>>djj9915XG H HX48		%	-rg   )r  r  r  r  r  r  )	rh   ri   rj   rk   r  r  r  rl   r  r  s   @rd   r  r  M  s    # $. .rg   r  c                      ^  \ rS rSr\r  SS jrS rSU 4S jjrS r	\
S 5       r\R                  S 5       rS rS	 rS
rU =r$ )r@   iy  c                     UbH  [        U[        5      (       d  [        U5      (       d  [        S5      eU(       d  Uc  Ub  [	        S5      eXl        X l        X0l        X@l        XPl	        X`l
        Xpl        g )NzKUnexpected value for through_model. Expected Model or DeferredThroughModel.zFCannot specify on_delete or on_update when through_model is specified.)rz   r,   rS  r	  r  r  r  _through_model
_on_delete
_on_updater   _is_backref)rb   r  r  r  r  r  prevent_unsavedr  s           rd   r  ManyToManyField.__init__|  s}    $}.BCC]++ !A B BI$9Y=R  "? @ @+## /&rg   c                     [        U 5      $ r`   )r  r  s    rd   _get_descriptorManyToManyField._get_descriptor  s    &t,,rg   c           	        > [        U R                  [        5      (       a  U R                  R                  XU5        g [        [
        U ]  XU5        U R                  (       d  [        U R                  UU R                  U R                  U R                  SS9nU R                  =(       d    UR                  R                  S-   U l        U R                  R                  R!                  U R                  U5        g g )NT)r  r  r  r  r  ru   )rz   r
  r,   r  r  r@   r&  r  r  r  r  r  r  rT  r  r  r  )rb   r  r  rL  many_to_many_fieldr  s        rd   r&  ManyToManyField.bind  s    d))+?@@))%t<ot)%}E!0

"00//// ""  <<A5;;+;+;c+ADLNN  **4<<9KL  rg   c                     [        U R                  U R                  4U R                  (       + U R                  445       VVs/ s H  u  pUPM	     snn$ s  snnf r`   )r  r  r  r  )rb   r  r  s      rd   
get_modelsManyToManyField.get_models  s[    &,tzz*!!!4>>2.4 '5 6 '5(! '5 6 	6 6s   Ac                 ^    U R                   c  U R                  5       U l         U R                   $ r`   )r
  _create_through_modelr  s    rd   r  ManyToManyField.through_model  s+    &"&"<"<">D"""rg   c                     Xl         g r`   )r
  rM  s     rd   r  r    s    #rg   c                   ^ ^^^ T R                  5       u  mmTT4 Vs/ s H  oR                  R                  PM     snm " UUU U4S jS5      nT R                  T R                  S.nTR                  R
                  [        T40 UD6TR                  R
                  [        T40 UD6SU0nTR                  < TR                  < S3n[        U[        4U5      $ s  snf )Nc                     > \ rS rSr YR                  R
                  R                  r YR                  R
                  R                  rS\"  Y5      -  r	 Y R
                  R                   YR
                  R                  4S44rSrg)3ManyToManyField._create_through_model.<locals>.Metai  z%s_%s_throughTra   N)rh   ri   rj   rk   r  rT  r  rT  re  ry  r  rR
  rl   )r  r   rb   tabless   rd   r  r    sb    zz''00HZZ%%,,F(5=8J))..#))..1Grg   r  )r  r  Through)
r  rT  ry  r  r  r  r6   rh   r  rA   )	rb   r  r  r  attrs
klass_namer  r   r   s	   `     @@@rd   r  %ManyToManyField._create_through_model  s    ??$S7:CjAjU++((jA	 	  $T__MIINNOC:6:IINNOC:6:D
 '*llCLLA
J%00# Bs   Cc                     U R                   $ r`   )r  r  s    rd   get_through_model!ManyToManyField.get_through_model  s    !!!rg   )r  r  r  r   r
  r  r  )NNNNTFr  )rh   ri   rj   rk   r  rJ  r  r  r&  r  r  r  rX  r  r&  rl   r  r  s   @rd   r@   r@   y  s`    ,NJNCH'$-M$6
 # #
 $ $1*" "rg   r@   c                   F   ^  \ rS rSrSrSU 4S jjrS rS rS	S jrSr	U =r
$ )
VirtualFieldi  Nc                 r   > Ub  UOU R                   nUb  U" 5       OS U l        [        [        U ]  " U0 UD6  g r`   )field_classfield_instancer  r)  r  )rb   r+  r  r  r2   r  s        rd   r  VirtualField.__init__  s:    *6D<L<L).):eglD*D;F;rg   c                 V    U R                   b  U R                   R                  U5      $ U$ r`   )r,  r  rM  s     rd   r  VirtualField.db_value  s*    *&&//66rg   c                 V    U R                   b  U R                   R                  U5      $ U$ r`   )r,  r  rM  s     rd   r  VirtualField.python_value  s*    *&&33E::rg   c           	      r    Xl         U=U l        =U l        U l        [	        XU R                  XU5      5        g r`   )r  r2  r  rI  rR  rJ  rK  s       rd   r&  VirtualField.bind  s4    
8<<<49t~T00dCDrg   )r2  r,  r  r  rI  r`   r  )rh   ri   rj   rk   r+  r  r  r  r&  rl   r  r  s   @rd   r)  r)    s#    K<


E Erg   r)  c                   `    \ rS rSrSrS r\S 5       rSS jrS r	S r
S rS	 rS
 rSS jrSrg)r"   i  Nc                     Xl         S U l        g r`   )field_names_safe_field_names)rb   r6  s     rd   r  CompositeKey.__init__  s    &!%rg   c                 
   U R                   cf  U R                  c  U R                  $ U R                   Vs/ s H0  nU R                  R                  R                  U   R
                  PM2     snU l         U R                   $ s  snf r`   )r7  r  r6  rT  r  rI  rb   fs     rd   safe_field_namesCompositeKey.safe_field_names  s{    !!)zz!''' 04/?/?&A/?! '+jj&6&6&=&=a&@&J&J/?&AD"%%%&As   7B c           	      t    Ub/  [        U R                   Vs/ s H  n[        X5      PM     sn5      $ U $ s  snf r`   )re  r<  r   )rb   r  r  r;  s       rd   r  CompositeKey.__get__  s:    8M8MN8M1'(.8MNOO Os   5c                    [        U[        [        45      (       d  [        S5      e[	        U5      [	        U R
                  5      :w  a  [        S5      e[        U5       H  u  p4[        XR
                  U   U5        M      g )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   rd  re  r	  r   r6  r  r4  rR  )rb   r  r   r  field_values        rd   r  CompositeKey.__set__  sx    %$// 7 8 8u:T--.. H I I )% 0CH..s3[A !1rg   c                     [        U R                  U5       VVs/ s H+  u  p#U R                  R                  R                  U   U:H  PM-     nnn[        [        R                  U5      $ s  snnf r`   )zipr6  r  rT  r  rx   r  r  )rb   r  r  r   r  s        rd   r  CompositeKey.__eq__  sd    +.t/?/?+GI+G<5 

((//6%?+G 	 Ihmm[11Is   2A)c                     X:H  ) $ r`   ra   r  s     rd   r  CompositeKey.__ne__	  s    rg   c                 X    [        U R                  R                  U R                  45      $ r`   )r	  r  rh   r6  r  s    rd   r  CompositeKey.__hash__  s"    TZZ(($*:*:;<<rg   c           	          UR                   [        :g  nUR                  [        U R                   Vs/ s H&  nU R
                  R                  R                  U   PM(     snSU5      5      $ s  snf rj  )r  ru  rV  r  r6  r  rT  r  )rb   ri  rc  r  s       rd   rR  CompositeKey.__sql__  sp     l*wwx.2.>.>!@.>U "&!1!1!8!8!?.>!@AEvO P 	P !@s   -A,c                 f    Xl         U=U l        =U l        U l        [	        XR                  U 5        g r`   )r  r2  r  rI  rR  rK  s       rd   r&  CompositeKey.bind  s+    
8<<<49t~yy$'rg   )r7  r2  r6  r  r  rI  r`   r  )rh   ri   rj   rk   r	
  r  r  r<  r  r  r  r  r  rR  r&  rl   ra   rg   rd   r"   r"     sE    H& & &
B2
 =P(rg   r"   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)_SortedFieldListi  _keys_itemsc                      / U l         / U l        g r`   rP  r  s    rd   r  _SortedFieldList.__init__   s    
rg   c                      U R                   U   $ r`   )rR  )rb   rg  s     rd   r  _SortedFieldList.__getitem__$  s    {{1~rg   c                 ,    [        U R                  5      $ r`   )r~  rR  r  s    rd   r'  _SortedFieldList.__iter__'  rI  rg   c                     UR                   n[        U R                  U5      n[        U R                  U5      nXR                  X4 ;   $ r`   )r?  r   rQ  r   rR  )rb   r6  r  rg  r  s        rd   __contains___SortedFieldList.__contains__*  s=    NN

A&Q'{{1'''rg   c                 L    U R                   R                  UR                  5      $ r`   )rQ  r  r?  r'  s     rd   r  _SortedFieldList.index0  s    zz00rg   c                     UR                   n[        U R                  U5      nU R                  R                  X25        U R                  R                  X15        g r`   )r?  r   rQ  ri  rR  )rb   r6  r  rg  s       rd   ri  _SortedFieldList.insert3  s?    NN

A&

!1#rg   c                 Z    U R                  U5      nU R                  U	 U R                  U	 g r`   )r  rR  rQ  )rb   r6  r  s      rd   rv	  _SortedFieldList.remove9  s'    jjKKJJsOrg   )rR  rQ  N)rh   ri   rj   rk   r  r  r  r'  rZ  r  ri  rv	  rl   ra   rg   rd   rO  rO    s*    #I!(1$rg   rO  c                   6   \ rS rSrS#S jr\S 5       r\R                  S 5       rS rS$S jr	S r
S$S	 jrS$S
 jrS$S jrS$S jrS$S jrS%S jrS%S jrS$S jrS$S jrS$S jrS$S jrS rS$S jrS rS rS rS rS rS rS rS rS r S$S jr!S  r"S&S! jr#S"r$g)'rN   iB  Nc                 T    Xl         X l        UR                  S[        5        X0l        g )Nr  )r  r}  r	  rw  r/  )rb   r  r  r/  s       rd   r  SchemaManager.__init__C  s"    
!""7L9.rg   c                     U R                   =(       d     U R                  R                  R                  nUc  [	        SU R                  -  5      eU$ )Nz=database attribute does not appear to be set on the model: %s)r}  r  rT  r  r8   r  s     rd   r  SchemaManager.databaseI  sL    ^^8tzz//88:& (ACG::(N O O	rg   c                     Xl         g r`   r[  rM  s     rd   r  rf  Q  s    rg   c                 N    U R                   R                  " S0 U R                  D6$ r-  )r  r  r/  r  s    rd   _create_contextSchemaManager._create_contextU  s     }},,Dt/C/CDDrg   c                    UR                  SS5      nU R                  5       nUR                  U(       a  SOS5        U(       a  UR                  S5        UR                  U R                  5      R                  S5        / n/ nU R                  R
                  nUR                  (       ak  UR                  R                   Vs/ s H  nUR                  U   R                  PM     n	nUR                  [        [        S5      [        U	5      45      5        UR                   Hl  n
UR                  U
R!                  U5      5        [#        U
[$        5      (       d  M:  U
R&                  (       a  MM  UR                  U
R)                  5       5        Mn     UR*                  (       a  UR-                  UR*                  5        UR-                  U R/                  U5      5        UR                  [        XV-   5      5        UR0                  b^  [3        UR0                  5      nU HC  n[#        U[4        5      (       d  [7        S5      eUR                  S5      R                  U5        ME     / nUR8                  (       a  UR                  S	5        UR:                  (       a  UR                  S
5        U(       a#  UR                  SSR=                  U5      -  5        U$ s  snf )N	temporaryFCREATE TEMPORARY TABLE CREATE TABLE rt  r   r
  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr  r  )r  ri  rD  rV  r  rT  composite_keyrS  r6  r  rU  r  r  rQ   r  sorted_fieldsrk  rz   r6   r  r  r  rg  _create_table_option_sqltable_settingsrg  r  r  strict_tableswithout_rowidr[  )rb   rj  r  is_tempri  r  r  rP  
field_name
pk_columnsr  rs  setting
extra_optss                 rd   _create_tableSchemaManager._create_tableX  s7   ++k51""$-oNKK()

##C(zz,0,<,<,H,HJ,Hj ++j188,H  Jx]);)9*)E)G  H I ''ENN599S>*%11%...""5#?#?#AB (
 t//0488AB !678*)$*=*=>N)!':66$%EFFC ((1 *
 
z00:z00AKK		* 556
9Js   #Kc                    / n[        U R                  R                  R                  =(       d    0 U5      nU(       d  U$ [	        UR                  5       5       Hy  u  p4[        U[        5      (       d;  [        U5      (       a  UR                  R                  nO[        [        U5      5      nUR                  [        [        U5      U4SS95        M{     U$ )Nr   r>  )rX  r  rT  r  r  rj  rz   ri  rS  rU  rQ   r  r  r  )rb   r  r8  rm  r   s        rd   rr  &SchemaManager._create_table_option_sql  s    TZZ--55;WEL 1JCeT**E??!KK--EE
OELL3s8U"3#>? 2 rg   c                 ^    U R                   R                  U R                  " SSU0UD65        g Nrj  ra   )r  r  r{  rb   rj  r  s      rd   r  SchemaManager.create_table  s'    d00FdFgFGrg   c                    U R                  5       R                  UR                  S5      (       a  SOS5      nU(       a  UR                  S5        UR                  [	        [        U5      6 5      R                  S5      R                  U5      $ )Nrl  rm  rn  rt  r  )ri  rD  r   rV  rj  rg  rb   ry  rl  rj  rP  ri  s         rd   _create_table_asSchemaManager._create_table_as  su    ##%88K00 26EG 	 KK()V\*567U	rg   c                 d    U R                   " X4SU0UD6nU R                  R                  U5        g )Nrj  )r  r  r  r  s         rd   create_table_asSchemaManager.create_table_as  s.    ##JIDIDIc"rg   c                 (   U R                  5       R                  U(       a  SOS5      R                  U R                  5      nUR	                  S5      (       a  UR                  S5      nU$ UR	                  S5      (       a  UR                  S5      nU$ )NzDROP TABLE IF EXISTS zDROP TABLE cascade CASCADErestrictz	 RESTRICT)ri  rD  rV  r  r   )rb   rj  r  ri  s       rd   _drop_tableSchemaManager._drop_table  sy    ##%4/]KDJJ 	 ;;y!!++j)C 
 [[$$++k*C
rg   c                 ^    U R                   R                  U R                  " SSU0UD65        g r  )r  r  r  r  s      rd   r  SchemaManager.drop_table  s'    d..DDDGDErg   c                    U R                   nUR                  (       d8  U R                  5       R                  S5      R	                  U R
                  5      $ U R                  5       R                  S5      R	                  U R
                  5      nU(       a  UR                  S5      nU(       a  UR                  S5      nU$ )Nr`  zTRUNCATE TABLE z RESTART IDENTITYr  )r  r  ri  rD  rV  r  )rb   restart_identityr  r  ri  s        rd   _truncate_tableSchemaManager._truncate_table  s    ]]  ((*W^,SS_> ""$,,->?CCDJJO++12C++j)C
rg   c                 X    U R                   R                  U R                  X5      5        g r`   )r  r  r  )rb   r  r  s      rd   r  SchemaManager.truncate_table  s     d223CMNrg   c                     U R                   R                  R                  5        Vs/ s H  nU R                  X!5      PM     sn$ s  snf r`   )r  rT  fields_to_index_create_indexrb   rj  r  s      rd   _create_indexesSchemaManager._create_indexes  sI    !ZZ--==?A?E ""5/?A 	A As   Ac                 Z   [        U[        5      (       ax  U R                  R                  (       d  UR	                  S5      nO!UR
                  U:w  a  UR	                  U5      n[        U R                  [        5      (       a  [        U5      nU R                  5       R                  U5      $ r  )rz   r9   r  r  rj  rg  r}  rR   r  ri  rV  )rb   r  rj  s      rd   r  SchemaManager._create_index  s{    eU##==22

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

4($...99 &e,##%))%00rg   c                 f    U R                  US9 H  nU R                  R                  U5        M      g N)rj  )r  r  r  rb   rj  rl  s      rd   create_indexesSchemaManager.create_indexes  s,    ))t)4EMM!!%( 5rg   c                     U R                   R                  R                  5        Vs/ s H+  n[        U[        5      (       d  M  U R                  X!5      PM-     sn$ s  snf r`   )r  rT  r  rz   r9   _drop_indexr  s      rd   _drop_indexesSchemaManager._drop_indexes  sQ    !ZZ--==?-?EeU+ .  -?- 	- -s   AAc                    SnU(       a   U R                   R                  (       a  US-  n[        UR                  [        5      (       aF  UR                  R
                  (       a+  [        UR                  R
                  UR                  5      nO[        UR                  5      nU R                  5       R                  U5      R                  U5      $ )NzDROP INDEX z
IF EXISTS )r  r  rz   rd  rS   rQ  rj  rq  ri  rD  rV  )rb   r  rj  rw  rx  s        rd   r  SchemaManager._drop_index  s    !	DMM11%IellE**u||/C/C 4 4ekkBJ,J "#Z	"rg   c                 f    U R                  US9 H  nU R                  R                  U5        M      g r  )r  r  r  r  s      rd   drop_indexesSchemaManager.drop_indexes  s,    ''T'2EMM!!%( 3rg   c                     UR                   (       a  U R                  R                  (       d  [        SUR                  -  5      eg )Nz@Sequences are either not supported, or are not defined for "%s".)r	
  r  r  r  r  r'  s     rd   _check_sequencesSchemaManager._check_sequences  s8    ~~T]]%<%< 138::> ? ? &=rg   c                     UR                   R                  R                  (       a4  [        UR                   R                  R                  UR                  5      $ [        UR                  5      $ r`   )r  rT  rT  rj  r	
  r'  s     rd   _sequence_for_field!SchemaManager._sequence_for_field  sE    ;;##%++++22ENNCC%..))rg   c                     U R                  U5        U R                  R                  UR                  5      (       d=  U R	                  5       R                  S5      R                  U R                  U5      5      $ g )NzCREATE SEQUENCE r  r  r  r	
  ri  rD  rV  r  r'  s     rd   _create_sequenceSchemaManager._create_sequence  s^    e$}},,U^^<<$_&W/0S11%89; =rg   c                 d    U R                  U5      nUb  U R                  R                  U5        g g r`   )r  r  r  rb   r  seq_ctxs      rd   create_sequenceSchemaManager.create_sequence  s/    ''.MM!!'* rg   c                     U R                  U5        U R                  R                  UR                  5      (       a=  U R	                  5       R                  S5      R                  U R                  U5      5      $ g )NzDROP SEQUENCE r  r'  s     rd   _drop_sequenceSchemaManager._drop_sequence  s^    e$==((88$_&W-.S11%89; 9rg   c                 d    U R                  U5      nUb  U R                  R                  U5        g g r`   )r  r  r  r  s      rd   drop_sequenceSchemaManager.drop_sequence
  s/    %%e,MM!!'* rg   c                     U R                  5       R                  S5      R                  UR                  5      R                  S5      R                  UR	                  S5      5      $ )NzALTER TABLE z ADD T)ri  rD  rV  r  r  r'  s     rd   _create_foreign_key!SchemaManager._create_foreign_key  sI     "(U[[!!U11$78	:rg   c                 X    U R                   R                  U R                  U5      5        g r`   )r  r  r  r'  s     rd   create_foreign_key SchemaManager.create_foreign_key  s    d66u=>rg   c                     U R                   R                  (       aL  U R                  R                  R                   H'  nUR
                  (       d  M  U R                  U5        M)     g g r`   )r  r  r  rT  rq  r	
  r  r'  s     rd   create_sequencesSchemaManager.create_sequences  sE    ==""))77>>>((/ 8 #rg   c                 h    U R                  5         U R                  " U40 UD6  U R                  US9  g r  )r  r  r  )rb   rj  table_optionss      rd   
create_allSchemaManager.create_all   s2    $0-0&rg   c                     U R                   R                  (       aL  U R                  R                  R                   H'  nUR
                  (       d  M  U R                  U5        M)     g g r`   )r  r  r  rT  rq  r	
  r  r'  s     rd   drop_sequencesSchemaManager.drop_sequences%  sE    ==""))77>>>&&u- 8 #rg   c                 Z    U R                   " U40 UD6  U(       a  U R                  5         g g r`   )r  r  )rb   rj  r  r  s       rd   drop_allSchemaManager.drop_all+  s'    ((! rg   )r}  r/  r  r`   r  ru  r  )%rh   ri   rj   rk   r  r  r  rX  ri  r{  rr  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  rl   ra   rg   rd   rN   rN   B  s    /   __ E(TH	#FOA
1)-
")?
*;+
;+
:?0'
."rg   rN   c                   .   \ rS rSr      SS jrS rSS jrS rS rS r	S	 r
\S
 5       r\R                  S 5       r\R                  S 5       r\S 5       r\R                  S 5       r\S 5       rS rS rSS jrS rS rS rS rS rS rS rSrg)Metadatai1  Nc                    Ub  [        S5        UnXl        X l        0 U l        0 U l        0 U l        [        5       U l        / U l        / U l	        0 U l
        0 U l        0 U l        0 U l        / U l        UR                  R!                  5       U l        Xl        UU l        U(       d2  U R$                  (       a  U R%                  U5      OU R)                  5       nX0l        S U l        U(       a  [/        U5      O/ U l        X`l        Xpl        XPl        S =U l        U l        Xl        Xl        Xl         Xl!        UU l"        Xl#        0 U l$        0 U l%        [L        RN                  " [.        5      U l(        [L        RN                  " [.        5      U l)        0 U l*        U
=(       d    0 U l+        URY                  5        H  u  nn[[        U UU5        M     []        UR_                  5       5      U l0        / U l1        g )NzC"db_table" has been deprecated in favor of "table_name" for Models.)2r   r  r  r  r  combinedrO  _sorted_field_listrq  sorted_field_namesr7  _default_by_name_default_dict_default_callables_default_callable_listrh   rp  r  r	  r  make_table_namery  rd  rd  rR
  r  rQ  rS  rp  rm  only_save_dirty
depends_onrs  ru  rt  rl  refsbackrefsr
  defaultdictr  model_backrefs
manytomanyr  rj  rR  r  keys_additional_keysr  )rb   r  r  ry  rR
  rS  r  rT  r  r  r  db_tabler	  rs  ru  rl  rt  r  r  rm  r   s                        rd   r  Metadata.__init__2  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 rg   c                     U R                   (       a"  [        R                  " SSU R                  5      $ [	        U R
                  R                  5      $ )Nr  r  )r  r  rn  r  rr  r  rh   r  s    rd   r  Metadata.make_table_nameu  s7    ""66)S$))44tzz2233rg   c                    U(       d  U(       d  [        S5      eS U R                  S 4/n[        5       n[        R                  " U 45      nU(       a  UR
                  OUR                  nU(       a  U" 5       nX;   a  M  UR                  U5        U(       aQ  UR                  R                  5        H3  u  pUR                  XS45        UR                  U
R                  5        M5     U(       aQ  UR                  R                  5        H3  u  pUR                  XS45        UR                  U
R                  5        M5     U(       a  M  U$ )Nz)One of `refs` or `backrefs` must be True.FT)r  r  r  r
  dequer  popleftr  r  rj  r  rT  r  )rb   r  r  depth_firstr8  r;  queuer  currfkr  s              rd   model_graphMetadata.model_graphz  s    HHII

D)*u!!4'*)u}}8D|XHHTN!%!2IBLL"U!34LL- "3 !%!4!4!6IBLL"T!23LL- "7 e rg   c                    UR                   nX R                  U'   U R                  U   R                  U5        U R                  UR
                  R                  U'   UR
                  R                  U R                     R                  U5        g r`   )r  r  r  r  r  rT  r  r  rb   r  rels      rd   add_refMetadata.add_ref  sg    oo		%##E*$(JJ		5!		  ,33E:rg   c                    UR                   nU R                  U	 U R                  U   R                  U5        UR                  R
                  U	 UR                  R                  U R                     R                  U5        g r`   )r  r  r  rv	  rT  r  r  r  r  s      rd   
remove_refMetadata.remove_ref  sa    ooIIe##E*IIu%		  ,33E:rg   c                 4    XR                   UR                  '   g r`   r  r  r'  s     rd   add_manytomanyMetadata.add_manytomany  s    &+

#rg   c                 2    U R                   UR                  	 g r`   r   r'  s     rd   remove_manytomanyMetadata.remove_manytomany  s    OOEJJ'rg   c                     U R                   c^  [        U R                  U R                   Vs/ s H  oR                  PM     snU R
                  U R                  U R                  S9U l         U R                   $ s  snf )N)rT  rF  r}  )rd  rS   ry  rq  r2  rT  r  r  r'  s     rd   rU  Metadata.table  sd    ;;040B0BC0Bu""0BC{{zz--)DK {{	 Ds   A8
c                     [        S5      e)NzCannot set the "table".r  rM  s     rd   rU  r    s    677rg   c                     S U l         g r`   )rd  r  s    rd   rU  r    s	    rg   c                     U R                   $ r`   )rQ  r  s    rd   rT  Metadata.schema  s    ||rg   c                     Xl         U ?g r`   )rQ  rU  rM  s     rd   rT  r    s    Jrg   c                     U R                   (       a   [        U R                   U R                  5      $ [        U R                  5      $ r`   )rQ  rj  ry  r  s    rd   rg
  Metadata.entity  s-    <<$,,88$//**rg   c                     [        U R                  5      U l        U R                   Vs/ s H  oR                  PM     snU l        g s  snf r`   )rd  r  rq  r  r  r:  s     rd   _update_sorted_fieldsMetadata._update_sorted_fields  s9    !$"9"9:373E3E"F3Ea663E"F"Fs   Ac                     [        U[        5      (       a  UR                  nU R                  R	                  U/ 5      nU R
                  R	                  U/ 5      nX#4$ r`   )rz   
ModelAliasr  r  r   r  )rb   r  forwardrefsr  s       rd   get_rel_for_modelMetadata.get_rel_for_model  sO    eZ((KKEoo))%4&&**5"5&&rg   c                    XR                   ;   a  U R                  U5        O-XR                  ;   a  U R                  U R                  U   5        [	        U[
        5      (       Gdq  U ?UR                  U R                  X5        X R                   UR                  '   X R                  UR                  '   X R                  UR                  '   X R                  UR                  '   U R                  R                  U5        U R                  5         UR                   b  UR                   U R"                  U'   [%        UR                   5      (       aK  UR                   U R&                  U'   U R(                  R+                  UR                  UR                   45        OYUR                   U R,                  U'   UR                   U R.                  UR                  '   OUR                  U R                  X5        [	        U[0        5      (       a  U R3                  U5        g [	        U[4        5      (       a$  UR                  (       a  U R7                  U5        g g g r`   )r  remove_fieldr  r  rz   r  rU  r&  r  r  r  r2  r  r  ri  r  rI  r7  r5  r  r  r  r  r  r6   r  r@   r  )rb   rw  r  rL  s       rd   r  Metadata.add_field  s   $j)??*""4??:#>?%++
JJtzz:=&+KK

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

8=8G H 16D&&u-8=D))%**5JJtzz:=e_--LL//EJJ& 5?/rg   c                    XR                   ;  a  g U ?U R                   R                  U5      nU R                  UR                  	 U R
                  U	  U R
                  UR                  	 U R                  R                  U5        U R                  5         UR                  b  U R                  U	 U R                  R                  US 5      (       aD  [        U R                  5       H*  u  nu  pEXA:X  d  M  U R                  R                  U5          OE   OBU R                  R                  US 5        U R                   R                  UR"                  S 5        [%        U[&        5      (       a  U R)                  U5        g g ! [         a     GN!f = fr`   )r  rU  r  r  r2  r  r   r  rv	  r  rI  r7  r  r4  r  r  r  r  rz   r6   r  )rb   rw  originalrg  r  r  s         rd   r  Metadata.remove_field  sK   [[(J;;??:.LL--.MM*%	h223 	&&x0""$'h'&&**8T::$-d.I.I$JLAy)3377: %K
 ""&&x6%%))(-->h00OOH% 1!  		s   E> >
FFc                     [        U[        5      U l        U R                  X5        X l        UR
                  =(       d    [        UR                  5      U l        g r`   )rz   r"   rp  r  rS  rm  ro  r	
  )rb   r  r  s      rd   r  Metadata.set_primary_key  sE    '|<t#    !  	rg   c                     U R                   (       a=  [        U R                  R                   Vs/ s H  nU R                  U   PM     sn5      $ U R                  SLa  U R                  4$ S$ s  snf )NFra   )rp  re  rS  r6  r  )rb   rw  s     rd   r  Metadata.get_primary_keys  su    ,0,<,<,H,HJ,Hj ++j1,HJ K K +/*:*:%*GD$$&OROJs   A-c                 v    U R                   R                  5       nU R                   H  u  p#U" 5       X'   M     U$ r`   )r  rT  r  )rb   ddrw  rI  s       rd   get_default_dictMetadata.get_default_dict$  s7    ""'')#'#>#>J$YBN $?	rg   c           
         / nU R                    Ht  nUR                  (       a  M  UR                  (       d  UR                  (       d  M:  UR	                  [        U R                  U4UR                  UR                  S95        Mv     U R                   H  n[        U[        5      (       a  UR	                  U5        M+  [        U[        [        45      (       d  MH  Uu  pE/ nU Hl  n[        U[        5      (       a   UR	                  U R                  U   5        M8  [        U[        5      (       a  UR	                  U5        M`  [        SU-  5      e   UR	                  [        U R                  XeS95        M     U$ )N)ri  rk  z;Expected either a field name or a subclass of Node. Got: %s)ri  )rq  rS  r  ri  r  rB   r  r}  rR
  rz   ri  rd  re  r  r  r  )rb   rR
  r;  	index_objindex_partsri  r  r^  s           rd   r  Metadata.fields_to_index*  s$   ##A}}ww!(((z$**qd18801 > ?	 $ I)T**y)Ie}55&/#'D!$
33dmmD&9:#D$//d+( *EGK*L M M ( z$**fLM &  rg   c                     Xl         XR                  R                  l        U ?[        U[        5      (       a  UR                  c  S nU R                   H  nU" U5        M     g r`   )	r  r  rQ  r}  rU  rz   rL   r  r  )rb   r  hooks      rd   set_databaseMetadata.set_databaseE  sN     '/

$J h&&8<<+?HNNDN #rg   c                     Xl         U ?g r`   )ry  rU  )rb   ry  s     rd   set_table_nameMetadata.set_table_nameR  s    $Jrg   )&r  r  r  r  r  r  rQ  r  rd  rm  r  r  r  rp  r  r  r7  r  r  rR
  r  r  r  r  r  r  r  r  rS  r  r  rq  rt  r	  ry  rs  rl  ru  )NNNNNNFNNNNNFFNT)TTTr  )rh   ri   rj   rk   r  r  r  r  r  r  r  r  rU  rX  deleterrT  rg
  r  r  r  r  r  r  r#  r  r+  r.  rl   ra   rg   rd   r  r  1  s    FJ<@AEDHEI$(AF4
2;;,(   \\8 8 ]]    ]]  + +G'!'F&:"P6rg   r  c                   2   ^  \ rS rSr/ rU 4S jrS rSrU =r$ )SubclassAwareMetadataiW  c                 l   > [         [        U ]
  " U/UQ70 UD6  U R                  R	                  U5        g r`   )r  r2  r  r  r  rb   r  r  r  r  s       rd   r  SubclassAwareMetadata.__init__Z  s/    #T3EKDKFK5!rg   c                 :    U R                    H  nU" U5        M     g r`   )r  )rb   r5   r  s      rd   
map_models SubclassAwareMetadata.map_models^  s    [[EuI !rg   ra   )	rh   ri   rj   rk   r  r  r7  rl   r  r  s   @rd   r2  r2  W  s    F" rg   r2  c                       \ rS rSrSrg)r.   ic  ra   Nr  ra   rg   rd   r.   r.   c  r  rg   r.   c                   v   ^  \ rS rSr\" / SQ5      rU 4S jrS rS rS r	S r
S rS	 rS
 rS r\rS rSrU =r$ )	ModelBaseif  )r  r  rR
  rS  r  rT  r	  rl  r  r  rs  rt  c                 $  >^  U[         :X  d  US   R                  [         :X  a  [        [        T ]  " T XU40 UD6$ 0 nUR                  SS 5      nU(       a?  UR                  R                  5        H!  u  pxUR                  S5      (       a  M  XU'   M#     [        USS 5      n	S =pU GH3  n[        US5      (       d  M  UR                  nUc  [        UR                  5      nT R                  UR                  -  nUR                   H"  nX~;   d  M
  Xu;  d  M  UR                  U   XW'   M$     UR!                  SUR"                  5        UR!                  SUR$                  5        UR                  R                  5        HW  u  pxXs;   a  M  ['        U[(        5      (       d  M#  UR*                  R                  (       a  M@  [        UR*                  5      X7'   MY     GM6     UR                  SS 5      =(       d    0 nUR-                  S	[.        5      nUR-                  S
[0        5      n[        [        T ]  " T XU40 UD6m S =T l        T l        U" T 40 UD6T l        U" T 40 UD6T l        / nT R                  R                  5        Hl  u  nn['        U[8        5      (       d  M  UR                  (       a  U	(       a  [;        SU-  5      eUR                  (       a  UUpMY  UR=                  UU45        Mn     U	c'  USLa  Ub  XR>                  4O[A        5       S4u  pO+Sn	O(['        U	[B        5      (       a  Sn
ST R                  l"        U	SLa  T R                  RG                  X5        U H"  u  nnT R                  RI                  UU5        M$     [        T S5      (       a  SU;  a  [K        T SU 4S j5        ST R                  -  nST RL                  0n[O        U[P        4U5      nUT l(        T RS                  5         [T        RW                  T 5        T $ )Nr   r  r  rS  rT  r  rT  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr  __composite_key__Tr  rF  c                 J   > STR                   < SU R                  5       < S3$ )Nr   rE  r  )rh   r  )rb   r  s    rd   r|   #ModelBase.__new__.<locals>.<lambda>  s    dlln3.rg   z%sDoesNotExistri   ),rO  rh   r  r;  r  r  r  rj  r  r   r  rT  r   rS  inheritabler  r	  r  rT  rz   r	  r  r   r  rN   r  r  rQ  r2   r  r  r  r   r"   rp  r  r  rR  ri   r  r.   validate_modelr+   r  )r  r  basesr"  r  meta_optionsrP  r  r  r
  pk_name	parent_pkr  	base_metaall_inheritablesoptsr  Schemar  rm  r   r  exc_name	exc_attrsexception_classr  s   `                        rd   r  ModelBase.__new__l  s   :q!2!2j!@C0d5 ;39; ; yy&++-||C((&'O . T=$/""
 A1g&&I $Y%:%:;	!oo	0J0JJO'''A,A&/&8&8&;LO ( ##J	0B0BC##Hi.>.>?****,:xa//8K8K8K'0EH	 - (   !148>B 6A!!"8-H Is+CeNvN%))s{--	S*E*,,,,.JC%''$$$%F%MNN&&"'MM3,/ / :%"+"7 !*>>: )T2 G L)))G&*CII#U?II%%g2!KD%IIe, " 3	""z'>C &. / $cll2!3>>2	x,)D* 	""3'
rg   c                      SU R                   -  $ )Nz<Model: %s>)rh   r  s    rd   rF  ModelBase.__repr__  s    t}},,rg   c                 4    [        U R                  5       5      $ r`   )r~  r  r  s    rd   r'  ModelBase.__iter__  s    DKKM""rg   c                 $    U R                  U5      $ r`   )	get_by_idrb   rm  s     rd   r  ModelBase.__getitem__  s    ~~c""rg   c                 &    U R                  X5        g r`   )	set_by_id)rb   rm  r   s      rd   r  ModelBase.__setitem__  s    s"rg   c                 &    U R                  U5        g r`   )delete_by_idrW  s     rd   r  ModelBase.__delitem__  s    #rg   c                 T     U R                  U5        g! U R                   a     gf = fr  )rV  r.   rW  s     rd   rZ  ModelBase.__contains__  s2    	NN3     		s    ''c                 >    U R                  5       R                  5       $ r`   )r  r  r  s    rd   r  ModelBase.__len__  s    {{}""$$rg   c                     grs  ra   r  s    rd   __bool__ModelBase.__bool__  s    trg   c                 L    UR                  U R                  R                  5      $ r`   )rV  rT  rU  rh  s     rd   rR  ModelBase.__sql__  s    wwtzz''((rg   ra   )rh   ri   rj   rk   r  rC  r  rF  r'  r  r  r  rZ  r  rd  __nonzero__rR  rl   r  r  s   @rd   r;  r;  f  sN     : ;K
Yv-###%#K) )rg   r;  c                   &    \ rS rSrS rS rS rSrg)r  i  c                 4    Xl         X l        X0l        X@l        g r`   )r  r  r  r  )rb   r  r  r  r  s        rd   r  _BoundModelsContext.__init__  s     "*rg   c           	      2   / U l         U R                   Hu  nU R                   R                  UR                  R                  5        UR                  U R                  U R                  U R                  [        U R                  5      S9  Mw     U R                  $ N)r  )	rE  r  r  rT  r  r&  r  r  r  )rb   r  s     rd   r  _BoundModelsContext.__enter__  ss     [[E&&u{{';';<JJt}}dnnd6H6H #DKK 0  2 ! {{rg   c           	          [        U R                  U R                  5       H=  u  pEUR                  XPR                  U R
                  [        U R                  5      S9  M?     g rm  )rD  r  rE  r&  r  r  r  )rb   rI  rJ  rK  r  r  s         rd   r  _BoundModelsContext.__exit__  sJ    T[[$*=*=>IEJJr>>4+=+= #DKK 0  2 ?rg   )rE  r  r  r  r  N)rh   ri   rj   rk   r  r  r  rl   ra   rg   rd   r  r    s    +2rg   r  c                      \ rS rSrS rS r\S 5       r\S3S j5       r\S 5       r	\S 5       r
\S3S	 j5       r\S3S
 j5       r\S3S j5       r\S 5       r\S3S j5       r\S3S j5       r\S 5       r\S 5       r\S 5       r\S3S j5       r\S3S j5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS r\" \5      r \ RB                  S 5       r S r"S r#S  r$S4S! jr%S" r&\S# 5       r'S5S$ jr(S6S% jr)S& r*S' r+S( r,S) r-\S7S* j5       r.\S8S+ j5       r/\S, 5       r0\S9S- j5       r1\S8S. j5       r2\S/ 5       r3\S0 5       r4\S1 5       r5S2r6g):rA   i  c                     UR                  SS 5      (       a  0 U l        OU R                  R                  5       U l        [	        U R                  5      U l        0 U l        U H  n[        XX#   5        M     g )N__no_default__)r  r  rT  r#  r  r  r  rR  )rb   r  r  r  s       rd   r  Model.__init__  s\    ::&--DM JJ779DM$--(ADVY' rg   c                 b    U R                   R                  SLa  [        U R                  5      $ S$ )NFzn/a)rT  rS  r  _pkr  s    rd   r  Model.__str__  s&     $

 6 6e Cs488}NNrg   c                     g r`   ra   r  s    rd   rD  Model.validate_model  s    rg   Nc                     [        X5      $ r`   )r  )r  r  s     rd   r  Model.alias  s    #%%rg   c                 ^    U(       + nU(       d  U R                   R                  n[        XUS9$ )N)
is_default)rT  rq  ModelSelect)r  r  r~  s      rd   r  Model.select  s(    Z
YY,,F3:>>rg   c           	         0 nU(       al  [        U[        5      (       d  U(       a  [        SU-  5      eU$ U H:  n [        U[        5      (       a  UOU R                  R
                  U   nX   X5'   M<     U(       a'  U H!  n X$   X0R                  R
                  U   '   M#     U$ ! [         a.    [        U[        5      (       d  [        SU< SU< S35      eUn Nqf = f! [         a    X$   U[        X5      '    M  f = f)Nz/Data cannot be mixed with keyword arguments: %szUnrecognized field name: "z" in rZ  )	rz   r  r  r2   rT  r  r   ri  r   )r  r  r  
normalizedrm  r  s         rd   _normalize_dataModel._normalize_data  s   
dD))$ &57;&< = = $.sE$:$:S"%))"4"4S"9  %)I
!  @:@+Jyy11#67 
     %c400(,/*7 8 8E	    @4:KJws01@s#   0B&C!&5CC!C?>C?c                 6    [        X R                  X5      5      $ r`   )ModelUpdater  )r  _Model__datar   s      rd   r   Model.update5      3 3 3F CDDrg   c                 6    [        X R                  X5      5      $ r`   )ModelInsertr  r  r  ri  s      rd   ri  Model.insert9  r  rg   c                     [        XUS9$ rg  )r  r  rX  r  s      rd   insert_manyModel.insert_many=  s    3V<<rg   c                     U Vs/ s H%  n[        U[        5      (       a  [        X5      OUPM'     nn[        XUS9$ s  snf rg  )rz   r  r   r  )r  rl  r  r  r  s        rd   insert_fromModel.insert_fromA  sO     ,23+1% +5UJ*G*G73&+1 	 33g>>3s   ,=c                 F    U R                   " U40 UD6R                  S5      $ r  rq  r  s      rd   r   Model.replaceG  s!    zz&+F+77	BBrg   c                 >    U R                  XS9R                  S5      $ )N)rX  r  rp  )r  rr  r  s      rd   replace_manyModel.replace_manyK  s     $6Y'	)rg   c                     [        XU5      $ r`   )ModelRaw)r  rV  r  s      rd   raw	Model.rawQ  s    &))rg   c                     [        U 5      $ r`   )ModelDeletery  s    rd   ry  Model.deleteU  s    3rg   c                 4    U " S0 UD6nUR                  SS9  U$ )NT)force_insertra   )save)r  rl  insts      rd   createModel.createY  s     |U|		t	$rg   c                   ^ Ub  [        X5      nOU/n[        U R                  R                  5      nU R                  R                  (       a1  U R                  R
                  R                  nUR                  U5        U R                  R                  R                  (       a4  U R                  R
                  SLa  U R                  R                  5       nOS nU Vs/ s H  opR                  R                  U   PM     nn/ mU HP  n	[        U	[        5      (       a  TR                  U	R                  5        M5  TR                  U	R                  5        MR     U Hy  n
U4S jU
 5       nU R!                  XS9R#                  5       nU(       d  M5  Uc  M:  [%        X5       H0  u  p[%        Xm5       H  u  nn['        XR                  U5        M     M2     M{     g s  snf )NFc              3   f   >#    U  H!  nT Vs/ s H  n[        X5      PM     snv   M#     g s  snf 7fr`   )r   )ru  r  r;  r"  s      rd   rw  $Model.bulk_create.<locals>.<genexpr>z  s1      )"' 277Age'7"' 8s   
1,1)r  )r    rd  rT  r  rm  rS  r  rv	  r  rW  r  r  rz   r6   r  r  r  r  rD  rR  )r  
model_list
batch_sizebatchesr6  rG  	pk_fieldsrw  r  r  batchr8  r

  r  r  pk_fieldobj_idr"  s                    @rd   bulk_createModel.bulk_create_  so   !j5G!lG39977899##ii++00Gw'99..99  -		224IIALM:))"":.ME%11U112UZZ(	  E)"')E//%/7??ACyS_"%c/JC.1).A*6}}f= /B #2  Ns   "Gc                    [        U R                  R                  [        5      (       a  [	        S5      eU Vs/ s H3  n[        U[
        5      (       a  U R                  R                  U   OUPM5     nnU Vs/ s H0  n[        U[        5      (       a  UR                  OUR                  PM2     nnUb  [        X5      nOU/nSnU R                  R                  n	U H  n
U
 Vs/ s H  oR                  PM     nn0 n[        X&5       H|  u  p^/ nU
 H`  n[        X5      n[        U[        5      (       d  UR                  U5      nUR!                  U	R                  UR                  5      U45        Mb     [#        X5      nUX'   M~     XR%                  U5      R'                  U R                  R                  R)                  U5      5      R+                  5       -  nGM     U$ s  snf s  snf s  snf )NzGbulk_update() is not supported for models with a composite primary key.r   )rz   rT  rS  r"   r  r  r  r6   r  r  r    rv  rD  r   ri  r  r  r   r   r  r$  r  )r  r  r  r  r;  r  r"  r  r  r
  r  r  id_listr   r   r8  r   cases                     rd   bulk_updateModel.bulk_update  s   cii++\:: 8 9 9
 "#!a *4Az)B)B#))""1%I! 	 # /56.4U *4E?)K)K%%jj!.4 	 6 !j5G!lGYY""E.34eUyyeG4F"61"E#E0E%eT22 %u 5LL"++eii"8%!@A	 #
 B $  2 **V$5..227;<79A   =#6 5s   :G#97G(%G-c                     [        U S5      $ r-  )NoopModelSelectry  s    rd   noop
Model.noop  s    sB''rg   c                 F   U R                  5       nU(       ab  [        U5      S:X  aD  [        US   [        5      (       a,  UR	                  U R
                  R                  US   :H  5      nOUR                  " U6 nU(       a  UR                  " S0 UD6nUR                  5       $ )Nr   r   ra   )	r  r   rz   r   r  rT  rS  r  r   )r  rl  filterssqs       rd   r   	Model.get  sy    ZZ\5zQ:eAh#<#<XXcii33uQx?@XXu%%W%Bvvxrg   c                 H     U R                   " U0 UD6$ ! [         a     g f = fr`   )r   r.   )r  rl  r  s      rd   get_or_noneModel.get_or_none  s-    	77E-W-- 		s    
!!c                 R    U R                  U R                  R                  U:H  5      $ r`   )r   rT  rS  r  r
  s     rd   rV  Model.get_by_id  s     wwsyy,,233rg   c                     Uc  U R                  U5      R                  5       $ U R                  U5      R                  U R                  R
                  U:H  5      R                  5       $ r`   )ri  r  r   r  rT  rS  )r  rm  r   s      rd   rZ  Model.set_by_id  sP    ;::e$,,..JJu%U39900C78Drg   c                     U R                  5       R                  U R                  R                  U:H  5      R	                  5       $ r`   )ry  r  rT  rS  r  r  s     rd   r]  Model.delete_by_id  s1    zz|!!#))"7"72"=>FFHHrg   c                 b   UR                  S0 5      nU R                  5       nUR                  5        H"  u  pEUR                  [	        X5      U:H  5      nM$      UR                  5       S4$ ! U R                   a     U(       a  UR                  U5        U R                  R                  R                  5          U R                  " S0 UD6S4sS S S 5        s $ ! , (       d  f        g = f! [         a5  n UR                  5       S4s S nAs $ ! U R                   a    Uef = fS nAff = ff = f)Nr7  FTra   )r  r  rj  r  r   r   r.   r   rT  r  r  r  r;   )r  r  r7  rl  r  r   excs          rd   get_or_createModel.get_or_create  s    ::j"-

"LLNLEKK 3u <=E +	99;%% 
		MM(+YY''..0:://5 1000!  99;--'' I
	sf   A, ,D.=<C+9C	C+D.
C(	#C+(C++
D*6DD*D.D""D%%D**D.c                 B    U R                  5       R                  " U0 UD6$ r`   )r  r  )r  dq_nodesr  s      rd   r  Model.filter  s    zz|""H888rg   c                     U R                   R                  SLa)  [        X R                   R                  R                  5      $ g r  )rT  rS  r   rI  r  s    rd   get_idModel.get_id  s6    
 ::!!.4!7!7!A!ABB /rg   c                 X    [        X R                  R                  R                  U5        g r`   )rR  rT  rS  r  rM  s     rd   rv  	Model._pk  s    jj,,1159rg   c                 H    U R                   R                  U R                  :H  $ r`   )rT  rS  rv  r  s    rd   _pk_exprModel._pk_expr  s    zz%%11rg   c                     0 nU H]  n[        U[        5      (       a  U R                  R                  U   nUR                  U;   d  MC  XR                     X4R                  '   M_     U$ r`   )rz   r  rT  r  r  )rb   
field_dictonlynew_datar  s        rd   _prune_fieldsModel._prune_fields  sX    E%,,

++E2zzZ''1**'=$	 
 rg   c           	         U R                   R                   Hs  nUR                  nX1;   =(       a*    X   S L =(       a    U R                  R	                  U5      S LnU(       d  MM  [        X[        X5      5        U R                  U   X'   Mu     g r`   )rT  r  r  r  r   rR  r   r  )rb   r  foreign_key_fieldforeign_key
conditionss        rd   _populate_unsaved_relations!Model._populate_unsaved_relations  s~    !%+00K) :'4/:  -T9  z74+EF*.--*D
' "1rg   c                    U R                   R                  5       nU R                  R                  SLa#  U R                  R                  nU R                  nOS =pEUb  U R                  X25      nO_U R                  R                  (       aD  U(       d=  U R                  X0R                  5      nU(       d  U R                  R                  5         gU R                  U5        SnU R                  R                  (       a  Uc  UR                  UR                  S 5        Ub  U(       d  U R                  R                  (       a&  UR                   H  nUR                  US 5        M     OUR                  UR                  S 5        U(       d  [!        S5      eU R"                  " S0 UD6R%                  U R'                  5       5      R)                  5       nOUbm  U R*                  " S0 UD6R)                  5       nUbI  U R                  R                  (       d  Uc+  Xl        U R                  R-                  UR                  5        O U R*                  " S0 UD6R)                  5         U =R                  [/        U5      -  sl        U$ )NFr   zno data to save!ra   )r  rT  rT  rS  rv  r  r  dirty_fieldsr  r  r  rm  r  r  rp  r6  r  r   r  r  r  ri  r  r  )	rb   r  r  r  r  pk_valuerX  pk_part_namer
  s	            rd   r  
Model.save  s   ]]'')
::!!.zz--HxxH"&&H++J=JZZ''++J8I8IJJ!!#((4::$$)9NN8==$/zz''$,$8$8LNN<6 %9 x}}d3 !344;;,,224==?CKKMD!*z*224B~4::#<#<#+#3##HMM2KK%*%--/s:&rg   c                 ,    [        U R                  5      $ r`   )ro  r  r  s    rd   is_dirtyModel.is_dirty:  rI  rg   c                     U R                   R                   Vs/ s H   oR                  U R                  ;   d  M  UPM"     sn$ s  snf r`   )rT  rq  r  r  r:  s     rd   r  Model.dirty_fields=  s3    ::33M3avv7L3MMMs
   AAc              #   Z  #    [        U 5      n[        U 5      S 4/n0 n[        5       nU(       Ga?  UR                  5       u  pxXv;   a  M!  UR                  U5        UR                  R
                  R                  5        H  u  pXL d  Uc&  XR                  U	R                  R                     :H  nOX-  nU
R                  U
R                  R                  5      R                  U5      nU	R                  (       a	  U(       d  M  UR                  U
/ 5      R                  X45        U	R                  (       a  U(       a  UR                  U
5        M  UR                  X45        M     U(       a  GM?  [!        [#        U5      5       H#  nUR%                  US5       H
  u  pX4v   M     M%     g 7fr-  )r  r  r  r  rT  r  rj  r  r  r  r  rS  r  r3  r	  r  r  r  r   )rb   search_nullableexclude_null_childrenmodel_classr'  queriesr;  r$	  rl  r  r  rn  r>  r   r  qs                   rd   dependenciesModel.dependenciesA  sI    4jt*d#$u 99;LE}HHUO!&!5!5!;!;!=+u}--0A0A"BBD;D%,,Y__-H-HI"U4[ ww//&&y"5<<dZHww#8 +i%:; "> e* +d+,A Q+e , -s   C<F+A*F+/<F+c                    U(       a  U R                  U(       + S9 H  u  p4UR                  nUR                  (       aD  U(       d=  UR                  " S0 UR                  S 0D6R                  U5      R                  5         Mf  UR                  5       R                  U5      R                  5         M     [        U 5      R                  5       R                  U R                  5       5      R                  5       $ )N)r  ra   )
r  r  r3  r   r  r  r  ry  r  r  )rb   r  delete_nullablerl  r  r  s         rd   delete_instanceModel.delete_instance`  s    !..EX.Y	77?LL3BGGT?399%@HHJLLN((/779 Z Dz  "((9AACCrg   c                 D    [        U R                  U R                  45      $ r`   )r	  r  rv  r  s    rd   r  Model.__hash__j  s    T^^TXX.//rg   c                     UR                   U R                   :H  =(       a.    U R                  S L=(       a    U R                  UR                  :H  $ r`   )r  rv  r  s     rd   r  Model.__eq__m  s=    OOt~~- "HHD "HH		!	#rg   c                     X:X  + $ r`   ra   r  s     rd   r  Model.__ne__s  s      rg   c                    UR                   R                  bH  UR                   R                  (       a-   UR                  [	        XR                   R                  S95      $ UR                  [	        [        X R                  R                  R                  5      U R                  R                  R                  S95      $ ! [
        [        4 a     Npf = f)Nr]  )r+  r^  r  rV  rY   r	  r  r   rT  rS  r  r  rh  s     rd   rR  Model.__sql__v  s     99*syy/C/CwwuTYY5H5HIJJ wwuWT::+A+A+F+FG'+zz'='='F'FH I 	I z* s   +B> >CCc                 R   U R                   R                  ULnU R                   R                  U5        U(       d  U(       ae  Uc
  [        5       nU R                   R	                  X#S9nU H9  u  pxn	X;  d  M  UR                   R                  U5        UR                  U5        M;     U$ )N)r  r  )rT  r  r+  r  r  r  )
r  r  r  r  r  is_differentGr  r  
is_backrefs
             rd   r&  
Model.bind  s    yy))9		x(5		%%9%MA()$*(KK,,X6LL' )* rg   c                     [        U 4XU5      $ r`   r  )r  r  r  r  s       rd   r`  Model.bind_ctx  s    "C68NNrg   c                     U R                   nU R                  R                  R                  UR                  R
                  UR                  5      $ r`   )rT  rQ  r  r  rU  rh   rT  )r  Ms     rd   r  Model.table_exists  s6    II{{##001A1A188LLrg   c                    SU;   a  [        S5        UR                  S5      nU(       a;  U R                  R                  R                  (       d  U R                  5       (       a  g U R                  R                  (       a&  UR                  SU R                  R                  5        U R                  R                  " U40 UD6  g )Nfail_silentlyzU"fail_silently" has been deprecated in favor of "safe" for the create_table() method.rl  )
r   r  rQ  r  r  r  rT  rl  r	  r  )r  rj  r  s      rd   r  Model.create_table  s    g% C D;;/D,,>>!!99{CII,?,?@t/w/rg   c                 D   U(       a;  U R                   R                  R                  (       d  U R                  5       (       d  g U R                  R
                  (       a&  UR                  SU R                  R
                  5        U R                   R                  " X40 UD6  g )Nrl  )rQ  r  r  r  rT  rl  r	  r  )r  rj  r  r  s       rd   r  Model.drop_table  sg    ,,<<##%%99{CII,?,?@T=W=rg   c                 <    U R                   R                  " S0 UD6  g r-  )rQ  r  )r  r  s     rd   r  Model.truncate_table  s    ""-W-rg   c                     [        X40 UD6$ r`   )rB   r  r  r  s      rd   r  Model.index  s    #000rg   c                    [        U5      S:X  aG  [        US   [        [        45      (       a)  U R                  R
                  R                  US   5        g U R                  R
                  R                  [        X40 UD65        g rW  )r   rz   rQ   r9   rT  rR
  r  rB   r  s      rd   	add_indexModel.add_index  s`    v;!
6!9sEl C CII$$VAY/II$$Z%Fv%FGrg   )r  r  r  rv  r`   )FNr  ru  )TTNr  r  )7rh   ri   rj   rk   r  r  classmethodrD  r  r  r  r   ri  r  r  r   r  r  ry  r  r  r  r  r   r  rV  rZ  r]  r  r  r  r  rv  rX  r  r  r  r  r  r  r  r  r  r  r  rR  r&  r`  r  r  r  r  r  r  rl   ra   rg   rd   rA   rA     s   	(O   & & ? ?  4 E E E E = = ? ?
 C C ) )
 * *      
  >  >D $ $L ( ( 
 
   4 4 D D I I  ( 9 9C 6
CZZ: :2	E)V! N N>D0#!I(   O O M M 0 0 > > . . 1 1 H Hrg   rA   c                   F    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rSrg)r  i  z3Provide a separate reference to a model in a query.Nc                 <    XR                   S'   X R                   S'   g )Nr  r  )r  )rb   r  r  s      rd   r  ModelAlias.__init__  s    !&g!&grg   c                    U R                   4U R                   R                  -    H<  n UR                  U   n[        U[        5      (       a  UR                  S U 5      s  $ M>     [        U R                   U5      n[        U[        5      (       a1  [        R                  X5      U R                  U'   U R                  U   $ U$ ! [         a     M  f = fr`   )r  r  r  rz   r  r  r   r   r2   
FieldAliasr  )rb   r   r  r  
model_attrs        rd   r   ModelAlias.__getattr__  s    
 **!5!55Ajj&c?33;;tT22 4 6 TZZ.
j%((","3"3D"EDMM$==&&  s   5C
CCc                     [        S5      e)Nz'Cannot set attributes on model aliases.r  r   s      rd   r   ModelAlias.__setattr__  s    FGGrg   c                     U R                   R                  R                   Vs/ s H  n[        X5      PM     sn$ s  snf r`   )r  rT  r  r   )rb   r  s     rd   get_field_aliasesModelAlias.get_field_aliases  s1    *.***:*:*M*MN*MQ *MNNNs   ;c                 F    U(       d  U R                  5       n[        X5      $ r`   )r%  r  )rb   	selections     rd   r  ModelAlias.select  s    ..0I4++rg   c                 &    U R                   " S0 UD6$ r-  r  )rb   r  s     rd   r  ModelAlias.__call__  s    zz#F##rg   c                    UR                   [        :X  a  UR                  U R                  5      $ U R                  (       a  U R                  UR
                  U '   UR                   [        :X  ac  UR                  U R                  R                  R                  5      R                  S5      R                  [        UR
                  U    5      5      $ UR                  [        UR
                  U    5      5      $ r  )r  rw  rV  r  r  r*  ru  rT  rg
  rD  rj  rh  s     rd   rR  ModelAlias.__sql__  s    99$774::&&::&*jjCd#99$S))001WV_S 1 1$ 789; 776#"3"3D"9:;;rg   ra   r`   )rh   ri   rj   rk   r  r  r   r   r%  r  r  rR  rl   ra   rg   rd   r  r    s*    ='&HO,
$<rg   r  c                   N    \ rS rSrS r\S 5       rS rS rS r	S r
S rS	 rS
rg)r  i  c                 >    Xl         UR                  U l        X l        g r`   )rU  r  r  )rb   rU  r  s      rd   r  FieldAlias.__init__  s    \\

rg   c                 <     " S SU [        U5      5      nU" X5      $ )Nc                       \ rS rSrSrg)&FieldAlias.create.<locals>._FieldAliasi
  ra   Nr  ra   rg   rd   _FieldAliasr4  
  s    rg   r5  )r  )r  rU  r  r5  s       rd   r  FieldAlias.create  s    	#tE{ 	6))rg   c                 B    [        U R                  U R                  5      $ r`   )r  rU  r  r  s    rd   r  FieldAlias.clone  s    $++tzz22rg   c                 8    U R                   R                  U5      $ r`   )r  rQ  rM  s     rd   rQ  FieldAlias.adapt  s    4::#3#3E#::rg   c                 8    U R                   R                  U5      $ r`   )r  r  rM  s     rd   r  FieldAlias.python_value  s    $***A*A%*H#Hrg   c                 8    U R                   R                  U5      $ r`   )r  r  rM  s     rd   r  FieldAlias.db_value  s    djj&9&9%&@@rg   c                 R    US:X  a  U R                   $ [        U R                  U5      $ )Nr  )rU  r   r  r   s     rd   r   FieldAlias.__getattr__  s"    "got{{L74::t3LLrg   c                 t    UR                  [        U R                  U R                  R                  5      5      $ r`   )rV  r!   rU  r  r2  rh  s     rd   rR  FieldAlias.__sql__  s&    wwvdkk4::+A+ABCCrg   )r  r  rU  N)rh   ri   rj   rk   r  r  r  r  rQ  r  r  r   rR  rl   ra   rg   rd   r  r    s7    
 * *
3 ;H@MDrg   r  c                    ^ ^^^ [        T 5      m [        5       m/ mUU UU4S jmS n[        T US9 H  nT" U5        M     T$ )Nc                 v  > U T;   a  U T;  a  TR                  U 5        U R                  R                  R                  5        H   u  pUR                  (       a  M  T" U5        M"     U R                  R
                  (       a%  U R                  R
                   H  nT" U5        M     TR                  U 5        g g g r`   )r  rT  r  rj  r  r  r  )r  r  r  
dependencydfsr  r  r;  s       rd   rF  sort_models.<locals>.dfs  s    F?uD0HHUO*/++*:*:*@*@*B& #+++	N	 +C
 {{%%"'++"8"8J
O #9OOE"  1?rg   c                 Z    U R                   R                  U R                   R                  4$ r`   )rT  r  ry  )r   s    rd   r|   sort_models.<locals>.<lambda>,  s    qww||QWW%7%78rg   r  )r  r  )r  r  r   rF  r  r;  s   `  @@@rd   r  r    sF    [F5DH# # 9EF&A 'Org   c                   t   ^  \ rS rSr\R
                  rU 4S jr\R                  SS j5       r
S rS rSrU =r$ )_ModelQueryHelperi2  c                    > [         [        U ]
  " U0 UD6  U R                  (       d&  U R                  R
                  R                  U l        g g r`   )r  rK  r  r}  r  rT  r  r   s      rd   r  _ModelQueryHelper.__init__5  s;    /@@~~!ZZ--66DN rg   c                 f    [         R                  U l        Uc  U R                  U l        g UU l        g r`   )r  rH  r  r  r  r  s     rd   r  _ModelQueryHelper.objects:  s%    *5*=DJJ;rg   c                 \   U R                   =(       d    U R                  nU[        R                  :X  a  U R	                  U5      $ U[        R
                  :X  a   [        XR                  U R                  5      $ U[        R                  :X  a   [        XR                  U R                  5      $ U[        R                  :X  a   [        XR                  U R                  5      $ U[        R                  :X  a+  [        XR                  U R                  U R                  5      $ [!        SU-  5      er  )r  r  r  rI  _get_model_cursor_wrapperrF  ModelDictCursorWrapperr  rz  rE  ModelTupleCursorWrapperrG  ModelNamedTupleCursorWrapperrH  ModelObjectCursorWrapperr  r  r  s      rd   r  %_ModelQueryHelper._get_cursor_wrapper?  s    >>:T%:%:syy 11&99!)&**dooNN"*6::tOO(/

04A A(+FJJ,0OOT=N=NP P ;hFGGrg   c                 D    [        XR                  / U R                  5      $ r`   )rU  r  rL  s     rd   rQ  +_ModelQueryHelper._get_model_cursor_wrapperP  s    '

B

KKrg   )r  r}  r  r`   )rh   ri   rj   rk   r  rI  r  r  ri  rT  r  r  rQ  rl   r  r  s   @rd   rK  rK  2  s>    yy7
 
YYO OH"L Lrg   rK  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  iT  c                 L   > Xl         SU l        [        [        U ]  " SX#S.UD6  g )Nra   r  )r  rz  r  r  r  )rb   r  rV  r  r  r  s        rd   r  ModelRaw.__init__U  s&    
h&H3HHrg   c                      U R                  5       S   $ ! [         aC    U R                  5       u  pU R                  R	                  U R                  < SU< SU< 35      ef = f)Nr   . instance matching query does not exist:
SQL: 	
Params: )r  rs  rV  r  r.   r  s      rd   r   ModelRaw.getZ  sa    	E<<>!$$ 	E((*KC**))+/::sF+D E E	Es
    AA")rz  r  )rh   ri   rj   rk   r  r   rl   r  r  s   @rd   r  r  T  s    I
E Erg   r  c                       \ rS rSrS r\rS r\rS r\r	S r
\
rS rS rSS	 jrSS
 jr\R"                  S 5       rSrg)BaseModelSelectid  c                 2    [        U R                  U SU5      $ )NrH  ModelCompoundSelectQueryr  r   s     rd   r  BaseModelSelect.union_alle      '

D+sKKrg   c                 2    [        U R                  U SU5      $ )NrI  rc  r   s     rd   r  BaseModelSelect.unioni  s    '

D'3GGrg   c                 2    [        U R                  U SU5      $ )NrJ  rc  r   s     rd   rN  BaseModelSelect.intersectm  rf  rg   c                 2    [        U R                  U SU5      $ )NrK  rc  r   s     rd   rO  BaseModelSelect.except_q  s    '

D(CHHrg   c                 n    U R                   (       d  U R                  5         [        U R                   5      $ r`   )r  r  r~  r  s    rd   r'  BaseModelSelect.__iter__u  s%    ##LLND(())rg   c                      [        U /UQ70 UD6$ r`   )rI   )rb   
subqueriesr  s      rd   rI   BaseModelSelect.prefetchz  s    4z4V44rg   Nc                     U R                  SS5      nS Ul         UR                  U5      S   $ ! [         aC    UR	                  5       u  p4U R
                  R                  UR
                  < SU< SU< 35      ef = f)Nr   r   r]  r^  )r3  r  r  rs  rV  r  r.   )rb   r  r  rV  r  s        rd   r   BaseModelSelect.get}  s|    a# $	F==*1-- 	F))+KC**))+0;;V+E F F	Fs
   / AA<c                 b     U R                  US9$ ! U R                  R                   a     g f = f)N)r  )r   r  r.   r\  s     rd   r  BaseModelSelect.get_or_none  s4    	88X8..zz&& 		s    ..c           
         / nU H  n[        U5      (       a'  UR                  UR                  R                  5        M:  [	        U[
        5      (       aS  UR                  (       d  [        S5      eUR                  UR                   Vs/ s H  n[        X45      PM     sn5        M  UR                  U5        M     X l
        g s  snf r  )rS  rg  rT  rq  rz   rS   rO  r  r   r  rg  r  s        rd   r  BaseModelSelect.group_by  s    F : :;FE**$ &1 2 2 17!B1@X ")!:1@!B C '  "	!Bs   	C
)rg  r`   )rh   ri   rj   rk   r  r   r  r5  rN  r3  rO  r4  r'  rI   r   r  ri  rT  r  rl   ra   rg   rd   ra  ra  d  s[    LGHFLGIG*
5	F 
YY" "rg   ra  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rd  i  c                 :   > Xl         [        [        U ]  " U0 UD6  g r`   )r  r  rd  r  r4  s       rd   r  !ModelCompoundSelectQuery.__init__  s    
&6GGrg   c                 8    U R                   R                  U5      $ r`   )r  rQ  rL  s     rd   rQ  2ModelCompoundSelectQuery._get_model_cursor_wrapper  s    xx11&99rg   r+  )rh   ri   rj   rk   r  rQ  rl   r  r  s   @rd   rd  rd    s    H: :rg   rd  c           
         / nU  H  n[        U5      (       a'  UR                  UR                  R                  5        M:  [	        U[
        5      (       a!  UR                  UR                  5       5        Mp  [	        U[        5      (       aH  UR                  (       a7  UR                  UR                   Vs/ s H  n[        X#5      PM     sn5        M  UR                  U5        M     U$ s  snf r`   )rS  rg  rT  rq  rz   r  r%  rS   rO  r   r  )fields_or_modelsr  fmr%  s       rd   _normalize_model_selectr    s    FB<<MM"((001J''MM"..01E""r{{MMr{{C{72+{CDMM"  M Ds   4C)
c                     ^  \ rS rSrSU 4S jjrU 4S jrU 4S jrU 4S jrSS jrS r	S	 r
SS
 jr\R                  \R                  SSS4S j5       rSS jr\R                  SS4S jrS rSS jrS rS rSS jrSS jrSrU =r$ )r  i  c                 |   > U=U l         U l        0 U l        X0l        [	        U5      n[
        [        U ]  U/U5        g r`   )r  	_join_ctx_joins_is_defaultr  r  r  r  )rb   r  r~  r~  r  r  s        rd   r  ModelSelect.__init__  s<    &++
T^%()9:k4)5'6:rg   c                 `   > [         [        U ]  5       n[        UR                  5      Ul        U$ r`   )r  r  r  r  r  r  s     rd   r  ModelSelect.clone  s'    k4.0ELL)rg   c                 ~   > U(       d  U R                   (       d#  SU l         [        U5      n[        [        U ]  " U6 $ U $ r  )r  r  r  r  r  )rb   r~  r  r  s      rd   r  ModelSelect.select  s8    4#3#3$D,-=>Fd2F;;rg   c                 J   > SU l         [        U5      n[        [        U ]  " U6 $ r  )r  r  r  r  r  )rb   r  r  r  s      rd   r  ModelSelect.select_extend  s'     (1[$5v>>rg   Nc                 @    Uc  U R                   U l        U $ UU l        U $ r`   )r  r  rh  s     rd   switchModelSelect.switch  s$    '*{ 9<rg   c                     [        U5      (       a  US4$ [        U[        5      (       a  UR                  (       a  UR                  S4$ [        U[        5      (       a  UR
                  S4$ [        U[        5      (       a  UR
                  S4$ g)NTFr  )rS  rz   rS   rF  r  r  r  )rb   rl  s     rd   
_get_modelModelSelect._get_model  sr    C==9U##

::u$$Z((99e##[))99e##rg   c           	      \   [        U[        5      nU(       a%  U=(       d    UR                  nUR                  5       nU R	                  U5      u  pgU R	                  U5      u  pU(       Ga  U(       Ga  X l        Un
U(       a  U	(       d  [        U[        5      (       a  UR                  UL a$  UR                  R                  UR                     nOKUR                  UL a$  UR                  R                  UR                     nO[        SU< SU< SU< S35      eS nO[        U[        5      (       a  UnS nOS nU R                  XhX5      u  pUc  U(       a  SOSnU	(       a  SOSnU(       a6  [        U[        X5      5      n[        U[        UR                  U5      5      nO5[        U[        X5      5      n[        U[        UR                  U5      5      nUU:H  nU(       d.  Ub  U(       d  UR                  nOUR                  R                  nOU(       a-  Ub*  XLR                   :X  a  U(       d  [#        SU< SU< S	35      eOa[        U[$        5      (       aL  [&        n
U=(       d    UR                  nU(       d*  [        U[(        5      (       a  U=(       d    UR*                  nX4W
4$ )
Nz"on" clause Column z does not belong to z or rZ  r  r2  zCannot assign join alias to "zF", as this attribute is the object_id_name for the foreign-key field "r  )rz   r  r  r  r  r  r!   rU  rT  r  r  r   r2   _generate_on_clauser   r  r  r  r  r  rS   rh   )rb   rl  r  r  r   on_aliasr  src_is_model
dest_modeldest_is_modelr  r  fk_fieldr  src_attr	dest_attrr  r   s                     rd   _normalize_joinModelSelect._normalize_join  s,    b%($299DB #'//#"6	$(OOD$9!
!N$K !]
2v8N8N99#(66rww?HYY$&)//77@H(*,i*E F F B&&#'#;#;x$5 H z%16}&3F	!$(DEC!#wx/A/A8'LMC!#wx'BCC!$0B0BI(NOCSj'
#==D%++00Dh2333J =A8"M N N f%%K&4;;DJtU33,t}}+&&rg   c                    UR                   nS=pgX%R                  ;   a  UR                  U   nO X%R                  ;   a  UR                  U   nSnU(       d  Ub  g[        SU< SU< S35      eUbS  [	        U[
        5      (       a  UR                  OUnU V	s/ s H#  n	XL d  U(       d  M  U	R                  UL d  M!  U	PM%     nn	[        U5      S:X  a  US   U4$ UcF  U H,  n
U
R                  UR                   R                  :X  d  M)  X4s  $    [        S	U< SU< S
35      eS n[	        U[        5      (       a  UR                  UR                  p[        U5      n[	        U[        5      (       a.  [	        U[
        5      (       a  UR                  OUnX;   a  UnUS4$ [	        U[        5      (       a*  [	        U[
        5      (       a  UR                  OUnX;   a  UnUS4$ s  sn	f )NFTr  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.)rT  r  r  r  rz   r  r  r  r   r  r  r  r   r  r2   )rb   rl  r  r  r  rP  r  r=  r?  r;  r  r  r   fk_setlhs_frhs_fs                   rd   r  ModelSelect._generate_on_clause"  s   yy!&&
 ??"-I(((++D1IJ~"!4) * * ! )38Z(H(Hhnn# $- DIq+$ )*)@ II D y>QQ<++:  77djjoo->)   !4) * * b*%%vvrvv ^F#u%%%/Z%@%@		c?$H  C''%/Z%@%@		c?$HQDs   G"+G"<G"c                 (   Uc  U R                   OUnU[        R                  :X  d  U[        R                  :X  a  SnO{U[        R                  :w  aY  U R                  XAX55      u  p5nU(       a<  U R                  R                  U/ 5        U R                  U   R                  XXb45        OUb  [        S5      eU R                  (       d  [        S5      eU R                  R                  5       nU R                  R                  [        XqX#5      5        g )NTz)Cannot specify on clause with cross join.r  )r  r?   r:  rB  r@  r  r  r	  r  r  r  r  r  )rb   r  r  r  rl  r   r  r6  s           rd   r[  ModelSelect.joinc  s     #dnn$	T5F5F(FB$**$$($8$8B$M!Bk&&sB/C ''[(LM^HII566""$tD	>?rg   c                 F    U R                  U[        R                  X#U5      $ r`   r  )rb   r  r  rl  r   s        rd   r  ModelSelect.left_outer_joinw  s    yyt>>rg   c                 (    U R                  X#XAU5      $ r`   )r[  )rb   rl  r  r  r  r   s         rd   	join_fromModelSelect.join_fromz  s    yy"488rg   c                    [        U R                  5      S:X  a<  U R                  (       d+  [        XR                  U R
                  U R                  5      $ [        XR                  U R
                  U R                  U R                  5      $ r  )r   r  r  rU  r  rz  ModelCursorWrapperrL  s     rd   rQ  %ModelSelect._get_model_cursor_wrapper}  sc    t1$T[[+FJJ,0OOTZZI I!&**doo"&//4;;@ 	@rg   c                     U R                   nU R                  R                  U/ 5       H  u  pgpXb:X  d  M  U s  $    U R                  U5      R                  " U4SU0UD6R                  U5      $ )Nr  )r  r  r   r  r[  )	rb   lmrmr  join_kwargsjoin_ctxr  r  r  s	            rd   ensure_joinModelSelect.ensure_join  sc    >>'+{{r2'>#D[z (? {{2##B=2==DDXNNrg   c                    / n/ n[         [        4n[        UR                  5       5       GHN  u  pVU R                  nSU;   a;  UR                  SS5      S   [        ;   a  UR                  SS5      u  pX[        U   nOUc
  [        S   nO	[        S   nSU;  a  [        Xu5      n	OUR                  S5       H  n
U R                  R                  US5       HD  u  p  n[        XzS 5      n	X:X  d)  [        U[        5      (       d  M/  UR                  U
:X  d  MA  Un  Me     [        Xz5      n	Uc  Mw  [        X5      (       d  M  U	R                  nUR                  U	5        M     UR                  U" W	U5      5        GMQ     X#4$ !    N= f)Nr  r   r   r  ra   )r6   r%  r  rj  r  rsplitr-   r   r   r  r   rz   r  r  r  r  )rb   qdictr8  joinsfksrm  r   r  r  r   piecer  r   r  s                 rd   convert_dict_to_node ModelSelect.convert_dict_to_node  sZ   0 /JC::Ds{szz$215C**T1-^%%3 %T/
 YYt_E,0KKOOD",E(Aq*1$t*DZ=Zj-I-I-1ZZ5-@#'D! -F &-T%9
 ,J1L1L#-#7#7D!LL4 - LLJ./9 0: | %s   F  F	c                    U(       aL  U(       aE  [        [        R                  U Vs/ s H  o3R                  5       PM     sn5      [	        S0 UD6-  nOyU(       aD  [        [        R                  U Vs/ s H  o3R                  5       PM     sn5      [        5       -  nO.U(       a  [	        S0 UD6[        5       -  nOU R                  5       $ [        R                  " U/5      n/ n[        5       nU(       Ga  UR                  5       n[        U[        5      (       d  M/  SUR                  4SUR                  44 H  u  p[        U
[        5      (       a  U R                  U
R                  5      u  pU H,  nX;  d  M
  UR!                  U5        UR#                  U5        M.     [        [        R                  U5      nU
R$                  (       a  ['        U5      n[)        XU5        M  UR!                  U
5        M     U(       a  GM  U(       a  U(       d  UR                  nU R                  5       nU H  n[        U[*        5      (       a  UR,                  UR.                  nnUnO9[        U[0        5      (       a$  UR,                  UR.                  nnUR2                  nUR5                  WWW5      nM     UR7                  U5      $ s  snf s  snf )Nr  r   ra   )rx   r  r  r  r0   r  r
  r  r  r  rz   r  r  r   r  rl  r  r  r  r  rR  r6   r  r  r%  r  r  r  )rb   r  r  r  dq_noder  dq_joins
seen_joinsr  sider  rl  r  r[  rB  r  r  r  	field_objs                      rd   r  ModelSelect.filter  s   Fhmm-FAggi-FG|F|$Ghmm-FAggi-FG!|$Gl6lZ\1G::< wi(U
99;DdJ//!& 1E4883DEeR((#'#<#<U[[#ILE %1$OOD1&NN40 !& "(u!=J~~%,Z%8
D
3HHUO  F	 a( 6kkG

E%11eooB!	E?33eooB!KK	%%b"i8E  {{7##] .G .Gs   K
3K
c                 R    U R                   R                  R                  " XU40 UD6$ r`   )r  rQ  r  )rb   r  rj  rP  s       rd   r  ModelSelect.create_table  s$    zz!!11$dKdKKrg   c                 P   U R                   (       ar  U(       ak  [        U R                  5      S:  aR  U R                  R                  R
                  SLa/  UR                  U R                  R                  R
                  5      $ UR                  [        U R                  5      5      $ r
  )r  r   rz  r  rT  rS  rV  r  r  s      rd   r  ModelSelect.__sql_selection__  sl    DOO0Dq0H::''u4774::++7788ww}T__566rg   )r  r  r  r  r  r`   r  r\  r  )rh   ri   rj   rk   r  r  r  r  r  r  r  r  ri  rT  r?   r;  r[  r  r  rQ  r  r  r  r  r  rl   r  r  s   @rd   r  r    s    ;
?
	A'F?B 
YY#'::$Dt @ @&? .2ZZDt 9@O!F1$fL7 7rg   r  c                        \ rS rSrS rS rSrg)r  i  c                 `    U R                   R                  R                  R                  U5      $ r`   )r  rT  r  r  rh  s     rd   rR  NoopModelSelect.__sql__  s#    zz((88==rg   c                     [        U5      $ r`   )r  rL  s     rd   r  #NoopModelSelect._get_cursor_wrapper  s    V$$rg   ra   N)rh   ri   rj   rk   rR  r  rl   ra   rg   rd   r  r    s    >%rg   r  c                   :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )_ModelWriteQueryHelperi  c                 B   > Xl         [        [        U ]  " U/UQ70 UD6  g r`   )r  r  r  r  r4  s       rd   r  _ModelWriteQueryHelper.__init__  s"    
$d4ULTLVLrg   c                    > / nU HK  n[        U5      (       a'  UR                  UR                  R                  5        M:  UR	                  U5        MM     [
        [        U ]  " U6 $ r`   )rS  rg  rT  rq  r  r  r  r  )rb   r  r8  r6  r  s       rd   r   _ModelWriteQueryHelper.returning  sR    D~~TZZ556T"	 
 +T<eDDrg   c                 v    U R                   R                  R                  nUR                  UR                  U'   g r`   )r  rT  rU  rh   r*  )rb   ri  rU  s      rd   r  '_ModelWriteQueryHelper._set_table_alias  s+    

  &&#(>>% rg   r+  )	rh   ri   rj   rk   r  r  r  rl   r  r  s   @rd   r  r    s    ME2 2rg   r  c                       \ rS rSrSrg)r  i  ra   Nr  ra   rg   rd   r  r        rg   r  c                   X   ^  \ rS rSr\R
                  rU 4S jrU 4S jrS r	S r
SrU =r$ )r  i  c                 @  > [         [        U ]
  " U0 UD6  U R                  c|  U R                  R
                  R                  bZ  U R                  R
                  R                  R                  (       a*  U R                  R
                  R                  5       U l        g g g g r`   )	r  r  r  rz  r  rT  r  rW  r  r   s      rd   r  ModelInsert.__init__  sw    k4)4:6:??"tzz'7'7'@'@'Lzz((99"&**"2"2"C"C"E : (M"rg   c                 x   > U(       a"  U R                   c  [        R                  U l         [        [        U ]  " U6 $ r`   )r  r  rI  r  r  r  )rb   r  r  s     rd   r  ModelInsert.returning  s.    
 / YYDN[$19==rg   c                 B    U R                   R                  R                  $ r`   )r  rT  r7  r  s    rd   r"  ModelInsert.get_default_data  s    zz(((rg   c                     U R                   R                  R                  nU R                   R                  R                  (       a  USS  $ U$ r  )r  rT  rq  rm  )rb   r  s     rd   r&  ModelInsert.get_default_columns   s:    !!//!ZZ--<<vabzH&Hrg   )rz  r  )rh   ri   rj   rk   r  rE  r  r  r  r"  r&  rl   r  r  s   @rd   r  r    s)    yyF>)I Irg   r  c                       \ rS rSrSrg)r  i%  ra   Nr  ra   rg   rd   r  r  %  r  rg   r  c                   D   ^  \ rS rSrU 4S jrS rSS jrS rS rSr	U =r
$ )	r  i)  c                    > Xl         X l        UR                  R                  R                  U l        UR                  R                  R                  U l        [        [        U ]*  " X34/UQ70 UD6  g r`   )	_instance	_accessorr  r  r  	_src_attrr  
_dest_attrr  r  r  )rb   r  accessorr  r  r  r  s         rd   r  ManyToManyQuery.__init__*  sX    !!!2277"**4499ot-c6KDKFKrg   c                     [        US   [        5      (       a&  U Vs/ s H  n[        X R                  5      PM     sn$ U$ s  snf r  )rz   rA   r   r  )rb   model_or_id_listr  s      rd   _id_listManyToManyQuery._id_list1  sA    &q)511=MN=McGC1=MNN Os   Ac                    U(       a  U R                  5         U R                  n[        U R                  U R                  5      n[        U[        5      (       an  UR                  [        U5      UR                  R                  5      nUR                  R                  UR                  UR                  /US9R                  5         g [        U5      nU(       d  g U R!                  U5       Vs/ s H1  nUR                  R"                  UUR                  R"                  U0PM3     nnUR                  R%                  U5      R                  5         g s  snf )N)r  rl  )r  r  r   r  r  rz   rG  r  rY   r  r  r  r  r  r  rg  r  r  r  )rb   r   r  r  r  rl  rel_idinsertss           rd   r  ManyToManyQuery.add6  s   JJL>>8e[))MMf  **,E "".. )9)9: / $WY 'E&
 #mmE24 3F $$f  %%v/ 3  4 ""..w7??A	4s   -8Ec                    [        U R                  U R                  5      n[        U[        5      (       a  [        UR
                  U R                  5      nUR                  U5      nU R                  R                  R                  5       R                  U R                  R                  U-  U R                  R                  U:H  -  5      R                  5       $ [        U5      nU(       d  g U R                  R                  R                  5       R                  U R                  R                  U R!                  U5      -  U R                  R                  U:H  -  5      R                  5       $ r`   )r   r  r  rz   rG  r  r  r  r  r  ry  r  r  r  r  rg  r  )rb   r   r  rU  r>  s        rd   rv	  ManyToManyQuery.removeM  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 rg   c                     [        U R                  U R                  5      nU R                  R                  R                  5       R                  U R                  R                  U:H  5      R                  5       $ r`   )	r   r  r  r  r  ry  r  r  r  )rb   r  s     rd   r  ManyToManyQuery.clearc  sO    8,,t~~,,67	rg   )r  r  r  r  r  )rh   ri   rj   rk   r  r  r  rv	  r  rl   r  r  s   @rd   r  r  )  s#    L 
B. , rg   r  c                    ^  U 4S jnU$ )Nc                 F   >  T" U 5      $ ! [         [        4 a    U s $ f = fr`   )r	  r  )r   	conv_funcs    rd   validate#safe_python_value.<locals>.validatel  s,    	U##:& 	L	s      ra   )r  r  s   ` rd   safe_python_valuer  k  s    
 Org   c                   8   ^  \ rS rSrU 4S jrS r\rS rSrU =r	$ )BaseModelCursorWrapperit  c                 X   > [         [        U ]  U5        X l        U=(       d    / U l        g r`   )r  r  r  r  r  )rb   r  r  r  r  s       rd   r  BaseModelCursorWrapper.__init__u  s#    $d4V<
mrg   c                    U R                   R                  R                  nU R                   R                  R                  nU R                  R
                  n[        U R                  R
                  5      U l        / U l        S /U R                  -  =U l	        nS /U R                  -  =U l
        n[        U5       GH  u  pgUS   =pUR                  S5      n
U
S:w  a  XS-   S  nUR                  S5      nU R                  R                  U5         U R                  U   nUR!                  5       nUR%                  5       nU(       a  XR                  U'   ['        U[(        5      (       aG  UR*                  (       a  UR,                  XF'   XU'   U(       d  UR.                  U R                  U'   M  M  ['        U[0        5      (       a"  UR2                  (       a  UR2                  XF'   GM.  ['        U[4        5      (       a  UR*                  (       a  UR6                  b  UR6                  XF'   GMr  UR8                  (       a  ['        UR8                  S   [:        5      (       a  UR8                  S   R!                  5       n['        U[<        5      (       a   UR>                  S   nURA                  U5      n['        U[(        5      (       a  [C        UR,                  5      XF'   GM&  GM)  GM,  GM/  X;   d  GM7  UR*                  (       a  X   R,                  XF'   ['        U[D        5      (       d  GMp  URF                  U:X  d  GM  X   XV'   GM     g ! ["         a    X;   a  X   =p GN0 GM  f = f)Nr   rZ  r{  r   r
  )$r  rT  r  rU  r  r
  r   r
  r  
convertersr  r4  r
  r	  r  r  r  rs  r  rz   r2   r  r  r  r  r  r  r  r  ri  rj  r
  r   r  r!   rU  )rb   r  rU  r
  r  r  r  description_itemrU  orig_column	dot_indexr  rn  r  rq  r\  s                   rd   r
  *BaseModelCursorWrapper._initialize_columnsz  s   ::##,,

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

'::* $v

22f%.{%;!C#3A#66F
 S)IBA/\\&)FLL'
);;s+  (  ((*H$/S!
 $&&##&*&7&7JO"s(,		DLL%  D*--(2E2E"*"5"5
D(++%%1&*&8&8JO^^
4>>!3Dd(K(K !NN1-446E!%00${{2 (T 2!%//*;E<N<N*O
 0 )L^ #<<&.&6&C&CJOdF++u0D"*"2FK{ &<"  %&.&66Ht	s   M

M&%M&c                     [         er`   r  r
  s     rd   r
  "BaseModelCursorWrapper.process_row  r  rg   )r  r  r  r  r
  r  )
rh   ri   rj   rk   r  r
  r  r
  rl   r  r  s   @rd   r  r  t  s     $
G3R %J" "rg   r  c                       \ rS rSrS rSrg)rR  i  c                     0 nU R                   U R                  pCU R                  n[        U R                  5       H)  nX6   nXr;   a  M  XF   b  XF   " X   5      X''   M#  X   X''   M+     U$ r`   )r  r  r  r  r
  )rb   r  r'  r  r  r  rg  r   s           rd   r
  "ModelDictCursorWrapper.process_row  sh    "llDOOtzz"A:D~x}()}SV4"v # rg   ra   N)rh   ri   rj   rk   r
  rl   ra   rg   rd   rR  rR    s    rg   rR  c                       \ rS rSr\rS rSrg)rS  i  c           	          U R                   U R                  p2U R                  [        U R                  5       Vs/ s H  nX4   b  X4   " X   5      OX   PM     sn5      $ s  snf r`   )r  r  r  r  r
  )rb   r  r  r  rg  s        rd   r
  #ModelTupleCursorWrapper.process_row  sd    "llDOO4::&!(& '1m&?Z]36"SVK&!( ) 	) !(s   A ra   N)rh   ri   rj   rk   re  r  r
  rl   ra   rg   rd   rS  rS    s    K)rg   rS  c                       \ rS rSrS rSrg)rT  i  c                    ^  T R                  5         / n[        T R                  5       H!  nUR                  T R                  U   5        M#     [
        R                  " SU5      T l        U 4S jT l        g )Nr
  c                 "   > TR                   " U 6 $ r`   r
  )r  rb   s    rd   r|   9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    t'7'7'=rg   )	r
  r  r
  r  r  r
  r
  r
  r  )rb   
attributesrg  s   `  rd   r  'ModelNamedTupleCursorWrapper.initialize  sZ      "
tzz"Adll1o. #&11%D=rg   )r  r
  N)rh   ri   rj   rk   r  rl   ra   rg   rd   rT  rT    s    >rg   rT  c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )rU  i  c                 Z   > X@l         [        U5      U l        [        [        U ]  XU5        g r`   )r  rS  r  rU  r  )rb   r  r  r  r  r  s        rd   r  !ModelObjectCursorWrapper.__init__  s'    & -&6vfMrg   c                    > [         [        U ]  U5      nU R                  (       a0  U R                  " SSS0UD6nUR
                  R                  5         U$ U R                  " S0 UD6$ )Nrs  r   ra   )r  rU  r
  rS  r  r  r  )rb   r  r  r  r  s       rd   r
  $ModelObjectCursorWrapper.process_row  s]    -t@E==""<!<t<CJJJ##+d++rg   )r  rS  r
  r  s   @rd   rU  rU    s    N
, ,rg   rU  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )r  i  c                 F   > [         [        U ]  XU5        X@l        XPl        g r`   )r  r  r  r  r  )rb   r  r  r  r  r  r  s         rd   r  ModelCursorWrapper.__init__   s     $0G"
rg   c           	      P   U R                  5         [        U R                   Vs/ s H  nUc  M  UR                  PM     sn5      nU R                  U R
                  pCU R                  U R                  0U l        0 U l        / U l        [        R                  " U R                  5      n[        5       nU(       a  UR                  5       n[        U[        5      (       a8  UR                  UR                   5        UR                  UR"                  5        Md  XpR$                  ;  a  Mu  [        U[&        5      nU R$                  U    He  u  ppXR                  ;  d  M  XR                  U	'   U R                  R                  XzXU45        UR)                  U	5        UR                  U	5        Mg     U(       a  M  U Hd  nXR                  ;  d  M  [+        U5      (       a  XR                  U'   M4  [        U[,        5      (       d  MK  UR                  U R                  U'   Mf     U R                   H/  u  pn  nX;   =(       a    X;   =(       d    X;   U R                  U'   M1     / U l        [1        U5       GH*  u  nnU R                  n	U R                  U   nUb/  [        U[2        5      (       a  UR4                  n	OUR                  n	O[        U[6        5      (       a`  UR8                  U R                  ;  a9  [;        UR=                  5       < SUR8                  < SUR8                  < S35      eUR8                  n	OF[        U[>        5      (       a  UR=                  5       n[        U[@        5      (       a  UR4                  n	U R.                  R                  U	5        GM-     g s  snf )Nz specifies bind-to z, but z# is not among the selected sources.)!r
  r  r  r  r  r  key_to_constructorsrc_is_destsrc_to_destr
  r  r  r  rz   r  r  r  r   r  r  r  rS  r  column_keysr4  r  rU  r  r  r  r  ri  r!   )rb   r  selected_srcr  r  r8  destsr  rC  rm  r   r  r  rl  r  r  r  rn  s                     rd   r  ModelCursorWrapper.initialize  s     "T[[ 2[E$ (EKK[ 2 3++t||#'::tzz":!!$..1==?D$%%TXX&TXX&::% t,G59ZZ5E1;5553>++C0 $$++T-6-8 9IIcNLL% 6F e,  C111C==36++C0Z003699D++C0   #'"2"2CD!Q$'L %Nd6J 7M9<9L S! #3 "6*IC**CKK$E eZ00,,C++CD&))99D$;$;;$&*kkmTYY		&K L L iidD));;=DdF++++C##C() +[2s
   N#N#c                    0 n/ nU R                   R                  5        H   u  pEU" SS9X$'   UR                  X$   5        M"     X R                     n[	        5       n[        U R                  5       H  u  pUR                  XF5      n	U R                  U   n
X   nUb  UR                  U5        U R                  U   (       a  U R                  U   " U5      n[        U	[        5      (       a  XU
'   M  [        XU5        M     U R                   Hx  u  ppnX,   n	 X.   nU	b(  Ub%  X;  a"  U R                   R                  U5      (       d  M=  X;  a  X;  a  UR#                  S5      (       a  M_  U(       a  UX'   Ml  [        XU5        Mz     U H4  n	[        U	[$        5      (       d  M  U	R&                  R)                  5         M6     X R                     $ ! [         a     M  f = f)NT)rs  z
OUTER JOIN)r  rj  r  r  r  r4  r  r   r  r  r  rz   r  rR  r  r   r  r  rA   r  r  )rb   r  r  object_listrm  r  default_instanceset_keysr  r  rU  r   rl  r   r  rC  r  joined_instances                     rd   r
  ModelCursorWrapper.process_rowJ  s    $ 7 7 = = ?C&d;GLw|, !@ #::.5!$"2"23HC {{39H\\#&FHE S!s#,U3(D))#( %0 4" 6:5E5E1Sy|H")- 4<$T-=-=-A-A$-G-G 'D,@%%l33!08- 6F2 $H(E**%%' $ zz""3  s   G
GG)r  r  r  r  r  r  )	rh   ri   rj   rk   r  r  r
  rl   r  r  s   @rd   r  r    s    
C)J8# 8#rg   r  c                   <   ^  \ rS rSr  SU 4S jjrS rS rSrU =r$ )PrefetchQueryi  c           	        > U(       a  U(       aD  Uc  U Vs/ s H  owR                   PM     nnU Vs/ s H  owR                  R                  PM     nnO9Uc  U Vs/ s H  owR                  PM     nnU Vs/ s H  owR                  PM     nn[	        [        X(5      5      nUR                   n[        [        U ]#  XX#XEU5      $ s  snf s  snf s  snf s  snf r`   )	r  r  r  r  rd  rD  r  r)  r  )
r  rl  r  r  
rel_modelsfield_to_namer  r  foreign_key_attrsr  s
            rd   r  PrefetchQuery.__new__  s    %;A!B6%++6J!BGM$Nve__%9%9v!$N!%?E!Fve//vJ!F=C$DVEZZV!$D V!?@M]C0JuN 	N "C$N "G$Ds   CCC6Cc                    U R                   (       aO  U R                   H>  nUR                  UR                     nX44nXR;   d  M&  [	        XR                  X%   5        M@     g U R
                   H  u  p6UR                  UR                  R                     nX44nUR                  U/ 5      nU H)  n[	        XU5        UR                  R                  5         M+     [	        XR                  U5        M     g r`   )r  r  r  r  rR  r,  r  r   r  r  r  )	rb   r  id_mapr  
identifierrm  attnamerel_instancesr  s	            rd   populate_instancePrefetchQuery.populate_instance  s    ??%..uzz:
)=Hjj&+>	 % #'"4"4%..u/C/CD
) &

3 3)DD84KK%%' * --? #5rg   c                     U R                    Hl  u  p4UR                  R                  UR                  U   5      nX54nU R                  (       a  XU'   MG  UR                  U/ 5        X&   R                  U5        Mn     g r`   )r,  r  r  r  r  r	  r  )rb   r  r0  r  r2  identityrm  s          rd   store_instancePrefetchQuery.store_instance  si    "00NE33H4E4Eg4NOH#C&s!!#r*""8, 1rg   ra   )NNNNN)	rh   ri   rj   rk   r  r4  r8  rl   r  r  s   @rd   r)  r)    s    EI*.N @"- -rg   r)  _PrefetchQuery)rl  r  r  r+  r,  r  c                 	   [        U 5      /n[        U5       GH  u  pE[        U[        5      (       a  Uu  pVOS n[        U[        5      (       d  [        U5      (       d  [        U[        5      (       a  UR                  5       nUR                  n[        [        US-   5      5       GH  nS =pX8   nUR                  nUR                  =p[        U[        5      (       a  UR                  nUR                  R                  R                  U/ 5      nU(       aW  U Vs/ s H  n[        UUR                   5      PM     n	nU Vs/ s H#  n[        UUR"                  R                   5      PM%     nnO%UR                  R$                  R                  U5      n
U	(       d	  U
(       d  M  XnL d  Ub  GM    O"   U(       a  SU-  OSn['        SU< U< 35      eU(       a  U4OS nU	(       GaM  U[(        R*                  :X  a^  [-        [.        R0                  [3        U	W5       VVs/ s H  u  nnUUR                  U5      -  PM     snn5      nUR5                  U5      nOU[(        R6                  :X  a  / n[9        5       n[3        U	W5       HI  u  nnUR;                  [        UR<                  UR>                  5      U:H  5        URA                  U5        MK     URC                  5       RE                  UR                  " U6 [-        [.        R0                  U5      S9nUR;                  [        XYSU5      5        GM  U
(       d  GM&  / n/ nU
 HL  n[        UUR"                  R                   5      n[        UUR                   5      nUR;                  UU45        MN     U[(        R*                  :X  aY  U H)  u  nnUR;                  UUR                  U5      -  5        M+     UR5                  [-        [.        R0                  U5      5      nOU[(        R6                  :X  a  / nU HK  u  nnUR;                  U5        [        UR<                  UR>                  5      nUR;                  UU:H  5        MM     URC                  5       RE                  UR                  " U6 [-        [.        R0                  U5      S9nUR;                  [        XZSU5      5        GM     U$ s  snf s  snf s  snnf )Nr   z	 using %sr0  z-Error: unable to find foreign key for query: )r  FT)#r)  r4  rz   re  r  rS  r  r  r  r  r  rl  rT  r  r   r   r  r  r  r   rJ   rJ  rx   r  r#  rD  r  r?   r  r  r{   r2  r  r  r[  )r  rp  prefetch_typefixed_queriesrg  r>  target_modelsubquery_modelr  r  r  fixed
last_query
last_modellast_objrelsr  r	  tgt_errr  r
  rR  
select_pksr  r  r  r  
select_fksr?  s                                rd   prefetch_add_subqueryrH    s   "2&'M ,h&&%-"HlL(E**x/A/Ah
++(H!%A,'A!!C!$EJ$)KK/J*j11'--
!''2266z2FDBFG$Bw~rww7$GFJKdwx):):;dK)//>>BB:Nxx|'?'3'; ($ 5AkL0bG 2:G"E F F #/D 3 33hll$'SM-3$1R :,,R00$1-3 4 $>>$/-"4"44 U
!#smFBKK
bnn E KLNN2& , $,,.33%%z2hllD1 4 3   xeT!JKXDF##NG4E4E4J4JK	"8W\\:y(34 $
  3 33+1'IxKK	Z->->x-H HI ,2#>>&t*DE-"4"44
+1'Ix%%h/$Z\\83G3GHFKK	V 34 ,2 $,,.33%%z2hllD1 4 3   x4!NOM -P m HK -3s    S*S!Sc                    U(       d  U $ UR                  S[        R                  5      nU(       a  [        SU-  5      e[	        XU5      n0 n0 n[        U5       H  nUR                  nUR                  (       a8  UR                   H(  n	UR                  U	/ 5        Xi   R                  U5        M*     UR                  U0 5        XX   n
[        UR                  U5      5      nUR                   HW  nUR                  (       a  UR                  X5        U(       d  M.  Xh    H!  nUR                  XUR                     5        M#     MY     M     [!        WR                  5      $ )Nr<  zUnrecognized arguments: %s)r  rJ   rJ  r  rH  r  r  r  r+  r	  r  ro  r   rl  r8  r4  rd  )r  rp  r  r<  r=  depsrel_mappqquery_modelr  r0  has_relationsr  r  s                 rd   rI   rI       s   	JJ0C0CDM5>??)"-HMDG}%hh99]]	""9b1"))"- + 	R("W[[56Hyy!!(3}"/C))(OD 0	 ! &$ >rg   r`   ra   r  r  )@   (X  bisectr   r   
contextlibr   rT  r   	functoolsr	   inspectr
   r  r
  r   r  r  r0  loggingr  r  r  r  rq   r  r   r
  r   collections.abcr   ImportError	pysqlite3r   pysq3	pysqlite2r  sqlite_version_infopsycopg2cffir   r 	  r	  r   r	  r   r  psycopg2.extrasr   pg_register_uuidr]  psycopgr  r/
  pymysqlr2
  MySQLdb__version____all__r\   Handler	getLoggerr*  
addHandlerr  unicoder  r  r  bufferr$  r}  callabler5  rd  re  	frozensetr  r{  execrv   builtinsrw   rx   r  r  r  r   r  r  r   r  r   r   r   register_adapterr  r   r   r   r   register_converterr  r   r   r   rm
  r   r   r   r  r   r|  r	  rE   r  r  ler  ger  lshiftr-   r  r?   r  rJ   r  ru  rw  ry  r{  r  r  r  compilerm  ro  rO  rR  rX  r_  rS  rg  rk  rr  r    r  rL   r&   r  r  r
  r  r%  r#   r  rb  ri  r  r  r  r  r  r  r*  r;  r/  r1  r=  rS   r  rZ   r  r  r!   r3  r;  rA  r  r  r  rg  rp  rY   r  r   r   r  r  r  r  r  rj  rQ   r   r  r5   r[   r  r?  r   rU  r  r  r  ro  ru  r1   r0   rW   rM   r  r  r  r  r
  r  rE  rG  rQ  rB  rP   r  ru  rk  rx  r9   rB   r  r  r8   r%   r'   r;   r<   r=   rD   rF   rK   r  
EXCEPTIONSr  r  r  r  r  r  localr  r  r  r$   r  rR   rG   rC   r  r  r  r  r  r  r  r  r
  r	  r  r%  r,  r2   r   r:   r   rO   r   r   r7   rH   r4   r/   r*   r  r   r3   rT   r   r   r  r  r   rX   r   r=  r   r	  rI  r)   r(   rU   rp  rV   r>   r   r   r6   r+   r,   r  r  r@   r)  r"   rO  rN   r  r2  r.   r  r;  r  rA   r  r  r  rK  r  ra  rd  r  r  r  r  r  r  r  r  r  r  rR  rS  rT  rU  r  r)  rH  rI   ra   rg   rd   <module>rt     s     %            	   
    $') **g.I.II	#
OO 40
	A,  L\# 
		8	$   +-   A!IJK))LI	3/K	?@ ), !1IIJKJD	36KXw'F((L g((99%%F'' W__c2X]]C0X]]C0
7"8K		J 	  !2!24DE""6<8"";0AB 44" IJ    !!#  -113 !4 X !4 X $;)Ht H 8   	 		
 	 	   	 	   	  	  !" #$ %& '( )* 
+, -. /0 12 34 56 7> 
++
++;;
++;;
++
//
.246 
  	 				 	 
		
 
	 
	 
	 	 	 	 	 	 		 	 
	  
!	" 
#	$ %	& '	. 
 "	 
$	& 
	

 
	
 	     ::23 ::34  "
$ )?
 9GC9 &;F &;RE 0 $f #)!6 )!X,K""8 .: ; ,.h0f h0V:(.6 DF V f B4 B/8T /8d$f $N zzE 
3 
38 82\*OY \*~9 , )  F</6 <~K K\PZ P,
"* 
"'F 'V $0K $0N"[ "2k 2$6 $	2\; 	25J 5*&K &&
2; 
2{ D34) )X6z 6GZ G"
* 
>Cz CL dDkT k\	6$ 	6&$ &.: .( ,z 0!' / / j!   	'&[ &7% 7%td% d%N$y $(LI L^% ,>&+ >H@%* @%F{%Z {%|1% 1h/-[ /-d\A[ \A~-[ ->D >B%P %PP5i 5
 2? 1 *O * $ $ )] ) +_ + (M ( , , +} + +} +Iv I. &"$$"*(( 0)%'
 )4  &&13 ''DF !++46  %%noFv $ @' ?8 8 }( }@&S4X S4la; a;H_#H _#J5f 50@f @8-&6 -&`# #RIF IX $&m &,+ ,V .'F ' ' 'Df 2v 2&rJ rju 5 l  9 99 6I 6?i ? * 55 5>	O5 	O= =Y   >&+|_ &+R\,f \,~B- B,A) A? ?.Ei E4
C% C,' ,6&# &6,# ,4X6_ X6v<o <5 
 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*IHN9d+ IHX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O  $##$
  --   G  		  	  Hy 
  		  J   	r  goo 0  )(()s  &x	 -x 4y  y 4
y+ ?y y< z	 z (z< { 	xxx=#x,,x94x=8x99x= yyyyy($y+ 'y((y+ +
y98y9<zz	zzz9z((z50z94z55z9<{{{.-{.