
    & j2s                       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
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r S SK J!r"   S S
K$r$\"(       a  \"RJ                  \$RJ                  :  a  \"r$ S SK&J'r'  \'RP                  " 5          S S
K)r)S SK)J*r+  S SK,J-r.  S SK,J/r0  \." 5          S S
K1r1S SK2J3r3  S SK4J/r5  S SK4J6r7  Sr8 S S
K9r:Sr</ SQr=\R|                  " S5      r?\?R                  \R                  " 5       5        S rB\C\D\E\F\G\R                  4rIGSS jrJ\R                  S:  a-  \R"                  R                  rL\R"                  R                  rMOS rLS rM\$(       a  \$R                  " \R                  \P5        \$R                  " \R                  \P5        \$R                  " \R8                  \P5        \R                  S:  aL  S rRS rSS rT\$R                  " \R"                  \R5        \$R                  " S\S5        \$R                  " S \T5        \$RJ                  rVOS!rV\F" S"5      rWS#rXS$S%S&S'S(S)S".rY\YR                  5       rZS*\ZS+'   S,\ZS-'   S. r[S/ r\S0 r]S1 r^ " S2 S3\_5      r`\a" 5       rb\`" GS0 S4S4_S5S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_SJSK_SLSM_SNSO_SPSQ_SRSR_SSST_SUSU_SVSW_SXSX_SYSY_SZSZ_S[S[_S\S\_S]S^_S_S`_6rc\`" \R                  \R                  \R                  \R                  \R                  \R                  \R                  Sa Sb Sc Sd Se Sf.5      rk\`" GS0 SgSh_SiSj_SjSj_SkSk_SlSm_SnSn_SoSo_SpSp_SqSq_SrSs_StSu_SvSu_SwSh_SmSm_SxSx_SySy_SzSx_S{Sk_S|S|_6rl\`" S}S~SSSSSSSS9	rm\`" SSSSSS9rn\`" SSS9roSrpSrqSrrSrsSrtS ruSrvSrw\R                  " S5      ry\R                  " S5      rz\R                  " S5      r{Sr|\a4S jr}S r~S rS rS rS rS rS rS r " S S\a5      r " S S\a5      r " S S\5      r " S S\a5      r " S S\a5      r " S S\GR                  " SS5      5      rS r " S S\a5      rS rS r " S S\a5      r " S S\a5      r " S S\a5      r " S S\a5      r " S S\5      r " S S\5      r " S S\a5      rS r\mGR2                  S4S jr " S S\5      r " S S\a5      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\a5      r " S S\a5      r " S S\5      r " S S\5      r " S S\5      r " S S\a5      r " S S\\5      r " S S\5      r " S S\5      rGSS j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rS 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 G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S0\5      r " GS1 GS2\5      r " GS3 GS4\5      r " GS5 GS6\5      r " GS7 GS8\5      r " GS9 GS:\5      r " GS; GS<\5      r " GS= GS>\5      r " GS? GS@\5      r " GSA GSB\5      r " GSC GSD\a5      r\\\\\\\\\\\\GSE.r\" \5      r\GR                  " GSFGSG5      r\GR                  " GSHGSI5      r\GR                  " GSJGSK5      r\GR                  " GSLGSM5      r " GSN GSO\a5      r " GSP GSQ\\GR                  5      r " GSR GSS\a5      r " GST GSU\a5      r " GSV GSW\5      rGSX r " GSY GSZ\5      r " GS[ GS\\a5      r " GS] GS^\5      r " GS_ GS`\5      r " GSa GSb\5      r " GSc GSd\5      r " GSe GSf\a5      r " GSg GSh\a5      r " GSi GSj\a5      r " GSk GSl\a5      r " GSm GSn\a5      r " GSo GSp\5      r " GSq GSr\5      r " GSs GSt\5      Gr  " GSu GSv\a5      Gr " GSw GSx\a5      Gr " GSy GSzG\5      Gr " GS{ GS|\a5      Gr " GS} GS~\a5      Gr " GS GS\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SG\5      Gr " GS GSG\5      Gr " GS GS\a5      Gr " GS GSG\G\5      Gr " GS GS\G\	5      Gr " GS GS\a5      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\a5      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r0 " GS GSG\-5      Gr1 " GS GS\a5      Gr2 " GS GS\a5      Gr3 " GS GS\a5      Gr4 " GS GSG\45      Gr5 " GS GS\5      Gr6 " GS GSG\75      Gr8 " GS GS\a5      Gr9 " GS GS\}" G\8\5      5      Gr: " GS GS\5      Gr; " GS GSG\5      Gr<GS Gr= " GS GS\a5      Gr> " GS GSG\>\5      Gr? " GS GSG\>5      Gr@ " GS GSG\@\5      GrAGS GrB " GS GSG\@\5      GrC " GS GSG\C5      GrD " GS GSG\>5      GrE " GS GSG\E\5      GrF " GS GSG\E\5      GrG " GS GSG\E\5      GrH " GS GSG\C5      GrIGS GrJ " GS  GS\5      GrK " GS GSG\K5      GrL " GS GSG\K5      GrM " GS GSG\M5      GrN " GS GS	G\L5      GrO " GS
 GSG\K5      GrP " GS GS\GR                  " GSGS5      5      GrQGS GrRGS GrSg
! \# a    S
r" GNf = f! \# a    \"r$ GNf = f! \# a     GN}f = f! \# a    S
=r)r0 GNpf = f! \# a
    S
=r1=r5r7 GNlf = f! \# a     S S
K;r:Sr8 GNy! \# a    S
r:  GNf = ff = f(      )bisect_left)bisect_right)Callable)Mappingcontextmanager)deepcopy)reducewraps)isclassN)dbapi2)compat)
extensions)register_uuid)Json)TransactionStatus)JsonbFTz4.0.5)MAnyFieldAsIs	AutoField	BareFieldBigAutoFieldBigBitFieldBigIntegerFieldBinaryUUIDFieldBitField	BlobFieldBooleanFieldCaseCast	CharFieldCheckchunkedColumnCompositeKeyContextDatabaseDatabaseErrorDatabaseProxy	DataError	DateFieldDateTimeFieldDecimalFieldDefaultDeferredForeignKeyDeferredThroughModel
DJANGO_MAPDoesNotExistDoubleFieldDQEntityEXCLUDEDFieldFixedCharField
FloatFieldfnForeignKeyFieldIdentityFieldImproperlyConfiguredIndexIntegerFieldIntegrityErrorInterfaceErrorInternalErrorIPFieldJOINManyToManyFieldModel
ModelIndexMySQLDatabaseNotSupportedErrorOPOperationalErrorPostgresqlDatabasePrimaryKeyFieldprefetchPREFETCH_TYPEProgrammingErrorProxyQualifiedNamesSchemaManagerSmallIntegerFieldSelectSQLSqliteDatabaseTable	TextField	TimeFieldTimestampFieldTuple	UUIDFieldValue
ValuesListWindowpeeweec                 "    [        U [        5      $ N)
isinstancer   )cs    W/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/peewee.py<lambda>rh      s    jH-    c                 F    UR                   ULa  UR                  U5      eUerd   )__traceback__with_traceback)tpvaluetbs      rg   reraiserp      s&    "$""2&&
Kri   )      c                     [         R                   R                  U [         R                  R                  S9R	                  S S9$ )N)tztzinfo)datetimefromtimestamptimezoneutcreplace)tss    rg   utcfromtimestampr}      s6    !!rh&7&7&;&;<%	'ri   c                      [         R                   R                  [         R                  R                  5      R	                  S S9$ )Nru   )rw   nowry   rz   r{    ri   rg   utcnowr      s2    !!X&&**+%	'ri   c                 $    U R                  S5      $ N )	isoformatds    rg   datetime_adapterr      s    C(8!8ri   c                 b    [         R                  " [        [        U R	                  S5      5      6 $ )N   -)rw   datemapintsplitr   s    rg   convert_dater      s    HMM3sAGGDM3J$KKri   c           	         SU ;   a  U R                  S5      O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   T    r      .r      :   z{:0<6.6}   )r   r   r   lenformatdecoderw   )tr   timeymr   t_fullhourminutesecondusecs              rg   convert_timestampr      s    *.!)JD#tzz$/0GA!ZZ%F#&sF1IOOD,A#B D&6{a:,,VAY-=-=-?@A$$Q1FDIIri   r   	timestampr   r   r   )yearmonthdayr   r   r   )%Y-%m-%d %H:%M:%S%Y-%m-%d %H:%M:%S.%f%Y-%m-%d%H:%M:%S%H:%M:%S.%f%H:%Mz%Y-01-01 00:00:00z%Y-%m-01 00:00:00z%Y-%m-%d 00:00:00z%Y-%m-%d %H:00:00z%Y-%m-%d %H:%M:00r   z%Y-%m-%d %H:%i:00r   z%Y-%m-%d %H:%i:%Sr   c                 `    U [         ;   d   eU(       d  g [        U[        5      n[        X 5      $ rd   )__date_parts__format_date_time__sqlite_datetime_formats__getattrlookup_typedatetime_stringdts      rg   _sqlite_date_partr      s.    .(((	/+F	GB2##ri   c                 z    U [         ;   d   eU(       d  g [        U[        5      nUR                  [         U    5      $ rd   )__sqlite_date_trunc__r   r   strftimer   s      rg   _sqlite_date_truncr      s9    ////	/+F	GB;;,[9::ri   c                 :    Uc  g[         R                  " X5      S L$ NF)research)regexrn   s     rg   _sqlite_regexpr      s    }99U"$..ri   c                 :    [         R                  " U [        5        g rd   )warningswarnDeprecationWarning)ss    rg   __deprecated__r      s    MM!'(ri   c                   ,    \ rS rSrS rS rS rS rSrg)attrdict   c                 >     X   $ ! [          a    [        U5      ef = frd   )KeyErrorAttributeErrorselfattrs     rg   __getattr__attrdict.__getattr__   s)    	': 	' &&	's    c                     X U'   g rd   r   r   r   rn   s      rg   __setattr__attrdict.__setattr__  s    UT
ri   c                 (    U R                  U5        U $ rd   updater   rhss     rg   __iadd__attrdict.__iadd__  s    T[[-d{ri   c                 <    [        U 5      o"R                  U5        U$ rd   )r   r   )r   r   r   s      rg   __add__attrdict.__add__  s    Aaxri   r   N)	__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes__r   ri   rg   r   r      s    '
 ;:Gri   r   ANDORADD+SUB-MUL*DIV/BIN_AND&BIN_OR|XOR#MOD%EQ=LT<LTEz<=GT>GTEz>=NEz!=INNOT_INzNOT INISIS_NOTzIS NOTLIKEILIKEBETWEENREGEXPIREGEXPCONCATz||BITWISE_NEGATION~c                 8    [        U [        R                  U5      $ rd   )
ExpressionrK   r  lrs     rg   rh   rh   3  s    z!RUUA.ri   c                 8    [        U [        R                  U5      $ rd   )r  rK   r  r  s     rg   rh   rh   4      :aA6ri   c                 8    [        U [        R                  U5      $ rd   )r  rK   r  r  s     rg   rh   rh   5  s    Arww2ri   c                 8    [        U [        R                  U5      $ rd   )r  rK   r  r  s     rg   rh   rh   6  s    *Q!4ri   c                 8    [        U [        R                  U5      $ rd   )r  rK   r	  r  s     rg   rh   rh   7  r  ri   )eqltltegtgteneinisis_notlikeilikeregexpAUTOINTEGERBIGAUTOBIGINTBLOBBOOLSMALLINTCHARDATEDATETIMEDECIMALDEFAULT DOUBLEREALFLOATINTTEXTTIMEUUIDUUIDBVARCHARz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOINzFULL OUTER JOINz
CROSS JOINzNATURAL JOINLATERALzLEFT JOIN LATERAL)	INNER
LEFT_OUTERRIGHT_OUTERFULL
FULL_OUTERCROSSNATURALr:  LEFT_LATERALr   r   rq         )TUPLEDICTNAMED_TUPLECONSTRUCTORMODEL)WHERErE         z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])z[A-Za-z_][A-Za-z0-9_]*_metaclass_helper_c                      U " [         U40 5      $ rd   )
MODEL_BASE)metabases     rg   with_metaclassrR    s    
TGR((ri   c                 V    U R                  5       nU(       a  UR                  U5        U$ rd   )copyr   )source	overridesmergeds      rg   
merge_dictrX    s!    [[]Fi Mri   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      rg   quoter_    sH    
4yA~Aw||K((88=YY{+=>>=s   Ac                 F    [        U 5      =(       a    [        U [        5      $ rd   )r   
issubclassrG   )os    rg   rh   rh     s    WQZ8Jq%$88ri   c                 J    U b   [        U [        [        45      (       a  U $ U 4$ g rd   )re   listtuplern   s    rg   ensure_tuplerg    s*    "54-88uFuhF ri   c                 N    U b"  [        U [        5      (       a  U $ [        U 5      $ g rd   )re   Noder6   rf  s    rg   ensure_entityrj    s(    "5$//uBVE]B ri   c                 v    [         R                  SU 5      n[        R                  SU5      R                  5       $ )Nz\1_\2)SNAKE_CASE_STEP1subSNAKE_CASE_STEP2lower)r   firsts     rg   make_snake_caserq    s0      1-E%06688ri   c                 |    [         R                  U R                  SS5      S   5      nUb  UR                  5       $ U $ )NrZ  r   )IDENTIFIER_REr   rsplitgroup)r   	match_objs     rg   make_identifierrx    s:    $$QXXc1%5b%9:I  Hri   c              #      #    [        5       n[        R                  " [        U 5      /U-  SU06nS U 5        H7  nU(       a)  US   UL a!  UR	                  5         U(       a
  US   UL a  M!  Uv   M9     g 7f)N	fillvaluec              3   8   #    U  H  n[        U5      v   M     g 7frd   )rd  ).0gs     rg   	<genexpr>chunked.<locals>.<genexpr>  s     *6a$q''6   rs  )object	itertoolszip_longestiterpop)itnmarkergroupsrv  s        rg   r$   r$     sf     XF""T"XJNEfEF*6*b	V+IIK b	V+ +s   A(A5,	A5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rd   r   argskwargsr;   r   s     rg   inner1_callable_context_manager.__call__.<locals>.inner  s    4*6* s   
$r   r   r;   r  s   `` rg   __call__"_callable_context_manager.__call__       	r	+ 
	+ ri   r   N)r   r   r   r   r  r   r   ri   rg   r  r    s    ri   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$ )rR   i  z3
Create a proxy or placeholder for another object.
obj
_callbacksc                 4    / U l         U R                  S 5        g rd   )r  
initializer   s    rg   __init__Proxy.__init__  s    ri   c                 F    Xl         U R                   H  nU" U5        M     g rd   r  )r   r  callbacks      rg   r  Proxy.initialize  s    HSM (ri   c                 <    U R                   R                  U5        U$ rd   )r  append)r   r  s     rg   attach_callbackProxy.attach_callback  s    x(ri   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   )r   r  r  methods      rg   r   Proxy.passthrough.<locals>.inner  s4    xx$%FGG488V,d=f==ri   r   r  r  s   ` rg   passthroughProxy.passthrough  s    	> ri   	__enter____exit__c                 ^    U R                   c  [        S5      e[        U R                   U5      $ r  r  r   s     rg   r   Proxy.__getattr__  s)    88 !BCCtxx&&ri   c                 ^   > XR                   ;  a  [        S5      e[        [        U ]  X5      $ )NzCannot set attribute on proxy.)	__slots__r   superrR   r   )r   r   rn   	__class__s      rg   r   Proxy.__setattr__  s+    ~~% !ABBUD-d::ri   )r  r  )r   r   r   r   __doc__r  r  r  r  r  r  r  r   r   r   __classcell__r  s   @rg   rR   rR     sH     &I
 K(I:&H'
; ;ri   rR   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      $ rd   ConnectionContextr  s    rg   connection_context DatabaseProxy.connection_context       &&ri   c                      [        U /UQ70 UD6$ rd   _atomicr   r  r  s      rg   atomicDatabaseProxy.atomic      t-d-f--ri   c                     [        U 5      $ rd   _manualr  s    rg   manual_commitDatabaseProxy.manual_commit      t}ri   c                      [        U /UQ70 UD6$ rd   _transactionr  s      rg   transactionDatabaseProxy.transaction      D242622ri   c                     [        U 5      $ rd   
_savepointr  s    rg   	savepointDatabaseProxy.savepoint      $ri   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  r   Nr   r   r   r   databaser   r  s   rg   Metar        4ri   r  	BaseModelhasattrtyperG   r  r   r  s   ` rg   rG   DatabaseProxy.Model  6    tX&&''{UHvtnEDK{{ri   )r  N)r   r   r   r   r  r  r  r  r  r  r  propertyrG   r   r   ri   rg   r*   r*     s9     0I'.3  ri   r*   c                       \ rS rSrSrg)ModelDescriptori  r   Nr   r   r   r   r   r   ri   rg   r  r        tri   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    rg   r  AliasManager.__init__  s!    		ri   c                 :    U R                   U R                  S-
     $ Nr   )r  r  r  s    rg   mappingAliasManager.mapping  s    }}T001455ri   c                     XR                   ;  a&  U =R                  S-  sl        SU R                  -  X'   U R                   U   $ )Nr   zt%d)r  r  r   rU  s     rg   addAliasManager.add  s9    %MMQM 4==0DL||F##ri   c                     U(       aK  [        [        U R                  5      5       H)  nXR                  U   ;   d  M  U R                  U   U   s  $    U R	                  U5      $ rd   )reversedranger  r  r  )r   rU  	any_depthidxs       rg   getAliasManager.get  sS    d&9&9 :;]]3//==-f55 < xxri   c                 $    U R                  U5      $ rd   )r  r  s     rg   __getitem__AliasManager.__getitem__  s    xxri   c                      X R                   U'   g rd   )r  )r   rU  aliass      rg   __setitem__AliasManager.__setitem__  s    $Vri   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    rg   r  AliasManager.push  sA    q T]]!33MM  $ 4ri   c                     U R                   S:X  a  [        S5      eU R                  U R                   S-
     R                  5         U =R                   S-  sl         g )Nr   z&Cannot pop() from empty alias manager.)r  
ValueErrorr  clearr  s    rg   r  AliasManager.pop$  sM    !#EFFd))A-.446q ri   NF)r   r   r   r   r  r  r  r  r  r  r	  r  r  r  r   r   ri   rg   r  r    s>    :I 6 6$  %%
!ri   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      $ rd   )r  r  __new__)clsscopeparenthesesr  r  s       rg   r  State.__new__-  s    UC([IIri   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$ rd   )r  settingsrT  r   r  )r   r  r  r  r  s        rg   r  State.__call__0  s[    #m

 dmm}}))+HOOF#H}}HU4844ri   c                 8    U R                   R                  U5      $ rd   )r  r  )r   	attr_names     rg   r   State.__getattr__>  s    }}  ++ri   r   NN)
r   r   r   r   SCOPE_NORMALr  r  r   r   r  r  s   @rg   r  r  +  s    'U J5, ,ri   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  r   r   )r   r  r  s     rg   r   __scope_context__.<locals>.innerC  s&     (((J )((s   -	-
*-r   )r  r  s   ` rg   __scope_context__r+  B  s      Lri   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'   iJ  )stack_sql_valuesalias_managerstatec                 l    / U l         / U l        / U l        [        5       U l        [        S0 UD6U l        g Nr   )r-  r.  r/  r  r0  r  r1  )r   r  s     rg   r  Context.__init__M  s0    
	)^&X&
ri   c                 @    [        S0 U R                  R                  D6$ r3  )r'   r1  r  r  s    rg   as_newContext.as_newT  s    -,,--ri   c                 *    US   R                  U 5      $ r  get_sort_keyr   items     rg   column_sort_keyContext.column_sort_keyW  s    Aw##D))ri   c                 .    U R                   R                  $ rd   )r1  r  r  s    rg   r  Context.scopeZ  s    zzri   c                 .    U R                   R                  $ rd   )r1  r  r  s    rg   r  Context.parentheses^  s    zz%%%ri   c                 .    U R                   R                  $ rd   )r1  subqueryr  s    rg   rD  Context.subqueryb  s    zz"""ri   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  r1  )r   rV  s     rg   r  Context.__call__f  sO    w/4::='"

$**%ZZ,),
ri   c                 J    U R                   (       a  U R                  S5        U $ )N()r  literalr  s    rg   r  Context.__enter__t  s    LLri   c                     U R                   (       a  U R                  S5        U R                  R                  5       U l        g )N))r  rJ  r-  r  r1  r   exc_typeexc_valexc_tbs       rg   r  Context.__exit__y  s)    LLZZ^^%
ri   c              #   |   #    U R                   R                  5         S v   U R                   R                  5         g 7frd   )r0  r  r  r  s    rg   
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      $ rd   )	re   ri  r'   __sql__is_model_metatablesqlr_   r   r  s     rg   r\  Context.sql  sW    cD'?++;;t$$c]]99??**40088E#J''ri   c                 <    U R                   R                  U5        U $ rd   )r.  r  )r   keywords     rg   rJ  Context.literal  s    		!ri   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?)r1  rd  re   ri  r\  rY  scope_columnvalue_literalsrJ  _query_val_transformr/  r  param)r   rn   rd  	add_params       rg   rn   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$ rd   )r.  extendr/  r   ctxs     rg   rX  Context.__sql__  s1    		"4<<(
ri   c                 @    U R                  U5      R                  5       $ rd   )r\  queryr   nodes     rg   parseContext.parse  s    xx~##%%ri   c                 P    SR                  U R                  5      U R                  4$ )Nr0  )r[  r.  r/  r  s    rg   rr  Context.query  s    wwtyy!4<<//ri   )r.  r/  r0  r-  r1  NT)#r   r   r   r   r  r  r6  r=  r  r  r  rD  r  r+  r%  scope_normalSCOPE_SOURCEscope_sourceSCOPE_VALUESscope_values	SCOPE_CTE	scope_cteSCOPE_COLUMNrf  r  r  r   rT  r\  rJ  rn   rX  ru  rr  r   r   ri   rg   r'   r'   J  s    FI'.*     & & # # %\2L$\2L$\2L!),I$\2L
&
 ! !
(L2
&0ri   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	_databasere  %s)r   get_sql_contextr'   r\  rr  r1  ri  r{   re  r   rh  )rr  dbro  r\  paramsri  s         rg   query_to_stringr    s     
T	*B	~  "i''%.&&(KC
IIOO"sE|kk#t$s/8999ri   c                    [        U [        [        R                  [        R                  [        R                  45      (       a   S[        U 5      R                  SS5      -  n U $ [        U [        5      (       a)   U R                  S5      n SU R                  SS5      -  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  Nmf = f)Nz'%s''''utf8raw_unicode_escaper  NULL)
re   strrw   r   r   r{   bytesr   UnicodeDecodeErrorr   )vs    rg   rh  rh    s    !c8,,hmmmm% & &SV^^C.. H 
Au			/ A QYYsD)) H 
As		3q6M
 H	 
 H FH " 	/-.A	/s   :C C98C9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$ rd   )r  r  __dict__rT  r]  s     rg   clone
Node.clone  s3    nn$$T^^4}}))+
ri   c                     [         erd   NotImplementedErrorrn  s     rg   rX  Node.__sql__      !!ri   c                    ^  U 4S jnU$ )Nc                 @   > U R                  5       nT" U/UQ70 UD6  U$ rd   )r  )r   r  r  r  r  s       rg   r  Node.copy.<locals>.inner  s%    JJLE5*4*6*Lri   r   r  s   ` rg   rT  	Node.copy  s    	 ri   c                 T    XR                   :w  a  U R                  5       nXl         U$ U $ rd   )_coercer  )r   r  r  s      rg   coerceNode.coerce  s&    ll"JJLE#MLri   c                     gr   r   r  s    rg   is_aliasNode.is_alias  s    ri   c                     U $ rd   r   r  s    rg   unwrapNode.unwrap      ri   r   NT)r   r   r   r   r  __isabstractmethod__r  rX  staticmethodrT  r  r  r  r   r   ri   rg   ri  ri    s:    G 
"  ri   ri  c                   (    \ rS rSrSrS rS r\rSrg)ColumnFactoryi  rt  c                     Xl         g rd   r  rs  s     rg   r  ColumnFactory.__init__      	ri   c                 .    [        U R                  U5      $ rd   )r%   rt  r   s     rg   r   ColumnFactory.__getattr__      dii&&ri   N	r   r   r   r   r  r  r   r	  r   r   ri   rg   r  r    s    I'Kri   r  c                   "    \ rS rSrSrSS jrSrg)_DynamicColumni  r   Nc                 "    Ub  [        U5      $ U $ rd   )r  r   instanceinstance_types      rg   __get___DynamicColumn.__get__  s     **ri   rd   r   r   r   r   r  r  r   r   ri   rg   r  r    s    Iri   r  c                   "    \ rS rSrSrSS jrSrg)_ExplicitColumni  r   Nc                 (    Ub  [        SU-  5      eU $ )NzM%s specifies columns explicitly, and does not support dynamic column lookups.r   r  s      rg   r  _ExplicitColumn.__get__  s)     *,456 6 ri   rd   r  r   ri   rg   r  r    s    Iri   r  c                        \ rS rSrS rS rSrg)Stari!  c                     Xl         g rd   rU  r  s     rg   r  Star.__init__"      ri   c                 h    UR                  [        U R                  5      5      R                  S5      $ )Nz.*)r\  rS   rU  rJ  rn  s     rg   rX  Star.__sql__$  s%    ww~dkk23;;DAAri   r  Nr   r   r   r   r  rX  r   r   ri   rg   r  r  !  s    Bri   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 rd   )r  r  r  _alias)r   r  r  s     rg   r  Source.__init__+  s    fd$&ri   c                     Xl         g rd   r  r   names     rg   r  Source.alias/  s    ri   c                 B    U(       d  [        S5      4n[        U 4U5      $ )Nr   )rW   rV   r   columnss     rg   selectSource.select3  s    3xkGtgw''ri   c                     [        U 5      $ rd   )r  r  s    rg   __star__Source.__star__8  s    Dzri   c                     [        XX#5      $ rd   Join)r   dest	join_typeons       rg   r[  Source.join<  s    D	..ri   c                 8    [        X[        R                  U5      $ rd   )r  rE   r<  r   r  r  s      rg   left_outer_joinSource.left_outer_join?  s    D44ri   c                     [        XX#US9$ N)	recursiver  materializedCTEr   r  r  r  r  s        rg   cte
Source.cteB      4 ,. 	.ri   c                 ^    U R                   (       a  U R                   4$ UR                  U    4$ rd   )r  r0  rn  s     rg   r:  Source.get_sort_keyF  s)    ;;KK>!!!$'))ri   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  r{  r  r0  rJ  r\  r6   rn  s     rg   apply_aliasSource.apply_aliasK  sW     99${{*.++!!$'KK##F3+<+<T+B$CD
ri   c                     U R                   (       a  U R                   UR                  U '   UR                  [        UR                  U    5      5      $ rd   )r  r0  r\  r6   rn  s     rg   apply_columnSource.apply_columnT  s<    ;;&*kkCd#wwvc//5677ri   r  rd   FNN)r   r   r   r   r  rf   r  ri  rT  r  r  r  r  rE   r;  r[  r  r  r:  r  r  r   r  r  s   @rg   r  r  (  so    A 
YY (
   $(::$ /5.*
8 8ri   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$ )_HashableSourceiZ  c                 N   > [         [        U ]
  " U0 UD6  U R                  5         g rd   )r  r  r  _update_hashr   r  r  r  s      rg   r  _HashableSource.__init__[  s#    ot-t>v>ri   c                 0    Xl         U R                  5         g rd   )r  r  r  s     rg   r  _HashableSource.alias_  s    ri   c                 .    U R                  5       U l        g rd   )	_get_hash_hashr  s    rg   r  _HashableSource._update_hashd  s    ^^%
ri   c                 Z    [        U R                  U R                  U R                  45      $ rd   )hashr  _pathr  r  s    rg   r  _HashableSource._get_hashg  s     T^^TZZ=>>ri   c                     U R                   $ rd   )r  r  s    rg   __hash___HashableSource.__hash__j  s    zzri   c                     [        U[        5      (       a  U R                  UR                  :H  $ [        U [        R
                  U5      $ rd   )re   r  r  r  rK   r   r   others     rg   __eq___HashableSource.__eq__m  5    e_--::,,$u--ri   c                     [        U[        5      (       a  U R                  UR                  :g  $ [        U [        R
                  U5      $ rd   )re   r  r  r  rK   r  r  s     rg   __ne___HashableSource.__ne__r  r  ri   c                    ^  U 4S jnU$ )Nc                    > [        U TU5      $ rd   r  r   r   ops     rg   r  !_HashableSource._e.<locals>.innerx  s    dB,,ri   r   )r"  r  s   ` rg   _e_HashableSource._ew  s    	-ri   )r  r  )r   r   r   r   r  ri  rT  r  r  r  r  r  r  r$  rK   r   __lt__r   __le__r   __gt__r   __ge__r   r  r  s   @rg   r  r  Z  st     
YY &?.
.
 YFZFYFZFri   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$ rd   )r  bind)r   r  r  resultmeths       rg   r   __bind_database__.<locals>.inner  s6    d,T,V,>>;;t~~..ri   r   )r.  r  s   ` rg   __bind_database__r0    s     
4[ 
 Lri   c                    ^ ^ UU 4S jnU$ )Nc                 *   > T(       a  Xp[        XTS9$ )N)r  r  )r   r  invertedr  s     rg   r  __join__.<locals>.method  s    %D955ri   r   )r  r3  r  s   `` rg   __join__r5    s    6 Mri   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r3  r   N)r   r   r   r   r5  rE   r;  __and__r<  r   r=  __sub__r?  __or__r@  __mul____rand____radd____rsub____ror____rmul__r   r   ri   rg   r7  r7    s    tzz"Gt'Gt''(Gdoo&Ftzz"G

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

T2Hri   r7  c                   ,    \ rS rSrS rS rS rS rSrg)_BoundTableContexti  c                     Xl         X l        g rd   )r[  r  )r   r[  r  s      rg   r  _BoundTableContext.__init__  s    
 ri   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rd   )rC  r[  r  r  s     rg   r  *_BoundTableContext.__call__.<locals>.inner  s.    #DJJ>4*6* ?>>s	   4
Ar   r  s   `` rg   r  _BoundTableContext.__call__  r  ri   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                   $ rd   )r[  r  _orig_databaser,  r  _modelr  s    rg   r  _BoundTableContext.__enter__  s^    "jj22

&::(JJ""4==1zzri   c                     U R                   R                  U R                  5        U R                   R                  b0  U R                   R                  R                  U R                  5        g g rd   )r[  r,  rK  rL  rN  s       rg   r  _BoundTableContext.__exit__  sK    

++,::(JJ""4#6#67 )ri   )rK  r  r[  N	r   r   r   r   r  r  r  r  r   r   ri   rg   rC  rC    s    !8ri   rC  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$ )rY   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  )r   _columns_primary_key_schemar  rL  r  r  rY   r  r  rf   setattrr%   r   primary_key)r   r  r  rY  schemar  rL  r  columncol_srcr  s             rg   r  Table.__init__  s    ''-f^D7
"eT#%#0 $&DF!fT&:; " "mmdG&w<D#Dri   c           
          [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S9$ )N)r  rY  rZ  r  rL  r  )rY   r   rU  rV  rW  r  rL  r  r  s    rg   r  Table.clone  sB    MMMM))<<++;;nn& 	&ri   c                     Xl         U $ rd   r  r   r  s     rg   r,  
Table.bind      !ri   c                     [        X5      $ rd   )rC  rb  s     rg   bind_ctxTable.bind_ctx  s    !$11ri   c                 p    [        U R                  U R                  U R                  U R                  45      $ rd   )r  r  r  r  rL  r  s    rg   r  Table._get_hash  s&    T^^TZZdkkJKKri   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 rd   )rU  r%   rV   )r   r  r[  s      rg   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  )rU  rf   itemsr   Insert)r   ro  r  r  srckeyrn   s          rg   ro  Table.insert  sM    !>RvF--$TVVC$lln
,1ws() -d7;;ri   c                 H    U R                   " SXS.UD6R                  S5      $ )Nrn  REPLACEr   ro  on_conflict)r   ro  r  r  s       rg   r{   Table.replace  s6     B%B:@BY'	)ri   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   )rp  rU  rf   r   Update)r   r   r  rs  rn   rr  s         rg   r   Table.update  sM    !>RvF$lln
"mmd,1ws() - d**ri   c                     [        U 5      $ rd   )Deleter  s    rg   deleteTable.delete  s    d|ri   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      $ rd   )
r  r}  r\  r6   r  r  r0  r{  r  r  rn  s     rg   rX  Table.__sql__  s    99$7764::.//;;&*kkCd#99$##CGGFDJJ,?$@AA $$S))ri   )	r   rU  r  rL  r  rV  rW  rf   rY  )NNNNNNrd   r$  )r   r   r   r   r  r  r,  rf  r  r0  r  ro  r{   r   r  rX  r   r  r  s   @rg   rY   rY     s    DH48$.	&2L ( (
 < < ) )
 + +  * *ri   rY   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 rS  )r  r  r  lhsr   r  _on)r   r  r   r  r  r  r  s         rg   r  Join.__init__  s)    dD""/"ri   c                     Xl         U $ rd   )r  )r   	predicates     rg   r  Join.on   s    ri   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 )r\  r  rJ  r  r   r  rn  s     rg   rX  Join.__sql__$  s\    	
#dhh-
'&4>>)
*
#dhh-88KK##DHH-
ri   )r  r  r  r   )r   r   r   r   rE   r;  r  r  rX  r   r  r  s   @rg   r  r    s"    +/::$d  ri   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$ )r`   i.  c                 @   > Xl         X l        [        [        U ]  US9  g rS  )r/  rU  r  r`   r  )r   valuesr  r  r  s       rg   r  ValuesList.__init__/  s    j$(u(5ri   c                 l    [        U R                  [        U R                  5      U R                  45      $ rd   )r  r  idr/  r  r  s    rg   r  ValuesList._get_hash4  s%    T^^R%5t{{CDDri   c                     Xl         g rd   )rU  )r   namess     rg   r  ValuesList.columns7  s    ri   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  r0  r  r{  r%  r  rJ  r\  CommaNodeListr/  EnclosedNodeListr6   rU  )r   ro  rowrf   entitiess        rg   rX  ValuesList.__sql__;  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)rU  r/  r$  )r   r   r   r   r  r  ri  rT  r  rX  r   r  r  s   @rg   r`   r`   .  s0    6
E 
YY  ri   r`   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  iQ  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 )Nr   rT  )r  _query
_recursive_materializedre   r  r6   rU  	_cte_listr  r  r  )r   r  rr  r  r  r  rf   r  s          rg   r  CTE.__init__R  sv    #) ') '1 %/q#$6$6vayA= '  )c4!!-	)s   ,A.c                 d   U(       d  [        S5      e[        U R                  S5      (       aC  U R                  R                  R                  " U6 R                  U 5      R                  U 5      nU$ [        U 4U5      R                  U 5      R                  U R                  R                  5      nU$ )NzFselect_from() must specify one or more columns from the CTE to select.model)
r  r  r  r  r  from_with_cterV   r,  r  r   r  rr  s      rg   select_fromCTE.select_from_  s     7 8 8 4;;(([[&&f%'eDkhtn   TGW-htnd4;;001  ri   c                 l    [        U R                  U R                  [        U R                  5      45      $ rd   )r  r  r  r  r  r  s    rg   r  CTE._get_hasho  s$    T^^T[["T[[/BCCri   c                     U R                   R                  5       n[        U R                  X!-   U R                  U R
                  5      $ rd   r  r  r  r  r  rU  r   r   r  s      rg   	union_allCTE.union_allr  3    !!#4;;T__dmmLLri   c                     U R                   R                  5       n[        U R                  X!-  U R                  U R
                  5      $ rd   r  r  s      rg   union	CTE.unionw  r  ri   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  r  r\  r6   r  rT  r0  rU  rJ  r  r  rz  r  rn  s     rg   rX  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  rU  r  r  r  r  )r   r   r   r   r  r  r  r  r   r  r;  rX  r   r  r  s   @rg   r  r  Q  s=    =A". DM GM F ri   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 rd   
_converter)r   rd  s     rg   rd  ColumnBase.converter  s    #ri   c                 *    U(       a  [        X5      $ U $ rd   )Aliasr   r  s     rg   r  ColumnBase.alias  s    %%ri   c                     U $ rd   r   r  s    rg   unaliasColumnBase.unalias  r  ri   c                     [        X5      $ rd   )BindTo)r   r  s     rg   bind_toColumnBase.bind_to  s    d!!ri   c                     [        X5      $ rd   )r!   )r   as_types     rg   castColumnBase.cast  s    D""ri   c                     [        XUS9$ N)	collationnulls)Ascr   r  r  s      rg   ascColumnBase.asc  s    4E::ri   c                     [        XUS9$ r  )Descr  s      rg   descColumnBase.desc  s    DU;;ri   c                     [        U 5      $ rd   )Negatedr  s    rg   
__invert__ColumnBase.__invert__  r  ri   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      $ rd   r   )r   r   invr"  s     rg   r  ColumnBase._e.<locals>.inner  s$    !#r400dB,,ri   r   )r"  r  r  s   `` rg   r$  ColumnBase._e  s    
	- ri   T)r  c                 `    Uc  [         R                  O[         R                  n[        XU5      $ rd   )rK   r  r   r  r!  s      rg   r  ColumnBase.__eq__  s"    kRUUruu$C((ri   c                 `    Uc  [         R                  O[         R                  n[        XU5      $ rd   )rK   r  r  r  r!  s      rg   r  ColumnBase.__ne__  s"    +RYY255$C((ri   c                 h    U(       a  [         R                  O[         R                  n[        XS 5      $ rd   )rK   r  r  r  )r   is_nullr"  s      rg   r  ColumnBase.is_null  s     RUU299$D))ri   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\%Frc  ESCAPE)findr{   NodeListr_   rW   )r   r   templates      rg   _escape_like_exprColumnBase._escape_like_expr  s    66#;!qvvc{a/166$<13D		$'//U;CCCOA hle4Hde,. / / |ri   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%%re   ri  r  rK   r  r  r  r   s     rg   containsColumnBase.contains  sX    c4  S"))'RYY<>C ((h7C$#..ri   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     rg   
startswithColumnBase.startswith  F    c4  S"))S1C((f5C$#..ri   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     rg   endswithColumnBase.endswith  r  ri   c           
      b    [        U [        R                  [        U[	        S5      U45      5      $ )Nr   )r  rK   r  r  rW   )r   lohis      rg   betweenColumnBase.between	  s%    $

Hb#e*b5I,JKKri   c                 8    [        U [        R                  U5      $ rd   StringExpressionrK   r  r   s     rg   concatColumnBase.concat  s    bii55ri   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.)re   slicestartstopr  r  r;  s     rg   r	  ColumnBase.__getitem__  sU    dE""zz!TYY%6  ". / /<<

DII66|ri   c                 .    [        [        S5      U 45      $ )NDISTINCTr  rW   r  s    rg   distinctColumnBase.distinct  s    Z$/00ri   c                 4    [        U [        SU-  5      45      $ )N
COLLATE %sr  r   r  s     rg   collateColumnBase.collate  s    s<)#;<=>>ri   c                     gr3  r   rn  s     rg   r:  ColumnBase.get_sort_key  s    ri   r  rd   r$  r  r  )Vr   r   r   r   r  ri  rT  rd  r  r  r  r  r  __pos__r  __neg__r  r$  rK   r   r9  r   r;  r   r   r   r:  r   r<  r   __div____truediv__r   __xor__r>  r?  rA  __rdiv____rtruediv__r=  r@  __rxor__r  r  r   r&  r   r'  r   r(  r   r)  r  
__lshift__r  
__rshift__r  __mod__r  __pow__r!  r"  r   bin_andr   bin_orin_r  not_inr	  r#  r
  iregexpr  r  r  r  r  r  r  r	  __iter__r  r  r:  r   r   ri   rg   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?ri   r  c                   ,    \ rS rSrS rS rS rS rSrg)r%   i   c                     Xl         X l        g rd   )rU  r  )r   rU  r  s      rg   r  Column.__init__!  s    	ri   c                     UR                   [        :X  a  U R                  4$ U R                  R	                  U5      U R                  4-   $ rd   )r  r}  r  rU  r:  rn  s     rg   r:  Column.get_sort_key%  s:    99$II<;;++C0DII<??ri   c                 D    [        U R                  U R                  45      $ rd   )r  rU  r  r  s    rg   r  Column.__hash__+  s    T[[$)),--ri   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  r}  r\  r6   r  rf  rU  rJ  rn  s     rg   rX  Column.__sql__.  sm    99$776$)),--!!#wwt{{+33C8<<VDII=NO $##s   	AB
