§
    Ï“Ùhd ã                   óæ   — d dl Z d dlZd dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZmZ 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)ÚColumnsÚExpressionsÚForeignKeyNameÚ	IndexNameÚ	StatementÚTable)Únames_digestÚsplit_identifierÚtruncate_name)Ú
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      ú]/var/www/surfInsights/venv3-11/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>8   óG   øè è € ð 	
ð 	
àÝ$ S¨)Ñ4Ô4ð	
Øð	
ð 	
ð 	
ð 	
ð 	
ð 	
r   c              3   ó<   •K  — | ]}t          |‰¦  «        ¯|V — Œd S r.   r/   )r0   r1   Ú	new_fields     €r   r3   z+_related_non_m2m_objects.<locals>.<genexpr>=   r4   r   )Úzipr+   r*   Ú_related_non_m2m_objectsÚremote_field)r2   r6   Úrelated_fieldsÚold_relÚnew_rels   ``   r   r8   r8   4   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'dld"„Z(d#„ Z)d$„ Z*dmd&„Z+d'„ Z,d(„ Z-d)„ Z.dnd*„Z/d+„ Z0d,„ Z1d-„ Z2d.„ Z3e4d/„ ¦   «         Z5d0„ Z6d1„ Z7d2„ Z8d3„ Z9d4„ Z:d5„ Z;d6„ Z<d7„ Z=d8„ Z>d9„ Z?d:„ Z@d;„ ZAd<„ ZBd=„ ZCd>„ ZDd?„ ZEd@„ ZFdndA„ZG	 dndB„ZHdC„ ZIdndD„ZJdE„ ZKdF„ ZLdG„ ZMdH„ ZNdodJ„ZOdpdK„ZPdL„ ZQdM„ ZRdddIdIdd%dd%ddddNœdO„ZSdpdP„ZTdQ„ ZUdR„ ZVdS„ ZWdT„ ZXdpdU„ZYdV„ ZZdW„ Z[dX„ Z\dY„ Z]dZ„ Z^d[„ Z_d\„ Z`d]„ Za	 	 	 	 	 dqd^„Zb	 	 	 	 	 	 drd_„Zcdsd`„Zd	 	 	 	 	 dqda„Zedb„ Zfdc„ Zgdd„ Zhde„ Zi	 	 	 	 	 	 	 	 dtdf„Zjdndg„Zkdh„ Zldi„ Zmdudj„Zndmdk„ZodS )vÚ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)zPALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE (%(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)szOCREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)%(include)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 r.   )Ú
connectionÚcollect_sqlÚcollected_sqlÚfeaturesÚcan_rollback_ddlÚatomic_migration)Úselfr@   rA   r   s       r   Ú__init__z!BaseDatabaseSchemaEditor.__init__“   s?   € Ø$ˆŒØ&ˆÔØÔð 	$Ø!#ˆDÔØ $¤Ô 8Ô IÐ TÈfˆÔÐÐr   c                 ó�   — g | _         | j        r7t          | j        j        ¦  «        | _        | j                             ¦   «          | S r.   )Údeferred_sqlrE   r   r@   ÚaliasÚ	__enter__)rF   s    r   rK   z"BaseDatabaseSchemaEditor.__enter__œ   sB   € ØˆÔØÔ ð 	$Ý  ¤Ô!6Ñ7Ô7ˆDŒKØŒK×!Ò!Ñ#Ô#Ð#Øˆr   c                 ó’   — |€| j         D ]}|                      |¦  «         Œ| j        r| j                             |||¦  «         d S d S r.   )rI   ÚexecuterE   r   Ú__exit__)rF   Úexc_typeÚ	exc_valueÚ	tracebackÚsqls        r   rN   z!BaseDatabaseSchemaEditor.__exit__£   sg   € ØÐØÔ(ð "ð "�Ø—’˜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))ÚparamsrR   )Úextraú;Ú N)rA   r@   Úin_atomic_blockrC   rD   r   ÚstrÚloggerÚdebugÚrstripÚendswithrB   ÚappendÚtupleÚmapÚquote_valueÚcursorrM   )rF   rR   rU   Úendingrc   s        r   rM   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 r.   )r@   ÚopsÚ
quote_name)rF   r   s     r   rg   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                             |¦  «         �Œùˆˆ 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 rS   ©r&   Ú	get_field©r0   r   r*   s     €r   ú
<listcomp>z6BaseDatabaseSchemaEditor.table_sql.<locals>.<listcomp>Ó   ó)   ø€ ÐLÐLÐL°u�e”k×+Ò+¨EÑ2Ô2ÐLÐLÐLr   N©r@   Úcheckú z %s)Úto_tableÚ	to_columnú_fk_%(to_table)s_%(to_column)s)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldc                 ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rS   )Úconstraint_sql)r0   Ú
constraintr*   rF   s     €€r   rm   z6BaseDatabaseSchemaEditor.table_sql.<locals>.<listcomp>  s9   ø€ ð 
ð 
ð 
àð ×%Ò% e¨TÑ2Ô2ð
ð 
ð 
r   ú, c              3   ó8   K  — | ]}|¯t          |¦  «        V — Œd S r.   )rZ   ©r0   rz   s     r   r3   z5BaseDatabaseSchemaEditor.table_sql.<locals>.<genexpr>  sB   è è € ð $ð $àØð$Ý�J‘”ð$ð $ð $ð $ð $ð $r   )ÚtableÚ
definition) r&   Úunique_togetherrI   r_   Ú_create_unique_sqlÚlocal_fieldsÚ
column_sqlÚdb_parametersr@   Úsql_check_constraintÚdb_type_suffixÚextendr9   Údb_constraintr*   Údb_tablerk   Ú
field_nameÚcolumnÚsql_create_inline_fkrg   rC   Úsupports_foreign_keysÚ_create_fk_sqlÚget_internal_typerf   Úautoinc_sqlÚconstraintsÚsql_create_tableÚjoinÚdb_tablespaceÚtablespace_sql)rF   r*   Úfield_namesÚfieldsÚcolumn_sqlsrU   r   r   Úextra_paramsÚ	db_paramsÚcol_type_suffixrr   rs   r�   r‘   rR   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ð
ñ 
ô 
ˆð Ô#Ø—_’_ U¤[Ô%9Ñ:Ô:ØŸ)š)ð $ð $à"> KÐ">°+Ð">Ð">ð$ñ $ô $ñ ô ð'
ð '
ñ 
ˆð Œ;Ô$ð 	,Ø!œ_Ô0×?Ò?Ø”Ô)ñô ˆNð ð ,Ø�s˜^Ñ+Ñ+�Ø�Fˆ{Ðr   c              #   ó„  K  — |V — |                      d¦  «        x}r|                      |¦  «        V — | j        j        j        r#|j        r|                      |j        ¦  «        V — |j        }|o-|                      |¦  «         o|o|  	                    |¦  «         }|rt|  
                    |¦  «        }	|	�]d|                      |¦  «        z   }
