§
    ¤”j÷? ã                   óö   — 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"dS )é    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                 óh   — | j         }|j        rdS |j        r|j        dgk    rdS |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      úm/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/db/backends/base/schema.pyÚ_is_relevant_relationr      sI   € ð
 ŒN€EØÔð àˆuØÔ ð  U¤_¸¸Ò%>Ð%>àˆtàÔ ¤Ð0Ð0ó    c                 ó€   — t          | 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.   (   sO   € åØŒ×ÒØØØØ!ð	 	 ñ 	
ô 	
õ Ô Ñ'Ô'ðñ ô ð r    c              #   ó  ‡ ‡K  — t          ˆ fd„t          ‰ j        ¦  «        D ¦   «         ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        }|D ]+\  }}||fV — t          |j        |j        ¦  «        E d {V —† Œ,d S )Nc              3   ó<   •K  — | ]}t          |‰¦  «        ¯|V — Œd S ©N©r   )Ú.0ÚobjÚ	old_fields     €r   ú	<genexpr>z+_related_non_m2m_objects.<locals>.<genexpr>9   óG   øè è € ð 	
ð 	
àÝ$ S¨)Ñ4Ô4ð	
Øð	
ð 	
ð 	
ð 	
ð 	
ð 	
r    c              3   ó<   •K  — | ]}t          |‰¦  «        ¯|V — Œd S r1   r2   )r3   r4   Ú	new_fields     €r   r6   z+_related_non_m2m_objects.<locals>.<genexpr>>   r7   r    )Úzipr.   r-   Ú_related_non_m2m_objectsÚremote_field)r5   r9   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r;   r;   5   së   øøè è € õ ð	
ð 	
ð 	
ð 	
å*¨9¬?Ñ;Ô;ð	
ñ 	
ô 	
ð
	
ð 	
ð 	
ð 	
å*¨9¬?Ñ;Ô;ð	
ñ 	
ô 	
ñô €Nð +ð 
ð 
Ñˆ�Ø�wÐÐÐÐÝ+ØÔ ØÔ ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
ð 
r    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'drd"„Z(d#„ Z)d$„ Z*dsd&„Z+d'„ Z,d(„ Z-d)„ Z.dtd*„Z/d+„ Z0d,„ Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5e6d1„ ¦   «         Z7d2„ Z8d3„ Z9d4„ Z:d5„ Z;d6„ Z<d7„ Z=d8„ Z>d9„ Z?d:„ Z@d;„ ZAd<„ ZBd=„ ZCd>„ ZDd?„ ZEd@„ ZFdA„ ZGdB„ ZHdtdC„ZIdD„ ZJ	 dtdE„ZKdF„ ZLdtdG„ZM	 dtdH„ZNdI„ ZOdJ„ ZPdK„ ZQdL„ ZRdudN„ZSdvdO„ZTdP„ ZUdQ„ ZVdddMdMdd%dd%ddddRœdS„ZWdvdT„ZXdU„ ZYdV„ ZZdW„ Z[dX„ Z\dvdY„Z]dZ„ Z^d[„ Z_d\„ Z`d]„ Zad^„ Zbd_„ Zcd`„ Zdda„ Zedb„ Zf	 	 	 	 	 dwdc„Zg	 	 	 	 	 	 dxdd„Zh	 	 	 	 	 	 	 dyde„Zidzdf„Zj	 	 	 	 	 	 dxdg„Zkdh„ Zldi„ Zmdj„ Zndk„ Zo	 	 	 	 	 	 	 	 d{dl„Zpdtdm„Zqdn„ Zrdo„ Zsd|dp„Ztdsdq„ZudS )}Ú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)sFTc                 ón   — || _         || _        | j        rg | _        | j         j        j        o|| _        d S r1   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)ÚselfrC   rD   r   s       r   Ú__init__z!BaseDatabaseSchemaEditor.__init__”   s?   € Ø$ˆŒØ&ˆÔØÔð 	$Ø!#ˆDÔØ $¤Ô 8Ô IÐ TÈfˆÔÐÐr    c                 ó�   — g | _         | j        r7t          | j        j        ¦  «        | _        | j                             ¦   «          | S r1   )Údeferred_sqlrH   r   rC   ÚaliasÚ	__enter__)rI   s    r   rN   z"BaseDatabaseSchemaEditor.__enter__�   sB   € ØˆÔØÔ ð 	$Ý  ¤Ô!6Ñ7Ô7ˆDŒKØŒK×!Ò!Ñ#Ô#Ð#Øˆr    c                 ó”   — |€ | j         D ]}|                      |d ¦  «         Œ| j        r| j                             |||¦  «         d S d S r1   )rL   ÚexecuterH   r   Ú__exit__)rI   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rQ   z!BaseDatabaseSchemaEditor.__exit__¤   si   € ØÐØÔ(ð (ð (�Ø—’˜S $Ñ'Ô'Ð'Ð'ØÔ ð 	AØŒK× Ò  ¨9°iÑ@Ô@Ð@Ð@Ð@ð	Að 	Ar    © c           	      ó†  — | j         s,| j        j        r | j        j        j        st          d¦  «        ‚t          |¦  «        }t                               d||||dœ¬¦  «         | j         rŽ| 	                    ¦   «          
                    d¦  «        rdnd}|�B| j                             |t          t          | j        |¦  «        ¦  «        z  |z   ¦  «         dS | j                             ||z   ¦  «         dS | j                             ¦   «         5 }|                     ||¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z:Execute the given SQL statement, with optional parameters.ziExecuting DDL statements while in a transaction on databases that can't perform a rollback is prohibited.z%s; (params %r))ÚparamsrU   )Úextraú;Ú N)rD   rC   Úin_atomic_blockrF   rG   r   ÚstrÚloggerÚdebugÚrstripÚendswithrE   ÚappendÚtupleÚmapÚquote_valueÚcursorrP   )rI   rU   rX   Úendingrf   s        r   rP   z BaseDatabaseSchemaEditor.execute­   sª  € ð
 Ô ð	à”Ô/ð	ð ”OÔ,Ô=ð	õ
 -ð?ñô ð õ
 �#‰hŒhˆå�ŠØ˜s F¸VÈCÐ2PÐ2Pð 	ñ 	
ô 	
ð 	
ð Ôð 
	,ØŸ:š:™<œ<×0Ò0°Ñ5Ô5Ð>�R�R¸3ˆFØÐ!ØÔ"×)Ò)Ø�5¥ TÔ%5°vÑ!>Ô!>Ñ?Ô?Ñ?À6ÑIñô ð ð ð ð Ô"×)Ò)¨#°©,Ñ7Ô7Ð7Ð7Ð7à”×'Ò'Ñ)Ô)ð ,¨VØ—’˜s FÑ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   ÄD6Ä6D:Ä=D:c                 ó@   — | j         j                             |¦  «        S r1   )rC   ÚopsÚ
quote_name)rI   r   s     r   rj   z#BaseDatabaseSchemaEditor.quote_nameÌ   s   € ØŒÔ"×-Ò-¨dÑ3Ô3Ð3r    c                 ó¨  ‡ ‡— ‰j         j        D ]>}ˆfd„|D ¦   «         }‰ j                             ‰                      ‰|¦  «        ¦  «         Œ?g }g }‰j         j        D �]÷}‰                      ‰|¦  «        \  }}|€Œ|                     ‰ j        ¬¦  «        }	|	d         r|d‰ j	        |	z  z   z  }| 
                    ‰ j        ¬¦  «        }
|
r|d|
z  z  }|                     |¦  «         |j        rÑ|j        rÊ|j        j        j         j        }|j        j        j                              |j        j        ¦  «        j        }‰ j        r:|d‰ j        ‰                      |¦  «        ‰                      |¦  «        dœz  z   z  }n@‰ j        j        j        r/‰ j                             ‰                      ‰|d¦  «        ¦  «         |                     ‰                      |j        ¦  «        ›d|›�¦  «         |                     ¦   «         d	v rK‰ j        j                             ‰j         j        |j        ¦  «        }|r‰ j                             |¦  «         �Œùg }|r>‰j         j        D ]0}‰ j                             |                     ‰‰ ¦  «        ¦  «         Œ1n,|                     ˆˆ fd
„‰j         j        D ¦   «         ¦  «         ‰ j        ‰                      ‰j         j        ¦  «        d                     d„ g |¢|¢R D ¦   «         ¦  «        dœz  }‰j         j        r3‰ j        j                              ‰j         j        ¦  «        }|r|d|z   z  }||fS )z-Take a model and return its table definition.c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rV   ©r(   Ú	get_field©r3   r   r-   s     €r   ú
<listcomp>z6BaseDatabaseSchemaEditor.table_sql.<locals>.<listcomp>Ô   ó)   ø€ ÐLÐLÐL°u�e”k×+Ò+¨EÑ2Ô2ÐLÐLÐLr    N©rC   Úcheckú z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldc              3   óD   •K  — | ]}|                      ‰‰¦  «        V — Œd S r1   )Úconstraint_sql)r3   Ú
constraintr-   rI   s     €€r   r6   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  sG   øè è € ð #ð #àð ×)Ò)¨%°Ñ6Ô6ð#ð #ð #ð #ð #ð #r    ú, c              3   ó8   K  — | ]}|¯t          |¦  «        V — Œd S r1   )r]   )r3   Ú	statements     r   r6   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  sB   è è € ð $ð $àØð$Ý�I‘”ð$ð $ð $ð $ð $ð $r    )ÚtableÚ
definition)!r(   Úunique_togetherrL   rb   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersrC   Úsql_check_constraintÚdb_type_suffixÚextendr<   Údb_constraintr-   Údb_tablern   Ú
field_nameÚcolumnÚsql_create_inline_fkrj   rF   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typeri   Úautoinc_sqlÚconstraintsÚ
create_sqlÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rI   r-   Úfield_namesÚfieldsÚcolumn_sqlsrX   r   r‚   Úextra_paramsÚ	db_paramsÚcol_type_suffixru   rv   r“   Úconstraint_sqlsr}   rU   r™   s   ``                r   Ú	table_sqlz"BaseDatabaseSchemaEditor.table_sqlÏ   s  øø€ ð !œ;Ô6ð 	Mð 	MˆKØLÐLÐLÐLÀÐLÑLÔLˆFØÔ×$Ò$ T×%<Ò%<¸UÀFÑ%KÔ%KÑLÔLÐLÐLàˆØˆØ”[Ô-ð 2	:ñ 2	:ˆEà'+§¢°u¸eÑ'DÔ'DÑ$ˆJ˜ØÐ!Øà×+Ò+°t´Ð+ÑGÔGˆIØ˜Ô!ð JØ˜c DÔ$=À	Ñ$IÑIÑI�
à#×2Ò2¸d¼oÐ2ÑNÔNˆOØð 6Ø˜e oÑ5Ñ5�
Ø�MŠM˜,Ñ'Ô'Ð'àÔ!ð  eÔ&9ð Ø Ô-Ô3Ô9ÔB�Ø!Ô.Ô4Ô:×DÒDØÔ&Ô1ñô äð ð Ô,ð 
Ø #¨Ô(AØ$(§O¢O°HÑ$=Ô$=Ø%)§_¢_°YÑ%?Ô%?ðEð Eñ )ñ #ñ �J�Jð ”_Ô-ÔCð ØÔ%×,Ò,Ø×+Ò+Ø! 5Ð*Jñô ñô ð ð ×Òð —O’O E¤LÑ1Ô1Ð1Ð1Ø�Jðñô ð ð ×&Ò&Ñ(Ô(ð -ð ð ð
 #œoÔ1×=Ò=Ø”KÔ(¨%¬,ñô �ð ð :ØÔ%×,Ò,¨[Ñ9Ô9Ð9ùð ˆØð 
	ð $œkÔ5ð Mð M�
ØÔ!×(Ò(¨×)>Ò)>¸uÀdÑ)KÔ)KÑLÔLÐLÐLðMð ×"Ò"ð #ð #ð #ð #ð #à"'¤+Ô"9ð#ñ #ô #ñ ô ð ð Ô#Ø—_’_ U¤[Ô%9Ñ:Ô:ØŸ)š)ð $ð $à!A ;Ð!A°Ð!AÐ!Að$ñ $ô $ñ ô ð'
ð '
ñ 
ˆð Œ;Ô$ð 	,Ø!œ_Ô0×?Ò?Ø”Ô)ñô ˆNð ð ,Ø�s˜^Ñ+Ñ+�Ø�Fˆ{Ðr    c              #   ó~  K  — |V — |                      d¦  «        x}r|                      |¦  «        V — | j        j        j        r#|j        r|                      |j        ¦  «        V — |j        }|j        t          ur6|  
                    |¦  «        \  }	}
