Ë
    ¦#ijMB ã                   ó  — 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 d dl	m
Z
mZmZmZmZmZ d dlmZmZmZ d dlmZmZ d d	lmZ d d
lmZ 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)Úchain)Úsettings)Ú
FieldError)ÚColumnsÚExpressionsÚForeignKeyNameÚ	IndexNameÚ	StatementÚTable)Únames_digestÚsplit_identifierÚtruncate_name)Ú
DeferrableÚIndex)ÚCompositePrimaryKey)Ú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      úX/var/www/html/office/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>;   ó#   øè ø€ ò 	
àÜ$ S¨)Ô4ô ñ	
ùó   ƒc              3   ó:   •K  — | ]  }t        |‰«      r|–— Œ y ­wr2   r3   )r4   r5   Ú	new_fields     €r   r7   z+_related_non_m2m_objects.<locals>.<genexpr>@   r8   r9   )Úzipr/   r.   Ú_related_non_m2m_objectsÚremote_field)r6   r;   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r=   r=   7   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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(drd!„Z)d"„ Z*d#„ Z+dsd%„Z,d&„ Z-d'„ Z.d(„ Z/dtd)„Z0d*„ Z1d+„ Z2d,„ Z3d-„ Z4d.„ Z5d/„ Z6e7d0„ «       Z8d1„ Z9d2„ Z:d3„ Z;d4„ Z<d5„ Z=d6„ Z>d7„ Z?d8„ Z@d9„ ZAd:„ ZBd;„ ZCd<„ ZDd=„ ZEd>„ ZFd?„ ZGd@„ ZHdA„ ZIdtdB„ZJdC„ ZK	 dtdD„ZLdE„ ZMdtdF„ZN	 dtdG„ZOdH„ ZPdI„ ZQdJ„ ZRdK„ ZSdudM„ZTdvdN„ZUdO„ ZVdP„ ZWdddLdLdd$dd$ddddQœdR„ZXdvdS„ZYdT„ ZZdU„ Z[dV„ Z\dW„ Z]dvdX„Z^dY„ Z_dZ„ Z`d[„ Zad\„ Zbd]„ Zcd^„ Zdd_„ Zed`„ Zfda„ Zg	 	 	 	 	 dwdb„Zh	 	 	 	 	 	 dxdc„Zi	 	 	 	 	 	 	 dydd„Zjdzde„Zk	 	 	 	 	 	 dxdf„Zldg„ Zmdh„ Zndi„ Zodj„ Zp	 	 	 	 	 	 	 	 d{dk„Zqdl„ Zrdtdm„Zsdn„ Ztdo„ Zud|dp„Zvdsdq„Zwy)}Ú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 DEFAULTz,ALTER TABLE %(table)s DROP COLUMN %(column)szDALTER 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PRIMARY KEY (%(columns)s)z?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 r2   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrE   rF   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 r2   )Údeferred_sqlrJ   r   rE   ÚaliasÚ	__enter__)rK   s    r   rP   z"BaseDatabaseSchemaEditor.__enter__    s>   € ØˆÔØ× Ò Ü  §¡×!6Ñ!6Ó7ˆDŒKØ�K‰K×!Ñ!Ô#Øˆr!   c                 ó¢   — |€#| j                   D ]  }| j                  |d «       Œ | j                  r| j                  j	                  |||«       y y r2   )rN   ÚexecuterJ   r   Ú__exit__)rK   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rS   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))ÚparamsrW   )Úextraú;Ú N)rF   rE   Úin_atomic_blockrH   rI   r   ÚstrÚloggerÚdebugÚrstripÚendswithrG   ÚappendÚtupleÚmapÚquote_valueÚcursorrR   )rK   rW   rZ   Úendingrh   s        r   rR   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 r2   )rE   ÚopsÚ
quote_name)rK   r   s     r   rl   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:                  }t=        |t>        «      r*|j	                  ‰ jA                  |jB                  «      «       ‰ jD                  ‰ j)                  ‰j                   j                   «      d	jG                  d
„ g |¢|¢­D «       «      dœz  }‰j                   jH                  rC‰ j                  j2                  jK                  ‰j                   jH                  «      }|r|d|z   z  }||fS c c}w )z-Take a model and return its table definition.©rE   Úcheckú z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldc              3   óB   •K  — | ]  }|j                  ‰‰«      –— Œ y ­wr2   )Úconstraint_sql)r4   Ú
constraintr.   rK   s     €€r   r7   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  s&   øè ø€ ò #àð ×)Ñ)¨%°×6ñ#ùs   ƒú, c              3   ó6   K  — | ]  }|rt        |«      –— Œ y ­wr2   )r_   )r4   Ú	statements     r   r7   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>'  s   è ø€ ò $àÙô �I—ñ$ùs   ‚)ÚtableÚ
definition)&r)   Úunique_togetherÚ	get_fieldrN   rd   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersrE   Úsql_check_constraintÚdb_type_suffixÚextendr>   Údb_constraintr.   Údb_tableÚ
field_nameÚcolumnÚsql_create_inline_fkrl   rH   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typerk   Úautoinc_sqlÚconstraintsÚ
create_sqlÚpkÚ
isinstancer   Ú_pk_constraint_sqlÚcolumnsÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rK   r.   Úfield_namesr   ÚfieldsÚcolumn_sqlsrZ   r~   Úextra_paramsÚ	db_paramsÚcol_type_suffixrq   rr   r�   Úconstraint_sqlsry   r“   rW   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ô#ô ð
 �[‰[�^‰^ˆÜ�bÔ-Ô.Ø×"Ñ" 4×#:Ñ#:¸2¿:¹:Ó#FÔGà×#Ñ#Ø—_‘_ U§[¡[×%9Ñ%9Ó:ØŸ)™)ñ $à!A ;Ð!A°Ñ!Aô$ó ñ'
ñ 
ˆð �;‰;×$Ò$Ø!Ÿ_™_×0Ñ0×?Ñ?Ø—‘×)Ñ)óˆNñ Ø�s˜^Ñ+Ñ+�Ø�Fˆ{Ðùòy Ms    "Qc              #   ó>  K  — |–— |j                  d«      x}r| j                  |«      –— |j                  }|j                  «       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                  j(                  sd–— |j                   rd–— n|j*                  rd–— |j,                  xs |j.                  j,                  }|rU| j                  j                  j0                  r5|j*                  r)| j                  j2                  j5                  |d¬	«      –— | j                  j                  j6                  r+|j8                  r| j;                  |j8                  «      –— y y y ­w)
NÚ	collationzDEFAULT FTzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlÚnullÚhas_db_defaultÚdb_default_sqlr‡   Úskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlrE   rH   Úrequires_literal_defaultsÚprepare_defaultrd   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚ	generatedÚ_column_generated_sqlÚimplied_column_nullÚuniquer™   r)   Úsupports_tablespacesrk   rš   Úsupports_comments_inlineÚ
db_commentÚ_comment_sql)rK   Úcolumn_db_typerZ   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_sql7  sR  è ø€ ð ÒØ'×+Ñ+¨KÓ8Ð8ˆ9Ð8Ø×#Ñ# IÓ.Ò.à�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Ø�?‰?×#Ñ#×<Ò<À×AQÒAQØ×#Ñ# E×$4Ñ$4Ó5Ó5ð BRÐ<ù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.
        rn   Útype©NNrp   )r„   rE   r˜   rÇ   )rK   r.   r   r¿   r¾   r½   rZ   s          r   rƒ   z#BaseDatabaseSchemaEditor.column_sqlz  sn   € ð  ×-Ñ-¸¿¹Ð-ÓIˆØ(¨Ñ0ˆàÐ!ØØˆà�H‰Hà×%Ñ%Ø"ØØØØ#Ø#óó