| j        j        j        r|
|                      |	¦  «        z  V — n|
V — |                     |	¦  «         |j        r|j        s| j        j        j        rd}|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 TzNOT NULLÚNULLzPRIMARY KEYÚUNIQUE)Úinline)ÚgetÚ_collate_sqlr@   rC   Úsupports_comments_inlineÚ
db_commentÚ_comment_sqlÚnullÚskip_defaultÚskip_default_on_alterÚeffective_defaultÚ_column_default_sqlÚrequires_literal_defaultsÚprepare_defaultr_   Úempty_strings_allowedr   Ú!interprets_empty_strings_as_nullsÚimplied_column_nullÚuniquer”   r&   Úsupports_tablespacesrf   r•   )rF   Úcolumn_db_typerU   r*   r   Úfield_db_paramsÚinclude_defaultrž   r§   Údefault_valueÚcolumn_defaultÚ
tablespaces               r   Ú_iter_column_sqlz)BaseDatabaseSchemaEditor._iter_column_sql!  sn  è è € ð ÐÐÐØ'×+Ò+¨KÑ8Ô8Ð8ˆ9ð 	/Ø×#Ò# IÑ.Ô.Ð.Ð.Ð.ØŒ?Ô#Ô<ð 	6ÀÔAQð 	6Ø×#Ò# EÔ$4Ñ5Ô5Ð5Ð5Ð5àŒzˆð ð =Ø×%Ò% 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Øð 	ØÐÐÐÐØ”Ô)Ô=ð 	Øˆ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.
        ro   ÚtypeN©NNrq   )r„   r@   r“   r¹   )rF   r*   r   rµ   r´   r³   rU   s          r   rƒ   z#BaseDatabaseSchemaEditor.column_sqlZ  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).
        FrS   ©rF   r   s     r   r¨   z%BaseDatabaseSchemaEditor.skip_defaultu  ó	   € ð
 ˆ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.
        FrS   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©rF   Ú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.
        ú%srS   r¾   s     r   r«   z,BaseDatabaseSchemaEditor._column_default_sqlŒ  s	   € ð
 ˆtr   c                 óô  — |                       ¦   «         r|                      ¦   «         }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   rX   Úauto_nowFÚauto_now_addÚDateTimeFieldÚ	DateFieldÚ	TimeField)Úhas_defaultÚget_defaultr§   Úblankr®   r�   Úgetattrr   Únowr   ÚdateÚtime)r   ÚdefaultÚinternal_types      r   Ú_effective_defaultz+BaseDatabaseSchemaEditor._effective_default“  s  € ð ×ÒÑÔð 	Ø×'Ò'Ñ)Ô)ˆ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Ø   r@   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   rb   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`.
        Nro   r»   )rœ   rM   r@   rC   Úsupports_commentsr&   Údb_table_commentÚalter_db_table_commentr¤   r‚   r¥   r„   Ú_alter_column_comment_sqlrI   r‡   Ú_model_indexes_sqlÚlocal_many_to_manyr9   ÚthroughÚauto_createdÚcreate_model)rF   r*   rR   rU   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â   r9   rã   rä   Údelete_modelrM   Úsql_delete_tablerg   r‰   ÚlistrI   Ú
isinstancer	   Úreferences_tableÚremove)rF   r*   r   rR   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©rU   )Úcontains_expressionsr@   rC   Úsupports_expression_indexesrM   Ú
create_sql©rF   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ð   r@   rC   rñ   rM   Ú
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ï   )r@   rC   Úcan_rename_indexrM   Ú_rename_index_sqlr   rø   rõ   )rF   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ò   rM   ©rF   r*   rz   rR   s       r   Úadd_constraintz'BaseDatabaseSchemaEditor.add_constraint  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÷   rM   r   s       r   Úremove_constraintz*BaseDatabaseSchemaEditor.remove_constraint  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 rS   ©r`   ©r0   r—   s     r   ú	<setcomp>zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>&  ó   € Ð@Ð@Ð@ &•�f‘”Ð@Ð@Ð@r   c                 ó,   — h | ]}t          |¦  «        ’ŒS rS   r  r  s     r   r  zABaseDatabaseSchemaEditor.alter_unique_together.<locals>.<setcomp>'  r	  r   TF)r±   r   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rS   rj   rl   s     €r   rm   zBBaseDatabaseSchemaEditor.alter_unique_together.<locals>.<listcomp>2  rn   r   N)Ú
differenceÚ_delete_composed_indexÚsql_delete_uniquerM   r�   )rF   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 rS   r  r  s     r   r  z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp>;  ó   € Ð?Ð?Ð? &•�f‘”Ð?Ð?Ð?r   c                 ó,   — h | ]}t          |¦  «        ’ŒS rS   r  r  s     r   r  z@BaseDatabaseSchemaEditor.alter_index_together.<locals>.<setcomp><  r  r   TF)rô   r±   c                 óD   •— g | ]}‰j                              |¦  «        ‘ŒS rS   rj   rl   s     €r   rm   zABaseDatabaseSchemaEditor.alter_index_together.<locals>.<listcomp>G  rn   r   Ú_idx©r—   ÚsuffixN)r  r  Úsql_delete_indexrM   Ú_create_index_sql)rF   r*   Úold_index_togetherÚnew_index_togetherr  r  r—   r–   s    `      r   Úalter_index_togetherz-BaseDatabaseSchemaEditor.alter_index_together5  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 rS   ©r   r}   s     r   r  zBBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<setcomp>K  s'   € ð !
ð !
ð !
Ø *ˆJŒOð!
ð !
ð !
r   c                 ó   — h | ]	}|j         ’Œ
S rS   r#  r}   s     r   r  zBBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<setcomp>N  s   € ÐRÐRÐR°
˜JœOÐRÐRÐRr   c                 óN   •— g | ]!}‰j                              |¦  «        j        ‘Œ"S rS   )r&   rk   r‹   rl   s     €r   rm   zCBaseDatabaseSchemaEditor._delete_composed_index.<locals>.<listcomp>O  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¢   r@   rC   Ú*allows_multiple_constraints_on_same_fieldsrZ   Ú_unique_constraint_namer‰   ÚlenÚ
ValueErrorr“   rM   Ú_delete_constraint_sql)
rF   r*   r—   Úconstraint_kwargsrR   Úmeta_constraint_namesÚmeta_index_namesÚcolumnsÚconstraint_namesÚdefault_names
    `        r   r  z/BaseDatabaseSchemaEditor._delete_composed_indexJ  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)r@   rC   Úignores_table_name_caseÚlowerrM   Úsql_rename_tablerg   rI   rë   r	   Úrename_table_references)rF   r*   Úold_db_tableÚnew_db_tablerR   s        r   Úalter_db_tablez'BaseDatabaseSchemaEditor.alter_db_tablel  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 )NrX   )r~   Úcomment)	Úsql_alter_table_commentr@   rC   rÝ   rM   rg   r&   r‰   rb   )rF   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)rM   Úsql_retablespace_tablerg   r&   r‰   )rF   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  }|                      ||¦  «         |                      |¦  «        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µ   Nro   rq   rp   rt   z%s.rX   )r   Ú	namespacer‹   rr   rs   Ú
