Ë
    ùi¯eÒ7 ã                   óæ   — 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mZ d dlmZ d dlmZmZ d d	lmZ  e j6                  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)ÚNOT_PROVIDEDÚ
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      úGE:\TRUCKING_PROJECT\Lib\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r0   r1   )r2   r3   Ú	new_fields     €r   r5   z+_related_non_m2m_objects.<locals>.<genexpr>=   r6   r7   )Úzipr-   r,   Ú_related_non_m2m_objectsÚremote_field)r4   r9   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r;   r;   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'dpd „Z(d!„ Z)d"„ Z*dqd$„Z+d%„ Z,d&„ Z-d'„ Z.drd(„Z/d)„ Z0d*„ Z1d+„ Z2d,„ Z3d-„ Z4d.„ Z5e6d/„ «       Z7d0„ Z8d1„ Z9d2„ Z:d3„ Z;d4„ Z<d5„ Z=d6„ Z>d7„ Z?d8„ Z@d9„ ZAd:„ ZBd;„ ZCd<„ ZDd=„ ZEd>„ ZFd?„ ZGd@„ ZHdrdA„ZIdB„ ZJ	 drdC„ZKdD„ ZLdrdE„ZM	 drdF„ZNdG„ ZOdH„ ZPdI„ ZQdJ„ ZRdsdL„ZSdtdM„ZTdN„ ZUdO„ ZVdddKdKdd#dd#ddddPœdQ„ZWdtdR„ZXdS„ ZYdT„ ZZdU„ Z[dV„ Z\dtdW„Z]dX„ Z^dY„ Z_dZ„ Z`d[„ Zad\„ Zbd]„ Zcd^„ Zdd_„ Zed`„ Zf	 	 	 	 	 duda„Zg	 	 	 	 	 	 dvdb„Zh	 	 	 	 	 	 	 dwdc„Zidxdd„Zj	 	 	 	 	 	 dvde„Zkdf„ Zldg„ Zmdh„ Zndi„ Zo	 	 	 	 	 	 	 	 dydj„Zpdrdk„Zqdl„ Zrdm„ Zsdzdn„Ztdqdo„Zuy){Ú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)zbALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE%(nulls_distinct)s (%(columns)s)%(deferrable)sz|ALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s (%(to_column)s)%(deferrable)sNzQCREATE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(extra)s%(condition)szaCREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)%(include)s%(condition)s%(nulls_distinct)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 r0   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrC   rD   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 r0   )Údeferred_sqlrH   r   rC   ÚaliasÚ	__enter__)rI   s    r   rN   z"BaseDatabaseSchemaEditor.__enter__œ   s>   € ØˆÔØ× Ò Ü  §¡×!6Ñ!6Ó7ˆDŒKØ�K‰K×!Ñ!Ô#Øˆr   c                 ó    — |€"| j                   D ]  }| j                  |«       Œ | j                  r| j                  j	                  |||«       y y r0   )rL   ÚexecuterH   r   Ú__exit__)rI   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rQ   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))ÚparamsrU   )Úextraú;Ú N)rD   rC   Úin_atomic_blockrF   rG   r   ÚstrÚloggerÚdebugÚrstripÚendswithrE   ÚappendÚtupleÚmapÚquote_valueÚcursorrP   )rI   rU   rX   Úendingrf   s        r   rP   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 r0   )rC   ÚopsÚ
quote_name)rI   r   s     r   rj   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.©rC   Ú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r0   )r]   )r2   Ú
constraints     r   r5   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s   è ø€ ò $àÙô �J—ñ$ùs   ‚)ÚtableÚ
definition)!r'   Úunique_togetherÚ	get_fieldrL   rb   Ú_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_fkrj   rF   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typeri   Úautoinc_sqlÚconstraintsÚconstraint_sqlÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rI   r,   Úfield_namesr   ÚfieldsÚcolumn_sqlsrX   ry   Úextra_paramsÚ	db_paramsÚcol_type_suffixro   rp   r‹   rw   rŒ   rU   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              #   ó  K  — |–— |j                  d«      x}r| j                  |«      –— | j                  j                  j                  r)|j
                  r| j                  |j
                  «      –— |j                  }|j                  t        ur.| j                  |«      \  }	}
