Ë
    ¹ûàge@ ã                   óò   — d dl Z d dlZd dlm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 j:                  d«      Zd„ Zd„ Z d„ Z! G d„ d«      Z"y)é    N)Údatetime)Úsettings)Ú
FieldError)ÚColumnsÚExpressionsÚForeignKeyNameÚ	IndexNameÚ	StatementÚTable)Únames_digestÚsplit_identifierÚtruncate_name)ÚNOT_PROVIDEDÚ
DeferrableÚIndex)ÚQuery)ÚTransactionManagementErrorÚatomic)Útimezonezdjango.db.backends.schemac                 óž   — | 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      ú\/var/www/skyplay_api_hub/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>9   ó#   øè ø€ ò 	
àÜ$ S¨)Ô4ô ñ	
ùó   ƒc              3   ó:   •K  — | ]  }t        |‰«      r|–— Œ y ­wr1   r2   )r3   r4   Ú	new_fields     €r   r6   z+_related_non_m2m_objects.<locals>.<genexpr>>   r7   r8   )Úzipr.   r-   Ú_related_non_m2m_objectsÚremote_field)r5   r:   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r<   r<   5   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%(nulls_distinct)s%(condition)sz/ALTER INDEX %(old_name)s RENAME TO %(new_name)szDROP INDEX %(name)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)zDROP PROCEDURE %(procedure)sz)COMMENT ON TABLE %(table)s IS %(comment)sz5COMMENT ON COLUMN %(table)s.%(column)s IS %(comment)sc                 ó˜   — || _         || _        | j                  rg | _        | j                   j                  j                  xr || _        y r1   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrD   rE   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 r1   )Údeferred_sqlrI   r   rD   ÚaliasÚ	__enter__)rJ   s    r   rO   z"BaseDatabaseSchemaEditor.__enter__�   s>   € ØˆÔØ× Ò Ü  §¡×!6Ñ!6Ó7ˆDŒKØ�K‰K×!Ñ!Ô#Øˆr    c                 ó¢   — |€#| j                   D ]  }| j                  |d «       Œ | j                  r| j                  j	                  |||«       y y r1   )rM   ÚexecuterI   r   Ú__exit__)rJ   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rR   z!BaseDatabaseSchemaEditor.__exit__¤   sO   € ØÐØ×(Ñ(ò (�Ø—‘˜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))ÚparamsrV   )Úextraú;Ú N)rE   rD   Úin_atomic_blockrG   rH   r   ÚstrÚloggerÚdebugÚrstripÚendswithrF   ÚappendÚtupleÚmapÚquote_valueÚcursorrQ   )rJ   rV   rY   Úendingrg   s        r   rQ   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 r1   )rD   ÚopsÚ
quote_name)rJ   r   s     r   rk   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 g }|rG‰j                   j6                  D ]-  }‰ j                  j	                  |j9                  ‰‰ «      «       Œ/ n/|j                  ˆˆ fd„‰j                   j6                  D «       «       ‰ 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 )z-Take a model and return its table definition.©rD   Úcheckú z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldc              3   óB   •K  — | ]  }|j                  ‰‰«      –— Œ y ­wr1   )Úconstraint_sql)r3   Ú
constraintr-   rJ   s     €€r   r6   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s&   øè ø€ ò #àð ×)Ñ)¨%°×6ñ#ùs   ƒú, c              3   ó6   K  — | ]  }|rt        |«      –— Œ y ­wr1   )r^   )r3   Ú	statements     r   r6   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s   è ø€ ò $àÙô �I—ñ$ùs   ‚)ÚtableÚ
definition)!r(   Úunique_togetherÚ	get_fieldrM   rc   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersrD   Úsql_check_constraintÚdb_type_suffixÚextendr=   Údb_constraintr-   Údb_tableÚ
field_nameÚcolumnÚsql_create_inline_fkrk   rG   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typerj   Úautoinc_sqlÚconstraintsÚ
create_sqlÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rJ   r-   Úfield_namesr   ÚfieldsÚcolumn_sqlsrY   r}   Úextra_paramsÚ	db_paramsÚcol_type_suffixrp   rq   r�   Úconstraint_sqlsrx   rV   r•   s   ``                r   Ú	table_sqlz"BaseDatabaseSchemaEditor.table_sqlÏ   s§  ù€ ð !Ÿ;™;×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	:ðp ˆÙð $Ÿk™k×5Ñ5ò M�
Ø×!Ñ!×(Ñ(¨×)>Ñ)>¸uÀdÓ)KÕLñMð ×"Ñ"ô #à"'§+¡+×"9Ñ"9ô#ô ð ×#Ñ#Ø—_‘_ U§[¡[×%9Ñ%9Ó:ØŸ)™)ñ $à!A ;Ð!A°Ñ!Aô$ó ñ'
ñ 
ˆð �;‰;×$Ò$Ø!Ÿ_™_×0Ñ0×?Ñ?Ø—‘×)Ñ)óˆNñ Ø�s˜^Ñ+Ñ+�Ø�Fˆ{Ðùòo Ms    "Pc              #   óD  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/                  |«      \  }}|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_sqlrD   rG   Ú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_defaultrc   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚ	generatedÚ_column_generated_sqlÚimplied_column_nullÚuniquer”   r(   Úsupports_tablespacesrj   r•   )rJ   Úcolumn_db_typerY   r-   r   Úfield_db_paramsÚinclude_defaultrŸ   r¨   Údefault_sqlÚdefault_paramsÚdefault_valueÚcolumn_defaultÚgenerated_sqlÚgenerated_paramsÚ
tablespaces                   r   Ú_iter_column_sqlz)BaseDatabaseSchemaEditor._iter_column_sql/  sY  è ø€ ð ÒØ'×+Ñ+¨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Ø�?Š?Ø.2×.HÑ.HÈÓ.OÑ+ˆMÐ+Ø�M‰MÐ*Ô+ØÓÙØÓØ—‘×)Ñ)×=Ò=ØŠ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.
        rm   Útype©NNro   )rƒ   rD   r“   rÂ   )rJ   r-   r   rº   r¹   r¸   rY   s          r   r‚   z#BaseDatabaseSchemaEditor.column_sqlr  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).
        FrW   ©rJ   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.
        FrW   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©rJ   Ú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.
        ú%srW   rÇ   s     r   r®   z,BaseDatabaseSchemaEditor._column_default_sql¤  s   € ð
 r    c                 ór  ‡ — ddl m} |j                  }t        ||«      r‰ j	                  |«      nd}t        |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   )ÚValuez(%s)r,   rm   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr1   )r°   ©r3   ÚprJ   s     €r   r6   z:BaseDatabaseSchemaEditor.db_default_sql.<locals>.<genexpr>º  s   øè ø€ Ò I¸Q ×!5Ñ!5°a×!8Ñ Iùó   ƒ)Údjango.db.models.expressionsrÒ   Ú_db_default_expressionÚ