deferrable)r~   r‹   r   ©Údrop©r~   Úchangesr»   )*r   r9   rã   r&   rä   rå   rƒ   r†   r@   r„   r…   rC   r�   rˆ   Úsql_create_column_inline_fkr*   r‰   rk   rŠ   r‹   r   Ú_fk_constraint_namerg   rf   Údeferrable_sqlrI   r_   rŽ   Úsql_create_columnrM   r©   rª   Ú_alter_column_default_sqlÚsql_alter_columnr¥   rÝ   r¤   rà   r‡   Ú_field_indexes_sqlÚconnection_persists_old_columnsÚclose)rF   r*   r   r   rU   r›   rš   Úconstraint_suffixrr   rs   rQ  Ú_rR   Ú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à ð" ¨¯ª¸Ñ)CÔ)CÑ!CÐ!CàØ"Ÿ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˜&Ñ!Ô!Ð!ð ×*Ò*¨5Ñ1Ô1ð	&à×&Ò& 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.
        ro   r»   NT©Úforeign_key)r~   r‹   )r   r9   rã   r&   rä   rè   r„   r@   r.  r‹   rM   Ú_delete_fk_sqlÚsql_delete_columnrg   r‰   rC   r^  r_  rê   rI   rë   r	   Úreferences_columnrí   )rF   r*   r   Úfk_namesÚfk_namerR   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         }|€|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�¦  «        ‚|  	                    ||||||||¦  «         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.
        Nro   r»   zCannot alter field z into zT - they do not properly define db_type (are you using a badly-written custom field?)zr - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields))
Ú_field_should_be_alteredr„   r@   r9   r2  rã   r&   rä   Ú_alter_many_to_manyÚ_alter_field)	rF   r*   r2   r6   ÚstrictÚold_db_paramsÚold_typeÚnew_db_paramsÚnew_types	            r   Úalter_fieldz$BaseDatabaseSchemaEditor.alter_field
  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ñô ð ð 	×ÒØØØØØØØØñ		