B-)r  rU  N)	r   r   r   r   r  r:  r  rX  r   r   ri   rg   r%   r%      s    @.Pri   r%   c                   &    \ rS rSrS rS rS rSrg)WrappedNodei6  c                 X    Xl         [        USS5      U l        [        USS 5      U l        g )Nr  Tr  )rt  r   r  r  rs  s     rg   r  WrappedNode.__init__7  s'    	tY5!$d;ri   c                 6    U R                   R                  5       $ rd   )rt  r  r  s    rg   r  WrappedNode.is_alias<  s    yy!!##ri   c                 6    U R                   R                  5       $ rd   )rt  r  r  s    rg   r  WrappedNode.unwrap?  s    yy!!ri   )r  r  rt  N)r   r   r   r   r  r  r  r   r   ri   rg   r8  r8  6  s    <
$"ri   r8  c                   $    \ rS rSrSrS rS rSrg)EntityFactoryiC  r  c                     Xl         g rd   r  rs  s     rg   r  EntityFactory.__init__E  r  ri   c                 .    [        U R                  U5      $ rd   )r6   rt  r   s     rg   r   EntityFactory.__getattr__G  r  ri   N)r   r   r   r   r  r  r   r   r   ri   rg   r@  r@  C  s    I'ri   r@  c                   "    \ rS rSrSrSS jrSrg)_DynamicEntityiK  r   Nc                 6    Ub  [        UR                  5      $ U $ rd   )r@  r  r  s      rg   r  _DynamicEntity.__get__M  s     11ri   rd   r  r   ri   rg   rF  rF  K  s    Iri   rF  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  iS  c                 8   > [         [        U ]  U5        X l        g rd   )r  r  r  r  )r   rt  r  r  s      rg   r  Alias.__init__V  s    eT#D)ri   c                 ,    [        U R                  5      $ rd   )r  r  r  s    rg   r  Alias.__hash__Z      DKK  ri   c                     U R                   $ rd   r  r  s    rg   r  
Alias.name]  s    {{ri   c                     Xl         g rd   r  r   rn   s     rg   r  rP  `      ri   c                 L    Uc  U R                   $ [        U R                   U5      $ rd   )rt  r  r  s     rg   r  Alias.aliasd  s"    =99E**ri   c                     U R                   $ rd   r  r  s    rg   r  Alias.unaliasj      yyri   c                     gry  r   r  s    rg   r  Alias.is_aliasm  s    ri   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  r{  r\  rt  rJ  r6   r  rn  s     rg   rX  Alias.__sql__p  sY    99$S^WV_S,-/
 776$++.//ri   r  rd   )r   r   r   r   rF  rf   r  r  r  r  setterr  r  r  rX  r   r  r  s   @rg   r  r  S  sX    A!  	[[ +0 0ri   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  iz  c                 8   > [         [        U ]  U5        X l        g rd   )r  r  r  r  )r   rt  r  r  s      rg   r  BindTo.__init__{  s    fd$T*	ri   c                 8    UR                  U R                  5      $ rd   r\  rt  rn  s     rg   rX  BindTo.__sql__  s    wwtyy!!ri   )r  r   r   r   r   r  rX  r   r  r  s   @rg   r  r  z  s    " "ri   r  c                        \ rS rSrS rS rSrg)r  i  c                     U R                   $ rd   r  r  s    rg   r  Negated.__invert__  rX  ri   c                 V    UR                  S5      R                  U R                  5      $ )NzNOT )rJ  r\  rt  rn  s     rg   rX  Negated.__sql__  s     {{6"&&tyy11ri   r   N)r   r   r   r   r  rX  r   r   ri   rg   r  r    s    2ri   r  c                   ,    \ rS rSrS rS rS rS rSrg)BitwiseMixini  c                 $    U R                  U5      $ rd   )r'  r  s     rg   r9  BitwiseMixin.__and__  s    ||E""ri   c                 $    U R                  U5      $ rd   )r(  r  s     rg   r;  BitwiseMixin.__or__  s    {{5!!ri   c                 @    U R                  UR                  5       5      $ rd   )r'  bin_negatedr  s     rg   r:  BitwiseMixin.__sub__  s    ||E--/00ri   c                     [        U 5      $ rd   )BitwiseNegatedr  s    rg   r  BitwiseMixin.__invert__  s    d##ri   r   N)	r   r   r   r   r9  r;  r:  r  r   r   ri   rg   rk  rk    s    #"1$ri   rk  c                   8    \ rS rSr\R
                  rS rS rSr	g)rt  i  c                     U R                   $ rd   r  r  s    rg   r  BitwiseNegated.__invert__  rX  ri   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      $ rd   )r1  
operationsr  r"  rJ  r\  rt  )r   ro  op_sqls      rg   rX  BitwiseNegated.__sql__  sZ    99YY))--dggtww?FWWF{{6"&&tyy11ri   r   N)
r   r   r   r   rK   r  r"  r  rX  r   r   ri   rg   rt  rt    s    			B2ri   rt  c                   $    \ rS rSrSS jrS rSrg)r_   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 S U l        g rd   )	rn   rd  re   multi_typesmultir  ri  r  r_   )r   rn   rd  unpackr<  s        rg   r  Value.__init__  s    
"C
4::{ C
::DK

dD))KK&&t,KK&&uT>>'BC	 # DKri   c                     U R                   (       a$  UR                  [        U R                  5      5      $ UR	                  U R                  U R
                  5      $ rd   )r  r\  r  r  rn   rd  rn  s     rg   rX  Value.__sql__  s;    ::77+DKK899yyT^^44ri   )rd  r  rn   r  ry  r  r   ri   rg   r_   r_     s    5ri   r_   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)rg  rb  rn  s     rg   rX  ValueLiterals.__sql__  s&    %77499% &%%s   ,
:r   Nr   r   r   r   rX  r   r   ri   rg   r  r        &ri   r  c                     [        XSS9$ NFr  )r_   )rn   rd  s     rg   r   r     s    %00ri   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  )r   rt  r  r  s      rg   r  Cast.__init__  s    dD"4(
ri   c                     UR                  S5      R                  U R                  5      R                  SU R                  -  5      $ )NzCAST(z AS %s))rJ  r\  rt  r  rn  s     rg   rX  Cast.__sql__  s4    !TYYTZZ/0	2ri   )r  r  rd  r  s   @rg   r!   r!     s    
2 2ri   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)rp  lastz<Ordering nulls= parameter must be "first" or "last", got: %s)r  r  r  	directionr  r  ro  r  )r   rt  r  r  r  r  s        rg   r  Ordering.__init__  sS    h&t,""
U[[]*;; /167 8 8 <5ri   c                 D    [        U R                  U R                  U5      $ rd   )r  rt  r  r  s     rg   r  Ordering.collate  s    		4>>9==ri   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   rp  )r   r   z&unsupported value for nulls= ordering.)ro  r  r    rt  r  )r   r  ifnullnotnulls       rg   _null_ordering_caseOrdering._null_ordering_case  s`    ;;=F""OFG[[]g%"OFGEFFDDII--/8:GDDri   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  r1  nulls_orderingr\  r  rJ  rt  r  r  rn  s     rg   rX  Ordering.__sql__  s    ::cii66GGD,,TZZ89AA$G		""54>>#9:>>KK67::#))22KKdjj01
ri   )r  r  r  r$  rd   )
r   r   r   r   r  r  r  rX  r   r  r  s   @rg   r  r    s    8>E	 	ri   r  c                     [        U SX5      $ )NASCr  rt  r  r  s      rg   r  r    s    D%22ri   c                     [        U SX5      $ )NDESCr  r  s      rg   r  r    s    D&)33ri   c                   *    \ rS rSrSS jrS rS rSrg)r  i  c                 4    Xl         X l        X0l        X@l        g rd   )r  r"  r   flat)r   r  r"  r   r  s        rg   r  Expression.__init__   s    	ri   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 R                   nU(       aP  U R#                  Xq5      (       a:  UR%                  U R                  [        R                  :X  a  SOS5      sS S S 5        $ 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_exprrd  
is_fk_exprz0 = 1z1 = 1r  r  r   )r  r  re   r8  r  r8   r  db_valuer<   r1  rz  r  r"  rK   r  r  r   _is_rhs_emptyrJ  r  r  rW   r\  )r   ro  rV  rt  raw_noder{  op_inr   s           rg   rX  Expression.__sql__  s   (,		MdC	 (("h,,??$D dE""x'7'7%)]]Ik"&0&GIl#%)Ik"99YY))--dggtww?FWWF9 GGruu$<299(<E((C%%c//;;$''RUU2BwP  {255 0DGGryy4H&kS]WVf_-SX s   ?BH3$BH33
Ic                    [        U[        5      (       a  [        U5      (       + $ [        U[        5      (       a$  UR                  =(       a    UR
                  (       + $ UR                  5       R                  U5      S   S:H  $ )Nr   ())re   r  boolr_   r  r  r6  ru  )r   r   ro  s      rg   r  Expression._is_rhs_empty,  s^    c;''Cy= U##II0cjj.1::<%%c*1-55ri   )r  r  r"  r   Nr  )r   r   r   r   r  rX  r  r   r   ri   rg   r  r    s    $L6ri   r  c                        \ rS rSrS rS rSrg)r  i5  c                 $    U R                  U5      $ rd   )r  r   s     rg   r   StringExpression.__add__6  s    {{3ri   c                 8    [        U[        R                  U 5      $ rd   r  )r   r  s     rg   r>  StringExpression.__radd__8  s    RYY55ri   r   N)r   r   r   r   r   r>  r   r   ri   rg   r  r  5  s     6ri   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	r6   i<  c                 N    U Vs/ s H  o"(       d  M  UPM     snU l         g s  snf rd   r  )r   r\  ps      rg   r  Entity.__init__=  s    !%+Aa+
+s   
""c                 .    [        U R                  U/-   6 $ rd   )r6   r  r   s     rg   r   Entity.__getattr__@  s    tzzTF*++ri   c                 ,    [        U R                  5      $ rd   )re  r  rn  s     rg   r:  Entity.get_sort_keyC  s    TZZ  ri   c                 j    [        U R                  R                  [        U R                  5      45      $ rd   )r  r  r   re  r  r  s    rg   r  Entity.__hash__F  s%    T^^,,eDJJ.?@AAri   c                     UR                   R                  =(       d    SnUS   nU R                   Vs/ s H  oDR                  X25      PM     nnUR	                  [        XR5      5      $ s  snf )N""r   )r1  r_  r  r{   rJ  )r   ro  r]  qr  escapeds         rg   rX  Entity.__sql__I  sV    iioo-N6:jjAj99Q,jA{{5677 Bs   A)r  N)
r   r   r   r   r  r   r:  r  rX  r   r   ri   rg   r6   r6   <  s    ,,!B8ri   r6   c                   $    \ rS rSrSS jrS rSrg)rW   iP  Nc                     Xl         X l        g rd   r\  r  r   r\  r  s      rg   r  SQL.__init__Q  s    ri   c                     UR                  U R                  5        U R                  (       a$  U R                   H  nUR                  USSS9  M     U$ NF)rj  )rJ  r\  r  rn   r   ro  ri  s      rg   rX  SQL.__sql__U  s>    DHH;;		%%	8 %
ri   )r  r\  rd   r  r   ri   rg   rW   rW   P  s    ri   rW   c                 p    [        SU -  5      nU(       d  U$ [        [        S5      [        U5      U45      $ )Nz
CHECK (%s)
CONSTRAINT)rW   r  r6   )
constraintr  checks      rg   r#   r#   ]  s4    z)*ES&te<==ri   c                     [        SU -  5      $ )Nz
DEFAULT %srW   rf  s    rg   r/   r/   d  s    |e#$$ri   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)Functionih  )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_valuero  no_coerce_functionsr  )r   r  r  r  python_values        rg   r  Function.__init__k  sB    	")DJJLD$<$<< DL!Lri   c                    ^ U4S jnU$ )Nc                     > [        TU 40 UD6$ rd   )r  )r  r  r   s     rg   	decorator'Function.__getattr__.<locals>.decoratorw  s    D$1&11ri   r   )r   r   r  s    ` rg   r   Function.__getattr__v  s    	2ri   c                     Xl         g rd   )r  )r   wheres     rg   filterFunction.filter{      ri   c                     Xl         g rd   r  )r   orderings     rg   order_byFunction.order_by      !ri   c                     Xl         g rd   )r  )r   funcs     rg   r  Function.python_value  s    !ri   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)re   ra   WindowAliasr  rW   )	r   r  r  r  r  r  windowr  rt  s	            rg   overFunction.over  sV    lF++!Fv&D| %:")49D s6{D122ri   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  rs  ORDER BYT)in_functionfunction_arg_countFz FILTER (WHERE rM  )rJ  r  r   r  r  rd  r  rW   r  r\  r  re   ri  r_   r  )r   ro  r  args       rg   rX  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  )TNrd   NNNNNNN)r   r   r   r   setr  r  r   ri  rT  r  r  r  r
  rX  r   r   ri   rg   r  r  h  st    JK	"
 
YY  
YY" " 
YY" " FJ373ri   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$ )ra   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  ra   r  re   rW   rg  r  r  r  r  r  r  r  r  _extends_exclude)r   r  r  r  r  r  extendsr  r  r  r  s             rg   r  Window.__init__  s     	fd$&Zs%;%;JE?:c3#7#7c(C(6$X.
::$(("6GHHls$ri   c                 &    U=(       d    SU l         U $ Nr  r  r  s     rg   r  Window.alias  s    lsri   c                 .    [         R                  U l        g rd   )ra   r  r  r  s    rg   as_rangeWindow.as_range  s     ,,ri   c                 .    [         R                  U l        g rd   )ra   r  r  r  s    rg   as_rowsWindow.as_rows  s     ++ri   c                 .    [         R                  U l        g rd   )ra   r  r  r  s    rg   	as_groupsWindow.as_groups  s     --ri   c                     Xl         g rd   )r  r   r	  s     rg   r  Window.extends  s    ri   c                 P    [        U[        5      (       a  [        U5      nXl        g rd   )re   r  rW   r  )r   frame_exclusions     rg   r  Window.exclude  s    os++!/2O'ri   c                 :    U c  [        S5      $ [        SU -  5      $ )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGr  rf  s    rg   	followingWindow.following  #    =,-->E)**ri   c                 :    U c  [        S5      $ [        SU -  5      $ )NzUNBOUNDED PRECEDINGz%d PRECEDINGr  rf  s    rg   	precedingWindow.preceding  r5  ri   c                 V   UR                   [        :w  aF  U R                  (       d5  UR                  [	        U R
                  5      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  r{  r  r\  r6   r  rJ  r  re   ra   r  r  r  rm  rW   r  r  r  r  r  r  r  )r   ro  partsextframes        rg   rX  Window.__sql__  s   99$T\\GGF4;;'(KKT"E}}(mmc6** ,CS)) +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  )	NNNNNNNNFrd   )r   r   r   r   rW   CURRENT_ROWr  r  	NO_OTHERSr  r  r  r  r  ri  rT  r$  r'  r*  r  r  r  r3  r7  rX  r   r  r  s   @rg   ra   ra     s    m$KLEv;DK I FEDIMDH * 
YY' ' 
YY& & 
YY( ( 
YY  
YY( (
 + +
 + +
$ $ri   ra   c                   &    \ rS rSrS rS rS rSrg)r  i  c                     Xl         g rd   r	  r-  s     rg   r  WindowAlias.__init__   r  ri   c                 &    XR                   l        U $ rd   )r	  r  )r   window_aliass     rg   r  WindowAlias.alias#  s    )ri   c                 p    UR                  [        U R                  R                  =(       d    S5      5      $ r!  )r\  r6   r	  r  rn  s     rg   rX  WindowAlias.__sql__'  s%    wwvdkk007C899ri   rC  N)r   r   r   r   r  r  rX  r   r   ri   rg   r  r    s    :ri   r  c                   $    \ rS rSrSS jrS rSrg)_InFunctioni+  c                     Xl         X l        g rd   )rt  r  )r   rt  r  s      rg   r  _InFunction.__init__,  s    	&ri   c                     U" U R                   S9   UR                  U R                  5      sS S S 5        $ ! , (       d  f       g = f)Nr  )r  r\  rt  rn  s     rg   rX  _InFunction.__sql__0  s,    T--.77499% /..	   6
A)r  rt  Nr  r  r   ri   rg   rK  rK  +  s    '&ri   rK  c                   $    \ rS rSrSS jrS rSrg)r    i5  Nc                 (    Xl         X l        X0l        g rd   )r  expression_tuplesdefault)r   r  rT  rU  s       rg   r  Case.__init__6  s    "!2ri   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ENDFrO  )	rW   r  r  rT  rm  rK  rU  r\  r  )r   ro  clausesexprrn   s        rg   rX  Case.__sql__;  s    v;->>%NN4>>*11KDNNCKKU);= > 2 <<#NNCKT\\)BCDs5z"U#778G,- $##s   C::
D)rU  rT  r  rd   r  r   ri   rg   r    r    5  s    
.ri   r    c                   $    \ rS rSrSS jrS rSrg)	ForUpdateiI  Nc                 r   USL a  SOUnUR                  5       R                  S5      (       a  US S nSnO+UR                  5       R                  S5      (       a  US S nSnU(       a  U(       a  [        S5      eXl        Ub#  [	        U[
        [        [        45      (       d  U4nX l        X0l	        X@l
        g )NTz
FOR UPDATEnowaitizskip lockedizFOnly one of nowait and skip_locked may be used in a FOR UPDATE clause.)ro  r  r  _exprre   rd  r  re  _of_nowait_skip_locked)r   r^  ofrc  skip_lockeds        rg   r  ForUpdate.__init__J  s    #t||::<  **9DFZZ\""=11:DKk 7 8 8 
>*R$U1C"D"DB'ri   c                 H   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$ U R                  (       a  UR                  S5        U$ )Nz OF z NOWAITz SKIP LOCKED)rJ  rd  re  r\  r  rf  rg  rn  s     rg   rX  ForUpdate.__sql__^  sr    DJJ88KK##M$(($;<<<KK	" 
 KK'
ri   )rd  rf  re  rg  NNNr  r   ri   rg   ra  ra  I  s    ((ri   ra  c                   $    \ rS rSrSS jrS rSrg)r  ii  c                 (    Xl         X l        X0l        g rd   )nodesglueparens)r   rp  rq  rr  s       rg   r  NodeList.__init__j  s    
	ri   c                    [        U R                  5      nUS:X  a$  U R                  (       a  UR                  S5      $ U$ U R                  (       ao  US:X  ai  [	        U R                  S   [
        5      (       aG  U R                  S   R                  (       d)  U R                  S   R                  5       4nSUS   l        OU R                  nU" U R                  S9   [        US-
  5       H1  nUR                  X4   5        UR                  U R                  5        M3     UR                  X2S-
     5        S S S 5        U$ ! , (       d  f       U$ = f)Nr   r  r   Tr  )r   rp  rr  rJ  re   r  r  r  r  r\  rq  )r   ro  n_nodesrp  is        rg   rX  NodeList.__sql__o  s    djj/a<(,3;;t$<<[[W\djjmZ00zz!}!!ZZ]((*,E E!HMJJET[[)7Q;'!DII& ( GGEA+&'	 *
 
 *)
 
s   AE  
E)rq  rp  rr  N)r   Fr  r   ri   rg   r  r  i  s    
ri   r  c                     [        U S5      $ Nr  r  rp  s    rg   r  r    s    E4  ri   c                     [        U SS5      $ )Nr  Trz  r{  s    rg   r  r    s    E4&&ri   c                   (    \ rS rSrSrS rS r\rSrg)
_Namespacei  _namec                     Xl         g rd   r  r  s     rg   r  _Namespace.__init__  s    
ri   c                     [        X5      $ rd   )NamespaceAttributer   s     rg   r   _Namespace.__getattr__  s    !$--ri   Nr  r   ri   rg   r~  r~    s    I.Kri   r~  c                        \ rS rSrS rS rSrg)r  i  c                     Xl         X l        g rd   )
_namespace
_attribute)r   	namespace	attributes      rg   r  NamespaceAttribute.__init__  s    ##ri   c                     UR                  U R                  R                  S-   5      R                  [	        U R
                  5      5      $ r5  )rJ  r  r  r\  r6   r  rn  s     rg   rX  NamespaceAttribute.__sql__  s6    ..45VDOO,-	/ri   )r  r  Nr  r   ri   rg   r  r    s    $/ri   r  r7   c                   R   ^  \ rS rSrU 4S jr\R                  S 5       rS rSr	U =r
$ )r5   i  c                 D   > [         [        U ]  5         Xl        SU l        g r   )r  r5   r  rr  _negatedr   rr  r  s     rg   r  DQ.__init__  s    b$ "
ri   c                 0    U R                   (       + U l         g rd   )r  r  s    rg   r  DQ.__invert__  s     MM)ri   c                 R    [        S0 U R                  D6nU R                  Ul        U$ r3  )r5   rr  r  rs  s     rg   r  DQ.clone  s#    DJJri   )r  rr  )r   r   r   r   r  ri  rT  r  r  r   r  r  s   @rg   r5   r5     s*    
 
YY* * ri   r5   c                      [        U 5      $ rd   )r  )as    rg   rh   rh     s
    #A&ri   c                       \ rS rSrS rSrg)rS   i  c                     UR                  5          UR                  U R                  5      sS S S 5        $ ! , (       d  f       g = frd   )rf  r\  rt  rn  s     rg   rX  QualifiedNames.__sql__  s*    77499%  rQ  r   Nr  r   ri   rg   rS   rS     r  ri   rS   c                    [        U [        5      (       aN  U R                  [        U R                  5      U R
                  [        U R                  5      U R                  5      $ [        U [        5      (       a  [        U 5      $ U $ rd   )
re   r  r  qualify_namesr  r"  r   r  r  rS   r  s    rg   r  r    sd     $
##~~mDHH5tww+DHH5tyyB 	B	D*	%	%d##Kri   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)r   actionr   preserver  conflict_targetconflict_whereconflict_constraints           rg   r  OnConflict.__init__  sY     %h/&+>+J G H H ,_ =-$7!ri   c                 8    UR                   R                  X5      $ rd   )r1  conflict_statementr   ro  rr  s      rg   get_conflict_statement!OnConflict.get_conflict_statement  s    yy++D88ri   c                 8    UR                   R                  X5      $ rd   )r1  conflict_updater  s      rg   get_conflict_updateOnConflict.get_conflict_update  s    yy((55ri   c                     Xl         g rd   )r  r  s     rg   r  OnConflict.preserve  s     ri   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.)re   dictr  r   r  )r   _datar  s      rg   r   OnConflict.update  sB    VJud$;$; 9 : :LL ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   r  r
   operatorand_r   expressionss     rg   r  OnConflict.where  .    ;;";;.;6KX]]K8ri   c                     S U l         Xl        g rd   r  r  )r   constraintss     rg   r  OnConflict.conflict_target  s    $(! +ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   )r  r
   r  r  r  s     rg   r  OnConflict.conflict_where  s4    +//1K?K%hmm[Ari   c                     Xl         S U l        g rd   r  )r   r  s     rg   r  OnConflict.conflict_constraint  s    $.! $ri   )r  r  r  r  r  r  r  r  rd   )r   r   r   r   r  r  r  ri  rT  r  r   r  r  r  r  r   r   ri   rg   r  r    s    FJ6:%)896 
YY! ! 
YY  
YY9 9
 
YY, , 
YYB B
 
YY% %ri   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  rB   r   )r   r  r  r  r  s       rg   r   database_required.<locals>.inner   sL    %-%54>>8  "139??"C D Dd6t6v66ri   rd   r   r  s   ` rg   database_requiredr    s     
6]7 7 Lri   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 r3  )r  _cursor_wrapper	_row_type_constructorr  r  r  )r   r  r  r  s      rg   r  BaseQuery.__init__  s1    "# i'1&1ri   c                     Xl         U $ rd   ra  rb  s     rg   r,  BaseQuery.bind  rd  ri   c                 :   > [         [        U ]  5       nS Ul        U$ rd   )r  r  r  r  r  s     rg   r  BaseQuery.clone  s    i,. $ri   c                 P    U(       a  [         R                  U l        U $ S U l        U $ rd   )ROWrF  r  )r   as_dicts     rg   dictsBaseQuery.dicts  s"    %, 37ri   c                 P    U(       a  [         R                  U l        U $ S U l        U $ rd   )r  rE  r  )r   as_tuples     rg   tuplesBaseQuery.tuples#  s"    &. 59ri   c                 P    U(       a  [         R                  U l        U $ S U l        U $ rd   )r  rG  r  )r   as_namedtuples     rg   namedtuplesBaseQuery.namedtuples(  s$    ,9 @Dri   c                 N    U(       a  [         R                  OS U l        Xl        U $ rd   )r  rH  r  r  r   constructors     rg   objectsBaseQuery.objects-  s    ,7T'ri   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  r   cursorrow_types      rg   _get_cursor_wrapperBaseQuery._get_cursor_wrapper3  s    >>:T%:%:sxx$V,," (((*622(&v/@/@AA;hFGGri   c                     [         erd   r  rn  s     rg   rX  BaseQuery.__sql__A  r  ri   c                     U R                   (       a  U R                   R                  5       nO
[        5       nUR                  U 5      $ rd   )r  r  r'   ru  )r   contexts     rg   r\  BaseQuery.sqlD  s1    >>nn446GiG}}T""ri   c                 $    U R                  U5      $ rd   )_executerb  s     rg   executeBaseQuery.executeK  s    }}X&&ri   c                     [         erd   r  rb  s     rg   r  BaseQuery._executeO  r  ri   c                 R    [        U R                  U5      R                  5       5      $ rd   )r  r  iteratorrb  s     rg   r  BaseQuery.iteratorR  s    DLL*33566ri   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    rg   _ensure_executionBaseQuery._ensure_executionU  s/    '>> !?@@LLN (ri   c                 L    U R                  5         [        U R                  5      $ rd   )r
  r  r  r  s    rg   r,  BaseQuery.__iter__[  s     D(())ri   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
  re   r  r  r  
fill_cache	row_cache)r   rn   indexs      rg   r	  BaseQuery.__getitem___  sk     eU##JJEE!&!EAIE''.##--e44ri   c                 L    U R                  5         [        U R                  5      $ rd   )r
  r   r  r  s    rg   __len__BaseQuery.__len__j  s     4''((ri   c                     [        U 5      $ rd   )r  r  s    rg   __str__BaseQuery.__str__n  s    t$$ri   )r  r  r  r  rd   r  )r   r   r   r   r  rF  r  r  r,  r  ri  rT  r  r  r  r  r  rX  r\  r  r  r  r  r
  r,  r	  r  r  r   r  r  s   @rg   r  r    s    xx2
 
YY  
YY  
YY  
YY 
H"# ' '"7*	5)% %ri   r  c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )RawQueryir  c                 F   > [         [        U ]
  " S0 UD6  Xl        X l        g r3  )r  r  r  r.  _params)r   r\  r  r  r  s       rg   r  RawQuery.__init__s  s    h&00	ri   c                     UR                  U R                  5        U R                  (       a#  U R                   H  nUR                  USS9  M     U$ r  )rJ  r.  r  rn   r  s      rg   rX  RawQuery.__sql__x  s<    DII<<		%5	1 &
ri   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ rd   r  r  r  r   r  r  s      rg   r  RawQuery._execute  =    '%%d+F#'#;#;F#CD ###ri   )r  r  r.  r$  )	r   r   r   r   r  rX  r  r   r  r  s   @rg   r  r  r  s    
$ $ri   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$ )Queryi  c                 l   > [         [        U ]
  " S0 UD6  Xl        X l        X0l        X@l        S U l        g r3  )r  r'  r  r  r  _limit_offsetr  )r   r  r  limitoffsetr  r  s         rg   r  Query.__init__  s0    eT#-f-!ri   c                     Xl         g rd   )r  )r   cte_lists     rg   r  Query.with_cte  r  ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   r  r  s     rg   r  Query.where  r  ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   )r  r
   r  or_r  s     rg   orwhereQuery.orwhere  s.    ;;";;.;6KX\\;7ri   c                     Xl         g rd   r  r   r  s     rg   r  Query.order_by  s    ri   c                 P    U R                   =(       d    SU-   =(       d    S U l         g r3  r  r8  s     rg   order_by_extendQuery.order_by_extend  s    >>/R69Bdri   c                     Xl         g rd   )r)  rR  s     rg   r+  Query.limit  rS  ri   c                     Xl         g rd   )r*  rR  s     rg   r,  Query.offset  r  ri   c                 <    US:  a  US-
  OSnX l         X-  U l        g r  )r)  r*  )r   pagepaginate_bys      rg   paginateQuery.paginate  s"    !8tax!)ri   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  rJ  r\  r  r)  r*  r1  	limit_max)r   ro  r+  s      rg   _apply_orderingQuery._apply_ordering  s    >>gl#c-/0;;"t||'?'*yy':':+/;;+>CII''DKKEKK	"&&u-<<#KK
#''5
ri   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rd   )r  )r|  r  s     rg   r~   Query.__sql__.<locals>.<genexpr>  s     EnsNNnr  FrD  zWITH RECURSIVE zWITH r   )r  anyr  rJ  r\  r  )r   ro  r  s      rg   rX  Query.__sql__  s}    >> EdnnEEI .'y+gF#mDNN34'#,	 /
 
s
 /.
 
s   AB
B$)r  r)  r*  r  r  )NNNNrd   )   )r   r   r   r   r  ri  rT  r  r  r5  r  r;  r+  r,  rD  rH  rX  r   r  r  s   @rg   r'  r'    s     
YY" " 
YY9 9
 
YY8 8
 
YY    
YYC C 
YY  
YY  
YY* *
 ri   r'  c                 *   ^ ^ [         UU 4S j5       nU$ )Nc                 0   > T(       a  Xp[        U TU5      $ rd   )CompoundSelectQuery)r   r  r3  	operations     rg   r  #__compound_select__.<locals>.method  s    %"4E::ri   )r0  )rT  r3  r  s   `` rg   __compound_select__rV    s    ; ; Mri   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EXCEPTTr8  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  rV   r,  r  r   r  r  r  s      rg   r  SelectQuery.select_from  sV    NOO)$t~~& 	4$'3MM$**-Eri   r   N)r   r   r   r   rV  r  r   r  r;  	intersectr9  except_r:  r>  r@  r=  r?  r  r   r   ri   rg   rX  rX    ss    -k::I(11EF-k::I+H55Gg";>H!'D9G";>H"8d;H	ri   rX  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      $ rd   )r  r  r  r  r  s    rg   r  SelectBase._get_hash  s#    T^^T[[%<BtH=>>ri   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ rd   r"  r#  s      rg   r  SelectBase._execute  r%  ri   c                 T    U R                  U5      S U nU(       a  US:X  a  US   $ U$ g Nr   r   )r  )r   r  r  rowss       rg   peekSelectBase.peek  s4    ||H%bq)1f47.$. ri   c                 Z    U R                   U:w  a  X l         S U l        U R                  XS9$ )N)r  )r)  r  rj  )r   r  r  s      rg   rp  SelectBase.first	  s,    ;;!K#'D yyy''ri   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  rj  r  )r   r  r  r  r  s        rg   scalarSelectBase.scalar
	  sE    ::<$$X..kkm  *Xs1v636ri   c              #   f   #    U R                  5       R                  U5       H
  nUS   v   M     g 7fr  )r  r  )r   r  r  s      rg   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  rW   r   rV   r;   COUNTro  )r   r  clear_limitr  s       rg   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      $ )Nrv  r   )r  rW   r)  r*  r  ro  )r   r  r  s      rg   existsSelectBase.exists$	  s3    SX&ELLN##ri   c                 Z    S U l          U R                  U5      S   $ ! [         a     g f = fr  )r  r  
IndexErrorrb  s     rg   r  SelectBase.get+	  s5    #	<<)!,, 		s    
**)r  r)  N)r   FFr  )r   r   r   r   r  r  r  rj  rp  ro  rr  r  r  r  r   r   ri   rg   rb  rb    s    ?$ / /
 ( ( 7 7   F F $ $  ri   rb  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$ )	rS  i7	  c                 N   > [         [        U ]  5         Xl        X l        X0l        g rd   )r  rS  r  r  r"  r   )r   r  r"  r   r  s       rg   r  CompoundSelectQuery.__init__8	  s     !413ri   c                 .    U R                   R                  $ rd   )r  
_returningr  s    rg   r  CompoundSelectQuery._returning>	  s    xx"""ri   c                     [        U R                  S5      4[        S5      45      R                  U5      n[	        UR                  5       5      $ )Nr   rv  )rV   r+  rW   r,  r  ro  )r   r  rr  s      rg   r  CompoundSelectQuery.existsB	  s;    

1'#c(5::8DELLN##ri   c                 j    U R                   R                  5       U R                  R                  5       4$ rd   )r  get_query_keyr   r  s    rg   _get_query_key"CompoundSelectQuery._get_query_keyG	  s'    &&($((*@*@*BCCri   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)	r1  compound_select_parenthesesCSQ_PARENTHESES_NEVERCSQ_PARENTHESES_ALWAYSCSQ_PARENTHESES_UNNESTEDr  r  re   rS  )r   ro  subqcsq_settings       rg   _wrap_parens CompoundSelectQuery._wrap_parensJ	  sj    ii;;k-BB2244yy  CII$9$9 
 "$(;<<< 5ri   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  rD  r  )r  r  r  r  rS  rX  rD  r{  r  r  rz  r\  rJ  r"  rT  r   r~  rH  r  )r   ro  outer_parens
lhs_parens
rhs_parensr  s        rg   rX  CompoundSelectQuery.__sql__\	  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   )r   r   r   r   r  r  r  r  r  r  r  rX  r   r  r  s   @rg   rS  rS  7	  sE     # # $ $D=$% %ri   rS  c                   2  ^  \ 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$ )rV   iz	  Nc	                 T  > [         [        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        S =U l        U l        U(       a"  [        U[        5      (       a  XPl        OXPl        S U l        g r3  )r  rV   r  re   re  rd  
_from_listr  rx  rw  ry  _for_update_lateralrz  r{  r  r  )r   	from_listr  group_byhavingr  windows
for_updatelateralr  r  s             rg   r  Select.__init__{	  s     	fd$.v..8E.J.J4	? )1.0 	!!%155.(D))(0%!)#ri   c                    > [         [        U ]  5       nUR                  (       a  [	        UR                  5      Ul        U$ rd   )r  rV   r  r  rd  r   r  r  s     rg   r  Select.clone	  s3    fd)+#E$4$45Eri   c                     Xl         g rd   r  )r   r  r  s      rg   r  Select.columns	  s    !ri   c                 >    [        U R                  5      U-   U l        g rd   )re  r  r  s     rg   select_extendSelect.select_extend	  s    07:ri   c                     U R                   $ rd   r  r  s    rg   selected_columnsSelect.selected_columns	  s    ri   c                     Xl         g rd   r  rR  s     rg   r  r  	  s    ri   c                 $    [        U5      U l        g rd   )rd  r  r   sourcess     rg   r  Select.from_	  s    w-ri   c                    U R                   (       d  [        S5      eU R                   R                  5       nU[        R                  :X  d  U[        R
                  :X  a  SnU R                   R                  [        XAX#5      5        g )NNo sources to join on.T)r  r  r  rE   r:  rB  r  r  )r   r  r  r  r<  s        rg   r[  Select.join	  s^    566""$$	T5F5F(FBtD	>?ri   c                 D    U R                  U[        R                  U5      $ rd   r[  rE   r<  r  s      rg   r  Select.left_outer_join	  s    yyt33ri   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.)re   rY   rU  r  rm  r   r  rx  r   r  groupingr[  col_names        rg   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() callr   )re  rx  r  )r   r  r  s      rg   group_by_extendSelect.group_by_extend	  s)    -2.7}}h''ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   )rw  r
   r  r  r  s     rg   r  Select.having	  s.    <<#<</K7Khmm[9ri   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   r{  rz  r  s     rg   r  Select.distinct	  s=    w<1'!*"4
e8K$+AJD!$)D!$Nri   c                 .    U(       a  Xl         g S U l         g rd   )ry  )r   r  s     rg   r	  Select.window	  s    #*ri   c                 x    U(       d  Uc  U(       d  U(       a  SnU(       d  S U l         g [        XX45      U l         g ry  )r  ra  )r   r  rh  rc  ri  s        rg   r  Select.for_update	  s.     r~;J#D(MDri   c                     Xl         g rd   )r  )r   r  s     rg   r  Select.lateral	  s    ri   c                     U R                   $ rd   r  r  s    rg   r  Select._get_query_key	  s    {{ri   c                 J    UR                  [        U R                  5      5      $ rd   )r\  r  r  r   ro  is_subquerys      rg   __sql_selection__Select.__sql_selection__	  s    ww}T__566ri   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                  bR  UR                  R8                  (       d  [;        S5      eUR                  S
5        UR!                  U R6                  5        S S S 5        UR                  R                  (       d(  UR                  R<                  (       a  U R>                  c  U$ U RA                  U5      $ ! , (       d  f       GN-= f! , (       d  f       GN= f! , (       d  f       N= f)NzLATERAL FT)rd  r  r  rD  r   r  zSELECT z	DISTINCT zON r   r   FROM  WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.r   )!r  r  r  r  r{  rJ  rD  r1  r  r  rz  r  rV   rX  r{  rz  r\  r  r|  r  r  r  r  rx  rw  ry  rH  r  r  r  r  r  r  )r   ro  r  r1  r  s       rg   rX  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 (()W '` 99  SYY%6%6%)[[%8J$$K $# 98' '&s>   B7O)O(O)4O;E,O)
O	O)
O&	!O))
O7)
r  rz  r  r  rx  rw  r  r  r{  ry  )NNNNNNNNrd   )TNNNr  r  )r   r   r   r   r  r  ri  rT  r  r  r  r  r  r]  r  rE   r;  r[  r  r  r  r  r  r	  r  r  r  r  rX  r   r  r  s   @rg   rV   rV   z	  sh   >BFJ$, 
YY" "F	YY; ;      
YY( ( 
YY#'::$ @ @4 
YY" "(
 
YY: :
 
YY% % 
YY5 5 
YY:>#N N 
YY   7E% E%ri   rV   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 )NTFr   )r[  r  _return_cursorr  r  r  )r   r[  	returningr  r  s       rg   r  _WriteQuery.__init__;
  s+    
#&/dUk4)3F3ri   c                     [        XX#US9$ r  r  r  s        rg   r  _WriteQuery.cteA
  r  ri   c                 <    Xl         U(       a  SU l        g SU l        g NTF)r  r  )r   r  s     rg   r  _WriteQuery.returningE
  s    #&/dUri   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 )r  r|  rJ  r\  r  rn  s     rg   apply_returning_WriteQuery.apply_returningJ
  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      $ rd   )r  execute_returningr  handle_resultr#  s      rg   r  _WriteQuery._executeP
  s:    ??++H5F%%d+F!!(33ri   c                     U R                   c'  UR                  U 5      nU R                  U5      U l         U R                   $ rd   r"  r#  s      rg   r  _WriteQuery.execute_returningW
  r%  ri   c                 J    U R                   (       a  U$ UR                  U5      $ rd   )r  rows_affectedr#  s      rg   r  _WriteQuery.handle_result]
  s!    M%%f--ri   c                 ^    U R                   R                  UR                  U R                   '   g rd   )r[  r   r0  rn  s     rg   _set_table_alias_WriteQuery._set_table_aliasb
  s     (,

(;(;$**%ri   c                 P   > [         [        U ]  U5        U R                  U5        U$ rd   )r  r  rX  r  r   ro  r  s     rg   rX  _WriteQuery.__sql__e
  s'    k4(- 	c"
ri   )r  r  r  r[  rd   r  )r   r   r   r   r  r  ri  rT  r  r  r  r  r  r  rX  r   r  r  s   @rg   r  r  :
  sH    4. 
YY; ;4$.
< ri   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
$ )r{  in
  c                 J   > [         [        U ]
  " U40 UD6  X l        S U l        g rd   )r  r{  r  r  _from)r   r[  r   r  r  s       rg   r  Update.__init__o
  s#    fd$U5f5
ri   c                     Xl         g rd   )r  r  s     rg   r  Update.from_t
  s    
ri   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)NTrM  zUPDATE rs  Fr  r   z SET r  r  r  )r  r{  rX  r~  rJ  sortedr  rp  r=  re   ri  r8   to_valuer_   rG   r<   r  r  r  rW   r\  r[  r  r  r|  r  rz  rH  r  )r   ro  r  kr  r  s        rg   rX  Update.__sql__x
  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  rd   )r   r   r   r   r  ri  rT  r  rX  r   r  r  s   @rg   r{  r{  n
  s*    
 
YY %- %-ri   r{  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$ )rq  i
  r   r   r   c                       \ rS rSrSrg)Insert.DefaultValuesExceptioni
  r   Nr  r   ri   rg   DefaultValuesExceptionr  
      Tri   r  c                 p   > [         [        U ]
  " U40 UD6  X l        X0l        X@l        S U l        SU l        g r   )r  rq  r  _insertrU  _on_conflict_query_type_as_rowcount)r   r[  ro  r  rx  r  r  s         rg   r  Insert.__init__
  s7    fd$U5f5'!ri   c                     [        S5      e)Nz*INSERT queries cannot have a WHERE clause.r  r  s     rg   r  Insert.where
  s    !"NOOri   c                     Xl         g rd   )r  )r   r  s     rg   as_rowcountInsert.as_rowcount
  s    (ri   c                 B    U(       a  [        S5      U l        g S U l        g )NIGNOREr  r  )r   ignores     rg   on_conflict_ignoreInsert.on_conflict_ignore
  s    4:Jx0ri   c                 B    U(       a  [        S5      U l        g S U l        g Nrv  r  )r   r{   s     rg   on_conflict_replaceInsert.on_conflict_replace
  s    5<Jy1$ri   c                 P    U(       d  U(       a  [        U0 UD6U l        g S U l        g rd   r  r  s      rg   rx  Insert.on_conflict
  s#    =AVZ88"& 	ri   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_insertrn  s     rg   _simple_insertInsert._simple_insert
  s4    ||--.IJJ$$dll_c::ri   c                     0 $ rd   r   r  s    rg   get_default_dataInsert.get_default_data
  s    	ri   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 rd   )r[  rU  rV  r   )r   cols     rg   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      $ rd   r9  r  ro  s    rg   rh   )Insert._generate_insert.<locals>.<lambda>
      8H8H8Mri   r  c                 &   > U R                  T5      $ rd   r9  r5  s    rg   rh   r6  
  r7  ri   z VALUES zMissing value for %s.F)rd  r  r(  TrM  )%r  rU  r-  nextStopIterationr  re   r   r1  r  r  r   r[  r  r  r  r  chainr  r  r8   column_namenullr<   r\  r  rJ  r  	enumerater   r  	callable_ri  rG   r_   r~  r  )r   ro  ro  	rows_iterr  defaultsr  accumr[  
column_setr0  clean_columnsseen
column_obj	fk_fieldsnullable_columnsvalue_lookupslookupscolumns_converters
all_valuesr  is_dictrv  rd  lookupvals     `                       rg   r)  Insert._generate_insert
  s   L	-- ((* O9o c7++224?$%HII # !F!&#..!(V!<LL( " !Z
MJ6CLL% 7 !,MN!cVi@IM5D!fc**!(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   )r\  r  rU  rJ  r  rn  s     rg   _query_insertInsert._query_insertB  s5    %dmm45T\\"	$ri   c                 |    U R                   (       d  UR                  S5      $ U R                   R                  U5      $ NzDEFAULT VALUES)r  rJ  default_values_insertrn  s     rg   _default_valuesInsert._default_valuesH  s.    ~~;;/00~~33C88ri   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  rq  rX  r~  r  r  r\  rW   rJ  r[  re   r  r   rU  r*  r  rW  SIMPLEr  rX  rR  QUERYr)  MULTIr  r  )r   ro  stmtr   r  s       rg   rX  Insert.__sql__M  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rd   )r  returning_clauser[  rV  r  rq  r  r  )r   r  r  s     rg   r  Insert._executen  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      $ rd   )r  r  r  last_insert_idr  r#  s      rg   r  Insert.handle_resultw  sA    M))&11&&v/?/?@@ri   )r  rU  r  r  r  r  rm  r  )r   r   r   r   r[  r\  r]  	Exceptionr  r  r  ri  rT  r  r  r#  rx  r*  r-  r1  r)  rR  rW  rX  r  r  r   r  r  s   @rg   rq  rq  
  s    FEE11"P 
YY) ) 
YYE E 
YYG G 
YY( (;
7
p6d$9
-BA Ari   rq  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r~  i  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)NTrM  DELETE FROM r  )r  r~  rX  r~  rJ  r\  r[  r  rz  rH  r  r  s     rg   rX  Delete.__sql__  s    fd#C(t,KK'++DJJ7{{&%%'KK	*..t{{; (   %'', -, (' -,s$   AC,+C
)C

C	C
C)r   )r   r   r   r   rX  r   r  r  s   @rg   r~  r~    s    
- 
-ri   r~  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	\R                  SS j5       r
S rS	rg)r?   i  Nc	                     Xl         [        U[        5      (       d  [        U5      OUU l        X0l        X`l        X@l        XPl        Xpl	        Xl
        U R                  b  U R                  (       d  [        S5      eg g Nz-NULLS DISTINCT is only available with UNIQUE.)r  re   rY   r6   _table_expressionsr  _unique_safe_using_nulls_distinctr  )	r   r  r[  r  uniquesafer  usingnulls_distincts	            rg   r  Index.__init__  sg    
+5eU+C+CfUm'
-+DLLLMM 5A+ri   c                     Xl         g rd   )rq  )r   rq  s     rg   ru  
Index.safe  s    
ri   c                 |    U R                   b  U R                   4U-   n[        [        R                  U5      U l         g rd   r  r  s     rg   r  Index.where  r  ri   c                     Xl         g rd   )rr  )r   rr  s     rg   rv  Index.using  s    ri   c                 N    Ub  U R                   (       d  [        S5      eXl        g rm  )rp  r  rs  )r   rw  s     rg   rw  Index.nulls_distinct  s     %dllLMM-ri   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                  U R(                  (       a  S
OS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 TrM  IF NOT EXISTS z	 USING %sr  r   z	USING %s z NULLS DISTINCTz NULLS NOT DISTINCTr  )rp  r~  rJ  rq  r1  index_schema_prefixre   rn  rY   rW  r6   r  r   r\  rr  index_using_precedes_tabler  ro  r  rW   rs  r  )r   ro  	statement
index_name
table_namer^  s         rg   rX  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 (c22D	<-&/ 0 1 ##/1E1E-13{{&I&**4;;7K -N 
&/; -,N 
s   GJ1,J,/A3J1,J11
K )ro  r  rs  rq  rn  rp  rr  r  )FFNNNr  rd   )r   r   r   r   r  ri  rT  ru  r  rv  rw  rX  r   r   ri   rg   r?   r?     ss    DI8<N 
YY  
YY9 9
 
YY  
YY. .
)ri   r?   c                   6   ^  \ rS rSr  SU 4S jjrS rSrU =r$ )rH   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US9  g )N
index_type)r  r[  r  rt  ru  r  rv  rw  )rL  _generate_name_from_fieldsre   r8   r  r  r  rH   r  rZ  r[  )r   r  fieldsrt  ru  r  rv  r  rw  fieldr  s             rg   r  ModelIndex.__init__  s    <225AD=eU++|0L0L!,,E   	j$(++##) 	) 	+ri   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  )re   r  r  r   ri  r8   r  r<  r  r   rm  r[  rZ  legacy_table_namesr  r  _truncate_constraint_name)r   r  r  rB  r  clean_field_namesrP  prefixs           rg   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Ori   )rL  )FTNNNN)r   r   r   r   r  r  r   r  r  s   @rg   rH   rH     s    EI7;+&P Pri   rH   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      rg   r  r    sQ    
:KK
 1 1' :;EEG	 *=VaZ 99Ra=I
ri   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  )re   rf  origr  r  r  )r   r  r  s     rg   r  PeeweeException.__init__  s<    JtAw	22"1gtABxODItot-t4ri   )r  r   r   r   r   r  r   r  r  s   @rg   r  r    s    5 5ri   r  c                       \ rS rSrSrg)r>   i  r   Nr  r   ri   rg   r>   r>     r  ri   r>   c                       \ rS rSrSrg)r)   i  r   Nr  r   ri   rg   r)   r)     s    dri   r)   c                       \ rS rSrSrg)r+   i  r   Nr  r   ri   rg   r+   r+     s    ri   r+   c                       \ rS rSrSrg)rA   i  r   Nr  r   ri   rg   rA   rA     s    Tri   rA   c                       \ rS rSrSrg)rB   i  r   Nr  r   ri   rg   rB   rB         tri   rB   c                       \ rS rSrSrg)rC   i  r   Nr  r   ri   rg   rC   rC     s    Dri   rC   c                       \ rS rSrSrg)rJ   i  r   Nr  r   ri   rg   rJ   rJ     s    ri   rJ   c                       \ rS rSrSrg)rL   i  r   Nr  r   ri   rg   rL   rL     r  ri   rL   c                       \ rS rSrSrg)rQ   i  r   Nr  r   ri   rg   rQ   rQ     r  ri   rQ   c                   *    \ rS rSrSrS rS rS rSrg)ExceptionWrapperi  
exceptionsc                     Xl         g rd   r  )r   r  s     rg   r  ExceptionWrapper.__init__   s    $ri   c                     g rd   r   r  s    rg   r  ExceptionWrapper.__enter__"  s    ri   c                    Uc  g UR                   U R                  ;  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  )r   r  	__bases__r  rp   )r   rO  	exc_value	tracebacknew_typeexc_argss         rg   r  ExceptionWrapper.__exit__#  sw    DOO3))!,H/x'8'89H ~~HHhy<8<iH 0ri   N)	r   r   r   r   r  r  r  r  r   r   ri   rg   r  r    s    I%Iri   r  )ConstraintErrorr)   r+   rA   rB   rC   rJ   rL   rQ   TransactionRollbackErrorUndefinedFunctionUniqueViolationIndexMetadata)r  r\  r  rt  r[  ColumnMetadata)r  	data_typer=  rY  r[  rU  ForeignKeyMetadata)r[  
dest_tabledest_columnr[  ViewMetadata)r  r\  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )_ConnectionStateiN  c                 N   > [         [        U ]
  " S0 UD6  U R                  5         g r3  )r  r  r  reset)r   r  r  s     rg   r  _ConnectionState.__init__O  s    .88

ri   c                 <    SU l         S U l        / U l        / U l        g ry  closedconnro  transactionsr  s    rg   r  _ConnectionState.resetS  s    	ri   c                 :    Xl         SU l        / U l        / U l        g r   )r  r  ro  r  r   r  s     rg   set_connection_ConnectionState.set_connectionY  s    	ri   r  )	r   r   r   r   r  r  r  r   r  r  s   @rg   r  r  N  s     ri   r  c                       \ rS rSrSrg)_ConnectionLocali`  r   Nr  r   ri   rg   r  r  `  s    4ri   r  c                   $    \ rS rSrSrS rS rSrg)	_NoopLockia  r   c                     U $ rd   r   r  s    rg   r  _NoopLock.__enter__c  s    ri   c                     g rd   r   rN  s       rg   r  _NoopLock.__exit__d  s    4ri   N)r   r   r   r   r  r  r  r   r   ri   rg   r  r  a  s    I$7ri   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)r  ig  r  c                     Xl         g rd   r  r   r  s     rg   r  ConnectionContext.__init__i  s    bGri   c                 x    U R                   R                  5       (       a  U R                   R                  5         g g rd   )r  	is_closedconnectr  s    rg   r  ConnectionContext.__enter__j  s(    77GGOO ri   c                 8    U R                   R                  5         g rd   )r  closerN  s       rg   r  ConnectionContext.__exit__m  s    477==?ri   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rd   )r  r  r  s     rg   r  )ConnectionContext.__call__.<locals>.innero  s(    "477+4*6* ,++   )
7r   r  s   `` rg   r  ConnectionContext.__call__n  r  ri   N)
r   r   r   r   r  r  r  r  r  r   r   ri   rg   r  r  g  s    I( Cri   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&S r'S r(S r)S r*S r+S r,SES 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?SES0 jr@SES1 jrASES2 jrBSES3 jrCSES4 jrDSES5 jrES6 rFS7 rGS8 rHS9 rIS: rJS; rKS< rLS= rMSFS> jrNSFS? jrOS@ rP\QSA 5       rRSBrSg)Gr(   iv  re  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_typesrK   rz  _operationsr   autoconnectthread_safer  _state	threadingLock_lockr  r  r   connect_paramsinit)	r   r  r  autorollbackr  rz  
autocommitr  r  s	            rg   r  Database.__init__  s     'ud.>.>?%b$//:$$[1##J/&&*,DK")DJ*,DK"DJ I J
 ! < = !		(%f%ri   c                     U R                  5       (       d  U R                  5         Xl        U R                  R	                  U5        [        U5      (       + U l        g rd   )r  r  r  r  r   r  deferred)r   r  r  s      rg   r  Database.init  s?    ~~JJL ""6* N*ri   c                     U R                  5       (       a  U R                  5         U R                  5       nU R                  R                  R                  U5        UR                  5         U $ rd   )r  r  r  r  ro  r  r  rn  s     rg   r  Database.__enter__  sG    >>LLNkkms#ri   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rd   )r  ro  r  r  r  )r   rO  rP  rQ  ro  s        rg   r  Database.__exit__  s^    kkoo!!#	LLF3;;??

 #4;;??

 #s   A% %.Bc                     [        U 5      $ rd   r  r  s    rg   r  Database.connection_context  r  ri   c                     [         erd   r  r  s    rg   _connectDatabase._connect  r  ri   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  rB   r  r  rL   r  __exception_wrapper__r  r  server_version_set_server_versionr  _initialize_connection)r   reuse_if_opens     rg   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 rd   r   r  s     rg   r  Database._initialize_connection      ri   c                     SU l         g r  r  r  s     rg   r  Database._set_server_version  s
    ri   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  rB   in_transactionrL   r  r  r  _closer  r  )r   is_opens     rg   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 rd   )r  r  s     rg   r  Database._close  s    

ri   c                 .    U R                   R                  $ rd   r  r  r  s    rg   r  Database.is_closed  s    {{!!!ri   c                 8    U R                   R                  (       + $ rd   r%  r  s    rg   is_connection_usableDatabase.is_connection_usable  s    ;;%%%%ri   c                 x    U R                  5       (       a  U R                  5         U R                  R                  $ rd   )r  r  r  r  r  s    rg   
connectionDatabase.connection   s(    >>LLN{{ri   c                     U R                  5       (       a-  U R                  (       a  U R                  5         O[        S5      eU R                  R
                  R                  5       $ )Nz&Error, database connection not opened.)r  r  r  rB   r  r  r  )r   named_cursors     rg   r  Database.cursor  sF    >>$%MNN{{&&((ri   c                    [         R                  [        R                  5      (       a  [         R	                  X45        [
           U R                  5       nUR                  X=(       d    S5        S S S 5        U$ ! , (       d  f       W$ = fr3  )loggerisEnabledForloggingDEBUGdebugr  r  r  )r   r\  r  r  s       rg   execute_sqlDatabase.execute_sql  s_    w}}--LL#'"[[]FNN3"- #  #" s   +A::
B	c                     U R                   " S0 UD6nUR                  U5      R                  5       u  pEU R                  XE5      $ r3  )r  r\  rr  r6  )r   rr  context_optionsro  r\  r  s         rg   r  Database.execute  s>    ""5_5ggen**,,,ri   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  rz  ri  r_  r  r  r  r  r  r  rG  r  )r  r  ri  r_  r  r  r  r  r  r  rG  r  r  s    rg   get_context_optionsDatabase.get_context_options  sp    ,,**ZZZZ+/+K+K"&"9"9#33//#'#;#;*.*I*I"11
 	
ri   c                 v    U R                  5       nU(       a  UR                  U5        U R                  " S0 UD6$ r3  )r<  r   context_class)r   r9  r  s      rg   r  Database.get_sql_context*  s3    **,NN?+!!,G,,ri   c                     [         erd   r  r   rx  rr  s      rg   r  Database.conflict_statement0  r  ri   c                     [         erd   r  rB  s      rg   r  Database.conflict_update3  r  ri   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 CONSTRAINTr7   rZ  rq  r   Fr  zDO UPDATE SET)r  rW   r  re   r  r6   r  r  r  r  rj  r  r  rp  ri  r   r[  r8   r  r_   rS   r  r  rm  )r   rx  rr  r^  r0  targetupdatesr[  excluded
expressionr	  r  r;  s                rg   _build_on_conflict_update"Database._build_on_conflict_update6  s   ''}%D%&77'97C  *#s33s<7'9 :F **6!63w<#.#>#>#@ A 23D 55F&#&&  %//#S_mF6K$L),.%}V'<c#h'/'1 2
z* 0 #++113!!T** "!S))#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                   $ rd   )	lastrowidr   r  
query_types      rg   rd  Database.last_insert_idc  s    ri   c                     UR                   $ rd   )rowcountr   r  s     rg   r  Database.rows_affectedf  s    ri   c                 $    UR                  S5      $ rU  rJ  rn  s     rg   rV  Database.default_values_inserti  s    {{+,,ri   c                 >    U R                  5       R                  5       $ rd   )r  r  r  s    rg   session_startDatabase.session_startl  s    !++--ri   c                      U R                  5       nUR                  U R                  5       S9  g! [         a     gf = fNFbeginT)pop_transactionr  commitr  r   txns     rg   session_commitDatabase.session_commito  sE    	&&(C 	

,,.
/  		   0 
==c                      U R                  5       nUR                  U R                  5       S9  g! [         a     gf = fr_  )rb  r  rollbackr  rd  s     rg   session_rollbackDatabase.session_rollbackw  sE    	&&(C 	4..01  		rh  c                 @    [        U R                  R                  5      $ rd   )r  r  r  r  s    rg   r  Database.in_transaction  s    DKK,,--ri   c                 N    U R                   R                  R                  U5        g rd   )r  r  r  )r   r  s     rg   push_transactionDatabase.push_transaction  s      ''4ri   c                 J    U R                   R                  R                  5       $ rd   )r  r  r  r  s    rg   rb  Database.pop_transaction  s    {{''++--ri   c                 @    [        U R                  R                  5      $ rd   )r   r  r  r  s    rg   transaction_depthDatabase.transaction_depth  s    4;;++,,ri   c                 l    U R                   R                  (       a  U R                   R                  S   $ g Nrs  )r  r  r  s    rg   top_transactionDatabase.top_transaction  s)    ;;##;;++B// $ri   c                      [        U /UQ70 UD6$ rd   r  r  s      rg   r  Database.atomic  r  ri   c                     [        U 5      $ rd   r  r  s    rg   r  Database.manual_commit  r  ri   c                      [        U /UQ70 UD6$ rd   r  r  s      rg   r  Database.transaction  r  ri   c                     [        U 5      $ rd   r  r  s    rg   r  Database.savepoint  r  ri   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    rg   ra  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    rg   rj  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    rg   rc  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rd   )r$   r  )r   r  r  rv  r  s        rg   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)rZ  )rY  rZ  r  rZ  
get_tables)r   r  rZ  r  s       rg   table_existsDatabase.table_exists  sD    JE//J[[''F__F_;;;ri   c                     [         erd   r  )r   rZ  s     rg   r  Database.get_tables  r  ri   c                     [         erd   r  r   r[  rZ  s      rg   get_indexesDatabase.get_indexes  r  ri   c                     [         erd   r  r  s      rg   get_columnsDatabase.get_columns  r  ri   c                     [         erd   r  r  s      rg   get_primary_keysDatabase.get_primary_keys  r  ri   c                     [         erd   r  r  s      rg   get_foreign_keysDatabase.get_foreign_keys  r  ri   c                     [         erd   r  )r   seqs     rg   sequence_existsDatabase.sequence_exists  r  ri   c                 L    [        U5       H  nUR                  " S0 UD6  M     g r3  )sort_modelscreate_table)r   modelsoptionsr  s       rg   create_tablesDatabase.create_tables  s"     (E)) )ri   c                 ^    [        [        U5      5       H  nUR                  " S0 UD6  M     g r3  )r  r  
drop_table)r   r  r  r  s       rg   drop_tablesDatabase.drop_tables  s'    k&12E&v& 3ri   c                     [         erd   r  r   	date_part
date_fields      rg   extract_dateDatabase.extract_date  r  ri   c                     [         erd   r  r  s      rg   truncate_dateDatabase.truncate_date  r  ri   c                     [         erd   r  r   r  s     rg   to_timestampDatabase.to_timestamp  r  ri   c                     [         erd   r  r  s     rg   from_timestampDatabase.from_timestamp  r  ri   c                 *    [         R                  5       $ rd   )r;   randomr  s    rg   r  Database.random  s    yy{ri   c                 6    U H  nUR                  XUS9  M     g )N)	bind_refsbind_backrefs)r,  )r   r  r  r  r  s        rg   r,  Database.bind  s    EJJtJN ri   c                     [        XX#5      $ rd   _BoundModelsContext)r   r  r  r  s       rg   rf  Database.bind_ctx  s    "6JJri   c                 $    UR                  S5      $ )NzSELECT 0 WHERE 0rY  rn  s     rg   get_noop_selectDatabase.get_noop_select  s    {{-..ri   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  r   Nr  r  s   rg   r  r    r  ri   r  r  r  r  s   ` rg   rG   Database.Model  r  ri   )r  r  r  r  r  r  r  r  r  r  r  )TFNNNTr  rd   TT)Tr   r   r   r   r'   r?  r  rz  ri  r_  r  r  r  r  r  r  rG  r  ra  safe_create_indexsafe_drop_index	sequencestruncate_tabler  r  r  r  r  r  r  r  r  r  r  r  r(  r+  r  r6  r  r<  r  r  r  rM  rd  r  rV  r\  rf  rk  r  rp  rb  ru  ry  r  r  r  r  ra  rj  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  rf  r  r  rG   r   r   ri   rg   r(   r(   v  s   MKJEEN #8J!&INOIN@E?C!$&L+'"$ ""& 
)-

 -""+Z -..5.-0.3 +.,<""""""*'""""OK/  ri   r(   c                 2   ^  U 4S jnU 4S jn[        X5      $ )Nc                 &   > U R                  T5      $ rd   pragmar  s    rg   r  __pragma__.<locals>.__get__  s    {{4  ri   c                 (   > U R                  TU5      $ rd   r  )r   rn   r  s     rg   __set____pragma__.<locals>.__set__  s    {{4''ri   )r  )r  r  r  s   `  rg   
__pragma__r    s    !(G%%ri   c                   4  ^  \ rS rSr\R
                  \R                  \R                  \R                  \R                  \R                  S.r	SSS.r
SrSr\rSr  SHU 4S
 jjrSIU 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,SJS$ jr-SJS% jr.SKS& jr/SKS' jr0  SLS( jr1SLS) jr2SJS* jr3SJS+ jr4S, r5S- r6S. r7S/ r8S0 r9S1 r:S2 r;S3 r<S4 r=SKS5 jr>S6 r?SKS7 jr@S8 rAS9 rBSKS: jrCSKS; jrDSKS< jrESKS= jrFSKS> jrGSKS? jrHS@ rISA rJSB rKSC rLSD rMSE rNSF rOSGrPU =rQ$ )MrX   i  )r&  r'  r)  r1  r*  r7  GLOBr  )r  r  Trs  FNc                   > UR                  SS 5      nUb  [        S5      eU=(       d    SU l        [        [        U ]  " U/UQ70 UD6  0 U l        0 U l        0 U l        0 U l	        [        5       U l        0 U l        U R                  S:  U l        U R                  [         SS5        U R                  ["        SS5        U(       a  U R                  [$        SS5        U(       a  S	S
KJnJn	  U" X	5        g g )Nisolation_levelz/isolation_level must be None when using peewee.r   )rq      r   r  r   
date_truncr#  r   )register_udf_groupsRANK)r  r>   _pragmasr  rX   r  _aggregates_collations
_functions_window_functionsr  _extensions	_attachedr  r  register_functionr   r   r   playhouse.sqlite_udfr  r  )r   r  pragmasregexp_functionrank_functionsr  r  	isolationr  r  r  s             rg   r  SqliteDatabase.__init__	  s    JJ0$7	 & (7 8 8  2nd,XGGG!#5"11Z?0+qA1<C"">8Q?F+ ri   c                 .  > 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)rq   #   r   z.RETURNING clause requires Sqlite 3.35 or newer)r  re   r  rd  rp  __sqlite_version__r   r   ra  _timeoutr  rX   r  )r   r  r  timeoutra  r  r  s         rg   r  SqliteDatabase.init!  sr    #MdmmT** !4!4!67DM'!J.NO$4!nd(<V<ri   c                     g rd   r   r  s     rg   r  "SqliteDatabase._set_server_version.  r  ri   c                     [         c  [        S5      e[         R                  " U R                  4U R                  S S.U R
                  D6n U R                  U5        U$ ! [         a    UR                  5         e f = f)NzSQLite driver not installed!)r 	  r  )	sqlite3r>   r  r  r  r  _add_conn_hooksrf  r  r  s     rg   r  SqliteDatabase._connect1  s}    ?&'EFFt}} Ldmm/3L7;7J7JL	  &   	JJL	s   A A;c                 z   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                  U5        g g )N)rq      r   )r  _attach_databasesr  _set_pragmas_load_aggregates_load_collations_load_functionsr  _load_window_functionsr  _load_extensionsr  s     rg   r	  SqliteDatabase._add_conn_hooks=  s    >>""4(==d#d#d#T"*,''-!!$' ri   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  )r   r  r  r  rn   s        rg   r	  SqliteDatabase._set_pragmasJ  s7    !]]MFNN>? +ri   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  rp  r  r  )r   r  r  r  r  s        rg   r
	   SqliteDatabase._attach_databasesP  s@    ,,.HDNNRFG /ri   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   r   z/Cannot specify a permanent pragma without value)SENTINELr  r  rd  rp  r  r6  fetchone)r   rs  rn   	permanentrZ  r\  r  r  s           rg   r  SqliteDatabase.pragmaV  s    %s+CC 7ejq))Ct}}23$ $W]]_ 5NOOs#,,.q6M ri   
cache_sizeforeign_keysjournal_modejournal_size_limit	mmap_size	page_sizeread_uncommittedsynchronouswal_autocheckpointapplication_iduser_versiondata_versionc                     U R                   $ rd   )r  r  s    rg   r 	  SqliteDatabase.timeouts  s    }}ri   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  r6  )r   secondss     rg   r 	  r-	  w  sB    ==G#~~ 6'D.IJ  ri   c                 t    U R                   R                  5        H  u  nu  p4UR                  X$U5        M     g rd   )r  rp  create_aggregater   r  r  klass
num_paramss        rg   r	  SqliteDatabase._load_aggregates  s4    )-)9)9)?)?)A%D%5!!$E: *Bri   c                 l    U R                   R                  5        H  u  p#UR                  X#5        M     g rd   )r  rp  create_collation)r   r  r  r;   s       rg   r	  SqliteDatabase._load_collations  s+    ((..0HD!!$+ 1ri   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  rp  create_function)r   r  r  r;   n_paramsr:	  r  s          rg   r	  SqliteDatabase._load_functions  sG    37??3H3H3J/D/29Fo}5BF  >v> 4Kri   c                 t    U R                   R                  5        H  u  nu  p4UR                  X$U5        M     g rd   )r  rp  create_window_functionr2	  s        rg   r	  %SqliteDatabase._load_window_functions  s4    )-)?)?)E)E)G%D%5''%@ *Hri   c                     X4U R                   U=(       d    UR                  R                  5       '   U R                  5       (       d   U R	                  U R                  5       5        g g rd   )r  r   ro  r  r	  r+  r   r3	  r  r4	  s       rg   register_aggregate!SqliteDatabase.register_aggregate  sN    <A;N7!5!5!78~~!!$//"34  ri   c                    ^ ^^ UUU 4S jnU$ )Nc                 .   > TR                  U TT5        U $ rd   )rC	  r3	  r  r4	  r   s    rg   r  +SqliteDatabase.aggregate.<locals>.decorator  s    ##E4<Lri   r   r   r  r4	  r  s   ``` rg   	aggregateSqliteDatabase.aggregate      	 ri   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)rW   r  )r  r  r  s     rg   
_collation5SqliteDatabase.register_collation.<locals>._collation  s%    #lT&9":!<<KK((ri   )r   r  r  r  r	  r+  )r   r;   r  rO	  s     ` rg   register_collation!SqliteDatabase.register_collation  sR    "r{{	) "!#~~!!$//"34  ri   c                    ^ ^ UU 4S jnU$ )Nc                 ,   > TR                  U T5        U $ rd   )rQ	  )r;   r  r   s    rg   r  +SqliteDatabase.collation.<locals>.decorator  s    ##B-Iri   r   )r   r  r  s   `` rg   r  SqliteDatabase.collation  s    	 ri   c                     XU4U R                   U=(       d    UR                  '   U R                  5       (       d   U R                  U R	                  5       5        g g rd   )r  r   r  r	  r+  )r   r;   r  r4	  r:	  s        rg   r   SqliteDatabase.register_function  sE    02/N+,~~  !23  ri   c                     ^ ^^^ UUUU 4S jnU$ )Nc                 0   > TR                  U TTT5        U $ rd   )r  )r;   r:	  r  r4	  r   s    rg   r  &SqliteDatabase.func.<locals>.decorator  s    ""2tZGIri   r   )r   r  r4	  r:	  r  s   ```` rg   r  SqliteDatabase.func  s    	 	 ri   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 rd   )r   ro  r  r  r	  r+  rB	  s       rg   register_window_function'SqliteDatabase.register_window_function  sS    -u~~++-(-':t$~~''(9:  ri   c                    ^ ^^ UUU 4S jnU$ )Nc                 .   > TR                  U TT5        U $ rd   )r^	  rG	  s    rg   r  1SqliteDatabase.window_function.<locals>.decorator  s    ))%zBLri   r   rI	  s   ``` rg   window_functionSqliteDatabase.window_function  rL	  ri   c                     U R                   U	 g rd   )r  r  s     rg   unregister_aggregate#SqliteDatabase.unregister_aggregate      T"ri   c                     U R                   U	 g rd   )r  r  s     rg   unregister_collation#SqliteDatabase.unregister_collation  rh	  ri   c                     U R                   U	 g rd   )r  r  s     rg   unregister_function"SqliteDatabase.unregister_function  s    OOD!ri   c                     U R                   U	 g rd   )r  r  s     rg   unregister_window_function)SqliteDatabase.unregister_window_function  s    ""4(ri   c                 n    UR                  S5        U R                   H  nUR                  U5        M     g ry  )enable_load_extensionr  load_extension)r   r  	extensions      rg   r	  SqliteDatabase._load_extensions  s.    ""4())I	* *ri   c                     U R                   R                  U5        U R                  5       (       d3  U R                  5       nUR	                  S5        UR                  U5        g g ry  )r  r  r  r+  rs	  rt	  )r   ru	  r  s      rg   rt	  SqliteDatabase.load_extension  sP    Y'~~??$D&&t,	*  ri   c                 :    U R                   R                  U5        g rd   )r  remove)r   ru	  s     rg   unload_extensionSqliteDatabase.unload_extension  s    	*ri   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  rL   r  r6  )r   filenamer  s      rg   attachSqliteDatabase.attach  s`    >>!~~d#x/"#BT#IJJ't~~xNOri   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  r6  r  s     rg   detachSqliteDatabase.detach  s?    ~~%NN4 ~~3d:;ri   c                     U R                   (       d  UR                  $ U[        R                  :X  a	   US   S   $ U$ ! [        [
        [        4 a     U$ f = fr  )ra  rP  rq  r[  r  r   	TypeErrorrQ  s      rg   rd  SqliteDatabase.last_insert_id  s]    $$###6==(ay|#  )4 s   = AAc                 h     UR                   $ ! [         a    UR                  R                   s $ f = frd   rU  r   r  rV  s     rg   r  SqliteDatabase.rows_affected  0    	*??" 	*==)))	*     11c                 B    U(       a  SU-  OSnU R                  U5        g )NzBEGIN %sr  r6  )r   	lock_typer  s      rg   ra  SqliteDatabase.begin  s    .7J*W	#ri   c                 f    [            U R                  S5      sS S S 5        $ ! , (       d  f       g = fr  r  r6  r  s    rg   rc  SqliteDatabase.commit	  s    "##H- #""   "
