Ë
    q^ëið ã                   óâ   — d dl Z d dlZd dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ  e j4                  d
«      Zd„ Zd„ Zd„ Z G d„ d«      Zy)é    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                 óž   — | j                   }|j                  ry|j                  r|j                  dgk(  ry|j                  |j                  v S )zz
    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      úO/var/www/eb/venv/lib/python3.12/site-packages/django/db/backends/base/schema.pyÚ_is_relevant_relationr      sG   € ð
 �N‰N€EØ×ÒàØ× Ò  U§_¡_¸¸Ò%>àà×Ñ §¡Ð0Ð0ó    c                 ó|   — t        | j                  j                  dddd¬«      t        j                  d«      ¬«      S )NFT)ÚforwardÚreverseÚinclude_hiddenÚinclude_parentsr   )Úkey)ÚsortedÚ_metaÚ_get_fieldsÚoperatorÚ
attrgetter)Úmodels    r   Ú_all_related_fieldsr+   '   sB   € äØ�‰×ÑØØØØ!ð	 	 ó 	
ô ×Ñ Ó'ôð r   c              #   ó  ‡ ‡K  — t        ˆ fd„t        ‰ j                  «      D «       ˆfd„t        ‰j                  «      D «       «      }|D ]3  \  }}||f–— t        |j                  |j                  «      E d {  –—†  Œ5 y 7 Œ­w)Nc              3   ó:   •K  — | ]  }t        |‰«      r|–— Œ y ­w©N©r   )Ú.0ÚobjÚ	old_fields     €r   ú	<genexpr>z+_related_non_m2m_objects.<locals>.<genexpr>8   ó#   øè ø€ ò 	
àÜ$ S¨)Ô4ô ñ	
ùó   ƒc              3   ó:   •K  — | ]  }t        |‰«      r|–— Œ y ­wr.   r/   )r0   r1   Ú	new_fields     €r   r3   z+_related_non_m2m_objects.<locals>.<genexpr>=   r4   r5   )Úzipr+   r*   Ú_related_non_m2m_objectsÚremote_field)r2   r7   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r9   r9   4   s‰   ùè ø€ ô ó	
ä*¨9¯?©?Ó;ô	
ó
	
ä*¨9¯?©?Ó;ô	
ó€Nð +ò 
Ñˆ�Ø�wÐÒÜ+Ø× Ñ Ø× Ñ ó
÷ 	
ñ 	
ñ
ð	
ús   „A6BÁ:BÁ;Bc                   óÄ  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZeZdZdZdZdZdZdZdZdZeZdZeZdZdZdZeZdZdZ dZ!dZ"dZ#eZ$dZ%dZ&dZ'djd „Z(d!„ Z)d"„ Z*dkd$„Z+d%„ Z,d&„ Z-d'„ Z.dld(„Z/d)„ Z0d*„ Z1d+„ Z2d,„ Z3e4d-„ «       Z5d.„ Z6d/„ Z7d0„ Z8d1„ Z9d2„ Z:d3„ Z;d4„ Z<d5„ Z=d6„ Z>d7„ Z?d8„ Z@d9„ ZAd:„ ZBd;„ ZCd<„ ZDd=„ ZEd>„ ZFdld?„ZG	 dld@„ZHdA„ ZIdldB„ZJdC„ ZKdD„ ZLdE„ ZMdF„ ZNdmdH„ZOdndI„ZPdJ„ ZQdK„ ZRdddGdGdd#dd#ddddLœdM„ZSdndN„ZTdO„ ZUdP„ ZVdQ„ ZWdR„ ZXdndS„ZYdT„ ZZdU„ Z[dV„ Z\dW„ Z]dX„ Z^dY„ Z_dZ„ Z`d[„ Za	 	 	 	 	 dod\„Zb	 	 	 	 	 	 dpd]„Zcdqd^„Zd	 	 	 	 	 dod_„Zed`„ Zfda„ Zgdb„ Zhdc„ Zi	 	 	 	 	 	 	 	 drdd„Zjdlde„Zkdf„ Zldg„ Zmdsdh„Zndkdi„Zoy)tÚBaseDatabaseSchemaEditorzÈ
    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                 ó˜   — || _         || _        | j                  rg | _        | j                   j                  j                  xr || _        y r.   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrA   rB   r   s       r   Ú__init__z!BaseDatabaseSchemaEditor.__init__“   s?   € Ø$ˆŒØ&ˆÔØ×ÒØ!#ˆDÔØ $§¡× 8Ñ 8× IÑ IÒ TÈfˆÕr   c                 ó¨   — g | _         | j                  r>t        | j                  j                  «      | _        | j                  j                  «        | S r.   )Údeferred_sqlrF   r   rA   ÚaliasÚ	__enter__)rG   s    r   rL   z"BaseDatabaseSchemaEditor.__enter__œ   s>   € ØˆÔØ× Ò Ü  §¡×!6Ñ!6Ó7ˆDŒKØ�K‰K×!Ñ!Ô#Øˆr   c                 ó    — |€"| j                   D ]  }| j                  |«       Œ | j                  r| j                  j	                  |||«       y y r.   )rJ   ÚexecuterF   r   Ú__exit__)rG   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rO   z!BaseDatabaseSchemaEditor.__exit__£   sM   € ØÐØ×(Ñ(ò "�Ø—‘˜SÕ!ð"à× Ò Ø�K‰K× Ñ  ¨9°iÕ@ð !r   © c           	      óŒ  — | j                   sA| j                  j                  r+| j                  j                  j                  st        d«      ‚t        |«      }t        j                  d||||dœ¬«       | j                   rƒ|j                  «       j                  d«      rdnd}|�?| j                  j                  |t        t        | j                  |«      «      z  |z   «       y| j                  j                  ||z   «       y| j                  j!                  «       5 }|j#                  ||«       ddd«       y# 1 sw Y   yxY w)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))ÚparamsrS   )Úextraú;Ú N)rB   rA   Úin_atomic_blockrD   rE   r   ÚstrÚloggerÚdebugÚrstripÚendswithrC   ÚappendÚtupleÚmapÚquote_valueÚcursorrN   )rG   rS   rV   Úendingrd   s        r   rN   z BaseDatabaseSchemaEditor.execute¬   s  € ð
 × Ò Ø—‘×/Ò/Ø—O‘O×,Ñ,×=Ò=ä,ð?óð ô
 �#‹hˆä�‰Ø˜s F¸VÈCÑ2Pð 	ô 	
ð ×ÒØŸ:™:›<×0Ñ0°Ô5‘R¸3ˆFØÐ!Ø×"Ñ"×)Ñ)Øœ5¤ T×%5Ñ%5°vÓ!>Ó?Ñ?À6ÑIõð ×"Ñ"×)Ñ)¨#°©,Õ7à—‘×'Ñ'Ó)ð ,¨VØ—‘˜s FÔ+÷,÷ ,ñ ,ús   ÄD:Ä:Ec                 óL   — | j                   j                  j                  |«      S r.   )rA   ÚopsÚ
quote_name)rG   r   s     r   rh   z#BaseDatabaseSchemaEditor.quote_nameË   s   € Ø�‰×"Ñ"×-Ñ-¨dÓ3Ð3r   c                 óŠ  — |j                   j                  D ]U  }|D �cg c]  }|j                   j                  |«      ‘Œ }}| j                  j	                  | j                  ||«      «       ŒW g }g }|j                   j                  D �]N  }| j                  ||«      \  }}|€Œ|j                  | j                  ¬«      }	|	d   r|d| j                  |	z  z   z  }|j                  | j                  ¬«      }
|
r|d|
z  z  }|j                  |«       |j                  �r|j                  �r|j                  j                  j                   j                   }|j                  j                  j                   j                  |j                  j"                  «      j$                  }| j&                  r7|d| j&                  | j)                  |«      | j)                  |«      dœz  z   z  }nL| j                  j*                  j,                  r,| j                  j	                  | j/                  ||d«      «       |j	                  | j)                  |j$                  «      ›d|›�«       |j1                  «       dv s�Œì| j                  j2                  j5                  |j                   j                   |j$                  «      }|s�Œ4| j                  j                  |«       �ŒQ |j                   j6                  D �cg c]  }|j9                  || «      ‘Œ }}| j:                  | j)                  |j                   j                   «      dj=                  d	„ g |¢|¢­D «       «      d
œz  }|j                   j>                  rC| j                  j2                  jA                  |j                   j>                  «      }|r|d|z   z  }||fS c c}w c c}w )z-Take a model and return its table definition.©rA   Úcheckú z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldú, c              3   ó6   K  — | ]  }|rt        |«      –— Œ y ­wr.   )r[   )r0   Ú
constraints     r   r3   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s   è ø€ ò $àÙô �J—ñ$ùs   ‚)ÚtableÚ
definition)!r&   Úunique_togetherÚ	get_fieldrJ   r`   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersrA   Úsql_check_constraintÚdb_type_suffixÚextendr:   Údb_constraintr*   Údb_tableÚ
field_nameÚcolumnÚsql_create_inline_fkrh   rD   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typerg   Úautoinc_sqlÚconstraintsÚconstraint_sqlÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rG   r*   Úfield_namesr   ÚfieldsÚcolumn_sqlsrV   rw   Úextra_paramsÚ	db_paramsÚcol_type_suffixrm   rn   r‰   ru   rŠ   rS   r�   s                     r   Ú	table_sqlz"BaseDatabaseSchemaEditor.table_sqlÎ   ss  € ð !Ÿ;™;×6Ñ6ò 	MˆKØ@KÖL°u�e—k‘k×+Ñ+¨EÕ2ÐLˆFÐLØ×Ñ×$Ñ$ T×%<Ñ%<¸UÀFÓ%KÕLð	Mð ˆØˆØ—[‘[×-Ñ-ó 2	:ˆEà'+§¡°u¸eÓ'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Ø ×-Ñ-×3Ñ3×9Ñ9×BÑB�Ø!×.Ñ.×4Ñ4×:Ñ:×DÑDØ×&Ñ&×1Ñ1óç‘&ð ð ×,Ò,Ø #¨×(AÑ(AØ$(§O¡O°HÓ$=Ø%)§_¡_°YÓ%?ñEñ )ñ #ñ ‘Jð —_‘_×-Ñ-×CÒCØ×%Ñ%×,Ñ,Ø×+Ñ+Ø! 5Ð*Jóôð ×Ñð —O‘O E§L¡LÕ1Ùðôð ×&Ñ&Ó(ð -ó ð
 #Ÿo™o×1Ñ1×=Ñ=Ø—K‘K×(Ñ(¨%¯,©,ó�ó Ø×%Ñ%×,Ñ,¨[Ö9ðe2	:ðj $Ÿk™k×5Ñ5ö
àð ×%Ñ% e¨TÕ2ð
ˆð 
ð ×#Ñ#Ø—_‘_ U§[¡[×%9Ñ%9Ó:ØŸ)™)ñ $à"> KÐ">°+Ñ">ô$ó ñ'
ñ 
ˆð �;‰;×$Ò$Ø!Ÿ_™_×0Ñ0×?Ñ?Ø—‘×)Ñ)óˆNñ Ø�s˜^Ñ+Ñ+�Ø�Fˆ{ÐùòU Mùòp
s   ž"N;Ë3O c              #   óX  K  — |–— |j                  d«      x}r| j                  |«      –— | j                  j                  j                  r)|j
                  r| j                  |j
                  «      –— |j                  }|xr* | j                  |«       xr |xr | j                  |«       }|rs| j                  |«      }	|	�`d| j                  |«      z   }
