
    he@                        S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
JrJrJr  S SKJrJrJr  S SKJrJrJr  S SKJr  S S	KJrJr  S S
KJr  \ R:                  " S5      rS rS r S r! " S S5      r"g)    N)datetime)settings)
FieldError)ColumnsExpressionsForeignKeyName	IndexName	StatementTable)names_digestsplit_identifiertruncate_name)NOT_PROVIDED
DeferrableIndex)Query)TransactionManagementErroratomic)timezonezdjango.db.backends.schemac                     U R                   nUR                  (       a  gUR                  (       a  UR                  S/:X  a  gUR                  UR                  ;   $ )zn
When altering the given field, must constraints on its model from the given
relation be temporarily dropped?
FNT)fieldmany_to_manyprimary_key	to_fieldsname)relationaltered_fieldr   s      P/var/www/html/env/lib/python3.13/site-packages/django/db/backends/base/schema.py_is_relevant_relationr      sG    
 NNE  U__%>00    c           	      r    [        U R                  R                  SSSSS9[        R                  " S5      S9$ )NFT)forwardreverseinclude_hiddeninclude_parentsr   )key)sorted_meta_get_fieldsoperator
attrgettermodels    r   _all_related_fieldsr.   (   sB    !	 	  	
 ' r    c              #     ^ ^#    [        U 4S j[        T R                  5       5       U4S j[        TR                  5       5       5      nU H2  u  p4X44v   [        UR                  UR                  5       S h  vN   M4     g  N	7f)Nc              3   N   >#    U  H  n[        UT5      (       d  M  Uv   M     g 7fNr   ).0obj	old_fields     r   	<genexpr>+_related_non_m2m_objects.<locals>.<genexpr>9   $      	
;$S)4 C;   %	%c              3   N   >#    U  H  n[        UT5      (       d  M  Uv   M     g 7fr1   r2   )r3   r4   	new_fields     r   r6   r7   >   r8   r9   )zipr.   r-   _related_non_m2m_objectsremote_field)r5   r;   related_fieldsold_relnew_rels   ``   r   r=   r=   5   s      	
*9??;	

	
*9??;	
N ++    
 	
 	
 +	
s   A6B:B;
Bc                   0   \ 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Sr\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\rSr Sr!Sr"Sr#Sr$\r%Sr&Sr'S r(SrS! jr)S" r*S# r+SsS% jr,S& r-S' r.S( r/StS) jr0S* r1S+ r2S, r3S- r4S. r5S/ r6\7S0 5       r8S1 r9S2 r:S3 r;S4 r<S5 r=S6 r>S7 r?S8 r@S9 rAS: rBS; rCS< rDS= rES> rFS? rGS@ rHSA rIStSB jrJSC rK StSD jrLSE rMStSF jrN StSG jrOSH rPSI rQSJ rRSK rSSuSM jrTSvSN jrUSO rVSP rWSSSLSLSS$SS$SSSSQ.SR jrXSvSS jrYST rZSU r[SV r\SW r]SvSX jr^SY r_SZ r`S[ raS\ rbS] rcS^ rdS_ reS` rfSa rg     SwSb jrh      SxSc jri       SySd jrjSzSe jrk      SxSf jrlSg rmSh rnSi roSj rp        S{Sk jrqStSl jrrSm rsSn rtS|So jruSsSp jrvSqrwg)}BaseDatabaseSchemaEditorL   z
This class and its subclasses are responsible for emitting schema-changing
statements to the databases - model creation/removal/alteration, field
renaming, index fiddling, and so on.
z'CREATE TABLE %(table)s (%(definition)s)z1ALTER TABLE %(old_table)s RENAME TO %(new_table)sz7ALTER TABLE %(table)s SET TABLESPACE %(new_tablespace)szDROP TABLE %(table)s CASCADEz:ALTER TABLE %(table)s ADD COLUMN %(column)s %(definition)sz!ALTER TABLE %(table)s %(changes)sz2ALTER COLUMN %(column)s TYPE %(type)s%(collation)sz%ALTER COLUMN %(column)s DROP NOT NULLz$ALTER COLUMN %(column)s SET NOT NULLz/ALTER COLUMN %(column)s SET DEFAULT %(default)sz$ALTER COLUMN %(column)s DROP DEFAULTz4ALTER TABLE %(table)s DROP COLUMN %(column)s CASCADEzDALTER TABLE %(table)s RENAME COLUMN %(old_column)s TO %(new_column)szFUPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULLz"UNIQUE (%(columns)s)%(deferrable)szCHECK (%(check)s)z.ALTER TABLE %(table)s DROP CONSTRAINT %(name)sz"CONSTRAINT %(name)s %(constraint)sz?ALTER TABLE %(table)s ADD CONSTRAINT %(name)s CHECK (%(check)s)zbALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE%(nulls_distinct)s (%(columns)s)%(deferrable)sz|ALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s (%(to_column)s)%(deferrable)sNzQCREATE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(extra)s%(condition)szaCREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(nulls_distinct)s%(condition)sz/ALTER INDEX %(old_name)s RENAME TO %(new_name)szDROP INDEX %(name)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)zDROP PROCEDURE %(procedure)sz)COMMENT ON TABLE %(table)s IS %(comment)sz5COMMENT ON COLUMN %(table)s.%(column)s IS %(comment)sc                     Xl         X l        U R                  (       a  / U l        U R                   R                  R                  =(       a    UU l        g r1   )
connectioncollect_sqlcollected_sqlfeaturescan_rollback_ddlatomic_migration)selfrF   rG   r   s       r   __init__!BaseDatabaseSchemaEditor.__init__   s;    $&!#D $ 8 8 I I Tfr    c                     / U l         U R                  (       a>  [        U R                  R                  5      U l        U R                  R                  5         U $ r1   )deferred_sqlrK   r   rF   alias	__enter__)rL   s    r   rR   "BaseDatabaseSchemaEditor.__enter__   s>       !6!67DKKK!!#r    c                     Uc%  U R                    H  nU R                  US 5        M     U R                  (       a  U R                  R	                  XU5        g g r1   )rP   executerK   r   __exit__)rL   exc_type	exc_value	tracebacksqls        r   rV   !BaseDatabaseSchemaEditor.__exit__   sH    ((S$' )  KK  i@ !r     c           	         U R                   (       dK  U R                  R                  (       a0  U R                  R                  R                  (       d  [        S5      e[        U5      n[        R                  SXX!S.S9  U R                   (       a  UR                  5       R                  S5      (       a  SOSnUb?  U R                  R                  U[        [        U R                  U5      5      -  U-   5        gU R                  R                  X-   5        gU R                  R!                  5        nUR#                  X5        SSS5        g! , (       d  f       g= f)z:Execute the given SQL statement, with optional parameters.ziExecuting DDL statements while in a transaction on databases that can't perform a rollback is prohibited.z%s; (params %r))paramsrZ   )extra; N)rG   rF   in_atomic_blockrI   rJ   r   strloggerdebugrstripendswithrH   appendtuplemapquote_valuecursorrU   )rL   rZ   r^   endingrl   s        r   rU    BaseDatabaseSchemaEditor.execute   s   
   //OO,,==,? 
 #hsV2P 	 	
 ::<0055R3F!""))5T%5%5v!>??6I ""))#,7'')Vs+ *))s   2E