d|	› �–— |j                  |
«       d}|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}|j,                  r| j/                  |«      –— n+|sd–— n$| j                  j                  j0                  sd–— |j(                  rd–— n|j2                  rd–— |j4                  xs |j6                  j4                  }|rX| j                  j                  j8                  r7|j2                  r*| j                  j:                  j=                  |d¬	«      –— y y y y ­w)
NÚ	collationzDEFAULT FTzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlrC   rF   Úsupports_comments_inlineÚ
db_commentÚ_comment_sqlÚnullÚ
db_defaultr   Údb_default_sqlr‚   Úskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlÚrequires_literal_defaultsÚprepare_defaultrb   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚ	generatedÚ_column_generated_sqlÚimplied_column_nullÚuniquer�   r'   Úsupports_tablespacesri   r‘   )rI   Úcolumn_db_typerX   r,   r   Úfield_db_paramsÚinclude_defaultrš   r£   Údefault_sqlÚdefault_paramsÚdefault_valueÚcolumn_defaultÚ
tablespaces                 r   Ú_iter_column_sqlz)BaseDatabaseSchemaEditor._iter_column_sql!  sA  è ø€ ð ÒØ'×+Ñ+¨KÓ8Ð8ˆ9Ð8Ø×#Ñ# IÓ.Ò.Ø�?‰?×#Ñ#×<Ò<À×AQÒAQØ×#Ñ# E×$4Ñ$4Ó5Ò5à�z‰zˆà×Ñ¤<Ñ/Ø*.×*=Ñ*=¸eÓ*DÑ'ˆK˜Ø˜[˜MÐ*Ò*Ø�M‰M˜.Ô)Ø#ˆOð ò =Ø×%Ñ% 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Ø�?Š?Ø×,Ñ,¨UÓ3Ó3ÙØÓØ—‘×)Ñ)×=Ò=ØŠLØ×ÒØÓØ�\Š\ØŠNà×(Ñ(ÒE¨E¯K©K×,EÑ,Eˆ
áØ—‘×(Ñ(×=Ò=Ø—’à—/‘/×%Ñ%×4Ñ4°ZÈÐ4ÓMÓMð ð >ð ùs   ‚JJ
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.
        rl   Útype©NNrn   )r   rC   r�   r»   )rI   r,   r   rµ   r´   r³   rX   s          r   r~   z#BaseDatabaseSchemaEditor.column_sqlb  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).
        FrV   ©rI   r   s     r   r¦   z%BaseDatabaseSchemaEditor.skip_default}  ó   € ð
 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.
        FrV   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©rI   Ú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.
        ú%srV   rÀ   s     r   r©   z,BaseDatabaseSchemaEditor._column_default_sql”  s   € ð
 r   c                 ód  ‡ — ddl m} t        |j                  |«      rdnd}t	        |j
                  ¬«      }|j                  ‰ j                  ¬«      }|j                  |j                  «      \  }}‰ j                  j                  j                  r|t        ˆ fd„|D «       «      z  }g }||z  |fS )z;Return the sql and params for the field's database default.r   )ÚValuerÉ   z(%s)r+   rl   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr0   )r«   ©r2   ÚprI   s     €r   r5   z:BaseDatabaseSchemaEditor.db_default_sql.<locals>.<genexpr>§  s   øè ø€ Ò I¸Q ×!5Ñ!5°a×!8Ñ Iùó   ƒ)Údjango.db.models.expressionsrË   Ú
isinstancer¤   r   r,   Úget_compilerrC   ÚcompilerF   rª   rc   )rI   r   rË   rU   ÚqueryÚcompilerr¶   rX   s   `       r   r¥   z'BaseDatabaseSchemaEditor.db_default_sql›  s›   ø€ å6ä  ×!1Ñ!1°5Ô9‰d¸vˆÜ˜EŸK™KÔ(ˆØ×%Ñ%°·±Ð%ÓAˆØ&×.Ñ.¨u×/?Ñ/?Ó@Ñˆ�VØ�?‰?×#Ñ#×=Ò=ð œ5Ó IÀ&Ô IÓIÑIˆKØˆFØ�[Ñ  &Ð(Ð(r   c                 ó¢   ‡ — |j                  ‰ j                  «      \  }}|j                  rdnd}|r|t        ˆ fd„|D «       «      z  }d|› d|› �S )z3Return the SQL to use in a GENERATED ALWAYS clause.ÚSTOREDÚVIRTUALc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr0   ©re   rÍ   s     €r   r5   zABaseDatabaseSchemaEditor._column_generated_sql.<locals>.<genexpr>°  s   øè ø€ Ò3XÈA°D×4DÑ4DÀQ×4GÑ3XùrÏ   zGENERATED ALWAYS AS (z) )Úgenerated_sqlrC   Ú
db_persistrc   )rI   r   Úexpression_sqlrX   Úpersistency_sqls   `    r   r¯   z.BaseDatabaseSchemaEditor._column_generated_sql«  sY   ø€ à!&×!4Ñ!4°T·_±_Ó!EÑˆ˜Ø&+×&6Ò&6™(¸IˆÙØ+¬eÓ3XÐQWÔ3XÓ.XÑXˆNØ& ~Ð&6°b¸Ð8IÐJÐJr   c                 óú  — | j                  «       r| j                  «       }|S | j                  rd }|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   r[   Úauto_nowFÚauto_now_addÚDateTimeFieldÚ	DateFieldÚ	TimeField)Úhas_defaultÚget_defaultr®   r£   Úblankr¬   rŠ   Úgetattrr   Únowr   ÚdateÚtime)r   ÚdefaultÚinternal_types      r   Ú_effective_defaultz+BaseDatabaseSchemaEditor._effective_default³  s  € ð ×ÑÔØ×'Ñ'Ó)ˆGð( ˆð' �_Š_Øˆ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ï   rC   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   re   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`.
        Nrl   r½   )r˜   rP   rC   rF   Úsupports_commentsr'   Údb_table_commentÚalter_db_table_commentr    r}   r¡   r   Ú_alter_column_comment_sqlrL   r‚   Ú_model_indexes_sqlÚlocal_many_to_manyr<   ÚthroughÚauto_createdÚcreate_model)rI   r,   rU   rX   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.rx   N)r'   rù   r<   rú   rû   Údelete_modelrP   Úsql_delete_tablerj   r„   ÚlistrL   rÑ   r	   Úreferences_tableÚremove)rI   r,   r   rU   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©rX   )Úcontains_expressionsrC   rF   Úsupports_expression_indexesrP   Ú