isinstancer®   r   r-   Úget_compilerrD   ÚcompilerG   r¯   rd   )	rJ   r   rÒ   r©   rV   ÚqueryÚcompilerr»   rY   s	   `        r   rª   z'BaseDatabaseSchemaEditor.db_default_sql«  s«   ø€ å6à×1Ñ1ˆ
ä/9¸*ÀeÔ/LˆD×$Ñ$ UÔ+ÐRXð 	ô ˜EŸK™KÔ(ˆØ×%Ñ%°·±Ð%ÓAˆØ&×.Ñ.¨zÓ:Ñˆ�VØ�?‰?×#Ñ#×=Ò=ð œ5Ó IÀ&Ô IÓIÑIˆKØˆFØ�[Ñ  &Ð(Ð(r    c                 óæ   ‡ — |j                  ‰ j                  «      \  }}|j                  rdnd}‰ j                  j                  j                  r|t        ˆ fd„|D «       «      z  }d}d|› d|› �|fS )z3Return the SQL to use in a GENERATED ALWAYS clause.ÚSTOREDÚVIRTUALc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr1   ©rf   rÔ   s     €r   r6   zABaseDatabaseSchemaEditor._column_generated_sql.<locals>.<genexpr>Ã  s   øè ø€ Ò3XÈA°D×4DÑ4DÀQ×4GÑ3XùrÖ   rW   zGENERATED ALWAYS AS (z) )r¿   rD   Ú
db_persistrG   r¯   rd   )rJ   r   Úexpression_sqlrY   Úpersistency_sqls   `    r   r´   z.BaseDatabaseSchemaEditor._column_generated_sql¾  ss   ø€ à!&×!4Ñ!4°T·_±_Ó!EÑˆ˜Ø&+×&6Ò&6™(¸IˆØ�?‰?×#Ñ#×=Ò=Ø+¬eÓ3XÐQWÔ3XÓ.XÑXˆNØˆFØ& ~Ð&6°b¸Ð8IÐJÈFÐRÐRr    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ö   rD   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   rf   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`.
        Nrm   rÄ   )r�   rQ   rD   rG   Úsupports_commentsr(   Údb_table_commentÚalter_db_table_commentr¥   r�   r¦   rƒ   Ú_alter_column_comment_sqlrM   r†   Ú_model_indexes_sqlÚlocal_many_to_manyr=   ÚthroughÚauto_createdÚcreate_model)rJ   r-   rV   rY   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.r|   N)r(   r   r=   r  r  Údelete_modelrQ   Úsql_delete_tablerk   rˆ   ÚlistrM   rÙ   r
   Úreferences_tableÚremove)rJ   r-   r   rV   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©rY   )Úcontains_expressionsrD   rG   Úsupports_expression_indexesrQ   r‘   ©rJ   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  rD   rG   r  rQ   Ú
