ó
    ¼Rjð ã                   óâ   • S SK r S SK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  S SKJr  S SKJrJr  S S	KJr  \ R4                  " S
5      rS rS rS r " S S5      rg)é    N)Údatetime)Úsettings)ÚColumnsÚExpressionsÚForeignKeyNameÚ	IndexNameÚ	StatementÚTable)Únames_digestÚsplit_identifierÚtruncate_name)Ú
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      ÚJD:\diplom_project\venv\Lib\site-packages\django/db/backends/base/schema.pyÚ_is_relevant_relationr      sG   € ð
 �N‰N€EØ××àØ× ×  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>8   ó$   øé € ð 	
â;�Ü$ S¨)×4÷ ‰CÚ;ùó   ƒ%œ	%c              3   óN   >#   • U  H  n[        UT5      (       d  M  Uv •  M     g 7fr.   r/   )r0   r1   Ú	new_fields     €r   r3   r4   =   r5   r6   )Úzipr+   r*   Ú_related_non_m2m_objectsÚremote_field)r2   r8   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r:   r:   4   s   ùé € ô ô	
ä*¨9¯?©?Ô;ó	
ô
	
ä*¨9¯?©?Ô;ó	
ó€Nó +ÑˆØÐÒÜ+Ø× Ñ Ø× Ñ ó
÷ 	
ò 	
ò +ñ	
ùs   „A6BÁ:BÁ;
Bc                   óò  • \ 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(SlS! jr)S" r*S# r+SmS% jr,S& r-S' r.S( r/SnS) jr0S* r1S+ r2S, r3S- r4\5S. 5       r6S/ r7S0 r8S1 r9S2 r:S3 r;S4 r<S5 r=S6 r>S7 r?S8 r@S9 rAS: rBS; rCS< rDS= rES> rFS? rGSnS@ jrH SnSA jrISB rJSnSC jrKSD rLSE rMSF rNSG rOSoSI jrPSpSJ jrQSK rRSL rSSSSHSHSS$SS$SSSSM.SN jrTSpSO jrUSP rVSQ rWSR rXSS rYSpST jrZSU r[SV r\SW r]SX r^SY r_SZ r`S[ raS\ rb     SqS] jrc      SrS^ jrdSsS_ jre     SqS` jrfSa rgSb rhSc riSd rj        StSe jrkSnSf jrlSg rmSh rnSuSi jroSmSj jrpSkrqg)vÚBaseDatabaseSchemaEditoréK   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)zPALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE (%(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)szOCREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)%(include)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 r.   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrC   rD   r   s       r   Ú__init__Ú!BaseDatabaseSchemaEditor.__init__“   s;   € Ø$ŒØ&ÔØ××Ø!#ˆDÔØ $§¡× 8Ñ 8× IÑ I× TÈfˆÕr   c                 ó²   • / U l         U R                  (       a>  [        U R                  R                  5      U l        U R                  R                  5         U $ r.   )Údeferred_sqlrH   r   rC   ÚaliasÚ	__enter__)rI   s    r   rO   Ú"BaseDatabaseSchemaEditor.__enter__œ   s>   € ØˆÔØ× × Ü  §¡×!6Ñ!6Ó7ˆDŒKØ�K‰K×!Ñ!Ô#Øˆr   c                 ó®   • Uc$  U R                    H  nU R                  U5        M     U R                  (       a  U R                  R	                  XU5        g g r.   )rM   ÚexecuterH   r   Ú__exit__)rI   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rS   Ú!BaseDatabaseSchemaEditor.__exit__£   sF   € ØÑØ×(Ô(�Ø—‘˜SÖ!ñ )à× × Ø�K‰K× Ñ  °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))ÚparamsrW   )ÚextraÚ;Ú N)rD   rC   Úin_atomic_blockrF   rG   r   ÚstrÚloggerÚdebugÚrstripÚendswithrE   ÚappendÚtupleÚmapÚquote_valueÚcursorrR   )rI   rW   r[   Úendingri   s        r   rR   Ú BaseDatabaseSchemaEditor.execute¬   s  € ð
 × × Ø—‘×/×/Ø—O‘O×,Ñ,×=×=ä,ð?óð ô
 �#‹hˆä�‰Ø˜s¸VÑ2Pð 	ñ 	