create_sql©rI   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  rC   rF   r  rP   Ú
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  )rC   rF   Úcan_rename_indexrP   Ú_rename_index_sqlr   r  r  )rI   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  rP   ©rI   r,   rw   rU   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraint4  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  rP   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)rc   Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquer'   r{   rP   r|   )	rI   r,   Úold_unique_togetherÚnew_unique_togetherr“   ÚoldsÚnewsr’   r   s	            r   Úalter_unique_togetherz.BaseDatabaseSchemaEditor.alter_unique_togetherB  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)rc   r  r  Úsql_delete_indexr'   r{   rP   Ú_create_index_sql)	rI   r,   Úold_index_togetherÚnew_index_togetherr“   r   r!  r’   r   s	            r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_togetherW  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 ú(ru   ú)r   )r'   rŒ   r   Úindexesr{   r†   Ú_constraint_namesrž   rC   rF   Ú*allows_multiple_constraints_on_same_fieldsr]   Ú_unique_constraint_namer„   ÚlenÚ
ValueErrorr�   rP   Ú_delete_constraint_sql)rI   r,   r“   Úconstraint_kwargsrU   rw   Úmeta_constraint_namesÚmeta_index_namesr   ÚcolumnsÚconstraint_namesÚdefault_names               r   r  z/BaseDatabaseSchemaEditor._delete_composed_indexl  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)rC   rF   Úignores_table_name_caseÚlowerrP   Úsql_rename_tablerj   rL   rÑ   r	   Úrename_table_references)rI   r,   Úold_db_tableÚnew_db_tablerU   s        r   Úalter_db_tablez'BaseDatabaseSchemaEditor.alter_db_tableŽ  s¤   € à˜<Ò'Ø�O‰O×$Ñ$×<Ò<Ø×"Ñ"Ó$¨×(:Ñ(:Ó(<Ò<àØ�‰Ø×!Ñ!à!Ÿ_™_¨\Ó:Ø!Ÿ_™_¨\Ó:ññô	
ð ×$Ñ$ò 	HˆCÜ˜#œyÕ)Ø×+Ñ+¨L¸,ÕGñ	Hr   c                 ó  — | j                   ry| j                  j                  j                  rX| j	                  | j                   | j                  |j                  j                  «      | j                  |xs d«      dœz  «       y y y )Nr[   )rx   Úcomment)	Úsql_alter_table_commentrC   rF   rô   rP   rj   r'   r„   re   )rI   r,   Úold_db_table_commentÚnew_db_table_comments       r   rö   z/BaseDatabaseSchemaEditor.alter_db_table_comment¡  so   € Ø×'Ò'¨D¯O©O×,DÑ,D×,VÒ,VØ�L‰LØ×,Ñ,à!Ÿ_™_¨U¯[©[×-AÑ-AÓBØ#×/Ñ/Ð0DÒ0JÈÓKññõð -WÐ'r   c                 óÊ   — | j                  | j                  | j                  |j                  j                  «      | j                  |«      | j                  |«      dœz  «       y)z)Move a model's table between tablespaces.)rx   Úold_tablespaceÚnew_tablespaceN)rP   Úsql_retablespace_tablerj   r'   r„   )rI   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<                  t>        u r�| jA                  |«      sp| jC                  |«      �_| jE                  |d|d¬«      \  }}| jF                  | j-                  |j                  j                   «      |dœz  }| j;                  ||«       |jH                  rp| j                  j                  jJ                  rP| j                  j                  jL                  s0|d   } | j:                  | jO                  ||||jH                  «      Ž  | j2                  jQ                  | jS                  ||«      «       | j                  j                  jT                  r| j                  jW                  «        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µ   Nrl   rn   rm   rq   z%s.r[   )r   Ú	namespacer†   ro   rp   Ú
deferrable)rx   r†   ry   ©Údrop©rx   Ú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_namerj   ri   Údeferrable_sqlrL   rb   r‰   Úsql_create_columnrP   r¤   r   r§   r¨   Ú_alter_column_default_sqlÚsql_alter_columnr¡   rô   r    r÷   r‚   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rI   r,   r   ry   rX   r—   r–   Úconstraint_suffixro   rp   rX  Ú_rU   Ú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˜&Ô!ð ×Ñ¤Ñ,Ø×.Ñ.¨uÔ5Ø×&Ñ& 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.
        rl   r½   NT©Úforeign_key)rx   r†   )r   r<   rú   r'   rû   rÿ   r   rC   r5  r†   rP   Ú_delete_fk_sqlÚsql_delete_columnrj   r„   rF   re  rf  r  rL   rÑ   r	   Úreferences_columnr  )rI   r,   r   Úfk_namesÚfk_namerU   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                  |j                  k7  s\|j                  r_|j                  |j                  k7  s7|j                  | j                  «      |j                  | j                  «      k7  rt	        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.
        Nrl   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)z7Modifying GeneratedFields is not supported - the field z6 must be removed and re-added with the new definition.)Ú_field_should_be_alteredr   rC   r<   r9  rú   r'   rû   Ú_alter_many_to_manyr®   rÜ   rÛ   Ú_alter_field)	rI   r,   r4   r9   Ú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óð ð
 × Ñ  I×$7Ñ$7Ò7Ø×Òà×$Ñ$¨	×(<Ñ(<Ò<Ø×*Ñ*¨4¯?©?Ó;Ø×*Ñ*¨4¯?©?Ó;ò<ô ØIÈ)Èð UHð Hóð ð
 	×ÑØØØØØØØØõ		
r   c                 óº   — | j                   j                  }|j                  | j                   «      }d|d<   	 ||j                  «          |z  S # t        $ r Y y w xY w)NÚ__column_name__r†   )rC   Údata_type_check_constraintsÚdb_type_parametersrŠ   ÚKeyError)rI   r   r´   Úcheck_constraintsÚdatas        r   Ú_field_db_checkz(BaseDatabaseSchemaEditor._field_db_checkx  sa   € ð !ŸO™O×GÑGÐØ×'Ñ'¨¯©Ó8ˆØ*ˆˆX‰ð	Ø$ U×%<Ñ%<Ó%>Ñ?À$ÑFÐFøÜò 	Ùð	ús   ¸A Á	AÁA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=                  ||«      «       Œ% | j?                  ||«      }| j?                  ||«      }||k7  rÂ|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                  | jA                  ||«      «       Œ% |j                  |j                  k7  r”| j                  | jC                  |j                  j                  |||«      «       | jD                  D ]N  }tG        |tH        «      sŒ|jK                  |j                  j                  |j                  |j                  «       ŒP g }g }g }|jM                  | j                  ¬«      } |jM                  | j                  ¬«      }!||k7  sC| |!k7  s>||k7  s9| j                  j                  jN                  rT|jP                  |jP                  k7  r;| jS                  ||||||«      \  }"}#|jU                  |"«       |jW                  |#«       |jX                  tZ        urN|jX                  tZ        u s|jX                  |jX                  k7  rY|jU                  | j]                  |||«      «       n6|jX                  tZ        ur$|jU                  | j]                  |||d¬«      «       d	}$|j^                  r||j^                  sp|jX                  tZ        u r^| ja                  |«      }%| ja                  |«      }&| jc                  |«      s+|%|&k7  r&|&�$d}$|jU                  | je                  |||«      «       |j^                  |j^                  k7  r&| jg                  |||«      }"|"r|jU                  |"«       |ji                  «       xs |jX                  tZ        uxr |j^                  xr |j^                   }'|s|�r†|'s||z  }| j                  j                  jj                  r4|r2tm        to        |Ž «      \  }}(djq                  |«      ts        |(g «      fg}|D ]J  \  }}(| j                  | jt                  | jw                  |j                  j                  «      |dœz  |(«       ŒL |'rÚ|jX                  tZ        u rd})&g}(n| jy                  |«      \  })}(| j                  | jz                  | jw                  |j                  j                  «      | jw                  |j                  «      |)dœz  |(«       |D ]J  \  }}(| j                  | jt                  | jw                  |j                  j                  «      |dœz  |(«       ŒL |r|D ]  \  }}(| j                  ||(«       Œ |j,                  r|j,                  s| j}                  ||«       | j                  ||«      r"| j                  | j�                  ||g«      «       |j4                  r|j                   r;|j4                  r/|j                   s#| j                  | jƒ                  ||g¬«      «       g }*|r|*jW                  t/        ||«      «       | j#                  ||«      r<| j                  | j…                  ||«      «       |*jW                  t/        ||«      «       |*D �]!  \  }+}|j2                  j‡                  | j                  ¬«      },|,d   }-|,j+                  d«      }.|+j2                  j‡                  | j                  ¬«      }/|/j+                  d«      }0| jS                  |j0                  |+j2                  |j2                  |-|0|.«      \  }"}#| j                  | jt                  | jw                  |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  \  }1}2|2j2                  j
                  sŒ| j                  | j‰                  |2j0                  |2j2                  d«      «       ŒT ||k7  rZ|rX| j‹                  |j                  j                  |j                  gd¬«      }| j                  | j�                  |||d   «      «       |$r_| je                  |||d¬«      \  }3}(| jt                  | jw                  |j                  j                  «      |3dœ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¡   )ÚignoreTrl  r0  r1  z!) of foreign key constraints for ú.F)r±   r   r-  z) of unique constraints for rš   )r
  Útype_r-  )rm   r-  z) of check constraints for rl   rZ  Nru   r\  rÉ   )rx   r†   rí   ©r“   r½   r   rq   Ú_fkÚ_check©r&  rm   )IÚsetrC   rF   rˆ   r<   rƒ   ru  r5  r†   r8  r9  r'   r„   ÚaddrP   rn  r±   Ú_field_became_primary_keyrŒ   r   Ú_delete_unique_sqlrž   r   r;   Úrelated_modelr   Údb_indexr4  r   r&  Ú_delete_index_sqlr…  Ú_delete_check_sqlÚ_rename_field_sqlrL   rÑ   r	   Úrename_column_referencesr�   rô   r¡   Ú_alter_column_type_sqlrb   r‚   r¤   r   Ú"_alter_column_database_default_sqlr£   r¨   r§   rb  Ú_alter_column_null_sqlræ   Úsupports_combined_altersrc   r:   r�   Úsumrc  rj   r¥   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr|   r(  Ú_create_primary_key_sqlr   r‰   Ú_create_index_nameÚ_create_check_sqlre  rf  )4rI   r,   r4   r9   rz  r|  ry  r{  rx  Úfks_droppedrq  rr  rw   r<  r?  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr?   Úrel_fk_namesr
  r=  Úindex_namesÚ