remove_sqlr  s      r   Úremove_indexz%BaseDatabaseSchemaEditor.remove_index4  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  )rD   rG   Úcan_rename_indexrQ   Ú_rename_index_sqlr   r  r  )rJ   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‘   rQ   ©rJ   r-   rx   rV   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraintG  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  rQ   r  s       r   Úremove_constraintz*BaseDatabaseSchemaEditor.remove_constraintO  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)rd   Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquer(   r   rQ   r€   )	rJ   r-   Úold_unique_togetherÚnew_unique_togetherr—   ÚoldsÚnewsr–   r   s	            r   Úalter_unique_togetherz.BaseDatabaseSchemaEditor.alter_unique_togetherU  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)rd   r!  r"  Úsql_delete_indexr(   r   rQ   Ú_create_index_sql)	rJ   r-   Úold_index_togetherÚnew_index_togetherr—   r&  r'  r–   r   s	            r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_togetherj  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 ú(ry   ú)r   )r(   r�   r   Úindexesr   rŠ   Ú_constraint_namesr£   rD   rG   Ú*allows_multiple_constraints_on_same_fieldsr^   Ú_unique_constraint_namerˆ   ÚlenÚ
ValueErrorr“   rQ   Ú_delete_constraint_sql)rJ   r-   r—   Úconstraint_kwargsrV   rx   Úmeta_constraint_namesÚmeta_index_namesr   ÚcolumnsÚconstraint_namesÚdefault_names               r   r"  z/BaseDatabaseSchemaEditor._delete_composed_index  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)rD   rG   Úignores_table_name_caseÚlowerrQ   Úsql_rename_tablerk   rM   rÙ   r
   Úrename_table_references)rJ   r-   Úold_db_tableÚnew_db_tablerV   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\   )r|   Úcomment)	Úsql_alter_table_commentrD   rG   rû   rQ   rk   r(   rˆ   rf   )rJ   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.)r|   Úold_tablespaceÚnew_tablespaceN)rQ   Úsql_retablespace_tablerk   r(   rˆ   )rJ   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;                  ||xs d«       |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º   Nrm   ro   rn   rr   z%s.r\   )r   Ú	namespacerŠ   rp   rq   Ú
deferrable)r|   rŠ   r}   ©Údrop©r|   ÚchangesrÄ   ),r   r=   r  r(   r  r  r‚   r…   rD   rƒ   r„   rG   rŒ   r‡   Úsql_create_column_inline_fkr-   rˆ   r   r‰   rŠ   r   Ú_fk_constraint_namerk   rj   Údeferrable_sqlrM   rc   r�   Úsql_create_columnrQ   r©   r   r¬   r­   Ú_alter_column_default_sqlÚsql_alter_columnr¦   rû   r¥   rþ   r†   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rJ   r-   r   r}   rY   r›   rš   Úconstraint_suffixrp   rq   r]  Ú_rV   Ú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á>G˜ §¡°	Ó :Ò:ÈRà"Ÿ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˜&š. DÔ)ð ×Ñ¤Ñ,Ø×.Ñ.¨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.
        rm   rÄ   NT©Úforeign_key)r|   rŠ   )r   r=   r  r(   r  r  rƒ   rD   r:  rŠ   rQ   Ú_delete_fk_sqlÚsql_delete_columnrk   rˆ   rG   rj  rk  r  rM   rÙ   r
   Úreferences_columnr
  )rJ   r-   r   Úfk_namesÚfk_namerV   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   }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  rd	}	nH|j                  r<	 |j                  | j                  «      }