ð ××ØŸ:™:›<×0Ñ0°×5Ñ5‘R¸3ˆFØÑ!Ø×"Ñ"×)Ñ)Øœ5¤ T×%5Ñ%5°vÓ!>Ó?Ñ?À6ÑIõð ×"Ñ"×)Ñ)¨#©,Õ7à—‘×'Ñ'Ô)¨VØ—‘˜sÔ+÷ *×)Ö)ús   Ä2EÅ
Ec                 óL   • U R                   R                  R                  U5      $ r.   )rC   ÚopsÚ
quote_name)rI   r   s     r   rn   Ú#BaseDatabaseSchemaEditor.quote_nameË   s   € Ø�‰×"Ñ"×-Ñ-¨dÓ3Ð3r   c                 óð  • UR                   R                   HW  nU Vs/ s H  o1R                   R                  U5      PM     nnU R                  R	                  U R                  X5      5        MY     / n/ nUR                   R                   GHq  nU R                  X5      u  pxUc  M  UR                  U R                  S9n	U	S   (       a  USU R                  U	-  -   -  nUR                  U 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U R&                  (       a7  USU R&                  U R)                  U5      U R)                  U5      S.-  -   -  nOPU R                  R*                  R,                  (       a+  U R                  R	                  U R/                  XS5      5        UR	                  U R)                  UR$                  5      < SU< 35        UR1                  5       S;   d  GM  U R                  R2                  R5                  UR                   R                   UR$                  5      nU(       d  GMV  U R                  R                  U5        GMt     UR                   R6                   Vs/ s H  nUR9                  X5      PM     nnU R:                  U R)                  UR                   R                   5      SR=                  S	 / UQUQ7 5       5      S
.-  nUR                   R>                  (       aH  U R                  R2                  RA                  UR                   R>                  5      nU(       a  USU-   -  nUU4$ s  snf s  snf )z-Take a model and return its table definition.©rC   ÚcheckÚ z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldú, c              3   óJ   #   • U  H  nU(       d  M  [        U5      v •  M     g 7fr.   )r`   )r0   Ú
constraints     r   r3   Ú5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s"   é € ð $â">�JÜó  ”�J—�Ú">ùs   ‚#‘#)ÚtableÚ
definition)!r&   Úunique_togetherÚ	get_fieldrM   re   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersrC   Úsql_check_constraintÚdb_type_suffixÚextendr;   Údb_constraintr*   Údb_tableÚ
field_nameÚcolumnÚsql_create_inline_fkrn   rF   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typerm   Úautoinc_sqlÚconstraintsÚconstraint_sqlÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rI   r*   Úfield_namesr   ÚfieldsÚcolumn_sqlsr[   r   Úextra_paramsÚ	db_paramsÚcol_type_suffixrt   ru   r‘   r|   r’   rW   r—   s                     r   Ú	table_sqlÚ"BaseDatabaseSchemaEditor.table_sqlÎ   sg  € ð !Ÿ;™;×6Ô6ˆKÙ@KÓLÂ°u—k‘k×+Ñ+¨EÖ2ÁˆFÐLØ×Ñ×$Ñ$ T×%<Ñ%<¸UÓ%KÖLñ 7ð ˆØˆØ—[‘[×-Õ-ˆEà'+§¡°uÓ'DÑ$ˆJØÑ!Ùà×+Ñ+°t·±Ð+ÐGˆIØ˜×!Ø˜c D×$=Ñ$=À	Ñ$IÑIÑI�
à#×2Ñ2¸d¿o¹oÐ2ÐNˆOÞØ˜e oÑ5Ñ5�
Ø�M‰M˜,Ô'à×!×!Ð! e×&9×&9Ð&9Ø ×-Ñ-×3Ñ3×9Ñ9×BÑB�Ø!×.Ñ.×4Ñ4×:Ñ:×DÑDØ×&Ñ&×1Ñ1óç‘&ð ð ×,×,Ø #¨×(AÑ(AØ$(§O¡O°HÓ$=Ø%)§_¡_°YÓ%?ñEñ )ñ #ñ ‘Jð —_‘_×-Ñ-×C×CØ×%Ñ%×,Ñ,Ø×+Ñ+Ø!Ð*Jóôð ×Ñð —O‘O E§L¡LÖ1Úðôð ×&Ñ&Ó(ð -ö ð
 #Ÿo™o×1Ñ1×=Ñ=Ø—K‘K×(Ñ(¨%¯,©,ó�÷ ‘;Ø×%Ñ%×,Ñ,¨[×9ñe .ðj $Ÿk™k×5Ò5ó
â5�
ð ×%Ñ% eÖ2Ù5ð 	ð 
ð ×#Ñ#Ø—_‘_ U§[¡[×%9Ñ%9Ó:ØŸ)™)ñ $à"> KÐ">°+Ò">ó$ó ñ'
ñ 
ˆð �;‰;×$×$Ø!Ÿ_™_×0Ñ0×?Ñ?Ø—‘×)Ñ)óˆNö Ø�s˜^Ñ+Ñ+�Ø�Fˆ{ÐùòU Mùòp
s   ž$O.ÌO3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=(       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  X R                  U	5      -  v •  OU
v •  UR                  U	5        UR                  (       a8  UR                   (       d'  U R                  R                  R"                  (       a  SnU(       d  Sv •  O)U R                  R                  R$                  (       d  Sv •  UR                   (       a  Sv •  OUR&                  (       a  Sv •  UR(                  =(       d    UR*                  R(                  nU(       a_  U R                  R                  R,                  (       a9  UR&                  (       a'  U R                  R.                  R1                  USS9v •  g g g g 7f)	NÚ	collationzDEFAULT TzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlrC   rF   Úsupports_comments_inlineÚ
db_commentÚ_comment_sqlÚnullÚskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlÚrequires_literal_defaultsÚprepare_defaultre   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚimplied_column_nullÚuniquer–   r&   Úsupports_tablespacesrm   r—   )rI   Úcolumn_db_typer[   r*   r   Úfield_db_paramsÚinclude_defaultr¡   rª   Údefault_valueÚcolumn_defaultÚ
tablespaces               r   Ú_iter_column_sqlÚ)BaseDatabaseSchemaEditor._iter_column_sql!  så  é € ð ÒØ'×+Ñ+¨KÓ8Ð8ˆ9Õ8Ø×#Ñ# IÓ.Ò.Ø�?‰?×#Ñ#×<×<À×AQ×AQØ×#Ñ# E×$4Ñ$4Ó5Ò5à�z‰zˆð ÷ =Ø×%Ñ% eÓ,Ô,÷=ð ×;˜$×4Ñ4°UÓ;Ô<ð 	ö Ø ×2Ñ2°5Ó9ˆMØÑ(Ø!+¨d×.FÑ.FÀuÓ.MÑ!M�Ø—?‘?×+Ñ+×E×Eð )×+?Ñ+?ÀÓ+NÑNÓNà(Ò(Ø—M‘M -Ô0ð ×'×'Ø×%×%Ø—‘×(Ñ(×J×JàˆDÞØÓØ—‘×)Ñ)×=×=ØŠLØ××ØÓØ�\�\ØŠNà×(Ñ(×E¨E¯K©K×,EÑ,Eˆ
æØ—‘×(Ñ(×=×=Ø——à—/‘/×%Ñ%×4Ñ4°ZÈÐ4ÐMÓMð ð >ð ùs   ‚JJ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.
rq   Útype©NNrs   )r…   rC   r•   r¼   )rI   r*   r   r¸   r·   r¶   r[   s          r   r„   Ú#BaseDatabaseSchemaEditor.column_sqlZ  sn   € ð  ×-Ñ-¸¿¹Ð-ÐIˆØ(¨Ñ0ˆàÑ!ØØˆà�H‰Hà×%Ñ%Ø"ØØØØ#Ø#óó
ð ð
ð 	
r   c                 ó   • g)zi
Some backends don't accept default values for certain columns types
(i.e. MySQL longtext and longblob).
FrY   ©rI   r   s     r   r«   Ú%BaseDatabaseSchemaEditor.skip_defaultu  ó   € ð
 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.
FrY   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
z€subclasses of BaseDatabaseSchemaEditor for backends which have requires_literal_defaults must provide a prepare_default() method©ÚNotImplementedError©rI   Ú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.
ú%srY   rÃ   s     r   r®   Ú,BaseDatabaseSchemaEditor._column_default_sqlŒ  s   € ð
 r   c                 ó$  • U R                  5       (       a  U R                  5       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   r^   Úauto_nowFÚauto_now_addÚDateTimeFieldÚ	DateFieldÚ	TimeField)Úhas_defaultÚget_defaultrª   Úblankr±   r�   Úgetattrr   Únowr   ÚdateÚtime)r   ÚdefaultÚinternal_types      r   Ú_effective_defaultÚ+BaseDatabaseSchemaEditor._effective_default“  s  € ð ×Ñ×ÑØ×'Ñ'Ó)ˆGð$ ˆð# —— §§°×0K×0KØ×&Ñ&Ó(¨MÓ9Ø�ð ˆð ‘ð ˆô �U˜J¨×.Ñ.´'¸%ÀÐQV×2WÑ2WØ!×3Ñ3Ó5ˆMØ Ó/Ü"Ÿ,š,›.�ð ˆô #Ÿ,š,›.�Ø  KÓ/Ø%Ÿl™l›n�Gð
 ˆð	 # kÓ1Ø%Ÿl™l›n�Gð ˆð ˆ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á   rC   rÃ   s     r   r­   Ú*BaseDatabaseSchemaEditor.effective_default«  s$   € à×%Ñ% d×&=Ñ&=¸eÓ&DÀdÇoÁoÓ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   rh   Ú$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`.
Nrq   r¿   )rž   rR   rC   rF   Úsupports_commentsr&   Údb_table_commentÚalter_db_table_commentr§   rƒ   r¨   r…   Ú_alter_column_comment_sqlrM   rˆ   Ú_model_indexes_sqlÚlocal_many_to_manyr;   ÚthroughÚauto_createdÚcreate_model)rI   r*   rW   r[   r   r·   Ú
field_types          r   rñ   Ú%BaseDatabaseSchemaEditor.create_model»  sQ  € ð
 —n‘n UÓ+‰ˆð 	�‰�SŸ. DÔ)à�?‰?×#Ñ#×5×5à�{‰{×+×+Ø×+Ñ+¨E°4¸¿¹×9UÑ9UÔVà—?‘?×+Ñ+×D×DØ"Ÿ[™[×5Ô5�EØ×'×'Ñ'Ø*/×*=Ñ*=Ø'+§¡ð +>ð +˜ð &5°VÑ%<˜