d|	› �V — |                     |
¦  «         d}|o-|                      |¦  «         o|o|                      |¦  «         }|rt|                      |¦  «        }|�]d|                      |¦  «        z   }| j        j        j        r||                      |¦  «        z  V — n|V — |                     |¦  «         |j        r|j        s| j        j        j        rd}|j        r2|                      |¦  «        \  }}|                     |¦  «         |V — n|sdV — n| j        j        j        sdV — |j        rdV — n|j        rdV — |j        p|j        j        }|r=| j        j        j        r.|j        r)| j        j                             |d¬	¦  «        V — d S d S d S d S )
NÚ	collationzDEFAULT FTzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlrC   rF   Úsupports_comments_inlineÚ
db_commentÚ_comment_sqlÚnullÚ
db_defaultr   Údb_default_sqlrŠ   Úskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlÚrequires_literal_defaultsÚprepare_defaultrb   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚ	generatedÚ_column_generated_sqlÚimplied_column_nullÚuniquer˜   r(   Úsupports_tablespacesri   r™   )rI   Úcolumn_db_typerX   r-   r   Úfield_db_paramsÚinclude_defaultr£   r¬   Údefault_sqlÚdefault_paramsÚdefault_valueÚcolumn_defaultÚgenerated_sqlÚgenerated_paramsÚ
tablespaces                   r   Ú_iter_column_sqlz)BaseDatabaseSchemaEditor._iter_column_sql/  s  è è € ð ÐÐÐØ'×+Ò+¨KÑ8Ô8Ð8ˆ9ð 	/Ø×#Ò# IÑ.Ô.Ð.Ð.Ð.ØŒ?Ô#Ô<ð 	6ÀÔAQð 	6Ø×#Ò# EÔ$4Ñ5Ô5Ð5Ð5Ð5àŒzˆàÔ¥<Ð/Ð/Ø*.×*=Ò*=¸eÑ*DÔ*DÑ'ˆK˜Ø*˜[Ð*Ð*Ð*Ð*Ð*Ø�MŠM˜.Ñ)Ô)Ð)Ø#ˆOð ð =Ø×%Ò% eÑ,Ô,Ð,ð=ð Ð;˜$×4Ò4°UÑ;Ô;Ð<ð 	ð ð 	1Ø ×2Ò2°5Ñ9Ô9ˆMØÐ(Ø!+¨d×.FÒ.FÀuÑ.MÔ.MÑ!M�Ø”?Ô+ÔEð 1ð )¨4×+?Ò+?ÀÑ+NÔ+NÑNÐNÐNÐNÐNà(Ð(Ð(Ð(Ø—M’M -Ñ0Ô0Ð0ð Ô'ð	àÔ%ð	ð ”Ô(ÔJð	ð
 ˆDØŒ?ð 	Ø.2×.HÒ.HÈÑ.OÔ.OÑ+ˆMÐ+Ø�MŠMÐ*Ñ+Ô+Ð+ØÐÐÐÐØð 	ØÐÐÐÐØ”Ô)Ô=ð 	ØˆLˆLˆLØÔð 	ØÐÐÐÐØŒ\ð 	ØˆNˆNˆNàÔ(ÐE¨E¬KÔ,Eˆ
àð	Nà”Ô(Ô=ð	Nð ”ð	Nð
 ”/Ô%×4Ò4°ZÈÐ4ÑMÔMÐMÐMÐMÐMÐMð	Nð 	Nð 	Nð 	Nð 	Nð 	Nr    c           
      ó²   — |                      | j        ¬¦  «        }|d         }|€dS g }d                     |                      ||||||¦  «        ¦  «        |fS )z†
        Return the column definition for a field. The field must already have
        had set_attributes_from_name() called.
        rr   ÚtypeN©NNrt   )r‡   rC   r—   rÆ   )rI   r-   r   r¾   r½   r¼   rX   s          r   r†   z#BaseDatabaseSchemaEditor.column_sqlr  s{   € ð  ×-Ò-¸¼Ð-ÑIÔIˆØ(¨Ô0ˆàÐ!Ø�:Øˆà�HŠHà×%Ò%Ø"ØØØØ#Ø#ñô ñ
ô 
ð ð
ð 	
r    c                 ó   — dS )z�
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob).
        FrV   ©rI   r   s     r   r¯   z%BaseDatabaseSchemaEditor.skip_default�  ó	   € ð
 ˆur    c                 ó   — dS )zŸ
        Some backends don't accept default values for certain columns types
        (i.e. MySQL longtext and longblob) in the ALTER COLUMN statement.
        FrV   rË   s     r   r°   z.BaseDatabaseSchemaEditor.skip_default_on_alter”  rÌ   r    c                 ó    — t          d¦  «        ‚)zU
        Only used for backends which have requires_literal_defaults feature
        z€subclasses of BaseDatabaseSchemaEditor for backends which have requires_literal_defaults must provide a prepare_default() method©ÚNotImplementedError©rI   Úvalues     r   r´   z(BaseDatabaseSchemaEditor.prepare_default›  s   € õ "ðPñ
ô 
ð 	
r    c                 ó   — dS )z�
        Return the SQL to use in a DEFAULT clause. The resulting string should
        contain a '%s' placeholder for a default value.
        ú%srV   rË   s     r   r²   z,BaseDatabaseSchemaEditor._column_default_sql¤  s	   € ð
 ˆtr    c                 ól  ‡ — ddl m} |j        }t          ||¦  «        r‰                      |¦  «        nd}t          |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,   rr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r1   )r´   ©r3   ÚprI   s     €r   r6   z:BaseDatabaseSchemaEditor.db_default_sql.<locals>.<genexpr>º  s1   øè è € Ð IÐ I¸Q ×!5Ò!5°aÑ!8Ô!8Ð IÐ IÐ IÐ IÐ IÐ Ir    )Údjango.db.models.expressionsrÖ   Ú_db_default_expressionÚ
isinstancer²   r   r-   Úget_compilerrC   ÚcompilerF   r³   rc   )	rI   r   rÖ   r­   rU   ÚqueryÚcompilerr¿   rX   s	   `        r   r®   z'BaseDatabaseSchemaEditor.db_default_sql«  sÚ   ø€ à6Ð6Ð6Ð6Ð6Ð6àÔ1ˆ
å/9¸*ÀeÑ/LÔ/LÐXˆD×$Ò$ UÑ+Ô+Ð+ÐRXð 	õ ˜EœKÐ(Ñ(Ô(ˆØ×%Ò%°´Ð%ÑAÔAˆØ&×.Ò.¨zÑ:Ô:Ñˆ�VØŒ?Ô#Ô=ð 	ð �5Ð IÐ IÐ IÐ IÀ&Ð IÑ IÔ IÑIÔIÑIˆKØˆFØ�[Ñ  &Ð(Ð(r    c                 óÊ   ‡ — |                      ‰ 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   óB   •K  — | ]}‰                      |¦  «        V — Œd S r1   ©re   rØ   s     €r   r6   zABaseDatabaseSchemaEditor._column_generated_sql.<locals>.<genexpr>Ã  s1   øè è € Ð3XÐ3XÈA°D×4DÒ4DÀQÑ4GÔ4GÐ3XÐ3XÐ3XÐ3XÐ3XÐ3Xr    rV   zGENERATED ALWAYS AS (z) )rÃ   rC   Ú
db_persistrF   r³   rc   )rI   r   Úexpression_sqlrX   Úpersistency_sqls   `    r   r¸   z.BaseDatabaseSchemaEditor._column_generated_sql¾  s†   ø€ à!&×!4Ò!4°T´_Ñ!EÔ!EÑˆ˜Ø&+Ô&6ÐE˜(˜(¸IˆØŒ?Ô#Ô=ð 	Ø+­eÐ3XÐ3XÐ3XÐ3XÐQWÐ3XÑ3XÔ3XÑ.XÔ.XÑXˆNØˆFØJ ~ÐJÐJ¸ÐJÐJÈFÐRÐRr    c                 ó  — |                       ¦   «         r|                      ¦   «         }nØ| j        rd }nÎ| j        s,| j        r%| j        r|                      ¦   «         dk    rd}nžd}n›t          | dd¦  «        st          | dd¦  «        rw|                      ¦   «         }|dk    rt          j	        ¦   «         }nKt          j	        ¦   «         }|dk    r|                     ¦   «         }n|d	k    r|                     ¦   «         }n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ØŒ_ð 	ØˆGˆGØ”ð 	 ¤ð 	°Ô0Kð 	Ø×&Ò&Ñ(Ô(¨MÒ9Ð9Ø��à��Ý�U˜J¨Ñ.Ô.ð 	µ'¸%ÀÐQVÑ2WÔ2Wð 	Ø!×3Ò3Ñ5Ô5ˆMØ Ò/Ð/Ý"œ,™.œ.��å"œ,™.œ.�Ø  KÒ/Ð/Ø%Ÿlšl™nœn�G�GØ" kÒ1Ð1Ø%Ÿlšl™nœn�GøàˆGØˆr    c                 ó^   — |                      |                      |¦  «        | j        ¦  «        S )z2Return a field's effective database default value.)Úget_db_prep_saverù   rC   rË   s     r   r±   z*BaseDatabaseSchemaEditor.effective_defaultá  s(   € à×%Ò% d×&=Ò&=¸eÑ&DÔ&DÀdÄoÑVÔVÐVr    c                 ó   — t          ¦   «         ‚)aX  
        Return a quoted version of the value so it's safe to use in an SQL
        string. This is not safe against injection from user code; it is
        intended only for use in making SQL scripts or preparing default values
        for particularly tricky backends (defaults are not user-defined, though,
        so this is safe).
        rÏ   rÑ   s     r   re   z$BaseDatabaseSchemaEditor.quote_valueå  s   € õ "Ñ#Ô#Ð#r    c           	      ó¢  — |                       |¦  «        \  }}|                      ||pd¦  «         | j        j        j        rœ|j        j        r!|                      |d|j        j        ¦  «         | j        j        j        s^|j        j	        D ]Q}|j
        rH|                     | j        ¬¦  «        }|d         } | j        |                      ||||j
        ¦  «        Ž  ŒR| j                             |                      |¦  «        ¦  «         |j        j        D ]7}|j        j        j        j        r|                      |j        j        ¦  «         Œ8dS )zr
        Create a table and any accompanying indexes or unique constraints for
        the given `model`.
        Nrr   rÈ   )r¡   rP   rC   rF   Úsupports_commentsr(   Údb_table_commentÚalter_db_table_commentr©   r…   rª   r‡   Ú_alter_column_comment_sqlrL   rŠ   Ú_model_indexes_sqlÚlocal_many_to_manyr<   ÚthroughÚauto_createdÚcreate_model)rI   r-   rU   rX   r   r½   Ú
field_types          r   r  z%BaseDatabaseSchemaEditor.create_modelñ  so  € ð
 —n’n UÑ+Ô+‰ˆˆVð 	�Š�S˜&˜. DÑ)Ô)Ð)àŒ?Ô#Ô5ð 	àŒ{Ô+ð WØ×+Ò+¨E°4¸¼Ô9UÑVÔVÐVà”?Ô+ÔDð Ø"œ[Ô5ð 
ð 
�EØÔ'ð 	Ø*/×*=Ò*=Ø'+¤ð +>ñ +ô +˜ð &5°VÔ%<˜
Ø$˜œØ!×;Ò;Ø % u¨j¸%Ô:Jñô ðð øð 	Ô× Ò  ×!8Ò!8¸Ñ!?Ô!?Ñ@Ô@Ð@ð ”[Ô3ð 	>ð 	>ˆEØÔ!Ô)Ô/Ô<ð >Ø×!Ò! %Ô"4Ô"<Ñ=Ô=Ð=øð	>ð 	>r    c                 óÐ  — |j         j        D ]7}|j        j        j         j        r|                      |j        j        ¦  «         Œ8|                      | j        d|                      |j         j	        ¦  «        iz  ¦  «         t          | j        ¦  «        D ]P}t          |t          ¦  «        r9|                     |j         j	        ¦  «        r| j                             |¦  «         ŒQdS )z!Delete a model from the database.r�   N)r(   r  r<   r  r  Údelete_modelrP   Úsql_delete_tablerj   rŒ   ÚlistrL   rÜ   r
   Úreferences_tableÚremove)rI   r-   r   rU   s       r   r	  z%BaseDatabaseSchemaEditor.delete_model  sö   € ð ”[Ô3ð 	>ð 	>ˆEØÔ!Ô)Ô/Ô<ð >Ø×!Ò! %Ô"4Ô"<Ñ=Ô=Ð=øð 	�ŠØÔ!à˜Ÿš¨¬Ô)=Ñ>Ô>ðññ	