|j                  | j                  «      }|
|k7  }	|	rt	        d
|› d�«      ‚| j                  ||||||||«       y# t        $ r d	}	Y Œ7w xY w)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.
        Nrm   rÄ   FzCannot alter field z into zT - they do not properly define db_type (are you using a badly-written custom field?)zr - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)Tz7Modifying GeneratedFields is not supported - the field z6 must be removed and re-added with the new definition.)Ú_field_should_be_alteredrƒ   rD   r=   r>  r  r(   r  Ú_alter_many_to_manyr³   rã   r¿   r   Ú_alter_field)rJ   r-   r5   r:   ÚstrictÚold_db_paramsÚold_typeÚnew_db_paramsÚnew_typeÚmodifying_generated_fieldÚold_field_sqlÚnew_field_sqls               r   Úalter_fieldz$BaseDatabaseSchemaEditor.alter_fieldA  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Ø×Ò I×$8Ñ$8¸I×<PÑ<PÒ$Pà(,Ñ%Ø× Ò ðKØ )× 7Ñ 7¸¿¹Ó H�ð
 !*× 7Ñ 7¸¿¹Ó H�Ø,9¸]Ñ,JÐ)Ù$ÜØIÈ)Èð UHð Hóð ð
 	×ÑØØØØØØØØõ		
øô ò 1à,0Ò)ð1ús   ÈI, É,I:É9I:c                 óº   — | j                   j                  }|j                  | j                   «      }d|d<   	 ||j                  «          |z  S # t        $ r Y y w xY w)NÚ__column_name__rŠ   )rD   Údata_type_check_constraintsÚdb_type_parametersrŽ   ÚKeyError)rJ   r   r¹   Úcheck_constraintsÚdatas        r   Ú_field_db_checkz(BaseDatabaseSchemaEditor._field_db_check”  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¦   )ÚignoreTrq  r5  r6  z!) of foreign key constraints for ú.F)r¶   r   r2  z) of unique constraints for rŸ   )r  Útype_r2  )rn   r2  z) of check constraints for rm   r_  Nry   ra  rÐ   )r|   rŠ   rô   ©r—   rÄ   r   rr   Ú_fkÚ_check©r+  rn   )IÚsetrD   rG   rŒ   r=   r‡   rz  r:  rŠ   r=  r>  r(   rˆ   ÚaddrQ   rs  r¶   Ú_field_became_primary_keyr�   r   Ú_delete_unique_sqlr£   r   r<   Úrelated_modelr   Údb_indexr9  r   r+  Ú_delete_index_sqlr�  Ú_delete_check_sqlÚ_rename_field_sqlrM   rÙ   r
   Úrename_column_referencesr…   rû   r¦   Ú_alter_column_type_sqlrc   r†   r©   r   Ú"_alter_column_database_default_sqlr¨   r­   r¬   rg  Ú_alter_column_null_sqlrí   Úsupports_combined_altersrd   r;   r“   Úsumrh  rk   rª   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr€   r-  Ú_create_primary_key_sqlrƒ   r�   Ú_create_index_nameÚ_create_check_sqlrj  rk  )4rJ   r-   r5   r:   r  r�  r~  r€  r}  Úfks_droppedrv  rw  rx   rA  rD  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr@   Úrel_fk_namesr  rB  Úindex_namesÚ
index_nameÚold_db_checkÚnew_db_checkrV   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrY   r»   Úrels_to_updater?   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationrm  Úrelrn  s4                                                       r   r|  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.
        Nrm   rÄ   )rŠ   rÄ   )