index_nameÚold_db_checkÚnew_db_checkrU   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrX   r¶   Úrels_to_updater>   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationrh  Úrelri  s4                                                       r   rw  z%BaseDatabaseSchemaEditor._alter_fieldƒ  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ð ×+Ñ+¨I°}ÓEˆØ×+Ñ+¨I°}ÓEˆØ˜<Ò'©Là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Ô$Ø×Ñ Ô.à×Ñ¤|Ñ3à×$Ñ$¬Ñ4Ø×'Ñ'¨9×+?Ñ+?Ò?à—‘Ø×;Ñ;¸EÀ9ÈiÓXõð ×!Ñ!¬Ñ5Ø�N‰NØ×7Ñ7Ø˜9 i°dð 8ó ôð "'Ðà�NŠNØ—N’NØ×$Ñ$¬Ñ4à×0Ñ0°Ó;ˆKØ×0Ñ0°Ó;ˆKà×.Ñ.¨yÔ9Ø ;Ò.ØÐ+à)-Ð&Ø—‘Ø×2Ñ2°5¸)ÀYÓOôð �>‰>˜YŸ^™^Ò+Ø×2Ñ2°5¸)ÀYÓOˆHÙØ×#Ñ# HÔ-ð ×!Ñ!Ó#ÒO y×';Ñ';Ä<Ð'Oò'6à�~‰~Ò4 i§n¡nÐ"4ð 	$ñ ’lÙ.ð ˜<Ñ'�à�‰×'Ñ'×@Ò@ÁWÜ#¤C¨ MÓ2‘��VØ ŸI™I c›N¬C°¸«OÐ<Ð=�à&ò ‘��VØ—‘Ø×)Ñ)à!%§¡°·±×1EÑ1EÓ!FØ#&ññð
 õðñ +Ø×'Ñ'¬<Ñ7Ø"&�KØ)˜]‘Fà*.×*=Ñ*=¸iÓ*HÑ'�K à—‘Ø×0Ñ0à!%§¡°·±×1EÑ1EÓ!FØ"&§/¡/°)×2BÑ2BÓ"CØ#.ññð ôð $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õðð ˜<Ò'©LØ"×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ùòK