| j                  j                  j                  r|
| j                  |	«      z  –— n|
–— |j                  |	«       |j                  r.|j                   s"| j                  j                  j"                  rd}|sd–— n$| j                  j                  j$                  sd–— |j                   rd–— n|j&                  rd–— |j(                  xs |j*                  j(                  }|rX| j                  j                  j,                  r7|j&                  r*| j                  j.                  j1                  |d¬«      –— y y y y ­w)	NÚ	collationzDEFAULT TzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlrA   rD   Úsupports_comments_inlineÚ
db_commentÚ_comment_sqlÚnullÚskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlÚrequires_literal_defaultsÚprepare_defaultr`   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚimplied_column_nullÚuniquerŽ   r&   Úsupports_tablespacesrg   r�   )rG   Úcolumn_db_typerV   r*   r   Úfield_db_paramsÚinclude_defaultr˜   r¡   Údefault_valueÚcolumn_defaultÚ
tablespaces               r   Ú_iter_column_sqlz)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ð )¨4×+?Ñ+?ÀÓ+NÑNÓNà(Ò(Ø—M‘M -Ô0ð ×'Ò'Ø×%Ò%Ø—‘×(Ñ(×JÒJàˆDÙØÓØ—‘×)Ñ)×=Ò=ØŠLØ×ÒØÓØ�\Š\ØŠNà×(Ñ(ÒE¨E¯K©K×,EÑ,Eˆ
áØ—‘×(Ñ(×=Ò=Ø—’à—/‘/×%Ñ%×4Ñ4°ZÈÐ4ÓMÓMð ð >ð ùs   ‚H(H*c           
      óœ   — |j                  | j                  ¬«      }|d   }|€yg }dj                  | j                  ||||||«      «      |fS )z†
        Return the column definition for a field. The field must already have
        had set_attributes_from_name() called.
        rj   Útype©NNrl   )r}   rA   r�   r³   )rG   r*   r   r¯   r®   r­   rV   s          r   r|   z#BaseDatabaseSchemaEditor.column_sqlZ  sn   € ð  ×-Ñ-¸¿¹Ð-ÓIˆØ(¨Ñ0ˆàÐ!ØØˆà�H‰Hà×%Ñ%Ø"ØØØØ#Ø#óó
ð ð
ð 	
r   c                  ó   — y)z�
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob).
        FrT   ©rG   r   s     r   r¢   z%BaseDatabaseSchemaEditor.skip_defaultu  ó   € ð
 r   c                  ó   — y)zŸ
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob) in the ALTER COLUMN statement.
        FrT   r¸   s     r   r£   z.BaseDatabaseSchemaEditor.skip_default_on_alter|  r¹   r   c                 ó   — t        d«      ‚)zU
        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©rG   Úvalues     r   r§   z(BaseDatabaseSchemaEditor.prepare_defaultƒ  s   € ô "ðPó
ð 	
r   c                  ó   — y)z�
        Return the SQL to use in a DEFAULT clause. The resulting string should
        contain a '%s' placeholder for a default value.
        ú%srT   r¸   s     r   r¥   z,BaseDatabaseSchemaEditor._column_default_sqlŒ  s   € ð
 r   c                 óÚ  — | j                  «       r| j                  «       }|S | j                  s3| j                  r'| j                  r| j                  «       dk(  rd}|S d}|S t        | dd«      st        | dd«      rm| j                  «       }|dk(  rt        j                  «       }|S t        j                  «       }|dk(  r|j                  «       }|S |d	k(  r|j                  «       }|S d }|S )
NÚBinaryFieldr   rY   Úauto_nowFÚauto_now_addÚDateTimeFieldÚ	DateFieldÚ	TimeField)Úhas_defaultÚget_defaultr¡   Úblankr¨   rˆ   Úgetattrr   Únowr   ÚdateÚtime)r   ÚdefaultÚinternal_types      r   Ú_effective_defaultz+BaseDatabaseSchemaEditor._effective_default“  sø   € ð ×ÑÔØ×'Ñ'Ó)ˆGð$ ˆð# —’ §¢°×0KÒ0KØ×&Ñ&Ó(¨MÒ9Ø�ð ˆð �ð ˆô �U˜J¨Ô.´'¸%ÀÐQVÔ2WØ!×3Ñ3Ó5ˆMØ Ò/Ü"Ÿ,™,›.�ð ˆô #Ÿ,™,›.�Ø  KÒ/Ø%Ÿl™l›n�Gð
 ˆð	 # kÒ1Ø%Ÿl™l›n�Gð ˆð ˆGØˆr   c                 óX   — |j                  | j                  |«      | j                  «      S )z2Return a field's effective database default value.)Úget_db_prep_saverÒ   rA   r¸   s     r   r¤   z*BaseDatabaseSchemaEditor.effective_default«  s$   € à×%Ñ% d×&=Ñ&=¸eÓ&DÀdÇoÁoÓVÐVr   c                 ó   — t        «       ‚)aX  
        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   rc   z$BaseDatabaseSchemaEditor.quote_value¯  s   € ô "Ó#Ð#r   c           	      ód  — | j                  |«      \  }}| j                  ||xs d«       | j                  j                  j                  rÑ|j
                  j                  r'| j                  |d|j
                  j                  «       | j                  j                  j                  st|j
                  j                  D ][  }|j                  sŒ|j                  | j                  ¬«      }|d   } | j                  | j                  ||||j                  «      Ž  Œ] | j                  j                  | j                  |«      «       |j
                  j                   D ]R  }|j"                  j$                  j
                  j&                  sŒ.| j)                  |j"                  j$                  «       ŒT y)zr
        Create a table and any accompanying indexes or unique constraints for
        the given `model`.
        Nrj   rµ   )r–   rN   rA   rD   Úsupports_commentsr&   Údb_table_commentÚalter_db_table_commentrž   r{   rŸ   r}   Ú_alter_column_comment_sqlrJ   r€   Ú_model_indexes_sqlÚlocal_many_to_manyr:   ÚthroughÚauto_createdÚcreate_model)rG   r*   rS   rV   r   r®   Ú
field_types          r   rß   z%BaseDatabaseSchemaEditor.create_model»  s_  € ð
 —n‘n UÓ+‰ˆˆVð 	�‰�S˜&š. DÔ)à�?‰?×#Ñ#×5Ò5à�{‰{×+Ò+Ø×+Ñ+¨E°4¸¿¹×9UÑ9UÔVà—?‘?×+Ñ+×DÒDØ"Ÿ[™[×5Ñ5ò 
�EØ×'Ó'Ø*/×*=Ñ*=Ø'+§¡ð +>ó +˜ð &5°VÑ%<˜
Ø$˜Ÿ™Ø!×;Ñ;Ø % u¨j¸%×:JÑ:Jóòð
ð 	×Ñ× Ñ  ×!8Ñ!8¸Ó!?Ô@ð —[‘[×3Ñ3ò 	>ˆEØ×!Ñ!×)Ñ)×/Ñ/×<Ó<Ø×!Ñ! %×"4Ñ"4×"<Ñ"<Õ=ñ	>r   c                 ó8  — |j                   j                  D ]R  }|j                  j                  j                   j                  sŒ.| j                  |j                  j                  «       ŒT | j                  | j                  d| j                  |j                   j                  «      iz  «       t        | j                  «      D ]T  }t        |t        «      sŒ|j                  |j                   j                  «      sŒ:| j                  j                  |«       ŒV y)z!Delete a model from the database.rv   N)r&   rÜ   r:   rÝ   rÞ   Údelete_modelrN   Úsql_delete_tablerh   r‚   ÚlistrJ   Ú
isinstancer	   Úreferences_tableÚremove)rG   r*   r   rS   s       r   râ   z%BaseDatabaseSchemaEditor.delete_modelß  sá   € ð —[‘[×3Ñ3ò 	>ˆEØ×!Ñ!×)Ñ)×/Ñ/×<Ó<Ø×!Ñ! %×"4Ñ"4×"<Ñ"<Õ=ð	>ð
 	�‰Ø×!Ñ!à˜Ÿ™¨¯©×)=Ñ)=Ó>ðñô	
ô ˜×)Ñ)Ó*ò 	.ˆCÜ˜#œyÕ)¨c×.BÑ.BØ—‘×$Ñ$õ/ð ×!Ñ!×(Ñ(¨Õ-ñ		.r   c                 ó¤   — |j                   r!| j                  j                  j                  sy| j	                  |j                  || «      d¬«       y)zAdd an index on a model.N©rV   )Úcontains_expressionsrA   rD   Úsupports_expression_indexesrN   Ú
create_sql©rG   r*   Úindexs      r   Ú	add_indexz"BaseDatabaseSchemaEditor.add_indexô  sB   € ð ×&Ò&Ø—O‘O×,Ñ,×HÒHàð 	�‰�U×%Ñ% e¨TÓ2¸4ˆÕ@r   c                 ó    — |j                   r!| j                  j                  j                  sy| j	                  |j                  || «      «       y)zRemove an index from a model.N)rê   rA   rD   rë   rN   Ú
remove_sqlrí   s      r   Úremove_indexz%BaseDatabaseSchemaEditor.remove_indexÿ  s<   € ð ×&Ò&Ø—O‘O×,Ñ,×HÒHàØ�‰�U×%Ñ% e¨TÓ2Õ3r   c                 óþ   — | j                   j                  j                  r9| j                  | j	                  ||j
                  |j
                  «      d ¬«       y | j                  ||«       | j                  ||«       y )Nré   )rA   rD   Úcan_rename_indexrN   Ú_rename_index_sqlr   rò   rï   )rG   r*   Ú	old_indexÚ	new_indexs       r   Úrename_indexz%BaseDatabaseSchemaEditor.rename_index  sc   € Ø�?‰?×#Ñ#×4Ò4Ø�L‰LØ×&Ñ& u¨i¯n©n¸i¿n¹nÓMØð õ ð
 ×Ñ˜e YÔ/Ø�N‰N˜5 )Õ,r   c                 óT   — |j                  || «      }|r| j                  |d¬«       yy)zAdd a constraint to a model.Nré   )rì   rN   ©rG   r*   ru   rS   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraint  s.   € à×#Ñ# E¨4Ó0ˆÙð �L‰L˜ TˆLÕ*ð r   c                 óP   — |j                  || «      }|r| j                  |«       yy)z!Remove a constraint from a model.N)rñ   rN   rú   s       r   Úremove_constraintz*BaseDatabaseSchemaEditor.remove_constraint  s(   € à×#Ñ# E¨4Ó0ˆÙØ�L‰L˜Õð r   c                 ó®  — |D �ch c]  }t        |«      ’Œ }}|D �ch c]  }t        |«      ’Œ }}|j                  |«      D ]#  }| j                  ||dddœ| j                  «       Œ% |j                  |«      D ]K  }|D �cg c]  }|j                  j                  |«      ‘Œ }}| j                  | j                  ||«      «       ŒM yc c}w c c}w c c}w )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)ra   Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquer&   ry   rN   rz   )	rG   r*   Úold_unique_togetherÚnew_unique_togetherr‘   ÚoldsÚnewsr�   r   s	            r   Úalter_unique_togetherz.BaseDatabaseSchemaEditor.alter_unique_together   sÖ   € ð -@Ö@ &”�f•Ð@ˆÐ@Ø,?Ö@ &”�f•Ð@ˆÐ@à—o‘o dÓ+ò 	ˆFØ×'Ñ'ØØØ°Ñ6Ø×&Ñ&õ	ð	ð  Ÿ?™?¨4Ó0ò 	AˆKØ@KÖL°u�e—k‘k×+Ñ+¨EÕ2ÐLˆFÐLØ�L‰L˜×0Ñ0°¸Ó?Õ@ñ	Aùò AùÚ@ùò Ms   …C�CÂ "Cc                 ó²  — |D �ch c]  }t        |«      ’Œ }}|D �ch c]  }t        |«      ’Œ }}|j                  |«      D ]#  }| j                  ||dddœ| j                  «       Œ% |j                  |«      D ]M  }|D �cg c]  }|j                  j                  |«      ‘Œ }}| j                  | j                  ||d¬«      «       ŒO yc c}w c c}w c c}w )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)ra   rÿ   r   Úsql_delete_indexr&   ry   rN   Ú_create_index_sql)	rG   r*   Úold_index_togetherÚnew_index_togetherr‘   r  r  r�   r   s	            r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_together5  sÚ   € ð -?Ö? &”�f•Ð?ˆÐ?Ø,>Ö? &”�f•Ð?ˆÐ?à—o‘o dÓ+ò 	ˆFØ×'Ñ'ØØØ¨%Ñ0Ø×%Ñ%õ	ð	ð  Ÿ?™?¨4Ó0ò 	VˆKØ@KÖL°u�e—k‘k×+Ñ+¨EÕ2ÐLˆFÐLØ�L‰L˜×/Ñ/°¸fÈVÐ/ÓTÕUñ	Vùò @ùÚ?ùò Ms   …C
�CÂ "Cc           
      ó.  — |j                   j                  D �ch c]  }|j                  ’Œ }}|j                   j                  D �ch c]  }|j                  ’Œ }}|D �cg c]'  }|j                   j	                  |«      j
                  ‘Œ) }	} | j                  ||	fd||z  i|¤Ž}
|j                  d«      du rZ|
rX| j                  j                  j                  r8t        | j                  |j                   j                  |	d¬«      «      }||
v r|g}
t        |
«      dk7  rAt        dt        |
«      ›d|j                   j                  ›d	d
j!                  |	«      ›d�«      ‚| j#                  | j%                  |||
d   «      «       y c c}w c c}w c c}w )NÚexcluder«   TF©Úquoteé   úFound wrong number (z) of constraints for ú(rs   ú)r   )r&   rŠ   r   Úindexesry   r„   Ú_constraint_namesrœ   rA   rD   Ú*allows_multiple_constraints_on_same_fieldsr[   Ú_unique_constraint_namer‚   ÚlenÚ
ValueErrorr�   rN   Ú_delete_constraint_sql)rG   r*   r‘   Úconstraint_kwargsrS   ru   Úmeta_constraint_namesÚmeta_index_namesr   ÚcolumnsÚconstraint_namesÚdefault_names               r   r   z/BaseDatabaseSchemaEditor._delete_composed_indexJ  sŠ  € à.3¯k©k×.EÑ.Eö!
Ø *ˆJ�O‹Oð!
Ðð !
ð ?D¿k¹k×>QÑ>QÖR°
˜JŸO›OÐRÐÐRØDJÖK¸5�5—;‘;×(Ñ(¨Ó/×6Ó6ÐKˆÐKØ1˜4×1Ñ1ØØñ
ð *Ð,<Ñ<ð
ð  ñ	
Ðð ×!Ñ! (Ó+¨tÑ3Ù Ø—‘×(Ñ(×SÒSô Ø×,Ñ,¨U¯[©[×-AÑ-AÀ7ÐRWÐ,ÓXóˆLð Ð/Ñ/Ø$0 >Ð ÜÐÓ  AÒ%Ýô Ð(Õ)Ø—K‘K×(Ó(Ø—I‘I˜gÕ&ð	óð ð 	�‰�T×0Ñ0°°eÐ=MÈaÑ=PÓQÕRùò?!
ùò SùÚKs   ™FÁFÁ,Fc                 óx  — ||k(  sA| j                   j                  j                  r"|j                  «       |j                  «       k(  ry| j	                  | j
                  | j                  |«      | j                  |«      dœz  «       | j                  D ]%  }t        |t        «      sŒ|j                  ||«       Œ' y)z#Rename the table a model points to.N)Ú	old_tableÚ	new_table)rA   rD   Úignores_table_name_caseÚlowerrN   Úsql_rename_tablerh   rJ   rå   r	   Úrename_table_references)rG   r*   Úold_db_tableÚnew_db_tablerS   s        r   Úalter_db_tablez'BaseDatabaseSchemaEditor.alter_db_tablel  s¤   € à˜<Ò'Ø�O‰O×$Ñ$×<Ò<Ø×"Ñ"Ó$¨×(:Ñ(:Ó(<Ò<àØ�‰Ø×!Ñ!à!Ÿ_™_¨\Ó:Ø!Ÿ_™_¨\Ó:ññô	
ð ×$Ñ$ò 	HˆCÜ˜#œyÕ)Ø×+Ñ+¨L¸,ÕGñ	Hr   c                 ó²   — | j                  | j                  | j                  |j                  j                  «      | j                  |xs d«      dœz  «       y )NrY   )rv   Úcomment)rN   Úsql_alter_table_commentrh   r&   r‚   rc   )rG   r*   Úold_db_table_commentÚnew_db_table_comments       r   rÙ   z/BaseDatabaseSchemaEditor.alter_db_table_comment  sK   € Ø�‰Ø×(Ñ(àŸ™¨¯©×)=Ñ)=Ó>Ø×+Ñ+Ð,@Ò,FÀBÓGññõ	
r   c                 óÊ   — | j                  | j                  | j                  |j                  j                  «      | j                  |«      | j                  |«      dœz  «       y)z)Move a model's table between tablespaces.)rv   Úold_tablespaceÚnew_tablespaceN)rN   Úsql_retablespace_tablerh   r&   r‚   )rG   r*   Úold_db_tablespaceÚnew_db_tablespaces       r   Úalter_db_tablespacez,BaseDatabaseSchemaEditor.alter_db_tablespaceˆ  sQ   € à�‰Ø×'Ñ'àŸ™¨¯©×)=Ñ)=Ó>Ø"&§/¡/Ð2CÓ"DØ"&§/¡/Ð2CÓ"Dññõ	
r   c           
      ó†  — |j                   rO|j                  j                  j                  j                  r%| j                  |j                  j                  «      S | j                  ||d¬«      \  }}|€y|j                  | j                  ¬«      x}r|d|› �z  }|j                  | j                  ¬«      }|d   r|d| j                  |z  z   z  }|j                  �rŸ| j                  j                  j                  �r~|j                  �rqd}| j                  �r6|j                  j                  j                  j                   }|j                  j                  j                  j#                  |j                  j$                  «      j&                  }	t)        |j                  j                   «      \  }
}|d| j                  | j+                  |||«      |
rd| j-                  |
«      z  nd	| j-                  |j&                  «      | j-                  |«      | j-                  |	«      | j                  j.                  j1                  «       d
œz  z   z  }n,| j2                  j5                  | j7                  |||«      «       | j8                  | j-                  |j                  j                   «      | j-                  |j&                  «      |dœz  }| j;                  ||«       | j=                  |«      sp| j?                  |«      �_| jA                  |d|d¬«      \  }}| jB                  | j-                  |j                  j                   «      |dœz  }| j;                  ||«       |jD                  rp| j                  j                  jF                  rP| j                  j                  jH                  s0|d   } | j:                  | jK                  ||||jD                  «      Ž  | j2                  jM                  | jO                  ||«      «       | j                  j                  jP                  r| j                  jS                  «        yy)z�
        Create a field on a model. Usually involves adding a column, but may
        involve adding a table instead (for M2M fields).
        T)r¯   Nrj   rl   rk   ro   z%s.rY   )r   Ú	namespacer„   rm   rn   Ú
deferrable)rv   r„   rw   ©Údrop©rv   Úchangesrµ   )*r   r:   rÝ   r&   rÞ   rß   r|   r   rA   r}   r~   rD   r†   r�   Úsql_create_column_inline_fkr*   r‚   ry   rƒ   r„   r   Ú_fk_constraint_namerh   rg   Údeferrable_sqlrJ   r`   r‡   Úsql_create_columnrN   r£   r¤   Ú_alter_column_default_sqlÚsql_alter_columnrŸ   r×   rž   rÚ   r€   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rG   r*   r   rw   rV   r•   r”   Úconstraint_suffixrm   rn   r<  Ú_rS   Úchanges_sqlrà   s                  r   Ú	add_fieldz"BaseDatabaseSchemaEditor.add_field“  s°  € ð ×Ò %×"4Ñ"4×"<Ñ"<×"BÑ"B×"OÒ"OØ×$Ñ$ U×%7Ñ%7×%?Ñ%?Ó@Ð@à!Ÿ_™_¨U°EÈ4˜_ÓPÑˆ
�FàÐØØ#×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‘�	˜1Ø˜c D×$DÑ$DØ ×4Ñ4°U¸EÐCTÓUá ð "'¨¯©¸Ó)CÒ!CàØ"Ÿo™o¨e¯l©lÓ;Ø $§¡°Ó 9Ø!%§¡°Ó!;Ø"&§/¡/×"5Ñ"5×"DÑ"DÓ"Fñ	Hñ 	%ñ 	ñ 	‘
ð ×!Ñ!×(Ñ(Ø×'Ñ'¨¨uÐ6GÓHôð ×$Ñ$Ø—_‘_ U§[¡[×%9Ñ%9Ó:Ø—o‘o e§l¡lÓ3Ø$ñ(
ñ 
ˆð
 	�‰�S˜&Ô!ð ×*Ñ*¨5Ô1Ø×&Ñ& uÓ-Ð9à"&×"@Ñ"@Ø�t˜U¨ð #Aó #ÑˆK˜ð ×'Ñ'ØŸ™¨¯©×)=Ñ)=Ó>Ø&ñ+ñ ˆCð �L‰L˜˜fÔ%ð ×ÒØ—‘×(Ñ(×:Ò:Ø—O‘O×,Ñ,×EÒEà" 6Ñ*ˆJØˆD�L‰LØ×/Ñ/Ø˜5 *¨e×.>Ñ.>óñð 	×Ñ× Ñ  ×!8Ñ!8¸ÀÓ!FÔGà�?‰?×#Ñ#×CÒCØ�O‰O×!Ñ!Õ#ð Dr   c                 óÀ  — |j                   rO|j                  j                  j                  j                  r%| j                  |j                  j                  «      S |j                  | j                  ¬«      d   €y|j                  rG| j                  ||j                  gd¬«      }|D ]#  }| j                  | j                  ||«      «       Œ% | j                  | j                  |j                  j                  «      | j                  |j                  «      dœz  }| j                  |«       | j                  j                  j                   r| j                  j#                  «        t%        | j&                  «      D ]_  }t)        |t*        «      sŒ|j-                  |j                  j                  |j                  «      sŒE| j&                  j/                  |«       Œa y)z…
        Remove a field from a model. Usually involves deleting a column,
        but for M2Ms may involve deleting a table.
        rj   rµ   NT©Úforeign_key)rv   r„   )r   r:   rÝ   r&   rÞ   râ   r}   rA   r  r„   rN   Ú_delete_fk_sqlÚsql_delete_columnrh   r‚   rD   rI  rJ  rä   rJ   rå   r	   Úreferences_columnrç   )rG   r*   r   Úfk_namesÚfk_namerS   s         r   Úremove_fieldz%BaseDatabaseSchemaEditor.remove_fieldé  s}  € ð ×Ò %×"4Ñ"4×"<Ñ"<×"BÑ"B×"OÒ"OØ×$Ñ$ U×%7Ñ%7×%?Ñ%?Ó@Ð@à×Ñ¨$¯/©/ÐÓ:¸6ÑBÐJØà×ÒØ×-Ñ-¨e°e·l±l°^ÐQUÐ-ÓVˆHØ#ò B�Ø—‘˜T×0Ñ0°¸Ó@ÕAðBð ×$Ñ$Ø—_‘_ U§[¡[×%9Ñ%9Ó:Ø—o‘o e§l¡lÓ3ñ(