rD   rG   r²   r±   rƒ   r¨   Úsql_alter_column_nullÚsql_alter_column_not_nullrk   rŠ   )rJ   r-   r5   r:   r€  rV   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.
        rm   rÄ   ©rŠ   rÄ   rô   )r­   r®   rD   rG   r¯   r°   rƒ   r¨   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrk   rŠ   )
rJ   r-   r5   r:   r`  r¿  rô   rY   r€  rV   s
             r   rg  z2BaseDatabaseSchemaEditor._alter_column_default_sql0  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\   rm   rÄ   rÌ  )rÎ  rÏ  rª   rƒ   rD   rk   rŠ   )	rJ   r-   r5   r:   r`  rV   r»   rY   r€  s	            r   r¡  z;BaseDatabaseSchemaEditor._alter_column_database_default_sqlV  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.
        ro   r\   )rŠ   rÄ   rŸ   rQ  )r¤   r(   rˆ   rD   rG   rû   r   r¦   rþ   rc   r§   Úsql_alter_column_typerk   rŠ   )rJ   r-   r5   r:   r�  r­  r®  r¼  Úcollate_sqlÚcomment_sqlrV   rY   s               r   r   z/BaseDatabaseSchemaEditor._alter_column_type_sqlr  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)r|   rŠ   rQ  )Úsql_alter_column_commentrk   r(   rˆ   rŠ   r§   )rJ   r-   r:   r�  Únew_db_comments        r   rþ   z2BaseDatabaseSchemaEditor._alter_column_comment_sql   sZ   € à×)Ñ)àŸ™¨¯©×)=Ñ)=Ó>ØŸ/™/¨)×*:Ñ*:Ó;Ø×,Ñ,¨^Ó<ññð ð
ð 	
r    c                 ó,   — | j                  |xs d«      S )Nr\   râ   )rJ   rQ  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ˆ   rO  r…  r   Úm2m_reverse_field_nameÚm2m_field_name)rJ   r-   r5   r:   r}  s        r   r{  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é   éÈ   rm  é   Né   r5  r   zD%séÿÿÿÿ)r   r   rD   rj   Úmax_name_lengthr“   r=  Úisdigit)	rJ   Ú
table_nameÚcolumn_namesr+  rm  Ú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)Nr5  r   ro   r\   )r=  r”   r   ÚDEFAULT_INDEX_TABLESPACEr(   rD   rj   r•   )rJ   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\   rW   )rJ   Ú	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))rC  )rD   rG   Úsupports_covering_indexesr
   r   r(   rˆ   rk   )rJ   r-   rC  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_suffixesrV   Ú	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_colsrm   )r”   c                  óN   •— ‰€ ‰j                   | i |¤ŽŠ‰j                  ‰«      S r1   )r©  rk   )ÚargsÚkwargsr   rJ   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name(  s.   ø€ àˆ|Ø.�t×.Ñ.°Ð?¸Ñ?�Ø—?‘? 4Ó(Ð(r    )r|   r   ró  rC  rZ   rî  rö  )r   rÚ   rD   rì  rŠ   Úsql_create_indexr(   rˆ   r
   r   rk   r	   Ú_index_columnsr   rf   rï  rò  )rJ   r-   r—   r   r+  ró  r”   rô  rV   rõ  rî  rö  r÷  rÝ   r•   r   rC  rÿ  r|   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                  |«      ¬«      }|j                  d   j                  }|j                  d   }t        | j                  «      D ]A  }t        |t         «      sŒ|j                  ||«      sŒ'| j                  j                  |«       ŒC |S )N©r|   r   r|   r   )r
   r,  r   r(   rˆ   rk   Úpartsr|   r  rM   rÙ   Úreferences_indexr
  )rJ   r-   r   rV   r{   rå  r³  s          r   rœ  z*BaseDatabaseSchemaEditor._delete_index_sql=  s¶   € ÜØÒ(�4×(Ñ(Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ô
ˆ	ð —_‘_ WÑ-×3Ñ3ˆ
Ø—_‘_ VÑ,ˆ
Ü˜×)Ñ)Ó*ò 	.ˆCÜ˜#œyÕ)¨c×.BÑ.BØ˜Jõ/ð ×!Ñ!×(Ñ(¨Õ-ð		.ð Ðr    c                 óÀ   — t        | j                  t        |j                  j                  | j
                  «      | j                  |«      | j                  |«      ¬«      S )N)r|   Úold_nameÚnew_name)r
   Úsql_rename_indexr   r(   rˆ   rk   )rJ   r-   r  r  s       r   r  z*BaseDatabaseSchemaEditor._rename_index_sqlO  sH   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—_‘_ XÓ.Ø—_‘_ XÓ.ô	