%ùòt  Mùò&%s   ÅuÌ<uÏ+u"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.
        Nrl   r½   )r†   r½   )
rC   rF   r­   r¬   r   r£   Úsql_alter_column_nullÚsql_alter_column_not_nullrj   r†   )rI   r,   r4   r9   r{  rU   s         r   rš  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.
        rl   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_defaultrj   r†   )
rI   r,   r4   r9   r[  r·  rí   rX   r{  rU   s
             r   rb  z2BaseDatabaseSchemaEditor._alter_column_default_sql  sØ   € ð ×,Ñ,¨YÓ7ˆØ×*Ñ*¨9Ó5ˆØ�ˆáØ‰FØ�_‰_×%Ñ%×?Ò?ð ×*Ñ*¨;Ó7ˆGØˆFà!×/Ñ/¸4¿?¹?Ð/ÓKˆÙØ�~Š~Ø×;Ñ;‘à×6Ñ6‘à×/Ñ/ˆCààŸ/™/¨)×*:Ñ*:Ó;Ø% fÑ-Ø"ññð ð
ð 	
r   c                 óî   — |r| j                   }d}g }n | j                  }| j                  |«      \  }}|j                  | j                  ¬«      }|| j                  |j                  «      |d   |dœz  |fS )zÊ
        Hook to specialize column database default alteration.

        Return a (sql, params) fragment to add or drop (depending on the drop
        argument) a default to new_field's column.
        r[   rl   r½   rÄ  )rÆ  rÇ  r¥   r   rC   rj   r†   )	rI   r,   r4   r9   r[  rU   r¶   rX   r{  s	            r   r™  z;BaseDatabaseSchemaEditor._alter_column_database_default_sql:  sŒ   € ñ Ø×2Ñ2ˆCØˆKØ‰Fà×/Ñ/ˆCØ"&×"5Ñ"5°iÓ"@ÑˆK˜à!×/Ñ/¸4¿?¹?Ð/ÓKˆààŸ/™/¨)×*:Ñ*:Ó;Ø% 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 2-tuple of: an SQL fragment of (sql, params) to insert into
        an ALTER TABLE statement and a list of extra (sql, params) tuples to
        run once the field is altered.
        rn   r[   )r†   r½   rš   rL  )rŸ   r'   r„   rC   rF   rô   r   r¡   r÷   rb   r¢   Úsql_alter_column_typerj   r†   )rI   r,   r4   r9   r|  r¥  r¦  r´  Úcollate_sqlÚcomment_sqlrU   rX   s               r   r˜  z/BaseDatabaseSchemaEditor._alter_column_type_sqlV  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)rx   r†   rL  )Úsql_alter_column_commentrj   r'   r„   r†   r¢   )rI   r,   r9   r|  Únew_db_comments        r   r÷   z2BaseDatabaseSchemaEditor._alter_column_comment_sql„  sZ   € à×)Ñ)àŸ™¨¯©×)=Ñ)=Ó>ØŸ/™/¨)×*:Ñ*:Ó;Ø×,Ñ,¨^Ó<ññð ð
ð 	
r   c                 ó,   — | j                  |xs d«      S )Nr[   rÚ   )rI   rL  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„   rJ  r}  r{   Úm2m_reverse_field_nameÚm2m_field_name)rI   r,   r4   r9   rx  s        r   rv  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   r[   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é   éÈ   rh  é   Né   r0  r   zD%séÿÿÿÿ)r   r   rC   ri   Úmax_name_lengthr�   r8  Úisdigit)	rI   Ú
table_nameÚcolumn_namesr&  rh  Úhash_suffix_partÚ
max_lengthr«  Úother_lengths	            r   r¡  z+BaseDatabaseSchemaEditor._create_index_name²  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)Nr0  r   rn   r[   )r8  r�   r   ÚDEFAULT_INDEX_TABLESPACEr'   rC   ri   r‘   )rI   r,   r“   r�   s       r   Ú_get_index_tablespace_sqlz2BaseDatabaseSchemaEditor._get_index_tablespace_sqlÒ  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 r[   rV   )rI   Ú	conditions     r   Ú_index_condition_sqlz-BaseDatabaseSchemaEditor._index_condition_sqlÞ  s   € ÙØ˜yÑ(Ð(Ør   c                 ó´   — |r | j                   j                  j                  syt        dt	        |j
                  j                  || j                  «      ¬«      S )Nr[   z INCLUDE (%(columns)s))r>  )rC   rF   Úsupports_covering_indexesr	   r   r'   r„   rj   )rI   r,   r>  s      r   Ú_index_include_sqlz+BaseDatabaseSchemaEditor._index_include_sqlã  sD   € Ù˜dŸo™o×6Ñ6×PÒPØÜØ$Ü˜EŸK™K×0Ñ0°'¸4¿?¹?ÓKô