ô 	
ð 	
õ ˜Ô)Ñ*Ô*ð 	.ð 	.ˆCÝ˜#�yÑ)Ô)ð .¨c×.BÒ.BØ”Ô$ñ/ô /ð .ð Ô!×(Ò(¨Ñ-Ô-Ð-øð		.ð 	.r    c                 ó�   — |j         r| j        j        j        sdS |                      |                     || ¦  «        d¬¦  «         dS )zAdd an index on a model.N©rX   )Úcontains_expressionsrC   rF   Úsupports_expression_indexesrP   r•   ©rI   r-   Úindexs      r   Ú	add_indexz"BaseDatabaseSchemaEditor.add_index*  sT   € ð Ô&ð	à”OÔ,ÔHð	ð �4ð 	�Š�U×%Ò% e¨TÑ2Ô2¸4ˆÑ@Ô@Ð@Ð@Ð@r    c                 óŒ   — |j         r| j        j        j        sdS |                      |                     || ¦  «        ¦  «         dS )zRemove an index from a model.N)r  rC   rF   r  rP   Ú
remove_sqlr  s      r   Úremove_indexz%BaseDatabaseSchemaEditor.remove_index5  sN   € ð Ô&ð	à”OÔ,ÔHð	ð �4Ø�Š�U×%Ò% e¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r    c                 óð   — | j         j        j        r8|                      |                      ||j        |j        ¦  «        d ¬¦  «         d S |                      ||¦  «         |                      ||¦  «         d S )Nr  )rC   rF   Úcan_rename_indexrP   Ú_rename_index_sqlr   r  r  )rI   r-   Ú	old_indexÚ	new_indexs       r   Úrename_indexz%BaseDatabaseSchemaEditor.rename_index>  s…   € ØŒ?Ô#Ô4ð 	-Ø�LŠLØ×&Ò& u¨i¬n¸i¼nÑMÔMØð ñ ô ð ð ð ð
 ×Ò˜e YÑ/Ô/Ð/Ø�NŠN˜5 )Ñ,Ô,Ð,Ð,Ð,r    c                 óh   — |                      || ¦  «        }|r|                      |d¬¦  «         dS dS )zAdd a constraint to a model.Nr  )r•   rP   ©rI   r-   r}   rU   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraintH  sG   € à×#Ò# E¨4Ñ0Ô0ˆØð 	+ð �LŠL˜ TˆLÑ*Ô*Ð*Ð*Ð*ð	+ð 	+r    c                 ód   — |                      || ¦  «        }|r|                      |¦  «         dS dS )z!Remove a constraint from a model.N)r  rP   r  s       r   Úremove_constraintz*BaseDatabaseSchemaEditor.remove_constraintP  sA   € à×#Ò# E¨4Ñ0Ô0ˆØð 	Ø�LŠL˜ÑÔÐÐÐð	ð 	r    c                 óF  ‡— d„ |D ¦   «         }d„ |D ¦   «         }|                      |¦  «        D ]"}|                      ‰|dddœ| j        ¦  «         Œ#|                      |¦  «        D ]9}ˆfd„|D ¦   «         }|                      |                      ‰|¦  «        ¦  «         Œ:dS )z°
        Deal with a model changing its unique_together. The input
        unique_togethers must be doubly-nested, not the single-nested
        ["foo", "bar"] format.
        c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   ©rc   ©r3   r›   s     r   ú	<setcomp>zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>\  ó   € Ð@Ð@Ð@ &•�f‘”Ð@Ð@Ð@r    c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   r%  r&  s     r   r'  zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>]  r(  r    TF)rº   r   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rV   rm   ro   s     €r   rp   zBBaseDatabaseSchemaEditor.alter_unique_together.<locals>.<listcomp>h  rq   r    N)Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquerP   r„   )rI   r-   Úold_unique_togetherÚnew_unique_togetherÚoldsÚnewsr›   rš   s    `      r   Úalter_unique_togetherz.BaseDatabaseSchemaEditor.alter_unique_togetherV  sæ   ø€ ð AÐ@Ð,?Ð@Ñ@Ô@ˆØ@Ð@Ð,?Ð@Ñ@Ô@ˆà—o’o dÑ+Ô+ð 	ð 	ˆFØ×'Ò'ØØØ°Ð6Ð6ØÔ&ñ	ô ð ð ð  Ÿ?š?¨4Ñ0Ô0ð 	Að 	AˆKØLÐLÐLÐLÀÐLÑLÔLˆFØ�LŠL˜×0Ò0°¸Ñ?Ô?Ñ@Ô@Ð@Ð@ð	Að 	Ar    c                 óJ  ‡— d„ |D ¦   «         }d„ |D ¦   «         }|                      |¦  «        D ]"}|                      ‰|dddœ| j        ¦  «         Œ#|                      |¦  «        D ];}ˆfd„|D ¦   «         }|                      |                      ‰|d¬¦  «        ¦  «         Œ<d	S )
z®
        Deal with a model changing its index_together. The input
        index_togethers must be doubly-nested, not the single-nested
        ["foo", "bar"] format.
        c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   r%  r&  s     r   r'  z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp>q  ó   € Ð?Ð?Ð? &•�f‘”Ð?Ð?Ð?r    c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   r%  r&  s     r   r'  z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp>r  r5  r    TF)r  rº   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rV   rm   ro   s     €r   rp   zABaseDatabaseSchemaEditor.alter_index_together.<locals>.<listcomp>}  rq   r    Ú_idx©r›   ÚsuffixN)r+  r,  Úsql_delete_indexrP   Ú_create_index_sql)rI   r-   Úold_index_togetherÚnew_index_togetherr0  r1  r›   rš   s    `      r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_togetherk  së   ø€ ð @Ð?Ð,>Ð?Ñ?Ô?ˆØ?Ð?Ð,>Ð?Ñ?Ô?ˆà—o’o dÑ+Ô+ð 	ð 	ˆFØ×'Ò'ØØØ¨%Ð0Ð0ØÔ%ñ	ô ð ð ð  Ÿ?š?¨4Ñ0Ô0ð 	Vð 	VˆKØLÐLÐLÐLÀÐLÑLÔLˆFØ�LŠL˜×/Ò/°¸fÈVÐ/ÑTÔTÑUÔUÐUÐUð	Vð 	Vr    c           
      óp  ‡— d„ ‰j         j        D ¦   «         }d„ ‰j         j        D ¦   «         }ˆfd„|D ¦   «         } | j        ‰|fd||z  i|¤Ž}|                     d¦  «        du rI|rG| j        j        j        r6t          |  	                    ‰j         j
        |d¬¦  «        ¦  «        }	|	|v r|	g}t          |¦  «        d	k    rCt          d
t          |¦  «        ›d‰j         j
        ›dd                     |¦  «        ›d�¦  «        ‚|                      |                      |‰|d         ¦  «        ¦  «         d S )Nc                 ó   — h | ]	}|j         ’Œ
S rV   ©r   ©r3   r}   s     r   r'  zBBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<setcomp>�  s'   € ð !
ð !
ð !
Ø *ˆJŒOð!
ð !
ð !
r    c                 ó   — h | ]	}|j         ’Œ
S rV   rB  rC  s     r   r'  zBBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<setcomp>„  s   € ÐRÐRÐR°
˜JœOÐRÐRÐRr    c                 óN   •— g | ]!}‰j                              |¦  «        j        ‘Œ"S rV   )r(   rn   rŽ   ro   s     €r   rp   zCBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<listcomp>…  s,   ø€ ÐKÐKÐK¸5�5”;×(Ò(¨Ñ/Ô/Ô6ÐKÐKÐKr    Úexcluderº   TF©Úquoteé   úFound wrong number (z) of constraints for ú(r~   ú)r   )r(   r”   ÚindexesÚ_constraint_namesr§   rC   rF   Ú*allows_multiple_constraints_on_same_fieldsr]   Ú_unique_constraint_namerŒ   ÚlenÚ
ValueErrorr—   rP   Ú_delete_constraint_sql)
rI   r-   r›   Úconstraint_kwargsrU   Úmeta_constraint_namesÚmeta_index_namesÚcolumnsÚconstraint_namesÚdefault_names
    `        r   r,  z/BaseDatabaseSchemaEditor._delete_composed_index€  s¤  ø€ ð!
ð !
Ø.3¬kÔ.Eð!
ñ !
ô !
Ðð SÐR¸e¼kÔ>QÐRÑRÔRÐØKÐKÐKÐKÀFÐKÑKÔKˆØ1˜4Ô1ØØð
ð 
ð *Ð,<Ñ<ð
ð  ð	
ð 
Ðð ×!Ò! (Ñ+Ô+¨tÐ3Ð3Ø ð 4à”Ô(ÔSð 4õ
 Ø×,Ò,¨U¬[Ô-AÀ7ÐRWÐ,ÑXÔXñô ˆLð Ð/Ð/Ð/Ø$0 >Ð ÝÐÑ Ô  AÒ%Ð%Ý�*õ Ð(Ñ)Ô)Ð)Ð)Ø”KÔ(Ð(Ð(Ø—I’I˜gÑ&Ô&Ð&Ð&ð	ñô ð ð 	�Š�T×0Ò0°°eÐ=MÈaÔ=PÑQÔQÑRÔRÐRÐRÐRr    c                 ó‚  — ||k    s;| j         j        j        r,|                     ¦   «         |                     ¦   «         k    rdS |                      | j        |                      |¦  «        |                      |¦  «        dœz  ¦  «         | j        D ]-}t          |t          ¦  «        r| 
                    ||¦  «         Œ.dS )z#Rename the table a model points to.N)Ú	old_tableÚ	new_table)rC   rF   Úignores_table_name_caseÚlowerrP   Úsql_rename_tablerj   rL   rÜ   r
   Úrename_table_references)rI   r-   Úold_db_tableÚnew_db_tablerU   s        r   Úalter_db_tablez'BaseDatabaseSchemaEditor.alter_db_table¢  sÚ   € à˜<Ò'Ð'ØŒOÔ$Ô<ð (à×"Ò"Ñ$Ô$¨×(:Ò(:Ñ(<Ô(<Ò<Ð<àˆFØ�ŠØÔ!à!Ÿ_š_¨\Ñ:Ô:Ø!Ÿ_š_¨\Ñ:Ô:ðð ññ	
ô 	
ð 	
ð Ô$ð 	Hð 	HˆCÝ˜#�yÑ)Ô)ð HØ×+Ò+¨L¸,ÑGÔGÐGøð	Hð 	Hr    c                 óâ   — | j         re| j        j        j        rV|                      | j         |                      |j        j        ¦  «        |                      |pd¦  «        dœz  ¦  «         d S d S d S )Nr[   )r�   Úcomment)	Úsql_alter_table_commentrC   rF   rþ   rP   rj   r(   rŒ   re   )rI   r-   Úold_db_table_commentÚnew_db_table_comments       r   r   z/BaseDatabaseSchemaEditor.alter_db_table_commentµ  s�   € ØÔ'ð 	¨D¬OÔ,DÔ,Vð 	Ø�LŠLØÔ,à!Ÿ_š_¨U¬[Ô-AÑBÔBØ#×/Ò/Ð0DÐ0JÈÑKÔKðð ññô ð ð ð ð	ð 	ð 	ð 	r    c                 óÎ   — |                       | j        |                      |j        j        ¦  «        |                      |¦  «        |                      |¦  «        dœz  ¦  «         dS )z)Move a model's table between tablespaces.)r�   Úold_tablespaceÚnew_tablespaceN)rP   Úsql_retablespace_tablerj   r(   rŒ   )rI   r-   Úold_db_tablespaceÚnew_db_tablespaces       r   Úalter_db_tablespacez,BaseDatabaseSchemaEditor.alter_db_tablespace¿  sk   € à�ŠØÔ'àŸš¨¬Ô)=Ñ>Ô>Ø"&§/¢/Ð2CÑ"DÔ"DØ"&§/¢/Ð2CÑ"DÔ"Dðð ññ	
ô 	
ð 	
ð 	
ð 	
r    c           
      ól  — |j         r5|j        j        j        j        r|                      |j        j        ¦  «        S |                      ||d¬¦  «        \  }}|€dS |                     | j        ¬¦  «        x}r|d|› �z  }| 	                    | j        ¬¦  «        }|d         r|d| j
        |z  z   z  }|j        �rY| j        j        j        �rG|j        �r?d}| j        �r|j        j        j        j        }|j        j        j                             |j        j        ¦  «        j        }	t)          |j        j        ¦  «        \  }
}|d| j        |                      |||¦  «        |
rd|                      |
¦  «        z  nd	|                      |j        ¦  «        |                      |¦  «        |                      |	¦  «        | j        j                             ¦   «         d
œz  z   z  }n/| j                             |                      |||¦  «        ¦  «         | j        |                      |j        j        ¦  «        |                      |j        ¦  «        |dœz  }|                      ||pd¦  «         |j        t>          u r†|                       |¦  «        sq|  !                    |¦  «        �\|  "                    |d|d¬¦  «        \  }}| j#        |                      |j        j        ¦  «        |dœz  }|                      ||¦  «         |j$        rO| j        j        j%        r>| j        j        j&        s-|d         } | j        |  '                    ||||j$        ¦  «        Ž  | j         (                    |  )                    ||¦  «        ¦  «         | j        j        j*        r| j         +                    ¦   «          dS dS )z�
        Create a field on a model. Usually involves adding a column, but may
        involve adding a table instead (for M2M fields).
        T)r¾   Nrr   rt   rs   rw   z%s.r[   )r   Ú	namespacerŽ   ru   rv   Ú