0c                 f    [            U R                  S5      sS S S 5        $ ! , (       d  f       g = fr  r	  r  s    rg   rj  SqliteDatabase.rollback  s    "##J/ #""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)r[  r6  fetchall)r   rZ  r  r  s       rg   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)r6  r  )r   rZ  r\  r  s       rg   	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   r   z".index_info(")r6  r  r	  r  r   r  r  r  )r   r[  rZ  rr  r  index_to_sqlunique_indexesr  r  	is_uniqueindex_columnsr  s               rg   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   r   rq   rD  rC  )r6  r	  r  r  )r   r[  rZ  r  r  s        rg   r  SqliteDatabase.get_columns=  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   $ rx  r   )r  s    rg   rh   1SqliteDatabase.get_primary_keys.<locals>.<lambda>F  s    1R5ri   r   r6  r  r	  r   r[  rZ  r  r  s        rg   r  SqliteDatabase.get_primary_keysC  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	  rq   r   rC  r6  r	  r  r	  s        rg   r  SqliteDatabase.get_foreign_keysH  si    !!#)#3V#3U#< = "??,.,C #3q63q63q65A,. 	. .s   !Ac                 "    [         R                  $ rd   )r	  Binaryr  s    rg   get_binary_typeSqliteDatabase.get_binary_typeN      ~~ri   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  ro  rW   upperr   rx  rr  r  s       rg   r  !SqliteDatabase.conflict_statementQ  sQ    0;0C0C$$**,f$99~(;(;(A(A(CCDD :6ri   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)rq      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  rN  r  r  r  r  r  r  r  ro  rW   rM  )r   ocrr  r  s       rg   r  SqliteDatabase.conflict_updateV  s   +bjj"))R5H5H'') * * 6 7 7 (*zz!!#rf$==Y/00BLL * + + $$ D E E$$ ? @ @ --b88ri   c                 2    [         R                  X[        S9$ N)r  )r;   r  r   r  s      rg   r  SqliteDatabase.extract_dater  s    ||I|DDri   c                 2    [         R                  X[        S9$ r	  )r;   r  simple_date_timer  s      rg   r  SqliteDatabase.truncate_dateu  s    }}Y*:  < 	<ri   c                 L    [         R                  SU5      R                  S5      $ )Nr  integer)r;   r   r  r  s     rg   r  SqliteDatabase.to_timestampy  s    {{4,11)<<ri   c                 .    [         R                  US5      $ )N	unixepoch)r;   rw   r  s     rg   r  SqliteDatabase.from_timestamp|  s    {{:{33ri   )
r  r  r  r  r  r  r  r  r  ra  )NFF)NrD  Nrx  rd   )Nrs  N)Rr   r   r   r   r  r$  r4  r3  r5  r  rz  r  rG  r  r  r  r  r  r  r  r	  r	  r
	  r	  r  r  r 	  r!	  r"	  r#	  r$	  r%	  r&	  r'	  r(	  r)	  r*	  r+	  r  r 	  r]  r	  r	  r	  r	  rC	  rJ	  rQ	  r  r  r  r^	  rc	  rf	  rj	  rm	  rp	  r	  rt	  r{	  r	  r	  rd  r  ra  rc  rj  r  r	  r  r  r  r  r	  r  r  r  r  r  r  r   r  r  s   @rg   rX   rX     s   ::))		++II