ð 	
r   )r“   r   r&  Úusingr�   Úcol_suffixesrU   Ú	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_colsrl   )r�   c                  óN   •— ‰€ ‰j                   | i |¤ŽŠ‰j                  ‰«      S r0   )r¡  rj   )ÚargsÚkwargsr   rI   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name  s.   ø€ àˆ|Ø.�t×.Ñ.°Ð?¸Ñ?�Ø—?‘? 4Ó(Ð(r   )rx   r   rë  r>  rY   ræ  rî  )r   rÒ   rC   rä  r†   Úsql_create_indexr'   r„   r	   r
   rj   r   Ú_index_columnsr   re   rç  rê  )rI   r,   r“   r   r&  rë  r�   rì  rU   rí  ræ  rî  rï  rÕ   r‘   r   r>  r÷  rx   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)rx   r   )r	   r'  r
   r'   r„   rj   )rI   r,   r   rU   s       r   r”  z*BaseDatabaseSchemaEditor._delete_index_sql!  sA   € ÜØÒ(�4×(Ñ(Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ô
ð 	
r   c                 óÀ   — t        | j                  t        |j                  j                  | j
                  «      | j                  |«      | j                  |«      ¬«      S )N)rx   Úold_nameÚnew_name)r	   Úsql_rename_indexr
   r'   r„   rj   )rI   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   rj   )rI   rx   r>  rì  rí  s        r   rø  z'BaseDatabaseSchemaEditor._index_columns0  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‚   rd  Úindex_togetherr{   rb   r(  r4  r  rC   rF   r  r  )rI   r,   Úoutputr   r’   r“   r
  s          r   rø   z+BaseDatabaseSchemaEditor._model_indexes_sql3  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.
        rŠ  )Ú_field_should_be_indexedrb   r(  )rI   r,   r   r  s       r   rd  z+BaseDatabaseSchemaEditor._field_indexes_sqlK  s<   € ð ˆØ×(Ñ(¨°Ô6Ø�M‰M˜$×0Ñ0°À¸wÐ0ÓGÔHØˆr   c                 ó.  — |j                   s|j                   sy|xs
 t        «       }|j                  «       \  }}}}|j                  «       \  }}}	}
|j                  |j                  «      D ]  }|j                  |d «       Œ |j                  |j                  «      D ]  }|
j                  |d «       Œ |j                  s‘|j                  r…|j                  ry|j                  j                  j                  j                  |j                  j                  j                  j                  k(  r$|j                  dd «       |
j                  dd «       | j                  |j                  «      | j                  |j                  «      k7  xs |||f||	|
fk7  S )NFÚto)ÚconcreterŽ  ÚdeconstructÚunionÚnon_db_attrsÚpopr   r<   r,   r'   r„   rj   r†   )rI   r4   r9   r‡  rh  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   ru  z1BaseDatabaseSchemaEditor._field_should_be_alteredT  sl  € Ø×!Ò!¨)×*<Ò*<ØØ’œ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 Õ&ð	'ð ×&Ò&Ø×&Ò&Ø×&Ò&Ø×&Ñ&×,Ñ,×2Ñ2×;Ñ;Ø×%Ñ%×+Ñ+×1Ñ1×:Ñ:ò;ð �N‰N˜4 Ô&Ø�N‰N˜4 Ô&Ø�‰˜y×/Ñ/Ó0°D·O±OØ×Ñó5
ñ 
ò Rà˜ *Ð-°(¸HÀjÐ1QÑQð	Rr   c                 ó8   — |j                   xr |j                   S r0   )r“  r±   ©rI   r,   r   s      r   r  z1BaseDatabaseSchemaEditor._field_should_be_indexedq  s   € Ø�~‰~Ò2 e§l¡lÐ"2Ð2r   c                 ó8   — |j                    xr |j                   S r0   ©r   ©rI   r4   r9   s      r   r�  z2BaseDatabaseSchemaEditor._field_became_primary_keyt  s   € Ø×(Ñ(Ð(ÒB¨Y×-BÑ-BÐBr   c                 ór   — |j                    xr) |j                  xr |j                   xs |j                   S r0   )r   r±   r  s      r   rŸ  z0BaseDatabaseSchemaEditor._unique_should_be_addedw  s?   € à×%Ñ%Ð%ò @Ø× Ñ ò@à×%Ñ%Ð%Ò>¨×)>Ñ)>ð	
r   c                 ó¬   — | j                   | j                  |«      | j                  |j                  «      | j                  |j                  «      |dœz  S )N)rx   Ú
old_columnÚ
new_columnr½   )Úsql_rename_columnrj   r†   )rI   rx   r4   r9   r|  s        r   r–  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)rx   r   r†   ro   rp   rY  )r
   r'   r„   rj   r_  r   r†   Útarget_fieldr,   rC   ri   r`  r	   Úsql_create_fk)