ñ 
ˆð 	�‰�SÔà�?‰?×#Ñ#×CÒCØ�O‰O×!Ñ!Ô#ä˜×)Ñ)Ó*ò 	.ˆCÜ˜#œyÕ)¨c×.CÑ.CØ—‘×$Ñ$ e§l¡lõ/ð ×!Ñ!×(Ñ(¨Õ-ñ		.r   c           
      ó   — | j                  ||«      sy|j                  | j                  ¬«      }|d   }|j                  | j                  ¬«      }|d   }|€|j                  �|€|j                  €t	        d|›d|›d�«      ‚|€–|€”|j                  j
                  r~|j                  j
                  rh|j                  j
                  j                  j                  r>|j                  j
                  j                  j                  r| j                  ||||«      S |€ƒ|€�|j                  j
                  rk|j                  j
                  rU|j                  j
                  j                  j                  s+|j                  j
                  j                  j                  sy|�|€t	        d|›d|›d�«      ‚| j                  ||||||||«       y)a'  
        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.
        Nrj   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}   rA   r:   r  rÝ   r&   rÞ   Ú_alter_many_to_manyÚ_alter_field)	rG   r*   r2   r7   ÚstrictÚold_db_paramsÚold_typeÚnew_db_paramsÚnew_types	            r   Úalter_fieldz$BaseDatabaseSchemaEditor.alter_field	  sÁ  € ð ×,Ñ,¨Y¸	Ô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°9¸iÈÓPÐPàÐØÐ à×&Ñ&×.Ò.Ø×*Ñ*×2Ò2Ø!×.Ñ.×6Ñ6×<Ñ<×IÒIØ!×.Ñ.×6Ñ6×<Ñ<×IÒIð ØÐ Ð!1Ýò .7º	ðCóð ð 	×ÑØØØØØØØØõ		