K J I'NN?D %,0=
( !)E$   L)Jn-Ln-L#$89;'I;'I!"45]+K#$89 01Nn-Ln-L  ^^K K;,?
A5
5 ;=(,4;$$#*+
++	*$.03P
.B,N
.E
98E<=4 4ri   rX   c                   *    \ rS rSr0 rS rS rS rSrg)_BasePsycopgAdapteri  c                 x    U R                   R                  5        VVs0 s H  u  pX!_M	     snnU l        g s  snnf rd   )isolation_levelsrp  isolation_levels_inv)r   r	  r  s      rg   r  _BasePsycopgAdapter.__init__  s7    !2288:%<:TQAD:%<! %<s   6c                 N    [        U[        5      (       a  U R                  U   $ U$ rd   )re   r  r	  r   r  s     rg   isolation_level_int'_BasePsycopgAdapter.isolation_level_int  s&    os++,,_==ri   c                 N    [        U[        5      (       a  U R                  U   $ U$ rd   )re   r   r	  r	  s     rg   isolation_level_str'_BasePsycopgAdapter.isolation_level_str  s&    os++((99ri   )r	  N)	r   r   r   r   r	  r  r	  r	  r   r   ri   rg   r	  r	    s    <
ri   r	  c                   `   ^  \ rS rSrSSSSS.rU 4S jrS rS	 rS
 rS r	S r
S rS rSrU =r$ )Psycopg2Adapteri  READ COMMITTEDREPEATABLE READSERIALIZABLEREAD UNCOMMITTEDr   r   rq   rC  c                 d   > [         [        U ]  5         [        U l        [        U l        SU l        g ry  )r  r	  r  Json_pg2	json_type
jsonb_typecast_json_caser   r  s    rg   r  Psycopg2Adapter.__init__  s&    ot-/!""ri   c                 (    [         c  [        S5      eg )Nz#psycopg2 postgres driver not found.)psycopg2r>   r  s    rg   check_driverPsycopg2Adapter.check_driver  s    &'LMM ri   c                 "    [         R                  $ rd   )r	  r	  r  s    rg   r	  Psycopg2Adapter.get_binary_type  s    ri   c                    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$ )Npostgresql://dsndbnamer   )r  r  
setdefaultr	  r  _register_unicodepg_extensionsregister_typeUNICODEUNICODEARRAY	_encodingset_client_encoding)r   r  r  r  s       rg   r  Psycopg2Adapter.connect  s    ;;!!/22eR[[1h4)&)''(=(=tD''(B(BDI<<$$R\\2ri   c                     UR                   $ rd   r  r  s     rg   get_server_version"Psycopg2Adapter.get_server_version  s    """ri   c                 H    UR                  5       nU[        R                  :  $ rd   )get_transaction_statusr	  TRANSACTION_STATUS_INERRORr   r  
txn_statuss      rg   r(  $Psycopg2Adapter.is_connection_usable  s!    002
MDDDDri   c                     UR                  5       nU[        R                  :X  a  gU[        R                  :X  a  UR	                  5         gU[        R
                  :w  a  UR                  5         gr  )r 
  r	  TRANSACTION_STATUS_UNKNOWNr
  r  TRANSACTION_STATUS_IDLErj  r
  s      rg   is_connection_reusable&Psycopg2Adapter.is_connection_reusable  s[    002
 AAA=CCCJJL  =@@@MMOri   c                     UR                  5       nU[        R                  :X  a  gU[        R                  :w  a  UR	                  5         gr  )r 
  r	  r
  r
  rj  r
  s      rg   is_connection_closed$Psycopg2Adapter.is_connection_closed  s;    002
AAA=@@@MMOri   r	  r	  r	  r   r   r   r   r	  r  r	  r	  r  r	  r(  r
  r
  r   r  r  s   @rg   r	  r	    sF    	#N#E ri   r	  c                   `   ^  \ rS rSrSSSSS.rU 4S jrS rS	 rS
 rS r	S r
S rS rSrU =r$ )Psycopg3Adapteri  r	  r	  r	  r	  r	  c                 d   > [         [        U ]  5         [        U l        [
        U l        SU l        g r   )r  r
  r  Json_pg3r	  	Jsonb_pg3r	  r	  r	  s    rg   r  Psycopg3Adapter.__init__  s&    ot-/!##ri   c                 (    [         c  [        S5      eg )Nz"psycopg postgres driver not found.)psycopgr>   r  s    rg   r	  Psycopg3Adapter.check_driver  s    ?&'KLL ri   c                 "    [         R                  $ rd   )r
  r	  r  s    rg   r	  Psycopg3Adapter.get_binary_type  r	  ri   c                     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$ )Nr	  conninfor	  r   )r  r  r	  r
  r  )r   r  r  s      rg   r  Psycopg3Adapter.connect  sQ    ;;!!/22j"++6h4(((ri   c                 .    UR                   R                  $ rd   )pgconnr  r  s     rg   r	  "Psycopg3Adapter.get_server_version  s    {{)))ri   c                 P    UR                   R                  [        R                  :  $ rd   )r
  transaction_statusr   INERRORr  s     rg   r(  $Psycopg3Adapter.is_connection_usable  s    {{--0A0I0IIIri   c                     UR                   R                  nU[        R                  :X  a  gU[        R                  :X  a  UR                  5         gU[        R                  :w  a  UR                  5         gr  )r
  r!
  r   UNKNOWNr"
  r  IDLErj  r
  s      rg   r
  &Psycopg3Adapter.is_connection_reusable  s_    [[33
 *222,444JJL  ,111MMOri   c                     UR                   R                  nU[        R                  :X  a  gU[        R                  :w  a  UR                  5         gr  )r
  r!
  r   r%
  r&
  rj  r
  s      rg   r
  $Psycopg3Adapter.is_connection_closed  s>    [[33
*222,111MMOri   r
  r
  r  s   @rg   r
  r
    sF    	$M)*J ri   r
  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\r\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(S( r)S)r*U =r+$ ),rM   i
  SERIAL	BIGSERIALBYTEABOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONr7  )	r$  r&  r(  r)  r-  r.  r1  r7  r8  r  z~*)r	  r
  r  Tc                 ,  > X l         X0l        UR                  SS5      n[        b$  U(       d  [        c  U R                  5       U l        OU R                  5       U l        U R                  R                  U5      U l	        [        [        U ]2  " U40 UD6  g )Nprefer_psycopg3F)r	  r	  r  r
  r	  psycopg3_adapter_adapterpsycopg2_adapterr	  _isolation_levelr  rM   r  )r   r  register_unicodeencodingr  r  r3
  r  s          rg   r  PostgresqlDatabase.init!  s    !1! **%6>Ox7G 113DM 113DM !% A A! 	 $,X@@ri   c                     U R                   R                  5         U R                   R                  " U 40 U R                  D6nU R                  (       a  UR                  U R                  5        SUl        U$ ry  )r5
  r	  r  r  r7
  set_isolation_levelr  r  s     rg   r  PostgresqlDatabase._connect3  s\    ""$ }}$$TAT-@-@A  $$T%:%:;ri   c                 D    U R                   R                  U5      U l        g rd   )r5
  r	  r  r  s     rg   r  &PostgresqlDatabase._set_server_version@  s    "mm>>tDri   c                     U R                   R                  (       a  gU R                  R                  U R                   R                  5      $ r   )r  r  r5
  r(  r  r  s    rg   r(  'PostgresqlDatabase.is_connection_usableC  s3    ;;
 }}11$++2B2BCCri   c                 v     U[         R                  :w  a  U$ US   S   $ ! [        [        [        4 a     g f = fr  )rq  r[  r  r   r	  rQ  s      rg   rd  !PostgresqlDatabase.last_insert_idL  s>    	'6==86JfQilJHi0 		s       88c                 h     UR                   $ ! [         a    UR                  R                   s $ f = frd   r	  rV  s     rg   r   PostgresqlDatabase.rows_affectedR  r	  r	  c                     U R                  5       (       a  U R                  5         U(       a!  U R                  R                  U5      n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 %sr  )r  r  r5
  r	  r  r  r  )r   r  txn_typer^  s       rg   ra  PostgresqlDatabase.beginX  sa    >>LLN}}88IH9HDDD"KKM!!$' #""s    A??
B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	  )r   rZ  rr  r  r[  s        rg   r  PostgresqlDatabase.get_tablesc  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 viewnamerJ
  z 	;)r6  r	  r  strip)r   rZ  rr  r  	view_namer\  s         rg   r	  PostgresqlDatabase.get_viewsi  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 )Nar  
            SELECT
                i.relname, idxs.indexdef, idx.indisunique,
                array_to_string(ARRAY(
                    SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
                    FROM generate_subscripts(idx.indkey, 1) AS k
                    ORDER BY k), ',')
            FROM pg_catalog.pg_class AS t
            INNER JOIN pg_catalog.pg_namespace AS n ON t.relnamespace = n.oid
            INNER JOIN pg_catalog.pg_index AS idx ON t.oid = idx.indrelid
            INNER JOIN pg_catalog.pg_class AS i ON idx.indexrelid = i.oid
            INNER JOIN pg_catalog.pg_indexes AS idxs ON (
                idxs.tablename = t.relname
                AND idxs.indexname = i.relname
                AND idxs.schemaname = n.nspname)
            WHERE t.relname = %s AND t.relkind = %s AND n.nspname = %s
            ORDER BY idx.indisunique DESC, i.relname;r  rJ
  z ;,)r6  r	  r  rstripr   )	r   r[  rZ  rr  r  r  r\  r	  r  s	            rg   r  PostgresqlDatabase.get_indexesp  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_positionrJ
  YESr6  r  r  r	  r  )
r   r[  rZ  rr  r  pksr  r=  r   dfs
             rg   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 KEYrJ
  r	  )r   r[  rZ  rr  ctyper  pks          rg   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 = %srJ
  r   r   r   r	  )r   r[  rZ  r\  r  r  s         rg   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   )r6  r  r	  )r   sequenceress      rg   r  "PostgresqlDatabase.sequence_exists  s6      " %-;	0
 CLLN1%&&ri   c                 j     U R                   R                  5       $ ! [         a    [        S5      ef = f)NzPostgres driver not installed.)r5
  r	  r   r>   r  s    rg   r	  "PostgresqlDatabase.get_binary_type  s8    	I==0022 	I&'GHH	Is    2c                     g rd   r   rB  s      rg   r  %PostgresqlDatabase.conflict_statement      ri   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	  rG  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  ro  rW   r  r  r  re   r  r6   r  r  r  r  r  rM  )r   r	  rr  r  r;  r0  s         rg   r  "PostgresqlDatabase.conflict_update  s   ')zz!!#r**'(E""-!22/42 $.c3#7#7F3KS@2/4 5 6 LL\*+E?"(* ) * * BLL ) * * %%)@)@ ? @ @ --b88%/4s   /,Ec                 h    [         R                  [        [        U5      [        S5      U45      5      $ NFROMr;   EXTRACTr  rW   r  s      rg   r  PostgresqlDatabase.extract_date  %    zz(C	NCK#LMNNri   c                 ,    [         R                  X5      $ rd   )r;   
DATE_TRUNCr  s      rg   r   PostgresqlDatabase.truncate_date  s    }}Y33ri   c                 .    [        [        S5      U45      $ )Nintervalr  r   rO  s     rg   rw
  PostgresqlDatabase.interval  s    Z#.//ri   c                 &    U R                  SU5      $ )NEPOCH)r  r  s     rg   r  PostgresqlDatabase.to_timestamp  s      *55ri   c                 ,    [         R                  U5      $ rd   )r;   r  r  s     rg   r  !PostgresqlDatabase.from_timestamp  s    z**ri   c                 $    UR                  S5      $ )NzSELECT 0 WHERE falserY  rn  s     rg   r  "PostgresqlDatabase.get_noop_select  s    {{122ri   c                 L    U R                  SUR                  SS5      -  5        g )Nzset time zone '%s';r  r  )r6  r{   )r   ry   s     rg   set_time_zone PostgresqlDatabase.set_time_zone  s#    083C3CC3NNOri   c                 D    U R                   R                  U5      U l        g rd   )r5
  r	  r7
  r	  s     rg   r<
  &PostgresqlDatabase.set_isolation_level  s     $ A A!ri   )r5
  r	  r7
  r	  r  )TNNrd   ),r   r   r   r   r  rz  ri  r  r  r  r  ra  r  r	  r6
  r
  r4
  r  r  r  r(  rd  r  ra  r  r	  r  r  r  r  r  r	  r  r  r  r  rw
  r  r  r  r
  r<
  r   r  r  s   @rg   rM   rM   
  s    $	K  D1JE"8JNI&&=A!A$ED*	(7;H.	=1 .*'I92O406+3P ri   rM   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'$ )/rI   i  zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTr)  r0
  r1
  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  rI   r  )r   r  r  r  r  s       rg   r  MySQLDatabase.init  sX    ! 	fLL%zz*5F8mT';F;ri   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  r   )mysqlr>   r  r  r  r  s     rg   r  MySQLDatabase._connect!  sA    =&'DEE}} 4$ 4#224ri   c                      UR                   nU R                  U5      U l         g ! [         a    UR                  5       n N3f = frd   )r  r   get_server_info_extract_server_version)r   r  version_raws      rg   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{1,2}\.\d+\.\d+)c              3   8   #    U  H  n[        U5      v   M     g 7frd   )r   )r|  nums     rg   r~  8MySQLDatabase._extract_server_version.<locals>.<genexpr>8  s     N-McS-Mr  r   rZ  z'Unable to determine MySQL version: "%s"r   )	re   re  ro  r   r   r  r   r   r   )r   versionrw  s      rg   r
  %MySQLDatabase._extract_server_version/  s    gu%%N--/g		"4g>I		"8'BI NY-=-=-?-B-H-H-MNNN?'IJri   c                     U R                   R                  (       a  gU R                   R                  n[        US5      (       a)  U R                  S   S:  a  SnOSn UR
                  " U6   gg! [         a     gf = f)NFpingr   rK  r   r  T)r  r  r  r  r  r
  rf  )r   r  r  s      rg   r(  "MySQLDatabase.is_connection_usable=  su    ;;{{4  ""1%*		4    s   A. .
A;:A;c                 $    UR                  S5      $ )Nz() VALUES ()rY  rn  s     rg   rV  #MySQLDatabase.default_values_insertM  s    {{>**ri   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 %sr  r  )r   r  curss      rg   ra  MySQLDatabase.beginP  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	  )r   rZ  rr  r[  s       rg   r  MySQLDatabase.get_tablesZ  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)r6  r	  r  )r   rZ  rr  r  r  s        rg   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   r   rC  )r6  r  r	  r  r	  r  r  )r   r[  rZ  r  rt  indexesr  r  s           rg   r  MySQLDatabase.get_indexesg  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_positionrU
  rV
  )