rI   r,   r   r&  rx   r   r†   ro   rp   rY  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 r0   ©rj   r¡  ©rô  rõ  rI   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_nameœ  s%   ø€ Ø—?‘?Ð#: 4×#:Ñ#:¸DÐ#KÀFÑ#KÓLÐLr   r0  )r   r'   r„   r†   r   r!  r,   )rI   r,   r   r&  r'  s   `    r   r_  z,BaseDatabaseSchemaEditor._fk_constraint_name›  sk   ø€ ô	Mô Ø�K‰K× Ñ Ø�\‰\ˆNÜ˜U×/Ñ/×5Ñ5×;Ñ;×DÑDÓEÀaÑHØ×Ñ×&Ñ&Ð'ØØó
ð 	
r   c                 ó<   — | j                  | j                  ||«      S r0   )r:  Úsql_delete_fk©rI   r,   r   s      r   rn  z'BaseDatabaseSchemaEditor._delete_fk_sql¨  ó   € Ø×*Ñ*¨4×+=Ñ+=¸uÀdÓKÐKr   c                 óZ   — |€y|t         j                  k(  ry|t         j                  k(  ryy )Nr[   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   ÚDEFERREDÚ	IMMEDIATE)rI   rY  s     r   Ú_deferrable_constraint_sqlz3BaseDatabaseSchemaEditor._deferrable_constraint_sql«  s2   € ØÐØØœ×,Ñ,Ò,Ø3Øœ×-Ñ-Ò-Ø4ð .r   c                 ó   — |du ry|du ryy)NFz NULLS NOT DISTINCTTz NULLS DISTINCTr[   rV   )rI   Únulls_distincts     r   Ú _unique_index_nulls_distinct_sqlz9BaseDatabaseSchemaEditor._unique_index_nulls_distinct_sql³  s   € Ø˜UÑ"Ø(Ø˜tÑ#Ø$Ør   c                 ó†  — | xs  | j                   j                  j                  xr› | xs  | j                   j                  j                  xrt | xs  | j                   j                  j                  xrM | xs  | j                   j                  j
                  xr& |d u xs  | j                   j                  j                  S r0   )rC   rF   Úsupports_partial_indexesÚ&supports_deferrable_unique_constraintsré  r  Ú*supports_nulls_distinct_unique_constraints)rI   ræ  rY  rî  rï  r1  s         r   Ú_unique_supportedz*BaseDatabaseSchemaEditor._unique_supportedº  s°   € ð ˆ]ÒO˜dŸo™o×6Ñ6×OÑOò à�ò SØ—?‘?×+Ñ+×RÑRòð
 �ÒR §¡× 8Ñ 8× RÑ Ròð  �ÒW 4§?¡?×#;Ñ#;×#WÑ#Wòð  $Ð&ò WØ—?‘?×+Ñ+×VÑVð	
r   c
           
      ó¬  — | j                  |||||	¬«      sy |s|s|s|s|	�7| 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æ  rY  rî  rï  r1  )r   ræ  rî  rí  rï  r1  ru   )r>  rY  ©r   rw   )
r7  r|   rL   rb   Úsql_unique_constraintr�   rj   r†   r/  Úsql_constraint)rI   r,   r“   r   ræ  rY  rî  rí  rï  r1  rU   r   rw   s                r   Ú_unique_sqlz$BaseDatabaseSchemaEditor._unique_sqlÒ  s   € ð ×%Ñ%ØØ!ØØ#Ø)ð &ô 
ð ñ ÙÙÙØÐ)ð ×)Ñ)ØØØØ#ØØ#Ø'Ø-ð *ó 	ˆCñ Ø×!Ñ!×(Ñ(¨Ô-ØØ×/Ñ/Ø—y‘yÈVÖ!TÀE $§/¡/°%·,±,Õ"?Ò!TÓUØ×9Ñ9¸*ÓEñ3
ñ 
ˆ
ð ×"Ñ"Ø—O‘O DÓ)Ø$ñ&
ñ 
ð 	
ùò "Us   Á3"C
c
                 ó   — | 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%                  ||«      | j'                  |	«      ¬	«      S c c}w )
Nr9  Frñ  rl   Tr.  rV   )rì  rí  )rx   r   r>  ræ  rY  rî  r1  )r7  r   rÒ   rC   r'   r„   r†   r7  rj   Úsql_create_unique_indexÚsql_create_uniquerø  r   re   r	   r
   rç  r/  rê  r2  )rI   r,   r“   r   ræ  rY  rî  rí  rï  r1  rÕ   rx   r   r>  rU   s                  r   r|   z+BaseDatabaseSchemaEditor._create_unique_sql  s[  € ð ×%Ñ%ØØ!ØØ#Ø)ð &ô 
ð ä˜¨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Ó;Ø×@Ñ@ÀÓPô	
ð 		
ùò 5s   ÁEc                 óH   ‡ — |rˆ fd„}n‰ j                   }t        ||d|«      S )Nc                  óF   •— ‰j                   ‰j                  | i |¤Ž«      S r0   r%  r&  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_name<  s%   ø€ Ø—‘Ð'> t×'>Ñ'>ÀÐ'OÈÑ'OÓPÐPr   Ú_uniq)r¡  r   )rI   rx   r>  r/  rC  s   `    r   r7  z0BaseDatabaseSchemaEditor._unique_constraint_name9  s,   ø€ ÙõQð "&×!8Ñ!8Ðä˜ ¨Ð2DÓEÐEr   c	                 ó˜   — | j                  |||||¬«      sy |s|s|s|r| j                  }	n| j                  }	| j                  |	||«      S )Nr9  )r7  r'  r  r:  )
rI   r,   r   ræ  rY  rî  rí  rï  r1  rU   s
             r   r‘  z+BaseDatabaseSchemaEditor._delete_unique_sqlD  s_   € ð ×%Ñ%ØØ!ØØ#Ø)ð &ô 