r   c	           	      óÜ  — t        «       }	| j                  j                  j                  rÛ|j                  rÏ|j
                  rÃ| j                  ||dh¬«      r®| j                  ||j                  gd¬«      }
|rIt        |
«      dk7  r;t        dt        |
«      ›d|j                  j                  ›d|j                  ›�«      ‚|
D ]?  }|	j                  |j                  f«       | j                  | j                  ||«      «       ŒA |j                   rß|j                   r| j#                  ||«      rÁ|j                  j$                  D �ch c]  }|j&                  ’Œ }}| j                  ||j                  gdd	|¬
«      }|rIt        |«      dk7  r;t        dt        |«      ›d|j                  j                  ›d|j                  ›�«      ‚|D ]#  }| j                  | j)                  ||«      «       Œ% |j+                  d«      }|j+                  d«      }| j                  j                  j                  xrD |j,                  xr |j,                  xs |j                   xr |j                   xr ||k7  xs ||k7  }|ryt/        ||«      D ]j  \  }}| j                  |j0                  |j2                  j                  gd¬«      }|D ]-  }| j                  | j                  |j0                  |«      «       Œ/ Œl |j4                  r¨|j                   sœ|j4                  r|j                   r„|j                  j6                  D �ch c]  }|j&                  ’Œ }}| j                  ||j                  gdt8        j:                  |¬«      }|D ]#  }| j                  | j=                  ||«      «       Œ% |d   |d   k7  rÅ|d   rÀ|j                  j$                  D �ch c]  }|j&                  ’Œ }}| j                  ||j                  gd|¬«      }|rIt        |«      dk7  r;t        dt        |«      ›d|j                  j                  ›d|j                  ›�«      ‚|D ]#  }| j                  | j?                  ||«      «       Œ% |j                  |j                  k7  r”| j                  | jA                  |j                  j                  |||«      «       | jB                  D ]N  }tE        |tF        «      sŒ|jI                  |j                  j                  |j                  |j                  «       ŒP g }g }g }|jK                  | j                  ¬«      }|jK                  | j                  ¬«      }||k7  sC||k7  s>||k7  s9| j                  j                  jL                  rT|jN                  |jN                  k7  r;| jQ                  ||||||«      \  } }!|jS                  | «       |jU                  |!«       d	}"|jV                  rj|jV                  s^| jY                  |«      }#| jY                  |«      }$| j[                  |«      s+|#|$k7  r&|$�$d}"|jS                  | j]                  |||«      «       |jV                  |jV                  k7  r&| j_                  |||«      } | r|jS                  | «       |ja                  «       xr |jV                  xr |jV                   }%|s|�r[|%s||z  }| j                  j                  jb                  r4|r2te        tg        |Ž «      \  }}&dji                  |«      tk        |&g «      fg}|D ]J  \  }}&| j                  | jl                  | jo                  |j                  j                  «      |dœz  |&«       ŒL |%r¯| j                  | jp                  | jo                  |j                  j                  «      | jo                  |j                  «      ddœz  $g«       |D ]J  \  }}&| j                  | jl                  | jo                  |j                  j                  «      |dœz  |&«       ŒL |r|D ]  \  }}&| j                  ||&«       Œ |j,                  r|j,                  s| js                  ||«       | ju                  ||«      r"| j                  | jw                  ||g«      «       |j4                  r|j                   r;|j4                  r/|j                   s#| j                  | jy                  ||g¬«      «       g }'|r|'jU                  t/        ||«      «       | j#                  ||«      r<| j                  | j{                  ||«      «       |'jU                  t/        ||«      «       |'D �]!  \  }(}|j2                  j}                  | j                  ¬«      })|)d   }*|)j+                  d«      }+|(j2                  j}                  | j                  ¬«      },|,j+                  d«      }-| jQ                  |j0                  |(j2                  |j2                  |*|-|+«      \  } }!| j                  | jl                  | jo                  |j0                  j                  j                  «      | d   dœz  | d   «       |!D ]  \  }}&| j                  ||&«       Œ �Œ$ | j                  j                  j                  rT|j                  rH|	s|j                  r|j
                  s.|j
                  r"| j                  | j                  ||d«      «       |rW|'D ]R  \  }.}/|/j2                  j
                  sŒ| j                  | j                  |/j0                  |/j2                  d«      «       ŒT |d   |d   k7  r]|d   rX| j�                  |j                  j                  |j                  gd¬«      }| j                  | jƒ                  |||d   «      «       |"r_| j]                  |||d¬«      \  }0}&| jl                  | jo                  |j                  j                  «      |0dœz  }| j                  ||&«       | j                  j                  j„                  r| j                  j‡                  «        yyc c}w c c}w c c}w )z3Perform a "physical" (non-ManyToMany) field update.rŸ   )ÚignoreTrP  r  r  z!) of foreign key constraints for ú.F)r«   r   r  z) of unique constraints for r˜   )rî   Útype_r  rk   )rk   r  z) of check constraints for rj   Nrs   r@  rÁ   )rv   r„   rÐ   ©r‘   rµ   r   ro   Ú_fkÚ_check©r
  r>  )DÚsetrA   rD   r†   r:   r�   rY  r  r„   r  r  r&   r‚   ÚaddrN   rR  r«   Ú_field_became_primary_keyrŠ   r   Ú_delete_unique_sqlrœ   r   r9   Úrelated_modelr   Údb_indexr  r   r
  Ú_delete_index_sqlÚ_delete_check_sqlÚ_rename_field_sqlrJ   rå   r	   Úrename_column_referencesr   r×   rŸ   Ú_alter_column_type_sqlr`   r€   r¡   r¤   r£   rF  Ú_alter_column_null_sqlrÉ   Úsupports_combined_altersra   r8   r�   ÚsumrG  rh   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedrz   r  Ú_create_primary_key_sqlr}   r‡   Ú_create_index_nameÚ_create_check_sqlrI  rJ  )1rG   r*   r2   r7   r^  r`  r]  r_  r\  Úfks_droppedrU  rV  ru   r   r#  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr=   Úrel_fk_namesrî   r!  Úindex_namesÚ