ØŸšØ!×;Ñ;Ø %¨j×:JÑ:Jóóñ 6ð 	×Ñ× Ñ  ×!8Ñ!8¸Ó!?Ô@ð —[‘[×3Ô3ˆEØ×!Ñ!×)Ñ)×/Ñ/×<×<Ñ<Ø×!Ñ! %×"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_modelrR   Úsql_delete_tablern   rŠ   ÚlistrM   Ú
isinstancer	   Úreferences_tableÚremove)rI   r*   r   rW   s       r   rõ   Ú%BaseDatabaseSchemaEditor.delete_modelß  sâ   € ð —[‘[×3Ô3ˆEØ×!Ñ!×)Ñ)×/Ñ/×<×<Ñ<Ø×!Ñ! %×"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_expressionsrC   rF   Úsupports_expression_indexesrR   Ú
create_sql©rI   r*   Úindexs      r   Ú	add_indexÚ"BaseDatabaseSchemaEditor.add_indexô  s@   € ð ×&×&Ø—O‘O×,Ñ,×H×Hàð 	�‰�U×%Ñ% eÓ2¸4ˆÒ@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þ   rC   rF   rÿ   rR   Ú
remove_sqlr  s      r   Úremove_indexÚ%BaseDatabaseSchemaEditor.remove_indexÿ  s:   € ð ×&×&Ø—O‘O×,Ñ,×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ý   )rC   rF   Úcan_rename_indexrR   Ú_rename_index_sqlr   r  r  )rI   r*   Ú	old_indexÚ	new_indexs       r   Úrename_indexÚ%BaseDatabaseSchemaEditor.rename_index  s]   € Ø�?‰?×#Ñ#×4×4Ø�L‰LØ×&Ñ& u¯n©n¸i¿n¹nÓMØð ò ð
 ×Ñ˜eÔ/Ø�N‰N˜5Õ,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   rR   ©rI   r*   r|   rW   s       r   Úadd_constraintÚ'BaseDatabaseSchemaEditor.add_constraint  s,   € à×#Ñ# EÓ0ˆÞð �L‰L˜ TˆLÒ*ð 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  rR   r  s       r   Úremove_constraintÚ*BaseDatabaseSchemaEditor.remove_constraint  s&   € à×#Ñ# EÓ0ˆÞØ�L‰L˜Õð 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  o�R                  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)rf   Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquer&   r�   rR   r‚   )	rI   r*   Úold_unique_togetherÚnew_unique_togetherr™   ÚoldsÚnewsr˜   r   s	            r   Úalter_unique_togetherÚ.BaseDatabaseSchemaEditor.alter_unique_together   sÍ   € ñ -@Ó@Ò,? &”�f–Ñ,?ˆÐ@Ù,?Ó@Ò,? &”�f–Ñ,?ˆÐ@à—o‘o dÖ+ˆFØ×'Ñ'ØØØ°Ñ6Ø×&Ñ&ö	ñ ,ð  Ÿ?™?¨4Ö0ˆKÙ@KÓLÂ°u—k‘k×+Ñ+¨EÖ2ÁˆFÐLØ�L‰L˜×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  o�R                  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)rf   r  r  Úsql_delete_indexr&   r�   rR   Ú_create_index_sql)	rI   r*   Úold_index_togetherÚnew_index_togetherr™   r  r  r˜   r   s	            r   Úalter_index_togetherÚ-BaseDatabaseSchemaEditor.alter_index_together5  sÑ   € ñ -?Ó?Ò,> &”�f–Ñ,>ˆÐ?Ù,>Ó?Ò,> &”�f–Ñ,>ˆÐ?à—o‘o dÖ+ˆFØ×'Ñ'ØØØ¨%Ñ0Ø×%Ñ%ö	ñ ,ð  Ÿ?™?¨4Ö0ˆKÙ@KÓLÂ°u—k‘k×+Ñ+¨EÖ2ÁˆFÐLØ�L‰L˜×/Ñ/°È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'  o�R                   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 Ú(rz   Ú)r   )r&   r’   r   Úindexesr�   rŒ   Ú_constraint_namesr¥   rC   rF   Ú*allows_multiple_constraints_on_same_fieldsr`   Ú_unique_constraint_namerŠ   ÚlenÚ
ValueErrorr•   rR   Ú_delete_constraint_sql)rI   r*   r™   Úconstraint_kwargsrW   r|   Úmeta_constraint_namesÚmeta_index_namesr   ÚcolumnsÚconstraint_namesÚdefault_names               r   r  Ú/BaseDatabaseSchemaEditor._delete_composed_indexJ  s€  € à.3¯k©k×.EÒ.Eó!
Ú.E 
�OŒOÑ.Eð 	ð !
ð ?D¿k¹k×>QÒ>QÓRÒ>Q°
ŸOœOÑ>QÐÐRÙDJÓKÂF¸5—;‘;×(Ñ(¨Ó/×6Ô6ÁFˆÐKØ×1Ò1ØØñ
ð *Ñ<ð
ð  ñ	
Ðð ×!Ñ! (Ó+¨tÒ3Þ Ø—‘×(Ñ(×S×Sô Ø×,Ñ,¨U¯[©[×-AÑ-AÀ7ÐRWÐ,ÐXóˆLð Ó/Ø$0 >Ð ÜÐÓ  AÓ%Ýô Ð(Ö)Ø—K‘K×(Ô(Ø—I‘I˜gÖ&ð	óð ð 	�‰�T×0Ñ0°Ð=MÈaÑ=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)rC   rF   Úignores_table_name_caseÚlowerrR   Úsql_rename_tablern   rM   rø   r	   Úrename_table_references)rI   r*   Úold_db_tableÚnew_db_tablerW   s        r   Úalter_db_tableÚ'BaseDatabaseSchemaEditor.alter_db_tablel  sœ   € àÓ'Ø�O‰O×$Ñ$×<×<Ø×"Ñ"Ó$¨×(:Ñ(:Ó(<Ó<àØ�‰Ø×!Ñ!à!Ÿ_™_¨\Ó:Ø!Ÿ_™_¨\Ó:ññô	
ð ×$Ô$ˆCÜ˜#œy×)Ó)Ø×+Ñ+¨LÖGò %r   c                 ó¼   • U R                  U R                  U R                  UR                  R                  5      U R                  U=(       d    S5      S.-  5        g )Nr^   )r~   Úcomment)rR   Úsql_alter_table_commentrn   r&   rŠ   rh   )rI   r*   Úold_db_table_commentÚnew_db_table_comments       r   rë   Ú/BaseDatabaseSchemaEditor.alter_db_table_comment  sK   € Ø�‰Ø×(Ñ(àŸ™¨¯©×)=Ñ)=Ó>Ø×+Ñ+Ð,@×,FÀBÓGññõ	
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)rR   Úsql_retablespace_tablern   r&   rŠ   )rI   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  p«U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Ä5        U R=                  U5      (       dl  U R?                  U5      bZ  U RA                  USUSS9u  pÔU RB                  U R-                  UR                  R                   5      US.-  nU R;                  XÄ5        URD                  (       ax  U R                  R                  RF                  (       aS  U R                  R                  RH                  (       d.  US   nU R:                  " U RK                  XXâRD                  5      6   U R2                  RM                  U RO                  X5      5        U R                  R                  RP                  (       a  U R                  RS                  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¸   Nrq   rs   rr   rv   z%s.r^   )r   Ú	namespacerŒ   rt   ru   Ú
deferrable)r~   rŒ   r   ©Údrop©r~   Úchangesr¿   )*r   r;   rï   r&   rð   rñ   r„   r‡   rC   r…   r†   rF   rŽ   r‰   Úsql_create_column_inline_fkr*   rŠ   r�   r‹   rŒ   r   Ú_fk_constraint_namern   rm   Údeferrable_sqlrM   re   r�   Úsql_create_columnrR   r¬   r­   Ú_alter_column_default_sqlÚsql_alter_columnr¨   ré   r§   rì   rˆ   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rI   r*   r   r   r[   r�   rœ   Úconstraint_suffixrt   ru   r[  Ú_rW   Úchanges_sqlrò   s                  r   Ú	add_fieldÚ"BaseDatabaseSchemaEditor.add_field“  s§  € ð ×× %×"4Ñ"4×"<Ñ"<×"BÑ"B×"O×"OØ×$Ñ$ U×%7Ñ%7×%?Ñ%?Ó@Ð@à!Ÿ_™_¨UÈ4˜_ÐPÑˆ
àÑØØ#×2Ñ2¸d¿o¹oÐ2ÐNÐNˆ?ÕNØ˜A˜oÐ.Ð/Ñ/ˆJà×'Ñ'°4·?±?Ð'ÐCˆ	Ø�W×Ø˜# × 9Ñ 9¸IÑ EÑEÑEˆJà××ÐØ—‘×(Ñ(×>×>Ð>Ø×#×#Ð#à @Ðà×/×/Ð/Ø ×-Ñ-×3Ñ3×9Ñ9×BÑB�Ø!×.Ñ.×4Ñ4×:Ñ:×DÑDØ×&Ñ&×1Ñ1óç‘&ð ô  0°·±×0DÑ0DÓE‘�	Ø˜c D×$DÑ$DØ ×4Ñ4°UÐCTÓUæ ð "'¨¯©¸Ó)CÒ!CàØ"Ÿo™o¨e¯l©lÓ;Ø $§¡°Ó 9Ø!%§¡°Ó!;Ø"&§/¡/×"5Ñ"5×"DÑ"DÓ"Fñ	Hñ 	%ñ 	ñ 	‘
ð ×!Ñ!×(Ñ(Ø×'Ñ'¨Ð6GÓHôð ×$Ñ$Ø—_‘_ U§[¡[×%9Ñ%9Ó:Ø—o‘o e§l¡lÓ3Ø$ñ(
ñ 
ˆð
 	�‰�SÔ!ð ×*Ñ*¨5×1Ñ1Ø×&Ñ& uÓ-Ñ9à"&×"@Ñ"@Ø�t˜U¨ð #Að #ÑˆKð ×'Ñ'ØŸ™¨¯©×)=Ñ)=Ó>Ø&ñ+ñ ˆCð �L‰L˜Ô%ð ××Ø—‘×(Ñ(×:×:Ø—O‘O×,Ñ,×E×Eà" 6Ñ*ˆJØ�LŠLØ×/Ñ/Ø *×.>Ñ.>óñð 	×Ñ× Ñ  ×!8Ñ!8¸Ó!FÔGà�?‰?×#Ñ#×C×CØ�O‰O×!Ñ!Õ#ð 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.
rq   r¿   NT©Úforeign_key)r~   rŒ   )r   r;   rï   r&   rð   rõ   r…   rC   r4  rŒ   rR   Ú_delete_fk_sqlÚsql_delete_columnrn   rŠ   rF   rh  ri  r÷   rM   rø   r	   Úreferences_columnrú   )rI   r*   r   Úfk_namesÚfk_namerW   s         r   Úremove_fieldÚ%BaseDatabaseSchemaEditor.remove_fieldé  su  € ð ×× %×"4Ñ"4×"<Ñ"<×"BÑ"B×"O×"OØ×$Ñ$ U×%7Ñ%7×%?Ñ%?Ó@Ð@à×Ñ¨$¯/©/ÐÐ:¸6ÑBÑJØà××Ø×-Ñ-¨e·l±l°^ÐQUÐ-ÐVˆHÛ#�Ø—‘˜T×0Ñ0°Ó@ÖAñ $ð ×$Ñ$Ø—_‘_ U§[¡[×%9Ñ%9Ó:Ø—o‘o e§l¡lÓ3ñ(
ñ 
ˆð 	�‰�SÔà�?‰?×#Ñ#×C×CØ�O‰O×!Ñ!Ô#ä˜×)Ñ)Ö*ˆCÜ˜#œy×)Ó)¨c×.CÑ.CØ—‘×$Ñ$ e§l¡l÷/ó /ð ×!Ñ!×(Ñ(¨Ö-ò	 +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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UUUUUUU5        g)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.
Nrq   r¿   z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))
Ú_field_should_be_alteredr…   rC   r;   r8  rï   r&   rð   Ú_alter_many_to_manyÚ_alter_field)	rI   r*   r2   r8   ÚstrictÚold_db_paramsÚold_typeÚnew_db_paramsÚnew_types	            r   Úalter_fieldÚ$BaseDatabaseSchemaEditor.alter_field	  s¾  € ð ×,Ñ,¨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ð ×+Ñ+¨E¸iÓPÐPàÑØÑ à×&Ñ&×.×.Ø×*Ñ*×2×2Ø!×.Ñ.×6Ñ6×<Ñ<×I×IØ!×.Ñ.×6Ñ6×<Ñ<×I×Ið ØÑ Ñ!1Ýó .7»	ðCóð ð 	×ÑØØØØØØØØõ		
r   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  oÌR&                  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S   US   :w  aÓ  US   (       aÉ  UR                  R$                   Vs1 s H  oÌR&                  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 R?                  X5      5        M%     UR                  UR                  :w  a›  U R                  U RA                  UR                  R                  X#U5      5        U RB                   HU  n[E        U[F        5      (       d  M  URI                  UR                  R                  UR                  UR                  5        MW     / n/ n/ nURK                  U R                  S9nURK                  U R                  S9nXE:w  dK  UU:w  dE  UU:w  d?  U R                  R                  RL                  (       aS  URN                  URN                  :w  a9  U RQ                  XX5UU5      u  n n!URS                  U 5        URU                  U!5        S	n"URV                  (       au  URV                  (       dd  U RY                  U5      n#U RY                  U5      n$U R[                  U5      (       d,  U#U$:w  a&  U$b#  Sn"URS                  U R]                  XU5      5        URV                  URV                  :w  a*  U R_                  XU5      n U (       a  URS                  U 5        URa                  5       =(       a$    URV                  =(       a    URV                  (       + n%U(       d  U(       Gas  U%(       d  UU-  nU R                  R                  Rb                  (       a9  U(       a2  [e        [g        U6 5      u  nn&SRi                  U5      [k        U&/ 5      4/nU HK  u  nn&U R                  U Rl                  U Ro                  UR                  R                  5      US.-  U&5        MM     U%(       a±  U R                  U Rp                  U Ro                  UR                  R                  5      U Ro                  UR                  5      SS.-  W$/5        U HK  u  nn&U R                  U Rl                  U Ro                  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 Rs                  X5        U Ru                  X#5      (       a!  U R                  U Rw                  X/5      5        UR4                  (       a  UR                   (       aA  UR4                  (       a0  UR                   (       d  U R                  U Ry                  X/S95        / n'U(       a  U'RU                  [/        X#5      5        U R#                  X#5      (       a:  U R                  U R{                  X5      5        U'RU                  [/        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      n-U RQ                  UR0                  U(R2                  UR2                  U*U-U+5      u  n n!U R                  U Rl                  U Ro                  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  n.n/U/R2                  R
                  (       d  M#  U R                  U R                  U/R0                  U/R2                  S5      5        M[     US   US   :w  a^  US   (       aT  U R�                  UR                  R                  UR                  /SS9nU R                  U Rƒ                  XUS   5      5        U"(       a[  U R]                  XUSS9u  n0n&U Rl                  U Ro                  UR                  R                  5      U0S.-  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¨   )ÚignoreTrp  r/  r0  z!) of foreign key constraints for Ú.F)r´   r   r,  z) of unique constraints for r¡   )r  Útype_r,  rr   )rr   r,  z) of check constraints for rq   Nrz   r_  rÏ   )r~   rŒ   rß   ©r™   r¿   r   rv   Ú_fkÚ_check©r$  r]  )DÚsetrC   rF   rŽ   r;   r‰   rz  r4  rŒ   r7  r8  r&   rŠ   ÚaddrR   rr  r´   Ú_field_became_primary_keyr’   r   Ú_delete_unique_sqlr¥   r   r:   Úrelated_modelr   Údb_indexr3  r   r$  Ú_delete_index_sqlÚ_delete_check_sqlÚ_rename_field_sqlrM   rø   r	   Úrename_column_referencesr‡   ré   r¨   Ú_alter_column_type_sqlre   rˆ   rª   r­   r¬   re  Ú_alter_column_null_sqlrØ   Úsupports_combined_altersrf   r9   r•   Úsumrf  rn   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr‚   r&  Ú_create_primary_key_sqlr…   r�   Ú_create_index_nameÚ_create_check_sqlrh  ri  )1rI   r*   r2   r8   r  r�  r~  r€  r}  Úfks_droppedru  rv  r|   r;  r>  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr>   Úrel_fk_namesr  r<  Úindex_namesÚ
index_namerW   Ú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[   Úrels_to_updater=   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationrk  Úrelrl  s1                                                    r   r|  Ú%BaseDatabaseSchemaEditor._alter_fieldI  sw  € ô “eˆà�O‰O×$Ñ$×:×:Ø×&×&Ø×'×'Ø×-Ñ-ØØØ$�~ð .ö ð ×-Ñ-Ø×(Ñ(Ð)°tð .ð ˆHö œ#˜h›-¨1Ó,Ý ô ˜HžØŸ™×,Ô,Ø!×(Ó(ð	óð ó $�Ø—‘ ×!1Ñ!1Ð 3Ô4Ø—‘˜T×0Ñ0°Ó@ÖAñ $ð ××Ø× ×  D×$BÑ$BÀ9×$XÑ$Xð 38·+±+×2IÒ2Ió%Ú2I J—”Ñ2Ið "ð %ð  $×5Ñ5ØØ×!Ñ!Ð"ØØ!Ø-ð  6ð  Ðö œ#Ð.Ó/°1Ó4Ý ô Ð,Ö-ØŸ™×,Ô,Ø!×(Ó(ð	óð ó $4�Ø—‘˜T×4Ñ4°UÓLÖMñ $4ð &×)Ñ)¨+Ó6ˆØ%×)Ñ)¨+Ó6ˆà�O‰O×$Ñ$×:Ñ:÷ Mà×&Ñ&×@¨9×+@Ñ+@÷ ;Ø×$Ñ$×9¨×)9Ñ)9÷Mð
 Ñ&×K¨M¸]Ñ,Jð 	ö ô &>¸iÖ%SÑ!�˜'Ø#×5Ñ5Ø×)Ñ)¨G¯M©M×,@Ñ,@Ð+AÈtð  6ð  �ó  ,�GØ—L‘L ×!4Ñ!4°W×5JÑ5JÈGÓ!TÖUó  ,ñ	 &Tð" ××Ø×$×$Ø×'×'¨9×+;×+;ð 9>¿¹×8KÒ8KÓLÒ8K¨u §
¤
Ñ8KÐÐLð ×0Ñ0ØØ×!Ñ!Ð"ØÜ—l‘lØ(ð 1ð ˆKó *�
ð —‘˜T×3Ñ3°E¸:ÓFÖGñ	 *ð ˜Ñ! ]°7Ñ%;Ó;ÀÈg×@Và27·+±+×2IÒ2Ió%Ú2I J—”Ñ2Ið "ð %ð  $×5Ñ5ØØ×!Ñ!Ð"ØØ-ð	  6ð  Ðö œ#Ð.Ó/°1Ó4Ý ô Ð,Ö-ØŸ™×,Ô,Ø!×(Ó(ð	óð ó $4�Ø—‘˜T×3Ñ3°EÓKÖLñ $4ð ×Ñ˜y×/Ñ/Ó/Ø�L‰LØ×&Ñ&Ø—K‘K×(Ñ(¨)Àóôð ×(Ô(�Ü˜c¤9×-Ó-Ø×0Ñ0ØŸ™×,Ñ,¨i×.>Ñ.>À	×@PÑ@Pöñ )ð ˆØˆØˆà#×2Ñ2¸d¿o¹oÐ2ÐNˆØ#×2Ñ2¸d¿o¹oÐ2ÐNˆð Ó Ø /Ó1Ø Ó-à—‘×(Ñ(×:×:Ø×(Ñ(¨I×,@Ñ,@Ó@ð '+×&AÑ&AØ )°}Àmó'Ñ#ˆH�mð �N‰N˜8Ô$Ø×Ñ Ô.ð "'ÐØ�>�> )§.§.Ø×0Ñ0°Ó;ˆKØ×0Ñ0°Ó;ˆKà×.Ñ.¨y×9Ñ9Ø ;Ó.ØÑ+à)-Ð&Ø—‘Ø×2Ñ2°5ÀYÓOôð �>‰>˜YŸ^™^Ó+Ø×2Ñ2°5ÀYÓOˆHÞØ×#Ñ# HÔ-à&/×&;Ñ&;Ó&=÷ '
Ø�N‰N×1 9§>¡>Ô1ð 	$ö —lÞ.ð ˜<Ñ'�à�‰×'Ñ'×@×@ÆWÜ#¤C¨ MÓ2‘��VØ ŸI™I c›N¬C°¸«OÐ<Ð=�ã&‘��VØ—‘Ø×)Ñ)à!%§¡°·±×1EÑ1EÓ!FØ#&ññð
 öñ  'ö +à—‘Ø×0Ñ0à!%§¡°·±×1EÑ1EÓ!FØ"&§/¡/°)×2BÑ2BÓ"CØ#'ññð !�Môó $0‘K�C˜Ø—L‘LØ×-Ñ-à%)§_¡_°U·[±[×5IÑ5IÓ%JØ'*ññð
 öñ $0ö Û+‘��VØ—‘˜S &Ö)ñ  ,ð × × ¨×)>×)>Ø×$Ñ$ UÔ3à×'Ñ'¨	×=Ñ=Ø�L‰L˜×0Ñ0°¸ÓDÔEð ×#×# y×'7×'7Ø×"×"Ø×$×$à�L‰L˜×/Ñ/°¸kÐ/ÐJÔKð ˆÞØ×!Ñ!Ô":¸9Ó"PÔQà×)Ñ)¨)×?Ñ?à�L‰L˜×5Ñ5°eÓGÔHà×!Ñ!Ô":¸9Ó"PÔQä .ÑˆG�WØ#ŸM™M×7Ñ7À4Ç?Á?Ð7ÐSˆMØ$ VÑ,ˆHØ)×-Ñ-¨kÓ:ˆMØ '§¡× ;Ñ ;ÀtÇÁÐ ;Ð WÐØ 1× 5Ñ 5°kÓ BÐØ&*×&AÑ&AØ×%Ñ%Ø—‘Ø—‘ØØ!Øó'Ñ#ˆH�mð �L‰LØ×%Ñ%à!Ÿ_™_¨W×-BÑ-B×-HÑ-H×-QÑ-QÓRØ'¨™{ññð
 ˜‘ôó  -‘��VØ—‘˜S &Ö)ô  -ñ- !/ð4 �O‰O×$Ñ$×:×:Ø×&×&æ 9×#9×#9À×AX×AXà×'×'à�L‰LØ×#Ñ# EÐ6VÓWôö Û(‘��3Ø—9‘9×*×*Ñ*Ø—L‘LØ×+Ñ+¨C×,=Ñ,=¸s¿y¹yÈ%ÓPöñ )ð ˜Ñ! ]°7Ñ%;Ó;ÀÈg×@VØ"×5Ñ5Ø—‘×$Ñ$ y×'7Ñ'7Ð&8Àð 6ð ˆOð �L‰LØ×&Ñ& u¸}ÈWÑ?UÓVôö
 "Ø"&×"@Ñ"@Ø )°$ð #Að #ÑˆK˜ð ×'Ñ'ØŸ™¨¯©×)=Ñ)=Ó>Ø&ñ+ñ ˆCð �L‰L˜˜fÔ%à�?‰?×#Ñ#×C×CØ�O‰O×!Ñ!Õ#ð DùòW	%ùòt  Mùò"%s   Å-u:Î u?Ð<v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.
Nrq   r¿   )rŒ   r¿   )
rC   rF   r²   r±   r…   rª   Úsql_alter_column_nullÚsql_alter_column_not_nullrn   rŒ   )rI   r*   r2   r8   r€  rW   s         r   r—  Ú/BaseDatabaseSchemaEditor._alter_column_null_sql£  s–   € ð �O‰O×$Ñ$×F×FØ×/×/ð à%×3Ñ3¸t¿¹Ð3ÐOˆMð —>—>ð ×*Ò*à×3Ñ3ð ð à"Ÿo™o¨i×.>Ñ.>Ó?Ø)¨&Ñ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.
rq   r¿   )rŒ   r¿   rß   )r­   r®   rC   rF   r¯   r°   r…   rª   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrn   rŒ   )
rI   r*   r2   r8   r^  r²  rß   r[   r€  rW   s
             r   re  Ú2BaseDatabaseSchemaEditor._alter_column_default_sqlÀ  sØ   € ð ×,Ñ,¨YÓ7ˆØ×*Ñ*¨9Ó5ˆØ�ˆæØ‰FØ�_‰_×%Ñ%×?×?ð ×*Ñ*¨;Ó7ˆGØˆFà!×/Ñ/¸4¿?¹?Ð/ÐKˆÞØ�~�~Ø×;Ñ;‘à×6Ñ6‘à×/Ñ/ˆCààŸ/™/¨)×*:Ñ*:Ó;Ø% 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  p«U
(       a  UR                  X«4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 two-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.
rs   r^   )rŒ   r¿   r¡   rM  )r¦   r&   rŠ   rC   rF   ré   r   r¨   rì   re   r©   Úsql_alter_column_typern   rŒ   )rI   r*   r2   r8   r�  r¢  r£  r¯  Úcollate_sqlÚcomment_sqlrW   r[   s               r   r–  Ú/BaseDatabaseSchemaEditor._alter_column_type_sqlæ  s  € ð ˆØ×+Ñ+Ø¨%¯+©+×*>Ñ*>ó
ð 
ˆ;õ 
ð ˜k˜]Ð+‰KàˆKàˆØ�?‰?×#Ñ#×5×5¸i×>T×>TØ×#Ñ# y×';Ñ';Ó;ð #×<Ñ<Ø h×0DÑ0Dó‘�ö Ø!×(Ñ(¨#¨Ô7Ø×#×#Ø"×/Ñ/°	×0DÑ0DÓE�ð ×*Ñ*à"Ÿo™o¨i×.>Ñ.>Ó?Ø$Ø!,Ø*ñ	ñð ð	ð ð
ð 	
r   c                 óÂ   • U R                   U R                  UR                  R                  5      U R                  UR                  5      U R                  U5      S.-  / 4$ )N)r~   rŒ   rM  )Úsql_alter_column_commentrn   r&   rŠ   rŒ   r©   )rI   r*   r8   r�  Únew_db_comments        r   rì   Ú2BaseDatabaseSchemaEditor._alter_column_comment_sql  sZ   € à×)Ñ)àŸ™¨¯©×)=Ñ)=Ó>ØŸ/™/¨)×*:Ñ*:Ó;Ø×,Ñ,¨^Ó<ññð ð
ð 	
r   c                 ó6   • U R                  U=(       d    S5      $ )Nr^   )rh   )rI   rM  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Š   rJ  r‚  r�   Úm2m_reverse_field_nameÚm2m_field_name)rI   r*   r2   r8   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   r^   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é   éÈ   rk  é   Né   r/  r   zD%séÿÿÿÿ)r   r   rC   rm   Úmax_name_lengthr•   r7  Úisdigit)	rI   Ú
table_nameÚcolumn_namesr$  rk  Úhash_suffix_partÚ
max_lengthr¨  Úother_lengths	            r   rž  Ú+BaseDatabaseSchemaEditor._create_index_nameB  s  € ô )¨Ó4‰ˆä˜Ð= lÒ=¸1Ó=Úð
Ðð —_‘_×(Ñ(×8Ñ8Ó:×A¸cˆ
ã#-¨s¯x©x¸Ö/EÒGWÐXˆ
Üˆz‹?˜jÓ(ØÐäÐÓ  :°¡>Ó1Ø/Ð0A°*À±/ÐBÐØ"¤SÐ)9Ó%:Ñ:¸qÑ@À1ÑDˆà�}˜Ó%Ø�H‰H�\Ó" = LÓ1Úð
ˆ
ð �a‰=˜CÓ :¨a¡=×#8Ñ#8×#:Ñ#:Ø ¨C¨R Ñ0ˆJØÐ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)Nr/  r   rs   r^   )r7  r–   r   ÚDEFAULT_INDEX_TABLESPACEr&   rC   rm   r—   )rI   r*   r™   r–   s       r   Ú_get_index_tablespace_sqlÚ2BaseDatabaseSchemaEditor._get_index_tablespace_sqlb  sˆ   € ØÑ Ü�6‹{˜aÓ F¨1¡I×$;×$;Ø & q¡	× 7Ñ 7‘Ü×2×2Ü (× AÑ A‘Ø—‘×*×*Ø %§¡× 9Ñ 9�ØÑ$Ø˜Ÿ™×,Ñ,×;Ñ;¸MÓJÑJÐJØr   c                 ó   • U(       a  SU-   $ g)Nz WHERE r^   rY   )rI   Ú	conditions     r   Ú_index_condition_sqlÚ-BaseDatabaseSchemaEditor._index_condition_sqln  s   € ÞØ˜yÑ(Ð(Ør   c                 óÀ   • U(       a%  U R                   R                  R                  (       d  g[        S[	        UR
                  R                  X R                  5      S9$ )Nr^   z INCLUDE (%(columns)s))r=  )rC   rF   Úsupports_covering_indexesr	   r   r&   rŠ   rn   )rI   r*   r=  s      r   Ú_index_include_sqlÚ+BaseDatabaseSchemaEditor._index_include_sqls  sB   € Þ˜dŸo™o×6Ñ6×P×PØÜØ$Ü˜EŸK™K×0Ñ0°'¿?¹?ÓKñ
ð 	
r   )r™   r   r$  Úusingr–   Úcol_suffixesrW   Ú	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  oÿR                  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XÍT 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_colsrq   )r–   c                  óP   >• Tc  TR                   " U 0 UD6mTR                  T5      $ r.   )rž  rn   )ÚargsÚkwargsr   rI   s     €€r   Úcreate_index_nameÚEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_nameœ  s,   ø€ à‰|Ø×.Ò.°Ð?¸Ñ?�Ø—?‘? 4Ó(Ð(r   )r~   r   rï  r=  r\   rè  rò  )r   Úget_compilerrC   rå  rŒ   Úsql_create_indexr&   rŠ   r	   r
   rn   r   Ú_index_columnsr   rh   ré  rí  )rI   r*   r™   r   r$  rï  r–   rð  rW   rñ  rè  rò  ró  Úcompilerr—   r   r=  rý  r~   rú  s   `  `                r   r&  Ú*BaseDatabaseSchemaEditor._create_index_sql{  s  ù€ ð* —˜2ˆØ!×' RˆÜ˜¨5Ñ1×>Ñ>Ø—‘ð ?ð 
ˆð ×7Ñ7Ø¨ð 8ð 
ˆñ .4Ó4ªV E—<”<©VˆÐ4Ø×7 $×"7Ñ"7ÐØ—‘×$Ñ$ˆö	)ô ØÜ˜˜tŸ™Ó/Ü˜5 '¨6Ð3DÓEØö ð ×#Ñ# E¨7°LÔ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)r~   r   )r	   r%  r
   r&   rŠ   rn   )rI   r*   r   rW   s       r   r’  Ú*BaseDatabaseSchemaEditor._delete_index_sql±  sA   € ÜØ×(�4×(Ñ(Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ñ
ð 	
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Š   rn   )rI   r*   r  r  s       r   r  Ú*BaseDatabaseSchemaEditor._rename_index_sql¸  sH   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—_‘_ XÓ.Ø—_‘_ XÓ.ñ	
ð 	
r   c                 ó,   • [        XU R                  US9$ )N)rð  )r   rn   )rI   r~   r=  rð  rñ  s        r   rþ  Ú'BaseDatabaseSchemaEditor._index_columnsÀ  s   € Ü�u t§¡À\Ñ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                   HL  nU Vs/ s H  o1R                   R                  U5      PM     nnUR                  U R                  XSS95        MN     UR                   R                   H[  nUR                  (       a'  U R                  R                  R                  (       d  M;  UR                  UR!                  X5      5        M]     U$ s  snf )zr
Return a list of all index SQL statements (field indexes,
index_together, Meta.indexes) for the specified model.
r"  r#  )r&   ÚmanagedÚproxyÚswappedrƒ   rˆ   rg  Úindex_togetherr�   re   r&  r3  rþ   rC   rF   rÿ   r   )rI   r*   Úoutputr   r˜   r™   r  s          r   rí   Ú+BaseDatabaseSchemaEditor._model_indexes_sqlÃ  s
  € ð
 �{‰{×"×" e§k¡k×&7×&7¸5¿;¹;×;N×;NØˆIØˆØ—[‘[×-Ô-ˆEØ�M‰M˜$×1Ñ1°%Ó?Ö@ñ .ð !Ÿ;™;×5Ô5ˆKÙ@KÓLÂ°u—k‘k×+Ñ+¨EÖ2ÁˆFÐLØ�M‰M˜$×0Ñ0°ÈfÐ0ÐUÖVñ 6ð —[‘[×(Ô(ˆEà×.×.Ø—?‘?×+Ñ+×G×GÑGà—‘˜e×.Ñ.¨uÓ;Ö<ñ )ð ˆùò Ms   Â0$E0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_indexedre   r&  )rI   r*   r   r  s       r   rg  Ú+BaseDatabaseSchemaEditor._field_indexes_sqlÚ  s;   € ð ˆØ×(Ñ(¨×6Ñ6Ø�M‰M˜$×0Ñ0°¸wÐ0ÐGÔHØˆr   c                 óÒ  • U=(       d
    [        5       nUR                  5       u  pEpgUR                  5       u  pHpšU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                  UR                  5      U R                  UR                  5      :g  =(       d	    XVU4X‰U
4:g  $ r.   )rŒ  ÚdeconstructÚunionÚnon_db_attrsÚpoprn   rŒ   )rI   r2   r8   r…  rk  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   rz  Ú1BaseDatabaseSchemaEditor._field_should_be_alteredã  sÌ   € Ø—œ3›5ˆØ,5×,AÑ,AÓ,CÑ)ˆ�XØ,5×,AÑ,AÓ,CÑ)ˆ�Xð —L‘L ×!7Ñ!7Ö8ˆDØ�N‰N˜4 Ö&ñ 9à—L‘L ×!7Ñ!7Ö8ˆDØ�N‰N˜4 Ö&ñ 9à�‰˜y×/Ñ/Ó0°D·O±OØ×Ñó5
ñ 
÷ Rà *Ð-°(ÀjÐ1QÑQð	Rr   c                 óJ   • UR                   =(       a    UR                  (       + $ r.   )r‘  r´   ©rI   r*   r   s      r   r  Ú1BaseDatabaseSchemaEditor._field_should_be_indexedô  s   € Ø�~‰~×2 e§l¡lÔ"2Ð2r   c                 óJ   • UR                   (       + =(       a    UR                   $ r.   ©r   ©rI   r2   r8   s      r   rŽ  Ú2BaseDatabaseSchemaEditor._field_became_primary_key÷  s   € Ø×(Ñ(Ô(×B¨Y×-BÑ-BÐBr   c                 ó    • UR                   (       + =(       a7    UR                  =(       a$    UR                  (       + =(       d    UR                   $ r.   )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_columnrn   rŒ   )rI   r~   r2   r8   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Œ   rt   ru   r\  )r
   r&   rŠ   rn   rb  r   rŒ   Útarget_fieldr*   rC   rm   rc  r	   Úsql_create_fk)
rI   r*   r   r$  r~   r   rŒ   rt   ru   r\  s
             r   r�   Ú'BaseDatabaseSchemaEditor._create_fk_sql	  sø   € Ü�e—k‘k×*Ñ*¨D¯O©OÓ<ˆØ×'Ñ'¨°fÓ=ˆÜ˜Ÿ™×-Ñ-°·±¨~¸t¿¹ÓOˆÜ˜×+Ñ+×1Ñ1×7Ñ7×@Ñ@À$Ç/Á/ÓRˆÜØ×Ñ×$Ñ$×*Ñ*×3Ñ3Ø×Ñ×&Ñ&Ð'Ø�O‰Oó
ˆ	ð
 —_‘_×(Ñ(×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      $ r.   ©rn   rž  ©rø  rù  rI   s     €r   Úcreate_fk_nameÚDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_name  s"   ø€ Ø—?‘? 4×#:Ò#:¸DÐ#KÀFÑ#KÓLÐLr   r/  )r   r&   rŠ   rŒ   r   r1  r*   )rI   r*   r   r$  r8  s   `    r   rb  Ú,BaseDatabaseSchemaEditor._fk_constraint_name  sk   ø€ õ	Mô Ø�K‰K× Ñ Ø�\‰\ˆNÜ˜U×/Ñ/×5Ñ5×;Ñ;×DÑDÓEÀaÑHØ×Ñ×&Ñ&Ð'ØØó