r   r[  rZ  r\  r  rW
  r  r=  r   rX
  s
             rg   r  MySQLDatabase.get_columnss  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 )Nr
  c                     U S   S:H  $ )Nr   PRIMARYr   )r  s    rg   rh   0MySQLDatabase.get_primary_keys.<locals>.<lambda>  s    3q6Y#6ri   rC  r	  r	  s        rg   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	  )r   r[  rZ  rr  r  r[  r  r  s           rg   r  MySQLDatabase.get_foreign_keys  s[    : !!%2 4:??3DF3D/K v;F3DF 	F Fs   Ac                 "    [         R                  $ rd   )r
  r	  r  s    rg   r	  MySQLDatabase.get_binary_type  s    ||ri   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{   rv  r  zINSERT IGNOREr   zWUn-supported action for conflict resolution. MySQL supports REPLACE, IGNORE and UPDATE.)r  ro  rW   r  r	  s       rg   r   MySQLDatabase.conflict_statement  sh    ""F$$**,Yy>!x''x J K K  ri   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:  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   
   )r
  rq   rq   r   Fr  zON DUPLICATE KEY UPDATE)r  r  r  r  r  r  r;   VALUEVALUESrj  r  rW   r  r  rp  re   ri  r  r   r[  r8   r  r_   r  )r   rx  rr  rJ  r
  VALUE_FNr[  entityrL  r	  r  s              rg   r  MySQLDatabase.conflict_update  s   !=!=++ + , ,    ))1TGqzRGz$98899%//&v.%!&)HV$'& '
 z* 0 #++113!!T** "!S))#EKK3!!U++JJqM!!E2xq)93s8Q(GHI 4 S!:;*735 6 6 ri   c                 h    [         R                  [        [        U5      [        S5      U45      5      $ rm
  ro
  r  s      rg   r  MySQLDatabase.extract_date  rr
  ri   c                 B    [         R                  U[        U   [        S9$ r	  )r;   DATE_FORMAT__mysql_date_trunc__r	  r  s      rg   r  MySQLDatabase.truncate_date  s%    ~~j*>y*I+;  = 	=ri   c                 ,    [         R                  U5      $ rd   )r;   UNIX_TIMESTAMPr  s     rg   r  MySQLDatabase.to_timestamp  s      ,,ri   c                 ,    [         R                  U5      $ rd   )r;   FROM_UNIXTIMEr  s     rg   r  MySQLDatabase.from_timestamp  s    
++ri   c                 *    [         R                  5       $ rd   )r;   randr  s    rg   r  MySQLDatabase.random  s    wwyri   c                 $    UR                  S5      $ )NzSELECT 0 WHERE 0=1rY  rn  s     rg   r  MySQLDatabase.get_noop_select  s    {{/00ri   r  rd   )(r   r   r   r   r  rz  ri  r_  r  r  r  r  rG  r  r  r
  r  r  r  r
  r(  rV  ra  r  r	  r  r  r  r  r	  r  r  r  r  r  r  r  r  r   r  r  s   @rg   rI   rI     s    (*$ "K !J EE":J!%IO H<H +"HA
%	=L
F
K)6VO=-,1 1ri   rI   c                   ,    \ rS rSrS rS rS rS rSrg)r  i  c                     Xl         g rd   r  r  s     rg   r  _manual.__init__  s    ri   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rd   )r  r  r  s     rg   r  _manual.__call__.<locals>.inner  s(    !4*6* "!!r  r   r  s   `` rg   r  _manual.__call__  r  ri   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  ry  re   r  r  rp  )r   tops     rg   r  _manual.__enter__  sI    gg%%'?:c7#;#; 6 7 7  &ri   c                 T    U R                   R                  5       U La  [        S5      eg )Nz>Transaction stack corrupted while exiting manual commit block.)r  rb  r  rN  s       rg   r  _manual.__exit__  s.    77""$D0 4 5 5 1ri   r  NrP  r   ri   rg   r  r    s    '5ri   r  c                   ,    \ rS rSrS rS rS rS rSrg)r  i  c                      Xl         X#4U l        g rd   )r  _transaction_argsr   r  r  r  s       rg   r  _atomic.__init__  s    "&ri   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rd   )r
  r  r  r  r  r  r	  r;   r   s       rg   r  _atomic.__call__.<locals>.inner  s?    ))DA*1**4*6* +**	   ;
A	r   r  s   `` rg   r  _atomic.__call__       	r	+ 
	+ ri   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  ru  r
  r  _helperre   ry  r  r  r  r  r  s      rg   r  _atomic.__enter__  s    77$$&!+11LD77..??DL//17;; 3 4 4  77,,.DL||%%''ri   c                 :    U R                   R                  XU5      $ rd   )r
  r  rN  s       rg   r  _atomic.__exit__  s    ||$$X??ri   )r
  r
  r  NrP  r   ri   rg   r  r    s    0	(@ri   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  i  c                      Xl         X#4U l        g rd   )r  _begin_argsr
  s       rg   r  _transaction.__init__  s     >ri   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rd   )r
  r  r  r
  s       rg   r  $_transaction.__call__.<locals>.inner  s?    ##DAdgg//Q/4*6* 0//r
  r   r  s   `` rg   r  _transaction.__call__  r
  ri   c                 X    U R                   u  pU R                  R                  " U0 UD6  g rd   )r
  r  ra  r  s      rg   _begin_transaction._begin"  s$    ''t&v&ri   c                 h    U R                   R                  5         U(       a  U R                  5         g g rd   )r  rc  r
  r   ra  s     rg   rc  _transaction.commit&  s!    KKM ri   c                 h    U R                   R                  5         U(       a  U R                  5         g g rd   )r  rj  r
  r
  s     rg   rj  _transaction.rollback+  s#    KKM ri   c                     U R                   R                  5       S:X  a  U R                  5         U R                   R                  U 5        U $ r  )r  ru  r
  rp  r  s    rg   r  _transaction.__enter__0  s7    77$$&!+KKM  &ri   c                    U R                   R                  5       nU R                   R                  5         U(       a  US:X  a  U R                  S5        g US:X  a   U R	                  S5        g g ! [
         a    U R                  S5        e f = fNr   F)r  ru  rb  rj  rc  rf  )r   rO  rP  rQ  depths        rg   r  _transaction.__exit__6  sv    ))+!
MM% aZE"   e$s   A. .B)r
  r  Nr  r   r   r   r   r  r  r
  rc  rj  r  r  r   r   ri   rg   r  r    s%    *'


ri   r  c                   J    \ rS rSrSS jrS rS rSS jrSS jrS r	S	 r
S
rg)r  iC  Nc                     Xl         U=(       d"    S[        R                  " 5       R                  -   U l        U R                  R                  U R                   R                  5      U l        g )Nr   )r  uuiduuid4hexsidr[  r_  
quoted_sid)r   r  r  s      rg   r  _savepoint.__init__D  s@    0#

 0 00((--6ri   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rd   )r  r  r  s     rg   r  "_savepoint.__call__.<locals>.innerJ  s(    DGG$4*6* %$$r  r   r  s   `` rg   r  _savepoint.__call__I  r  ri   c                 T    U R                   R                  SU R                  -  5        g )NzSAVEPOINT %s;)r  r6  r  r  s    rg   r
  _savepoint._beginP  s    Odoo=>ri   c                     U R                   R                  SU R                  -  5        U(       a  U R                  5         g g )NzRELEASE SAVEPOINT %s;r  r6  r  r
  r
  s     rg   rc  _savepoint.commitS  s+    3dooEF$++-5ri   c                     U R                   R                  SU R                  -  5        U(       a  U R                  5         g g )NzROLLBACK TO SAVEPOINT %s;r  r
  s     rg   rj  _savepoint.rollbackW  s+    7$//IJ$++-5ri   c                 &    U R                  5         U $ rd   )r
  r  s    rg   r  _savepoint.__enter__[  s    ri   c                     U(       a  U R                  S5        g  U R                  SS9  g ! [         a    U R                  SS9  e f = f)NFr`  )rj  rc  rf  rN  s       rg   r  _savepoint.__exit___  sD    MM% %( E*s	   + A)r  r  r  rd   r  r	  r   ri   rg   r  r  C  s%    7
?  ri   r  c                   \    \ 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S jrSrg)r  im  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  rV  s     rg   r  CursorWrapper.__init__n  s+    

 ri   c                 d    U R                   (       a  [        U R                  5      $ [        U 5      $ rd   )r$  r  r  ResultIteratorr  s    rg   r,  CursorWrapper.__iter__v  s#    >>''d##ri   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.)re   r  r  r  r  r   r  )r   r<  r  s      rg   r	  CursorWrapper.__getitem__{  s    dE""99D|tax!%>>$''c""OOD1HD!4>>$'' ( ) )ri   c                 :    U R                  5         U R                  $ rd   )r  r  r  s    rg   r  CursorWrapper.__len__  s    zzri   c                     g rd   r   r  s    rg   r  CursorWrapper.initialize  r  ri   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  )r   cacher  r-  s       rg   iterateCursorWrapper.iterate  s    kk""$;!DNKK!!OO#D

a
!!#&NN!!&)ri   c                     U$ rd   r   r   r  s     rg   r0  CursorWrapper.process_row  s    
ri   c              #   X   #      U R                  S5      v   M  ! [         a     gf = f7f)z1Efficient one-pass iteration over the result set.FN)r2  r:  r  s    rg   r  CursorWrapper.iterator  s4     ll5))  ! s   * *
'*'*c                    U=(       d    [        S5      nUS:  a  [        S5      eU R                  (       d  XR                  ::  a  g [	        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  r9  r:  )r   r  r  s      rg   r  CursorWrapper.fill_cache  s    uq5ABB>>Q**_!$'..a**n ..a**n.n. ! s   B: :
CCc                     / n0 nU HG  nU(       a  [        U5      nXT;   a  XE==   S-  ss'   U< SXE   < 3nOSXE'   UR                  U5        MI     U$ )Nr   r  )rx  r  )r   r  valid_identifiersidentifiers
duplicatesr[  s         rg   dedupe_columnsCursorWrapper.dedupe_columns  sd    
 
F (0#"a'"$*J,>?%&
"v&  ri   )r  r  r  r#  r$  r  Nr  r
  )r   r   r   r   r  r,  r	  r  r  r2  r0  r  r  rA  r   r   ri   rg   r  r  m  s4    $
) ri   r  c                   $    \ rS rSrS rS r\rSrg)r  i  c                     U R                  U R                  R                   Vs/ s H  oS   PM	     snSS9U l        [	        U R                  5      U l        g s  snf )Nr   Fr>  rA  r  descriptionr  r   ncolsr   col_specs     rg   r  DictCursorWrapper.initialize  sT    **)-)@)@A)@Xa[)@A# + % &
 B   Ac                     0 n[        U R                  5       H$  nUR                  U R                  U   X   5        M&     U$ rd   )r  rH  r	  r  )r   r  r-  rv  s       rg   _row_to_dictDictCursorWrapper._row_to_dict  s9    tzz"Adll1osv6 #ri   )r  rH  N)r   r   r   r   r  rN  r0  r   r   ri   rg   r  r    s    ' Kri   r  c                        \ rS rSrS rS rSrg)r  i  c                     U R                  U R                  R                   Vs/ s H  oS   PM	     sn5      n[        R                  " SU5      U l        g s  snf )Nr   Row)rA  r  rG  collections
namedtupletuple_class)r   rJ  r?  s      rg   r  "NamedTupleCursorWrapper.initialize  sN    )))-)@)@A)@Xa[)@AC&11%E Bs   Ac                      U R                   " U6 $ rd   rU  r5  s     rg   r0  #NamedTupleCursorWrapper.process_row  s    %%ri   rX  N)r   r   r   r   r  r0  r   r   ri   rg   r  r    s    F
&ri   r  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )r  i  c                 8   > [         [        U ]  U5        X l        g rd   )r  r  r  r  )r   r  r  r  s      rg   r  ObjectCursorWrapper.__init__  s    !41&9&ri   c                     U R                  U R                  R                   Vs/ s H  oS   PM	     snSS9U l        [	        U R                  5      U l        g s  snf )Nr   TrE  rF  rI  s     rg   r  ObjectCursorWrapper.initialize  sT    **)-)@)@A)@Xa[)@A" + $ &
 BrL  c                 H    U R                  U5      nU R                  " S0 UD6$ r3  )rN  r  )r   r  row_dicts      rg   r0  ObjectCursorWrapper.process_row  s&    $$S)+(++ri   )r  r  rH  	r   r   r   r   r  r  r0  r   r  r  s   @rg   r  r    s    '', ,ri   r  c                   *    \ rS rSrS rS rS r\rSrg)r'  i  c                     Xl         SU l        g r  cursor_wrapperr  )r   rf  s     rg   r  ResultIterator.__init__  s    ,
ri   c                     U $ rd   r   r  s    rg   r,  ResultIterator.__iter__  r  ri   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  rf  r  r  r$  r2  r:  r]  s     rg   r9  ResultIterator.next   s    ::++111%%//

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

;C

a

ri   re  N)	r   r   r   r   r  r,  r9  __next__r   r   ri   rg   r'  r'    s    	 Hri   r'  c                   *    \ rS rSrS rSS jrS rSrg)FieldAccessori  c                 (    Xl         X l        X0l        g rd   )r  r  r  r   r  r  r  s       rg   r  FieldAccessor.__init__  s    

	ri   Nc                 t    Ub   UR                   U R                     $ U R                  $ ! [         a     g f = frd   )__data__r  r   r  r  s      rg   r  FieldAccessor.__get__  sB    ((33 zz  s   * 
77c                 ~    X!R                   U R                  '   UR                  R                  U R                  5        g rd   )rs  r  _dirtyr  r   r  rn   s      rg   r  FieldAccessor.__set__  s*    ',$))$DII&ri   )r  r  r  rd   )r   r   r   r   r  r  r  r   r   ri   rg   rn  rn    s    
'ri   rn  c                   >   ^  \ rS rSrU 4S jrS rSS jrS rSrU =r	$ )ForeignKeyAccessori"  c                 P   > [         [        U ]  XU5        UR                  U l        g rd   )r  rz  r  	rel_model)r   r  r  r  r  s       rg   r  ForeignKeyAccessor.__init__#  s      $0tDri   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$ rd   )
rs  r  r  __rel__r  	lazy_loadr|  	rel_fieldr=  r3   )r   r  rn   r  s       rg   get_rel_instance#ForeignKeyAccessor.get_rel_instance'  s    !!%%dii0		X-=-= =yy 0 00TZZ5I5Inn(()=)=)FG.1  +##''		599TZZ%9%9..---ri   c                 B    Ub  U R                  U5      $ U R                  $ rd   )r  r  r  s      rg   r  ForeignKeyAccessor.__get__2  s#    ((22zzri   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 rd   )re   r|  r   r  r  r  rs  r  r  rv  r  )r   r  r  fk_values       rg   r  ForeignKeyAccessor.__set__7  s    c>>**+23

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

' 
'ri   rz  c                   $    \ rS rSrS rSS jrSrg)BackrefAccessoriD  c                 T    Xl         UR                  U l        UR                  U l        g rd   )r  r|  r  r   r  s     rg   r  BackrefAccessor.__init__E  s    
__
ri   Nc                     Ub_  U R                   R                  R                  nU R                  R	                  5       R                  U R                   [        X5      :H  5      $ U $ rd   )r  r  r  r|  r  r  r   )r   r  r  r  s       rg   r  BackrefAccessor.__get__J  sP    ::'',,DNNVXU4::)@@AC ri   )r  r  r|  rd   )r   r   r   r   r  r  r   r   ri   rg   r  r  D  s    %
ri   r  c                   .    \ rS rSrSrS rSS jrS rSrg)	ObjectIdAccessoriS  z(Gives direct access to the underlying idc                     Xl         g rd   r  r  s     rg   r  ObjectIdAccessor.__init__U  s    
ri   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                  $ rd   )rs  r  r  r  r  r   r  )r   r  r  rn   rel_objs        rg   r  ObjectIdAccessor.__get__X  s    %%))$**//:E}H4D4D!D"**4::??;)=)=)B)BCLzzri   c                 D    [        XR                  R                  U5        g rd   )rX  r  r  rw  s      rg   r  ObjectIdAccessor.__set__b  s    **//51ri   r  rd   )	r   r   r   r   r  r  r  r  r   r   ri   rg   r  r  S  s    22ri   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S jrS rS rS rS rS rSrg)r8   if  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   r   )r   r=  r  rt  r<  rU  rY  r  rb
  r  	unindexedchoices	help_textverbose_namedefault_index_typer  _hiddenr8   _field_counter_order	_sort_key)r   r=  r  rt  r<  rU  rY  r  rb
  r  r  r  r  r  r  	db_columnr  s                    rg   r  Field.__init__o  s    
   > ?#K	
&&& """($?(?(? 	!****0q5ACri   c                 `    [        U R                  S-   U R                  R                  -   5      $ r5  )r  r  r  r   r  s    rg   r  Field.__hash__  s$    DIIOdjj&9&99::ri   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  r   r  r  r  s    rg   __repr__Field.__repr__  s_    4!!gdFD&A&A$(J$7$7$(JJ$7$7$(II/ / !4:#6#666ri   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 rd   )r  r  	safe_namer<  rX  accessor_classr   r  r  set_attributes       rg   r,  
Field.bind  sG    
%))	DN++3tE!4!4U$!GH ri   c                 j    [        U R                  R                  R                  U R                  5      $ rd   )r%   r  rZ  r[  r<  r  s    rg   r[  Field.column  s%    djj&&,,d.>.>??ri   c                     U$ rd   r   rR  s     rg   adaptField.adapt  s    ri   c                 .    Uc  U$ U R                  U5      $ rd   r  rR  s     rg   r  Field.db_value      u<4::e+<<ri   c                 .    Uc  U$ U R                  U5      $ rd   r  rR  s     rg   r  Field.python_value  r  ri   c                 *    [        XR                  SS9$ r  )r_   r  )r   rn   cases      rg   r  Field.to_value  s    UMM%88ri   c                     U R                   $ rd   )r  rn  s     rg   r:  Field.get_sort_key  s    ~~ri   c                 8    UR                  U R                  5      $ rd   )r\  r[  rn  s     rg   rX  Field.__sql__  s    wwt{{##ri   c                     g rd   r   r  s    rg   get_modifiersField.get_modifiers  r  ri   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  rI  rM  )r1  r  r  
field_typer  r[  r  rW   )r   ro  column_type	modifiersr   modifier_literals         rg   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  )r6   r<  r  r  r  rW   r=  rY  rb
  r  rm  r  r  )r   ro  rB  r  s       rg   ddl	Field.ddl  s    (()*%%c*	LL#>>LL[)*yyLLZ)LL]+,==LL4t}}DEFLL))*>>LL\DNN:;<ri   )r  r  r  r  r  r<  r  rU  r  r  r  r  r  r=  rY  r  rb
  r  rt  r  )FFFNNFNNNFNNNNNFr  r  )r   r   r   r   r  r  rn  r  auto_incrementr  r  r  r  r  r  r,  r  r[  r  r  r  r  r:  rX  r  r  r  r   r   ri   rg   r8   r8   f  s    NF"NNJFJN>BIM?C).	D@;7I @ @==9$$ri   r8   c                       \ rS rSrSrSrg)r   i  ANYr   Nr   r   r   r   r  r   r   ri   rg   r   r     s    Jri   r   c                       \ rS rSrSrS rSrg)r@   i  r4  c                 J     [        U5      $ ! [        [        4 a    Us $ f = frd   )r   r  r	  rR  s     rg   r  IntegerField.adapt  s*    	u:I& 	L	   
 ""r   Nr   r   r   r   r  r  r   r   ri   rg   r@   r@     s    Jri   r@   c                       \ rS rSrSrSrg)r   i  r'  r   Nr  r   ri   rg   r   r         Jri   r   c                       \ rS rSrSrSrg)rU   i  r*  r   Nr  r   ri   rg   rU   rU     s    Jri   rU   c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )r   i  Tr$  c                    > UR                  S5      SL a  [        S[        U 5      -  5      eSUS'   [        [        U ]  " U0 UD6  g )NrY  Fz %s must always be a primary key.T)r  r  r  r  r   r  r  s      rg   r  AutoField.__init__  sG    ::m$-?$t*LMM $}i'88ri   r   )	r   r   r   r   r  r  r  r   r  r  s   @rg   r   r     s    NJ9 9ri   r   c                       \ rS rSrSrSrg)r   i  r&  r   Nr  r   ri   rg   r   r     s    Jri   r   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )r=   i   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 IDENTITYr   )r  r  r=   r  )r   generate_alwaysr  r  s      rg   r  IdentityField.__init__  s    @DOmT+5f5ri   )r  r  )r   r   r   r   r  r  r   r  r  s   @rg   r=   r=      s    7J6 6ri   r=   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )rN   i	  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  rN   r  r  s      rg   r  PrimaryKeyField.__init__
  s(     E 	F 	ot-t>v>ri   r   r  r  s   @rg   rN   rN   	  s    ? ?ri   rN   c                       \ rS rSrSrS rSrg)r:   i  r3  c                 J     [        U5      $ ! [        [        4 a    Us $ f = frd   )r;  r  r	  rR  s     rg   r  FloatField.adapt  s*    	<I& 	L	r  r   Nr  r   ri   rg   r:   r:     s    Jri   r:   c                       \ rS rSrSrSrg)r4   i  r1  r   Nr  r   ri   rg   r4   r4     r  ri   r4   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.   i  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 )Nr
  )
max_digitsdecimal_places
auto_rounddecimalDefaultContextroundingDecimal_expr  r.   r  )r   r  r  r  r  r  r  r  s          rg   r  DecimalField.__init__"  s]    $,$ CG$:$:$C$COOB'T-@-@,@A	lD*D;F;ri   c                 2    U R                   U R                  /$ rd   )r  r  r  s    rg   r  DecimalField.get_modifiers+  s    !4!455ri   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  )r   rn   Ddecimal_values       rg   r  DecimalField.db_value.  sX    OO!M53qt3??c%jMM ))$))dmm)LLri   c                     Ub@  [        U[        R                  5      (       a  U$ [        R                  " [        U5      5      $ g rd   )re   r  r  r  rR  s     rg   r  DecimalField.python_value7  s6    %11??3u:.. ri   )r  r  r  r  r  )r
  rD  FN)r   r   r   r   r  r  r  r  r  r   r  r  s   @rg   r.   r.     s'    JCH<6/ /ri   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  )re   r  r  r   rR  s     rg   r  _StringField.adapt?  s:    eS!!Lu%%<<((5zri   c                 8    [        U [        R                  U5      $ rd   r  r  s     rg   r   _StringField.__add__F  s    %5dBIIu%MMri   c                 8    [        U[        R                  U 5      $ rd   r  r  s     rg   r>  _StringField.__radd__G  s    &6ubii&NNri   r   N)r   r   r   r   r  r   r>  r   r   ri   rg   r  r  >  s     NNri   r  c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )r"   iJ  r9  c                 :   > Xl         [        [        U ]  " U0 UD6  g rd   )