ð ð
ð 	
r!   c                  ó   — y)z�
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob).
        FrX   ©rK   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.
        FrX   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©rK   Ú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.
        ú%srX   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-   rn   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr2   )r²   ©r4   ÚprK   s     €r   r7   z:BaseDatabaseSchemaEditor.db_default_sql.<locals>.<genexpr>Â  s   øè ø€ Ò I¸Q ×!5Ñ!5°a×!8Ñ Iùó   ƒ)Údjango.db.models.expressionsr×   Ú_db_default_expressionr”   r°   r   r.   Úget_compilerrE   ÚcompilerH   r±   re   )	rK   r   r×   Ú
db_defaultrW   ÚqueryÚcompilerrÀ   rZ   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r2   ©rg   rÙ   s     €r   r7   zABaseDatabaseSchemaEditor._column_generated_sql.<locals>.<genexpr>Ë  s   øè ø€ Ò3XÈA°D×4DÑ4DÀQ×4GÑ3XùrÛ   rX   zGENERATED ALWAYS AS (z) )rÄ   rE   Ú
db_persistrH   r±   re   )rK   r   Úexpression_sqlrZ   Ú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û   rE   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   rg   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`.
        Nrn   rÉ   )r¢   rR   rE   rH   Úsupports_commentsr)   Údb_table_commentÚalter_db_table_commentrº   r‚   r»   r„   Ú_alter_column_comment_sqlrN   r‡   Ú_model_indexes_sqlÚlocal_many_to_manyr>   ÚthroughÚauto_createdÚcreate_model)rK   r.   rW   rZ   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_modelrR   Úsql_delete_tablerl   r‰   ÚlistrN   r”   r   Úreferences_tableÚremove)rK   r.   r   rW   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©rZ   )Úcontains_expressionsrE   rH   Úsupports_expression_indexesrR   r’   ©rK   r.   Úindexs      r   Ú	add_indexz"BaseDatabaseSchemaEditor.add_index1  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  rE   rH   r  rR   Ú
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  )rE   rH   Úcan_rename_indexrR   Ú_rename_index_sqlr   r  r  )rK   r.   Ú	old_indexÚ	new_indexs       r   Úrename_indexz%BaseDatabaseSchemaEditor.rename_indexE  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’   rR   ©rK   r.   ry   rW   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraintO  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  rR   r!  s       r   Úremove_constraintz*BaseDatabaseSchemaEditor.remove_constraintW  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)re   Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquer)   r€   rR   r�   )	rK   r.   Úold_unique_togetherÚnew_unique_togetherrœ   ÚoldsÚnewsr›   r   s	            r   Úalter_unique_togetherz.BaseDatabaseSchemaEditor.alter_unique_together]  sÖ   € ð -@Ö@ &”�f•Ð@ˆÐ@Ø,?Ö@ &”�f•Ð@ˆÐ@à—o‘o dÓ+ò 	ˆFØ×'Ñ'ØØØ°Ñ6Ø×&Ñ&õ	ð	ð  Ÿ?™?¨4Ó0ò 	AˆKØ@KÖL°u�e—k‘k×+Ñ+¨EÕ2ÐLˆFÐLØ�L‰L˜×0Ñ0°¸Ó?Õ@ñ	Aùò AùÚ@ùò Ms   …C�CÂ "Cc                 ó²  — |D �ch c]  }t        |«      ’Œ }}|D �ch c]  }t        |«      ’Œ }}|j                  |«      D ]#  }| j                  ||dddœ| j                  «       Œ% |j                  |«      D ]M  }|D �cg c]  }|j                  j                  |«      ‘Œ }}| j                  | j                  ||d¬«      «       ŒO yc c}w c c}w c c}w )z®
        Deal with a model changing its index_together. The input
        index_togethers must be doubly-nested, not the single-nested
        ["foo", "bar"] format.
        TF)r  r¸   Ú_idx)rœ   ÚsuffixN)re   r&  r'  Úsql_delete_indexr)   r€   rR   Ú_create_index_sql)	rK   r.   Úold_index_togetherÚnew_index_togetherrœ   r+  r,  r›   r   s	            r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_togetherr  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 ú(rz   ú)r   )r)   r‘   r   Úindexesr€   r‹   Ú_constraint_namesr¨   rE   rH   Ú*allows_multiple_constraints_on_same_fieldsr_   Ú_unique_constraint_namer‰   ÚlenÚ
ValueErrorr˜   rR   Ú_delete_constraint_sql)rK   r.   rœ   Úconstraint_kwargsrW   ry   Úmeta_constraint_namesÚmeta_index_namesr   r–   Ú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)rE   rH   Úignores_table_name_caseÚlowerrR   Úsql_rename_tablerl   rN   r”   r   Úrename_table_references)rK   r.   Úold_db_tableÚnew_db_tablerW   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_commentrE   rH   r   rR   rl   r)   r‰   rg   )rK   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)rR   Úsql_retablespace_tablerl   r)   r‰   )rK   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=                  «       s�| j?                  |«      sp| jA                  |«      �_| jC                  |d|d¬«      \  }}| jD                  | j-                  |j                  j                   «      |dœz  }| j;                  ||«       |jF                  rp| j                  j                  jH                  rP| j                  j                  jJ                  s0|d   } | j:                  | jM                  ||||jF                  «      Ž  | j2                  jO                  | jQ                  ||«      «       | j                  j                  jR                  r| j                  jU                  «        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¿   Nrn   rp   ro   rs   z%s.r]   )r   Ú	namespacer‹   rq   rr   Ú
deferrable)r}   r‹   r~   ©Údrop©r}   ÚchangesrÉ   )+r   r>   r  r)   r  r  rƒ   r†   rE   r„   r…   rH   r�   rˆ   Úsql_create_column_inline_fkr.   r‰   r€   rŠ   r‹   r   Ú_fk_constraint_namerl   rk   Údeferrable_sqlrN   rd   rŽ   Úsql_create_columnrR   r«   r®   r¯   Ú_alter_column_default_sqlÚsql_alter_columnr»   r   rº   r  r‡   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rK   r.   r   r~   rZ   r    rŸ   Úconstraint_suffixrq   rr   ra  Ú_rW   Ú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.
        rn   rÉ   NT©Úforeign_key)r}   r‹   )r   r>   r  r)   r  r  r„   rE   r?  r‹   rR   Ú_delete_fk_sqlÚsql_delete_columnrl   r‰   rH   rn  ro  r  rN   r”   r   Úreferences_columnr  )rK   r.   r   Úfk_namesÚfk_namerW   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.
        Nrn   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„   rE   r>   rC  r  r)   r  Ú_alter_many_to_manyrµ   rè   rÄ   r   Ú_alter_field)rK   r.   r6   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_fieldI  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‹   )rE   Údata_type_check_constraintsÚdb_type_parametersr�   ÚKeyError)rK   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                  |#«       |jY                  «       rL|jY                  «       r|jZ                  |jZ                  k7  rW|jU                  | j]                  |||«      «       n4|jY                  «       r$|jU                  | j]                  |||d¬«      «       d	}$|j^                  rz|j^                  sn|jY                  «       s^| ja                  |«      }%| ja                  |«      }&| jc                  |«      s+|%|&k7  r&|&�$d}$|jU                  | je                  |||«      «       |j^                  |j^                  k7  r&| jg                  |||«      }"|"r|jU                  |"«       |ji                  «       xs |jY                  «       xr |j^                  xr |j^                   }'|s|�r‰|'s||z  }| j                  j                  jj                  r9|r7tm        to        |Ž «      \  }}(djq                  |«      tm        ts        |(Ž «      fg}|D ]J  \  }}(| j                  | jt                  | jw                  |j                  j                  «      |dœz  |(«       ŒL |'rØ|jY                  «       s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»   )ÚignoreTru  r:  r;  z!) of foreign key constraints for ú.F)r¸   r   r7  z) of unique constraints for r¤   )r  Útype_r7  )ro   r7  z) of check constraints for rn   rc  Nrz   re  rÕ   )r}   r‹   rù   ©rœ   rÉ   r   rs   Ú_fkÚ_check©r0  ro   )IÚsetrE   rH   r�   r>   rˆ   r~  r?  r‹   rB  rC  r)   r‰   ÚaddrR   rw  r¸   Ú_field_became_primary_keyr‘   r   Ú_delete_unique_sqlr¨   r   r=   Úrelated_modelr   Údb_indexr>  r   r0  Ú_delete_index_sqlr‘  Ú_delete_check_sqlÚ_rename_field_sqlrN   r”   r   Úrename_column_referencesr†   r   r»   Ú_alter_column_type_sqlrd   r‡   r«   rà   Ú"_alter_column_database_default_sqlrª   r¯   r®   rk  Ú_alter_column_null_sqlrò   Úsupports_combined_altersre   r<   r˜   r   rl  rl   r¬   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr�   r2  Ú_create_primary_key_sqlr„   rŽ   Ú_create_index_nameÚ_create_check_sqlrn  ro  )4rK   r.   r6   r;   rƒ  r…  r‚  r„  r�  Úfks_droppedrz  r{  ry   rF  rH  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relrA   Úrel_fk_namesr  rG  Úindex_namesÚ
index_nameÚold_db_checkÚnew_db_checkrW   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrZ   rÀ   Úrels_to_updater@   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationrq  Úrelrr  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Ô$Ø×Ñ Ô.à×#Ñ#Ô%à×,Ñ,Ô.Ø×'Ñ'¨9×+?Ñ+?Ò?à—‘Ø×;Ñ;¸EÀ9ÈiÓXõð ×%Ñ%Ô'Ø�N‰NØ×7Ñ7Ø˜9 i°dð 8ó ôð "'ÐØ�>Š> )§.¢.¸×9QÑ9QÔ9SØ×0Ñ0°Ó;ˆKØ×0Ñ0°Ó;ˆKà×.Ñ.¨yÔ9Ø ;Ò.ØÐ+à)-Ð&Ø—‘Ø×2Ñ2°5¸)ÀYÓOôð �>‰>˜YŸ^™^Ò+Ø×2Ñ2°5¸)ÀYÓOˆHÙØ×#Ñ# HÔ-ð ×!Ñ!Ó#ÒA y×'?Ñ'?Ó'Aò'6à�~‰~Ò4 i§n¡nÐ"4ð 	$ñ ’lÙ.ð ˜<Ñ'�à�‰×'Ñ'×@Ò@ÁWÜ#¤C¨ MÓ2‘��VØ ŸI™I c›N¬E´%¸°.Ó,AÐBÐC�à&ò ‘��VØ—‘Ø×)Ñ)à!%§¡°·±×1EÑ1EÓ!FØ#&ññð
 õðñ +Ø ×/Ñ/Ô1Ø"&�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ùòI
%ùòv  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.
        Nrn   rÉ   )r‹   rÉ   )
rE   rH   r´   r³   r„   rª   Úsql_alter_column_nullÚsql_alter_column_not_nullrl   r‹   )rK   r.   r6   r;   r„  rW   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.
        rn   rÉ   ©r‹   rÉ   rù   )r¯   r°   rE   rH   r±   r²   r„   rª   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrl   r‹   )
rK   r.   r6   r;   rd  rÂ  rù   rZ   r„  rW   s
             r   rk  z2BaseDatabaseSchemaEditor._alter_column_default_sql7  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]   rn   rÉ   rÏ  )rÑ  rÒ  r¬   r„   rE   rl   r‹   )	rK   r.   r6   r;   rd  rW   rÀ   rZ   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.
        rp   r]   )r‹   rÉ   r¤   rU  )r©   r)   r‰   rE   rH   r   r   r»   r  rd   r¼   Úsql_alter_column_typerl   r‹   )rK   r.   r6   r;   r…  r°  r±  r¿  Úcollate_sqlÚcomment_sqlrW   rZ   s               r   r¤  z/BaseDatabaseSchemaEditor._alter_column_type_sqly  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‹   rU  )Úsql_alter_column_commentrl   r)   r‰   r‹   r¼   )rK   r.   r;   r…  Únew_db_comments        r   r  z2BaseDatabaseSchemaEditor._alter_column_comment_sql§  sZ   € à×)Ñ)àŸ™¨¯©×)=Ñ)=Ó>ØŸ/™/¨)×*:Ñ*:Ó;Ø×,Ñ,¨^Ó<ññð ð
ð 	
r!   c                 ó,   — | j                  |xs d«      S )Nr]   rç   )rK   rU  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‰   rS  r‰  r€   Úm2m_reverse_field_nameÚm2m_field_name)rK   r.   r6   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é   éÈ   rq  é   Né   r:  r   zD%séÿÿÿÿ)r   r   rE   rk   Úmax_name_lengthr˜   rB  Úisdigit)	rK   Ú
table_nameÚcolumn_namesr0  rq  Ú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)Nr:  r   rp   r]   )rB  r™   r   ÚDEFAULT_INDEX_TABLESPACEr)   rE   rk   rš   )rK   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]   rX   )rK   Ú	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–   )rE   rH   Úsupports_covering_indexesr   r   r)   r‰   rl   )rK   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   r0  Úusingr™   Úcol_suffixesrW   Ú	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_colsrn   )r™   c                  óN   •— ‰€ ‰j                   | i |¤ŽŠ‰j                  ‰«      S r2   )r¬  rl   )ÚargsÚkwargsr   rK   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name0  s.   ø€ àˆ|Ø.�t×.Ñ.°Ð?¸Ñ?�Ø—?‘? 4Ó(Ð(r!   )r}   r   rö  r–   r[   rñ  rù  )r   rÞ   rE   rï  r‹   Úsql_create_indexr)   r‰   r   r   rl   r
   Ú_index_columnsr   rg   rò  rõ  )rK   r.   rœ   r   r0  rö  r™   r÷  rW   rø  rñ  rù  rú  râ   rš   r   r–   r  r}   r  s   `  `                r   r2  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   r1  r   r)   r‰   rl   Úpartsr}   r  rN   r”   Úreferences_indexr  )rK   r.   r   rW   r|   rè  r¶  s          r   r   z*BaseDatabaseSchemaEditor._delete_index_sqlE  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‰   rl   )rK   r.   r	  r
  s       r   r  z*BaseDatabaseSchemaEditor._rename_index_sqlW  sH   € ÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—_‘_ XÓ.Ø—_‘_ XÓ.ô	
ð 	
r!   c                 ó4   — t        ||| j                  |¬«      S )N)r÷  )r   rl   )rK   r}   r–   r÷  rø  s        r   r  z'BaseDatabaseSchemaEditor._index_columns_  s   € Ü�u˜g t§¡À\ÔRÐRr!   c                 óÜ  — |j                   j                  r,|j                   j                  s|j                   j                  rg S g }|j                   j                  D ]#  }|j                  | j                  ||«      «       Œ% |j                   j                  D ]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‡   rm  r>  r  rE   rH   r  rd   r’   )rK   r.   Úoutputr   r  s        r   r  z+BaseDatabaseSchemaEditor._model_indexes_sqlb  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_indexedrd   r2  )rK   r.   r   r  s       r   rm  z+BaseDatabaseSchemaEditor._field_indexes_sqlu  s<   € ð ˆØ×(Ñ(¨°Ô6Ø�M‰M˜$×0Ñ0°À¸wÐ0ÓGÔHØˆr!   c                 ó¾  — |j                   s%|j                  s|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                   rD|j                   r8| j                  |j                  «      | j                  |j                  «      k7  ry|j                  r&|j                  r|j                  |j                  k7  ry|||f||	|
fk7  S )NFÚtorà   T)Úconcreter   rš  ÚdeconstructÚunionÚnon_db_attrsÚpopr>   r.   r)   r‰   r¨   r¬   rl   r‹   r   )rK   r6   r;   r“  rq  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   r~  z1BaseDatabaseSchemaEditor._field_should_be_altered~  sù  € Ø×#Ò# y×'=Ò'=Ø×#Ò# y×'=Ò'=àØ’œ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˜<Ô(à×ÒØ×"Ò"Ø—‘ ×!1Ñ!1Ó2°d·o±oÀi×FVÑFVÓ6WÒWàà×"Ò"Ø×&Ò&Ø—‘ )§.¡.Ò0àØ˜( JÐ/°H¸hÈ
Ð3SÑSÐSr!   c                 ó8   — |j                   xr |j                   S r2   )rŸ  r¸   ©rK   r.   r   s      r   r  z1BaseDatabaseSchemaEditor._field_should_be_indexed¯  s   € Ø�~‰~Ò2 e§l¡lÐ"2Ð2r!   c                 ó8   — |j                    xr |j                   S r2   ©r   ©rK   r6   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 r2   )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_columnrl   r‹   )rK   r}   r6   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‹   rq   rr   rb  )r   r)   r‰   rl   rh  r   r‹   Útarget_fieldr.   rE   rk   ri  r   Úsql_create_fk)
rK   r.   r   r0  r}   r   r‹   rq   rr   rb  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 r2   ©rl   r¬  ©rÿ  r   rK   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_nameÚ  s%   ø€ Ø—?‘?Ð#: 4×#:Ñ#:¸DÐ#KÀFÑ#KÓLÐLr!   r:  )r	   r)   r‰   r‹   r   r-  r.   )rK   r.   r   r0  r3  s   `    r   rh  z,BaseDatabaseSchemaEditor._fk_constraint_nameÙ  sk   ø€ ô	Mô Ø�K‰K× Ñ Ø�\‰\ˆNÜ˜U×/Ñ/×5Ñ5×;Ñ;×DÑDÓEÀaÑHØ×Ñ×&Ñ&Ð'ØØó
ð 	
r!   c                 ó<   — | j                  | j                  ||«      S r2   )rD  Úsql_delete_fk©rK   r.   r   s      r   rw  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)rK   rb  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]   rX   )rK   Ú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 r2   )rE   rH   Úsupports_partial_indexesÚ&supports_deferrable_unique_constraintsrô  r  Ú*supports_nulls_distinct_unique_constraints)rK   rñ  rb  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ñ  rb  rù  rú  r=  )r   rñ  rù  rø  rú  r=  rz   )r–   rb  ©r   ry   )
rC  r�   rN   rd   Úsql_unique_constraintr˜   rl   r‹   r;  Úsql_constraint)rK   r.   rœ   r   rñ  rb  rù  rø  rú  r=  rW   r   ry   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 )
NrE  Frü  rn   Tr8  rX   )r÷  rø  )r}   r   r–   rñ  rb  rù  r=  )rC  r   rÞ   rE   r)   r‰   r‹   rA  rl   Úsql_create_unique_indexÚsql_create_uniquer  r   rg   r   r   rò  r;  rõ  r>  )rK   r.   rœ   r   rñ  rb  rù  rø  rú  r=  râ   r}   r   r–   rW   s                  r   r�   z+BaseDatabaseSchemaEditor._create_unique_sqlD  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 r2   r1  r2  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_namez  s%   ø€ Ø—‘Ð'> t×'>Ñ'>ÀÐ'OÈÑ'OÓPÐPr!   Ú_uniq)r¬  r
   )rK   r}   r–   r9  rO  s   `    r   rA  z0BaseDatabaseSchemaEditor._unique_constraint_namew  s,   ø€ ÙõQð "&×!8Ñ!8Ðä˜ ¨Ð2DÓEÐEr!   c	                 ó˜   — | j                  |||||¬«      sy |s|s|s|r| j                  }	n| j                  }	| j                  |	||«      S )NrE  )rC  r1  r(  rD  )
rK   r.   r   rñ  rb  rù  rø  rú  r=  rW   s
             r   r�  z+BaseDatabaseSchemaEditor._delete_unique_sql‚  s_   € ð ×%Ñ%ØØ!ØØ#Ø)ð &ô 
ð Ù™¡9±Ø×'Ñ'‰Cà×(Ñ(ˆCØ×*Ñ*¨3°°tÓ<Ð<r!   c                 ób   — | j                   | j                  |«      | j                  d|iz  dœz  S )Nro   rF  )rH  rl   r…   )rK   r   ro   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   ro   )	rE   rH   Ú supports_table_check_constraintsr   Úsql_create_checkr   r)   r‰   rl   )rK   r.   r   ro   s       r   r­  z*BaseDatabaseSchemaEditor._create_check_sql¡  sU   € Ø�‰×'Ñ'×HÒHØÜØ×!Ñ!Ü˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&Øô	
ð 	
r!   c                 ó~   — | j                   j                  j                  sy | j                  | j                  ||«      S r2   )rE   rH   rU  rD  Úsql_delete_checkr6  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‰   rl   )rK   Útemplater.   r   s       r   rD  z/BaseDatabaseSchemaEditor._delete_constraint_sql°  s6   € ÜØÜ˜Ÿ™×,Ñ,¨d¯o©oÓ>Ø—‘ Ó&ô
ð 	
r!   c
           
      ó$  — |�£|D �
cg c]˜  }
| j                   j                  j                  rQ| j                   j                  j	                  t        |
| j                   j                  j                  «       «      «      n$| j                   j                  j	                  |
«      ‘Œš }}
| j                   j                  «       5 }| j                   j                  j                  ||j                  j                  «      }ddd«       g }j                  «       D ]g  \  }
}|�	||d   k(  sŒ|�	|d   |k7  rŒ|�	|d   |k7  rŒ'|�	|d   |k7  rŒ2|�	|d   |k7  rŒ=|�|d   sŒE|�	|d   |k7  rŒP|	r|
|	vsŒW|j                  |
«       Œi |S c c}
w # 1 sw Y   ŒŒxY w)	z@Return all constraint names matching the columns and conditions.Nr–   r¸   r   r  ro   rv  rÉ   )rE   rH   Útruncates_namesÚintrospectionÚidentifier_converterr   rk   ræ  rh   Úget_constraintsr)   r‰   Úitemsrd   )rK   r.   ré  r¸   r   r  rv  ro   r•  r7  r   rh   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                 óV   ‡ — ‰ j                   ddj                  ˆ fd„|D «       «      iz  S )Nr–   rz   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr2   ©rl   )r4   r‹   rK   s     €r   r7   z>BaseDatabaseSchemaEditor._pk_constraint_sql.<locals>.<genexpr>è  s   øè ø€ Ò O¸V §¡°×!8Ñ OùrÛ   )Úsql_pk_constraintr˜   )rK   r–   s   ` r   r•   z+BaseDatabaseSchemaEditor._pk_constraint_sqlæ  s/   ø€ Ø×%Ñ%Ø�t—y‘yÓ OÀwÔ OÓOð)
ñ 
ð 	
r!   c                 óö   — | j                  |d¬«      }|r<t        |«      dk7  r.t        dt        |«      ›d|j                  j                  ›�«      ‚|D ]#  }| j                  | j                  ||«      «       Œ% y )NTr%  r:  r;  z) of PK constraints for )r?  rB  rC  r)   r‰   rR   Ú_delete_primary_key_sql)rK   r.   r�  rH  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   r–   )	r   Úsql_create_pkr   r)   r‰   rl   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 r2   )rD  Úsql_delete_pkr6  s      r   rh  z0BaseDatabaseSchemaEditor._delete_primary_key_sql  r7  r!   c                 ó2   — |rd| j                  |«      z   S dS )NzCOLLATE r]   re  )rK   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_procedurerl   r˜   rR   )rK   Úprocedure_namerr  rW   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedure
  s=   € Ø×'Ñ'ØŸ™¨Ó8ØŸ8™8 KÓ0ñ+