ð 	
r    c                 ó4   — t        ||| j                  |¬«      S )N)rô  )r   rk   )rJ   r|   rC  rô  rõ  s        r   r   z'BaseDatabaseSchemaEditor._index_columnsW  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 ]P  }|j                  r!| j                  j                  j                  sŒ0|j                  |j                  || «      «       ŒR |S )zz
        Return a list of all index SQL statements (field indexes, Meta.indexes)
        for the specified model.
        )r(   ÚmanagedÚproxyÚswappedr�   r†   ri  r9  r  rD   rG   r  rc   r‘   )rJ   r-   Úoutputr   r  s        r   rÿ   z+BaseDatabaseSchemaEditor._model_indexes_sqlZ  s¾   € ð
 �{‰{×"Ò" e§k¡k×&7Ò&7¸5¿;¹;×;NÒ;NØˆIØˆØ—[‘[×-Ñ-ò 	AˆEØ�M‰M˜$×1Ñ1°%¸Ó?Õ@ð	Að —[‘[×(Ñ(ò 	=ˆEà×.Ò.Ø—?‘?×+Ñ+×GÓGà—‘˜e×.Ñ.¨u°dÓ;Õ<ð	=ð ˆr    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_indexedrc   r-  )rJ   r-   r   r  s       r   ri  z+BaseDatabaseSchemaEditor._field_indexes_sqlm  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                  d«      rV|
j                  d«      rE| j                  |«      | j                  |«      k(  r"|j                  d«       |
j                  d«       | j                  |j                  «      | j                  |j                  «      k7  xs |||f||	|
fk7  S )NFÚtor©   )Úconcreter–  ÚdeconstructÚunionÚnon_db_attrsÚpopr   r=   r-   r(   rˆ   r£   rª   rk   rŠ   )rJ   r5   r:   r�  rm  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   rz  z1BaseDatabaseSchemaEditor._field_should_be_alteredv  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 Õ&ð	'ð ×&Ò&Ø×&Ò&Ø×&Ò&Ø×&Ñ&×,Ñ,×2Ñ2×;Ñ;Ø×%Ñ%×+Ñ+×1Ñ1×:Ñ:ò;ð �N‰N˜4 Ô&Ø�N‰N˜4 Ô&ð �N‰N˜<Ô(Ø—‘˜|Ô,Ø×#Ñ# IÓ.°$×2EÑ2EÀiÓ2PÒPà�N‰N˜<Ô(Ø�N‰N˜<Ô(Ø�‰˜y×/Ñ/Ó0°D·O±OØ×Ñó5
ñ 
ò Rà˜ *Ð-°(¸HÀjÐ1QÑQð	Rr    c                 ó8   — |j                   xr |j                   S r1   )r›  r¶   ©rJ   r-   r   s      r   r  z1BaseDatabaseSchemaEditor._field_should_be_indexed›  s   € Ø�~‰~Ò2 e§l¡lÐ"2Ð2r    c                 ó8   — |j                    xr |j                   S r1   ©r   ©rJ   r5   r:   s      r   r˜  z2BaseDatabaseSchemaEditor._field_became_primary_keyž  s   € Ø×(Ñ(Ð(ÒB¨Y×-BÑ-BÐBr    c                 ór   — |j                    xr) |j                  xr |j                   xs |j                   S r1   )r   r¶   r#  s      r   r§  z0BaseDatabaseSchemaEditor._unique_should_be_added¡  s?   € à×%Ñ%Ð%ò @Ø× Ñ ò@à×%Ñ%Ð%Ò>¨×)>Ñ)>ð	
r    c                 ó¬   — | j                   | j                  |«      | j                  |j                  «      | j                  |j                  «      |dœz  S )N)r|   Ú
old_columnÚ
new_columnrÄ   )Úsql_rename_columnrk   rŠ   )rJ   r|   r5   r:   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)r|   r   rŠ   rp   rq   r^  )r   r(   rˆ   rk   rd  r   rŠ   Útarget_fieldr-   rD   rj   re  r
   Úsql_create_fk)