max_lengthr  r"   r  )r   r  r  r  r  s       rg   r  CharField.__init__M  s    $i'88ri   c                 T    U R                   =(       a    U R                   /=(       d    S $ rd   r  r  s    rg   r  CharField.get_modifiersQ  s    4DOO#4<<ri   r  )r   )	r   r   r   r   r  r  r  r   r  r  s   @rg   r"   r"   J  s    J9= =ri   r"   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )r9   iU  r+  c                 Z   > [         [        U ]  U5      nU(       a  US U R                   nU$ rd   )r  r9   r  r  )r   rn   r  s     rg   r  FixedCharField.adaptX  s-    nd1%8*4??+Eri   r   )r   r   r   r   r  r  r   r  r  s   @rg   r9   r9   U  s    J ri   r9   c                       \ rS rSrSrSrg)rZ   i_  r5  r   Nr  r   ri   rg   rZ   rZ   _  s    Jri   rZ   c                   2   ^  \ rS rSrS rSU 4S jjrSrU =r$ )FieldDatabaseHookic  c                     [        S5      e)NzSubclasses must implementr  rb  s     rg   _db_hookFieldDatabaseHook._db_hookd  s    !"=>>ri   c                   > UR                   R                  b  [        UR                   R                  [        5      (       aA  UR                   R                  R	                  U R
                  5        U R                  S 5        O7U R                  UR                   R                  5        OU R                  S 5        UR                   R                  R                  U R
                  5        [        [        U ]+  XU5      $ rd   )rZ  r  re   rR   r  r  	_db_hooksr  r  r  r,  r   r  r  r  r  s       rg   r,  FieldDatabaseHook.bindg  s    ;;+%++..66$$44T]]Cd#ekk223MM$
 	$$T]]3&25NNri   r   r  )r   r   r   r   r  r,  r   r  r  s   @rg   r  r  c  s    ?O Ori   r  c                   $    \ rS rSrSrS rS rSrg)r   ix  r(  c                 L    Uc  [         U l        g UR                  5       U l        g rd   )	bytearrayr  r	  rb  s     rg   r  BlobField._db_hook{  s!     )D ( 8 8 :Dri   c                     [        U[        5      (       a  UR                  S5      n[        U[        5      (       a  U R	                  U5      $ U$ )Nr  )re   r  r  r  r  rR  s     rg   r  BlobField.db_value  sA    eS!!LL!56EeU##$$U++ri   )r  N)r   r   r   r   r  r  r  r   r   ri   rg   r   r   x  s    J;ri   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 )NrU  r   r   )r	  r  r   r  _BitField__current_flagr  s      rg   r  BitField.__init__  s/    )Q'h&77ri   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 rd   )_field_valuer  r  )r   r  rn   FlagDescriptorr  s      rg   r  .BitField.flag.<locals>.FlagDescriptor.__init__  s    ##nd46ri   c                 N    U R                   R                  U R                  ) 5      $ rd   )r,  r'  r-  r  s    rg   r  +BitField.flag.<locals>.FlagDescriptor.clear  s    {{**DKK<88ri   c                 L    U R                   R                  U R                  5      $ rd   )r,  r(  r-  r  s    rg   r  )BitField.flag.<locals>.FlagDescriptor.set  s    {{))$++66ri   c                 ~    Uc  U $ [        XR                  R                  5      =(       d    SnX0R                  -  S:g  $ r  )r   r,  r  r-  )r   r  r  rn   s       rg   r  -BitField.flag.<locals>.FlagDescriptor.__get__  s8    #K++*:*:;@q+11ri   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-  rX  )r   r  is_setrn   s       rg   r  -BitField.flag.<locals>.FlagDescriptor.__set__  s`    .$%IJJ++*:*:;@q[[(Ekk\)E++"2"2E:ri   c                 p    UR                  U R                  R                  U R                  5      S:g  5      $ r  )r\  r,  r'  r-  rn  s     rg   rX  -BitField.flag.<locals>.FlagDescriptor.__sql__  s)    wwt{{224;;?1DEEri   )r,  r-  rd   )r   r   r   r   r  r  r  r  r  rX  r   r  )r  r.  s   @rg   r.  r*    s(    7972
;F Fri   r.  )r&  r  )r   rn   r.  s     @rg   flagBitField.flag  sK    =''EA%"'1*D	FZ 	F2 d**ri   )__current_flagrd   )r   r   r   r   r  r<  r   r  r  s   @rg   r   r     s     
 +  +ri   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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 rd   )r  r  rs  r  r   re   _buffer)r   r  r  rn   s       rg   r  BigBitFieldData.__init__  sj     	&&**4995KEE9--e$E;@@t}}--dii8ri   c                 8    U R                   R                  5         g rd   )rB  r  r  s    rg   r  BigBitFieldData.clear  s    ri   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   rB  rm  r   r  byte_numbyte_offsetcur_sizes        rg   _ensure_lengthBigBitFieldData._ensure_length  sM     &sAt||$LLHqLH+D EF$$ri   c                 ^    U R                  U5      u  p#U R                  U==   SU-  -  ss'   g r  rM  rB  r   r  rJ  rK  s       rg   set_bitBigBitFieldData.set_bit  s.     $ 3 3C 8X1#34ri   c                 `    U R                  U5      u  p#U R                  U==   SU-  ) -  ss'   g r  rP  rQ  s       rg   	clear_bitBigBitFieldData.clear_bit  s1     $ 3 3C 8XA$4"55ri   c                     U R                  U5      u  p#U R                  U==   SU-  -  ss'   [        U R                  U   SU-  -  5      $ r  )rM  rB  r  rQ  s       rg   
toggle_bitBigBitFieldData.toggle_bit  sL     $ 3 3C 8X1#34DLL*a;.>?@@ri   c                     [        US5      u  p#[        U R                  5      nXB::  a  g[        U R                  U   SU-  -  5      $ )NrK  Fr   )rH  r   rB  r  rI  s        rg   r8  BigBitFieldData.is_set  sE     &sAt||$DLL*a;.>?@@ri   c                 X    U(       a  U R                  U5        g U R                  U5        g rd   )rR  rU  )r   r<  rn   s      rg   r  BigBitFieldData.__setitem__  s    #T)=ri   c                 ,    [        U R                  5      $ rd   )r   rB  r  s    rg   r  BigBitFieldData.__len__  s    4<<  ri   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   rG  )	re   r@  rB  r  r   
memoryviewr  r   rm  )r   r  datadiffs       rg   _get_compatible_data$BigBitFieldData._get_compatible_data  sp    e_--==Dy*=>>D5664y3t9$!8T\\((48ri   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$ )Nra  rG  r   )rz  )re   r@  rB  r  r   rb  r  maxr   r  r  r>  )	r   r  r"  rc  bufr  rv  r  bs	            rg   _bitwise_opBigBitFieldData._bitwise_op  s    e_--==Dy*=>>D566#c$iU"<<=""4<<C"2IAvXCF '
ri   c                 B    U R                  U[        R                  5      $ rd   )rk  r  r  r  s     rg   r9  BigBitFieldData.__and__  s    x}}55ri   c                 B    U R                  U[        R                  5      $ rd   )rk  r  r4  r  s     rg   r;  BigBitFieldData.__or__      x||44ri   c                 B    U R                  U[        R                  5      $ rd   )rk  r  xorr  s     rg   r  BigBitFieldData.__xor__  rq  ri   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   )rB  r  )r   rj  js      rg   r,  BigBitFieldData.__iter__  s3     A1XaLaq0  rV  c                 ,    [        U R                  5      $ rd   )reprrB  r  s    rg   r  BigBitFieldData.__repr__  s    DLL!!ri   c                 ,    [        U R                  5      $ rd   )r  rB  r  s    rg   	__bytes__BigBitFieldData.__bytes__
  s    T\\""ri   )rB  r  r  N)r   r   r   r   r  r  rM  rR  rU  rX  r8  r	  r  __delitem__r  re  rk  r9  r;  r  r,  r  r|  r   r   ri   rg   r@  r@    sf    A%56A
A K>K!	6551
"#ri   r@  c                   2   ^  \ rS rSrSS jrU 4S jrSrU =r$ )BigBitFieldAccessori  c                 J    Uc  U R                   $ [        XR                  5      $ rd   )r  r@  r  r  s      rg   r  BigBitFieldAccessor.__get__  s!    ::x33ri   c                   > [        U[        5      (       a  UR                  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 ]3  X5        g )Nr  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)re   rb  tobytesr   r  r@  rB  r  r  r  r  r  r  )r   r  rn   r  s      rg   r  BigBitFieldAccessor.__set__  s    eZ((MMOEy))%LE//%--(Es##LL)EE5)) 9 : :!40Ari   r   rd   )r   r   r   r   r  r  r   r  r  s   @rg   r  r    s    4B Bri   r  c                   2   ^  \ rS rSr\rU 4S jrS rSrU =r	$ )r   i"  c                 Z   > UR                  S[        5        [        [        U ]  " U0 UD6  g )NrU  )r	  r  r  r   r  r  s      rg   r  BigBitField.__init__%  s'    )U+k4)4:6:ri   c                 "    Ub  [        U5      $ U$ rd   r  rR  s     rg   r  BigBitField.db_value)  s    $0uU|;e;ri   r   )
r   r   r   r   r  r  r  r  r   r  r  s   @rg   r   r   "  s    (N;< <ri   r   c                   $    \ rS rSrSrS rS rSrg)r^   i-  r7  c                 z   [        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                  $ ! [         a    Us $ f = f)N    rL  r  )re   r  r   r  r  r7  r  rf  rR  s     rg   r  UUIDField.db_value0  s    eS!!c%jB&6Lu%%#e**:IIE*EeTYY''99	99U#''' 	L	s   B+ +B:9B:c                 z    [        U[        R                  5      (       a  U$ Ub  [        R                  " U5      $ S $ rd   )re   r  r7  rR  s     rg   r  UUIDField.python_value>  s1    eTYY''L#(#4tyy>$>ri   r   Nr   r   r   r   r  r  r  r   r   ri   rg   r^   r^   -  s    J?ri   r^   c                   $    \ rS rSrSrS rS rSrg)r   iD  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.)re   r  r   r  r  r  r7  r  rR  s     rg   r  BinaryUUIDField.db_valueG  s    eU##E
b(8$$U++s##E
b(8II%(EeTYY''$$U[[11 H I I ri   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  )re   r  r7  rb  r  r  rR  s     rg   r  BinaryUUIDField.python_valueT  sa    eTYY''Lz**MMOE:eU33%LE).):tyyu%DDri   r   Nr  r   ri   rg   r   r   D  s    JIEri   r   c                    ^  U 4S jnU$ )Nc                 d   > U R                   R                  R                  R                  TU 5      $ rd   )r  rZ  r  r  )r   r  s    rg   dec_date_part.<locals>.dec_  s&    zz((55iFFri   r   r  r  s   ` rg   
_date_partr  ^  s    GJri   c                     U=(       d    S nU H)  n U" [         R                   R                  X5      5      s  $    U $ ! [         a     M<  f = f)Nc                     U $ rd   r   xs    rg   rh   "format_date_time.<locals>.<lambda>d  s    ari   )rw   strptimer  )rn   formatspost_processfmts       rg   r   r   c  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   )rw   r  r	  r  rf  s    rg   r	  r	  l  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$ )_BaseFormattedFieldis  Nc                 @   > Ub  Xl         [        [        U ]  " U0 UD6  g rd   )r  r  r  r  )r   r  r  r  r  s       rg   r  _BaseFormattedField.__init__v  s#    "L!414B6Bri   )r  rd   )r   r   r   r   r  r  r   r  r  s   @rg   r  r  s  s    GC Cri   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
5      5      r\	" \
" S5      5      r\	" \
" S5      5      rSrg)r-   i|  r-  )r   r   z%Y-%m-%d %H:%M:%S.%f%zz%Y-%m-%d %H:%M:%S%zr   c                 h    U(       a*  [        U[        5      (       a  [        XR                  5      $ U$ rd   )re   r  r   r  rR  s     rg   r  DateTimeField.adapt  s%    Zs++#E<<88ri   c                 `    U R                   R                  R                  R                  U 5      $ rd   r  rZ  r  r  r  s    rg   r  DateTimeField.to_timestamp  #    zz((55d;;ri   c                 `    U R                   R                  R                  R                  X5      $ rd   r  rZ  r  r  r   r^  s     rg   truncateDateTimeField.truncate  #    zz((66tBBri   r   r   r   r   r   r   r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   ri   rg   r-   r-   |  sz    JG
<C Jv&'DZ()E
:e$
%CJv&'Dj*+Fj*+Fri   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       $ rd   )r   r  s    rg   rh   !DateField.adapt.<locals>.<lambda>  s
    1668ri   )re   r  r   r  rw   r   r   rn   pps      rg   r  DateField.adapt  sM    Zs++#B#E<<<<z%):):;;::<ri   c                 `    U R                   R                  R                  R                  U 5      $ rd   r  r  s    rg   r  DateField.to_timestamp  r  ri   c                 `    U R                   R                  R                  R                  X5      $ rd   r  r  s     rg   r  DateField.truncate  r  ri   r   r   r   r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r   r   ri   rg   r,   r,     sM    JG<C Jv&'DZ()E
:e$
%Cri   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	)
r[   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       $ rd   )r   r  s    rg   rh   !TimeField.adapt.<locals>.<lambda>  s
    qvvxri   )re   r  r   r  rw   r   	timedeltaminr  s      rg   r  TimeField.adapt  s    %%%''||R@@E8#4#455zz|#E83E3E!F!F%%))E17799ri   r   r   r   r   N)r   r   r   r   r  r  r  r  r  r   r   r   r   r   ri   rg   r[   r[     sB    JG	 Jv&'Dj*+Fj*+Fri   r[   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   Frc  )r  rZ  r  
resolutionr_   r  r  )r   r  r^  r  s      rg   r  !_timestamp_date_part.<locals>.dec  s]    ZZ&&??Q& doo??,0 	y"*;*;D*ABBri   r   r  s   ` rg   _timestamp_date_partr    s    C
 Jri   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 )r\   i  r  r
  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 )Nr  r   r   r  r
  z,TimestampField resolution must be one of: %sr  c              3   8   #    U  H  n[        U5      v   M     g 7frd   )r  )r|  rv  s     rg   r~  *TimestampField.__init__.<locals>.<genexpr>  s     &N7M!s1vv7Mr  i@B rz   FrU  )r  r  r  valid_resolutionsr  r[  ticks_to_microsecondrz   r   rw   r   r	  r  r\   r  )r   r  r  dfltr  s       rg   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=ri   c                     [         R                   " [        R                  " [        R                  " UR	                  5       5      5      S S 6 $ )N   )rw   r   gmtimemktime	timetuple)r   r   s     rg   local_to_utcTimestampField.local_to_utc  s4    
   $++dkk",,..I"J2A"NOOri   c                     [         R                  " UR                  5       5      n[        R                  R	                  U5      $ rd   )calendartimegmutctimetuplerw   rx   )r   r   r|   s      rg   utc_to_localTimestampField.utc_to_local  s0    
 __R__./  ..r22ri   c                     U R                   (       a$  [        R                  " UR                  5       5      $ [        R
                  " UR                  5       5      $ rd   )rz   r  r  r  r   r  r  rR  s     rg   get_timestampTimestampField.get_timestamp  s7    88??5#5#5#788;;u011ri   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ư>)re   rw   r   r   r   r   r   roundr  r  microsecond)r   rn   r   s      rg   r  TimestampField.db_value  s    =eX..//x}}--%%ejj%++uyyIEuU__4566&&u-	??Q++g56I(I5#$$ri   c                 h   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  )re   r   r;  r  rH  r  rz   r}   rw   rx   r{   )r   rn   ticksmicrosecondss       rg   r  TimestampField.python_value  s    EC<!@!@"%e__="5+D+D#DE xx(/ ))77>,?ri   c                     U R                   S:  a  U [        U R                   SS9-  OU nU R                  R                  R                  R                  U5      $ r  )r  r_   r  rZ  r  r  )r   r^  s     rg   r  TimestampField.from_timestamp%  sL    ??Q& doo??,0 	zz((77==ri   r   r   r   r   r   r   )r  r  rz   )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r  )r|  rv  r  s   00@rg   r\   r\     s    (-a11Q1>"P32%"$>
 (01D)'23E
'.
/C(01D*845F*845Fm 2s   Br\   c                        \ rS rSrS rS rSrg)rD   i2  c                 f    Ub.  [         R                  " S[        R                  " U5      5      S   $ g )N!Ir   )structr  socket	inet_atonrx
  s     rg   r  IPField.db_value3  s-    ?==v'7'7'<=a@@ ri   c                 `    Ub+  [         R                  " [        R                  " SU5      5      $ g )Nr  )r  	inet_ntoar  packrx
  s     rg   r  IPField.python_value7  s(    ?##FKKc$:;; ri   r   N)r   r   r   r   r  r  r   r   ri   rg   rD   rD   2  s    A<ri   rD   c                       \ rS rSrSr\rSrg)r   i<  r)  r   N)r   r   r   r   r  r  r  r   r   ri   rg   r   r   <  s    JEri   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )r   iA  c                 B   > [         [        U ]
  " U0 UD6  Ub  Xl        g g rd   )r  r   r  r  )r   r  r  r  r  s       rg   r  BareField.__init__B  s'    i'88J ri   c                     g rd   r   rn  s     rg   r  BareField.ddl_datatypeG  ri
  ri   r  rd   )r   r   r   r   r  r  r   r  r  s   @rg   r   r   A  s    
 ri   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$ )r<   iK  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.r   )r	  r  r<   r  r   _is_self_referencer|  r  declared_backrefbackref	on_delete	on_update
deferrabler  object_id_namer  constraint_name)r   r  r  r  r	  r
  r  	_deferredr|  to_fieldr  r  r  related_namer  r  r  s                   rg   r  ForeignKeyField.__init__O  s    
 	'4(ot-t>v>  B CE B CE# : ;"G"'6/ '""$!,".ri   c                     [        U R                  [        5      (       a  [        R                  $ [        U R                  [
        5      (       d  U R                  R                  $ [        R                  $ rd   )re   r  r   r   r  r   r@   r  s    rg   r  ForeignKeyField.field_typer  sL    dnnl33"---DNNI66>>,,,&&&ri   c                    > [        U R                  [        5      (       d  U R                  R                  5       $ [        [
        U ]  5       $ rd   )re   r  r   r  r  r<   r	  s    rg   r  ForeignKeyField.get_modifiersz  s7    $..)44>>//11_d9;;ri   c                     U R                   =(       dT    SU R                  R                  R                  < SU R                  < SU R
                  R                  R                  < 3$ )Nfk_r  _refs_)r  r  rZ  r  r<  r|  r  s    rg   get_constraint_name#ForeignKeyField.get_constraint_name  sN    ## - -JJ''NN  ++(- 	-ri   c                 8    U R                   R                  U5      $ rd   )r  r  rR  s     rg   r  ForeignKeyField.adapt  s    ~~##E**ri   c                     [        XR                  5      (       a  [        XR                  R                  5      nU R                  R                  U5      $ rd   )re   r|  r   r  r  r  rR  s     rg   r  ForeignKeyField.db_value  s:    e^^,,E>>#6#67E~~&&u--ri   c                 p    [        XR                  5      (       a  U$ U R                  R                  U5      $ rd   )re   r|  r  r  rR  s     rg   r  ForeignKeyField.python_value  s+    e^^,,L~~**511ri   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!+)r<  r  r  r  rZ  r  r  r|  re   r  r  r   rY  r  r<   r,  r  r?  r  r  rX  r  backref_accessor_classr  s       rg   r,  ForeignKeyField.bind  s   '+}}U';';tD"""&"2"2D""d*##u,#  D((-(8(8$@ A A """Ndnnc**$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; ( ri   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  rm  rW   r6   r  r  r|  r  r	  r  r
  r  r  )r   explicit_namer;  r  s       rg   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>?@ri   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|  rZ  r  r   s     rg   r   ForeignKeyField.__getattr__  sl    ??4   !LMM>>''...>>''..t44 ACGH I 	Iri   )r  r  r<  r  r  r  r  r  r  r	  r
  r  r|  r  )NNNNNNNNNTNNr  r  )r   r   r   r   rz  r  r  r#  r  r  r  r  r  r  r  r  r,  r(  r   r   r  r  s   @rg   r<   r<   K  sd    'N,BF<@?CDH!/F ' '<
-+.
2
";H,I Iri   r<   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$ )r0   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 )Nr<  r=  rY  )r<  r=  rY  )	field_kwargsro  rel_model_namer0   _unresolvedr  r  r  r  )r   r0  r  r  s      rg   r  DeferredForeignKey.__init__  sg    ",224&&**40 $0

=1F#

=1 	1 	3ri   c                 B    [        U R                  40 U R                  D6$ rd   )r0   r0  r/  )r   memos     rg   __deepcopy__DeferredForeignKey.__deepcopy__  s    !$"5"5K9J9JKKri   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)r<   r/  rY  r  rZ  set_primary_keyr  	add_field)r   r|  r  s      rg   	set_modelDeferredForeignKey.set_model  sa    	OTOT=N=NOJJ,,TYY>JJ&&tyy%8ri   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  r0   r1  r  
attrgetterr0  r   ro  r:  discard)	model_cls
unresolveddrs      rg   resolveDeferredForeignKey.resolve  sj    .:: ( 3 3H =?
B  I$6$6$<$<$>>Y'"..66r: ri   )r/  r0  rd   )r   r   r   r   r  r1  r  r  r  r5  r:  r  rB  r   r  r  s   @rg   r0   r0     s9    %K3 HL9 ; ;ri   r0   c                   &    \ rS rSrS rS rS rSrg)r1   i  c                     / U l         g rd   _refsr  s    rg   r  DeferredThroughModel.__init__  s	    
ri   c                 >    U R                   R                  XU45        g rd   )rG  r  rp  s       rg   	set_fieldDeferredThroughModel.set_field  s    

5./ri   c                 r    U R                    H'  u  p#nXl        UR                  R                  XC5        M)     g rd   )rG  through_modelrZ  r9  )r   rM  	src_modelm2mfieldr  s        rg   r:  DeferredThroughModel.set_model   s-    )-%I%2"OO%%d5 *4ri   rF  N)r   r   r   r   r  rJ  r:  r   r   ri   rg   r1   r1     s    06ri   r1   c                   (    \ rS rSrS=r=r=rrSrSr	g)	MetaFieldi  NFr   )
r   r   r   r   r<  rU  r  r  rY  r   r   ri   rg   rR  rR    s    +//K/'/EDKri   rR  c                   8   ^  \ rS rSrU 4S jrSS jrS rSrU =r$ )ManyToManyFieldAccessori  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  rT  r  r  r|  rM  rZ  
model_refsr  src_fkdest_fk)r   r  r  r  src_fksdest_fksr  s         rg   r   ManyToManyFieldAccessor.__init__  s    %t5eDI[[
"00$$**55djjA%%++66t~~F"jj$*<*<> ? ?"nnd.@.@B C Caj{ri   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	  )rW  r  r   re   rd  rX  r  r  r  _prevent_unsavedr  ManyToManyQueryr|  r[  rM  r  r  )r   r  r  force_queryr  r  src_ids          rg   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   rW  r  r  r  r^  r  r  r  )r   r  rn   ra  rr  s        rg   r  ManyToManyFieldAccessor.__set__.  sm    ;;#8#8#=#=>>djj9915XG H HX48		%	-ri   )rX  r  r|  rW  rM  r   )	r   r   r   r   r  r  r  r   r  r  s   @rg   rT  rT    s    # $. .ri   rT  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$ )rF   i7  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.)re   r1   rY  r	  r  r|  r  _through_model
_on_delete
_on_updater^  _is_backref)r   r  r  rM  r	  r
  prevent_unsavedrk  s           rg   r  ManyToManyField.__init__:  s}    $}.BCC]++ !A B BI$9Y=R  "? @ @+## /&ri   c                     [        U 5      $ rd   )rT  r  s    rg   _get_descriptorManyToManyField._get_descriptorL  s    &t,,ri   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  rM  r	  r
  rk  r   )re   rh  r1   rJ  r  rF   r,  rk  r  rM  ri  rj  r  rZ  r  r|  r9  )r   r  r  r  many_to_many_fieldr  s        rg   r,  ManyToManyField.bindO  s    d))+?@@))%t<ot)%}E!0

"00//// ""  <<A5;;+;+;c+ADLNN  **4<<9KL  ri   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 rd   )r  rk  r  r|  )r   r  r  s      rg   
get_modelsManyToManyField.get_modelsa  s[    &,tzz*!!!4>>2.4 '5 6 '5(! '5 6 	6 6s   Ac                 ^    U R                   c  U R                  5       U l         U R                   $ rd   )rh  _create_through_modelr  s    rg   rM  ManyToManyField.through_modelf  s+    &"&"<"<">D"""ri   c                     Xl         g rd   )rh  rR  s     rg   rM  ry  l  s    #ri   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>.Metait  z%s_%s_throughTr   N)r   r   r   r   r  rZ  r  rZ  re  r  r  r
  r   )r  r   r   tabless   rg   r  r}  t  sb    zz''00HZZ%%,,F(5=8J))..#))..1Gri   r  )r	  r
  Through)
ru  rZ  r  ri  rj  r  r<   r   r  rG   )	r   r  r  r  attrs
klass_namer  r   r~  s	   `     @@@rg   rx  %ManyToManyField._create_through_modelp  s    ??$S7:CjAjU++((jA	 	  $T__MIINNOC:6:IINNOC:6:D
 '*llCLLA
J%00# Bs   Cc                     U R                   $ rd   )rM  r  s    rg   get_through_model!ManyToManyField.get_through_model  s    !!!ri   )rk  ri  rj  r^  rh  r  r|  )NNNNTFr  )r   r   r   r   rT  r  r  ro  r,  ru  r  rM  r]  rx  r  r   r  r  s   @rg   rF   rF   7  s`    ,NJNCH'$-M$6
 # #
 $ $1*" "ri   rF   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 rd   )field_classfield_instancer  r  r  )r   r  r  r  r8   r  s        rg   r  VirtualField.__init__  s:    *6D<L<L).):eglD*D;F;ri   c                 V    U R                   b  U R                   R                  U5      $ U$ rd   )r  r  rR  s     rg   r  VirtualField.db_value  s*    *&&//66ri   c                 V    U R                   b  U R                   R                  U5      $ U$ rd   )r  r  rR  s     rg   r  VirtualField.python_value  s*    *&&33E::ri   c           	      r    Xl         U=U l        =U l        U l        [	        XU R                  XU5      5        g rd   )r  r<  r  r  rX  r  r  s       rg   r,  VirtualField.bind  s4    
8<<<49t~T00dCDri   )r<  r  r  r  r  rd   r  )r   r   r   r   r  r  r  r  r,  r   r  r  s   @rg   r  r    s#    K<


E Eri   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 rd   )field_names_safe_field_names)r   r  s     rg   r  CompositeKey.__init__  s    &!%ri   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 rd   )r  r  r  rZ  r  r  r   fs     rg   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 rd   )re  r  r   )r   r  r  r  s       rg   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.)	re   rd  re  r	  r   r  r  r>  rX  )r   r  rn   r  field_values        rg   r  CompositeKey.__set__  sx    %$// 7 8 8u:T--.. H I I )% 0CH..s3[A !1ri   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 rd   )zipr  r  rZ  r  r
   r  r  )r   r  r  rn   r  s        rg   r  CompositeKey.__eq__  sd    +.t/?/?+GI+G<5 