ô 		
ð 		
ð 		
ð 		
r   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 ]+}|                      |                      ||¦  «        ¦  «         Œ,|d         |d         k    r´|d         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}tC          |tD          ¦  «        r+| #                    |j        j        |j        |j        ¦  «         ŒCg }g }g }| $                    | j        ¬¦  «        }| $                    | j        ¬¦  «        }||k    s-||k    s'||k    s!| j        j        j%        rW|j&        |j&        k    rG|  '                    ||||||¦  «        \  }}| (                    |¦  «         | )                    |¦  «         d
} |j*        rz|j*        ss|  +                    |¦  «        }!|  +                    |¦  «        }"|  ,                    |¦  «        s4|!|"k    r.|"�,d} | (                    |  -                    |||¦  «        ¦  «         |j*        |j*        k    r.|  .                    |||¦  «        }|r| (                    |¦  «         | /                    ¦   «         o|j*        o|j*         }#|s|�r?|#s||z  }| j        j        j0        rA|r?tc          te          |Ž ¦  «        \  }}$d 3                    |¦  «        ti          |$g ¦  «        fg}|D ]C\  }}$|                      | j5        |  6                    |j        j        ¦  «        |dœz  |$¦  «         ŒD|#rž|                      | j7        |  6                    |j        j        ¦  «        |  6                    |j        ¦  «        ddœz  |"g¦  «         |D ]C\  }}$|                      | j5        |  6                    |j        j        ¦  «        |dœz  |$¦  «         ŒD|r|D ]\  }}$|                      ||$¦  «         Œ|j        r|j        s|  8                    ||¦  «         |  9                    ||¦  «        r*|                      |  :                    ||g¦  «        ¦  «         |j        r|j        r9|j        r2|j        s+|                      |  ;                    ||g¬¦  «        ¦  «         g }%|r#|% )                    t-          ||¦  «        ¦  «         |                      ||¦  «        rL|                      |  <                    ||¦  «        ¦  «         |% )                    t-          ||¦  «        ¦  «         |%D �]\  }&}|j         =                    | j        ¬¦  «        }'|'d         }(|'                     d¦  «        })|&j         =                    | j        ¬¦  «        }*|*                     d¦  «        }+|  '                    |j        |&j        |j        |(|+|)¦  «        \  }}|                      | j5        |  6                    |j        j        j        ¦  «        |d         dœz  |d         ¦  «         |D ]\  }}$|                      ||$¦  «         Œ�Œ| j        j        j        rH|j        rA|	s|j        r|j        s1|j        r*|                      |  >                    ||d¦  «        ¦  «         |rH|%D ]E\  },}-|-j        j        r4|                      |  >                    |-j        |-j        d¦  «        ¦  «         ŒF|d         |d         k    r`|d         rX|  ?                    |j        j        |j        gd¬ ¦  «        }|                      |  @                    |||d         ¦  «        ¦  «         | r\|  -                    |||d¬!¦  «        \  }.}$| j5        |  6                    |j        j        ¦  «        |.dœz  }|                      ||$¦  «         | j        j        jA        r| j         B                    ¦   «          dS dS )"z3Perform a "physical" (non-ManyToMany) field update.r¥   )ÚignoreTre  r)  r*  z!) of foreign key constraints for ú.c                 ó   — h | ]	}|j         ’Œ
S rS   r#  r}   s     r   r  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>v  ó'   € ð %ð %ð %Ø$.�
”ð%ð %ð %r   F)r±   r   r&  z) of unique constraints for rž   c                 ó   — h | ]	}|j         ’Œ
S rS   r#  )r0   rô   s     r   r  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>°  s   € ÐLÐLÐL¨u ¤
ÐLÐLÐLr   )rô   Útype_r&  rp   c                 ó   — h | ]	}|j         ’Œ
S rS   r#  r}   s     r   r  z8BaseDatabaseSchemaEditor._alter_field.<locals>.<setcomp>Á  r{  r   )rp   r&  z) of check constraints for ro   Nr{   rU  rÇ   )r~   r‹   rÖ   ©r—   r»   r   rt   Ú_fkÚ_check©r  rS  )CÚsetr@   rC   r�   r9   rˆ   rn  r.  r‹   r1  r2  r&   r‰   ÚaddrM   rg  r±   Ú_field_became_primary_keyr‘   Ú_delete_unique_sqlr¢   r   r8   Úrelated_modelr   Údb_indexr-  r   r  Ú_delete_index_sqlÚ_delete_check_sqlÚ_rename_field_sqlrI   rë   r	   Úrename_column_referencesr†   rÝ   r¥   Ú_alter_column_type_sqlr_   r‡   r§   rª   r©   r[  Ú_alter_column_null_sqlrÏ   Úsupports_combined_altersr`   r7   r“   Úsumr\  rg   Úsql_update_with_defaultÚ_delete_primary_keyÚ_unique_should_be_addedr�   r  Ú_create_primary_key_sqlr„   rŽ   Ú_create_index_nameÚ_create_check_sqlr^  r_  )/rF   r*   r2   r6   rs  ru  rr  rt  rq  Úfks_droppedrj  rk  r5  r8  Úconstraint_nameÚold_collationÚnew_collationÚdrop_foreign_keysÚ_old_relr<   Úrel_fk_namesr6  Úindex_namesÚ
index_namerR   ÚactionsÚnull_actionsÚpost_actionsÚold_type_suffixÚnew_type_suffixÚfragmentÚother_actionsÚneeds_database_defaultÚold_defaultÚnew_defaultÚfour_way_default_alterationrU   Úrels_to_updater;   Úrel_db_paramsÚrel_typeÚrel_collationÚold_rel_db_paramsÚold_rel_collationra  Úrelrb  s/                                                  r   rp  z%BaseDatabaseSchemaEditor._alter_fieldJ  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à˜Ô! ]°7Ô%;Ò;Ð;ÀÈgÔ@VÐ;ð%ð %Ø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Ñ$Ô$Ð$Ø×Ò Ñ.Ô.Ð.ð "'ÐØŒ>ð 	 )¤.ð 	Ø×0Ò0°Ñ;Ô;ˆKØ×0Ò0°Ñ;Ô;ˆKà×.Ò.¨yÑ9Ô9ðà ;Ò.Ð.ØÐ+à)-Ð&Ø—’Ø×2Ò2°5¸)ÀYÑOÔOñô ð ð Œ>˜Yœ^Ò+Ð+Ø×2Ò2°5¸)ÀYÑOÔOˆHØð .Ø×#Ò# HÑ-Ô-Ð-à&/×&;Ò&;Ñ&=Ô&=ð '
ØŒNÐ1 9¤>Ð1ð 	$ð ð (	�lñ (	Ø.ð (ð ˜<Ñ'�àŒÔ'Ô@ð >ÀWð >Ý#¥C¨ MÑ2Ô2‘��VØ ŸIšI c™NœN­C°¸©O¬OÐ<Ð=�à&ð ð ‘��VØ—’ØÔ)à!%§¢°´Ô1EÑ!FÔ!FØ#&ðð ñð
 ñô ð ð ð +ð à—’ØÔ0à!%§¢°´Ô1EÑ!FÔ!FØ"&§/¢/°)Ô2BÑ"CÔ"CØ#'ðð ñð !�Mñô ð ð $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ñô ð øð ˜Ô! ]°7Ô%;Ò;Ð;ÀÈgÔ@VÐ;Ø"×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.
        Nro   r»   )r‹   r»   )
r@   rC   r¯   r®   r„   r§   Úsql_alter_column_nullÚsql_alter_column_not_nullrg   r‹   )rF   r*   r2   r6   rt  rR   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.
        ro   r»   )r‹   r»   rÖ   )rª   r«   r@   rC   r¬   r­   r„   r§   Ú sql_alter_column_no_default_nullÚsql_alter_column_no_defaultÚsql_alter_column_defaultrg   r‹   )