index_namerS   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrV   Úrels_to_updater<   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationrL  ÚrelrM  s1                                                    r   r[  z%BaseDatabaseSchemaEditor._alter_fieldI  sÞ  € ô “eˆà�O‰O×$Ñ$×:Ò:Ø×&Ò&Ø×'Ò'Ø×-Ñ-ØØØ$�~ð .ô ð ×-Ñ-Ø˜	×(Ñ(Ð)°tð .ó ˆHñ œ#˜h›-¨1Ò,Ý ô ˜H�ØŸ™×,Ó,Ø!×(Ò(ð	óð ð $ò B�Ø—‘ ×!1Ñ!1Ð 3Ô4Ø—‘˜T×0Ñ0°¸Ó@ÕAðBð ×ÒØ× Ò  D×$BÑ$BÀ9ÈiÔ$Xð 38·+±+×2IÑ2Iö%Ø$.�
—“ð%Ð!ð %ð  $×5Ñ5ØØ×!Ñ!Ð"ØØ!Ø-ð  6ó  Ðñ œ#Ð.Ó/°1Ò4Ý ô Ð,Õ-ØŸ™×,Ó,Ø!×(Ò(ð	óð ð $4ò N�Ø—‘˜T×4Ñ4°U¸OÓLÕMðNð &×)Ñ)¨+Ó6ˆØ%×)Ñ)¨+Ó6ˆà�O‰O×$Ñ$×:Ñ:ò Mà×&Ñ&Ò@¨9×+@Ñ+@ò ;Ø×$Ñ$Ò9¨×)9Ñ)9òMð
 ˜hÑ&ÒK¨M¸]Ñ,Jð 	ñ ô &>¸iÈÓ%Sò VÑ!�˜'Ø#×5Ñ5Ø×)Ñ)¨G¯M©M×,@Ñ,@Ð+AÈtð  6ó  �ð  ,ò V�GØ—L‘L ×!4Ñ!4°W×5JÑ5JÈGÓ!TÕUñVð	Vð" ×ÒØ×$Ò$Ø×'Ò'¨9×+;Ò+;ð 9>¿¹×8KÑ8KÖL¨u §
£
ÐLÐÐLð ×0Ñ0ØØ×!Ñ!Ð"ØÜ—l‘lØ(ð 1ó ˆKð *ò H�
ð —‘˜T×3Ñ3°E¸:ÓFÕGð	Hð ˜Ñ! ]°7Ñ%;Ò;ÀÈgÒ@Và27·+±+×2IÑ2Iö%Ø$.�
—“ð%Ð!ð %ð  $×5Ñ5ØØ×!Ñ!Ð"ØØ-ð	  6ó  Ðñ œ#Ð.Ó/°1Ò4Ý ô Ð,Õ-ØŸ™×,Ó,Ø!×(Ò(ð	óð ð $4ò M�Ø—‘˜T×3Ñ3°E¸?ÓKÕLðMð ×Ñ˜y×/Ñ/Ò/Ø�L‰LØ×&Ñ&Ø—K‘K×(Ñ(¨)°YÀóôð ×(Ñ(ò �Ü˜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Ø�y )¨X°}Àmó'Ñ#ˆH�mð �N‰N˜8Ô$Ø×Ñ Ô.ð "'ÐØ�>Š> )§.¢.Ø×0Ñ0°Ó;ˆKØ×0Ñ0°Ó;ˆKà×.Ñ.¨yÔ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Ø'*ññð
 õðñ Ø+ò *‘��VØ—‘˜S &Õ)ð*ð × Ò ¨×)>Ò)>Ø×$Ñ$ U¨FÔ3à×'Ñ'¨	°9Ô=Ø�L‰L˜×0Ñ0°¸¸ÓDÔEð ×#Ò# y×'7Ò'7Ø×"Ò"Ø×$Ò$à�L‰L˜×/Ñ/°¸y¸kÐ/ÓJÔKð ˆÙØ×!Ñ!Ô":¸9ÀiÓ"PÔQà×)Ñ)¨)°YÔ?à�L‰L˜×5Ñ5°e¸YÓGÔHà×!Ñ!Ô":¸9ÀiÓ"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¨9Ð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¨o¸}ÈWÑ?UÓVôñ
 "Ø"&×"@Ñ"@Ø�y )°$ð #Aó #ÑˆK˜ð ×'Ñ'ØŸ™¨¯©×)=Ñ)=Ó>Ø&ñ+ñ ˆCð �L‰L˜˜fÔ%à�?‰?×#Ñ#×CÒCØ�O‰O×!Ñ!Õ#ð DùòW	%ùòt  Mùò"%s   ÅqÌ<q$Ïq)c                 ó(  — | j                   j                  j                  r|j                  ry|j	                  | j                   ¬«      }|j
                  r| j                  n| j                  }|| j                  |j                  «      |d   dœz  g fS )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.
        Nrj   rµ   )r„   rµ   )
rA   rD   r©   r¨   r}   r¡   Úsql_alter_column_nullÚsql_alter_column_not_nullrh   r„   )rG   r*   r2   r7   r_  rS   s         r   ru  z/BaseDatabaseSchemaEditor._alter_column_null_sql£  s–   € ð �O‰O×$Ñ$×FÒFØ×/Ò/ð à%×3Ñ3¸t¿¹Ð3ÓOˆMð —>’>ð ×*Ò*à×3Ñ3ð ð à"Ÿo™o¨i×.>Ñ.>Ó?Ø)¨&Ñ1ññð
 ðð r   c                 óª  — | j                  |«      }| j                  |«      }|g}|rg }n3| j                  j                  j                  r| j                  |«      }g }|j                  | j                  ¬«      }|r&|j                  r| j                  }	n| j                  }	n| j                  }	|	| j                  |j                  «      |d   |dœz  |fS )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.
        rj   rµ   )r„   rµ   rÐ   )r¤   r¥   rA   rD   r¦   r§   r}   r¡   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrh   r„   )
