§
    Ï“Ùhµ_  ã                   óŠ   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ  G d
„ de¦  «        ZdS )é    N)ÚDecimal)ÚApps)ÚNotSupportedError)ÚBaseDatabaseSchemaEditor)Ú	Statement)Ústrip_quotes)ÚUniqueConstraint)Úatomicc                   óÐ   ‡ — e Zd ZdZdZdZeZdZdZdZ	dZ
dZˆ fd„Zˆ fd„Zd	„ Zd
„ Z	 dd„Z	 dˆ fd„	Zdˆ fd„	Z	 dd„Zdˆ fd„	Zˆ fd„Zˆ fd„Z	 dd„Zd„ Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚDatabaseSchemaEditorzDROP TABLE %(table)sNzEREFERENCES %(to_table)s (%(to_column)s) DEFERRABLE INITIALLY DEFERREDz,ALTER TABLE %(table)s DROP COLUMN %(column)sz7CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)zDROP INDEX %(name)sc                 ó”   •— | j                              ¦   «         st          d¦  «        ‚t          ¦   «                              ¦   «         S )NzüSQLite schema editor cannot be used while foreign key constraint checks are enabled. Make sure to disable them before entering a transaction.atomic() context because SQLite does not support disabling them in the middle of a multi-statement transaction.)Ú
connectionÚdisable_constraint_checkingr   ÚsuperÚ	__enter__)ÚselfÚ	__class__s    €ú`/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/db/backends/sqlite3/schema.pyr   zDatabaseSchemaEditor.__enter__   sJ   ø€ ð Œ×:Ò:Ñ<Ô<ð 	Ý#ð1ñô ð õ ‰wŒw× Ò Ñ"Ô"Ð"ó    c                 ó²   •— | j                              ¦   «          t          ¦   «                              |||¦  «         | j                              ¦   «          d S ©N)r   Úcheck_constraintsr   Ú__exit__Úenable_constraint_checking)r   Úexc_typeÚ	exc_valueÚ	tracebackr   s       €r   r   zDatabaseSchemaEditor.__exit__'   sM   ø€ ØŒ×)Ò)Ñ+Ô+Ð+Ý‰Œ×Ò˜ 9¨iÑ8Ô8Ð8ØŒ×2Ò2Ñ4Ô4Ð4Ð4Ð4r   c                 óL  — 	 dd l }|                     |¦  «        }n# t          $ r Y n|j        $ r Y nw xY wt	          |t
          ¦  «        rt          t          |¦  «        ¦  «        S t	          |t          t          t          f¦  «        rt          |¦  «        S t	          |t          ¦  «        rd| 
                    dd¦  «        z  S |€dS t	          |t          t          t          f¦  «        rd|                     ¦   «         z  S t          d|›dt!          |¦  «        ›�¦  «        ‚)	Nr   z'%s'ú'z''ÚNULLzX'%s'zCannot quote parameter value z	 of type )Úsqlite3ÚadaptÚImportErrorÚProgrammingErrorÚ
isinstanceÚboolÚstrÚintr   ÚfloatÚreplaceÚbytesÚ	bytearrayÚ
memoryviewÚhexÚ
ValueErrorÚtype)r   Úvaluer!   s      r   Úquote_valuez DatabaseSchemaEditor.quote_value,   s3  € ð	ØˆNˆNˆNà—M’M %Ñ(Ô(ˆEˆEøÝð 	ð 	ð 	ØˆDØÔ'ð 	ð 	ð 	ØˆDð	øøøõ �e�TÑ"Ô"ð 	Ý•s˜5‘z”z‘?”?Ð"Ý˜¥­µÐ4Ñ5Ô5ð 	Ý�u‘:”:ÐÝ˜�sÑ#Ô#ð 	Ø˜EŸMšM¨#¨tÑ4Ô4Ñ4Ð4Øˆ]Ø�6Ý˜¥¥yµ*Ð=Ñ>Ô>ð 	ð ˜UŸYšY™[œ[Ñ(Ð(å�*Ø@EÀÀÅtÈEÁ{Ä{À{ÐSñô ð s   ‚ œ
4¨	4³4c                 ó,   — |                       |¦  «        S r   )r2   )r   r1   s     r   Úprepare_defaultz$DatabaseSchemaEditor.prepare_defaultK   s   € Ø×Ò Ñ&Ô&Ð&r   Fc                 ó‚  — | j                              ¦   «         5 }| j         j                             |¦  «        D ]l}|r|j        |k    rŒ| j         j                             ||j        ¦  «        }|                     ¦   «         D ]"\  }}||k    r|�||k    r  ddd¦  «         dS Œ#Œm	 ddd¦  «         n# 1 swxY w Y   dS )a  
        Return whether or not the provided table name is referenced by another
        one. If `column_name` is specified, only references pointing to that
        column are considered. If `ignore_self` is True, self-referential
        constraints are ignored.
        NTF)r   ÚcursorÚintrospectionÚget_table_listÚnameÚget_relationsÚvalues)	r   Ú
table_nameÚcolumn_nameÚignore_selfr6   Úother_tableÚ	relationsÚconstraint_columnÚconstraint_tables	            r   Ú_is_referenced_by_fk_constraintz4DatabaseSchemaEditor._is_referenced_by_fk_constraintN   sF  € ð Œ_×#Ò#Ñ%Ô%ð 	$¨Ø#œÔ<×KÒKÈFÑSÔSð 
$ð 
$�Øð  ;Ô#3°zÒ#AÐ#AØØ œOÔ9×GÒGØ˜KÔ,ñô �	ð <E×;KÒ;KÑ;MÔ;Mð $ð $Ñ7Ð%Ð'7Ø'¨:Ò5Ð5Ø#Ð+Ð/@ÀKÒ/OÐ/Oà#˜tð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$øð$ð
$ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð ˆus   šA>B4Â%B4Â4B8Â;B8Tc                 óˆ  •— | j         j        j        sŒ|rŠ|                      |¦  «        ru| j         j        rt          d|z  ¦  «        ‚| j                              ¦   «          t          ¦   «                              |||¦  «         | j          	                    ¦   «          d S t          ¦   «                              |||¦  «         d S )Nz°Renaming the %r table while in a transaction is not supported on SQLite < 3.26 because it would break referential integrity. Try adding `atomic = False` to the Migration class.)
r   ÚfeaturesÚ!supports_atomic_references_renamerC   Úin_atomic_blockr   r   r   Úalter_db_tabler   )r   ÚmodelÚold_db_tableÚnew_db_tableÚdisable_constraintsr   s        €r   rH   z#DatabaseSchemaEditor.alter_db_tablee   s×   ø€ ð ”Ô(ÔJð	Fà#ð	Fð ×4Ò4°\ÑBÔBð	Fð
 ŒÔ.ð Ý'ðYð #ñ#ñô ð ð ŒO×6Ò6Ñ8Ô8Ð8Ý‰GŒG×"Ò" 5¨,¸ÑEÔEÐEØŒO×7Ò7Ñ9Ô9Ð9Ð9Ð9å‰GŒG×"Ò" 5¨,¸ÑEÔEÐEÐEÐEr   c                 óÌ  •— |                       ||¦  «        sd S |j        }|j        j        }|                     ¦   «         \  }}|j        |k    �rï| j        j        j        �sÝ|                      ||d¬¦  «        �rÄ| j        j	        r t          d|j        j        ›d|›d�¦  «        ‚t          | j        j        ¦  «        5  t          ¦   «                              ||||¬¦  «         | j                             ¦   «         5 }	|	                     d¦  «                             ¦   «         d         }
|	                     d	¦  «         d
|z  }|                     ¦   «         d         }||z  }||z  }|	                     d||f¦  «         |	                     d|
dz   z  ¦  «         |	                     d¦  «         |	                     d¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   | j                             ¦   «         5 }	|	                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          ¦   «                              ||||¬¦  «         d S )NT)r>   zRenaming the ú.z¢ column while in a transaction is not supported on SQLite < 3.26 because it would break referential integrity. Try adding `atomic = False` to the Migration class.)ÚstrictzPRAGMA schema_versionr   zPRAGMA writable_schema = 1z REFERENCES "%s" ("%%s") é   z3UPDATE sqlite_master SET sql = replace(sql, %s, %s)zPRAGMA schema_version = %dzPRAGMA writable_schema = 0zPRAGMA integrity_checkÚVACUUM)Ú_field_should_be_alteredr9   Ú_metaÚdb_tableÚget_attname_columnr   rE   rF   rC   rG   r   r
   Úaliasr   Úalter_fieldr6   ÚexecuteÚfetchone)r   rI   Ú	old_fieldÚ	new_fieldrO   Úold_field_namer<   Ú_Úold_column_namer6   Úschema_versionÚreferences_templateÚnew_column_nameÚsearchÚreplacementr   s                  €r   rW   z DatabaseSchemaEditor.alter_field|   sE  ø€ Ø×,Ò,¨Y¸	ÑBÔBð 	ØˆFØ"œˆØ”[Ô)ˆ
Ø&×9Ò9Ñ;Ô;Ñˆˆ?àŒN˜nÒ,Ñ,Ø”OÔ,ÔNñ -à×4Ò4Ø˜O¸ð 5ñ ô ñ -ð ŒÔ.ð Ý'Ð'ð ”{Ô+Ð+Ð+¨^¨^¨^ð=ñô ð õ ˜œÔ-Ñ.Ô.ð =ð =Ý‘”×#Ò# E¨9°iÈÐ#ÑOÔOÐOð ”_×+Ò+Ñ-Ô-ð =°Ø%+§^¢^Ð4KÑ%LÔ%L×%UÒ%UÑ%WÔ%WØô&�Nð —N’NÐ#?Ñ@Ô@Ð@Ø*EÈ
Ñ*RÐ'Ø&/×&BÒ&BÑ&DÔ&DÀQÔ&G�OØ0°?ÑB�FØ"5¸Ñ"G�KØ—N’NØMØ Ð-ñô ð ð —N’NÐ#?À>ÐTUÑCUÑ#VÑWÔWÐWØ—N’NÐ#?Ñ@Ô@Ð@ð —N’NÐ#;Ñ<Ô<Ð<ð%=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð4 ”×'Ò'Ñ)Ô)ð )¨VØ—’˜xÑ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð )ð )õ ‰GŒG×Ò  y°)ÀFÐÑKÔKÐKÐKÐKsI   Ã ?G+Ã?C	GÇG+ÇG	ÇG+ÇG	ÇG+Ç+G/Ç2G/ÈH2È2H6È9H6c                 ó²	  ‡ ‡‡‡‡‡— ˆfd„Šˆfd„‰j         j        D ¦   «         }ˆ fd„‰j         j        D ¦   «         }i Šd}|pg }t          |dd¦  «        st          d„ |D ¦   «         ¦  «        rdt	          |                     ¦   «         ¦  «        D ]B\  Š}|j        r6t          ˆfd„|D ¦   «         ¦  «        sd|_        |}|j        r|‰= ||j        = ŒC|rH|||j	        <   |j
        s7|j        r0‰                      ‰                      |¦  «        ¦  «        ||j        <   |D ]×}	|	\  }
}|                     |
j	        d¦  «         |                     |
j        d¦  «         |||j	        <   |
j        rX|j        sQd	‰                      |
j        ¦  «        ‰                      ‰                      |¦  «        ¦  «        d
œz  }|||j        <   n"‰                      |
j        ¦  «        ||j        <   |j	        ‰|
j	        <   ŒØ‰rL|‰j	        = |‰j        = ‰j
        r5‰j        j        j         j        r‰                      ‰j        j        ¦  «        S t)          ¦   «         }ˆfd„‰j         j        D ¦   «         }ˆfd„‰j         j        D ¦   «         }‰j         j        }‰rˆfd„|D ¦   «         }t	          ‰j         j        ¦  «        }t3          j        |¦  «        }‰j         j        ‰j         j        |||||dœ}t;          dd|¦  «        }||d<   ‰j        |d<   t;          ‰j         j        ‰j         |¦  «         t3          j        |¦  «        }‰j         j        dtC          ‰j         j        ¦  «        z  |||||dœ}t;          dd|¦  «        }||d<   ‰j        |d<   t;          d‰j         j        z  ‰j         |¦  «        }‰  "                    |¦  «         ‰  #                    d‰                      |j         j        ¦  «        ›dd $                    ˆ fd„|D ¦   «         ¦  «        ›dd $                    | %                    ¦   «         ¦  «        ›d‰                      ‰j         j        ¦  «        ›�¦  «         ‰                      ‰d¬¦  «         ‰  &                    ||j         j        ‰j         j        d¬¦  «         ‰ j'        D ]}‰  #                    |¦  «         Œg ‰ _'        |r	d|_        dS dS )a|  
        Shortcut to transform a model from old_model into new_model

        This follows the correct procedure to perform non-rename or column
        addition operations based on SQLite's documentation

        https://www.sqlite.org/lang_altertable.html#caution

        The essential steps are:
          1. Create a table with the updated definition called "new__app_model"
          2. Copy the data from the existing "app_model" table to the new table
          3. Drop the "app_model" table
          4. Rename the "new__app_model" table to "app_model"
          5. Restore any index of the previous "app_model" table.
        c                 ó.   •— | j         o| j        j        ‰u S r   )Úis_relationÚremote_fieldrI   )ÚfrI   s    €r   Úis_self_referentialz?DatabaseSchemaEditor._remake_table.<locals>.is_self_referentialÇ   s   ø€ Ø”=ÐB Q¤^Ô%9¸UÐ%BÐBr   c                 ó^   •— i | ])}|j          ‰|¦  «        r|                     ¦   «         n|“Œ*S © )r9   Úclone)Ú.0rh   ri   s     €r   ú
<dictcomp>z6DatabaseSchemaEditor._remake_table.<locals>.<dictcomp>Ë   sJ   ø€ ð 
ð 
ð 
àð ŒFÐ!4Ð!4°QÑ!7Ô!7Ð>�A—G’G‘I”I�I¸Qð
ð 
ð 
r   c                 óP   •— i | ]"}|j         ‰                     |j         ¦  «        “Œ#S rk   )ÚcolumnÚ
quote_name)rm   rh   r   s     €r   rn   z6DatabaseSchemaEditor._remake_table.<locals>.<dictcomp>Ñ   s;   ø€ ð 
ð 
ð 
àð ŒH�d—o’o a¤hÑ/Ô/ð
ð 
ð 
r   NÚprimary_keyFc              3   ó>   K  — | ]\  }}t          |d d¦  «        V — ŒdS )rr   FN)Úgetattr)rm   r]   r[   s      r   ú	<genexpr>z5DatabaseSchemaEditor._remake_table.<locals>.<genexpr>Û   sC   è è € ð >
ð >
Ù9E¸¸I�G�I˜}¨eÑ4Ô4ð>
ð >
ð >
ð >
ð >
ð >
r   c              3   ó4   •K  — | ]\  }}‰|j         k    V — Œd S r   )r9   )rm   r]   r[   r9   s      €r   ru   z5DatabaseSchemaEditor._remake_table.<locals>.<genexpr>ß   sD   øè è € ð 1ð 1ñ %˜˜9ð ˜IœNÒ*ð1ð 1ð 1ð 1ð 1ð 1r   zcoalesce(%(col)s, %(default)s))ÚcolÚdefaultc                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó<   •— g | ]}‰                      ||¦  «        ‘ŒS rk   ©Úget©rm   ÚnÚrename_mappings     €r   ú
<listcomp>zADatabaseSchemaEditor._remake_table.<locals>.<listcomp>.<listcomp>  s)   ø€ Ð6Ð6Ð6¨!ˆ^×Ò  1Ñ%Ô%Ð6Ð6Ð6r   rk   )rm   Úuniquer   s     €r   r€   z6DatabaseSchemaEditor._remake_table.<locals>.<listcomp>  s=   ø€ ð 
ð 
ð 
àð 7Ð6Ð6Ð6¨vÐ6Ñ6Ô6ð
ð 
ð 
r   c                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó<   •— g | ]}‰                      ||¦  «        ‘ŒS rk   r{   r}   s     €r   r€   zADatabaseSchemaEditor._remake_table.<locals>.<listcomp>.<listcomp>  s)   ø€ Ð5Ð5Ð5¨!ˆ^×Ò  1Ñ%Ô%Ð5Ð5Ð5r   rk   )rm   Úindexr   s     €r   r€   z6DatabaseSchemaEditor._remake_table.<locals>.<listcomp>  s=   ø€ ð 
ð 
ð 
àð 6Ð5Ð5Ð5¨uÐ5Ñ5Ô5ð
ð 
ð 
r   c                 ó0   •— g | ]}‰j         |j        v¯|‘ŒS rk   )r9   Úfields)rm   r„   Údelete_fields     €r   r€   z6DatabaseSchemaEditor._remake_table.<locals>.<listcomp>  s/   ø€ ð ð ð Ø¨lÔ.?ÀuÄ|Ð.SÐ.S�Ð.SÐ.SÐ.Sr   )Ú	app_labelrT   Úunique_togetherÚindex_togetherÚindexesÚconstraintsÚappsÚMetark   Ú
__module__znew__%szNew%súINSERT INTO ú (ú, c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   )rq   )rm   Úxr   s     €r   ru   z5DatabaseSchemaEditor._remake_table.<locals>.<genexpr>T  s/   øè è € Ð>Ð>°˜$Ÿ/š/¨!Ñ,Ô,Ð>Ð>Ð>Ð>Ð>Ð>r   ú	) SELECT ú FROM )Úhandle_autom2m)rL   T)(rS   Úlocal_concrete_fieldsrt   ÚanyÚlistÚitemsrr   Úauto_createdrp   r9   Úmany_to_manyÚconcreter4   Úeffective_defaultÚpopÚnullrq   rg   ÚthroughÚdelete_modelr   r‰   rŠ   r‹   rŒ   ÚcopyÚdeepcopyrˆ   rT   r0   r�   Úobject_nameÚ	__bases__r   Úcreate_modelrX   Újoinr;   rH   Údeferred_sql)r   rI   Úcreate_fieldr‡   Úalter_fieldsÚbodyÚmappingÚrestore_pk_fieldÚfieldrW   rZ   r[   Úcase_sqlr�   r‰   rŠ   r‹   rŒ   Ú	body_copyÚmeta_contentsÚmetaÚ	new_modelÚsqlri   r9   r   s   `` `                   @@@r   Ú_remake_tablez"DatabaseSchemaEditor._remake_table±   s*  øøøøøø€ ð,	Cð 	Cð 	Cð 	Cð 	Cð
ð 
ð 
ð 
à”[Ô6ð
ñ 
ô 
ˆð
ð 
ð 
ð 
à”[Ô6ð
ñ 
ô 
ˆð
 ˆð  ÐØ#Ð) rˆÝ�< °Ñ6Ô6ð 	2½#ð >
ð >
ØIUð>
ñ >
ô >
ñ ;
ô ;
ð 	2õ  $ D§J¢J¡L¤LÑ1Ô1ð 2ð 2‘��eØÔ$ð 
2­Sð 1ð 1ð 1ð 1ð )5ð	1ñ 1ô 1ñ .ô .ð 
2ð ).�EÔ%Ø',Ð$ØÔ)ð 2Ø  ˜JØ# E¤LÐ1øàð 	Ø&2ˆD�Ô"Ñ#àÔ,ð °Ô1Fð Ø/3×/CÒ/CØ×*Ò*¨<Ñ8Ô8ñ0ô 0�˜Ô+Ñ,ð (ð 	<ð 	<ˆKØ#.Ñ ˆI�yØ�HŠH�Y”^ TÑ*Ô*Ð*Ø�KŠK˜	Ô(¨$Ñ/Ô/Ð/Ø#,ˆD�”Ñ ØŒ~ð N i¤nð NØ;ØŸ?š?¨9Ô+;Ñ<Ô<Ø#×3Ò3°D×4JÒ4JÈ9Ñ4UÔ4UÑVÔVð?ð ?ñ �ð -5�˜	Ô(Ñ)Ð)à,0¯OªO¸IÔ<LÑ,MÔ,M�˜	Ô(Ñ)Ø-6¬^ˆN˜9œ>Ñ*Ð*àð 	LØ�\Ô&Ð'Ø˜Ô+Ð,ð Ô)ðLà Ô-Ô5Ô;ÔHðLð ×(Ò(¨Ô)BÔ)JÑKÔKÐKå‰vŒvˆð
ð 
ð 
ð 
àœ+Ô5ð
ñ 
ô 
ˆð
ð 
ð 
ð 
àœÔ3ð
ñ 
ô 
ˆð
 ”+Ô%ˆØð 	ðð ð ð Ø#*ðñ ô ˆGõ ˜5œ;Ô2Ñ3Ô3ˆõ
 ”M $Ñ'Ô'ˆ	ð œÔ.ØœÔ,Ø.Ø,ØØ&Øð
