§
    Ÿj“A ã                   óþ   — 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 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#dS )é    N)Údatetime)Ú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                 ó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      úk/var/www/finuniver-perm.ru/html/student/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>:   ó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;   6   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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(dtd#„Z)d$„ Z*d%„ Z+dud'„Z,d(„ Z-d)„ Z.d*„ Z/dvd+„Z0d,„ Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5d1„ Z6e7d2„ ¦   «         Z8d3„ Z9d4„ Z:d5„ Z;d6„ Z<d7„ Z=d8„ Z>d9„ Z?d:„ Z@d;„ ZAd<„ ZBd=„ ZCd>„ ZDd?„ ZEd@„ ZFdA„ ZGdB„ ZHdC„ ZIdvdD„ZJdE„ ZK	 dvdF„ZLdG„ ZMdvdH„ZN	 dvdI„ZOdJ„ ZPdK„ ZQdL„ ZRdM„ ZSdwdO„ZTdxdP„ZUdQ„ ZVdR„ ZWdddNdNdd&dd&ddddSœdT„ZXdxdU„ZYdV„ ZZdW„ Z[dX„ Z\dY„ Z]dxdZ„Z^d[„ Z_d\„ Z`d]„ Zad^„ Zbd_„ Zcd`„ Zdda„ Zedb„ Zfdc„ Zg	 	 	 	 	 dydd„Zh	 	 	 	 	 	 dzde„Zi	 	 	 	 	 	 	 d{df„Zjd|dg„Zk	 	 	 	 	 	 dzdh„Zldi„ Zmdj„ Zndk„ Zodl„ Zp	 	 	 	 	 	 	 	 d}dm„Zqdn„ Zrdvdo„Zsdp„ Ztdq„ Zud~dr„Zvduds„Zwd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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)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                 óD  ‡ ‡— ‰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        }t=          |t>          ¦  «        r-|                     ‰                       |j!        ¦  «        ¦  «         ‰ 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ÚpkÚ
isinstancer   Ú_pk_constraint_sqlÚcolumnsÚ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}   r–   rU   r�   s   ``                 r   Ú	table_sqlz"BaseDatabaseSchemaEditor.table_sqlÑ   sO  øø€ ð !œ;Ô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ð#ñ #ô #ñ ô ð ð
 Œ[Œ^ˆÝ�bÕ-Ñ.Ô.ð 	HØ×"Ò" 4×#:Ò#:¸2¼:Ñ#FÔ#FÑGÔGÐGàÔ#Ø—_’_ 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        }|                     ¦   «         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Úhas_db_defaultÚ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_sql6  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_sqly  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_expressionr—   r¶   r   r-   Úget_compilerrC   ÚcompilerF   r·   rc   )	rI   r   rÚ   Ú
db_defaultrU   Ú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_index0  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_index;  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_indexD  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_constraintN  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_constraintV  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>b  ó   € Ð@Ð@Ð@ &•�f‘”Ð@Ð@Ð@r    c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   r)  r*  s     r   r+  zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>c  r,  r    TF)r¾   r   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rV   rm   ro   s     €r   rp   zBBaseDatabaseSchemaEditor.alter_unique_together.<locals>.<listcomp>n  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_together\  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>w  ó   € Ð?Ð?Ð? &•�f‘”Ð?Ð?Ð?r    c                 ó,   — h | ]}t          |¦  «        ’ŒS rV   r)  r*  s     r   r+  z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp>x  r9  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/  r0  Úsql_delete_indexrP   Ú_create_index_sql)rI   r-   Úold_index_togetherÚnew_index_togetherr4  r5  rŸ   rž   s    `      r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_togetherq  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   rE  rF  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_namesr™   Úconstraint_namesÚdefault_names
    `        r   r0  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           
      óx  — |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¦  «         |                     ¦   «         s†|                      |¦  «        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µ   Ú_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   rs  Ú_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   rQ  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<   rU  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_fieldH  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|  (                    ||||||¦  «        \  } }!| )                    | ¦  «         | *                    |!¦  «         | +                    ¦   «         rO| +                    ¦   «         r|j,        |j,        k    r*| )                    |  -                    |||¦  «        ¦  «         n@| +                    ¦   «         r,| )                    |  -                    |||d¬¦  «        ¦  «         d
}"|j.        rŽ|j.        s‡| +                    ¦   «         ss|  /                    |¦  «        }#|  /                    |¦  «        }$|  0                    |¦  «        s4|#|$k    r.|$�,d}"| )                    |  1                    |||¦  «        ¦  «         |j.        |j.        k    r.|  2                    |||¦  «        } | r| )                    | ¦  «         | 3                    ¦   «         p| +                    ¦   «         o|j.        o|j.         }%|s|�rp|%s||z  }| j        j        j4        rA|r?tk          tm          |Ž ¦  «        \  }}&d 7                    |¦  «        tq          |&g ¦  «        fg}|D ]C\  }}&|                      | j9        |  :                    |j        j        ¦  «        |dœz  |&¦  «         ŒD|%rÏ| +                    ¦   «         s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‡  rL  rM  z!) of foreign key constraints for ú.c                 ó   — h | ]	}|j         ’Œ
S rV   rE  rF  s     r   r+  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>Ò  ó'   € ð %ð %ð %Ø$.�
”ð%ð %ð %r    F)r¾   r   rI  z) of unique constraints for r§   c                 ó   — h | ]	}|j         ’Œ
S rV   rE  )r3   r  s     r   r+  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>  s   € ÐLÐLÐL¨u ¤
ÐLÐLÐLr    )r  Útype_rI  c                 ó   — h | ]	}|j         ’Œ
S rV   rE  rF  s     r   r+  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>  r¨  r    )rs   rI  z) of check constraints for rr   ru  Nr~   rw  rØ   )r�   rŽ   rû   ©rŸ   rÌ   r   rw   Ú_fkÚ_check©r=  rs   )HÚsetrC   rF   r�   r<   r‹   r�  rQ  rŽ   rT  rU  r(   rŒ   ÚaddrP   r‰  r¾   Ú_field_became_primary_keyr”   Ú_delete_unique_sqlr«   r   r;   Úrelated_modelr   Údb_indexrP  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�  rX  rZ  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr?   Úrel_fk_namesrY  Ú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Ñ$Ô$Ð$Ø×Ò Ñ.Ô.Ð.à×#Ò#Ñ%Ô%ð 	à×,Ò,Ñ.Ô.ðàÔ'¨9Ô+?Ò?Ð?à—’Ø×;Ò;¸EÀ9ÈiÑXÔXñô ð øð ×%Ò%Ñ'Ô'ð 	Ø�NŠNØ×7Ò7Ø˜9 i°dð 8ñ ô ñô ð ð "'ÐØŒ>ð 	 )¤.ð 	¸×9QÒ9QÑ9SÔ9Sð 	Ø×0Ò0°Ñ;Ô;ˆKØ×0Ò0°Ñ;Ô;ˆKà×.Ò.¨yÑ9Ô9ðà ;Ò.Ð.ØÐ+à)-Ð&Ø—’Ø×2Ò2°5¸)ÀYÑOÔOñô ð ð Œ>˜Yœ^Ò+Ð+Ø×2Ò2°5¸)ÀYÑOÔOˆHØð .Ø×#Ò# HÑ-Ô-Ð-ð ×!Ò!Ñ#Ô#ÐA y×'?Ò'?Ñ'AÔ'Að'6àŒ~Ð4 i¤nÐ"4ð 	$ð ð -	�lñ -	Ø.ð (ð ˜<Ñ'�àŒÔ'Ô@ð >ÀWð >Ý#¥C¨ MÑ2Ô2‘��VØ ŸIšI c™NœN­C°¸©O¬OÐ<Ð=�à&ð ð ‘��VØ—’ØÔ)à!%§¢°´Ô1EÑ!FÔ!FØ#&ðð ñð
 ñô ð ð ð +ð Ø ×/Ò/Ñ1Ô1ð IØ"&�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   rv  rÙ  rû   rX   r–  rU   s
             r   r}  z2BaseDatabaseSchemaEditor._alter_column_default_sql3  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   rv  rU   rÃ   rX   r–  s	            r   r»  z;BaseDatabaseSchemaEditor._alter_column_database_default_sqlY  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§   rg  )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_sqlu  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Ž   rg  )Ú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   rg  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Œ   re  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é   rL  r   zD%séÿÿÿÿ)r   r   rC   ri   Úmax_name_lengthr›   rT  Ú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 )NrL  r   rt   r[   )rT  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))r™   )rC   rF   Úsupports_covering_indexesr
   r   r(   rŒ   rj   )rI   r-   r™   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  r™   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�   r™   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        ¦  «        |                      |¦  «        ¬¦  «        }|j        d         j        }|j        d         }t          | j	        ¦  «        D ]G}t          |t           ¦  «        r0|                     ||¦  «        r| j	                             |¦  «         ŒH|S )N©r�   r   r�   r   )r
   r>  r   r(   rŒ   rj   Úpartsr�   r  rL   r—   Úreferences_indexr  )rI   r-   r   rU   r€   rÿ  rÍ  s          r   r¶  z*BaseDatabaseSchemaEditor._delete_index_sql@  sÉ   € ÝØÐ(�4Ô(Ý˜œÔ,¨d¬oÑ>Ô>Ø—’ Ñ&Ô&ð
ñ 
ô 
ˆ	ð ”_ WÔ-Ô3ˆ
Ø”_ VÔ,ˆ
Ý˜Ô)Ñ*Ô*ð 	.ð 	.ˆCÝ˜#�yÑ)Ô)ð .¨c×.BÒ.BØ˜Jñ/ô /ð .ð Ô!×(Ò(¨Ñ-Ô-Ð-øàÐ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_sqlR  sQ   € ÝØÔ!Ý˜œÔ,¨d¬oÑ>Ô>Ø—_’_ XÑ.Ô.Ø—_’_ XÑ.Ô.ð	
ñ 
ô 
ð 	
r    c                 ó2   — t          ||| j        |¬¦  «        S )N)r  )r   rj   )rI   r�   r™   r  r  s        r   r  z'BaseDatabaseSchemaEditor._index_columnsZ  s   € Ý�u˜g t¤À\ÐRÑRÔRÐRr    c                 óf  — |j         j        r|j         j        s|j         j        rg S g }|j         j        D ]+}|                     |                      ||¦  «        ¦  «         Œ,|j         j        D ]C}|j        r| j	        j
        j        r)|                     |                     || ¦  «        ¦  «         ŒD|S )zz
        Return a list of all index SQL statements (field indexes, Meta.indexes)
        for the specified model.
        )r(   ÚmanagedÚproxyÚswappedr…   rŠ   r  rP  r  rC   rF   r  rb   r•   )rI   r-   Úoutputr   r  s        r   r  z+BaseDatabaseSchemaEditor._model_indexes_sql]  sÇ   € ð
 Œ{Ô"ð 	 e¤kÔ&7ð 	¸5¼;Ô;Nð 	ØˆIØˆØ”[Ô-ð 	Að 	AˆEØ�MŠM˜$×1Ò1°%¸Ñ?Ô?Ñ@Ô@Ð@Ð@à”[Ô(ð 	=ð 	=ˆ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_sqlp  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_alteredy  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¾   rA  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   rt  )r   r(   rŒ   rj   rz  r   rŽ   Útarget_fieldr-   rC   ri   r{  r
   Úsql_create_fk)