ð Ù™¡9±Ø×'Ñ'‰Cà×(Ñ(ˆCØ×*Ñ*¨3°°tÓ<Ð<r   c                 ób   — | j                   | j                  |«      | j                  d|iz  dœz  S )Nrm   r:  )r<  rj   r€   )rI   r   rm   s      r   Ú
_check_sqlz#BaseDatabaseSchemaEditor._check_sql]  s9   € Ø×"Ñ"Ø—O‘O DÓ)Ø×3Ñ3°wÀÐ6FÑFñ&
ñ 
ð 	
r   c                 óä   — | j                   j                  j                  sy t        | j                  t        |j                  j                  | j                  «      | j                  |«      |¬«      S )N)rx   r   rm   )	rC   rF   Ú supports_table_check_constraintsr	   Úsql_create_checkr
   r'   r„   rj   )rI   r,   r   rm   s       r   r¢  z*BaseDatabaseSchemaEditor._create_check_sqlc  sU   € Ø�‰×'Ñ'×HÒHØÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&Øô	
ð 	
r   c                 ó~   — | j                   j                  j                  sy | j                  | j                  ||«      S r0   )rC   rF   rI  r:  Úsql_delete_checkr*  s      r   r•  z*BaseDatabaseSchemaEditor._delete_check_sqlm  s3   € Ø�‰×'Ñ'×HÒHØØ×*Ñ*¨4×+@Ñ+@À%ÈÓNÐNr   c                 óŒ   — t        |t        |j                  j                  | j                  «      | j	                  |«      ¬«      S rú  )r	   r
   r'   r„   rj   )rI   Útemplater,   r   s       r   r:  z/BaseDatabaseSchemaEditor._delete_constraint_sqlr  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
  rm   rm  r½   )rC   rF   Útruncates_namesÚintrospectionÚidentifier_converterr   ri   rÛ  rf   Úget_constraintsr'   r„   Úitemsrb   )rI   r,   rÞ  r±   r   r
  rm  rm   r‰  r-  r   rf   rŒ   ÚresultÚinfodicts                  r   r5  z*BaseDatabaseSchemaEditor._constraint_namesy  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  r0  r1  z) of PK constraints for )r5  r8  r9  r'   r„   rP   Ú_delete_primary_key_sql)rI   r,   rx  r?  r¤  s        r   rž  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Ú_pkr�  )rx   r   r>  )	r	   Úsql_create_pkr
   r'   r„   rj   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 r0   )r:  Úsql_delete_pkr*  s      r   rX  z0BaseDatabaseSchemaEditor._delete_primary_key_sql¿  r+  r   c                 ó2   — |rd| j                  |«      z   S dS )NzCOLLATE r[   )rj   )rI   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_procedurerj   r�   rP   )rI   Úprocedure_namerb  rU   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedureÅ  s=   € Ø×'Ñ'ØŸ™¨Ó8ØŸ8™8 KÓ0ñ+
ñ 
ˆð 	�‰�SÕr   )FT)rV   )F)r[   r0   )NNNNN)NNNNNN)NNNNNNN)T)NNNNNNNNr¾   )vÚ__name__Ú
__module__Ú__qualname__Ú__doc__rŽ   rF  rS  r   ra  rc  rÊ  rÁ  rÂ  rÇ  rÆ  rÅ  ro  r  r�  r;  r€   Úsql_delete_constraintr<  rJ  rL  r@  r  r"  r‡   r^  r)  r÷  r?  rþ  r'  r[  r]  rc  rM  rÎ  rJ   rN   rQ   rP   rj   r˜   r»   r~   r¦   r§   r«   r©   r¥   r¯   Ústaticmethodrï   r¨   re   rü   rÿ   r  r  r  r  r  r"  r+  r  rJ  rö   rV  rj  rs  r}  r…  rw  rš  rb  r™  r˜  r÷   r¢   rv  r¡  rä  rç  rê  r(  r”  r  rø  rø   rd  ru  r  r�  rŸ  r–  r‰   r_  rn  r/  r2  r7  r=  r|   r7  r‘  rG  r¢  r•  r:  r5  rž  r   rX  rŸ   re  rV   r   r   rA   rA   K   sW  „ ñð AÐØJÐØVÐØ5ÐàTÐØ:ÐØPÐØCÐØ FÐØPÐØ"HÐØ'BÐ$ØNÐàNð ð 	Qð ð AÐØ.ÐØLÐØ9€NàXÐØ,Ðð	?ð ð .Ðð	@ð ð  ÐØ"&ÐØ)€Mð	9ð ð
	Bð ð IÐØ,Ðð 	Rð ð *€Mà9ÐàIÐØVÐóUòòAó,ò>4òOòf?NóB
ò6òò
òò)ò Kð ñó ðò2Wò$ò">òH.ò*	Aò4ò-ò+òòAò*Vò* SòDHò&ò	
òT$òl.ó@J
òX	ð( ór$òhó:$
ðN 16ó
ò8,
ò\	
ò/ò
ó@ó@
òò

ð ØØØØØØØØØØô4
ól
ò
òSòò0óRò:3òCò
ò
ò
ò*
òLò5òð ØØØØó
ð: ØØØØØó2
ðp ØØØØØØó1
óf	Fð ØØØØØó=ò2
ò
òOò

ð ØØØØØØØó+óZOò

òLóLôr   rA   )!Úloggingr)   r   Údjango.confr   Ú!django.db.backends.ddl_referencesr   r   r   r   r	   r
   Údjango.db.backends.utilsr   r   r   Údjango.db.modelsr   r   r   Údjango.db.models.sqlr   Údjango.db.transactionr   r   Údjango.utilsr   Ú	getLoggerr^   r   r-   r;   rA   rV   r   r   ú<module>ru     sa   ðÛ Û Ý å  ÷÷ ÷ SÑ Rß <Ñ <Ý &ß DÝ !à	ˆ×	Ñ	Ð6Ó	7€ò1ò 
ò
÷.ò r   