rG   r*   r2   r7   r?  r�  rÐ   rV   r_  rS   s
             r   rF  z2BaseDatabaseSchemaEditor._alter_column_default_sqlÀ  sØ   € ð ×,Ñ,¨YÓ7ˆØ×*Ñ*¨9Ó5ˆØ�ˆáØ‰FØ�_‰_×%Ñ%×?Ò?ð ×*Ñ*¨;Ó7ˆGØˆFà!×/Ñ/¸4¿?¹?Ð/ÓKˆÙØ�~Š~Ø×;Ñ;‘à×6Ñ6‘à×/Ñ/ˆCààŸ/™/¨)×*:Ñ*:Ó;Ø% fÑ-Ø"ññð ð
ð 	
r   c                 ó  — g }| j                  |||j                  j                  «      x}rd|› �}nd}d}	| j                  j                  j
                  r‚|j                  sv|j                  |j                  k7  r6| j                  ||||j                  «      \  }
}|
r|j                  |
|f«       |j                  r| j                  |j                  «      }	| j                  | j                  |j                  «      |||	dœz  g f|fS )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.
        rl   rY   )r„   rµ   r˜   r0  )r�   r&   r‚   rA   rD   r×   r   rŸ   rÚ   r`   r    Úsql_alter_column_typerh   r„   )rG   r*   r2   r7   r`  r€  r�  r�  Úcollate_sqlÚcomment_sqlrS   rV   s               r   rt  z/BaseDatabaseSchemaEditor._alter_column_type_sqlæ  s  € ð ˆØ×+Ñ+Ø˜=¨%¯+©+×*>Ñ*>ó
ð 
ˆ;ð 
ð ˜k˜]Ð+‰KàˆKàˆØ�?‰?×#Ñ#×5Ò5¸i×>TÒ>TØ×#Ñ# y×';Ñ';Ò;ð #×<Ñ<Ø˜9 h°	×0DÑ0Dó‘��Vñ Ø!×(Ñ(¨#¨v¨Ô7Ø×#Ò#Ø"×/Ñ/°	×0DÑ0DÓE�ð ×*Ñ*à"Ÿo™o¨i×.>Ñ.>Ó?Ø$Ø!,Ø*ñ	ñð ð	ð ð
ð 	
r   c                 óÂ   — | j                   | j                  |j                  j                  «      | j                  |j                  «      | j                  |«      dœz  g fS )N)rv   r„   r0  )Úsql_alter_column_commentrh   r&   r‚   r„   r    )rG   r*   r7   r`  Únew_db_comments        r   rÚ   z2BaseDatabaseSchemaEditor._alter_column_comment_sql  sZ   € à×)Ñ)àŸ™¨¯©×)=Ñ)=Ó>ØŸ/™/¨)×*:Ñ*:Ó;Ø×,Ñ,¨^Ó<ññð ð
ð 	
r   c                 ó,   — | j                  |xs d«      S )NrY   )rc   )rG   r0  s     r   r    z%BaseDatabaseSchemaEditor._comment_sql  s   € Ø×Ñ ¢¨2Ó.Ð.r   c                 ó  — |j                   j                  j                  j                  |j                   j                  j                  j                  k7  rw| j	                  |j                   j                  |j                   j                  j                  j                  |j                   j                  j                  j                  «       | j                  |j                   j                  |j                   j                  j                  j                  |j                  «       «      |j                   j                  j                  j                  |j                  «       «      «       | j                  |j                   j                  |j                   j                  j                  j                  |j                  «       «      |j                   j                  j                  j                  |j                  «       «      «       y)z*Alter M2Ms to repoint their to= endpoints.N)	r:   rÝ   r&   r‚   r.  ra  ry   Úm2m_reverse_field_nameÚm2m_field_name)rG   r*   r2   r7   r\  s        r   rZ  z,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   rY   c                 óÈ  — t        |«      \  }}t        |g|¢­ddiŽ›|›�}| j                  j                  j	                  «       xs d}|›ddj                  |«      ›d|›�}t        |«      |k  r|S t        |«      |dz  kD  r|d|dz   }|t        |«      z
  dz  dz
  }|d| ›ddj                  |«      d| ›d|›�}|d	   dk(  s|d	   j                  «       rd
|dd z  }|S )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é   éÈ   rL  é   Né   r  r   zD%séÿÿÿÿ)r   r   rA   rg   Úmax_name_lengthr�   r  Úisdigit)	rG   Ú
table_nameÚcolumn_namesr
  rL  Úhash_suffix_partÚ
max_lengthr†  Úother_lengths	            r   r|  z+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                 óP  — |€zt        |«      dk(  r|d   j                  r|d   j                  }nMt        j                  rt        j                  }n,|j                  j                  r|j                  j                  }|�(d| j
                  j                  j                  |«      z   S y)Nr  r   rl   rY   )r  rŽ   r   ÚDEFAULT_INDEX_TABLESPACEr&   rA   rg   r�   )rG   r*   r‘   rŽ   s       r   Ú_get_index_tablespace_sqlz2BaseDatabaseSchemaEditor._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                 ó   — |rd|z   S y)Nz WHERE rY   rT   )rG   Ú	conditions     r   Ú_index_condition_sqlz-BaseDatabaseSchemaEditor._index_condition_sqln  s   € ÙØ˜yÑ(Ð(Ør   c                 ó´   — |r | j                   j                  j                  syt        dt	        |j
                  j                  || j                  «      ¬«      S )NrY   z INCLUDE (%(columns)s))r"  )rA   rD   Úsupports_covering_indexesr	   r   r&   r‚   rh   )rG   r*   r"  s      r   Ú_index_include_sqlz+BaseDatabaseSchemaEditor._index_include_sqls  sD   € Ù˜dŸo™o×6Ñ6×PÒPØÜØ$Ü˜EŸK™K×0Ñ0°'¸4¿?¹?ÓKô
ð 	
r   )r‘   r   r
  ÚusingrŽ   Úcol_suffixesrS   Ú	opclassesr½  ÚincludeÚexpressionsc                ó$  ‡ ‡— |xs g }|xs g }t        |d¬«      j                  ‰ j                  ¬«      }‰ j                  |||¬«      }|D �cg c]  }|j                  ‘Œ }}|xs ‰ j
                  }|j                  j                  }ˆˆ fd„}t        |t        |‰ j                  «      t        ||||«      ||r‰ j                  ||||	«      nt        |||‰ j                  «      |‰ j                  |
«      ‰ j!                  ||«      ¬«      S c c}w )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_colsrj   )rŽ   c                  óN   •— ‰€ ‰j                   | i |¤ŽŠ‰j                  ‰«      S r.   )r|  rh   )ÚargsÚkwargsr   rG   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_nameœ  s.   ø€ àˆ|Ø.�t×.Ñ.°Ð?¸Ñ?�Ø—?‘? 4Ó(Ð(r   )rv   r   rÂ  r"  rW   r½  rÅ  )r   Úget_compilerrA   r»  r„   Úsql_create_indexr&   r‚   r	   r
   rh   r   Ú_index_columnsr   rc   r¾  rÁ  )rG   r*   r‘   r   r
  rÂ  rŽ   rÃ  rS   rÄ  r½  rÅ  rÆ  Úcompilerr�   r   r"  rÏ  rv   rÍ  s   `  `                r   r  z*BaseDatabaseSchemaEditor._create_index_sql{  s  ù€ ð* ’˜2ˆØ!Ò' RˆÜ˜¨5Ô1×>Ñ>Ø—‘ð ?ó 
ˆð ×7Ñ7Ø�6¨ð 8ó 
ˆð .4Ö4 E�5—<“<Ð4ˆÐ4ØÒ7 $×"7Ñ"7ÐØ—‘×$Ñ$ˆõ	)ô ØÜ˜˜tŸ™Ó/Ü˜5 '¨6Ð3DÓEØñ ð ×#Ñ# E¨7°LÀ)ÔLä  ¨°X¸t×?OÑ?OÓPà Ø×/Ñ/°	Ó:Ø×+Ñ+¨E°7Ó;ô
ð 	
ùò 5s   ÁDc                 ó¨   — t        |xs | j                  t        |j                  j                  | j
                  «      | j                  |«      ¬«      S ©N)rv   r   )r	   r  r
   r&   r‚   rh   )rG   r*   r   rS   s       r   rp  z*BaseDatabaseSchemaEditor._delete_index_sql±  sA   € ÜØÒ(�4×(Ñ(Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ô
ð 	
r   c                 óÀ   — t        | j                  t        |j                  j                  | j
                  «      | j                  |«      | j                  |«      ¬«      S )N)rv   Úold_nameÚnew_name)r	   Úsql_rename_indexr
   r&   r‚   rh   )rG   r*   rÕ  rÖ  s       r   rõ   z*BaseDatabaseSchemaEditor._rename_index_sql¸  sH   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—_‘_ XÓ.Ø—_‘_ XÓ.ô	
ð 	
r   c                 ó4   — t        ||| j                  |¬«      S )N)rÃ  )r   rh   )rG   rv   r"  rÃ  rÄ  s        r   rÐ  z'BaseDatabaseSchemaEditor._index_columnsÀ  s   € Ü�u˜g t§¡À\ÔRÐRr   c                 ó²  — |j                   j                  r,|j                   j                  s|j                   j                  rg S g }|j                   j                  D ]#  }|j                  | j                  ||«      «       Œ% |j                   j                  D ]M  }|D �cg c]  }|j                   j                  |«      ‘Œ }}|j                  | j                  ||d¬«      «       ŒO |j                   j                  D ]P  }|j                  r!| j                  j                  j                  sŒ0|j                  |j!                  || «      «       ŒR |S c c}w )zŠ
        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€   rH  Úindex_togetherry   r`   r  r  rê   rA   rD   rë   rì   )rG   r*   Úoutputr   r�   r‘   rî   s          r   rÛ   z+BaseDatabaseSchemaEditor._model_indexes_sqlÃ  s!  € ð
 �{‰{×"Ò" e§k¡k×&7Ò&7¸5¿;¹;×;NÒ;NØˆIØˆØ—[‘[×-Ñ-ò 	AˆEØ�M‰M˜$×1Ñ1°%¸Ó?Õ@ð	Að !Ÿ;™;×5Ñ5ò 	WˆKØ@KÖL°u�e—k‘k×+Ñ+¨EÕ2ÐLˆFÐLØ�M‰M˜$×0Ñ0°¸vÈfÐ0ÓUÕVð	Wð —[‘[×(Ñ(ò 	=ˆEà×.Ò.Ø—?‘?×+Ñ+×GÓGà—‘˜e×.Ñ.¨u°dÓ;Õ<ð	=ð ˆùò Ms   Â "Ec                 ót   — g }| j                  ||«      r#|j                  | j                  ||g¬«      «       |S )zT
        Return a list of all index SQL statements for the specified field.
        rf  )Ú_field_should_be_indexedr`   r  )rG   r*   r   rÞ  s       r   rH  z+BaseDatabaseSchemaEditor._field_indexes_sqlÚ  s<   € ð ˆØ×(Ñ(¨°Ô6Ø�M‰M˜$×0Ñ0°À¸wÐ0ÓGÔHØˆr   c                 óÂ  — |xs
 t        «       }|j                  «       \  }}}}|j                  «       \  }}}	}
|j                  |j                  «      D ]  }|j	                  |d «       Œ |j                  |j                  «      D ]  }|
j	                  |d «       Œ | j                  |j                  «      | j                  |j                  «      k7  xs |||f||	|
fk7  S r.   )rj  ÚdeconstructÚunionÚnon_db_attrsÚpoprh   r„   )rG   r2   r7   rc  rL  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   rY  z1BaseDatabaseSchemaEditor._field_should_be_alteredã  sâ   € Ø’œ3›5ˆØ,5×,AÑ,AÓ,CÑ)ˆˆ8�X˜zØ,5×,AÑ,AÓ,CÑ)ˆˆ8�X˜zð —L‘L ×!7Ñ!7Ó8ò 	'ˆDØ�N‰N˜4 Õ&ð	'à—L‘L ×!7Ñ!7Ó8ò 	'ˆDØ�N‰N˜4 Õ&ð	'à�‰˜y×/Ñ/Ó0°D·O±OØ×Ñó5
ñ 
ò Rà˜ *Ð-°(¸HÀjÐ1QÑQð	Rr   c                 ó8   — |j                   xr |j                   S r.   )ro  r«   ©rG   r*   r   s      r   rà  z1BaseDatabaseSchemaEditor._field_should_be_indexedô  s   € Ø�~‰~Ò2 e§l¡lÐ"2Ð2r   c                 ó8   — |j                    xr |j                   S r.   ©r   ©rG   r2   r7   s      r   rl  z2BaseDatabaseSchemaEditor._field_became_primary_key÷  s   € Ø×(Ñ(Ð(ÒB¨Y×-BÑ-BÐBr   c                 ór   — |j                    xr) |j                  xr |j                   xs |j                   S r.   )r   r«   rñ  s      r   rz  z0BaseDatabaseSchemaEditor._unique_should_be_addedú  s?   € à×%Ñ%Ð%ò @Ø× Ñ ò@à×%Ñ%Ð%Ò>¨×)>Ñ)>ð	
r   c                 ó¬   — | j                   | j                  |«      | j                  |j                  «      | j                  |j                  «      |dœz  S )N)rv   Ú
old_columnÚ
new_columnrµ   )Úsql_rename_columnrh   r„   )rG   rv   r2   r7   r`  s        r   rr  z*BaseDatabaseSchemaEditor._rename_field_sql  sM   € Ø×%Ñ%Ø—_‘_ UÓ+ØŸ/™/¨)×*:Ñ*:Ó;ØŸ/™/¨)×*:Ñ*:Ó;Øñ	)
ñ 
ð 	
r   c           	      óŒ  — t        |j                  j                  | j                  «      }| j	                  |||«      }t        |j                  j                  |j                  g| j                  «      }t        |j                  j                  j                  j                  | j                  «      }t        |j                  j                  j                  j                  |j                  j                  g| j                  «      }| j                  j                  j                  «       }	t        | j                  ||||||	¬«      S )N)rv   r   r„   rm   rn   r=  )r
   r&   r‚   rh   rC  r   r„   Útarget_fieldr*   rA   rg   rD  r	   Úsql_create_fk)