rI   r-   r   r=  r�   r   rŽ   ru   rv   rt  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    rL  )r   r(   rŒ   rŽ   r   rH  r-   )rI   r-   r   r=  rN  s   `    r   rz  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   )rV  Ú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   rt  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  rt  r  r  rX  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  rt  r  r  rX  )r   r  r  r  r  rX  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    )r™   rt  ©r   r}   )	r^  r„   rL   rb   Úsql_unique_constraintr›   rV  Úsql_constraintrj   )rI   r-   rŸ   r   r  rt  r  r  r  rX  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>L  r  r    TrJ  rV   )r  r  )r�   r   r™   r  rt  r  rX  )r^  r   rà   rC   r(   rŒ   rS  rj   Úsql_create_unique_indexÚsql_create_uniquer  r   re   r
   r   r	  rV  r  rY  )rI   r-   rŸ   r   r  rt  r  r  r  rX  rä   r�   r™   rU   s                 r   r„   z+BaseDatabaseSchemaEditor._create_unique_sql3  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   rL  rM  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_namei  s(   ø€ Ø—’Ð'> tÔ'>ÀÐ'OÈÐ'OÐ'OÑPÔPÐPr    Ú_uniq)rÃ  r	   )rI   r�   r™   rK  rl  s   `    r   rS  z0BaseDatabaseSchemaEditor._unique_constraint_namef  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>  r1  rV  )
rI   r-   r   r  rt  r  r  r  rX  rU   s
             r   r³  z+BaseDatabaseSchemaEditor._delete_unique_sqlq  s~   € ð ×%Ò%ØØ!ØØ#Ø)ð &ñ 