rF   r*   r2   r6   rT  r©  rÖ   rU   rt  rR   s
             r   r[  z2BaseDatabaseSchemaEditor._alter_column_default_sqlÁ  sî   € ð ×,Ò,¨YÑ7Ô7ˆØ×*Ò*¨9Ñ5Ô5ˆØ�ˆàð 	ØˆFˆFØŒ_Ô%Ô?ð 	ð ×*Ò*¨;Ñ7Ô7ˆGØˆFà!×/Ò/¸4¼?Ð/ÑKÔKˆØð 	0ØŒ~ð 7ØÔ;��àÔ6��àÔ/ˆCààŸ/š/¨)Ô*:Ñ;Ô;Ø% 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 two-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.
        rq   rX   )r‹   r»   rž   rE  )r£   r&   r‰   r@   rC   rÝ   r   r¥   rà   r_   r¦   Úsql_alter_column_typerg   r‹   )rF   r*   r2   r6   ru  r™  rš  r¦  Úcollate_sqlÚcomment_sqlrR   rU   s               r   r�  z/BaseDatabaseSchemaEditor._alter_column_type_sqlç  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_commentrg   r&   r‰   r‹   r¦   )rF   r*   r6   ru  Únew_db_comments        r   rà   z2BaseDatabaseSchemaEditor._alter_column_comment_sql  s]   € àÔ)àŸš¨¬Ô)=Ñ>Ô>ØŸ/š/¨)Ô*:Ñ;Ô;Ø×,Ò,¨^Ñ<Ô<ðð ñð ð
ð 	
r   c                 ó0   — |                       |pd¦  «        S )NrX   )rb   )rF   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)	r9   rã   r&   r‰   rC  rv  rk   Úm2m_reverse_field_nameÚm2m_field_name)rF   r*   r2   r6   rq  s        r   ro  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   rX   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é   éÈ   ra  é   Né   r)  r   zD%séÿÿÿÿ)r   r   r@   rf   Úmax_name_lengthr“   r1  Úisdigit)	rF   Ú
table_nameÚcolumn_namesr  ra  Úhash_suffix_partÚ
max_lengthrŸ  Úother_lengths	            r   r•  z+BaseDatabaseSchemaEditor._create_index_nameC  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 )Nr)  r   rq   rX   )r1  r”   r   ÚDEFAULT_INDEX_TABLESPACEr&   r@   rf   r•   )rF   r*   r—   r”   s       r   Ú_get_index_tablespace_sqlz2BaseDatabaseSchemaEditor._get_index_tablespace_sqlc  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 rX   rS   )rF   Ú	conditions     r   Ú_index_condition_sqlz-BaseDatabaseSchemaEditor._index_condition_sqlo  s   € Øð 	)Ø˜yÑ(Ð(Øˆrr   c                 óŠ   — |r| j         j        j        sdS t          dt	          |j        j        || j        ¦  «        ¬¦  «        S )NrX   z INCLUDE (%(columns)s))r7  )r@   rC   Úsupports_covering_indexesr	   r   r&   r‰   rg   )rF   r*   r7  s      r   Ú_index_include_sqlz+BaseDatabaseSchemaEditor._index_include_sqlt  sN   € Øð 	˜dœoÔ6ÔPð 	Ø�2ÝØ$Ý˜EœKÔ0°'¸4¼?ÑKÔKð
ñ 
ô 
ð 	
r   )r—   r   r  Úusingr”   Úcol_suffixesrR   Ú	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_colsro   )r”   c                 ó   — g | ]	}|j         ‘Œ
S rS   ©r‹   ©r0   r   s     r   rm   z>BaseDatabaseSchemaEditor._create_index_sql.<locals>.<listcomp>™  ó   € Ð4Ð4Ð4 E�5”<Ð4Ð4Ð4r   c                  óL   •— ‰€ ‰j         | i |¤ŽŠ‰                     ‰¦  «        S r.   )r•  rg   )ÚargsÚkwargsr   rF   s     €€r   Úcreate_index_namezEBaseDatabaseSchemaEditor._create_index_sql.<locals>.create_index_name�  s1   ø€ àˆ|Ø.�tÔ.°Ð?¸Ð?Ð?�Ø—?’? 4Ñ(Ô(Ð(r   )r~   r   rÛ  r7  rV   rÖ  rÞ  )r   Úget_compilerr@   rÔ  Úsql_create_indexr&   r‰   r	   r
   rg   r   Ú_index_columnsr   rb   r×  rÚ  )rF   r*   r—   r   r  rÛ  r”   rÜ  rR   rÝ  rÖ  rÞ  rß  Úcompilerr•   r7  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‰   rg   )rF   r*   r   rR   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‰   rg   )rF   r*   rò  ró  s       r   rû   z*BaseDatabaseSchemaEditor._rename_index_sql¹  sQ   € ÝØÔ!Ý˜œÔ,¨d¬oÑ>Ô>Ø—_’_ XÑ.Ô.Ø—_’_ XÑ.Ô.ð	