((//6%?+G 	 Ihmm[11Is   2A)c                     X:H  ) $ rd   r   r  s     rg   r  CompositeKey.__ne__  s    ri   c                 X    [        U R                  R                  U R                  45      $ rd   )r  r  r   r  r  s    rg   r  CompositeKey.__hash__  s"    TZZ(($*:*:;<<ri   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 ry  )r  r{  r\  r  r  r  rZ  r  )r   ro  rr  r  s       rg   rX  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 rd   )r  r<  r  r  rX  r  s       rg   r,  CompositeKey.bind  s+    
8<<<49t~yy$'ri   )r  r<  r  r  r  r  rd   r  )r   r   r   r   rb
  r  r  r  r  r  r  r  r  rX  r,  r   r   ri   rg   r&   r&     sE    H& & &
B2
 =P(ri   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 rd   r  r  s    rg   r  _SortedFieldList.__init__  s    
ri   c                      U R                   U   $ rd   )r  )r   rv  s     rg   r	  _SortedFieldList.__getitem__  s    {{1~ri   c                 ,    [        U R                  5      $ rd   )r  r  r  s    rg   r,  _SortedFieldList.__iter__  rN  ri   c                     UR                   n[        U R                  U5      n[        U R                  U5      nXR                  X4 ;   $ rd   )r  r   r  r   r  )r   r<  r	  rv  rv  s        rg   __contains___SortedFieldList.__contains__  s=    NN

A&Q'{{1'''ri   c                 L    U R                   R                  UR                  5      $ rd   )r  r  r  r  s     rg   r  _SortedFieldList.index  s    zz00ri   c                     UR                   n[        U R                  U5      nU R                  R                  X25        U R                  R                  X15        g rd   )r  r   r  ro  r  )r   r<  r	  rv  s       rg   ro  _SortedFieldList.insert  s?    NN

A&

!1#ri   c                 Z    U R                  U5      nU R                  U	 U R                  U	 g rd   )r  r  r  )r   r<  r  s      rg   rz	  _SortedFieldList.remove  s'    jjKKJJsOri   )r  r  N)r   r   r   r   r  r  r	  r,  r  r  ro  rz	  r   r   ri   rg   r  r    s*    #I!(1$ri   r  c                   @   \ 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%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))rT   i  Nc                 T    Xl         X l        UR                  S[        5        X0l        g )Nr  )r  r  r	  r}  r9  )r   r  r  r9  s       rg   r  SchemaManager.__init__   s"    
!""7L9.ri   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  rZ  r  r>   r  s     rg   r  SchemaManager.database  sL    ^^8tzz//88:& (ACG::(N O O	ri   c                     Xl         g rd   ra  rR  s     rg   r  r    s    ri   c                 N    U R                   R                  " S0 U R                  D6$ r3  )r  r  r9  r  s    rg   _create_contextSchemaManager._create_context  s     }},,Dt/C/CDDri   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 r  r   r[
  ztable_settings must be stringsSTRICTzWITHOUT ROWIDr  r  )r  r  rJ  r\  r  rZ  composite_keyrY  r  r  r[  r  r  rW   r  sorted_fieldsr  re   r<   r  r(  r  rm  _create_table_option_sqltable_settingsrg  r  r  strict_tableswithout_rowidr[  )r   ru  r  is_tempro  r  r  rP  
field_name
pk_columnsr  r  setting
extra_optss                 rg   _create_tableSchemaManager._create_table  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)!'3//$%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   rH  )rX  r  rZ  r  r  rp  re   ri  rY  r[  rW   r  r  r  )r   r  rB  rs  rn   s        rg   r  &SchemaManager._create_table_option_sql?  s    TZZ--55;WEL 1JCeT**E??!KK--EE
OELL3s8U"3#>? 2 ri   c                 ^    U R                   R                  U R                  " SSU0UD65        g Nru  r   )r  r  r  r   ru  r  s      rg   r  SchemaManager.create_tableN  s'    d00FdFgFGri   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      $ )Nr  r  r  r  r  )r  rJ  r  r\  r6   rg  r   r  rr  ru  rP  ro  s         rg   _create_table_asSchemaManager._create_table_asQ  su    ##%88K00 26EG 	 KK()V\*567U	ri   c                 d    U R                   " X4SU0UD6nU R                  R                  U5        g )Nru  )r  r  r  r  s         rg   create_table_asSchemaManager.create_table_as\  s.    ##JIDIDIc"ri   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)r  rJ  r\  r  r  )r   ru  r  ro  s       rg   _drop_tableSchemaManager._drop_table`  sy    ##%4/]KDJJ 	 ;;y!!++j)C 
 [[$$++k*C
ri   c                 ^    U R                   R                  U R                  " SSU0UD65        g r  )r  r  r  r  s      rg   r  SchemaManager.drop_tablej  s'    d..DDDGDEri   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$ )Nri  zTRUNCATE TABLE z RESTART IDENTITYr  )r  r  r  rJ  r\  r  )r   restart_identityr  r  ro  s        rg   _truncate_tableSchemaManager._truncate_tablem  s    ]]  ((*W^,SS_> ""$,,->?CCDJJO++12C++j)C
ri   c                 X    U R                   R                  U R                  X5      5        g rd   )r  r  r  )r   r  r  s      rg   r  SchemaManager.truncate_tablez  s     d223CMNri   c                     U R                   R                  R                  5        Vs/ s H  nU R                  X!5      PM     sn$ s  snf rd   )r  rZ  fields_to_index_create_indexr   ru  r  s      rg   _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   )re   r?   r  r  ru  rq  r  rX   r  r  r\  )r   r  ru  s      rg   r  SchemaManager._create_index  s{    eU##==22

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

4($...99 &e,##%))%00ri   c                 f    U R                  US9 H  nU R                  R                  U5        M      g Nru  )r  r  r  r   ru  rr  s      rg   create_indexesSchemaManager.create_indexes  s,    ))t)4EMM!!%( 5ri   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 rd   )r  rZ  r  re   r?   _drop_indexr  s      rg   _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  re   rn  rY   rW  r6   r  r  rJ  r\  )r   r  ru  r  r  s        rg   r  SchemaManager._drop_index  s    !	DMM11%IellE**u||/C/C 4 4ekkBJ,J "#Z	"ri   c                     Uc  Uc  [        S5      eU(       a+  [        U R                  U4UR                  UR                  S9nU R
                  R                  U R                  X#S95      $ )Nz!field or index must be specified.rt  rv  r   )r  rH   r  rt  r  r  r  r  )r   r  r  ru  s       rg   
drop_indexSchemaManager.drop_index  s`    =U]@AAtzzE8ELL%*%5%57E}}$$T%5%5e%5%GHHri   c                 f    U R                  US9 H  nU R                  R                  U5        M      g r  )r  r  r  r  s      rg   drop_indexesSchemaManager.drop_indexes  s,    ''T'2EMM!!%( 3ri   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".)rb
  r  r  r  r  r  s     rg   _check_sequencesSchemaManager._check_sequences  s8    ~~T]]%<%< 138::> ? ? &=ri   c                     UR                   R                  R                  (       a4  [        UR                   R                  R                  UR                  5      $ [        UR                  5      $ rd   )r  rZ  rZ  r6   rb
  r  s     rg   _sequence_for_field!SchemaManager._sequence_for_field  sE    ;;##%++++22ENNCC%..))ri   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  rb
  r  rJ  r\  r  r  s     rg   _create_sequenceSchemaManager._create_sequence  s^    e$}},,U^^<<$_&W/0S11%89; =ri   c                 d    U R                  U5      nUb  U R                  R                  U5        g g rd   )r  r  r  r   r  seq_ctxs      rg   create_sequenceSchemaManager.create_sequence  s/    ''.MM!!'* ri   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     rg   _drop_sequenceSchemaManager._drop_sequence  s^    e$==((88$_&W-.S11%89; 9ri   c                 d    U R                  U5      nUb  U R                  R                  U5        g g rd   )r!  r  r  r  s      rg   drop_sequenceSchemaManager.drop_sequence  s/    %%e,MM!!'* ri   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)r  rJ  r\  r  r(  r  s     rg   _create_foreign_key!SchemaManager._create_foreign_key  sI     "(U[[!!U11$78	:ri   c                 X    U R                   R                  U R                  U5      5        g rd   )r  r  r'  r  s     rg   create_foreign_key SchemaManager.create_foreign_key  s    d66u=>ri   c                     U R                   R                  (       aL  U R                  R                  R                   H'  nUR
                  (       d  M  U R                  U5        M)     g g rd   )r  r  r  rZ  r  rb
  r  r  s     rg   create_sequencesSchemaManager.create_sequences  sE    ==""))77>>>((/ 8 #ri   c                 h    U R                  5         U R                  " U40 UD6  U R                  US9  g r  )r-  r  r  )r   ru  table_optionss      rg   
create_allSchemaManager.create_all  s2    $0-0&ri   c                     U R                   R                  (       aL  U R                  R                  R                   H'  nUR
                  (       d  M  U R                  U5        M)     g g rd   )r  r  r  rZ  r  rb
  r$  r  s     rg   drop_sequencesSchemaManager.drop_sequences  sE    ==""))77>>>&&u- 8 #ri   c                 Z    U R                   " U40 UD6  U(       a  U R                  5         g g rd   )r  r4  )r   ru  r4  r  s       rg   drop_allSchemaManager.drop_all  s'    ((! ri   )r  r9  r  rd   r  r  )NNTr  )&r   r   r   r   r  r  r  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r*  r-  r1  r4  r7  r   r   ri   rg   rT   rT     s    /   __ E(TH	#FOA
1)-
"I)?
*;+
;+
:?0'
."ri   rT   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)Metadatai  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  combinedr  _sorted_field_listr  sorted_field_namesrA  _default_by_name_default_dict_default_callables_default_callable_listr   ro  r  table_functionr  make_table_namer  rn  rd  r
  r  rW  rY  r  r  only_save_dirty
depends_onr  r  r  r  refsbackrefsrS  defaultdictrV  model_backrefs
manytomanyr  rp  rX  r  keys_additional_keysr  )r   r  r  r  r
  rY  r  rZ  rE  rF  r  db_tablerC  r  r  r  r  r  r  rs  rn   s                        rg   r  Metadata.__init__  s     6 7!J
 "2"4"$ ""$&(#NN((*	,"4!00 --e4#335  %(/tG}R&&377T0.$,**"	%11$7)55d;}" ,,.JCD#u% ) #FKKM 2 ri   c                     U R                   (       a"  [        R                  " SSU R                  5      $ [	        U R
                  R                  5      $ )Nr  r  )r  r   rm  r  rq  r  r   r  s    rg   rD  Metadata.make_table_name:  s7    ""66)S$))44tzz2233ri   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  rS  dequer  popleftr  rG  rp  r  rZ  rH  )r   rG  rH  depth_firstrB  rE  queuer  currfkr  s              rg   model_graphMetadata.model_graph?  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 ri   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 rd   )r|  rG  rV  r  r  rZ  rH  rJ  r   r  rels      rg   add_refMetadata.add_refX  sg    oo		%##E*$(JJ		5!		  ,33E:ri   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 rd   )r|  rG  rV  rz	  rZ  rH  rJ  r  r\  s      rg   
remove_refMetadata.remove_ref_  sa    ooIIe##E*IIu%		  ,33E:ri   c                 4    XR                   UR                  '   g rd   rK  r  r  s     rg   add_manytomanyMetadata.add_manytomanyf  s    &+

#ri   c                 2    U R                   UR                  	 g rd   rd  r  s     rg   remove_manytomanyMetadata.remove_manytomanyi  s    OOEJJ'ri   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)rZ  rL  r  )rn  rY   r  r  r<  rZ  r  r  r  s     rg   r[  Metadata.tablel  sd    ;;040B0BC0Bu""0BC{{zz--)DK {{	 Ds   A8
c                     [        S5      e)NzCannot set the "table".r  rR  s     rg   r[  rk  w  s    677ri   c                     S U l         g rd   )rn  r  s    rg   r[  rk  {  s	    ri   c                     U R                   $ rd   )rW  r  s    rg   rZ  Metadata.schema  s    ||ri   c                     Xl         U ?g rd   )rW  r[  rR  s     rg   rZ  ro    s    Jri   c                     U R                   (       a   [        U R                   U R                  5      $ [        U R                  5      $ rd   )rW  r6   r  r  s    rg   r
  Metadata.entity  s-    <<$,,88$//**ri   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 rd   )rd  r=  r  r  r>  r  s     rg   _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$ rd   )re   
ModelAliasr  rV  r  rJ  )r   r  forwardrefsrH  s       rg   get_rel_for_modelMetadata.get_rel_for_model  sO    eZ((KKEoo))%4&&**5"5&&ri   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 rd   )r  remove_fieldrK  rh  re   rR  r[  r,  r  r  r  r<  r<  r=  ro  rt  rU  rA  r?  rA  rB  r  r@  r?  r<   r^  rF   re  )r   r  r  r  s       rg   r9  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?/ri   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rd   )r  r[  r  r  r<  r<  r   r=  rz	  rt  rU  rA  rA  r>  rB  r@  r?  r  re   r<   ra  )r   r  originalrv  r  r  s         rg   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 rd   )re   r&   r  r9  rY  r  r  rb
  )r   r  r  s      rg   r8  Metadata.set_primary_key  sE    '|<t#    !  	ri   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 )NFr   )r  re  rY  r  r  )r   r  s     rg   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$ rd   )r?  rT  rB  )r   ddr  rU  s       rg   get_default_dictMetadata.get_default_dict  s7    ""'')#'#>#>J$YBN $?	ri   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$ )Nr  z;Expected either a field name or a subclass of Node. Got: %s)rt  )r  rY  r  rt  r  rH   r  r  r
  re   ri  rd  re  r  r<  r  )r   r
  r  	index_objindex_partsrt  r  r^  s           rg   r  Metadata.fields_to_index  s$   ##A}}ww!(((z$**qd18801 > ?	 $ I)T**y)Ie}55&/#'D!$,,dmmD&9:#D$//d+( *EGK*L M M ( z$**fLM &  ri   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 rd   )	r  r  rW  r  r[  re   rR   r  r  )r   r  hooks      rg   set_databaseMetadata.set_database
  sN     '/

$J h&&8<<+?HNNDN #ri   c                     Xl         U ?g rd   )r  r[  )r   r  s     rg   set_table_nameMetadata.set_table_name  s    $Jri   )&rM  r  r?  rB  rA  r@  rW  r=  rn  r  rH  r  r<  r  r  r  rA  rF  r  r
  r  rK  r  rJ  rV  r  rE  r  rY  rG  r>  r  r  rC  r  r  r  r  )NNNNNNFNNNNNFFNT)TTTr  )r   r   r   r   r  rD  rY  r^  ra  re  rh  r  r[  r]  deleterrZ  r
  rt  ry  r9  r|  r8  r  r  r  r  r  r   r   ri   rg   r:  r:    s    FJ<@AEDHEI$(AF4
2;;,(   \\8 8 ]]    ]]  + +G'!'F&:"P6ri   r:  c                   2   ^  \ rS rSr/ rU 4S jrS rSrU =r$ )SubclassAwareMetadatai  c                 l   > [         [        U ]
  " U/UQ70 UD6  U R                  R	                  U5        g rd   )r  r  r  r  r  r   r  r  r  r  s       rg   r  SubclassAwareMetadata.__init__  s/    #T3EKDKFK5!ri   c                 :    U R                    H  nU" U5        M     g rd   )r  )r   r;   r  s      rg   
map_models SubclassAwareMetadata.map_models#  s    [[EuI !ri   r   )	r   r   r   r   r  r  r  r   r  r  s   @rg   r  r    s    F" ri   r  c                       \ rS rSrSrg)r3   i(  r   Nr  r   ri   rg   r3   r3   (  r  ri   r3   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$ )	ModelBasei+  )r  r  r
  rY  r  rZ  rC  r  rE  r  r  r  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  rY  rZ  r  rZ  schema_optionsmodel_metadata_classschema_manager_classzover-determined primary key %s.Fr  __composite_key__Tr  r  c                 J   > STR                   < SU R                  5       < S3$ )Nr   r  r   )r   r  )r   r  s    rg   rh   #ModelBase.__new__.<locals>.<lambda>  s    dlln3.ri   z%sDoesNotExistr   ),rO  r   r  r  r  r  r  rp  r  r   r  rZ  r	   rY  inheritablerM  r	  r  rZ  re   rn  r  r  r:  rT   rs  r  rW  r8   r  r  r  r   r&   r  r8  r9  rX  r   r  r3   validate_modelr0   rB  )r  r  basesr  r  meta_optionsrP  r	  r  r]
  pk_name	parent_pkrj  	base_metaall_inheritablesoptsr  Schemar  rs  rn   r  exc_name	exc_attrsexception_classr  s   `                        rg   r  ModelBase.__new__1  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'
ri   c                      SU R                   -  $ )Nz<Model: %s>)r   r  s    rg   r  ModelBase.__repr__  s    t}},,ri   c                 4    [        U R                  5       5      $ rd   )r  r  r  s    rg   r,  ModelBase.__iter__  s    DKKM""ri   c                 $    U R                  U5      $ rd   )	get_by_idr   rs  s     rg   r	  ModelBase.__getitem__  s    ~~c""ri   c                 &    U R                  X5        g rd   )	set_by_id)r   rs  rn   s      rg   r  ModelBase.__setitem__  s    s"ri   c                 &    U R                  U5        g rd   )delete_by_idr  s     rg   r~  ModelBase.__delitem__  s    #ri   c                 T     U R                  U5        g! U R                   a     gf = fr  )r  r3   r  s     rg   r  ModelBase.__contains__  s2    	NN3     		s    ''c                 >    U R                  5       R                  5       $ rd   )r  r  r  s    rg   r  ModelBase.__len__  s    {{}""$$ri   c                     gry  r   r  s    rg   __bool__ModelBase.__bool__  s    tri   c                 L    UR                  U R                  R                  5      $ rd   )r\  rZ  r[  rn  s     rg   rX  ModelBase.__sql__  s    wwtzz''((ri   r   )r   r   r   r   r  r  r  r  r,  r	  r  r~  r  r  r  __nonzero__rX  r   r  r  s   @rg   r  r  +  sN     : ;K
Yv-###%#K) )ri   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 rd   )r  r  r  r  )r   r  r  r  r  s        rg   r  _BoundModelsContext.__init__  s     "*ri   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  )	rK  r  r  rZ  r  r,  r  r  r  )r   r  s     rg   r  _BoundModelsContext.__enter__  ss     [[E&&u{{';';<JJt}}dnnd6H6H #DKK 0  2 ! {{ri   c           	          [        U R                  U R                  5       H=  u  pEUR                  XPR                  U R
                  [        U R                  5      S9  M?     g r  )r  r  rK  r,  r  r  r  )r   rO  rP  rQ  r  r  s         rg   r  _BoundModelsContext.__exit__  sJ    T[[$*=*=>IEJJr>>4+=+= #DKK 0  2 ?ri   )rK  r  r  r  r  N)r   r   r   r   r  r  r  r   r   ri   rg   r  r    s    +2ri   r  c                      \ rS rSrS rS r\S 5       r\S4S j5       r\S 5       r	\S 5       r
\S4S	 j5       r\S4S
 j5       r\S4S j5       r\S 5       r\S4S j5       r\S4S j5       r\S 5       r\S 5       r\S 5       r\S4S j5       r\S4S 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$S5S! jr%S" r&\S# 5       r'\S$ 5       r(S6S% jr)S7S& jr*S' r+S( r,S) r-S* r.\S8S+ j5       r/\S9S, j5       r0\S- 5       r1\S:S. j5       r2\S9S/ j5       r3\S0 5       r4\S1 5       r5\S2 5       r6S3r7g);rG   i  c                    UR                  SS 5      (       a  0 U l        [        5       U l        O9U 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  rs  r  rv  rZ  r  r  rX  )r   r  r  r	  s       rg   r  Model.__init__  se    ::&--DM%DK JJ779DMdmm,DKADVY' ri   c                 b    U R                   R                  SLa  [        U R                  5      $ S$ )NFzn/a)rZ  rY  r  _pkr  s    rg   r  Model.__str__  s&     $

 6 6e Cs488}NNri   c                     g rd   r   r  s    rg   r  Model.validate_model  s    ri   Nc                     [        X5      $ rd   )rw  )r  r  s     rg   r  Model.alias  s    #%%ri   c                 ^    U(       + nU(       d  U R                   R                  n[        XUS9$ )N)
is_default)rZ  r  ModelSelect)r  r  r  s      rg   r  Model.select  s(    Z
YY,,F3:>>ri   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  )	re   r  r  r8   rZ  r<  r   ri  r   )r  rc  r  
normalizedrs  r  s         rg   _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      $ rd   )ModelUpdater  )r  _Model__datar   s      rg   r   Model.update      3 3 3F CDDri   c                 6    [        X R                  X5      5      $ rd   )ModelInsertr  r  r  ro  s      rg   ro  Model.insert  r  ri   c                     [        XUS9$ rm  )r  r  ri  r  s      rg   insert_manyModel.insert_many  s    3V<<ri   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 rm  )re   r  r   r  )r  rr  r  r  r  s        rg   insert_fromModel.insert_from  sO     ,23+1% +5UC*@*@73&+1 	 33g>>3s   ,=c                 F    U R                   " U40 UD6R                  S5      $ r"  rw  r  s      rg   r{   Model.replace  s!    zz&+F+77	BBri   c                 >    U R                  XS9R                  S5      $ )N)ri  r  rv  )r  rx  r  s      rg   replace_manyModel.replace_many  s     $6Y'	)ri   c                     [        XU5      $ rd   )ModelRaw)r  r\  r  s      rg   raw	Model.raw  s    &))ri   c                     [        U 5      $ rd   )ModelDeleter  s    rg   r  Model.delete  s    3ri   c                 4    U " S0 UD6nUR                  SS9  U$ )NT)force_insertr   )save)r  rr  insts      rg   createModel.create  s     |U|		t	$ri   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rd   )r   )r|  r  r  r  s      rg   r~  $Model.bulk_create.<locals>.<genexpr>@  s1      )"' 277Age'7"' 8s   
1,1)r  )r$   rd  rZ  r>  r  rY  r  rz	  r  ra  r  r  re   r<   r  r  r  r  r  rX  )r  
model_list
batch_sizebatchesr  r  	pk_fieldsr  r  r  batchrB  rc
  r  r  pk_fieldobj_idr  s                    @rg   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SS9nUR!                  U	R                  UR                  5      U45        Ma     [#        X5      nUX'   M}     XR%                  U5      R'                  U R                  R                  R)                  U5      5      R+                  5       -  n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   T)r  )re   rZ  rY  r&   r  r  r  r<   r  r  r$   r  r  r   ri  r  r  r    r   r  r)  r  )r  r  r  r  r  r  r  r  r  r]
  r  r  id_listr   r   rB  rn   r  s                     rg   bulk_updateModel.bulk_updateH  s   cii++\:: 8 9 9
 "#!a *4As););#))""1%B! 	 # /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 %u4 @LL"++eii"8%!@A	 #
 B $  2 **V$5..227;<79A   =#6 5s   :G!97G&%G+c                     [        U S5      $ r3  )NoopModelSelectr  s    rg   noop
Model.noopo  s    sB''ri   c                 |   U R                  5       nU(       a}  [        U5      S:X  a_  [        US   [        5      (       aG  U R                  R
                  (       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   r   )
r  r   re   r   rZ  r  r  rY  r  r  )r  rr  filterssqs       rg   r  	Model.gets  s    ZZ\5zQ:eAh#<#<yy''XXcii33uQx?@XXu%%W%Bvvxri   c                 H     U R                   " U0 UD6$ ! [         a     g f = frd   )r  r3   )r  rr  r   s      rg   get_or_noneModel.get_or_none  s-    	77E-W-- 		s    
!!c                 R    U R                  U R                  R                  U:H  5      $ rd   )r  rZ  rY  r  r]
  s     rg   r  Model.get_by_id  s     wwsyy,,233ri   c                     Uc  U R                  U5      R                  5       $ U R                  U5      R                  U R                  R
                  U:H  5      R                  5       $ rd   )ro  r  r   r  rZ  rY  )r  rs  rn   s      rg   r  Model.set_by_id  sP    ;::e$,,..JJu%U39900C78Dri   c                     U R                  5       R                  U R                  R                  U:H  5      R	                  5       $ rd   )r  r  rZ  rY  r  r'  s     rg   r  Model.delete_by_id  s1    zz|!!#))"7"72"=>FFHHri   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)NrA  FTr   )r  r  rp  r  r   r  r3   r   rZ  r  r  r	  rA   )r  r  rA  rr  r  rn   excs          rg   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$ rd   )r  r  )r  dq_nodesr   s      rg   r  Model.filter  s    zz|""H888ri   c                     U R                   R                  SLa)  [        X R                   R                  R                  5      $ g r   )rZ  rY  r   r  r  s    rg   get_idModel.get_id  s6    
 ::!!.4!7!7!A!ABB /ri   c                 X    [        X R                  R                  R                  U5        g rd   )rX  rZ  rY  r  rR  s     rg   r  	Model._pk  s    jj,,1159ri   c                 H    U R                   R                  U R                  :H  $ rd   )rZ  rY  r  r  s    rg   _pk_exprModel._pk_expr  s    zz%%11ri   c                     0 nU H]  n[        U[        5      (       a  U R                  R                  U   nUR                  U;   d  MC  XR                     X4R                  '   M_     U$ rd   )re   r  rZ  r<  r  )r   
field_dictonlynew_datar  s        rg   _prune_fieldsModel._prune_fields  sX    E%%%

++E2zzZ''1**'=$	 
 ri   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 rd   )rZ  rG  r  r  r  rX  r   rs  )r   r=  foreign_key_fieldforeign_key
conditionss        rg   _populate_unsaved_relations!Model._populate_unsaved_relations  s~    !%+00K) :'4/:  -T9  z74+EF*.--*D
' "1ri   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!r   )rs  rT  rZ  rY  r  r@  rE  dirty_fieldsrv  r  rF  r  r  r  r  r  r  r   r  r:  r  ro  r>  r  )	r   r  r>  r=  r  pk_valueri  pk_part_namer]
  s	            rg   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:&ri   c                 ,    [        U R                  5      $ rd   )r  rv  r  s    rg   is_dirtyModel.is_dirty  rN  ri   c                     U R                   R                   Vs/ s H   oR                  U R                  ;   d  M  UPM"     sn$ s  snf rd   rZ  r  r  rv  r  s     rg   rI  Model.dirty_fields  s3    ::33M3avv7L3MMMs
   AAc                     U R                   R                   Vs/ s H+  nUR                  U R                  ;   d  M  UR                  PM-     sn$ s  snf rd   rQ  r  s     rg   dirty_field_namesModel.dirty_field_names  sG     $

 8 8 * 8166T[[(  8 * 	* *s
   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r3  )r  r  r  r  rZ  rH  rp  rs  r  r  r  rY  r  r=  r	  r  r  r  r  )r   search_nullableexclude_null_childrenmodel_classr-  queriesrE  r3	  rr  rX  r|  rt  rD  r   r!  r  s                   rg   dependenciesModel.dependencies  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)rX  r   )
r[  r  r=  r   r  r  r  r  r  r:  )r   r  delete_nullablerr  rX  r  s         rg   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Cri   c                 D    [        U R                  U R                  45      $ rd   )r  r  r  r  s    rg   r  Model.__hash__6  s    T^^TXX.//ri   c                     UR                   U R                   :H  =(       a.    U R                  S L=(       a    U R                  UR                  :H  $ rd   )r  r  r  s     rg   r  Model.__eq__9  s=    OOt~~- "HHD "HH		!	#ri   c                     X:X  + $ rd   r   r  s     rg   r  Model.__ne__?  s      ri   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)Nrc  )r1  rd  r  r\  r_   r	  r  r   rZ  rY  r  r  rn  s     rg   rX  Model.__sql__B  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)rG  rH  )rZ  r  r  r  rY  r  )
r  r  r  r  r  is_differentGr  r  
is_backrefs
             rg   r,  
Model.bindV  s    yy))9		x(5		%%9%MA()$*(KK,,X6LL' )* ri   c                     [        U 4XU5      $ rd   r  )r  r  r  r  s       rg   rf  Model.bind_ctxd  s    "C68NNri   c                     U R                   nU R                  R                  R                  UR                  R
                  UR                  5      $ rd   )rZ  rW  r  r  r[  r   rZ  )r  Ms     rg   r  Model.table_existsh  s6    II{{##001A1A188LLri   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.r  )
r   r  rW  r  r  r  rZ  r  r	  r1  )r  ru  r  s      rg   r  Model.create_tablem  s    g% C D;;/D,,>>!!99{CII,?,?@t/w/ri   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 )Nr  )rW  r  r  r  rZ  r  r	  r7  )r  ru  r4  r  s       rg   r  Model.drop_table{  sg    ,,<<##%%99{CII,?,?@T=W=ri   c                 <    U R                   R                  " S0 UD6  g r3  )rW  r  )r  r  s     rg   r  Model.truncate_table  s    ""-W-ri   c                     [        X40 UD6$ rd   )rH   r  r  r  s      rg   r  Model.index  s    #000ri   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 rh  )r   re   rW   r?   rZ  r
  r  rH   r{  s      rg   	add_indexModel.add_index  s`    v;!
6!9sEl C CII$$VAY/II$$Z%Fv%FGri   )rs  r  rv  r  rd   )FNr7  r  )TTNr  r  )8r   r   r   r   r  r  classmethodr  r  r  r  r   ro  r  r  r{   r  r   r  r	  r  r  r  r  r$  r  r  r  r/  r  r5  r  r  r]  r:  r@  rF  r  rN  rI  rT  r[  r_  r  r  r  rX  r,  rf  r  r  r  r  r  r~  r   r   ri   rg   rG   rG     s   
(O   & & ? ?  4 E E E E = = ? ?
 C C ) )
 * *      
  >  >D $ $L ( (     4 4 D D I I  ( 9 9C 6
CZZ: :2	E)V! N N * *>D0#!I(   O O M M 0 0 > > . . 1 1 H Hri   rG   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)rw  i  z3Provide a separate reference to a model in a query.Nc                 <    XR                   S'   X R                   S'   g )Nr  r  )r  )r   r  r  s      rg   r  ModelAlias.__init__  s    !&g!&gri   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rd   )r  r  r  re   r  r  r   r   r8   
FieldAliasr	  )r   r   rj  r  
model_attrs        rg   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      rg   r   ModelAlias.__setattr__  s    FGGri   c                     U R                   R                  R                   Vs/ s H  n[        X5      PM     sn$ s  snf rd   )r  rZ  r>  r   )r   r  s     rg   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      $ rd   )r  r  )r   	selections     rg   r  ModelAlias.select  s    ..0I4++ri   c                 &    U R                   " S0 UD6$ r3  r  )r   r  s     rg   r  ModelAlias.__call__  s    zz#F##ri   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  r}  r\  r  r  r0  r{  rZ  r
  rJ  r6   rn  s     rg   rX  ModelAlias.__sql__  s    99$774::&&::&*jjCd#99$S))001WV_S 1 1$ 789; 776#"3"3D"9:;;ri   r   rd   )r   r   r   r   r  r  r   r   r  r  r  rX  r   r   ri   rg   rw  rw    s*    ='&HO,
$<ri   rw  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 rd   )rU  r  r  )r   rU  r  s      rg   r  FieldAlias.__init__  s    \\

ri   c                 <     " S SU [        U5      5      nU" X5      $ )Nc                       \ rS rSrSrg)&FieldAlias.create.<locals>._FieldAliasi  r   Nr  r   ri   rg   _FieldAliasr    s    ri   r  )r  )r  rU  r  r  s       rg   r	  FieldAlias.create  s    	#tE{ 	6))ri   c                 B    [        U R                  U R                  5      $ rd   )r  rU  r  r  s    rg   r  FieldAlias.clone  s    $++tzz22ri   c                 8    U R                   R                  U5      $ rd   )r  r  rR  s     rg   r  FieldAlias.adapt  s    4::#3#3E#::ri   c                 8    U R                   R                  U5      $ rd   )r  r  rR  s     rg   r  FieldAlias.python_value  s    $***A*A%*H#Hri   c                 8    U R                   R                  U5      $ rd   )r  r  rR  s     rg   r  FieldAlias.db_value  s    djj&9&9%&@@ri   c                 R    US:X  a  U R                   $ [        U R                  U5      $ )Nr  )rU  r   r  r   s     rg   r   FieldAlias.__getattr__  s"    "got{{L74::t3LLri   c                 t    UR                  [        U R                  U R                  R                  5      5      $ rd   )r\  r%   rU  r  r<  rn  s     rg   rX  FieldAlias.__sql__  s&    wwvdkk4::+A+ABCCri   )r  r  rU  N)r   r   r   r   r  r  r	  r  r  r  r  r   rX  r   r   ri   rg   r  r    s7    
 * *
3 ;H@MDri   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 rd   )r  rZ  rG  rp  r  rF  r  )r  rD  r|  
dependencydfsr  r  rE  s       rg   r  sort_models.<locals>.dfs  s    F?uD0HHUO*/++*:*:*@*@*B& #+++	N	 +C
 {{%%"'++"8"8J
O #9OOE"  1?ri   c                 Z    U R                   R                  U R                   R                  4$ rd   )rZ  r  r  )r   s    rg   rh   sort_models.<locals>.<lambda>  s    qww||QWW%7%78ri   r  )r  r  )r  r  r   r  r  rE  s   `  @@@rg   r  r    sF    [F5DH# # 9EF&A 'Ori   c                      ^  \ rS rSr\R
                  rU 4S jr\R                  SS j5       r
\R                  S 5       rS rS rSrU =r$ )	_ModelQueryHelperi  c                    > [         [        U ]
  " U0 UD6  U R                  (       d&  U R                  R
                  R                  U l        g g rd   )r  r  r  r  r  rZ  r  r  s      rg   r  _ModelQueryHelper.__init__  s;    /@@~~!ZZ--66DN ri   c                 f    [         R                  U l        Uc  U R                  U l        g UU l        g rd   )r  rH  r  r  r  r  s     rg   r  _ModelQueryHelper.objects  s%    *5*=DJJ;ri   c                 .    [         R                  U l        g rd   )r  rI  r  r  s    rg   r  _ModelQueryHelper.models  s    ri   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  r  rE  ModelTupleCursorWrapperrG  ModelNamedTupleCursorWrapperrH  ModelObjectCursorWrapperr  r  r  s      rg   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Gri   c                 D    [        XR                  / U R                  5      $ rd   )r  r  rV  s     rg   r  +_ModelQueryHelper._get_model_cursor_wrapper   s    '

B

KKri   )r  r  r  rd   )r   r   r   r   r  rI  r  r  ri  rT  r  r  r  r  r   r  r  s   @rg   r  r    sV    yy7
 