ñ 
ˆð 	�‰�SÕr!   )FT)rX   )F)r]   r2   )NNNNN)NNNNNN)NNNNNNN)T)NNNNNNNNrÊ   )xÚ__name__Ú
__module__Ú__qualname__Ú__doc__r—   rO  r\  r  rj  rl  rÕ  rÌ  rÍ  rÒ  rÑ  rÐ  rx  r+  r¨  rG  r…   Úsql_delete_constraintrH  rf  rV  rX  rL  r(  r.  rŒ   rg  r5  r  rK  r  r1  rk  rm  rs  rV  rÙ  rL   rP   rS   rR   rl   r¢   rÇ   rƒ   r­   r®   r²   r°   r¬   r¶   Ústaticmethodrû   r¯   rg   r  r  r  r  r  r"  r$  r-  r5  r'  rS  r  r_  rs  r|  r‰  r‘  r€  r¦  rk  r¥  r¤  r  r¼   r  r¬  rï  rò  rõ  r2  r   r  r  r  rm  r~  r  rœ  rª  r¢  rŽ   rh  rw  r;  r>  rC  rI  r�   rA  r�  rS  r­  r¡  rD  r?  r•   r©  r«  rh  r©   ru  rX   r!   r   rC   rC   N   sc  „ ñð AÐØJÐØVÐØ5ÐàTÐØ:ÐØPÐØCÐØ FÐØPÐØ"HÐØ'BÐ$ØFÐàNð ð 	Qð ð AÐØ.ÐØLÐØ9€NØ3ÐàXÐØ,Ðð	?ð ð .Ðð	@ð ð  ÐØ"&ÐØ)€Mð	9ð ð
	Bð ð IÐØ,Ðð 	Rð ð *€Mà9ÐàIÐØVÐóUòòAó,ò>4òaòJA6óF
ò6òò
òò)ò&Sð ñó ðò2Wò$ò!>òF.ò*	Aò4ò-ò+òòAò*Vò* SòDHò&ò	
òV$òp.ó@Q
òf	ð( óq$òfó:$
ðN 16ó
ò8,
ò\	
ò/ò
óBó@
òò

ð ØØØØØØØØØØô4
ólò$
òSòò&ó/Tòb3òCò
ò
ò
ò*
òLò5òð ØØØØó
ð: ØØØØØó2
ðp ØØØØØØó1
óf	Fð ØØØØØó=ò2
ò
òOò

ð ØØØØØØØó-ò^
ó
Oò

òLóLôr!   rC   )&Úloggingr+   r   Ú	itertoolsr   Ú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   Ú!django.db.models.fields.compositer   Údjango.db.models.sqlr   Údjango.db.transactionr   r   Údjango.utilsr   Ú	getLoggerr`   r    r/   r=   rC   rX   r!   r   ú<module>rˆ     sg   ðÛ Û Ý Ý å  Ý -÷÷ ÷ SÑ Rß .Ý AÝ &ß DÝ !à	ˆ×	Ñ	Ð6Ó	7€ò1ò 
ò
÷.Aò Ar!   