ð 
ˆõ �F˜B Ñ.Ô.ˆØ ˆ	�&ÑØ"'Ô"2ˆ	�,ÑÝˆUŒ[Ô$ e¤o°yÑAÔAÐAõ ”M $Ñ'Ô'ˆ	àœÔ.Ø!¥L°´Ô1EÑ$FÔ$FÑFØ.Ø,ØØ&Øð
ð 
ˆõ �F˜B Ñ.Ô.ˆØ ˆ	�&ÑØ"'Ô"2ˆ	�,ÑÝ˜ 5¤;Ô#:Ñ:¸E¼OÈYÑWÔWˆ	ð 	×Ò˜)Ñ$Ô$Ð$ð 	�Šˆð —’ 	¤Ô 8Ñ9Ô9Ð9Ð9Ø—	’	Ð>Ð>Ð>Ð>°gÐ>Ñ>Ô>Ñ>Ô>Ð>Ð>Ø—	’	˜'Ÿ.š.Ñ*Ô*Ñ+Ô+Ð+Ð+Ø—’ ¤Ô 4Ñ5Ô5Ð5ðñ	
ô 	
ð 	
ð 	×Ò˜%°ÐÑ6Ô6Ð6ð 	×ÒØØŒOÔ$ØŒKÔ Ø %ð	 	ñ 	
ô 	
ð 	
ð Ô$ð 	ð 	ˆCØ�LŠL˜ÑÔÐÐØˆÔàð 	0Ø+/ÐÔ(Ð(Ð(ð	0ð 	0r   c                 ó”  •— |r#t          ¦   «                              |¦  «         d S |                      | j        d|                      |j        j        ¦  «        iz  ¦  «         t          | j        ¦  «        D ]P}t          |t          ¦  «        r9|                     |j        j        ¦  «        r| j                             |¦  «         ŒQd S )NÚtable)r   r£   rX   Úsql_delete_tablerq   rS   rT   rš   rª   r%   r   Úreferences_tableÚremove)r   rI   r—   r¶   r   s       €r   r£   z!DatabaseSchemaEditor.delete_modelm  sØ   ø€ Øð 	2Ý‰GŒG× Ò  Ñ'Ô'Ð'Ð'Ð'ð �LŠLØÔ%à˜TŸ_š_¨U¬[Ô-AÑBÔBðññô ð õ ˜DÔ-Ñ.Ô.ð 2ð 2�Ý˜c¥9Ñ-Ô-ð 2°#×2FÒ2FØ”KÔ(ñ3ô 3ð 2ð Ô%×,Ò,¨SÑ1Ô1Ð1øð	2ð 2r   c                 óN  •— |j         r7|j        j        j        j        r!|                      |j        j        ¦  «         dS |j        s#|j        s|j        r|  	                    |¦  «        �|  
                    ||¬¦  «         dS t          ¦   «                              ||¦  «         dS )zCreate a field on a model.N)r«   )r�   rg   r¢   rS   rœ   r¨   rr   r�   r¡   rŸ   r·   r   Ú	add_field©r   rI   r°   r   s      €r   r¾   zDatabaseSchemaEditor.add_field  s½   ø€ ð Ôð 	, %Ô"4Ô"<Ô"BÔ"Oð 	,Ø×Ò˜eÔ0Ô8Ñ9Ô9Ð9Ð9Ð9ð Ôð	,ð Œ|ð		,ð ”
ð	,ð ×%Ò% eÑ,Ô,Ð8à×Ò˜u°5ÐÑ9Ô9Ð9Ð9Ð9å‰GŒG×Ò˜e UÑ+Ô+Ð+Ð+Ð+r   c                 ó¬  •— |j         r9|j        j        j        j        r!|                      |j        j        ¦  «         dS dS | j        j        j        rG|j	        s@|j
        s9|j        s2|j        r|j        s$t          ¦   «                              ||¦  «         dS |                     | j        ¬¦  «        d         €dS |                      ||¬¦  «         dS )z…
        Remove a field from a model. Usually involves deleting a column,
        but for M2Ms may involve deleting a table.
        )r   r0   N)r‡   )r�   rg   r¢   rS   rœ   r£   r   rE   Úcan_alter_table_drop_columnrr   r�   Údb_indexÚdb_constraintr   Úremove_fieldÚdb_parametersr·   r¿   s      €r   rÄ   z!DatabaseSchemaEditor.remove_field”  s  ø€ ð Ôð 	:àÔ!Ô)Ô/Ô<ð >Ø×!Ò! %Ô"4Ô"<Ñ=Ô=Ð=Ð=Ð=ð>ð >ð ŒOÔ$Ô@ð	:ð Ô%ð		:ð
 ”Lð	:ð ”Nð	:ð Ô'ð	:ð -2Ô,?ð	:õ ‰GŒG× Ò  ¨Ñ.Ô.Ð.Ð.Ð.ð ×"Ò"¨d¬oÐ"Ñ>Ô>¸vÔFÐNØ�Ø×Ò˜u°5ÐÑ9Ô9Ð9Ð9Ð9r   c	                 ó   — | j         j        j        r�|j        |j        k    r|                      ||¦  «        |                      ||¦  «        k    rQ|j        r|j        sC|j        r|j        s5|                      |                      |j	        j
        |||¦  «        ¦  «        S |                      |||fg¬¦  «         |                     d¦  «        }	|                     d¦  «        }