YYO O 
YY# #H"L Lri   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  i$  c                 L   > Xl         SU l        [        [        U ]  " SX#S.UD6  g )Nr   r  )r  r  r  r  r  )r   r  r\  r  r  r  s        rg   r  ModelRaw.__init__%  s&    
h&H3HHri   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  r  r\  r  r3   r  s      rg   r  ModelRaw.get*  sa    	E<<>!$$ 	E((*KC**))+/::sF+D E E	Es
    AA")r  r  )r   r   r   r   r  r  r   r  r  s   @rg   r  r  $  s    I
E Eri   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)BaseModelSelecti4  c                 2    [        U R                  U SU5      $ )NrY  ModelCompoundSelectQueryr  r   s     rg   r  BaseModelSelect.union_all5      '

D+sKKri   c                 2    [        U R                  U SU5      $ )NrZ  r  r   s     rg   r  BaseModelSelect.union9  s    '

D'3GGri   c                 2    [        U R                  U SU5      $ )Nr[  r  r   s     rg   r_  BaseModelSelect.intersect=  r  ri   c                 2    [        U R                  U SU5      $ )Nr\  r  r   s     rg   r`  BaseModelSelect.except_A  s    '

D(CHHri   c                 n    U R                   (       d  U R                  5         [        U R                   5      $ rd   )r  r  r  r  s    rg   r,  BaseModelSelect.__iter__E  s%    ##LLND(())ri   c                      [        U /UQ70 UD6$ rd   )rO   )r   
subqueriesr  s      rg   rO   BaseModelSelect.prefetchJ  s    4z4V44ri   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  )rD  r  r  r  r\  r  r3   )r   r  r  r\  r  s        rg   r  BaseModelSelect.getM  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  r3   rb  s     rg   r$  BaseModelSelect.get_or_noneX  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  )rY  rm  rZ  r  re   rY   rU  r  r   r  rx  r  s        rg   r  BaseModelSelect.group_by^  s    F : :;FE**$ &1 2 2 17!B1@X ")!:1@!B C '  "	!Bs   	C
)rx  rd   )r   r   r   r   r  r   r  r;  r_  r9  r`  r:  r,  rO   r  r$  ri  rT  r  r   r   ri   rg   r  r  4  s[    LGHFLGIG*
5	F 
YY" "ri   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  ip  c                 :   > Xl         [        [        U ]  " U0 UD6  g rd   )r  r  r  r  r  s       rg   r  !ModelCompoundSelectQuery.__init__q  s    
&6GGri   c                 8    U R                   R                  U5      $ rd   )r  r  rV  s     rg   r  2ModelCompoundSelectQuery._get_model_cursor_wrapperu  s    xx11&99ri   r  )r   r   r   r   r  r  r   r  r  s   @rg   r  r  p  s    H: :ri   r  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 rd   )rY  rm  rZ  r  re   rw  r  rY   rU  r   r  )fields_or_modelsr  fmr0  s       rg   _normalize_model_selectr  y  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 rd   )r  	_join_ctx_joins_is_defaultr  r  r  r  )r   r  r  r  r  r  s        rg   r  ModelSelect.__init__  s<    &++
T^%()9:k4)5'6:ri   c                 `   > [         [        U ]  5       n[        UR                  5      Ul        U$ rd   )r  r  r  r  r  r  s     rg   r  ModelSelect.clone  s'    k4.0ELL)ri   c                 ~   > U(       d  U R                   (       d#  SU l         [        U5      n[        [        U ]  " U6 $ U $ r   )r  r  r  r  r  )r   r  r  r  s      rg   r  ModelSelect.select  s8    4#3#3$D,-=>Fd2F;;ri   c                 J   > SU l         [        U5      n[        [        U ]  " U6 $ r   )r  r  r  r  r  )r   r  r  r  s      rg   r  ModelSelect.select_extend  s'     (1[$5v>>ri   Nc                 @    Uc  U R                   U l        U $ UU l        U $ rd   )r  r  rn  s     rg   switchModelSelect.switch  s$    '*{ 9<ri   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   )rY  re   rY   rL  rw  r  r  )r   rr  s     rg   
_get_modelModelSelect._get_model  sr    C==9U##

::u$$Z((99e##[))99e##ri   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  r<  zCannot assign join alias to "zF", as this attribute is the object_id_name for the foreign-key field "r	  )re   r  r  r  r  r  r%   rU  rZ  r  r  r   r8   _generate_on_clauser   r  r  r  r  r  rY   r   )r   rr  r  r  r   on_aliasrN  src_is_model
dest_modeldest_is_modelr  r  fk_fieldrl  src_attr	dest_attrr  r   s                     rg   _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}}+&&ri   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.)rZ  rV  rJ  r  re   r  r  r  r   r  r  r  r   r  r8   )r   rr  r  r  r  rP  rl  rG  rI  r  rX  r  r   fk_setlhs_frhs_fs                   rg   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  rE   r:  rB  r@  r  r  r	  r  r  r  r  r  )r   r  r  r  rr  r   r  r<  s           rg   r[  ModelSelect.join3  s     #dnn$	T5F5F(FB$**$$($8$8B$M!Bk&&sB/C ''[(LM^HII566""$tD	>?ri   c                 F    U R                  U[        R                  X#U5      $ rd   r  )r   r  r  rr  r   s        rg   r  ModelSelect.left_outer_joinG  s    yyt>>ri   c                 (    U R                  X#XAU5      $ rd   )r[  )r   rr  r  r  r  r   s         rg   	join_fromModelSelect.join_fromJ  s    yy"488ri   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  r  r  r  ModelCursorWrapperrV  s     rg   r  %ModelSelect._get_model_cursor_wrapperM  sc    t1$T[[+FJJ,0OOTZZI I!&**doo"&//4;;@ 	@ri   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[  )	r   lmrmr  join_kwargsjoin_ctxr  r  r  s	            rg   ensure_joinModelSelect.ensure_joinT  sc    >>'+{{r2'>#D[z (? {{2##B=2==DDXNNri   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$ ! [         a     Nf = f)Nr+  r   r  r  r   )r<   r  r  rp  r  ru  r2   r   r   r  r  rf  re   rw  r  r|  r  )r   qdictrB  joinsfksrs  rn   rW  r"  r  piecer  r   r  s                 rg   convert_dict_to_node ModelSelect.convert_dict_to_node[  s`   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	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   r   )r
   r  r  r  r5   r  rS  rS  r  rT  re   r  r  r   r!  rr  r  r  r  r  rX  r<   r  r|  r  r  r  r  )r   r  r  r  dq_noder  dq_joins
seen_joinsrW  sider   rr  r  r[  rL  r  r  r  	field_objs                      rg   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$ rd   )r  rW  r  )r   r  ru  rP  s       rg   r  ModelSelect.create_table  s$    zz!!11$dKdKKri   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   r  r  rZ  rY  r\  r  r  s      rg   r  ModelSelect.__sql_selection__  sl    DOO0Dq0H::''u4774::++7788ww}T__566ri   )r  r  r  r  r  rd   r$  rm  r  )r   r   r   r   r  r  r  r  r  r  r  r  ri  rT  rE   r;  r[  r  r  r  r  r!  r  r  r  r   r  r  s   @rg   r  r    s    ;
?
	A'F?B 
YY#'::$Dt @ @&? .2ZZDt 9@O!F1$fL7 7ri   r  c                        \ rS rSrS rS rSrg)r  i  c                 `    U R                   R                  R                  R                  U5      $ rd   )r  rZ  r  r  rn  s     rg   rX  NoopModelSelect.__sql__  s#    zz((88==ri   c                     [        U5      $ rd   )r  rV  s     rg   r  #NoopModelSelect._get_cursor_wrapper  s    V$$ri   r   N)r   r   r   r   rX  r  r   r   ri   rg   r  r    s    >%ri   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 rd   )r  r  r4  r  r  s       rg   r  _ModelWriteQueryHelper.__init__  s"    
$d4ULTLVLri   c                    > / nU HK  n[        U5      (       a'  UR                  UR                  R                  5        M:  UR	                  U5        MM     [
        [        U ]  " U6 $ rd   )rY  rm  rZ  r  r  r  r4  r  )r   r  rB  r<  r  s       rg   r   _ModelWriteQueryHelper.returning  sR    D~~TZZ556T"	 
 +T<eDDri   c                 v    U R                   R                  R                  nUR                  UR                  U'   g rd   )r  rZ  r[  r   r0  )r   ro  r[  s      rg   r  '_ModelWriteQueryHelper._set_table_alias  s+    

  &&#(>>% ri   r  )	r   r   r   r   r  r  r  r   r  r  s   @rg   r4  r4    s    ME2 2ri   r4  c                       \ rS rSrSrg)r  i  r   Nr  r   ri   rg   r  r        ri   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 rd   )	r  r  r  r  r  rZ  r  ra  r  r  s      rg   r  ModelInsert.__init__  sw    k4)4:6:??"tzz'7'7'@'@'Lzz((99"&**"2"2"C"C"E : (M"ri   c                 x   > U(       a"  U R                   c  [        R                  U l         [        [        U ]  " U6 $ rd   )r  r  rI  r  r  r  )r   r  r  s     rg   r  ModelInsert.returning  s.    
 / YYDN[$19==ri   c                 B    U R                   R                  R                  $ rd   )r  rZ  rA  r  s    rg   r-  ModelInsert.get_default_data  s    zz(((ri   c                     U R                   R                  R                  nU R                   R                  R                  (       a  USS  $ U$ r  )r  rZ  r  r  )r   r  s     rg   r1  ModelInsert.get_default_columns  s:    !!//!ZZ--<<vabzH&Hri   )r  r  )r   r   r   r   r  rE  r  r  r  r-  r1  r   r  r  s   @rg   r  r    s)    yyF>)I Iri   r  c                       \ rS rSrSrg)r  i  r   Nr  r   ri   rg   r  r    r<  ri   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 rd   )	_instance	_accessorrW  r  r  	_src_attrrX  
_dest_attrr  r_  r  )r   r  accessorr]  r  r  r  s         rg   r  ManyToManyQuery.__init__  sX    !!!2277"**4499ot-c6KDKFKri   c                     [        US   [        5      (       a&  U Vs/ s H  n[        X R                  5      PM     sn$ U$ s  snf r  )re   rG   r   rL  )r   model_or_id_listr  s      rg   _id_listManyToManyQuery._id_list  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  rr  )r  rJ  r   rI  rK  re   rX  r  r_   rX  r  rM  r  rW  r  rg  rQ  r  r  )r   rn   rd  rM  ra  rr  rel_idinsertss           rg   r  ManyToManyQuery.add  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       $ rd   )r   rI  rK  re   rX  r  rL  r  rJ  rM  r  r  rX  rW  r  rg  rQ  )r   rn   ra  r[  rD  s        rg   rz	  ManyToManyQuery.remove  s
   8e[))U[[$//:F}}V,HNN00VXU//8;..&8:; WY  !'ENN00VXU//4==3GG..&8:; WY ri   c                     [        U R                  U R                  5      nU R                  R                  R                  5       R                  U R                  R                  U:H  5      R                  5       $ rd   )	r   rI  rK  rJ  rM  r  r  rW  r  )r   ra  s     rg   r  ManyToManyQuery.clear3  sO    8,,t~~,,67	ri   )rJ  rL  rI  rK  r  )r   r   r   r   r  rQ  r  rz	  r  r   r  r  s   @rg   r_  r_    s#    L 
B. , ri   r_  c                    ^  U 4S jnU$ )Nc                 F   >  T" U 5      $ ! [         [        4 a    U s $ f = frd   )r	  r  )rn   	conv_funcs    rg   validate#safe_python_value.<locals>.validate<  s,    	U##:& 	L	s      r   )r]  r^  s   ` rg   safe_python_valuer`  ;  s    
 Ori   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )BaseModelCursorWrapperiD  c                 X   > [         [        U ]  U5        X l        U=(       d    / U l        g rd   )r  rb  r  r  r  )r   r  r  r  r  s       rg   r  BaseModelCursorWrapper.__init__E  s#    $d4V<
mri   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     / U l$        / U l%        [M        U R                  5       HA  nUU   b  U RJ                  R                  U5        M&  U RH                  R                  U5        MC     g ! ["         a    X;   a  X   =p GN GM  f = f)Nr   rZ  rs  r   z()"`)'r  rZ  r<  r[  r  rG  r   rH  r  
convertersr  r>  rfindrM
  r  r  r  r  r  re   r8   r  r  r  r  r  r  r  r  ri  r6   r  r  r`  r%   rU  
no_convertconvertr  )r   r<  r[  rG  rf  r  r  description_itemr[  orig_column	dot_indexr  rt  r  rp  r\  rv  s                    rg   r  !BaseModelCursorWrapper.initializeJ  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{ &<~ tzz"A!}(##A&&&q)	 #a  %&.&66Ht	s   N22OOc                     [         erd   r  r5  s     rg   r0  "BaseModelCursorWrapper.process_row  r  ri   )r  ri  rf  r  r  rH  rh  r  rb  r  s   @rg   rb  rb  D  s    $
O*b" "ri   rb  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )r  i  c                 h   > [         [        U ]  5         U R                  U R                  SS9U l        g )NFrE  )r  r  r  rA  r  unique_columnsr	  s    rg   r  !ModelDictCursorWrapper.initialize  s3    $d68"11LL# 2 %ri   c                     0 nU R                   nU R                   H  nX   X#U   '   M     U R                   H  nU R                  U   " X   5      X#U   '   M!     U$ rd   )rr  rh  ri  rf  )r   r  r-  r  rv  s        rg   r0  "ModelDictCursorWrapper.process_row  s]    %%A!$F1: !A!%!3CF!;F1: ri   )rr  )r   r   r   r   r  r0  r   r  r  s   @rg   r  r    s    % ri   r  c                       \ rS rSr\rS rSrg)r  i  c           	          U R                   nU R                  [        U R                  5       Vs/ s H  nX#   b  X#   " X   5      OX   PM     sn5      $ s  snf rd   )rf  r  r  rH  )r   r  rf  rv  s       rg   r0  #ModelTupleCursorWrapper.process_row  s^    __
4::&!(& '1m&?Z]36"SVK&!( ) 	) !(s   Ar   N)r   r   r   r   re  r  r0  r   r   ri   rg   r  r    s    K)ri   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r  i  c                    >^  [         [        T ]  5         T R                  T R                  5      n[
        R                  " SU5      T l        U 4S jT l        g )NrR  c                 "   > TR                   " U 6 $ rd   )impl)r  r   s    rg   rh   9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>  s    tyy#ri   )	r  r  r  rA  r  rS  rT  r|  r  )r   r?  r  s   ` rg   r  'ModelNamedTupleCursorWrapper.initialize  sA    *D<>))$,,7**5+>	6ri   )r  r|  )r   r   r   r   r  r   r  r  s   @rg   r  r    s    7 7ri   r  c                   :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )r  i  c                 Z   > X@l         [        U5      U l        [        [        U ]  XU5        g rd   )r  rY  r  r  r  )r   r  r  r  r  r  s        rg   r  !ModelObjectCursorWrapper.__init__  s'    & -&6vfMri   c                 j   > [         [        U ]  5         U R                  U R                  5      U l        g rd   )r  r  r  rA  r  r?  r	  s    rg   r  #ModelObjectCursorWrapper.initialize  s(    &8:..t||<ri   c                 Z   0 nU R                   nU R                   H  nX   X#U   '   M     U R                   H  nU R                  U   " X   5      X#U   '   M!     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$ )Nr  r   r   )r?  rh  ri  rf  rY  r  rv  r  )r   r  r-  r  rv  r  s         rg   r0  $ModelObjectCursorWrapper.process_row  s    ""A!$F1: !A!%!3CF!;F1:  =="">!>v>CJJJ##-f--ri   )r  r?  rY  rb  r  s   @rg   r  r    s    N
=. .ri   r  c                   >   ^  \ rS rSrSU 4S jjrU 4S jrS rSrU =r$ )r  i  c                 R   > [         [        U ]  XU5        X@l        XPl        X`l        g rd   )r  r  r  r  r  r  )r   r  r  r  r  r  r  r  s          rg   r  ModelCursorWrapper.__init__  s$     $0G"

ri   c                 *  >^ ^ [         [        T ]  5         [        T R                   Vs/ s H  nUc  M  UR
                  PM     sn5      nT R                  nT R                   Vs/ s H  n[        U5      PM     snmT R                  (       a  T R
                  [        S40T l        OT R
                  T R
                  S40T l        0 T l        / T l        [        R                  " T R                   5      n[        5       nU(       GaJ  UR#                  5       n[%        U[&        5      (       a8  UR)                  UR*                  5        UR)                  UR,                  5        Me  UT R.                  ;  a  Mw  [%        U[        5      nT R.                  U    H  u  ppT R                  (       a  [        nU	T R                  ;  d  M/  U[1        U5      4T R                  U	'   T R                  R)                  UU
U	U=(       d    T R                  UUR3                  S5      45        UR5                  U	5        UR)                  U	5        M     U(       a  GMJ  U Hj  nUT R                  ;  d  M  [1        U5      (       a  US4T R                  U'   M8  [%        U[6        5      (       d  MO  UR
                  S4T R                  U'   Ml     T R                   H0  u  pn    nX;   =(       a    X;   =(       d    X;   T R                  U'   M2     / T l        [;        U5       GH*  u  nnT R
                  n	T R                  U   nUb/  [%        U[<        5      (       a  UR>                  n	OUR
                  n	O[%        U[@        5      (       a`  URB                  T R                  ;  a9  [E        URG                  5       < SURB                  < SURB                  < S35      eURB                  n	OF[%        U[H        5      (       a  URG                  5       n[%        U[J        5      (       a  UR>                  n	T R8                  R)                  U	5        GM-     [M        UU 4S j[O        T RP                  5       5       5      T l)        T R                  RU                  5        V	VVs/ s H  u  n	u  nnU	UU4PM     snnn	T l+        0 T l,        T R                   H  u  pppUT R.                  ;  a  M  [        5       n[        R                  " U/5      nU(       af  UR#                  5       nUT R.                  ;   a=  T R.                  U    H*  u  n    nUR5                  U5        UR)                  U5        M,     U(       a  Mf  [[        U5      T RX                  U'   M     g s  snf s  snf s  snnn	f )NFTOUTERz specifies bind-to z, but z# is not among the selected sources.c              3   j   >#    U  H(  nUTR                   U   TU   TR                  U   4v   M*     g 7frd   )column_keysrf  )r|  rv  r  r   s     rg   r~  0ModelCursorWrapper.initialize.<locals>.<genexpr>8   s9      (&   #WQZ1CD&s   03).r  r  r  r  r  r  r  r  rx  r  r  key_to_constructorsrc_is_destsrc_to_destrS  rS  r  rT  re   r  r  r  r   r  rY  r  r  rw  r  r>  r  rU  r  r  r  r  ri  r%   re  r  rH  	_row_specrp  _constructor_list_dest_reachable	frozenset)r   r  selected_srcr  rf   rB  destsrW  rM  rs  r   r  r  rr  r  r  r  rt  	construct	_is_model	reachabler  _keyr  r  s   `                      @rg   r  ModelCursorWrapper.initialize  s    $24T[[ 2[E$ (EKK[ 2 3/3||<|!?1%|<::'+zzD%=&AD#'+zzDJJ3E&FD#!!$..1==?D$%%TXX&TXX&4::% t,G59ZZ5E1;::"&Kd5554?4<[4I4KD++C0 $$++-4::!!**73-5 6 IIcNLL%% 6F e@  C$111C==47;D++C0Z0047IIt3DD++C0   &*%5%5!CD!Q$'L %Nd6J 7M9<9L S! &6 "6*IC**CKK$E eZ00,,C++CD&))99D$;$;;$&*kkmTYY		&K L L iidD));;=DdF++++C##C() +.  (4::&( ( 04/F/F/L/L/N"P/N++i )Y'/N"P
  "8<8H8H4Sy4::%I!!4&)Ayy{4::%)-D)9aA!d+ *: ! *39)=D  & 9I{2 =h"Ps   VV%V	Vc                    0 n/ nU R                    H3  u  pEnU(       a  U" SS9X$'   UR                  X$   5        M*  U" 5       X$'   M5     X R                     n[        5       nU R                   Hp  u  ppUR                  XG5      nU R                  U	   n
X   nUb  UR                  U5        Ub  U" U5      n[        U[        5      (       a  XU
'   Md  [        XU5        Mr     U R                   H  u  pnnnnUR                  U5      nUR                  U5      nUc  UU;  a  M6  SnUU;  a+  UU R                  ;   a  [        U R                  U   U-  5      nUU;  a  U(       d  U(       a  S nOM  X;  a  UU;  a	  U(       a  M  U(       a  UX'   M  [        XU5        M     U H  nUR                  R                  5         M     X R                     $ )NT)r  F)r  r  r  r  r  r  r  r  re   r  rX  r  r  r  rv  r  )r   r  r  r  rs  r  r  default_instanceset_keysr  r[  rd  r  rn   rr  r   r  rM  r  is_outerjoined_instanceassigns                         rg   r0  ModelCursorWrapper.process_rowQ   s   
+/+A+A'Ci*$?!!',/*} ,B #::.5+/>>'Cf {{39H\\#&FHE S!$!%((D))#( %0 ,:" 8<7G7G3Sgq({{3'H%kk$/O&4w+> F8#0D0D(Dd22488CD 8#F&*O "t8';!087 8H< #HOO!!# # zz""ri   )
r  r  r  r  r  r  r  r  r  r  r  rb  r  s   @rg   r  r    s    k>Z?# ?#ri   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 rd   )	r  r  r  r|  rd  r  r  r  r  )
r  rr  r  rl  
rel_modelsfield_to_namer  r  foreign_key_attrsr  s
            rg   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 rd   )rl  r  rs  r  rX  r  r  r  rv  r  r  )	r   r  id_mapr  
identifierrs  attnamerel_instancesr  s	            rg   populate_instancePrefetchQuery.populate_instance   s    ??%..uzz:
)=Hjj&+>	 % #'"4"4%..u/C/CD
) &

3 3)DD84KK%%' * --? #5ri   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 rd   )r  r  r  rs  rl  r	  r  )r   r  r  r  r  identityrs  s          rg   store_instancePrefetchQuery.store_instance   si    "00NE33H4E4Eg4NOH#C&s!!#r*""8, 1ri   r   )NNNNN)	r   r   r   r   r  r  r  r   r  r  s   @rg   r  r     s    EI*.N @"- -ri   r  _PrefetchQuery)rr  r  rl  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  r>  re   re  r'  rY  rw  r  r  r  r  rr  rZ  rV  r  r   r  r  rJ  r   rP   rJ  r
   r  r4  r  r  rE   r  r  rf   r<  r  r  r[  )r!  r  prefetch_typefixed_queriesrv  rD  target_modelsubquery_modelrv  r  rH  fixed
last_query
last_modellast_objrelsrX  rW
  tgt_errr  r]
  r^  
select_pksr  r  r  r  
select_fksrI  s                                rg   prefetch_add_subqueryr     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  rP   rJ  r  r  r  r  r  r  r	  r  r  r  rr  r  r  rd  )r!  r  r  r  r  depsrel_mappqquery_modelr|  r  has_relationsr  r]  s                 rg   rO   rO   !  s   	JJ0C0CDM5>??)"-HMDG}%hh99]]	""9b1"))"- + 	R("W[[56Hyy!!(3}"/C))(OD 0	 ! &$ >ri   rd   r   r$  r  )@   (T  bisectr   r   collections.abcr   r   
contextlibr   rT  r	   	functoolsr
   r   inspectr   r  rS  rw   r  r  r  r3  r  r   r  r  sysr  r   typesr  r   	pysqlite3r   pysq3ImportErrorr	  sqlite_version_infopsycopg2cffir   registerr	  r   r	  psycopg2.extrasr   pg_register_uuidr   r	  r
  
psycopg.pqr   psycopg.types.jsonr
  r   r
  r
  pymysqlr
  MySQLdb__version____all__	getLoggerr1  
addHandlerNullHandlerr?  rd  re  r  r  r  GeneratorTyper  rp   version_infor}   r   register_adapterr  r  r   r   r   r   register_converterr  r   r   r   r
  r   r   r   r   r  r   r  r	  rK   r  r  ler  ger  lshiftr2   r  rE   r  rP   r%  r{  r}  r  r  r  r  r  compilerl  rn  rt  rO  rR  rX  r_  rY  rg  rj  rq  rx  r$   r  rR   r*   r  r  rT  r  r+  r'   r  rh  ri  r  r  r  r  r  r  r0  r;  r5  r7  rC  rY   r  r`   r  r  r%   r8  r@  rF  r  r  r  rk  rt  r_   r  r   r!   r  r  r  r  r  r6   rW   r#   r/   r  r;   ra   r  rK  r    ra  r  r  r  r~  r  r7   r5   r]   rS   r  r  r  r  r  r'  rV  rX  rb  rS  rV   r  r{  rq  r~  r?   rH   r  rf  r  r>   r)   r+   rA   rB   rC   rJ   rL   rQ   r  
EXCEPTIONSr  r  r  r  r  r  localr  r  r  r(   r  rX   r	  r	  r
  rM   rI   r  r  r  r  r  r  r  r  r'  rn  rz  r  r  r8   r   r@   r   rU   r   r   r=   rN   r:   r4   r.   r  r"   r9   rZ   r  r   r   r@  r  r   r^   r   r  r   r	  r  r-   r,   r[   r  r\   rD   r   r   r<   r0   r1   rR  rT  rF   r  r&   r  rT   r:  r  r3   r  r  r  rG   rw  r  r  r  r  r  r  r  r  r  r4  r  r  r  r_  r`  rb  r  r  r  r  r  r  r  rO   r   ri   rg   <module>r     s;     $ # %             	   
     ) **g.I.II	#
OO4A0*,35  N` 
		8	$   '%%' ( .	UIsE53F3FG 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> 
++
++;;
++;;
++
//
.6246 
" 	 				 	 
		
 
	 
	 
	 	 	 	 	 	 		 	 
	  
!	" 
#	$ %	& '	. 
 "	 
$	& 
	

 
	
 	     ::23 ::34  

45 "
$ )?
 9GC9 &;F &;RE 0 $f #*!6 *!Z,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 >BK K\PZ P,
"* 
"'F 'V $0K $0N"[ "2k 2$6 $2\; 25J 5.&K &1
2; 
2{ D3436 36l6z 68Z 8(
* 
>%Cz CL dDkT k\	:$ 	:&$ &.: .( @z 6!' / / j!   	'&[ &7% 7%td% d%N$y $(KI K\% ,>&+ >H@%* @%F}%Z }%@1% 1h/-[ /-d\A[ \A~-[ -KD K\&P &PR5i 5
 2? 1 *O * $ $ )] ) +_ + (M ( , , +} + +} +Iv I" &"$$"*(( 0)%'
 )4  &&13 ''DF !++46  %%noFv $ @' ?8 8 x( xv&D4X D4N& $=) =@5) 5po od_1H _1J5f 50@f @8+6 +\$ $T_F _D &m &,+ , V .'F '&' 'Df 2v 2&rJ rju 5 l  9 99 6I 6?i ? * /5 />	O5 	O= =Y  O O*!5 "&+|_ &+RY#f Y#xB- B(<) <? ?.Ei E4
C% C,' ,:&# &6,# ,4X6_ X6v<o <5 
 HIe HIV ;  ;F
66 
6 
).m ).XO"i O"dE9 E06(9 6(rv Jt"F t"ncv cL		H 	 $9 #~) ~)B2& 2*PHN9d+ PHf7< 7<tD D2.#L #LLE ( E 9"' 9"x:0C :r7/6 r7j	%k %2. 2&	(& 	I(& I4	(& 	?k ?DX". X"v3 ")4 )7#: 7.5 .6s#/ s#l+-K**+; >M N +-\JZaG  E  G  		  Hx  *%))G)h*   	s   <x x' +x6 y !y :y' x$#x$'x32x36y ?y 
yyy$#y$'z.y77z?zzz