rG   r*   r   r
  rv   r   r„   rm   rn   r=  s
             r   r‡   z'BaseDatabaseSchemaEditor._create_fk_sql	  sú   € Ü�e—k‘k×*Ñ*¨D¯O©OÓ<ˆØ×'Ñ'¨¨u°fÓ=ˆÜ˜Ÿ™×-Ñ-°·±¨~¸t¿¹ÓOˆÜ˜×+Ñ+×1Ñ1×7Ñ7×@Ñ@À$Ç/Á/ÓRˆÜØ×Ñ×$Ñ$×*Ñ*×3Ñ3Ø×Ñ×&Ñ&Ð'Ø�O‰Oó
ˆ	ð
 —_‘_×(Ñ(×7Ñ7Ó9ˆ
ÜØ×ÑØØØØØØ!ô
ð 	
r   c                 óþ   ‡ — ˆ fd„}t        |j                  j                  |j                  gt	        |j
                  j                  j                  j                  «      d   |j
                  j                  g||«      S )Nc                  óF   •— ‰j                   ‰j                  | i |¤Ž«      S r.   ©rh   r|  ©rË  rÌ  rG   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_name  s%   ø€ Ø—?‘?Ð#: 4×#:Ñ#:¸DÐ#KÀFÑ#KÓLÐLr   r  )r   r&   r‚   r„   r   rø  r*   )rG   r*   r   r
  rþ  s   `    r   rC  z,BaseDatabaseSchemaEditor._fk_constraint_name  sk   ø€ ô	Mô Ø�K‰K× Ñ Ø�\‰\ˆNÜ˜U×/Ñ/×5Ñ5×;Ñ;×DÑDÓEÀaÑHØ×Ñ×&Ñ&Ð'ØØó
ð 	
r   c                 ó<   — | j                  | j                  ||«      S r.   )r  Úsql_delete_fk©rG   r*   r   s      r   rR  z'BaseDatabaseSchemaEditor._delete_fk_sql+  ó   € Ø×*Ñ*¨4×+=Ñ+=¸uÀdÓKÐKr   c                 óZ   — |€y|t         j                  k(  ry|t         j                  k(  ryy )NrY   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   ÚDEFERREDÚ	IMMEDIATE)rG   r=  s     r   Ú_deferrable_constraint_sqlz3BaseDatabaseSchemaEditor._deferrable_constraint_sql.  s2   € ØÐØØœ×,Ñ,Ò,Ø3Øœ×-Ñ-Ò-Ø4ð .r   c	           	      ó¾  — |r!| j                   j                  j                  sy |s|s|s|r6| j                  |||||||¬«      }	|	r| j                  j                  |	«       y | j                  dj                  |D �
cg c]  }
| j                  |
j                  «      ‘Œ c}
«      | j                  |«      dœz  }| j                  | j                  |«      |dœz  S c c}
w )N)r   r½  rÅ  rÄ  rÆ  rs   )r"  r=  ©r   ru   )rA   rD   Ú&supports_deferrable_unique_constraintsrz   rJ   r`   Úsql_unique_constraintr�   rh   r„   r  Úsql_constraint)rG   r*   r‘   r   r½  r=  rÅ  rÄ  rÆ  rS   r   ru   s               r   Ú_unique_sqlz$BaseDatabaseSchemaEditor._unique_sql6  sä   € ñ Ø—O‘O×,Ñ,×SÒSàÙ™¡9±ð ×)Ñ)ØØØØ#ØØ#Ø'ð *ó ˆCñ Ø×!Ñ!×(Ñ(¨Ô-ØØ×/Ñ/Ø—y‘yÈVÖ!TÀE $§/¡/°%·,±,Õ"?Ò!TÓUØ×9Ñ9¸*ÓEñ3
ñ 
ˆ
ð ×"Ñ"Ø—O‘O DÓ)Ø$ñ&
ñ 
ð 	
ùò "Us   Á<"C
c	                 ód  — |r | j                   j                  j                  rf|r | j                   j                  j                  rD|r | j                   j                  j                  r"|r!| j                   j                  j
                  sy t        |d¬«      j                  | j                   ¬«      }	|j                  j                  }
|D �cg c]  }|j                  ‘Œ }}|€| j                  |
|d¬«      }n| j                  |«      }|s|s|s|r| j                  }n| j                  }|r| j                  |
|d|¬«      }nt!        |
||	| j"                  «      }t%        |t'        |
| j                  «      ||| j)                  |«      | j+                  |«      | j-                  ||«      ¬«      S c c}w )	NFrÈ  rj   Tr  rT   )rÃ  rÄ  )rv   r   r"  r½  r=  rÅ  )rA   rD   r	  Úsupports_partial_indexesrÀ  rë   r   rÎ  r&   r‚   r„   r  rh   Úsql_create_unique_indexÚsql_create_uniquerÐ  r   rc   r	   r
   r¾  r  rÁ  )rG   r*   r‘   r   r½  r=  rÅ  rÄ  rÆ  rÑ  rv   r   r"  rS   s                 r   rz   z+BaseDatabaseSchemaEditor._create_unique_sql^  s€  € ñ ØŸ™×0Ñ0×WÒWá $§/¡/×":Ñ":×"SÒ"SÙ §¡× 8Ñ 8× RÒ Rá D§O¡O×$<Ñ$<×$XÒ$Xð ä˜¨5Ô1×>Ñ>Ø—‘ð ?ó 