ñ 
ô 
ð 	
r   c                 ó2   — t          ||| j        |¬¦  «        S )N)rÜ  )r   rg   )rF   r~   r7  rÜ  rÝ  s        r   rí  z'BaseDatabaseSchemaEditor._index_columnsÁ  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 rS   rj   rl   s     €r   rm   z?BaseDatabaseSchemaEditor._model_indexes_sql.<locals>.<listcomp>Ð  rn   r   r  r  )r&   ÚmanagedÚproxyÚswappedr‚   r‡   r]  Úindex_togetherr_   r  r-  rð   r@   rC   rñ   rò   )rF   r*   Úoutputr   r–   r—   rô   s    `     r   rá   z+BaseDatabaseSchemaEditor._model_indexes_sqlÄ  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_indexedr_   r  )rF   r*   r   rü  s       r   r]  z+BaseDatabaseSchemaEditor._field_indexes_sqlÛ  sN   € ð ˆØ×(Ò(¨°Ñ6Ô6ð 	IØ�MŠM˜$×0Ò0°À¸wÐ0ÑGÔGÑHÔHÐHØˆr   c                 óÖ  — |pt          ¦   «         }|                     ¦   «         \  }}}}|                     ¦   «         \  }}}	}
|                     |j        ¦  «        D ]}|                     |d ¦  «         Œ|                     |j        ¦  «        D ]}|
                     |d ¦  «         Œ|                      |j        ¦  «        |                      |j        ¦  «        k    p|||f||	|
fk    S r.   )rƒ  ÚdeconstructÚunionÚnon_db_attrsÚpoprg   r‹   )rF   r2   r6   rx  ra  Úold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs               r   rn  z1BaseDatabaseSchemaEditor._field_should_be_alteredä  sþ   € Ø��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 Ñ&Ô&Ð&Ð&Ø�Š˜yÔ/Ñ0Ô0°D·O²OØÔñ5
ô 5
ò 
ð Rà˜ *Ð-°(¸HÀjÐ1QÒQð	Rr   c                 ó    — |j         o|j         S r.   )rˆ  r±   ©rF   r*   r   s      r   rþ  z1BaseDatabaseSchemaEditor._field_should_be_indexedõ  s   € ØŒ~Ð2 e¤lÐ"2Ð2r   c                 ó    — |j          o|j         S r.   ©r   ©rF   r2   r6   s      r   r…  z2BaseDatabaseSchemaEditor._field_became_primary_keyø  s   € ØÔ(Ð(ÐB¨YÔ-BÐBr   c                 ó>   — |j          o|j        o|j         p|j         S r.   )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_columnrg   r‹   )rF   r~   r2   r6   ru  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‹   rr   rs   rR  )r
   r&   r‰   rg   rX  r   r‹   Útarget_fieldr*   r@   rf   rY  r	   Úsql_create_fk)