ð 	
r   c                 ó:   • U R                  U R                  X5      $ r.   )r9  Úsql_delete_fk©rI   r*   r   s      r   rr  Ú'BaseDatabaseSchemaEditor._delete_fk_sql+  ó   € Ø×*Ñ*¨4×+=Ñ+=¸uÓKÐKr   c                 ó`   • Uc  gU[         R                  :X  a  gU[         R                  :X  a  gg )Nr^   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   ÚDEFERREDÚ	IMMEDIATE)rI   r\  s     r   Ú_deferrable_constraint_sqlÚ3BaseDatabaseSchemaEditor._deferrable_constraint_sql.  s2   € ØÑØØœ×,Ñ,Ó,Ø3Øœ×-Ñ-Ó-Ø4ð .r   c	           
      ó  • U(       a&  U R                   R                  R                  (       d  g U(       d  U(       d  U(       d  U(       a8  U R                  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  o R                  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ó  rz   )r=  r\  ©r   r|   )rC   rF   Ú&supports_deferrable_unique_constraintsr‚   rM   re   Úsql_unique_constraintr•   rn   rŒ   rC  Úsql_constraint)rI   r*   r™   r   rè  r\  rò  rñ  ró  rW   r   r|   s               r   Ú_unique_sqlÚ$BaseDatabaseSchemaEditor._unique_sql6  sæ   € ö Ø—O‘O×,Ñ,×S×SàÞž¦9¶ð ×)Ñ)ØØØØ#ØØ#Ø'ð *ð ˆCö Ø×!Ñ!×(Ñ(¨Ô-ØØ×/Ñ/Ø—y‘yÉVÓ!TÊVÀE§/¡/°%·,±,Ö"?ÉVÑ!TÓUØ×9Ñ9¸*ÓEñ3
ñ 
ˆ
ð ×"Ñ"Ø—O‘O DÓ)Ø$ñ&
ñ 
ð 	
ùò "Us   Â$C<
c	                 óÂ  • U(       a%  U R                   R                  R                  (       a„  U(       a%  U R                   R                  R                  (       aX  U(       a%  U R                   R                  R                  (       a,  U(       a&  U R                   R                  R
                  (       d  g [        USS9R                  U R                   S9n	UR                  R                  n
U Vs/ s H  o»R                  PM     nnUc  U R                  X¬S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                  X¬SUS9nO[!        X¨X�R"                  5      n[%        U['        X R                  5      UUU R)                  U5      U R+                  U5      U R-                  X5      S9$ s  snf )	NFrõ  rq   Tr-  rY   )rð  rñ  )r~   r   r=  rè  r\  rò  )rC   rF   rG  Úsupports_partial_indexesrì  rÿ   r   rü  r&   rŠ   rŒ   r6  rn   Úsql_create_unique_indexÚsql_create_uniquerþ  r   rh   r	   r
   ré  rC  rí  )rI   r*   r™   r   rè  r\  rò  rñ  ró  rÿ  r~   r   r=  rW   s                 r   r‚   Ú+BaseDatabaseSchemaEditor._create_unique_sql^  ss  € ö ØŸ™×0Ñ0×W×Wæ $§/¡/×":Ñ":×"S×"SÞ §¡× 8Ñ 8× R× Ræ D§O¡O×$<Ñ$<×$X×$Xð ä˜¨5Ñ1×>Ñ>Ø—‘ð ?ð 
ˆð —‘×$Ñ$ˆÙ-3Ó4ªV E—<”<©VˆÐ4Ø‰<Ø×/Ñ/°ÀdÐ/ÐK‰Dà—?‘? 4Ó(ˆDÞž¦9¶Ø×.Ñ.‰Cà×(Ñ(ˆCÞØ×)Ñ)Ø¨R¸9ð *ð ‰Gô " %°h×@PÑ@PÓQˆGÜØÜ˜Ÿ™Ó/ØØØ×/Ñ/°	Ó:Ø×6Ñ6°zÓBØ×+Ñ+¨EÓ;ñ
ð 	
ùò 5s   Ã-G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      $ r.   r6  r7  s     €r   Úcreate_unique_nameÚLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_name–  s"   ø€ Ø—‘ t×'>Ò'>ÀÐ'OÈÑ'OÓPÐPr   Ú_uniq)rž  r   )rI   r~   r=  r.  rS  s   `    r   r6  Ú0BaseDatabaseSchemaEditor._unique_constraint_name“  s*   ø€ ÞöQð "&×!8Ñ!8Ðä˜¨Ð2DÓEÐEr   c                 óò  • U(       a%  U R                   R                  R                  (       a„  U(       a%  U R                   R                  R                  (       aX  U(       a%  U R                   R                  R                  (       a,  U(       a&  U R                   R                  R
                  (       d  g U(       d  U(       d  U(       d  U(       a  U R                  nOU R                  nU R                  X�U5      $ r.   )	rC   rF   rG  rM  rì  rÿ   r%  r  r9  )	rI   r*   r   rè  r\  rò  rñ  ró  rW   s	            r   r�  Ú+BaseDatabaseSchemaEditor._delete_unique_sqlž  s�   € ö ØŸ™×0Ñ0×W×Wæ $§/¡/×":Ñ":×"S×"SÞ §¡× 8Ñ 8× R× Ræ D§O¡O×$<Ñ$<×$X×$Xð Þž¦9¶Ø×'Ñ'‰Cà×(Ñ(ˆCØ×*Ñ*¨3°tÓ<Ð<r   c                 ób   • U R                   U R                  U5      U R                  SU0-  S.-  $ )Nrr   rF  )rI  rn   r†   )rI   r   rr   s      r   Ú
_check_sqlÚ#BaseDatabaseSchemaEditor._check_sqlº  s9   € Ø×"Ñ"Ø—O‘O DÓ)Ø×3Ñ3°wÀÐ6FÑFñ&
ñ 
ð 	
r   c                 óœ   • [        U R                  [        UR                  R                  U R
                  5      U R                  U5      US9$ )N)r~   r   rr   )r	   Úsql_create_checkr
   r&   rŠ   rn   )rI   r*   r   rr   s       r   rŸ  Ú*BaseDatabaseSchemaEditor._create_check_sqlÀ  s?   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&Øñ	
ð 	
r   c                 ó†   • U R                   R                  R                  (       d  g U R                  U R                  X5      $ r.   )rC   rF   Ú supports_table_check_constraintsr9  Úsql_delete_checkr=  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$ r  )r	   r
   r&   rŠ   rn   )rI   Útemplater*   r   s       r   r9  Ú/BaseDatabaseSchemaEditor._delete_constraint_sqlÍ  s6   € ÜØÜ˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ñ
ð 	
r   c
           
      ó|  • Ubª  U V
s/ s H�  n
U R                   R                  R                  (       aP  U R                   R                  R	                  [        X R                   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                  X±R                  R                  5      nSSS5        / nWR                  5        H†  u  p®U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.Nr=  r´   r   r  rr   rq  r¿   )rC   rF   Útruncates_namesÚintrospectionÚidentifier_converterr   rm   rÛ  ri   Úget_constraintsr&   rŠ   Úitemsre   )rI   r*   rÞ  r´   r   r  rq  rr   r‡  r,  r   ri   r’   ÚresultÚinfodicts                  r   r4  Ú*BaseDatabaseSchemaEditor._constraint_namesÔ  s£  € ð Ñ#ñ )óò )�Dð —?‘?×+Ñ+×;×;ð —‘×-Ñ-×BÑBÜ! $¯©×(;Ñ(;×(KÑ(KÓ(MÓNôð —_‘_×2Ñ2×GÑGÈÓMò	Nñ
 )ð ð ð �_‰_×#Ñ#Ô%¨ØŸ/™/×7Ñ7×GÑGØŸ™×,Ñ,óˆK÷ &ð ˆØ)×/Ñ/Ö1‰NˆDØÑ# |À	Ñ7JÕ'JØÑ%¨(°8Ñ*<ÀÓ*FÙØÑ*¨x¸Ñ/FÈ+Ó/UÙØÑ$¨°'Ñ):¸eÓ)CÙØÑ$¨°'Ñ):¸eÓ)CÙØÑ*°8¸M×3JÙØÑ$¨°&Ñ)9¸UÓ)BÙÞ $Õ"5Ø—M‘M $Ö'ñ 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&  r/  r0  z) of PK constraints for )r4  r7  r8  r&   rŠ   rR   Ú_delete_primary_key_sql)rI   r*   r}  r>  r¡  s        r   r›  Ú,BaseDatabaseSchemaEditor._delete_primary_key  su   € Ø×1Ñ1°%ÀTÐ1ÐJÐÞ”cÐ*Ó+¨qÓ0Ýô Ð(Ö)Ø—K‘K×(Ó(ðóð ó  0ˆOØ�L‰L˜×5Ñ5°eÓ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   r=  )	r	   Úsql_create_pkr
   r&   rŠ   rn   rž  rŒ   r   r#  s      r   r�  Ú0BaseDatabaseSchemaEditor._create_primary_key_sql  sˆ   € ÜØ×ÑÜ˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘Ø×'Ñ'Ø—K‘K×(Ñ(¨5¯<©<¨.Àð (ð óô
 ˜EŸK™K×0Ñ0°5·<±<°.À$Ç/Á/ÓRñ	
ð 		
r   c                 ó:   • U R                  U R                  X5      $ r.   )r9  Úsql_delete_pkr=  s      r   rp  Ú0BaseDatabaseSchemaEditor._delete_primary_key_sql  r?  r   c                 ó<   • U(       a  SU R                  U5      -   $ S$ )NzCOLLATE r^   )rn   )rI   r¡   r¢  rÝ  s       r   r¦   Ú%BaseDatabaseSchemaEditor._collate_sql  s   € Þ:Cˆz˜DŸO™O¨IÓ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_procedurern   r•   rR   )rI   Úprocedure_namer~  rW   s       r   Úremove_procedureÚ)BaseDatabaseSchemaEditor.remove_procedure   s=   € Ø×'Ñ'ØŸ™¨Ó8ØŸ8™8 KÓ0ñ+
ñ 
ˆð 	�‰�SÕr   )r   rH   rD   rE   rC   rM   )FT)rY   )F)r^   r.   )NNNNN)NNNNNN)T)NNNNNNNNrÀ   )rÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r”   rF  rU  rö   rd  rf  rÆ  r½  r¾  rÃ  rÂ  rÁ  rs  r.  rš  rH  r†   Úsql_delete_constraintrI  r]  ra  rO  r  r2  r�   ra  r<  rý  rN  r  r%  rt  rw  r  rN  rË  rJ   rO   rS   rR   rn   rž   r¼   r„   r«   r¬   r°   r®   Ústaticmethodrá   r­   rh   rñ   rõ   r  r  r  r  r  r  r)  r  rJ  rë   rX  rm  rw  r‚  r|  r—  re  r–  rì   r©   r{  rž  rå  ré  rí  r&  r’  r  rþ  rí   rg  rz  r  rŽ  rœ  r”  r�   rb  rr  rC  rJ  r‚   r6  r�  rZ  rŸ  r“  r9  r4  r›  r�  rp  r¦   r�  Ú__static_attributes__rY   r   r   r@   r@   K   s  † ñð AÐØJÐØVÐØ5ÐàTÐØ:ÐØPÐØCÐØ FÐØPÐØ"HÐØ'BÐ$ØNÐàNð ð 	Qð ð AÐØ.ÐØLÐØ9€NàXÐØ,Ðð	-ð ð .Ðð	@ð ð  ÐØ"&ÐØ)€Mð	9ð ð
	0ð ð IÐØ,Ðð 	Rð ð *€Mà9ÐàIÐØVÐôUòòAô,ò>4òOòf7Nôr
ò6òò
òð ñó ðò.Wò$ò">òH.ò*	Aò4ò-ò+òòAò*Vò* SòDHò&
ò	
òT$òl.ô@>
ðR ôX$òt
ô:$
òL,
ò\	
ò/ò
ô@ô@
òò

ð ØØØØØØØØØØõ4
ôl
ò
òSòò.ôRò"3òCò
ò
ò
ò*
òLò5ð ØØØØô&
ðX ØØØØØô3
ôj	Fð ØØØØô=ò8
ò
òOò

ð ØØØØØØØô+ôZOò

òLôL÷r   r@   ) Úloggingr(   r   Údjango.confr   Ú!django.db.backends.ddl_referencesr   r   r   r   r	   r
   Údjango.db.backends.utilsr   r   r   Údjango.db.modelsr   r   Údjango.db.models.sqlr   Údjango.db.transactionr   r   Údjango.utilsr   Ú	getLoggerra   r   r+   r:   r@   rY   r   r   Ú<module>r”     s\   ðÛ Û Ý å  ÷÷ ÷ SÑ Rß .Ý &ß DÝ !à	×	Ò	Ð6Ó	7€ò1ò 
ò
÷.Zò Zr   