ˆð —‘×$Ñ$ˆØ-3Ö4 E�5—<“<Ð4ˆÐ4Øˆ<Ø×/Ñ/°°wÀdÐ/ÓK‰Dà—?‘? 4Ó(ˆDÙ™¡9±Ø×.Ñ.‰Cà×(Ñ(ˆCÙØ×)Ñ)Ø�w¨R¸9ð *ó ‰Gô " %¨°hÀ×@PÑ@PÓQˆGÜØÜ˜˜tŸ™Ó/ØØØ×/Ñ/°	Ó:Ø×6Ñ6°zÓBØ×+Ñ+¨E°7Ó;ô
ð 	
ùò 5s   ÃF-c                 óH   ‡ — |rˆ fd„}n‰ j                   }t        ||d|«      S )Nc                  óF   •— ‰j                   ‰j                  | i |¤Ž«      S r.   rü  rý  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_name–  s%   ø€ Ø—‘Ð'> t×'>Ñ'>ÀÐ'OÈÑ'OÓPÐPr   Ú_uniq)r|  r   )rG   rv   r"  r  r  s   `    r   r  z0BaseDatabaseSchemaEditor._unique_constraint_name“  s,   ø€ ÙõQð "&×!8Ñ!8Ðä˜ ¨Ð2DÓEÐEr   c                 ó|  — |r | j                   j                  j                  rf|r | j                   j                  j                  rD|r | j                   j                  j                  r"|r!| j                   j                  j
                  sy |s|s|s|r| j                  }n| j                  }| j                  |||«      S r.   )	rA   rD   r	  r  rÀ  rë   r  r  r  )	rG   r*   r   r½  r=  rÅ  rÄ  rÆ  rS   s	            r   rm  z+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   — | j                   | j                  |«      | j                  d|iz  dœz  S )Nrk   r  )r  rh   r~   )rG   r   rk   s      r   Ú
_check_sqlz#BaseDatabaseSchemaEditor._check_sqlº  s9   € Ø×"Ñ"Ø—O‘O DÓ)Ø×3Ñ3°wÀÐ6FÑFñ&
ñ 
ð 	
r   c                 ó¢   — t        | j                  t        |j                  j                  | j
                  «      | j                  |«      |¬«      S )N)rv   r   rk   )r	   Úsql_create_checkr
   r&   r‚   rh   )rG   r*   r   rk   s       r   r}  z*BaseDatabaseSchemaEditor._create_check_sqlÀ  s?   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&Øô	
ð 	
r   c                 ó~   — | j                   j                  j                  sy | j                  | j                  ||«      S r.   )rA   rD   Ú supports_table_check_constraintsr  Úsql_delete_checkr  s      r   rq  z*BaseDatabaseSchemaEditor._delete_check_sqlÈ  s3   € Ø�‰×'Ñ'×HÒHØØ×*Ñ*¨4×+@Ñ+@À%ÈÓNÐNr   c                 óŒ   — t        |t        |j                  j                  | j                  «      | j	                  |«      ¬«      S rÓ  )r	   r
   r&   r‚   rh   )rG   Útemplater*   r   s       r   r  z/BaseDatabaseSchemaEditor._delete_constraint_sqlÍ  s6   € ÜØÜ˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ô
ð 	
r   c
           
      ó$  — |�£|D �
cg c]˜  }
| j                   j                  j                  rQ| j                   j                  j	                  t        |
| j                   j                  j                  «       «      «      n$| j                   j                  j	                  |
«      ‘Œš }}
| j                   j                  «       5 }| j                   j                  j                  ||j                  j                  «      }ddd«       g }j                  «       D ]g  \  }
}|�	||d   k(  sŒ|�	|d   |k7  rŒ|�	|d   |k7  rŒ'|�	|d   |k7  rŒ2|�	|d   |k7  rŒ=|�|d   sŒE|�	|d   |k7  rŒP|	r|
|	vsŒW|j                  |
«       Œi |S c c}
w # 1 sw Y   ŒŒxY w)	z@Return all constraint names matching the columns and conditions.Nr"  r«   r   rî   rk   rQ  rµ   )rA   rD   Útruncates_namesÚintrospectionÚidentifier_converterr   rg   r²  rd   Úget_constraintsr&   r‚   Úitemsr`   )rG   r*   rµ  r«   r   rî   rQ  rk   re  r  r   rd   rŠ   ÚresultÚinfodicts                  r   r  z*BaseDatabaseSchemaEditor._constraint_namesÔ  s´  € ð Ð#ð )öð ð —?‘?×+Ñ+×;Ò;ð —‘×-Ñ-×BÑBÜ! $¨¯©×(;Ñ(;×(KÑ(KÓ(MÓNôð —_‘_×2Ñ2×GÑGÈÓMñ	NðˆLð ð �_‰_×#Ñ#Ó%ð 	¨ØŸ/™/×7Ñ7×GÑGØ˜Ÿ™×,Ñ,óˆK÷	ð ˆØ)×/Ñ/Ó1ò 	(‰NˆD�(ØÐ# |°xÀ	Ñ7JÓ'JØÐ%¨(°8Ñ*<ÀÒ*FØØÐ*¨x¸Ñ/FÈ+Ò/UØØÐ$¨°'Ñ):¸eÒ)CØØÐ$¨°'Ñ):¸eÒ)CØØÐ*°8¸MÒ3JØØÐ$¨°&Ñ)9¸UÒ)BØÙ $¨gÒ"5Ø—M‘M $Õ'ð	(ð  ˆùò;÷	ð 	ús   ‡BFÃ ;FÆFc                 óö   — | j                  |d¬«      }|r<t        |«      dk7  r.t        dt        |«      ›d|j                  j                  ›�«      ‚|D ]#  }| j                  | j                  ||«      «       Œ% y )NTrð  r  r  z) of PK constraints for )r  r  r  r&   r‚   rN   Ú_delete_primary_key_sql)rG   r*   r\  r#  r  s        r   ry  z,BaseDatabaseSchemaEditor._delete_primary_key  s~   € Ø×1Ñ1°%ÀTÐ1ÓJÐÙ”cÐ*Ó+¨qÒ0Ýô Ð(Õ)Ø—K‘K×(Ò(ðóð ð  0ò 	OˆOØ�L‰L˜×5Ñ5°e¸_ÓMÕNñ	Or   c                 ól  — t        | j                  t        |j                  j                  | j
                  «      | j                  | j                  |j                  j                  |j                  gd¬«      «      t        |j                  j                  |j                  g| j
                  «      ¬«      S )NÚ_pkri  )rv   r   r"  )	r	   Úsql_create_pkr
   r&   r‚   rh   r|  r„   r   rî  s      r   r{  z0BaseDatabaseSchemaEditor._create_primary_key_sql  sˆ   € ÜØ×ÑÜ˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘Ø×'Ñ'Ø—K‘K×(Ñ(¨5¯<©<¨.Àð (ó óô
 ˜EŸK™K×0Ñ0°5·<±<°.À$Ç/Á/ÓRô	
ð 		
r   c                 ó<   — | j                  | j                  ||«      S r.   )r  Úsql_delete_pkr  s      r   r(  z0BaseDatabaseSchemaEditor._delete_primary_key_sql  r  r   c                 ó2   — |rd| j                  |«      z   S dS )NzCOLLATE rY   )rh   )rG   r˜   r€  r´  s       r   r�   z%BaseDatabaseSchemaEditor._collate_sql  s   € Ù:Cˆz˜DŸO™O¨IÓ6Ñ6ÐKÈÐKr   c                 ó†   — | j                   | j                  |«      dj                  |«      dœz  }| j                  |«       y )Nú,)Ú	procedureÚparam_types)Úsql_delete_procedurerh   r�   rN   )rG   Úprocedure_namer2  rS   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedure   s=   € Ø×'Ñ'ØŸ™¨Ó8ØŸ8™8 KÓ0ñ+
ñ 
ˆð 	�‰�SÕr   )FT)rT   )F)rY   r.   )NNNNN)NNNNNN)T)NNNNNNNNr¶   )pÚ__name__Ú
__module__Ú__qualname__Ú__doc__rŒ   r*  r7  rã   rE  rG  r¡  rš  r›  rŸ  rž  r�  rS  rö  rx  r
  r~   Úsql_delete_constraintr  r  r  r  r  rù  r…   rB  r   rÏ  r  r×  r  r+  r-  r3  r1  r¥  rH   rL   rO   rN   rh   r–   r³   r|   r¢   r£   r§   r¥   ÚstaticmethodrÒ   r¤   rc   rß   râ   rï   rò   rø   rû   rý   r  r  r   r.  rÙ   r:  rN  rW  ra  r[  ru  rF  rt  rÚ   r    rZ  r|  r»  r¾  rÁ  r  rp  rõ   rÐ  rÛ   rH  rY  rà  rl  rz  rr  r‡   rC  rR  r  r  rz   r  rm  r  r}  rq  r  r  ry  r{  r(  r�   r5  rT   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   Ú	getLoggerr\   r   r+   r9   r?   rT   r   r   ú<module>rE     s^   ðÛ Û Ý å  ÷÷ ÷ SÑ Rß .Ý &ß DÝ !à	ˆ×	Ñ	Ð6Ó	7€ò1ò 
ò
÷.Zò Zr   