rF   r*   r   r  r~   r   r‹   rr   rs   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 r.   ©rg   r•  ©rè  ré  rF   s     €r   Úcreate_fk_namezDBaseDatabaseSchemaEditor._fk_constraint_name.<locals>.create_fk_name   s(   ø€ Ø—?’?Ð#: 4Ô#:¸DÐ#KÀFÐ#KÐ#KÑLÔLÐLr   r)  )r   r&   r‰   r‹   r   r  r*   )rF   r*   r   r  r  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 r.   )r3  Úsql_delete_fk©rF   r*   r   s      r   rg  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 )NrX   z DEFERRABLE INITIALLY DEFERREDz DEFERRABLE INITIALLY IMMEDIATE)r   ÚDEFERREDÚ	IMMEDIATE)rF   rR  s     r   Ú_deferrable_constraint_sqlz3BaseDatabaseSchemaEditor._deferrable_constraint_sql/  s=   € ØÐØ�2Ø�Ô,Ò,Ð,Ø3Ð3Ø�Ô-Ò-Ð-Ø4Ð4ð .Ð-r   c	           	      óp  ‡ — |r‰ j         j        j        sd S |s|s|s|r:‰                      |||||||¬¦  «        }	|	r‰ j                             |	¦  «         d S ‰ j        d                     ˆ fd„|D ¦   «         ¦  «        ‰                      |¦  «        dœz  }
‰ j	        ‰  
                    |¦  «        |
dœz  S )N)r   rÖ  rÞ  rÝ  rß  r{   c                 óD   •— g | ]}‰                      |j        ¦  «        ‘ŒS rS   )rg   r‹   )r0   r   rF   s     €r   rm   z8BaseDatabaseSchemaEditor._unique_sql.<locals>.<listcomp>W  s'   ø€ Ð!TÐ!TÐ!TÀE $§/¢/°%´,Ñ"?Ô"?Ð!TÐ!TÐ!Tr   )r7  rR  ©r   rz   )r@   rC   Ú&supports_deferrable_unique_constraintsr�   rI   r_   Úsql_unique_constraintr“   r$  Úsql_constraintrg   )rF   r*   r—   r   rÖ  rR  rÞ  rÝ  rß  rR   rz   s   `          r   Ú_unique_sqlz$BaseDatabaseSchemaEditor._unique_sql7  s  ø€ ð ð	à”OÔ,ÔSð	ð �4Øð 	˜ð 	 9ð 	°ð 	ð ×)Ò)ØØØØ#ØØ#Ø'ð *ñ ô ˆ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	                 óÜ  — |r| j         j        j        r9|r| j         j        j        r&|r| j         j        j        r|r| j         j        j        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 )
NFrá  ro   c                 ó   — g | ]	}|j         ‘Œ
S rS   rä  rå  s     r   rm   z?BaseDatabaseSchemaEditor._create_unique_sql.<locals>.<listcomp>{  ræ  r   Tr'  rS   )rÜ  rÝ  )r~   r   r7  rÖ  rR  rÞ  )r@   rC   r(  Úsupports_partial_indexesrÙ  rñ   r   rë  r&   r‰   r0  rg   Úsql_create_unique_indexÚsql_create_uniquerí  r   rb   r	   r
   r×  r$  rÚ  )rF   r*   r—   r   rÖ  rR  rÞ  rÝ  rß  rî  r~   r7  rR   s                r   r�   z+BaseDatabaseSchemaEditor._create_unique_sql_  sÏ  € ð ð	ð œÔ0ÔWð	ð
 ð	ð
 #'¤/Ô":Ô"Sð	ð ð	ð !%¤Ô 8Ô Rð	ð ð	ð %)¤OÔ$<Ô$Xð	ð �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Ñ;Ô;ð
ñ 
ô 
ð 	
r   c                 óF   ‡ — |rˆ fd„}n‰ j         }t          ||d|¦  «        S )Nc                  óD   •— ‰                       ‰j        | i |¤Ž¦  «        S r.   r  r  s     €r   Úcreate_unique_namezLBaseDatabaseSchemaEditor._unique_constraint_name.<locals>.create_unique_name—  s(   ø€ Ø—’Ð'> tÔ'>ÀÐ'OÈÐ'OÐ'OÑPÔPÐPr   Ú_uniq)r•  r   )rF   r~   r7  r(  r3  s   `    r   r0  z0BaseDatabaseSchemaEditor._unique_constraint_name”  sO   ø€ Øð 	9ðQð Qð Qð Qð Qð Qð "&Ô!8Ðå˜ ¨Ð2DÑEÔEÐEr   c                 óú   — |r| j         j        j        r9|r| j         j        j        r&|r| j         j        j        r|r| j         j        j        sd S |s|s|s|r| j        }n| j        }|                      |||¦  «        S r.   )	r@   rC   r(  r.  rÙ  rñ   r  r  r3  )	rF   r*   r   rÖ  rR  rÞ  rÝ  rß  rR   s	            r   r†  z+BaseDatabaseSchemaEditor._delete_unique_sqlŸ  sÀ   € ð ð	ð œÔ0ÔWð	ð
 ð	ð
 #'¤/Ô":Ô"Sð	ð ð	ð !%¤Ô 8Ô Rð	ð ð	ð %)¤OÔ$<Ô$Xð	ð �4Øð 	)˜ð 	) 9ð 	)°ð 	)ØÔ'ˆCˆCàÔ(ˆCØ×*Ò*¨3°°tÑ<Ô<Ð<r   c                 óV   — | j         |                      |¦  «        | j        d|iz  dœz  S )Nrp   r'  )r*  rg   r…   )rF   r   rp   s      r   Ú
_check_sqlz#BaseDatabaseSchemaEditor._check_sql»  s;   € ØÔ"Ø—O’O DÑ)Ô)ØÔ3°wÀÐ6FÑFð&
ð &
ñ 
ð 	
r   c                 ó’   — t          | j        t          |j        j        | j        ¦  «        |                      |¦  «        |¬¦  «        S )N)r~   r   rp   )r	   Úsql_create_checkr
   r&   r‰   rg   )rF   r*   r   rp   s       r   r–  z*BaseDatabaseSchemaEditor._create_check_sqlÁ  sE   € ÝØÔ!Ý˜œÔ,¨d¬oÑ>Ô>Ø—’ Ñ&Ô&Øð	