rJ   r-   r   r+  r|   r   rŠ   rp   rq   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 r1   ©rk   r©  ©rü  rý  rJ   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_nameÆ  s%   ø€ Ø—?‘?Ð#: 4×#:Ñ#:¸DÐ#KÀFÑ#KÓLÐLr    r5  )r   r(   rˆ   rŠ   r   r*  r-   )rJ   r-   r   r+  r0  s   `    r   rd  z,BaseDatabaseSchemaEditor._fk_constraint_nameÅ  sk   ø€ ô	Mô Ø�K‰K× Ñ Ø�\‰\ˆNÜ˜U×/Ñ/×5Ñ5×;Ñ;×DÑDÓEÀaÑHØ×Ñ×&Ñ&Ð'ØØó
ð 	
r    c                 ó<   — | j                  | j                  ||«      S r1   )r?  Úsql_delete_fk©rJ   r-   r   s      r   rs  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)rJ   r^  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\   rW   )rJ   Ú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 r1   )rD   rG   Úsupports_partial_indexesÚ&supports_deferrable_unique_constraintsrñ  r  Ú*supports_nulls_distinct_unique_constraints)rJ   rî  r^  rö  r÷  r:  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î  r^  rö  r÷  r:  )r   rî  rö  rõ  r÷  r:  ry   )rC  r^  ©r   rx   )
r@  r€   rM   rc   Úsql_unique_constraintr“   rk   rŠ   r8  Úsql_constraint)rJ   r-   r—   r   rî  r^  rö  rõ  r÷  r:  rV   r   rx   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 )
NrB  Frù  rm   Tr3  rW   )rô  rõ  )r|   r   rC  rî  r^  rö  r:  )r@  r   rÚ   rD   r(   rˆ   rŠ   r<  rk   Úsql_create_unique_indexÚsql_create_uniquer   r   rf   r
   r   rï  r8  rò  r;  )rJ   r-   r—   r   rî  r^  rö  rõ  r÷  r:  rÝ   r|   r   rC  rV   s                  r   r€   z+BaseDatabaseSchemaEditor._create_unique_sql0  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 r1   r.  r/  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_namef  s%   ø€ Ø—‘Ð'> t×'>Ñ'>ÀÐ'OÈÑ'OÓPÐPr    Ú_uniq)r©  r	   )rJ   r|   rC  r4  rL  s   `    r   r<  z0BaseDatabaseSchemaEditor._unique_constraint_namec  s,   ø€ ÙõQð "&×!8Ñ!8Ðä˜ ¨Ð2DÓEÐEr    c	                 ó˜   — | j                  |||||¬«      sy |s|s|s|r| j                  }	n| j                  }	| j                  |	||«      S )NrB  )r@  r,  r#  r?  )
rJ   r-   r   rî  r^  rö  rõ  r÷  r:  rV   s
             r   r™  z+BaseDatabaseSchemaEditor._delete_unique_sqln  s_   € ð ×%Ñ%ØØ!ØØ#Ø)ð &ô 
ð Ù™¡9±Ø×'Ñ'‰Cà×(Ñ(ˆCØ×*Ñ*¨3°°tÓ<Ð<r    c                 ób   — | j                   | j                  |«      | j                  d|iz  dœz  S )Nrn   rC  )rE  rk   r„   )rJ   r   rn   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)r|   r   rn   )	rD   rG   Ú supports_table_check_constraintsr
   Úsql_create_checkr   r(   rˆ   rk   )rJ   r-   r   rn   s       r   rª  z*BaseDatabaseSchemaEditor._create_check_sql�  sU   € Ø�‰×'Ñ'×HÒHØÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&Øô	