Ec                 L    U R                   R                  R                  U5      $ r1   )rF   ops
quote_name)rL   r   s     r   rq   #BaseDatabaseSchemaEditor.quote_name   s    ""--d33r    c                   ^ ^ TR                   R                   HY  nU Vs/ s H  nTR                   R                  U5      PM      nnT R                  R	                  T R                  TU5      5        M[     / n/ nTR                   R                   GHs  nT R                  TU5      u  pxUc  M  UR                  T R                  S9n	U	S   (       a  UST R                  U	-  -   -  nUR                  T R                  S9n
U
(       a  USU
-  -  nUR                  U5        UR                  (       Ga"  UR                  (       Ga  UR                  R                  R                   R                   nUR                  R                  R                   R                  UR                  R"                  5      R$                  nT R&                  (       a7  UST R&                  T R)                  U5      T R)                  U5      S.-  -   -  nOQT R                  R*                  R,                  (       a,  T R                  R	                  T R/                  TUS5      5        UR	                  T R)                  UR$                  5      < SU< 35        UR1                  5       S;   d  GM
  T R                  R2                  R5                  TR                   R                   UR$                  5      nU(       d  GMX  T R                  R                  U5        GMv     / nU(       aI  TR                   R6                   H.  nT R                  R	                  UR9                  TT 5      5        M0     O0UR                  UU 4S jTR                   R6                   5       5        T R:                  T R)                  TR                   R                   5      S	R=                  S
 / UQUQ7 5       5      S.-  nTR                   R>                  (       aH  T R                  R2                  RA                  TR                   R>                  5      nU(       a  USU-   -  nUU4$ s  snf )z-Take a model and return its table definition.rF   check z %s)to_table	to_column_fk_%(to_table)s_%(to_column)s)	AutoFieldBigAutoFieldSmallAutoFieldc              3   H   >#    U  H  nUR                  TT5      v   M     g 7fr1   )constraint_sql)r3   
constraintr-   rL   s     r   r6   5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s(      #"9J ))%66"9s   ", c              3   J   #    U  H  nU(       d  M  [        U5      v   M     g 7fr1   )rc   )r3   	statements     r   r6   r     s"      $!AI I!As   ##)table
definition)!r(   unique_together	get_fieldrP   rh   _create_unique_sqllocal_fields
column_sqldb_parametersrF   sql_check_constraintdb_type_suffixextendr>   db_constraintr-   db_table
field_namecolumnsql_create_inline_fkrq   rI   supports_foreign_keys_create_fk_sqlget_internal_typerp   autoinc_sqlconstraints
create_sqlsql_create_tablejoindb_tablespacetablespace_sql)rL   r-   field_namesr   fieldscolumn_sqlsr^   r   extra_params	db_paramscol_type_suffixrw   rx   r   constraint_sqlsr   rZ   r   s   ``                r   	table_sql"BaseDatabaseSchemaEditor.table_sql   s    !;;66K@KLuekk++E2FL$$T%<%<UF%KL 7 [[--E'+ue'D$J!++t+GI!cD$=$=	$III
#22doo2NOeo55
MM,'!!!e&9&9&9 --3399BB!..44::DD&&11&  ,,#(A(A$(OOH$=%)__Y%?E ) # J __--CC%%,,++!5*J  OOELL1 &&( - 
 #oo11==KK((%,, ;%%,,[9e .p  $kk55
!!(()>)>ud)KL 6 "" #"'++"9"9#  ##__U[[%9%9:)) $!A;!A!A$ '
 
 ;;$$!__00??))N s^++F{o Ms   %Qc              #     #    Uv   UR                  S5      =n(       a  U R                  U5      v   U R                  R                  R                  (       a.  UR
                  (       a  U R                  UR
                  5      v   UR                  nUR                  [        La-  U R                  U5      u  pSU	 3v   UR                  U
5        SnU=(       a<    U R                  U5      (       + =(       a    U=(       a    U R                  U5      (       + nU(       ax  U R                  U5      nUbd  SU R                  U5      -   nU R                  R                  R                   (       a  XR#                  U5      -  v   OUv   UR%                  U5        UR&                  (       a8  UR(                  (       d'  U R                  R                  R*                  (       a  SnUR,                  (       a)  U R/                  U5      u  pUR                  U5        Uv   O5U(       d  Sv   O)U R                  R                  R0                  (       d  Sv   UR(                  (       a  Sv   OUR2                  (       a  Sv   UR4                  =(       d    UR6                  R4                  nU(       a_  U R                  R                  R8                  (       a9  UR2                  (       a'  U R                  R:                  R=                  USS	9v   g g g g 7f)
N	collationzDEFAULT FTzNOT NULLNULLzPRIMARY KEYUNIQUE)inline)get_collate_sqlrF   rI   supports_comments_inline
db_comment_comment_sqlnull
db_defaultr   db_default_sqlr   skip_defaultskip_default_on_altereffective_default_column_default_sqlrequires_literal_defaultsprepare_defaultrh   empty_strings_allowedr   !interprets_empty_strings_as_nulls	generated_column_generated_sqlimplied_column_nulluniquer   r(   supports_tablespacesrp   r   )rL   column_db_typer^   r-   r   field_db_paramsinclude_defaultr   r   default_sqldefault_paramsdefault_valuecolumn_defaultgenerated_sqlgenerated_params
tablespaces                   r   _iter_column_sql)BaseDatabaseSchemaEditor._iter_column_sql/  sQ     '++K8898##I..??##<<AQAQ##E$4$455zz</*.*=*=e*D'K[M**MM.)#O  =%%e,,= ;$44U;< 	  2259M(!+d.F.Fu.M!M??++EE )+?+?+NNN((MM-0 ''%%((JJD??.2.H.H.O+MMM*+))==L\\N((EEKK,E,E
((==//%%44Z4MM  > s   LLc           
          UR                  U R                  S9nUS   nUc  g/ nSR                  U R                  UUUUUU5      5      U4$ )zn
Return the column definition for a field. The field must already have
had set_attributes_from_name() called.
rt   typeNNrv   )r   rF   r   r   )rL   r-   r   r   r   r   r^   s          r   r   #BaseDatabaseSchemaEditor.column_sqlr  sn      ---I(0!HH%%"##
 
 	
r    c                     g)zi
Some backends don't accept default values for certain columns types
(i.e. MySQL longtext and longblob).
Fr\   rL   r   s     r   r   %BaseDatabaseSchemaEditor.skip_default      
 r    c                     g)z
Some backends don't accept default values for certain columns types
(i.e. MySQL longtext and longblob) in the ALTER COLUMN statement.
Fr\   r   s     r   r   .BaseDatabaseSchemaEditor.skip_default_on_alter  r   r    c                     [        S5      e)zE
Only used for backends which have requires_literal_defaults feature
zsubclasses of BaseDatabaseSchemaEditor for backends which have requires_literal_defaults must provide a prepare_default() methodNotImplementedErrorrL   values     r   r   (BaseDatabaseSchemaEditor.prepare_default  s     "P
 	
r    c                     g)zx
Return the SQL to use in a DEFAULT clause. The resulting string should
contain a '%s' placeholder for a default value.
%sr\   r   s     r   r   ,BaseDatabaseSchemaEditor._column_default_sql  s    
 r    c                 v  ^  SSK Jn  UR                  n[        X25      (       a  T R	                  U5      OSn[        UR                  S9nUR                  T R                  S9nUR                  U5      u  pxT R                  R                  R                  (       a  U[        U 4S jU 5       5      -  n/ nXG-  U4$ )z;Return the sql and params for the field's database default.r   )Valuez(%s)r,   rt   c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr1   )r   r3   prL   s     r   r6   :BaseDatabaseSchemaEditor.db_default_sql.<locals>.<genexpr>  s      I&Q!5!5a!8!8&   !)django.db.models.expressionsr   _db_default_expression
isinstancer   r   r-   get_compilerrF   compilerI   r   ri   )	rL   r   r   r   rZ   querycompilerr   r^   s	   `        r   r   'BaseDatabaseSchemaEditor.db_default_sql  s    611
/9*/L/LD$$U+RX 	 EKK(%%%A&..z:??##== 5 I& IIIKF &((r    c                    ^  UR                  T R                  5      u  p#UR                  (       a  SOSnT R                  R                  R                  (       a  U[        U 4S jU 5       5      -  nSnSU SU 3U4$ )z3Return the SQL to use in a GENERATED ALWAYS clause.STOREDVIRTUALc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr1   rk   r   s     r   r6   ABaseDatabaseSchemaEditor._column_generated_sql.<locals>.<genexpr>  s!     3XQWAD4D4DQ4G4GQWr   r\   zGENERATED ALWAYS AS (z) )r   rF   
db_persistrI   r   ri   )rL   r   expression_sqlr^   persistency_sqls   `    r   r   .BaseDatabaseSchemaEditor._column_generated_sql  sq    !&!4!4T__!E&+&6&6(I??##==+e3XQW3X.XXNF&~&6b8IJFRRr    c                 N   U R                  5       (       a  U R                  5       nU$ U R                  (       a  S nU$ U R                  (       d?  U R                  (       a.  U R
                  (       a  U R                  5       S:X  a  SnU$ Sn U$ [        U SS5      (       d  [        U SS5      (       ar  U R                  5       nUS:X  a  [        R                  " 5       nU$ [        R                  " 5       nUS:X  a  UR                  5       nU$ US	:X  a  UR                  5       nU$ S nU$ )
NBinaryFieldr    ra   auto_nowFauto_now_addDateTimeField	DateField	TimeField)has_defaultget_defaultr   r   blankr   r   getattrr   nowr   datetime)r   defaultinternal_types      r   _effective_default+BaseDatabaseSchemaEditor._effective_default  s    '')G( ' __G$ # 0K0K&&(M9    UJ..'%QV2W2W!335M/",,.  #,,. K/%llnG
 	 #k1%llnG  Gr    c                 X    UR                  U R                  U5      U R                  5      $ )z2Return a field's effective database default value.)get_db_prep_saver	  rF   r   s     r   r   *BaseDatabaseSchemaEditor.effective_default  s$    %%d&=&=e&DdooVVr    c                     [        5       e)a(  
Return a quoted version of the value so it's safe to use in an SQL
string. This is not safe against injection from user code; it is
intended only for use in making SQL scripts or preparing default values
for particularly tricky backends (defaults are not user-defined, though,
so this is safe).
r   r   s     r   rk   $BaseDatabaseSchemaEditor.quote_value  s     "##r    c           	         U R                  U5      u  p#U R                  X#=(       d    S5        U R                  R                  R                  (       a  UR
                  R                  (       a'  U R                  USUR
                  R                  5        U R                  R                  R                  (       dw  UR
                  R                   H]  nUR                  (       d  M  UR                  U R                  S9nUS   nU R                  " U R                  XXdR                  5      6   M_     U R                  R                  U R                  U5      5        UR
                  R                    HY  nUR"                  R$                  R
                  R&                  (       d  M4  U R)                  UR"                  R$                  5        M[     g)zZ
Create a table and any accompanying indexes or unique constraints for
the given `model`.
Nrt   r   )r   rU   rF   rI   supports_commentsr(   db_table_commentalter_db_table_commentr   r   r   r   _alter_column_comment_sqlrP   r   _model_indexes_sqllocal_many_to_manyr>   throughauto_createdcreate_model)rL   r-   rZ   r^   r   r   
field_types          r   r  %BaseDatabaseSchemaEditor.create_model  sQ   
 nnU+ 	S.D)??##55{{++++E49U9UV??++DD"[[55E'''*/*=*='+ +> + &5V%<
!;; %j:J:J 6 	  !8!8!?@ [[33E!!))//<<<!!%"4"4"<"<= 4r    c                 d   UR                   R                   HY  nUR                  R                  R                   R                  (       d  M4  U R                  UR                  R                  5        M[     U R                  U R                  SU R                  UR                   R                  5      0-  5        [        U R                  5       Ha  n[        U[        5      (       d  M  UR                  UR                   R                  5      (       d  MF  U R                  R                  U5        Mc     g)z!Delete a model from the database.r   N)r(   r  r>   r  r  delete_modelrU   sql_delete_tablerq   r   listrP   r   r
   references_tableremove)rL   r-   r   rZ   s       r   r  %BaseDatabaseSchemaEditor.delete_model  s     [[33E!!))//<<<!!%"4"4"<"<= 4
 	!!)=)=>	
 ))*C#y))c.B.B$$/ / !!((-	 +r    c                     UR                   (       a&  U R                  R                  R                  (       d  gU R	                  UR                  X5      SS9  g)zAdd an index on a model.Nr^   )contains_expressionsrF   rI   supports_expression_indexesrU   r   rL   r-   indexs      r   	add_index"BaseDatabaseSchemaEditor.add_index)  s@     &&OO,,HH 	U%%e24@r    c                     UR                   (       a&  U R                  R                  R                  (       d  gU R	                  UR                  X5      5        g)zRemove an index from a model.N)r%  rF   rI   r&  rU   
remove_sqlr'  s      r   remove_index%BaseDatabaseSchemaEditor.remove_index4  s:     &&OO,,HHU%%e23r    c                     U R                   R                  R                  (       a5  U R                  U R	                  XR
                  UR
                  5      S S9  g U R                  X5        U R                  X5        g )Nr$  )rF   rI   can_rename_indexrU   _rename_index_sqlr   r-  r)  )rL   r-   	old_index	new_indexs       r   rename_index%BaseDatabaseSchemaEditor.rename_index=  s]    ??##44LL&&unninnM  
 e/NN5,r    c                 V    UR                  X5      nU(       a  U R                  USS9  gg)zAdd a constraint to a model.Nr$  )r   rU   rL   r-   r   rZ   s       r   add_constraint'BaseDatabaseSchemaEditor.add_constraintG  s,    ##E0 LLTL* r    c                 X    UR                  X5      nU(       a  U R                  U5        gg)z!Remove a constraint from a model.N)r,  rU   r7  s       r   remove_constraint*BaseDatabaseSchemaEditor.remove_constraintO  s&    ##E0LL r    c                    U Vs1 s H  n[        U5      iM     nnU Vs1 s H  n[        U5      iM     nnUR                  U5       H$  nU R                  UUSSS.U R                  5        M&     UR                  U5       HM  nU Vs/ s H  oR                  R                  U5      PM     nnU R                  U R                  X5      5        MO     gs  snf s  snf s  snf )z