ñ 
ô 
ð 	
r   c                 ó`   — | j         j        j        sd S |                      | j        ||¦  «        S r.   )r@   rC   Ú supports_table_check_constraintsr3  Úsql_delete_checkr  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‰   rg   )rF   Útemplater*   r   s       r   r3  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 rS   )r@   rC   Útruncates_namesÚintrospectionÚidentifier_converterr   rf   rË  )r0   r   rF   s     €r   rm   z>BaseDatabaseSchemaEditor._constraint_names.<locals>.<listcomp>ã  s‹   ø€ ð ð ð ð ð ”?Ô+Ô;ðN�”Ô-×BÒBÝ! $¨¬Ô(;×(KÒ(KÑ(MÔ(MÑNÔNñô ð ð ”_Ô2×GÒGÈÑMÔMðð ð r   r7  r±   r   rô   rp   rf  r»   )r@   rc   rB  Úget_constraintsr&   r‰   Úitemsr_   )rF   r*   rÎ  r±   r   rô   rf  rp   r}  r&  rc   r‘   Úresultr   Úinfodicts   `              r   r.  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  r)  r*  z) of PK constraints for )r.  r1  r2  r&   r‰   rM   Ú_delete_primary_key_sql)rF   r*   rq  r8  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   r7  )	r	   Úsql_create_pkr
   r&   r‰   rg   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 r.   )r3  Úsql_delete_pkr  s      r   rI  z0BaseDatabaseSchemaEditor._delete_primary_key_sql  r   r   c                 ó:   — |rd|                       |¦  «        z   ndS )NzCOLLATE rX   )rg   )rF   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_procedurerg   r“   rM   )rF   Úprocedure_namerS  rR   s       r   Úremove_procedurez)BaseDatabaseSchemaEditor.remove_procedure!  sQ   € ØÔ'ØŸš¨Ñ8Ô8ØŸ8š8 KÑ0Ô0ð+
ð +
ñ 
ˆð 	�Š�SÑÔÐÐÐr   )FT)rS   )F)rX   r.   )NNNNN)NNNNNN)T)NNNNNNNNr¼   )pÚ__name__Ú
__module__Ú__qualname__Ú__doc__r’   r?  rL  ré   rZ  r\  rº  r³  r´  r¸  r·  r¶  rh  r  r‘  r)  r…   Úsql_delete_constraintr*  r9  r<  r0  r  r  rŒ   rW  r  rì  r/  rô  r  rL  rN  rT  rF  r¾  rG   rK   rN   rM   rg   rœ   r¹   rƒ   r¨   r©   r­   r«   ÚstaticmethodrØ   rª   rb   rå   rè   rõ   rø   rþ   r  r  r  r   r  rC  rß   rO  rc  rl  rv  rp  rŽ  r[  r�  rà   r¦   ro  r•  rÔ  r×  rÚ  r  r‰  rû   rí  rá   r]  rn  rþ  r…  r“  r‹  rŽ   rX  rg  r$  r+  r�   r0  r†  r7  r–  rŠ  r3  r.  r’  r”  rI  r£   rV  rS   r   r   r>   r>   K   s…  € € € € € ðð ð AÐØJÐØVÐØ5ÐàTÐØ:ÐØPÐØCÐØ FÐØPÐØ"HÐØ'BÐ$ØNÐàNð ð 	Qð ð AÐØ.ÐØLÐØ9€NàXÐØ,Ðð	-ð ð .Ðð	@ð ð  ÐØ"&ÐØ)€Mð	9ð ð
	0ð ð IÐØ,Ðð 	Rð ð *€Mà9ÐàIÐØVÐðUð Uð Uð Uðð ð ðAð Að Að,ð ,ð ,ð ,ð>4ð 4ð 4ðOð Oð Oðf7Nð 7Nð 7Nðr
ð 
ð 
ð 
ð6ð ð ðð ð ð
ð 
ð 
ðð ð ð ðð ñ „\ðð.Wð Wð Wð$ð $ð $ð">ð ">ð ">ðH.ð .ð .ð*	Að 	Að 	Að4ð 4ð 4ð-ð -ð -ð+ð +ð +ðð ð ðAð Að Að*Vð Vð Vð* Sð  Sð  SðDHð Hð Hð&ð ð ð	
ð 	
ð 	
ðT$ð T$ð T$ðl.ð .ð .ð@>
ð >
ð >
ð >
ðR ðX$ð X$ð X$ð X$ðt
ð ð ð:$
ð $
ð $
ð $
ðL,
ð ,
ð ,
ð\	
ð 	
ð 	
ð/ð /ð /ð
ð 
ð 
ð@ð ð ð ð@
ð 
ð 
ð 
ðð ð ð

ð 
ð 
ð ØØØØØØØØØØð4
ð 4
ð 4
ð 4
ð 4
ðl
ð 
ð 
ð 
ð
ð 
ð 
ðSð Sð Sðð ð ð.ð ð ðRð Rð Rð Rð"3ð 3ð 3ðCð Cð Cð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð*
ð 
ð 
ðLð Lð Lð5ð 5ð 5ð ØØØØð&
ð &
ð &
ð &
ðX ØØØØØð3
ð 3
ð 3
ð 3
ðj	Fð 	Fð 	Fð 	Fð ØØØØð=ð =ð =ð =ð8
ð 
ð 
ð
ð 
ð 
ðOð Oð Oð

ð 
ð 
ð ØØØØØØØð+ð +ð +ð +ðZOð Oð Oð Oð

ð 

ð 

ðLð Lð LðLð Lð Lð Lðð ð ð ð ð r   r>   ) Úloggingr(   r   Údjango.confr   Ú!django.db.backends.ddl_referencesr   r   r   r   r	   r
   Údjango.db.backends.utilsr   r   r   Údjango.db.modelsr   r   Údjango.db.models.sqlr   Údjango.db.transactionr   r   Údjango.utilsr   Ú	getLoggerr[   r   r+   r8   r>   rS   r   r   ú<module>rf     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ð 
ð 
ð 
ð
ð 
ð 
ð.[ð [ð [ð [ð [ñ [ô [ð [ð [ð [r   