deferrable)r�   rŽ   r‚   ©Údrop©r�   ÚchangesrÈ   ),r   r<   r  r(   r  r  r†   r‰   rC   r‡   rˆ   rF   r�   r‹   Úsql_create_column_inline_fkr-   rŒ   rn   r�   rŽ   r   Ú_fk_constraint_namerj   ri   Údeferrable_sqlrL   rb   r‘   Úsql_create_columnrP   r­   r   r°   r±   Ú_alter_column_default_sqlÚsql_alter_columnrª   rþ   r©   r  rŠ   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rI   r-   r   r‚   rX   rŸ   rž   Úconstraint_suffixru   rv   rq  Ú_rU   Úchanges_sqlr  s                  r   Ú	add_fieldz"BaseDatabaseSchemaEditor.add_fieldÊ  s  € ð Ôð 	A %Ô"4Ô"<Ô"BÔ"Oð 	AØ×$Ò$ UÔ%7Ô%?Ñ@Ô@Ð@à!Ÿ_š_¨U°EÈ4˜_ÑPÔPÑˆ
�FàÐØˆFØ#×2Ò2¸d¼oÐ2ÑNÔNÐNˆ?ð 	0ØÐ/˜oÐ/Ð/Ñ/ˆJà×'Ò'°4´?Ð'ÑCÔCˆ	Ø�WÔð 	FØ˜# Ô 9¸IÑ EÑEÑEˆJàÔñ	à”Ô(Ô>ñ	ð Ô#ñ	ð
 !AÐàÔ/ñ Ø Ô-Ô3Ô9ÔB�Ø!Ô.Ô4Ô:×DÒDØÔ&Ô1ñô äð õ  0°´Ô0DÑEÔE‘�	˜1Ø˜c DÔ$DØ ×4Ò4°U¸EÐCTÑUÔUà>GÐO˜ §¢°	Ñ :Ô :Ñ:Ð:ÈRà"Ÿošo¨e¬lÑ;Ô;Ø $§¢°Ñ 9Ô 9Ø!%§¢°Ñ!;Ô!;Ø"&¤/Ô"5×"DÒ"DÑ"FÔ"Fð	Hð 	Hñ 	%ñ 	ñ 	�
�
ð Ô!×(Ò(Ø×'Ò'¨¨uÐ6GÑHÔHñô ð ð Ô$Ø—_’_ U¤[Ô%9Ñ:Ô:Ø—o’o e¤lÑ3Ô3Ø$ð(
ð (
ñ 
ˆð 	�Š�S˜&˜. DÑ)Ô)Ð)ð Ô¥Ð,Ð,Ø×.Ò.¨uÑ5Ô5ð -à×&Ò& uÑ-Ô-Ð9à"&×"@Ò"@Ø�t˜U¨ð #Añ #ô #ÑˆK˜ð Ô'ØŸš¨¬Ô)=Ñ>Ô>Ø&ð+ð +ñ ˆCð �LŠL˜˜fÑ%Ô%Ð%ð Ôð
	à”Ô(Ô:ð
	ð ”OÔ,ÔEð
	ð
 # 6Ô*ˆJØˆDŒLØ×/Ò/Ø˜5 *¨eÔ.>ñô ðð ð 	Ô× Ò  ×!8Ò!8¸ÀÑ!FÔ!FÑGÔGÐGàŒ?Ô#ÔCð 	$ØŒO×!Ò!Ñ#Ô#Ð#Ð#Ð#ð	$ð 	$r    c                 óB  — |j         r5|j        j        j        j        r|                      |j        j        ¦  «        S |                     | j        ¬¦  «        d         €dS |j        rL|                      ||j	        gd¬¦  «        }|D ]+}|  
                    |                      ||¦  «        ¦  «         Œ,| j        |                      |j        j        ¦  «        |                      |j	        ¦  «        dœz  }|  
                    |¦  «         | j        j        j        r| j                             ¦   «          t%          | j        ¦  «        D ]V}t)          |t*          ¦  «        r?|                     |j        j        |j	        ¦  «        r| j                             |¦  «         ŒWdS )z…
        Remove a field from a model. Usually involves deleting a column,
        but for M2Ms may involve deleting a table.
        rr   rÈ   NT©Úforeign_key)r�   rŽ   )r   r<   r  r(   r  r	  r‡   rC   rN  rŽ   rP   Ú_delete_fk_sqlÚsql_delete_columnrj   rŒ   rF   r~  r  r  rL   rÜ   r
   Úreferences_columnr  )rI   r-   r   Úfk_namesÚfk_namerU   s         r   Úremove_fieldz%BaseDatabaseSchemaEditor.remove_field"  s©  € ð Ôð 	A %Ô"4Ô"<Ô"BÔ"Oð 	AØ×$Ò$ UÔ%7Ô%?Ñ@Ô@Ð@à×Ò¨$¬/ÐÑ:Ô:¸6ÔBÐJØˆFàÔð 	BØ×-Ò-¨e°e´l°^ÐQUÐ-ÑVÔVˆHØ#ð Bð B�Ø—’˜T×0Ò0°¸Ñ@Ô@ÑAÔAÐAÐAàÔ$Ø—_’_ U¤[Ô%9Ñ:Ô:Ø—o’o e¤lÑ3Ô3ð(
ð (
ñ 
ˆð 	�Š�SÑÔÐàŒ?Ô#ÔCð 	$ØŒO×!Ò!Ñ#Ô#Ð#å˜Ô)Ñ*Ô*ð 	.ð 	.ˆCÝ˜#�yÑ)Ô)ð .¨c×.CÒ.CØ”Ô$ e¤lñ/ô /ð .ð Ô!×(Ò(¨Ñ-Ô-Ð-øð		.ð 	.r    c           
      óþ  — |                       ||¦  «        sdS |                     | j        ¬¦  «        }|d         }|                     | j        ¬¦  «        }|d         }d}	|€|j        �	|€|j        €t	          d|›d|›d�¦  «        ‚|€^|€\|j        j        rP|j        j        rD|j        j        j        j        r.|j        j        j        j        r|                      ||||¦  «        S |€H|€F|j        j        r:|j        j        r.|j        j        j        j        s|j        j        j        j        sdS |�|€t	          d|›d|›d�¦  «        ‚|j	        |j	        k    s|j	        r|j
        |j
        k    rd	}	nU|j	        rN	 |                     | j        ¦  «        }
|                     | j        ¦  «        }|
|k    }	n# t          $ r d	}	Y nw xY w|	rt	          d
|› d�¦  «        ‚|                      ||||||||¦  «         dS )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.
        Nrr   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‡   rC   r<   rR  r  r(   r  Ú_alter_many_to_manyr·   ræ   rÃ   r   Ú_alter_field)rI   r-   r5   r9   Ú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_fieldB  sÓ  € ð ×,Ò,¨Y¸	ÑBÔBð 	ØˆFà!×/Ò/¸4¼?Ð/ÑKÔKˆØ  Ô(ˆØ!×/Ò/¸4¼?Ð/ÑKÔKˆØ  Ô(ˆØ$)Ð!ØÐ Ô!7Ð!?ØÐ Ô!7Ð!?å�*ð �9�9˜i˜i˜ið)ñô ð ð ÐØÐ àÔ&Ô.ð !ð Ô*Ô2ð !ð Ô*Ô2Ô8ÔEð	 !ð
 Ô*Ô2Ô8ÔEð !ð ×+Ò+¨E°9¸iÈÑPÔPÐPàÐØÐ àÔ&Ô.ð !ð Ô*Ô2ð !ð "Ô.Ô6Ô<ÔIð	 !ð
 "Ô.Ô6Ô<ÔIð !ð ˆFØÐ Ð!1Ý�*ð .7¨Y¨Y¸	¸	¸	ðCñô ð ð
 Ô  IÔ$7Ò7Ð7ØÔð 8Ø$-Ô$8¸IÔ<PÒ$PÐ$Pà(,Ð%Ð%ØÔ ð 	KðKØ )× 7Ò 7¸¼Ñ HÔ H�ð
 !*× 7Ò 7¸¼Ñ HÔ H�Ø,9¸]Ò,JÐ)Ð)øõ ð 1ð 1ð 1à,0Ð)Ð)Ð)ð1øøøð %ð 	ÝðHÈ)ð Hð Hð Hñô ð ð
 	×ÒØØØØØØØØñ		
ô 		
ð 		
ð 		
ð 		
s   Å?F: Æ:G	ÇG	c                 ó¶   — | j         j        }|                     | j         ¦  «        }d|d<   	 ||                     ¦   «                  |z  S # t          $ r Y d S w xY w)NÚ__column_name__rŽ   )rC   Údata_type_check_constraintsÚdb_type_parametersr’   ÚKeyError)rI   r   r½   Úcheck_constraintsÚdatas        r   Ú_field_db_checkz(BaseDatabaseSchemaEditor._field_db_check•  sp   € ð !œOÔGÐØ×'Ò'¨¬Ñ8Ô8ˆØ*ˆˆX‰ð	Ø$ U×%<Ò%<Ñ%>Ô%>Ô?À$ÑFÐFøÝð 	ð 	ð 	Ø�4�4ð	øøøs   ­A
 Á

AÁAc	           	      óŠ  — t          ¦   «         }	| j        j        j        r×|j        rÐ|j        rÉ|                      ||dh¬¦  «        r°|                      ||j        gd¬¦  «        }
|rGt          |
¦  «        dk    r4t          dt          |
¦  «        ›d|j        j        ›d|j        ›�¦  «        ‚|
D ]F}|	                     |j        f¦  «         |                      |                      ||¦  «        ¦  «         ŒG|j        rÊ|j        r|                      ||¦  «        r­d	„ |j        j        D ¦   «         }|                      ||j        gdd
|¬¦  «        }|rGt          |¦  «        dk    r4t          dt          |¦  «        ›d|j        j        ›d|j        ›�¦  «        ‚|D ]+}|                      |                      ||¦  «        ¦  «         Œ,|                     d¦  «        }|                     d¦  «        }| j        j        j        o'|j        r|j        p|j        o|j        o||k    p||k    }|rqt-          ||¦  «        D ]`\  }}|                      |j        |j        j        gd¬¦  «        }|D ]0}|                      |                      |j        |¦  «        ¦  «         Œ1Œa|j        rƒ|j        s||j        r|j        rnd„ |j        j        D ¦   «         }|                      ||j        gdt6          j        |¬¦  «        }|D ]+}|                      |                      ||¦  «        ¦  «         Œ,|                      ||¦  «        }|                      ||¦  «        }||k    r®|r¬d„ |j        j        D ¦   «         }|                      ||j        gd|¬¦  «        }|rGt          |¦  «        dk    r4t          dt          |¦  «        ›d|j        j        ›d|j        ›�¦  «        ‚|D ]+}|                      |                      ||¦  «        ¦  «         Œ,|j        |j        k    r|                      |                       |j        j        |||¦  «        ¦  «         | j!        D ]B}tE          |tF          ¦  «        r+| $                    |j        j        |j        |j        ¦  «         ŒCg }g }g }| %                    | j        ¬¦  «        }| %                    | j        ¬¦  «        }||k    s-||k    s'||k    s!| j        j        j&        rW|j'        |j'        k    rG|  (                    ||||||¦  «        \  } }!| )                    | ¦  «         | *                    |!¦  «         |j+        tX          urI|j+        tX          u s|j+        |j+        k    r*| )                    |  -                    |||¦  «        ¦  «         n:|j+        tX          ur,| )                    |  -                    |||d¬¦  «        ¦  «         d
}"|j.        rˆ|j.        s�|j+        tX          u rs|  /                    |¦  «        }#|  /                    |¦  «        }$|  0                    |¦  «        s4|#|$k    r.|$�,d}"| )                    |  1                    |||¦  «        ¦  «         |j.        |j.        k    r.|  2                    |||¦  «        } | r| )                    | ¦  «         | 3                    ¦   «         p|j+        tX          uo|j.        o|j.         }%|s|�rj|%s||z  }| j        j        j4        rA|r?tk          tm          |Ž ¦  «        \  }}&d 7                    |¦  «        tq          |&g ¦  «        fg}|D ]C\  }}&|                      | j9        |  :                    |j        j        ¦  «        |dœz  |&¦  «         ŒD|%rÉ|j+        tX          u rd}'|$g}&n|  ;                    |¦  «        \  }'}&|                      | j<        |  :                    |j        j        ¦  «        |  :                    |j        ¦  «        |'dœz  |&¦  «         |D ]C\  }}&|                      | j9        |  :                    |j        j        ¦  «        |dœz  |&¦  «         ŒD|r|D ]\  }}&|                      ||&¦  «         Œ|j        r|j        s|  =                    ||¦  «         |  >                    ||¦  «        r*|                      |  ?                    ||g¦  «        ¦  «         |j        r|j        r9|j        r2|j        s+|                      |  @                    ||g¬¦  «        ¦  «         g }(|r#|( *                    t-          ||¦  «        ¦  «         |                      ||¦  «        rL|                      |  A                    ||¦  «        ¦  «         |( *                    t-          ||¦  «        ¦  «         |(D �]\  })}|j         B                    | j        ¬¦  «        }*|*d         }+|*                     d¦  «        },|)j         B                    | j        ¬¦  «        }-|-                     d¦  «        }.|  (                    |j        |)j        |j        |+|.|,¦  «        \  } }!|                      | j9        |  :                    |j        j        j        ¦  «        | d         dœz  | d         ¦  «         |!D ]\  }}&|                      ||&¦  «         Œ�Œ| j        j        j        rH|j        rA|	s|j        r|j        s1|j        r*|                      |  C                    ||d¦  «        ¦  «         |rH|(D ]E\  }/}0|0j        j        r4|                      |  C                    |0j        |0j        d¦  «        ¦  «         ŒF||k    rZ|rX|  D                    |j        j        |j        gd¬ ¦  «        }|                      |  E                    |||d!         ¦  «        ¦  «         |"r\|  1                    |||d¬¦  «        \  }1}&| j9        |  :                    |j        j        ¦  «        |1dœz  }|                      ||&¦  «         | j        j        jF        r| j         G                    ¦   «          dS dS )"z3Perform a "physical" (non-ManyToMany) field update.rª   )ÚignoreTr…  rI  rJ  z!) of foreign key constraints for ú.c                 ó   — h | ]	}|j         ’Œ
S rV   rB  rC  s     r   r'  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>Ì  ó'   € ð %ð %ð %Ø$.�
”ð%ð %ð %r    F)rº   r   rF  z) of unique constraints for r£   c                 ó   — h | ]	}|j         ’Œ
S rV   rB  )r3   r  s     r   r'  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>  s   € ÐLÐLÐL¨u ¤
ÐLÐLÐLr    )r  Útype_rF  c                 ó   — h | ]	}|j         ’Œ
S rV   rB  rC  s     r   r'  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>  r¦  r    )rs   rF  z) of check constraints for rr   rs  Nr~   ru  rÔ   )r�   rŽ   r÷   ©r›   rÈ   r   rw   Ú_fkÚ_check©r:  rs   )HÚsetrC   rF   r�   r<   r‹   rŽ  rN  rŽ   rQ  rR  r(   rŒ   ÚaddrP   r‡  rº   Ú_field_became_primary_keyr”   Ú_delete_unique_sqlr§   r   r;   Úrelated_modelr   Údb_indexrM  r   r:  Ú_delete_index_sqlr¡  Ú_delete_check_sqlÚ_rename_field_sqlrL   rÜ   r
   Úrename_column_referencesr‰   rþ   rª   Ú_alter_column_type_sqlrb   rŠ   r­   r   Ú"_alter_column_database_default_sqlr¬   r±   r°   r{  Ú_alter_column_null_sqlrð   Úsupports_combined_altersrc   r:   r—   Úsumr|  rj   r®   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr„   r<  Ú_create_primary_key_sqlr‡   r‘   Ú_create_index_nameÚ_create_check_sqlr~  r  )2rI   r-   r5   r9   r“  r•  r’  r”  r‘  Úfks_droppedrŠ  r‹  rU  rX  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr?   Úrel_fk_namesrV  Úindex_namesÚ