Deal with a model changing its unique_together. The input
unique_togethers must be doubly-nested, not the single-nested
["foo", "bar"] format.
TF)r   r   N)ri   
difference_delete_composed_indexsql_delete_uniquer(   r   rU   r   )	rL   r-   old_unique_togethernew_unique_togetherr   oldsnewsr   r   s	            r   alter_unique_together.BaseDatabaseSchemaEditor.alter_unique_togetherU  s     -@@,?&f,?@,?@,?&f,?@ood+F''6&&	 ,  ??40K@KLukk++E2FLLL00?@ 1 A@ Ms   CC$Cc           	         U Vs1 s H  n[        U5      iM     nnU Vs1 s H  n[        U5      iM     nnUR                  U5       H$  nU R                  UUSSS.U R                  5        M&     UR                  U5       HL  nU Vs/ s H  oR                  R                  U5      PM     nnU R                  U R                  XSS95        MN     gs  snf s  snf s  snf )z
Deal with a model changing its index_together. The input
index_togethers must be doubly-nested, not the single-nested
["foo", "bar"] format.
TF)r(  r   _idx)r   suffixN)ri   r>  r?  sql_delete_indexr(   r   rU   _create_index_sql)	rL   r-   old_index_togethernew_index_togetherr   rC  rD  r   r   s	            r   alter_index_together-BaseDatabaseSchemaEditor.alter_index_togetherj  s     -??,>&f,>?,>?,>&f,>?ood+F''%0%%	 ,  ??40K@KLukk++E2FLLL//V/TU 1 @? Ms   CC$Cc           
      P   UR                   R                   Vs1 s H  oUR                  iM     nnUR                   R                   Vs1 s H  oUR                  iM     nnU Vs/ s H'  oR                   R	                  U5      R
                  PM)     n	nU R                  " UU	4SXg-  0UD6n