ð 	
r    c                 ó~   — | j                   j                  j                  sy | j                  | j                  ||«      S r1   )rD   rG   rR  r?  Úsql_delete_checkr3  s      r   r�  z*BaseDatabaseSchemaEditor._delete_check_sql—  s3   € Ø�‰×'Ñ'×HÒHØØ×*Ñ*¨4×+@Ñ+@À%ÈÓNÐNr    c                 óŒ   — t        |t        |j                  j                  | j                  «      | j	                  |«      ¬«      S )Nr  )r
   r   r(   rˆ   rk   )rJ   Ú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.NrC  r¶   r   r  rn   rr  rÄ   )rD   rG   Útruncates_namesÚintrospectionÚidentifier_converterr   rj   rã  rg   Úget_constraintsr(   rˆ   Úitemsrc   )rJ   r-   ræ  r¶   r   r  rr  rn   r‘  r2  r   rg   r�   ÚresultÚinfodicts                  r   r:  z*BaseDatabaseSchemaEditor._constraint_names£  s´  € ð Ð#ð )ö	ð ð —‘×/Ñ/×?Ò?ð —O‘O×1Ñ1×FÑFÜ% d¨D¯O©O×,?Ñ,?×,OÑ,OÓ,QÓRôð Ÿ™×6Ñ6×KÑKÈDÓQñ	Rð	ˆ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"  r5  r6  z) of PK constraints for )r:  r=  r>  r(   rˆ   rQ   Ú_delete_primary_key_sql)rJ   r-   r}  rD  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•  )r|   r   rC  )	r
   Úsql_create_pkr   r(   rˆ   rk   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 r1   )r?  Úsql_delete_pkr3  s      r   ra  z0BaseDatabaseSchemaEditor._delete_primary_key_sqlë  r4  r    c                 ó2   — |rd| j                  |«      z   S dS )NzCOLLATE r\   )rk   )rJ   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_procedurerk   r“   rQ   )rJ   Úprocedure_namerk  rV   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedureñ  s=   € Ø×'Ñ'ØŸ™¨Ó8ØŸ8™8 KÓ0ñ+
ñ 
ˆð 	�‰�SÕr    )FT)rW   )F)r\   r1   )NNNNN)NNNNNN)NNNNNNN)T)NNNNNNNNrÅ   )vÚ__name__Ú
__module__Ú__qualname__Ú__doc__r’   rK  rX  r  rf  rh  rÒ  rÉ  rÊ  rÏ  rÎ  rÍ  rt  r(  r¥  rD  r„   Úsql_delete_constraintrE  rS  rU  rI  r#  r+  r‹   rc  r2  rÿ  rH  r  r,  rd  rf  rl  rR  rÖ  rK   rO   rR   rQ   rk   r�   rÂ   r‚   r«   r¬   r°   r®   rª   r´   Ústaticmethodrö   r­   rf   r  r  r  r  r  r  r  r(  r0  r"  rO  rý   r[  ro  rx  r…  r�  r|  r¢  rg  r¡  r   rþ   r§   r{  r©  rì  rï  rò  r-  rœ  r  r   rÿ   ri  rz  r  r˜  r§  rž  r�   rd  rs  r8  r;  r@  rF  r€   r<  r™  rP  rª  r�  r?  r:  r¦  r¨  ra  r¤   rn  rW   r    r   rB   rB   L   sY  „ ñð 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ò\ò@ANóF
ò6òò
òò)ò&Sð ñó ðò2Wò$ò!>òF.ò*	Aò4ò-ò+òòAò*Vò* SòDHò&ò	
òV$òp.ó@Q
òf	ð( ór$òhó:$
ðN 16ó
ò8,
ò\	
ò/ò
ó@ó@
òò

ð ØØØØØØØØØØô4
ólò$
òSòò&ó#RòJ3òCò
ò
ò
ò*
òLò5òð ØØØØó
ð: ØØØØØó2
ðp ØØØØØØó1
óf	Fð ØØØØØó=ò2
ò
òOò

ð ØØØØØØØó-ó^Oò

òLóLôr    rB   )#Úloggingr*   r   Údjango.confr   Údjango.core.exceptionsr   Ú!django.db.backends.ddl_referencesr   r   r   r	   r
   r   Údjango.db.backends.utilsr   r   r   Údjango.db.modelsr   r   r   Údjango.db.models.sqlr   Údjango.db.transactionr   r   Údjango.utilsr   Ú	getLoggerr_   r   r.   r<   rB   rW   r    r   ú<module>r     sd   ðÛ Û Ý å  Ý -÷÷ ÷ SÑ Rß <Ñ <Ý &ß DÝ !à	ˆ×	Ñ	Ð6Ó	7€ò1ò 
ò
÷.jò jr    