index_nameÚold_db_checkÚnew_db_checkrU   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrX   r¿   Úrels_to_updater>   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationr�  Úrelr‚  s2                                                     r   r�  z%BaseDatabaseSchemaEditor._alter_field   sõ  € õ ‘e”eˆàŒOÔ$Ô:ð	BàÔ&ð	Bð Ô'ð	Bð ×-Ò-ØØØ$�~ð .ñ ô ð		Bð ×-Ò-Ø˜	Ô(Ð)°tð .ñ ô ˆHð ð �#˜h™-œ-¨1Ò,Ð,Ý �jõ ˜H™œ˜˜ØœÔ,Ð,Ð,Ø!Ô(Ð(ð	ñô ð ð $ð Bð B�Ø—’ Ô!1Ð 3Ñ4Ô4Ð4Ø—’˜T×0Ò0°¸Ñ@Ô@ÑAÔAÐAÐAàÔð 	NØÔ ð	NØ$(×$BÒ$BÀ9ÈiÑ$XÔ$Xð	Nð%ð %Ø27´+Ô2Ið%ñ %ô %Ð!ð  $×5Ò5ØØÔ!Ð"ØØ!Ø-ð  6ñ  ô  Ðð ð �#Ð.Ñ/Ô/°1Ò4Ð4Ý �jõ Ð,Ñ-Ô-Ð-Ð-ØœÔ,Ð,Ð,Ø!Ô(Ð(ð	ñô ð ð $4ð Nð N�Ø—’˜T×4Ò4°U¸OÑLÔLÑMÔMÐMÐMð &×)Ò)¨+Ñ6Ô6ˆØ%×)Ò)¨+Ñ6Ô6ˆàŒOÔ$Ô:ð MàÔ&Ð@¨9Ô+@ð ;ØÔ$Ð9¨Ô)9ðMð
 ˜hÒ&ÐK¨M¸]Ò,Jð 	ð ð 	Võ &>¸iÈÑ%SÔ%Sð Vð VÑ!�˜'Ø#×5Ò5ØÔ)¨G¬MÔ,@Ð+AÈtð  6ñ  ô  �ð  ,ð Vð V�GØ—L’L ×!4Ò!4°WÔ5JÈGÑ!TÔ!TÑUÔUÐUÐUðVð Ôð	HàÔ$ð	Hð Ô'ð	Hð ,5Ô+;ð	Hð  MÐL¸¼Ô8KÐLÑLÔLÐð ×0Ò0ØØÔ!Ð"ØÝ”lØ(ð 1ñ ô ˆKð *ð Hð H�
ð —’˜T×3Ò3°E¸:ÑFÔFÑGÔGÐGÐGà×+Ò+¨I°}ÑEÔEˆØ×+Ò+¨I°}ÑEÔEˆØ˜<Ò'Ð'¨LÐ'ð%ð %Ø27´+Ô2Ið%ñ %ô %Ð!ð  $×5Ò5ØØÔ!Ð"ØØ-ð	  6ñ  ô  Ðð ð �#Ð.Ñ/Ô/°1Ò4Ð4Ý �jõ Ð,Ñ-Ô-Ð-Ð-ØœÔ,Ð,Ð,Ø!Ô(Ð(ð	ñô ð ð $4ð Mð M�Ø—’˜T×3Ò3°E¸?ÑKÔKÑLÔLÐLÐLàÔ˜yÔ/Ò/Ð/Ø�LŠLØ×&Ò&Ø”KÔ(¨)°YÀñô ñô ð ð Ô(ð ð �Ý˜c¥9Ñ-Ô-ð Ø×0Ò0ØœÔ,¨iÔ.>À	Ô@Pñô ð øð ˆØˆØˆà#×2Ò2¸d¼oÐ2ÑNÔNˆØ#×2Ò2¸d¼oÐ2ÑNÔNˆð ˜Ò Ð Ø /Ò1Ð1Ø Ò-Ð-à”Ô(Ô:ð .ð Ô(¨IÔ,@Ò@Ð@ð '+×&AÒ&AØ�y )¨X°}Àmñ'ô 'Ñ#ˆH�mð �NŠN˜8Ñ$Ô$Ð$Ø×Ò Ñ.Ô.Ð.àÔ¥|Ð3Ð3àÔ$­Ð4Ð4ØÔ'¨9Ô+?Ò?Ð?à—’Ø×;Ò;¸EÀ9ÈiÑXÔXñô ð øð Ô!­Ð5Ð5Ø�NŠNØ×7Ò7Ø˜9 i°dð 8ñ ô ñô ð ð "'ÐàŒNð	à”Nð	ð Ô$­Ð4Ð4à×0Ò0°Ñ;Ô;ˆKØ×0Ò0°Ñ;Ô;ˆKà×.Ò.¨yÑ9Ô9ðà ;Ò.Ð.ØÐ+à)-Ð&Ø—’Ø×2Ò2°5¸)ÀYÑOÔOñô ð ð Œ>˜Yœ^Ò+Ð+Ø×2Ò2°5¸)ÀYÑOÔOˆHØð .Ø×#Ò# HÑ-Ô-Ð-ð ×!Ò!Ñ#Ô#ÐO yÔ';Å<Ð'Oð'6àŒ~Ð4 i¤nÐ"4ð 	$ð ð -	�lñ -	Ø.ð (ð ˜<Ñ'�àŒÔ'Ô@ð >ÀWð >Ý#¥C¨ MÑ2Ô2‘��VØ ŸIšI c™NœN­C°¸©O¬OÐ<Ð=�à&ð ð ‘��VØ—’ØÔ)à!%§¢°´Ô1EÑ!FÔ!FØ#&ðð ñð
 ñô ð ð ð +ð ØÔ'­<Ð7Ð7Ø"&�KØ)˜]�F�Fà*.×*=Ò*=¸iÑ*HÔ*HÑ'�K à—’ØÔ0à!%§¢°´Ô1EÑ!FÔ!FØ"&§/¢/°)Ô2BÑ"CÔ"CØ#.ðð ñð ñô ð ð $0ð ð ‘K�C˜Ø—L’LØÔ-à%)§_¢_°U´[Ô5IÑ%JÔ%JØ'*ðð ñð
 ñô ð ð ð ð 	*Ø+ð *ð *‘��VØ—’˜S &Ñ)Ô)Ð)Ð)àÔ ð 	4¨Ô)>ð 	4Ø×$Ò$ U¨FÑ3Ô3Ð3à×'Ò'¨	°9Ñ=Ô=ð 	FØ�LŠL˜×0Ò0°¸¸ÑDÔDÑEÔEÐEð Ô#ð	LØ'0Ô'7ð	LàÔ"ð	Lð Ô$ð	Lð
 �LŠL˜×/Ò/°¸y¸kÐ/ÑJÔJÑKÔKÐKð ˆØð 	RØ×!Ò!Õ":¸9ÀiÑ"PÔ"PÑQÔQÐQà×)Ò)¨)°YÑ?Ô?ð 	Rà�LŠL˜×5Ò5°e¸YÑGÔGÑHÔHÐHà×!Ò!Õ":¸9ÀiÑ"PÔ"PÑQÔQÐQà .ð 	*ñ 	*ÑˆG�WØ#œM×7Ò7À4Ä?Ð7ÑSÔSˆMØ$ VÔ,ˆHØ)×-Ò-¨kÑ:Ô:ˆMØ '¤× ;Ò ;ÀtÄÐ ;Ñ WÔ WÐØ 1× 5Ò 5°kÑ BÔ BÐØ&*×&AÒ&AØÔ%Ø”Ø”ØØ!Øñ'ô 'Ñ#ˆH�mð �LŠLØÔ%à!Ÿ_š_¨WÔ-BÔ-HÔ-QÑRÔRØ'¨œ{ðð ñð
 ˜”ñô ð ð  -ð *ð *‘��VØ—’˜S &Ñ)Ô)Ð)Ð)ñ*ð ŒOÔ$Ô:ð
	àÔ&ð
	ð ð	
	ð $-Ô#9ð	
	ð BKÔAXð	
	ð Ô'ð
	ð �LŠLØ×#Ò# E¨9Ð6VÑWÔWñô ð ð ð 	Ø(ð ð ‘��3Ø”9Ô*ð Ø—L’LØ×+Ò+¨CÔ,=¸s¼yÈ%ÑPÔPñô ð øð ˜<Ò'Ð'¨LÐ'Ø"×5Ò5Ø”Ô$ yÔ'7Ð&8Àð 6ñ ô ˆOð �LŠLØ×&Ò& u¨o¸}ÈWÔ?UÑVÔVñô ð ð
 "ð 	&Ø"&×"@Ò"@Ø�y )°$ð #Añ #ô #ÑˆK˜ð Ô'ØŸš¨¬Ô)=Ñ>Ô>Ø&ð+ð +ñ ˆCð �LŠL˜˜fÑ%Ô%Ð%àŒ?Ô#ÔCð 	$ØŒO×!Ò!Ñ#Ô#Ð#Ð#Ð#ð	$ð 	$r    c                 óæ   — | j         j        j        r	|j        rdS |                     | j         ¬¦  «        }|j        r| j        n| 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.
        Nrr   rÈ   )rŽ   rÈ   )
rC   rF   r¶   rµ   r‡   r¬   Úsql_alter_column_nullÚsql_alter_column_not_nullrj   rŽ   )rI   r-   r5   r9   r”  rU   s         r   rº  z/BaseDatabaseSchemaEditor._alter_column_null_sql  sš   € ð ŒOÔ$ÔFð	àÔ/ð	ð
 ˆFà%×3Ò3¸t¼Ð3ÑOÔOˆMð ”>ð4�Ô*Ð*àÔ3ð ð à"Ÿošo¨iÔ.>Ñ?Ô?Ø)¨&Ô1ðð ñð
 ðð r    c                 ó~  — |                       |¦  «        }|                      |¦  «        }|g}|rg }n(| j        j        j        r|                      |¦  «        }g }|                     | j        ¬¦  «        }|r|j        r| j        }	n| j	        }	n| 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.
        rr   rÈ   ©rŽ   rÈ   r÷   )r±   r²   rC   rF   r³   r´   r‡   r¬   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrj   rŽ   )