|j        �r||k    s|	|
k    �rt          ¦   «         }|j        j	        }|j        D ]r}|j        |k    rŒ|j        s+|j        |j        k    r|                     |j        ¦  «         Œ@|j        r+|j        j	        j        r|                     |j        ¦  «         Œs|j        rK|j        D ]C}|j        |k    rŒ|j        j        j	        j        r|                     |j        j        ¦  «         ŒD|D ]}|                      |¦  «         ŒdS dS dS )z3Perform a "physical" (non-ManyToMany) field update.©r¬   Ú	collationN)r   rE   Úcan_alter_table_rename_columnrp   Ú
column_sqlrg   rÃ   rX   Ú_rename_field_sqlrS   rT   r·   r|   r�   ÚsetrI   Úrelated_objectsÚrelated_modelr�   Ú
field_namer9   Úaddrr   r¢   rœ   )r   rI   rZ   r[   Úold_typeÚnew_typeÚold_db_paramsÚnew_db_paramsrO   Úold_collationÚnew_collationÚrelated_modelsÚoptsrg   r�   rÎ   s                   r   Ú_alter_fieldz!DatabaseSchemaEditor._alter_field°  sa  € ð ŒOÔ$ÔBð	àÔ  IÔ$4Ò4Ð4Ø—’  yÑ1Ô1°T·_²_ÀUÈIÑ5VÔ5VÒVÐVàÔ&ð Wð Ô+ð Wð Ô)ð	 Wð
 Ô+ð Wð —<’<Ø×&Ò&Ø”KÔ(¨)°YÀñô ñô ð ð 	×Ò˜5°¸IÐ0FÐ/GÐÑHÔHÐHà%×)Ò)¨+Ñ6Ô6ˆØ%×)Ò)¨+Ñ6Ô6ˆØÔñ 	2Ø˜Ò Ð  M°]Ò$BÑ$Bå ™UœUˆNØ”?Ô(ˆDØ $Ô 4ð =ð =�àÔ-°Ò6Ð6ØØ#Ô0ð =Ø#Ô.°)´.Ò@Ð@Ø&×*Ò*¨<Ô+EÑFÔFÐFøØÔ*ð =¨|Ô/CÔ/IÔ/Vð =Ø"×&Ò& |Ô';Ñ<Ô<Ð<øØÔ$ð NØ$(Ô$5ð Nð N�Là#Ô1°UÒ:Ð:Ø Ø#Ô0Ô8Ô>ÔKð NØ&×*Ò*¨<Ô+DÔ+LÑMÔMÐMøØ!/ð 2ð 2�Ø×"Ò" =Ñ1Ô1Ð1Ð1ð-	2ð 	2Ø$BÐ$Bð(2ð 2r   c                 ó–  — |j         j        j        j        |j         j        j        j        k    rù|                      |j         j        |j         j        j                             |                     ¦   «         ¦  «        |j         j        j                             |                     ¦   «         ¦  «        f|j         j        j                             |                     ¦   «         ¦  «        |j         j        j                             |                     ¦   «         ¦  «        fg¬¦  «         dS |                      |j         j        ¦  «         |  	                    d|  
                    |j         j        j        j        ¦  «        ›dd                     d|                     ¦   «         |                     ¦   «         g¦  «        ›dd                     d|                     ¦   «         |                     ¦   «         g¦  «        ›d|  
                    |j         j        j        j        ¦  «        ›�¦  «         |                      |j         j        ¦  «         dS )	z*Alter M2Ms to repoint their to= endpoints.rÇ   Nr�   r‘   r’   Úidr•   r–   )rg   r¢   rS   rT   r·   Ú	get_fieldÚm2m_reverse_field_nameÚm2m_field_namer¨   rX   rq   r©   Úm2m_column_nameÚm2m_reverse_namer£   )r   rI   rZ   r[   rO   s        r   Ú_alter_many_to_manyz(DatabaseSchemaEditor._alter_many_to_manyë  s@  € ð Ô"Ô*Ô0Ô9ØÔ%Ô-Ô3Ô<ò=ð =ð
 ×ÒØÔ&Ô.ð "Ô.Ô6Ô<×FÒFØ%×<Ò<Ñ>Ô>ñô ð "Ô.Ô6Ô<×FÒFØ%×<Ò<Ñ>Ô>ñô ð
ð "Ô.Ô6Ô<×FÒFØ%×4Ò4Ñ6Ô6ñô ð "Ô.Ô6Ô<×FÒFØ%×4Ò4Ñ6Ô6ñô ð
ðð ñ ô ð ð6 ˆFð 	×Ò˜)Ô0Ô8Ñ9Ô9Ð9à�Šˆð —’ 	Ô 6Ô >Ô DÔ MÑNÔNÐNÐNØ—	’	àØ!×1Ò1Ñ3Ô3Ø!×2Ò2Ñ4Ô4ðñô ð ð ð —	’	àØ!×1Ò1Ñ3Ô3Ø!×2Ò2Ñ4Ô4ðñô ð ð ð —’ 	Ô 6Ô >Ô DÔ MÑNÔNÐNð#ñ	
ô 	
ð 	
ð, 	×Ò˜)Ô0Ô8Ñ9Ô9Ð9Ð9Ð9r   c                 óÜ   •— t          |t          ¦  «        r@|j        s|j        s|j        s|j        r$t          ¦   «                              ||¦  «         d S |                      |¦  «         d S r   )	r%   r	   Ú	conditionÚcontains_expressionsÚincludeÚ
deferrabler   Úadd_constraintr·   ©r   rI   Ú
constraintr   s      €r   rç   z#DatabaseSchemaEditor.add_constraint+  s‚   ø€ Ý�jÕ"2Ñ3Ô3ð 	&ØÔ ð	&àÔ.ð	&ð Ô!ð	&ð Ô$ð		&õ ‰GŒG×"Ò" 5¨*Ñ5Ô5Ð5Ð5Ð5à×Ò˜uÑ%Ô%Ð%Ð%Ð%r   c                 óÜ   •— t          |t          ¦  «        r@|j        s|j        s|j        s|j        r$t          ¦   «                              ||¦  «         d S |                      |¦  «         d S r   )	r%   r	   rã   rä   rå   ræ   r   Úremove_constraintr·   rè   s      €r   rë   z&DatabaseSchemaEditor.remove_constraint6  s‚   ø€ Ý�jÕ"2Ñ3Ô3ð 	&ØÔ ð	&àÔ.ð	&ð Ô!ð	&ð Ô$ð		&õ ‰GŒG×%Ò% e¨ZÑ8Ô8Ð8Ð8Ð8à×Ò˜uÑ%Ô%Ð%Ð%Ð%r   c                 ó   — d|z   S )NzCOLLATE rk   )r   rÈ   s     r   Ú_collate_sqlz!DatabaseSchemaEditor._collate_sqlA  s   € Ø˜IÑ%Ð%r   )NF)T)F)NNN)Ú__name__r�   Ú__qualname__rº   Úsql_create_fkÚsql_create_inline_fkÚsql_create_column_inline_fkÚsql_delete_columnÚsql_create_uniqueÚsql_delete_uniqueÚsql_alter_table_commentÚsql_alter_column_commentr   r   r2   r4   rC   rH   rW   r·   r£   r¾   rÄ   rÙ   rá   rç   rë   rí   Ú__classcell__)r   s   @r   r   r      sí  ø€ € € € € Ø-ÐØ€MàOð ð #7ÐØFÐØQÐØ-ÐØ"ÐØ#Ðð#ð #ð #ð #ð #ð5ð 5ð 5ð 5ð 5ð
ð ð ð>'ð 'ð 'ð 9>ðð ð ð ð0 FJðFð Fð Fð Fð Fð Fð.3Lð 3Lð 3Lð 3Lð 3Lð 3Lðl IMðz0ð z0ð z0ð z0ðx2ð 2ð 2ð 2ð 2ð 2ð$,ð ,ð ,ð ,ð ,ð*:ð :ð :ð :ð :ðJ ð92ð 92ð 92ð 92ðv>:ð >:ð >:ð@	&ð 	&ð 	&ð 	&ð 	&ð	&ð 	&ð 	&ð 	&ð 	&ð&ð &ð &ð &ð &ð &ð &r   r   )r¤   Údecimalr   Údjango.apps.registryr   Ú	django.dbr   Údjango.db.backends.base.schemar   Ú!django.db.backends.ddl_referencesr   Údjango.db.backends.utilsr   Údjango.db.modelsr	   Údjango.db.transactionr
   r   rk   r   r   ú<module>r     sÝ   ðØ €€€Ø Ð Ð Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø CÐ CÐ CÐ CÐ CÐ CØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø -Ð -Ð -Ð -Ð -Ð -Ø (Ð (Ð (Ð (Ð (Ð (ðu&ð u&ð u&ð u&ð u&Ð3ñ u&ô u&ð u&ð u&ð u&r   