UR                  S5      SL ab  U
(       a[  U R                  R                  R                  (       a6  [        U R                  UR                   R                  U	SS95      nX;   a  U/n
[        U
5      S:w  aD  [        S[        U
5      < SUR                   R                  < S	S
R!                  U	5      < S35      eU R#                  U R%                  XAU
S   5      5        g s  snf s  snf s  snf )Nexcluder   TFquote   Found wrong number (z) of constraints for (r   )r   )r(   r   r   indexesr   r   _constraint_namesr   rF   rI   *allows_multiple_constraints_on_same_fieldsrc   _unique_constraint_namer   len
ValueErrorr   rU   _delete_constraint_sql)rL   r-   r   constraint_kwargsrZ   r   meta_constraint_namesmeta_index_namesr   columnsconstraint_namesdefault_names               r   r?  /BaseDatabaseSchemaEditor._delete_composed_index  s   .3kk.E.E!
.E
OO.E 	 !
 ?Dkk>Q>QR>Q
OO>QRDJKF5;;((/66FK11
 *<
  	
 !!(+t3 ((SS ,,U[[-A-A7RW,XL /$0>  A% ()KK((IIg&	  	T00=Ma=PQR?!
 SKs   FF#.F#c                    X#:X  dG  U R                   R                  R                  (       a#  UR                  5       UR                  5       :X  a  gU R	                  U R
                  U R                  U5      U R                  U5      S.-  5        U R                   H+  n[        U[        5      (       d  M  UR                  X#5        M-     g)z#Rename the table a model points to.N)	old_table	new_table)rF   rI   ignores_table_name_caselowerrU   sql_rename_tablerq   rP   r   r
   rename_table_references)rL   r-   old_db_tablenew_db_tablerZ   s        r   alter_db_table'BaseDatabaseSchemaEditor.alter_db_table  s    'OO$$<<""$(:(:(<<!!!__\:!__\:	
 $$C#y))++LG %r    c                 ,   U R                   (       a  U R                  R                  R                  (       a]  U R	                  U R                   U R                  UR                  R                  5      U R                  U=(       d    S5      S.-  5        g g g )Nra   )r   comment)	sql_alter_table_commentrF   rI   r  rU   rq   r(   r   rk   )rL   r-   old_db_table_commentnew_db_table_comments       r   r  /BaseDatabaseSchemaEditor.alter_db_table_comment  so    ''DOO,D,D,V,VLL,,!__U[[-A-AB#//0D0JK -W'r    c                     U R                  U R                  U R                  UR                  R                  5      U R                  U5      U R                  U5      S.-  5        g)z)Move a model's table between tablespaces.)r   old_tablespacenew_tablespaceN)rU   sql_retablespace_tablerq   r(   r   )rL   r-   old_db_tablespacenew_db_tablespaces       r   alter_db_tablespace,BaseDatabaseSchemaEditor.alter_db_tablespace  sQ    '')=)=>"&//2C"D"&//2C"D	
r    c           
       	   UR                   (       aT  UR                  R                  R                  R                  (       a%  U R                  UR                  R                  5      $ U R                  XSS9u  p4Uc  gUR                  U R                  S9=n(       a  USU 3-  nUR                  U R                  S9nUS   (       a  USU R                  U-  -   -  nUR                  (       Ga  U R                  R                  R                  (       Ga  UR                  (       Gax  SnU R                  (       Ga9  UR                  R                  R                  R                   nUR                  R                  R                  R#                  UR                  R$                  5      R&                  n	[)        UR                  R                   5      u  pUSU R                  U R+                  XU5      U
(       a  SU R-                  U
5      -  OS	U R-                  UR&                  5      U R-                  U5      U R-                  U	5      U R                  R.                  R1                  5       S
.-  -   -  nO+U R2                  R5                  U R7                  XU5      5        U R8                  U R-                  UR                  R                   5      U R-                  UR&                  5      US.-  nU R;                  X=(       d    S5        UR<                  [>        L a  U RA                  U5      (       dl  U RC                  U5      bZ  U RE                  USUSS9u  pU RF                  U R-                  UR                  R                   5      US.-  nU R;                  X5        URH                  (       ax  U R                  R                  RJ                  (       aS  U R                  R                  RL                  (       d.  US   nU R:                  " U RO                  XXRH                  5      6   U R2                  RQ                  U RS                  X5      5        U R                  R                  RT                  (       a  U R                  RW                  5         gg)zw
Create a field on a model. Usually involves adding a column, but may
involve adding a table instead (for M2M fields).
T)r   Nrt   rv   ru   ry   z%s.ra   )r   	namespacer   rw   rx   
deferrable)r   r   r   dropr   changesr   ),r   r>   r  r(   r  r  r   r   rF   r   r   rI   r   r   sql_create_column_inline_fkr-   r   r   r   r   r   _fk_constraint_namerq   rp   deferrable_sqlrP   rh   r   sql_create_columnrU   r   r   r   r   _alter_column_default_sqlsql_alter_columnr   r  r   r  r   _field_indexes_sqlconnection_persists_old_columnsclose)rL   r-   r   r   r^   r   r   constraint_suffixrw   rx   r  _rZ   changes_sqlr  s                  r   	add_field"BaseDatabaseSchemaEditor.add_field  s    %"4"4"<"<"B"B"O"O$$U%7%7%?%?@@!__U4_P
#22doo2NN?NAo.//J''4??'C	W# 9 9I EEEJ((>>>### @/// --3399BB!..44::DD&&11&   00D0DE	cD$D$D 44UCTU>G	 ::R"ooell; $ 9!%!;"&//"5"5"D"D"F	H 	% 	 	
 !!((''6GH $$__U[[%9%9:ooell3$(
 
 	S.D) ,..u55&&u-9"&"@"@tU #A #K '')=)=>&+ C LL% ((::OO,,EE"6*JLL//*.>.> 	  !8!8!FG??##CCOO!!# Dr    c                    UR                   (       aT  UR                  R                  R                  R                  (       a%  U R                  UR                  R                  5      $ UR                  U R                  S9S   c  gUR                  (       aD  U R                  XR                  /SS9nU H#  nU R                  U R                  X5      5        M%     U R                  U R                  UR                  R                  5      U R                  UR                  5      S.-  nU R                  U5        U R                  R                  R                   (       a  U R                  R#                  5         [%        U R&                  5       Hl  n[)        U[*        5      (       d  M  UR-                  UR                  R                  UR                  5      (       d  MQ  U R&                  R/                  U5        Mn     g)zm
Remove a field from a model. Usually involves deleting a column,
but for M2Ms may involve deleting a table.
rt   r   NTforeign_key)r   r   )r   r>   r  r(   r  r  r   rF   rY  r   rU   _delete_fk_sqlsql_delete_columnrq   r   rI   r  r  r  rP   r   r
   references_columnr!  )rL   r-   r   fk_namesfk_namerZ   s         r   remove_field%BaseDatabaseSchemaEditor.remove_field!  su    %"4"4"<"<"B"B"O"O$$U%7%7%?%?@@$//:6BJ--ell^QU-VH#T00@A $ $$__U[[%9%9:ooell3(
 
 	S??##CCOO!!#))*C#y))c.C.C$$ell/ / !!((-	 +r    c           
         U R                  X#5      (       d  gUR                  U R                  S9nUS   nUR                  U R                  S9nUS   nSn	Uc  UR                  b  Uc!  UR                  c  [	        SU< SU< S35      eUc  Uc  UR                  R
                  (       a  UR                  R
                  (       ap  UR                  R
                  R                  R                  (       aA  UR                  R
                  R                  R                  (       a  U R                  XX45      $ Uc  Uc  UR                  R
                  (       az  UR                  R
                  (       a_  UR                  R
                  R                  R                  (       d0  UR                  R
                  R                  R                  (       d  gUb  Uc  [	        SU< SU< S35      eUR                  UR                  :w  d+  UR                  (       a  UR                  UR                  :w  a  S	n	OLUR                  (       a;   UR                  U R                  5      n
UR                  U R                  5      nX:g  n	U	(       a  [	        S
U S35      eU R                  UUUUUUUU5        g! [         a    S	n	 N=f = f)z
Allow a field's type, uniqueness, nullability, default, column,
constraints, etc. to be modified.
`old_field` is required to compute the necessary changes.
If `strict` is True, raise errors if the old column does not match
`old_field` precisely.
Nrt   r   FzCannot alter field z into zT - they do not properly define db_type (are you using a badly-written custom field?)zr - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)Tz7Modifying GeneratedFields is not supported - the field z6 must be removed and re-added with the new definition.)_field_should_be_alteredr   rF   r>   r]  r  r(   r  _alter_many_to_manyr   r   r   r   _alter_field)rL   r-   r5   r;   strictold_db_paramsold_typenew_db_paramsnew_typemodifying_generated_fieldold_field_sqlnew_field_sqls               r   alter_field$BaseDatabaseSchemaEditor.alter_fieldA  sy    ,,YBB!//4??/K (!//4??/K ($)!!7!7!?!7!7!? i)   &&..**22**2288EE**2288EE ++EiPP &&..**22!..66<<II!..66<<II !1 .7	C 
   I$7$77I$8$8I<P<P$P(,%  K ) 7 7 H
 !* 7 7 H,9,J)$I) UH H 
 			
  1,0)1s   J. .J=<J=c                     U R                   R                  nUR                  U R                   5      nSUS'    X1R                  5          U-  $ ! [         a     g f = f)N__column_name__r   )rF   data_type_check_constraintsdb_type_parametersr   KeyError)rL   r   r   check_constraintsdatas        r   _field_db_check(BaseDatabaseSchemaEditor._field_db_check  s_     !OOGG''8*X	$%<%<%>?$FF 		s   A 
AAc	           	         [        5       n	U R                  R                  R                  (       a  UR                  (       a  UR
                  (       a  U R                  UUS1S9(       a  U R                  XR                  /SS9n
U(       aM  [        U
5      S:w  a>  [        S[        U
5      < SUR                  R                  < SUR                  < 35      eU
 H?  nU	R                  UR                  45        U R                  U R                  X5      5        MA     UR                   (       a  UR                   (       a  U R#                  X#5      (       a  UR                  R$                   Vs1 s H  oR&                  iM     nnU R                  UUR                  /SS	US
9nU(       aM  [        U5      S:w  a>  [        S[        U5      < SUR                  R                  < SUR                  < 35      eU H#  nU R                  U R)                  X5      5        M%     UR+                  S5      nUR+                  S5      nU R                  R                  R                  =(       a\    UR,                  =(       a    UR,                  =(       d    UR                   =(       a    UR                   =(       a    XE:g  =(       d    UU:g  nU(       ay  [/        X#5       Hj  u  nnU R                  UR0                  UR2                  R                  /SS9nU H.  nU R                  U R                  UR0                  U5      5        M0     Ml     UR4                  (       a  UR                   (       d  UR4                  (       a  UR                   (       a  UR                  R6                   Vs1 s H  nUR&                  iM     nnU R                  UUR                  /S[8        R:                  US9nU H$  nU R                  U R=                  UU5      5        M&     U R?                  X&5      nU R?                  X75      nUU:w  a  U(       a  UR                  R$                   Vs1 s H  oR&                  iM     nnU R                  UUR                  /SUS9nU(       aM  [        U5      S:w  a>  [        S[        U5      < SUR                  R                  < SUR                  < 35      eU H#  nU R                  U RA                  X5      5        M%     UR                  UR                  :w  a  U R                  U RC                  UR                  R                  X#U5      5        U RD                   HU  n[G        U[H        5      (       d  M  URK                  UR                  R                  UR                  UR                  5        MW     / n/ n/ nURM                  U R                  S9n URM                  U R                  S9n!XE:w  dK  U U!:w  dE  UU:w  d?  U R                  R                  RN                  (       aS  URP                  URP                  :w  a9  U RS                  XX5UU5      u  n"n#URU                  U"5        URW                  U#5        URX                  [Z        LaO  URX                  [Z        L d  URX                  URX                  :w  a!  URU                  U R]                  XU5      5        O3URX                  [Z        La   URU                  U R]                  XUSS95        S	n$UR^                  (       a  UR^                  (       dw  URX                  [Z        L ad  U Ra                  U5      n%U Ra                  U5      n&U Rc                  U5      (       d,  U%U&:w  a&  U&b#  Sn$URU                  U Re                  XU5      5        UR^                  UR^                  :w  a*  U Rg                  XU5      n"U"(       a  URU                  U"5        URi                  5       =(       d    URX                  [Z        L=(       a$    UR^                  =(       a    UR^                  (       + n'U(       d  U(       Ga  U'(       d  UU-  nU R                  R                  Rj                  (       a9  U(       a2  [m        [o        U6 5      u  nn(SRq                  U5      [s        U(/ 5      4/nU HK  u  nn(U R                  U Rt                  U Rw                  UR                  R                  5      US.-  U(5        MM     U'(       a  URX                  [Z        L a  Sn)W&/n(OU Ry                  U5      u  n)n(U R                  U Rz                  U Rw                  UR                  R                  5      U Rw                  UR                  5      U)S.-  U(5        U HK  u  nn(U R                  U Rt                  U Rw                  UR                  R                  5      US.-  U(5        MM     U(       a  U H  u  nn(U R                  UU(5        M     UR,                  (       a"  UR,                  (       d  U R}                  X5        U R                  X#5      (       a!  U R                  U R                  X/5      5        UR4                  (       a  UR                   (       aA  UR4                  (       a0  UR                   (       d  U R                  U R                  X/S95        / n*U(       a  U*RW                  [/        X#5      5        U R#                  X#5      (       a:  U R                  U R                  X5      5        U*RW                  [/        X#5      5        U* GH  u  n+nUR2                  R                  U R                  S9n,U,S   n-U,R+                  S5      n.U+R2                  R                  U R                  S9n/U/R+                  S5      n0U RS                  UR0                  U+R2                  UR2                  U-U0U.5      u  n"n#U R                  U Rt                  U Rw                  UR0                  R                  R                  5      U"S   S.-  U"S   5        U# H  u  nn(U R                  UU(5        M     GM!     U R                  R                  R                  (       al  UR                  (       a[  U	(       d"  UR                  (       a  UR
                  (       d2  UR
                  (       a!  U R                  U R                  XS5      5        U(       a_  U* HY  u  n1n2U2R2                  R
                  (       d  M#  U R                  U R                  U2R0                  U2R2                  S5      5        M[     UU:w  a[  U(       aT  U R                  UR                  R                  UR                  /SS9nU R                  U R                  XUS   5      5        U$(       a[  U Re                  XUSS9u  n3n(U Rt                  U Rw                  UR                  R                  5      U3S.-  nU R                  UU(5        U R                  R                  R                  (       a  U R                  R                  5         ggs  snf s  snf s  snf )z3Perform a "physical" (non-ManyToMany) field update.r   )ignoreTr  rT  rU  z!) of foreign key constraints for .F)r   r   rQ  z) of unique constraints for r   )r(  type_rQ  )ru   rQ  z) of check constraints for rt   r  Nr   r  r   )r   r   r  r   r   r   ry   _fk_checkrI  ru   )IsetrF   rI   r   r>   r   r  rY  r   r\  r]  r(   r   addrU   r  r   _field_became_primary_keyr   r   _delete_unique_sqlr   r   r=   related_modelr   db_indexrX  r   rI  _delete_index_sqlr  _delete_check_sql_rename_field_sqlrP   r   r
   rename_column_referencesr   r  r   _alter_column_type_sqlrh   r   r   r   "_alter_column_database_default_sqlr   r   r   r  _alter_column_null_sqlr   supports_combined_altersri   r<   r   sumr  rq   r   sql_update_with_default_delete_primary_key_unique_should_be_addedr   rK  _create_primary_key_sqlr   r   _create_index_name_create_check_sqlr  r  )4rL   r-   r5   r;   r  r  r  r  r  fks_droppedr  r  r   r`  rc  constraint_nameold_collationnew_collationdrop_foreign_keys_old_relrA   rel_fk_namesr(  ra  index_names
index_nameold_db_checknew_db_checkrZ   actionsnull_actionspost_actionsold_type_suffixnew_type_suffixfragmentother_actionsneeds_database_defaultold_defaultnew_defaultfour_way_default_alterationr^   r   rels_to_updater@   rel_db_paramsrel_typerel_collationold_rel_db_paramsold_rel_collationr  relr  s4                                                       r   r  %BaseDatabaseSchemaEditor._alter_field  sJ    eOO$$::&&''--$~ .  --(()t . H #h-1,  H,,!((	  $!1!1 34T00@A $   D$B$B9$X$X 38++2I2I%2IJ2I " %  $55!!"!-  6   #./14  ,-,,!((	  $4T44ULM $4 &))+6%))+6OO$$:: M&&@9+@+@ ;$$9)9)9M
 &KM],J 	  &>i%S!'#55))GMM,@,@+At  6    ,GLL!4!4W5J5JG!TU  ,	 &T" $$''9+;+; 9>8K8KL8Ku

8KL 00!!"ll( 1 K *
 T33E:FG	 * ++IE++IE<'L27++2I2I%2IJ2I " %  $55!!"-	  6   #./14  ,-,,!((	  $4T33EKL $4 y///LL&&KK(() ((c9--00,,i.>.>	@P@P ) #22doo2N#22doo2N  /1-((::((I,@,@@ '+&A&A)}m'#Hm NN8$.|3$$4''9+?+??;;EiX !!5NN77id 8  "'NNNN$$400;K00;K..y99;.+)-&225YO >>Y^^+225YOH##H- !!#Oy';';<'O'6~~4inn"4 	$ l. <'''@@W#CM2V IIcNCO<=&V))!%1E1E!F#&
   ' +''<7"&K)]F*.*=*=i*H'K00!%1E1E!F"&//)2B2B"C#.  $0KCLL--%)__U[[5I5I%J'*
  $0 +VS&)  ,   )>)>$$U3''	==LL00DE ##y'7'7""$$LL//k/JK !!":9"PQ)))??LL55eGH!!":9"PQ .GW#MM774??7SM$V,H)--k:M ' ; ;t ; W 1 5 5k B&*&A&A%%!'#Hm LL%%!__W-B-B-H-H-Q-QR'{
   -VS&)  -- !/4 OO$$::&&9#9#9AXAX''LL##E6VW (399***LL++C,=,=syy%P ) <'L"55$$y'7'7&8 6 O LL&&u}W?UV
 ""&"@"@)$ #A #K '')=)=>&+ C LLf%??##CCOO!!# DK
%t  M&%s   -y7 y<zc                 @   U R                   R                  R                  (       a  UR                  (       a  gUR	                  U R                   S9nUR
                  (       a  U R                  OU R                  nUU R                  UR                  5      US   S.-  / 4$ )z
Hook to specialize column null alteration.

Return a (sql, params) fragment to set a column to null or non-null
as required by new_field, or None if no changes are required.
Nrt   r   )r   r   )
rF   rI   r   r   r   r   sql_alter_column_nullsql_alter_column_not_nullrq   r   )rL   r-   r5   r;   r  rZ   s         r   r  /BaseDatabaseSchemaEditor._alter_column_null_sql  s     OO$$FF// %33t3OM >> **33  "ooi.>.>?)&1
  r    c                    U R                  U5      nU R                  U5      nU/nU(       a  / nO8U R                  R                  R                  (       a  U R                  U5      n/ nUR                  U R                  S9nU(       a+  UR                  (       a  U R                  n	OU R                  n	OU R                  n	U	U R                  UR                  5      US   US.-  U4$ )z
Hook to specialize column default alteration.

Return a (sql, params) fragment to add or drop (depending on the drop
argument) a default to new_field's column.
rt   r   r   r   r  )r   r   rF   rI   r   r   r   r    sql_alter_column_no_default_nullsql_alter_column_no_defaultsql_alter_column_defaultrq   r   )
rL   r-   r5   r;   r  r  r  r^   r  rZ   s
             r   r  2BaseDatabaseSchemaEditor._alter_column_default_sql0  s     ,,Y7**95F__%%?? **;7GF!//4??/K~~;;66//C//)*:*:;%f-" 
 	
r    c                     U(       a  U R                   nSn/ nOU R                  nU R                  U5      u  pgUR                  U R                  S9nUU R                  UR                  5      US   US.-  U4$ )z
Hook to specialize column database default alteration.

Return a (sql, params) fragment to add or drop (depending on the drop
argument) a default to new_field's column.
ra   rt   r   r  )r  r  r   r   rF   rq   r   )	rL   r-   r5   r;   r  rZ   r   r^   r  s	            r   r  ;BaseDatabaseSchemaEditor._alter_column_database_default_sqlV  s     22CKF//C"&"5"5i"@K!//4??/K//)*:*:;%f-& 
 	
r    c                 <   / nU R                  XeUR                  R                  5      =n(       a  SU 3nOSnSn	U R                  R                  R
                  (       a  UR                  (       d}  UR                  UR                  :w  a7  U R                  XXCR                  5      u  pU
(       a  UR                  X45        UR                  (       a  U R                  UR                  5      n	U R                  U R                  UR                  5      UUU	S.-  / 4U4$ )a\  
Hook to specialize column type alteration for different backends,
for cases when a creation type is different to an alteration type
(e.g. SERIAL in PostgreSQL, PostGIS fields).

Return a 2-tuple of: an SQL fragment of (sql, params) to insert into
an ALTER TABLE statement and a list of extra (sql, params) tuples to
run once the field is altered.
rv   ra   )r   r   r   rr  )r   r(   r   rF   rI   r  r   r   r  rh   r   sql_alter_column_typerq   r   )rL   r-   r5   r;   r  r  r  r  collate_sqlcomment_sqlrZ   r^   s               r   r  /BaseDatabaseSchemaEditor._alter_column_type_sqlr  s    ++%++*>*>
 
; 
 k]+KK??##55i>T>T##y';';; #<<h0D0D !((#7##"//	0D0DE **"ooi.>.>?$!,*	 	 
 	
r    c                     U R                   U R                  UR                  R                  5      U R                  UR                  5      U R                  U5      S.-  / 4$ )N)r   r   rr  )sql_alter_column_commentrq   r(   r   r   r   )rL   r-   r;   r  new_db_comments        r   r  2BaseDatabaseSchemaEditor._alter_column_comment_sql  sZ    )))=)=>//)*:*:;,,^< 
 	
r    c                 6    U R                  U=(       d    S5      $ )Nra   r   )rL   rr  s     r   r   %BaseDatabaseSchemaEditor._comment_sql  s    2..r    c                    UR                   R                  R                  R                  UR                   R                  R                  R                  :w  aw  U R	                  UR                   R                  UR                   R                  R                  R                  UR                   R                  R                  R                  5        U R                  UR                   R                  UR                   R                  R                  R                  UR                  5       5      UR                   R                  R                  R                  UR                  5       5      5        U R                  UR                   R                  UR                   R                  R                  R                  UR                  5       5      UR                   R                  R                  R                  UR                  5       5      5        g)z*Alter M2Ms to repoint their to= endpoints.N)	r>   r  r(   r   ro  r  r   m2m_reverse_field_namem2m_field_name)rL   r-   r5   r;   r  s        r   r  ,BaseDatabaseSchemaEditor._alter_many_to_many  s    ""**0099%%--33<<= &&..&&..44==&&..44== 	""** ""**00::002 ""**00::002	
 	""**""**00::9;S;S;UV""**00::9;S;S;UV		
r    ra   c                    [        U5      u  pA[        U/UQ7SS06< U< 3nU R                  R                  R	                  5       =(       d    SnU< SSR                  U5      < SU< 3n[        U5      U::  a  U$ [        U5      US-  :  a  USUS-   nU[        U5      -
  S-  S-
  nUSU < SSR                  U5      SU < SU< 3nUS	   S:X  d  US	   R                  5       (       a  S
USS -  nU$ )z
Generate a unique name for an index/unique constraint.

The name is divided into 3 parts: the table name, the column names,
and a unique digest and suffix.
length      r     N   rT  r   zD%s)r   r   rF   rp   max_name_lengthr   r\  isdigit)	rL   
table_namecolumn_namesrI  r  hash_suffix_part
max_lengthr  other_lengths	            r   r  +BaseDatabaseSchemaEditor._create_index_name  s    )4=l=1=
 __((88:Ac
#-sxx/EGWX
z?j( :>1/0A*/B"S)9%::q@1D}%HH\"=L1

 a=C:a=#8#8#:#:CR0Jr    c                 t   Uc  [        U5      S:X  a$  US   R                  (       a  US   R                  nOW[        R                  (       a  [        R                  nO1UR                  R                  (       a  UR                  R                  nUb(  SU R
                  R                  R                  U5      -   $ g)NrT  r   rv   ra   )r\  r   r   DEFAULT_INDEX_TABLESPACEr(   rF   rp   r   )rL   r-   r   r   s       r   _get_index_tablespace_sql2BaseDatabaseSchemaEditor._get_index_tablespace_sql  s     6{aF1I$;$; &q	 7 722 ( A A** % 9 9$,,;;MJJJr    c                     U(       a  SU-   $ g)Nz WHERE ra   r\   )rL   	conditions     r   _index_condition_sql-BaseDatabaseSchemaEditor._index_condition_sql  s    y((r    c                     U(       a%  U R                   R                  R                  (       d  g[        S[	        UR
                  R                  X R                  5      S9$ )Nra   z INCLUDE (%(columns)s))rb  )rF   rI   supports_covering_indexesr
   r   r(   r   rq   )rL   r-   rb  s      r   _index_include_sql+BaseDatabaseSchemaEditor._index_include_sql  sB    doo66PP$EKK00'??K
 	
r    )r   r   rI  usingr   col_suffixesrZ   	opclassesr  includeexpressionsc                2  ^ ^ U=(       d    / nU=(       d    / n[        USS9R                  T R                  S9nT R                  XUS9nU Vs/ s H  oR                  PM     nnU=(       d    T R
                  nUR                  R                  nUU 4S jn[        U[        UT R                  5      [        UUUU5      UU(       a  T R                  UUXy5      O[        UXT R                  5      UT R                  U
5      T R!                  X5      S9$ s  snf )z
Return the SQL statement to create the index for one or several fields
or expressions. `sql` can be specified if the syntax differs from the
standard (GIS indexes, ...).
F
alias_colsrt   )r   c                  P   > Tc  TR                   " U 0 UD6mTR                  T5      $ r1   )r  rq   )argskwargsr   rL   s     r   create_index_nameEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name(  s,    |..????4((r    )r   r   r&  rb  r_   r  r)  )r   r   rF   r  r   sql_create_indexr(   r   r
   r   rq   r	   _index_columnsr   rk   r   r$  )rL   r-   r   r   rI  r&  r   r'  rZ   r(  r  r)  r*  r   r   r   rb  r3  r   r1  s   `  `                r   rK  *BaseDatabaseSchemaEditor._create_index_sql  s   * 2!'R51>> ? 
 77 8 
 .44VE<<V47$"7"7$$	) t/5'63DE  ##E7LL t?O?OP //	:++E;
 	
 5s   Dc                    [        U=(       d    U R                  [        UR                  R                  U R
                  5      U R                  U5      S9nUR                  S   R                  nUR                  S   n[        U R                  5       HM  n[        U[         5      (       d  M  UR                  XV5      (       d  M2  U R                  R                  U5        MO     U$ )Nr   r   r   r   )r
   rJ  r   r(   r   rq   partsr   r  rP   r   references_indexr!  )rL   r-   r   rZ   r   r  r  s          r   r  *BaseDatabaseSchemaEditor._delete_index_sql=  s    (4((,,doo>&
	 __W-33
__V,
))*C#y))c.B.B/ / !!((-	 + r    c                     [        U R                  [        UR                  R                  U R
                  5      U R                  U5      U R                  U5      S9$ )N)r   old_namenew_name)r
   sql_rename_indexr   r(   r   rq   )rL   r-   r<  r=  s       r   r1  *BaseDatabaseSchemaEditor._rename_index_sqlO  sH    !!,,doo>__X.__X.	
 	
r    c                 ,    [        XU R                  US9$ )N)r'  )r   rq   )rL   r   rb  r'  r(  s        r   r4  'BaseDatabaseSchemaEditor._index_columnsW  s    ut\RRr    c                    UR                   R                  (       a6  UR                   R                  (       d  UR                   R                  (       a  / $ / nUR                   R                   H#  nUR                  U R                  X5      5        M%     UR                   R                   H[  nUR                  (       a'  U R                  R                  R                  (       d  M;  UR                  UR                  X5      5        M]     U$ )zb
Return a list of all index SQL statements (field indexes, Meta.indexes)
for the specified model.
)r(   managedproxyswappedr   r   r  rX  r%  rF   rI   r&  rh   r   )rL   r-   outputr   r(  s        r   r  +BaseDatabaseSchemaEditor._model_indexes_sqlZ  s    
 {{""ekk&7&75;;;N;NI[[--EMM$11%?@ . [[((E..??++GGGe..u;< ) r    c                 t    / nU R                  X5      (       a  UR                  U R                  X/S95        U$ )zD
Return a list of all index SQL statements for the specified field.
r  )_field_should_be_indexedrh   rK  )rL   r-   r   rF  s       r   r  +BaseDatabaseSchemaEditor._field_indexes_sqlm  s;     ((66MM$00w0GHr    c                 V   UR                   (       d  UR                   (       d  gU=(       d
    [        5       nUR                  5       u  pEpgUR                  5       u  pHpUR                  UR                  5       H  nUR                  US 5        M     UR                  UR                  5       H  nU
R                  US 5        M     UR                  (       d  UR                  (       a  UR                  (       az  UR                  R                  R                  R                  UR                  R                  R                  R                  :X  a$  UR                  SS 5        U
R                  SS 5        UR                  S5      (       a\  U
R                  S5      (       aF  U R                  U5      U R                  U5      :X  a"  UR                  S5        U
R                  S5        U R                  UR                  5      U R                  UR                  5      :g  =(       d	    XVU4XU
4:g  $ )NFtor   )concreter  deconstructunionnon_db_attrspopr   r>   r-   r(   r   r   r   rq   r   )rL   r5   r;   r  r  old_pathold_args
old_kwargsnew_pathnew_args
new_kwargsattrs               r   r  1BaseDatabaseSchemaEditor._field_should_be_alteredv  s   !!)*<*<35,5,A,A,C)X,5,A,A,C)X LL!7!78DNN4& 9LL!7!78DNN4& 9 &&&&&&&&,,22;;%%++11::; NN4&NN4& NN<((|,,##I.$2E2Ei2PPNN<(NN<(y//0DOO5
 
 R*-(j1QQ	Rr    c                 J    UR                   =(       a    UR                  (       + $ r1   )r  r   rL   r-   r   s      r   rI  1BaseDatabaseSchemaEditor._field_should_be_indexed  s    ~~2ell"22r    c                 J    UR                   (       + =(       a    UR                   $ r1   r   rL   r5   r;   s      r   r  2BaseDatabaseSchemaEditor._field_became_primary_key  s    (((BY-B-BBr    c                     UR                   (       + =(       a7    UR                  =(       a$    UR                  (       + =(       d    UR                   $ r1   )r   r   r_  s      r   r  0BaseDatabaseSchemaEditor._unique_should_be_added  s?    %%% @  @%%%>)>)>	
r    c                     U R                   U R                  U5      U R                  UR                  5      U R                  UR                  5      US.-  $ )N)r   
old_column
new_columnr   )sql_rename_columnrq   r   )rL   r   r5   r;   r  s        r   r  *BaseDatabaseSchemaEditor._rename_field_sql  sM    %%__U+//)*:*:;//)*:*:;	)
 
 	
r    c           
         [        UR                  R                  U R                  5      nU R	                  XU5      n[        UR                  R                  UR                  /U R                  5      n[        UR                  R                  R                  R                  U R                  5      n[        UR                  R                  R                  R                  UR                  R                  /U R                  5      nU R                  R                  R                  5       n	[        U R                  UUUUUU	S9$ )N)r   r   r   rw   rx   r  )r   r(   r   rq   r  r   r   target_fieldr-   rF   rp   r  r
   sql_create_fk)
rL   r-   r   rI  r   r   r   rw   rx   r  s
             r   r   'BaseDatabaseSchemaEditor._create_fk_sql  s    ekk**DOO<''f=--~tO++1177@@$//R$$**33&&'OO
	
 __((779
!
 	
r    c                    ^  U 4S jn[        UR                  R                  UR                  /[	        UR
                  R                  R                  R                  5      S   UR
                  R                  /UU5      $ )Nc                  F   > TR                  TR                  " U 0 UD65      $ r1   rq   r  r/  r0  rL   s     r   create_fk_nameDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_name  s"    ??4#:#:D#KF#KLLr    rT  )r   r(   r   r   r   ri  r-   )rL   r-   r   rI  rp  s   `    r   r  ,BaseDatabaseSchemaEditor._fk_constraint_name  sk    	M KK  \\NU//55;;DDEaH&&'
 	
r    c                 :    U R                  U R                  X5      $ r1   )r^  sql_delete_fkrL   r-   r   s      r   r  'BaseDatabaseSchemaEditor._delete_fk_sql      **4+=+=uKKr    c                 `    Uc  gU[         R                  :X  a  gU[         R                  :X  a  gg )Nra   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   DEFERRED	IMMEDIATE)rL   r  s     r   _deferrable_constraint_sql3BaseDatabaseSchemaEditor._deferrable_constraint_sql  s2    ,,,3---4 .r    c                     USL a  gUSL a  gg)NFz NULLS NOT DISTINCTTz NULLS DISTINCTra   r\   )rL   nulls_distincts     r    _unique_index_nulls_distinct_sql9BaseDatabaseSchemaEditor._unique_index_nulls_distinct_sql  s    U"(t#$r    c                     U(       + =(       d     U R                   R                  R                  =(       a    U(       + =(       d     U R                   R                  R                  =(       a    U(       + =(       d     U R                   R                  R                  =(       a`    U(       + =(       d     U R                   R                  R
                  =(       a+    US L =(       d     U R                   R                  R                  $ r1   )rF   rI   supports_partial_indexes&supports_deferrable_unique_constraintsr#  r&  *supports_nulls_distinct_unique_constraints)rL   r  r  r)  r*  r~  s         r   _unique_supported*BaseDatabaseSchemaEditor._unique_supported  s     ]Odoo66OO  S??++RR
 R 8 8 R R  W4??#;#;#W#W $& W??++VV	
r    c
                    U R                  UUUUU	S9(       d  g U(       d  U(       d  U(       d
  U(       d  U	b9  U R                  UUUUUUUU	S9n
U
(       a  U R                  R                  U
5        g U R                  SR                  U Vs/ s H  oR                  UR                  5      PM     sn5      U R                  U5      S.-  nU R                  U R                  U5      US.-  $ s  snf )Nr  r  r)  r*  r~  )r   r  r)  r(  r*  r~  r   )rb  r  r   r   )
r  r   rP   rh   sql_unique_constraintr   rq   r   r{  sql_constraint)rL   r-   r   r   r  r  r)  r(  r*  r~  rZ   r   r   s                r   _unique_sql$BaseDatabaseSchemaEditor._unique_sql  s    %%!#) & 
  ) ))##'- * 	C !!((-//yyV!TVE//%,,"?V!TU99*E3
 

 ""OOD)$&
 
 	
 "Us   $C,
c
                    U R                  UUUUU	S9(       d  g [        USS9R                  U R                  S9n
UR                  R
                  nU Vs/ s H  oR                  PM     nnUc  U R                  XSS9nOU R                  U5      nU(       d  U(       d  U(       d  U(       a  U R                  nOU R                  nU(       a  U R                  XSUS9nO[        XXR                  5      n[        U[        XR                  5      UUU R!                  U5      U R#                  U5      U R%                  X5      U R'                  U	5      S	9$ s  snf )
Nr  Fr,  rt   TrR  r\   )r'  r(  )r   r   rb  r  r  r)  r~  )r  r   r   rF   r(   r   r   r[  rq   sql_create_unique_indexsql_create_uniquer4  r   rk   r
   r   r   r{  r$  r  )rL   r-   r   r   r  r  r)  r(  r*  r~  r   r   r   rb  rZ   s                  r   r   +BaseDatabaseSchemaEditor._create_unique_sql0  sN    %%!#) & 
 51>> ? 
 $$-34VE<<V4<//d/KD??4(D9..C((C))R9 * G "%h@P@PQG///	:66zB++E;@@P	
 		
 5s   Ec                 R   ^  U(       a  U 4S jnOT R                   n[        XSU5      $ )Nc                  F   > TR                  TR                  " U 0 UD65      $ r1   rn  ro  s     r   create_unique_nameLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_namef  s"    t'>'>'O'OPPr    _uniq)r  r	   )rL   r   rb  rS  r  s   `    r   r[  0BaseDatabaseSchemaEditor._unique_constraint_namec  s*    Q "&!8!82DEEr    c	                     U R                  UUUUUS9(       d  g U(       d  U(       d  U(       d  U(       a  U R                  n	OU R                  n	U R                  XU5      $ )Nr  )r  rJ  r@  r^  )
rL   r-   r   r  r  r)  r(  r*  r~  rZ   s
             r   r  +BaseDatabaseSchemaEditor._delete_unique_sqln  s]     %%!#) & 
 9''C((C**3t<<r    c                 b    U R                   U R                  U5      U R                  SU0-  S.-  $ )Nru   r  )r  rq   r   )rL   r   ru   s      r   
_check_sql#BaseDatabaseSchemaEditor._check_sql  s9    ""OOD)33w6FF&
 
 	
r    c                     U R                   R                  R                  (       d  g [        U R                  [        UR                  R                  U R                  5      U R                  U5      US9$ )N)r   r   ru   )	rF   rI    supports_table_check_constraintsr
   sql_create_checkr   r(   r   rq   )rL   r-   r   ru   s       r   r  *BaseDatabaseSchemaEditor._create_check_sql  sU    ''HH!!,,doo>&	
 	
r    c                     U R                   R                  R                  (       d  g U R                  U R                  X5      $ r1   )rF   rI   r  r^  sql_delete_checkru  s      r   r  *BaseDatabaseSchemaEditor._delete_check_sql  s1    ''HH**4+@+@%NNr    c                     [        U[        UR                  R                  U R                  5      U R	                  U5      S9$ )Nr7  )r
   r   r(   r   rq   )rL   templater-   r   s       r   r^  /BaseDatabaseSchemaEditor._delete_constraint_sql  s6    ,,doo>&
 	
r    c
           
      |   Ub  U V
s/ s H  n
U R                   R                  R                  (       aP  U R                   R                  R	                  [        XR                   R                  R                  5       5      5      O$U R                   R                  R	                  U
5      PM     nn
U R                   R                  5        nU R                   R                  R                  XR                  R                  5      nSSS5        / nWR                  5        H  u  pUb
  X.S   :X  d  M  Ub  US   U:w  a  M   Ub  US   U:w  a  M.  Ub  US   U:w  a  M<  Ub  US   U:w  a  MJ  Ub  US   (       d  MY  Ub  US   U:w  a  Mg  U	(       a  X;  d  Mu  UR                  U
5        M     U$ s  sn
f ! , (       d  f       N= f)	z@Return all constraint names matching the columns and conditions.Nrb  r   r   r(  ru   r  r   )rF   rI   truncates_namesintrospectionidentifier_converterr   rp   r  rl   get_constraintsr(   r   itemsrh   )rL   r-   r  r   r   r(  r  ru   r  rQ  r   rl   r   resultinfodicts                  r   rY  *BaseDatabaseSchemaEditor._constraint_names  s    # )	 )D //?? OO11FF%dOO,?,?,O,O,QR 66KKDQ	R )  	 __##%//77GG,,K & )//1ND#|	7J'J%(8*<*F*x/F+/U$'):e)C$'):e)C*8M3J$&)9U)B$"5MM$' 2  ?	 &%s   B$F(:F--
F;c                    U R                  USS9nU(       a?  [        U5      S:w  a0  [        S[        U5      < SUR                  R                  < 35      eU H#  nU R                  U R                  X5      5        M%     g )NTr^  rT  rU  z) of PK constraints for )rY  r\  r]  r(   r   rU   _delete_primary_key_sql)rL   r-   r  rc  r  s        r   r  ,BaseDatabaseSchemaEditor._delete_primary_key  su    11%T1Jc*+q0 ()KK((   0OLL55eMN  0r    c                 `   [        U R                  [        UR                  R                  U R
                  5      U R                  U R                  UR                  R                  UR                  /SS95      [        UR                  R                  UR                  /U R
                  5      S9$ )N_pkr  )r   r   rb  )	r
   sql_create_pkr   r(   r   rq   r  r   r   r[  s      r   r  0BaseDatabaseSchemaEditor._create_primary_key_sql  s    ,,doo>''KK((5<<. ( 
 EKK005<<.$//R	
 		
r    c                 :    U R                  U R                  X5      $ r1   )r^  sql_delete_pkru  s      r   r  0BaseDatabaseSchemaEditor._delete_primary_key_sql  rw  r    c                 <    U(       a  SU R                  U5      -   $ S$ )NzCOLLATE ra   )rq   )rL   r   r  r  s       r   r   %BaseDatabaseSchemaEditor._collate_sql  s    :CzDOOI66KKr    c                     U R                   U R                  U5      SR                  U5      S.-  nU R                  U5        g )N,)	procedureparam_types)sql_delete_procedurerq   r   rU   )rL   procedure_namer  rZ   s       r   remove_procedure)BaseDatabaseSchemaEditor.remove_procedure  s=    ''888K0+
 
 	Sr    )r   rK   rG   rH   rF   rP   )FT)r\   )F)ra   r1   )NNNNN)NNNNNN)NNNNNNN)T)NNNNNNNNr   )x__name__
__module____qualname____firstlineno____doc__r   rk  rz  r  r  r  r  r  r  r  r  r  r  rf  r  r  r   sql_delete_constraintr  r  r  r  r@  rj  r   r  rt  r3  r  r>  rJ  r  r  r  rs  r  rM   rR   rV   rU   rq   r   r   r   r   r   r   r   r   r   staticmethodr	  r   rk   r  r  r)  r-  r4  r8  r;  rE  rN  r?  ro  r  r}  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r$  rK  r  r1  r4  r  r  r  rI  r  r  r  r   r  r  r{  r  r  r  r   r[  r  r  r  r  r^  rY  r  r  r  r   r  __static_attributes__r\   r    r   rC   rC   L   sY    AJV5T:PC FP"H'B$NN  	Q  A.L9NX,	?  .	@   "&)M	9 
	B  I, 	R  *M9IVUA,>4\@ANF
6
)&S  2W$!>F.*	A4-+A*V* SDH&	
V$p.@Q
f	( r$h:$
N 16
8,
\	
/
@@


 4
l$
S&#RJ3C


*
L5 
: 2
p 1
f	F =2

O

 -^O

LLr    rC   )#loggingr*   r   django.confr   django.core.exceptionsr   !django.db.backends.ddl_referencesr   r   r   r	   r
   r   django.db.backends.utilsr   r   r   django.db.modelsr   r   r   django.db.models.sqlr   django.db.transactionr   r   django.utilsr   	getLoggerrd   r   r.   r=   rC   r\   r    r   <module>r     sb         -  S R < < & D !			6	71 

.j jr    