rI   r-   r5   r9   rt  r×  r÷   rX   r”  rU   s
             r   r{  z2BaseDatabaseSchemaEditor._alter_column_default_sql1  sî   € ð ×,Ò,¨YÑ7Ô7ˆØ×*Ò*¨9Ñ5Ô5ˆØ�ˆàð 	ØˆFˆFØŒ_Ô%Ô?ð 	ð ×*Ò*¨;Ñ7Ô7ˆGØˆFà!×/Ò/¸4¼?Ð/ÑKÔKˆØð 	0ØŒ~ð 7ØÔ;��àÔ6��àÔ/ˆCààŸ/š/¨)Ô*:Ñ;Ô;Ø% fÔ-Ø"ðð ñð ð
ð 	
r    c                 óä   — |r| j         }d}g }n| 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[   rr   rÈ   rä  )ræ  rç  r®   r‡   rC   rj   rŽ   )	rI   r-   r5   r9   rt  rU   r¿   rX   r”  s	            r   r¹  z;BaseDatabaseSchemaEditor._alter_column_database_default_sqlW  s—   € ð ð 	AØÔ2ˆCØˆKØˆFˆFàÔ/ˆCØ"&×"5Ò"5°iÑ"@Ô"@ÑˆK˜à!×/Ò/¸4¼?Ð/ÑKÔKˆààŸ/š/¨)Ô*:Ñ;Ô;Ø% fÔ-Ø&ðð ñð ð
ð 	
r    c                 óº  — g }|                       |||j        j        ¦  «        x}rd|› �}nd}d}	| j        j        j        rq|j        sj|j        |j        k    r9|                      ||||j        ¦  «        \  }
}|
r| 	                    |
|f¦  «         |j        r|  
                    |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.
        rt   r[   )rŽ   rÈ   r£   re  )r¨   r(   rŒ   rC   rF   rþ   r   rª   r  rb   r«   Úsql_alter_column_typerj   rŽ   )rI   r-   r5   r9   r•  rÅ  rÆ  rÔ  Úcollate_sqlÚcomment_sqlrU   rX   s               r   r¸  z/BaseDatabaseSchemaEditor._alter_column_type_sqls  s2  € ð ˆØ×+Ò+Ø˜=¨%¬+Ô*>ñ
ô 
ð 
ˆ;ð 	ð ,˜kÐ+Ð+ˆKˆKàˆKàˆØŒ?Ô#Ô5ð 
	F¸iÔ>Tð 
	FØÔ# yÔ';Ò;Ð;ð #×<Ò<Ø˜9 h°	Ô0Dñô ‘��Vð ð 8Ø!×(Ò(¨#¨v¨Ñ7Ô7Ð7ØÔ#ð FØ"×/Ò/°	Ô0DÑEÔE�ð Ô*à"Ÿošo¨iÔ.>Ñ?Ô?Ø$Ø!,Ø*ð	ð ñð ð	ð ð
ð 	
r    c                 ó²   — | j         |                      |j        j        ¦  «        |                      |j        ¦  «        |                      |¦  «        dœz  g fS )N)r�   rŽ   re  )Úsql_alter_column_commentrj   r(   rŒ   rŽ   r«   )rI   r-   r9   r•  Únew_db_comments        r   r  z2BaseDatabaseSchemaEditor._alter_column_comment_sql¡  s]   € àÔ)àŸš¨¬Ô)=Ñ>Ô>ØŸ/š/¨)Ô*:Ñ;Ô;Ø×,Ò,¨^Ñ<Ô<ðð ñð ð
ð 	
r    c                 ó0   — |                       |pd¦  «        S )Nr[   rå   )rI   re  s     r   r«   z%BaseDatabaseSchemaEditor._comment_sql¬  s   € Ø×Ò  ¨2Ñ.Ô.Ð.r    c                 ó  — |j         j        j        j        |j         j        j        j        k    rI|                      |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                             |                     ¦   «         ¦  «        ¦  «         dS )z*Alter M2Ms to repoint their to= endpoints.N)	r<   r  r(   rŒ   rc  r™  rn   Úm2m_reverse_field_nameÚm2m_field_name)rI   r-   r5   r9   r‘  s        r   r�  z,BaseDatabaseSchemaEditor._alter_many_to_many¯  sc  € ð Ô"Ô*Ô0Ô9ØÔ%Ô-Ô3Ô<ò=ð =ð ×ÒØÔ&Ô.ØÔ&Ô.Ô4Ô=ØÔ&Ô.Ô4Ô=ñô ð ð 	×ÒØÔ"Ô*ð Ô"Ô*Ô0×:Ò:Ø×0Ò0Ñ2Ô2ñô ð Ô"Ô*Ô0×:Ò:Ø×0Ò0Ñ2Ô2ñô ñ	
ô 	
ð 	
ð 	×ÒØÔ"Ô*àÔ"Ô*Ô0×:Ò:¸9×;SÒ;SÑ;UÔ;UÑVÔVØÔ"Ô*Ô0×:Ò:¸9×;SÒ;SÑ;UÔ;UÑVÔVñ		
ô 	
ð 	
ð 	
ð 	
r    r[   c                 ó,  — t          |¦  «        \  }}t          |g|¢R ddiŽ›|›�}| j        j                             ¦   «         pd}|›dd                     |¦  «        ›d|›�}t          |¦  «        |k    r|S t          |¦  «        |dz  k    r|d|dz  …         }|t          |¦  «        z
  dz  dz
  }|d|…         ›dd                     |¦  «        d|…         ›d|›�}|d	         dk    s|d	                              ¦   «         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é   éÈ   r�  é   Né   rI  r   zD%séÿÿÿÿ)r   r   rC   ri   Úmax_name_lengthr—   rQ  Úisdigit)	rI   Ú
table_nameÚcolumn_namesr:  r�  Úhash_suffix_partÚ
max_lengthrË  Úother_lengths	            r   rÁ  z+BaseDatabaseSchemaEditor._create_index_nameÏ  s_  € õ )¨Ñ4Ô4‰ˆˆ:å˜Ð= lÐ=Ð=Ð=¸1Ð=Ð=Ð=ØˆFð
Ðð ”_Ô(×8Ò8Ñ:Ô:ÐA¸cˆ
à#- : :¨s¯xªx¸Ñ/EÔ/EÐ/EÐ/EÐGWÐGWÐXˆ
Ýˆz‰?Œ?˜jÒ(Ð(ØÐåÐÑ Ô  :°¡>Ò1Ð1Ø/Ð0A°*À±/Ð0AÔBÐØ"¥SÐ)9Ñ%:Ô%:Ñ:¸qÑ@À1ÑDˆà�}˜�}Ô%Ð%Ð%Ø�HŠH�\Ñ"Ô" = L =Ô1Ð1Ð1ØÐð
ˆ
ð �aŒ=˜CÒÐ :¨a¤=×#8Ò#8Ñ#:Ô#:ÐØ ¨C¨R¨C¤Ñ0ˆJØÐr    c                 ó  — |€_t          |¦  «        dk    r|d         j        r|d         j        }n1t          j        rt          j        }n|j        j        r|j        j        }|�"d| j        j                             |¦  «        z   S dS )NrI  r   rt   r[   )rQ  r˜   r   ÚDEFAULT_INDEX_TABLESPACEr(   rC   ri   r™   )rI   r-   r›   r˜   s       r   Ú_get_index_tablespace_sqlz2BaseDatabaseSchemaEditor._get_index_tablespace_sqlï  sˆ   € ØÐ Ý�6‰{Œ{˜aÒÐ F¨1¤IÔ$;ÐØ & q¤	Ô 7��ÝÔ2ð :Ý (Ô A��Ø”Ô*ð :Ø %¤Ô 9�ØÐ$Ø˜œÔ,×;Ò;¸MÑJÔJÑJÐJØˆrr    c                 ó   — |rd|z   S dS )Nz WHERE r[   rV   )rI   Ú	conditions     r   Ú_index_condition_sqlz-BaseDatabaseSchemaEditor._index_condition_sqlû  s   € Øð 	)Ø˜yÑ(Ð(Øˆrr    c                 óŠ   — |r| j         j        j        sdS t          dt	          |j        j        || j        ¦  «        ¬¦  «        S )Nr[   z INCLUDE (%(columns)s))rW  )rC   rF   Úsupports_covering_indexesr
   r   r(   rŒ   rj   )rI   r-   rW  s      r   Ú_index_include_sqlz+BaseDatabaseSchemaEditor._index_include_sql   sN   € Øð 	˜dœoÔ6ÔPð 	Ø�2ÝØ$Ý˜EœKÔ0°'¸4¼?ÑKÔKð
ñ 
ô 
ð 	
r    )r›   r   r:  Úusingr˜   Úcol_suffixesrU   Ú	opclassesr  ÚincludeÚexpressionsc                ó  ‡ ‡— |pg }|pg }t          |d¬¦  «                             ‰ j        ¬¦  «        }‰                      |||¬¦  «        }d„ |D ¦   «         }|p‰ j        }|j        j        }ˆˆ fd„}t          |t          |‰ j	        ¦  «        t          ||||¦  «        ||r‰                      ||||	¦  «        nt          |||‰ j        ¦  «        |‰                      |
¦  «        ‰                      ||¦  «        ¬¦  «        S )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_colsrr   )r˜   c                 ó   — g | ]	}|j         ‘Œ
S rV   ©rŽ   ©r3   r   s     r   rp   z>BaseDatabaseSchemaEditor._create_index_sql.<locals>.<listcomp>%  ó   € Ð4Ð4Ð4 E�5”<Ð4Ð4Ð4r    c                  óL   •— ‰€ ‰j         | i |¤ŽŠ‰                     ‰¦  «        S r1   )rÁ  rj   )ÚargsÚkwargsr   rI   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name)  s1   ø€ àˆ|Ø.�tÔ.°Ð?¸Ð?Ð?�Ø—?’? 4Ñ(Ô(Ð(r    )r�   r   r  rW  rY   r  r  )r   rÝ   rC   r  Úsql_create_indexr(   rŒ   r
   r   rj   r	   Ú_index_columnsr   re   r  r
  )rI   r-   r›   r   r:  r  r˜   r  rU   r  r  r  r  rà   r™   rW  r  r�   r  s   `  `               r   r<  z*BaseDatabaseSchemaEditor._create_index_sql  sR  øø€ ð* �˜2ˆØ!Ð' RˆÝ˜¨5Ð1Ñ1Ô1×>Ò>Ø”ð ?ñ 
ô 
ˆð ×7Ò7Ø�6¨ð 8ñ 
ô 
ˆð 5Ð4¨VÐ4Ñ4Ô4ˆØÐ7 $Ô"7ÐØ”Ô$ˆð	)ð 	)ð 	)ð 	)ð 	)ð 	)õ ØÝ˜˜tœÑ/Ô/Ý˜5 '¨6Ð3DÑEÔEØð ðQ�×#Ò# E¨7°LÀ)ÑLÔLÐLå  ¨°X¸tÔ?OÑPÔPà Ø×/Ò/°	Ñ:Ô:Ø×+Ò+¨E°7Ñ;Ô;ð
ñ 
ô 
ð 	
r    c                 ó”   — t          |p| j        t          |j        j        | j        ¦  «        |                      |¦  «        ¬¦  «        S ©N)r�   r   )r
   r;  r   r(   rŒ   rj   )rI   r-   r   rU   s       r   r´  z*BaseDatabaseSchemaEditor._delete_index_sql>  sG   € ÝØÐ(�4Ô(Ý˜œÔ,¨d¬oÑ>Ô>Ø—’ Ñ&Ô&ð
ñ 
ô 
ð 	
r    c                 ó¸   — t          | j        t          |j        j        | j        ¦  «        |                      |¦  «        |                      |¦  «        ¬¦  «        S )N)r�   Úold_nameÚnew_name)r
   Úsql_rename_indexr   r(   rŒ   rj   )rI   r-   r   r!  s       r   r  z*BaseDatabaseSchemaEditor._rename_index_sqlE  sQ   € ÝØÔ!Ý˜œÔ,¨d¬oÑ>Ô>Ø—_’_ XÑ.Ô.Ø—_’_ XÑ.Ô.ð	