ô 
ð 	ð �4Øð 	)˜ð 	) 9ð 	)°ð 	)ØÔ'ˆCˆCàÔ(ˆCØ×*Ò*¨3°°tÑ<Ô<Ð<r    c                 óV   — | j         |                      |¦  «        | j        d|iz  dœz  S )Nrs   rb  )rd  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   rr  rV  Úsql_delete_checkrQ  s      r   r·  z*BaseDatabaseSchemaEditor._delete_check_sqlš  s2   € ØŒÔ'ÔHð 	Ø�4Ø×*Ò*¨4Ô+@À%ÈÑNÔNÐNr    c                 ó†   — t          |t          |j        j        | j        ¦  «        |                      |¦  «        ¬¦  «        S )Nr   )r
   r   r(   rŒ   rj   )rI   Útemplater-   r   s       r   rV  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    r™   r¾   r   r  rs   rˆ  rÌ   )rC   rf   r{  Úget_constraintsr(   rŒ   Úitemsrb   )rI   r-   r   r¾   r   r  rˆ  rs   rª  rI  rf   r”   Úresultr   Úinfodicts   `              r   rQ  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                 óZ   ‡ — ‰ j         dd                     ˆ fd„|D ¦   «         ¦  «        iz  S )Nr™   r~   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r1   ©rj   )r3   rŽ   rI   s     €r   r6   z>BaseDatabaseSchemaEditor._pk_constraint_sql.<locals>.<genexpr>×  s/   øè è € Ð OÐ O¸V §¢°Ñ!8Ô!8Ð OÐ OÐ OÐ OÐ OÐ Or    )Úsql_pk_constraintr›   )rI   r™   s   ` r   r˜   z+BaseDatabaseSchemaEditor._pk_constraint_sqlÕ  s>   ø€ ØÔ%Ø�t—y’yÐ OÐ OÐ OÐ OÀwÐ OÑ OÔ OÑOÔOð)
ñ 
ð 	
r    c                 ó  — |                       |d¬¦  «        }|r?t          |¦  «        dk    r,t          dt          |¦  «        ›d|j        j        ›�¦  «        ‚|D ]+}|                      |                      ||¦  «        ¦  «         Œ,d S )NTr@  rL  rM  z) of PK constraints for )rQ  rT  rU  r(   rŒ   rP   Ú_delete_primary_key_sql)rI   r-   r“  rZ  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   r™   )	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   )rV  Úsql_delete_pkrQ  s      r   r†  z0BaseDatabaseSchemaEditor._delete_primary_key_sqló  rR  r    c                 ó:   — |rd|                       |¦  «        z   ndS )NzCOLLATE r[   rƒ  )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Í   )xÚ__name__Ú
__module__Ú__qualname__Ú__doc__rš   ra  rn  r  r|  r~  rì  rã  rä  ré  rè  rç  rŠ  rF  r¿  rc  rˆ   Úsql_delete_constraintrd  r„  rs  ru  ri  r1  rI  r�   ry  rP  r  rh  r&  r>  r‰  r‹  r‘  rh  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&  r6  rB  r0  re  r  rq  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‘   rz  r‰  rV  rY  r^  re  r„   rS  r³  rp  rÄ  r·  rV  rQ  r˜   rÀ  rÂ  r†  r¬   r“  rV   r    r   rA   rA   M   s)  € € € € € ðð ð AÐØJÐØVÐØ5ÐàTÐØ:ÐØPÐØCÐØ FÐØPÐØ"HÐØ'BÐ$ØNÐàNð ð 	Qð ð AÐØ.ÐØLÐØ9€NØ3ÐàXÐØ,Ðð	?ð ð .Ðð	@ð ð  ÐØ"&ÐØ)€Mð	9ð ð
	Bð ð IÐØ,Ðð 	Rð ð *€Mà9ÐàIÐØVÐðUð Uð Uð Uðð ð ðAð Að Að,ð ,ð ,ð ,ð>4ð 4ð 4ðað að aðJANð ANð ANðF
ð 
ð 
ð 
ð6ð ð ðð ð ð
ð 
ð 
ðð ð ð)ð )ð )ð&Sð Sð Sð ðð ñ „\ðð2Wð Wð Wð$ð $ð $ð!>ð !>ð !>ðF.ð .ð .ð*	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	ð 	ð 	ð( ðn$ð n$ð n$ð n$ð`ð ð ð:$
ð $
ð $
ð $
ðN 16ð
ð 
ð 
ð 
ð8,
ð ,
ð ,
ð\	
ð 	
ð 	
ð/ð /ð /ð
ð 
ð 
ð@ð ð ð ð@
ð 
ð 
ð 
ðð ð ð

ð 
ð 
ð ØØØØØØØØØØð4
ð 4
ð 4
ð 4
ð 4
ðlð ð ð ð$
ð 
ð 
ðSð Sð Sðð ð ð&ð ð ð#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   Ú!django.db.models.fields.compositer   Ú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Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø AÐ AÐ AÐ AÐ AÐ AØ &Ð &Ð &Ð &Ð &Ð &Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ !Ð !Ð !Ð !Ð !Ð !à	ˆÔ	Ð6Ñ	7Ô	7€ð1ð 1ð 1ð 
ð 
ð 
ð
ð 
ð 
ð.qð qð qð qð qñ qô qð qð qð qr    