ñ 
ô 
ð 	
r    c                 ó2   — t          ||| j        |¬¦  «        S )N)r  )r   rj   )rI   r�   rW  r  r  s        r   r  z'BaseDatabaseSchemaEditor._index_columnsM  s   € Ý�u˜g t¤À\ÐRÑRÔRÐRr    c                 óø  ‡— ‰j         j        r‰j         j        s‰j         j        rg S g }‰j         j        D ]+}|                     |                      ‰|¦  «        ¦  «         Œ,‰j         j        D ];}ˆfd„|D ¦   «         }|                     |  	                    ‰|d¬¦  «        ¦  «         Œ<‰j         j
        D ]C}|j        r| j        j        j        r)|                     |                     ‰| ¦  «        ¦  «         ŒD|S )zŠ
        Return a list of all index SQL statements (field indexes,
        index_together, Meta.indexes) for the specified model.
        c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rV   rm   ro   s     €r   rp   z?BaseDatabaseSchemaEditor._model_indexes_sql.<locals>.<listcomp>]  rq   r    r8  r9  )r(   ÚmanagedÚproxyÚswappedr…   rŠ   r}  Úindex_togetherrb   r<  rM  r  rC   rF   r  r•   )rI   r-   Úoutputr   rš   r›   r  s    `     r   r  z+BaseDatabaseSchemaEditor._model_indexes_sqlP  s#  ø€ ð
 Œ{Ô"ð 	 e¤kÔ&7ð 	¸5¼;Ô;Nð 	ØˆIØˆØ”[Ô-ð 	Að 	AˆEØ�MŠM˜$×1Ò1°%¸Ñ?Ô?Ñ@Ô@Ð@Ð@ð !œ;Ô5ð 	Wð 	WˆKØLÐLÐLÐLÀÐLÑLÔLˆFØ�MŠM˜$×0Ò0°¸vÈfÐ0ÑUÔUÑVÔVÐVÐVà”[Ô(ð 	=ð 	=ˆEàÔ.ð=à”?Ô+ÔGð=ð —’˜e×.Ò.¨u°dÑ;Ô;Ñ<Ô<Ð<øØˆr    c                 óŒ   — g }|                       ||¦  «        r+|                     |                      ||g¬¦  «        ¦  «         |S )zT
        Return a list of all index SQL statements for the specified field.
        rª  )Ú_field_should_be_indexedrb   r<  )rI   r-   r   r*  s       r   r}  z+BaseDatabaseSchemaEditor._field_indexes_sqlh  sN   € ð ˆØ×(Ò(¨°Ñ6Ô6ð 	IØ�MŠM˜$×0Ò0°À¸wÐ0ÑGÔGÑHÔHÐHØˆr    c                 óÔ  — |j         s	|j         sdS |pt          ¦   «         }|                     ¦   «         \  }}}}|                     ¦   «         \  }}}	}
|                     |j        ¦  «        D ]}|                     |d ¦  «         Œ|                     |j        ¦  «        D ]}|
                     |d ¦  «         Œ|j        sh|j        ra|j        rZ|j        j        j	        j
        |j        j        j	        j
        k    r,|                     dd ¦  «         |
                     dd ¦  «         |                     d¦  «        rk|
                     d¦  «        rV|                      |¦  «        |                      |¦  «        k    r*|                     d¦  «         |
                     d¦  «         |                      |j        ¦  «        |                      |j        ¦  «        k    p|||f||	|
fk    S )NFÚtor­   )Úconcreter®  ÚdeconstructÚunionÚnon_db_attrsÚpopr   r<   r-   r(   rŒ   r§   r®   rj   rŽ   )rI   r5   r9   r£  r�  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   rŽ  z1BaseDatabaseSchemaEditor._field_should_be_alteredq  s  € ØÔ!ð 	¨)Ô*<ð 	Ø�5Ø��3™5œ5ˆØ,5×,AÒ,AÑ,CÔ,CÑ)ˆˆ8�X˜zØ,5×,AÒ,AÑ,CÔ,CÑ)ˆˆ8�X˜zð —L’L Ô!7Ñ8Ô8ð 	'ð 	'ˆDØ�NŠN˜4 Ñ&Ô&Ð&Ð&Ø—L’L Ô!7Ñ8Ô8ð 	'ð 	'ˆDØ�NŠN˜4 Ñ&Ô&Ð&Ð&àÔ&ð	'àÔ&ð	'ð Ô&ð	'ð Ô&Ô,Ô2Ô;ØÔ%Ô+Ô1Ô:ò;ð ;ð �NŠN˜4 Ñ&Ô&Ð&Ø�NŠN˜4 Ñ&Ô&Ð&ð �NŠN˜<Ñ(Ô(ð	)à—’˜|Ñ,Ô,ð	)ð ×#Ò# IÑ.Ô.°$×2EÒ2EÀiÑ2PÔ2PÒPÐPà�NŠN˜<Ñ(Ô(Ð(Ø�NŠN˜<Ñ(Ô(Ð(Ø�Š˜yÔ/Ñ0Ô0°D·O²OØÔñ5
ô 5
ò 
ð Rà˜ *Ð-°(¸HÀjÐ1QÒQð	Rr    c                 ó    — |j         o|j         S r1   )r³  rº   ©rI   r-   r   s      r   r,  z1BaseDatabaseSchemaEditor._field_should_be_indexed–  s   € ØŒ~Ð2 e¤lÐ"2Ð2r    c                 ó    — |j          o|j         S r1   ©r   ©rI   r5   r9   s      r   r°  z2BaseDatabaseSchemaEditor._field_became_primary_key™  s   € ØÔ(Ð(ÐB¨YÔ-BÐBr    c                 ó>   — |j          o|j        o|j         p|j         S r1   )r   rº   r?  s      r   r¿  z0BaseDatabaseSchemaEditor._unique_should_be_addedœ  s3   € àÔ%Ð%ð @ØÔ ð@àÔ%Ð%Ð>¨Ô)>ð	
r    c                 ó¦   — | j         |                      |¦  «        |                      |j        ¦  «        |                      |j        ¦  «        |dœz  S )N)r�   Ú
old_columnÚ
new_columnrÈ   )Úsql_rename_columnrj   rŽ   )rI   r�   r5   r9   r•  s        r   r¶  z*BaseDatabaseSchemaEditor._rename_field_sql£  sR   € ØÔ%Ø—_’_ UÑ+Ô+ØŸ/š/¨)Ô*:Ñ;Ô;ØŸ/š/¨)Ô*:Ñ;Ô;Øð	)
ð )
ñ 
ð 	
r    c           	      óè  — t          |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
                             ¦   «         }	t          | j        ||||||	¬¦  «        S )N)r�   r   rŽ   ru   rv   rr  )r   r(   rŒ   rj   rx  r   rŽ   Útarget_fieldr-   rC   ri   ry  r
   Úsql_create_fk)
rI   r-   r   r:  r�   r   rŽ   ru   rv   rr  s
             r   r‘   z'BaseDatabaseSchemaEditor._create_fk_sql«  sÞ   € Ý�e”kÔ*¨D¬OÑ<Ô<ˆØ×'Ò'¨¨u°fÑ=Ô=ˆÝ˜œÔ-°´¨~¸t¼ÑOÔOˆÝ˜Ô+Ô1Ô7Ô@À$Ä/ÑRÔRˆÝØÔÔ$Ô*Ô3ØÔÔ&Ð'ØŒOñ
ô 
ˆ	ð
 ”_Ô(×7Ò7Ñ9Ô9ˆ
ÝØÔØØØØØØ!ð
ñ 
ô 
ð 	
r    c                 óº   ‡ — ˆ fd„}t          |j        j        |j        gt	          |j        j        j        j        ¦  «        d         |j        j        g||¦  «        S )Nc                  óD   •— ‰                       ‰j        | i |¤Ž¦  «        S r1   ©rj   rÁ  ©r  r  rI   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_nameÁ  s(   ø€ Ø—?’?Ð#: 4Ô#:¸DÐ#KÀFÐ#KÐ#KÑLÔLÐLr    rI  )r   r(   rŒ   rŽ   r   rF  r-   )rI   r-   r   r:  rL  s   `    r   rx  z,BaseDatabaseSchemaEditor._fk_constraint_nameÀ  sr   ø€ ð	Mð 	Mð 	Mð 	Mð 	Mõ ØŒKÔ ØŒ\ˆNÝ˜UÔ/Ô5Ô;ÔDÑEÔEÀaÔHØÔÔ&Ð'ØØñ
ô 
ð 	
r    c                 ó:   — |                       | j        ||¦  «        S r1   )rS  Úsql_delete_fk©rI   r-   r   s      r   r‡  z'BaseDatabaseSchemaEditor._delete_fk_sqlÍ  ó   € Ø×*Ò*¨4Ô+=¸uÀdÑKÔKÐKr    c                 óV   — |€dS |t           j        k    rdS |t           j        k    rdS d S )Nr[   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   ÚDEFERREDÚ	IMMEDIATE)rI   rr  s     r   Ú_deferrable_constraint_sqlz3BaseDatabaseSchemaEditor._deferrable_constraint_sqlÐ  s=   € ØÐØ�2Ø�Ô,Ò,Ð,Ø3Ð3Ø�Ô-Ò-Ð-Ø4Ð4ð .Ð-r    c                 ó   — |du rdS |du rdS dS )NFz NULLS NOT DISTINCTTz NULLS DISTINCTr[   rV   )rI   Únulls_distincts     r   Ú _unique_index_nulls_distinct_sqlz9BaseDatabaseSchemaEditor._unique_index_nulls_distinct_sqlØ  s)   € Ø˜UÐ"Ð"Ø(Ð(Ø˜tÐ#Ð#Ø$Ð$Øˆrr    c                 óÌ   — | s| j         j        j        oP| p| j         j        j        o<| p| j         j        j        o(| p| j         j        j        o|d u p| j         j        j        S r1   )rC   rF   Úsupports_partial_indexesÚ&supports_deferrable_unique_constraintsr	  r  Ú*supports_nulls_distinct_unique_constraints)rI   r  rr  r  r  rV  s         r   Ú_unique_supportedz*BaseDatabaseSchemaEditor._unique_supportedß  sˆ   € ð ˆ]ÐO˜dœoÔ6ÔOð à�ð SØ”?Ô+ÔRðð
 �ÐR ¤Ô 8Ô Rðð  �ÐW 4¤?Ô#;Ô#Wðð  $Ð&ð WØ”?Ô+ÔVð	
r    c
           
      ó„  ‡ — ‰                       |||||	¬¦  «        sd S |s|s|s|s|	�;‰                      ||||||||	¬¦  «        }
|
r‰ j                             |
¦  «         d S ‰ j        d                     ˆ fd„|D ¦   «         ¦  «        ‰                      |¦  «        dœz  }‰ j        ‰                      |¦  «        |dœz  S )N©r  rr  r  r  rV  )r   r  r  r  r  rV  r~   c                 óD   •— g | ]}‰                      |j        ¦  «        ‘ŒS rV   )rj   rŽ   )r3   r   rI   s     €r   rp   z8BaseDatabaseSchemaEditor._unique_sql.<locals>.<listcomp>#  s'   ø€ Ð!TÐ!TÐ!TÀE $§/¢/°%´,Ñ"?Ô"?Ð!TÐ!TÐ!Tr    )rW  rr  ©r   r}   )	r\  r„   rL   rb   Úsql_unique_constraintr—   rT  Úsql_constraintrj   )rI   r-   r›   r   r  rr  r  r  r  rV  rU   r}   s   `           r   Ú_unique_sqlz$BaseDatabaseSchemaEditor._unique_sql÷  s:  ø€ ð ×%Ò%ØØ!ØØ#Ø)ð &ñ 
ô 
ð 	ð �4ð ð	àð	ð ð	ð ð		ð
 Ð)ð ×)Ò)ØØØØ#ØØ#Ø'Ø-ð *ñ 	ô 	ˆCð ð .ØÔ!×(Ò(¨Ñ-Ô-Ð-Ø�4ØÔ/Ø—y’yÐ!TÐ!TÐ!TÐ!TÈVÐ!TÑ!TÔ!TÑUÔUØ×9Ò9¸*ÑEÔEð3
ð 3
ñ 
ˆ
ð Ô"Ø—O’O DÑ)Ô)Ø$ð&
ð &
ñ 
ð 	
r    c
                 ó   — |                       |||||	¬¦  «        sd S t          |d¬¦  «                             | j        ¬¦  «        }
|j        j        }d„ |D ¦   «         }|€|                      ||d¬¦  «        }n|                      |¦  «        }|s|s|s|r| j        }n| j	        }|r|  
                    ||d|¬	¦  «        }nt          |||
| j        ¦  «        }t          |t          || j        ¦  «        |||                      |¦  «        |                      |¦  «        |                      ||¦  «        |                      |	¦  «        ¬
¦  «        S )Nr^  Fr  rr   c                 ó   — g | ]	}|j         ‘Œ
S rV   r  r  s     r   rp   z?BaseDatabaseSchemaEditor._create_unique_sql.<locals>.<listcomp>D  r  r    TrG  rV   )r  r  )r�   r   rW  r  rr  r  rV  )r\  r   rÝ   rC   r(   rŒ   rP  rj   Úsql_create_unique_indexÚsql_create_uniquer  r   re   r
   r   r  rT  r
  rW  )rI   r-   r›   r   r  rr  r  r  r  rV  rà   r�   rW  rU   s                 r   r„   z+BaseDatabaseSchemaEditor._create_unique_sql+  sž  € ð ×%Ò%ØØ!ØØ#Ø)ð &ñ 
ô 
ð 	ð �4å˜¨5Ð1Ñ1Ô1×>Ò>Ø”ð ?ñ 
ô 
ˆð ”Ô$ˆØ4Ð4¨VÐ4Ñ4Ô4ˆØˆ<Ø×/Ò/°°wÀdÐ/ÑKÔKˆDˆDà—?’? 4Ñ(Ô(ˆDØð 	)˜ð 	) 9ð 	)°ð 	)ØÔ.ˆCˆCàÔ(ˆCØð 	RØ×)Ò)Ø�w¨R¸9ð *ñ ô ˆGˆGõ " %¨°hÀÔ@PÑQÔQˆGÝØÝ˜˜tœÑ/Ô/ØØØ×/Ò/°	Ñ:Ô:Ø×6Ò6°zÑBÔBØ×+Ò+¨E°7Ñ;Ô;Ø×@Ò@ÀÑPÔPð	
ñ 	
ô 	
ð 		
r    c                 óF   ‡ — |rˆ fd„}n‰ j         }t          ||d|¦  «        S )Nc                  óD   •— ‰                       ‰j        | i |¤Ž¦  «        S r1   rJ  rK  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_namea  s(   ø€ Ø—’Ð'> tÔ'>ÀÐ'OÈÐ'OÐ'OÑPÔPÐPr    Ú_uniq)rÁ  r	   )rI   r�   rW  rH  rj  s   `    r   rP  z0BaseDatabaseSchemaEditor._unique_constraint_name^  sO   ø€ Øð 	9ðQð Qð Qð Qð Qð Qð "&Ô!8Ðå˜ ¨Ð2DÑEÔEÐEr    c	                 ó–   — |                       |||||¬¦  «        sd S |s|s|s|r| j        }	n| j        }	|                      |	||¦  «        S )Nr^  )r\  r;  r-  rS  )
rI   r-   r   r  rr  r  r  r  rV  rU   s
             r   r±  z+BaseDatabaseSchemaEditor._delete_unique_sqli  s~   € ð ×%Ò%ØØ!ØØ#Ø)ð &ñ 
ô 
ð 	ð �4Øð 	)˜ð 	) 9ð 	)°ð 	)ØÔ'ˆCˆCàÔ(ˆCØ×*Ò*¨3°°tÑ<Ô<Ð<r    c                 óV   — | j         |                      |¦  «        | j        d|iz  dœz  S )Nrs   r`  )rb  rj   rˆ   )rI   r   rs   s      r   Ú
_check_sqlz#BaseDatabaseSchemaEditor._check_sql‚  s;   € ØÔ"Ø—O’O DÑ)Ô)ØÔ3°wÀÐ6FÑFð&
ð &
ñ 
ð 	
r    c                 ó¸   — | j         j        j        sd S t          | j        t          |j        j        | j        ¦  «        |                      |¦  «        |¬¦  «        S )N)r�   r   rs   )	rC   rF   Ú supports_table_check_constraintsr
   Úsql_create_checkr   r(   rŒ   rj   )rI   r-   r   rs   s       r   rÂ  z*BaseDatabaseSchemaEditor._create_check_sqlˆ  sZ   € ØŒÔ'ÔHð 	Ø�4ÝØÔ!Ý˜œÔ,¨d¬oÑ>Ô>Ø—’ Ñ&Ô&Øð	
ñ 
ô 
ð 	
r    c                 ó`   — | j         j        j        sd S |                      | j        ||¦  «        S r1   )rC   rF   rp  rS  Úsql_delete_checkrO  s      r   rµ  z*BaseDatabaseSchemaEditor._delete_check_sql’  s2   € ØŒÔ'ÔHð 	Ø�4Ø×*Ò*¨4Ô+@À%ÈÑNÔNÐNr    c                 ó†   — t          |t          |j        j        | j        ¦  «        |                      |¦  «        ¬¦  «        S r  )r
   r   r(   rŒ   rj   )rI   Útemplater-   r   s       r   rS  z/BaseDatabaseSchemaEditor._delete_constraint_sql—  s?   € ÝØÝ˜œÔ,¨d¬oÑ>Ô>Ø—’ Ñ&Ô&ð
ñ 
ô 
ð 	
r    c
                 ó  ‡ — |�ˆ fd„|D ¦   «         }‰ j                              ¦   «         5 }
‰ j         j                             |
|j        j        ¦  «        }ddd¦  «         n# 1 swxY w Y   g }|                     ¦   «         D ]„\  }}|�||d         k    rq|�|d         |k    rŒ"|�|d         |k    rŒ1|�|d         |k    rŒ@|�|d         |k    rŒO|�	|d         sŒZ|�|d	         |k    rŒi|	r||	vr|                     |¦  «         Œ…|S )
z@Return all constraint names matching the columns and conditions.Nc           	      ó  •— g | ]{}‰j         j        j        rI‰j         j                             t          |‰j         j                             ¦   «         ¦  «        ¦  «        n‰j         j                             |¦  «        ‘Œ|S rV   )rC   rF   Útruncates_namesÚintrospectionÚidentifier_converterr   ri   rû  )r3   r   rI   s     €r   rp   z>BaseDatabaseSchemaEditor._constraint_names.<locals>.<listcomp>¬  s‹   ø€ ð 	ð 	ð 	ð ð ”Ô/Ô?ðR�D”OÔ1×FÒFÝ% d¨D¬OÔ,?×,OÒ,OÑ,QÔ,QÑRÔRñô ð ð œÔ6×KÒKÈDÑQÔQð	ð 	ð 	r    rW  rº   r   r  rs   r†  rÈ   )rC   rf   ry  Úget_constraintsr(   rŒ   Úitemsrb   )rI   r-   rþ  rº   r   r  r†  rs   r¨  rF  rf   r”   Úresultr   Úinfodicts   `              r   rN  z*BaseDatabaseSchemaEditor._constraint_namesž  s±  ø€ ð Ð#ð	ð 	ð 	ð 	ð )ð	ñ 	ô 	ˆLð Œ_×#Ò#Ñ%Ô%ð 	¨Øœ/Ô7×GÒGØ˜œÔ,ñô ˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆØ)×/Ò/Ñ1Ô1ð 	(ð 	(‰NˆD�(ØÐ# |°xÀ	Ô7JÒ'JÐ'JØÐ%¨(°8Ô*<ÀÒ*FÐ*FØØÐ*¨x¸Ô/FÈ+Ò/UÐ/UØØÐ$¨°'Ô):¸eÒ)CÐ)CØØÐ$¨°'Ô):¸eÒ)CÐ)CØØÐ*°8¸MÔ3JÐ*ØØÐ$¨°&Ô)9¸UÒ)BÐ)BØØð ( $¨gÐ"5Ð"5Ø—M’M $Ñ'Ô'Ð'øØˆs   «+A"Á"A&Á)A&c                 ó  — |                       |d¬¦  «        }|r?t          |¦  «        dk    r,t          dt          |¦  «        ›d|j        j        ›�¦  «        ‚|D ]+}|                      |                      ||¦  «        ¦  «         Œ,d S )NTr>  rI  rJ  z) of PK constraints for )rN  rQ  rR  r(   rŒ   rP   Ú_delete_primary_key_sql)rI   r-   r‘  rX  rÄ  s        r   r¾  z,BaseDatabaseSchemaEditor._delete_primary_keyÍ  s²   € Ø×1Ò1°%ÀTÐ1ÑJÔJÐØð 	•cÐ*Ñ+Ô+¨qÒ0Ð0Ý�*õ Ð(Ñ)Ô)Ð)Ð)Ø”KÔ(Ð(ðñô ð ð  0ð 	Oð 	OˆOØ�LŠL˜×5Ò5°e¸_ÑMÔMÑNÔNÐNÐNð	Oð 	Or    c                 ó&  — t          | j        t          |j        j        | j        ¦  «        |                      |                      |j        j        |j        gd¬¦  «        ¦  «        t          |j        j        |j        g| j        ¦  «        ¬¦  «        S )NÚ_pkr­  )r�   r   rW  )	r
   Úsql_create_pkr   r(   rŒ   rj   rÁ  rŽ   r   r<  s      r   rÀ  z0BaseDatabaseSchemaEditor._create_primary_key_sqlÚ  sˆ   € ÝØÔÝ˜œÔ,¨d¬oÑ>Ô>Ø—’Ø×'Ò'Ø”KÔ(¨5¬<¨.Àð (ñ ô ñô õ
 ˜EœKÔ0°5´<°.À$Ä/ÑRÔRð	
ñ 	
ô 	
ð 		
r    c                 ó:   — |                       | j        ||¦  «        S r1   )rS  Úsql_delete_pkrO  s      r   r€  z0BaseDatabaseSchemaEditor._delete_primary_key_sqlæ  rP  r    c                 ó:   — |rd|                       |¦  «        z   ndS )NzCOLLATE r[   )rj   )rI   r£   rÅ  rý  s       r   r¨   z%BaseDatabaseSchemaEditor._collate_sqlé  s#   € Ø:CÐKˆz˜DŸOšO¨IÑ6Ô6Ñ6Ð6ÈÐKr    c                 ó–   — | j         |                      |¦  «        d                     |¦  «        dœz  }|                      |¦  «         d S )Nú,)Ú	procedureÚparam_types)Úsql_delete_procedurerj   r—   rP   )rI   Úprocedure_namerŠ  rU   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedureì  sQ   € ØÔ'ØŸš¨Ñ8Ô8ØŸ8š8 KÑ0Ô0ð+
ð +
ñ 
ˆð 	�Š�SÑÔÐÐÐr    )FT)rV   )F)r[   r1   )NNNNN)NNNNNN)NNNNNNN)T)NNNNNNNNrÉ   )vÚ__name__Ú
__module__Ú__qualname__Ú__doc__r–   r_  rl  r
  rz  r|  rê  rá  râ  rç  ræ  rå  rˆ  rD  r½  ra  rˆ   Úsql_delete_constraintrb  rq  rs  rg  r-  rG  r�   rw  rN  r  rf  r"  r;  rƒ  r…  r‹  rf  rî  rJ   rN   rQ   rP   rj   r¡   rÆ   r†   r¯   r°   r´   r²   r®   r¸   Ústaticmethodrù   r±   re   r  r	  r  r  r  r   r"  r2  r?  r,  rc  r   ro  rƒ  rŒ  r™  r¡  r�  rº  r{  r¹  r¸  r  r«   r�  rÁ  r  r  r
  r<  r´  r  r  r  r}  rŽ  r,  r°  r¿  r¶  r‘   rx  r‡  rT  rW  r\  rc  r„   rP  r±  rn  rÂ  rµ  rS  rN  r¾  rÀ  r€  r¨   r�  rV   r    r   rA   rA   L   s  € € € € € ðð ð 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ð Uð Uð Uðð ð ðAð Að Að,ð ,ð ,ð ,ð>4ð 4ð 4ð\ð \ð \ð@ANð ANð ANðF
ð 
ð 
ð 
ð6ð ð ðð ð ð
ð 
ð 
ðð ð ð)ð )ð )ð&Sð Sð Sð ðð ñ „\ðð2Wð Wð Wð$ð $ð $ð">ð ">ð ">ðH.ð .ð .ð*	Að 	Að 	Að4ð 4ð 4ð-ð -ð -ð+ð +ð +ðð ð ðAð Að Að*Vð Vð Vð* Sð  Sð  SðDHð Hð Hð&ð ð ð	
ð 	
ð 	
ðV$ð V$ð V$ðp.ð .ð .ð@Q
ð Q
ð Q
ð Q
ðf	ð 	ð 	ð( ðr$ð r$ð r$ð r$ðhð ð ð:$
ð $
ð $
ð $
ðN 16ð
ð 
ð 
ð 
ð8,
ð ,
ð ,
ð\	
ð 	
ð 	
ð/ð /ð /ð
ð 
ð 
ð@ð ð ð ð@
ð 
ð 
ð 
ðð ð ð

ð 
ð 
ð ØØØØØØØØØØð4
ð 4
ð 4
ð 4
ð 4
ðl
ð 
ð 
ð 
ð
ð 
ð 
ðSð Sð Sðð ð ð0ð ð ð#Rð #Rð #Rð #RðJ3ð 3ð 3ðCð Cð Cð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð*
ð 
ð 
ðLð Lð Lð5ð 5ð 5ðð ð ð ØØØØð
ð 
ð 
ð 
ð: ØØØØØð2
ð 2
ð 2
ð 2
ðp ØØØØØØð1
ð 1
ð 1
ð 1
ðf	Fð 	Fð 	Fð 	Fð ØØØØØð=ð =ð =ð =ð2
ð 
ð 
ð
ð 
ð 
ðOð Oð Oð

ð 
ð 
ð ØØØØØØØð-ð -ð -ð -ð^Oð Oð Oð Oð

ð 

ð 

ðLð Lð LðLð Lð Lð Lðð ð ð ð ð r    rA   )#Ú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;   rA   rV   r    r   ú<module>rž     s”  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø &Ð &Ð &Ð &Ð &Ð &Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ !Ð !Ð !Ð !Ð !Ð !à	ˆÔ	Ð6Ñ	7Ô	7€ð1ð 1ð 1ð 
ð 
ð 
ð
ð 
ð 
ð.eð eð eð eð eñ eô eð eð eð er    