§
    Ÿj*  ã                   ób   — d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	  G d„ de¦  «        Z
dS )é    N)ÚDatabaseError)ÚBaseDatabaseSchemaEditorÚ_related_non_m2m_objects)Úduration_iso_stringc                   ó´   ‡ — e 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ˆ fd„Zˆ fd„Zdˆ fd„	Zˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zdˆ fd„	Zˆ xZS )ÚDatabaseSchemaEditorz3ALTER TABLE %(table)s ADD %(column)s %(definition)sz'MODIFY %(column)s %(type)s%(collation)szMODIFY %(column)s NULLzMODIFY %(column)s NOT NULLz%MODIFY %(column)s DEFAULT %(default)szMODIFY %(column)s DEFAULT NULLz,ALTER TABLE %(table)s DROP COLUMN %(column)szHCONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)sz(DROP TABLE %(table)s CASCADE CONSTRAINTSz9CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)sc                 óè  — t          |t          j        t          j        t          j        f¦  «        rd|z  S t          |t          j        ¦  «        rdt          |¦  «        z  S t          |t          ¦  «        rd|                     dd¦  «        z  S t          |t          t          t          f¦  «        rd|                     ¦   «         z  S t          |t          ¦  «        r|rdndS t          |¦  «        S )Nz'%s'ú'z''Ú1Ú0)Ú
isinstanceÚdatetimeÚdateÚtimeÚ	timedeltar   ÚstrÚreplaceÚbytesÚ	bytearrayÚ
memoryviewÚhexÚbool©ÚselfÚvalues     úm/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/db/backends/oracle/schema.pyÚquote_valuez DatabaseSchemaEditor.quote_value   sÙ   € Ý�e�hœm­X¬]½HÔ<MÐNÑOÔOð 	Ø˜E‘>Ð!Ý˜�xÔ1Ñ2Ô2ð 		ØÕ/°Ñ6Ô6Ñ6Ð6Ý˜�sÑ#Ô#ð 	Ø˜EŸMšM¨#¨tÑ4Ô4Ñ4Ð4Ý˜¥¥yµ*Ð=Ñ>Ô>ð 	Ø˜EŸIšI™KœKÑ'Ð'Ý˜�tÑ$Ô$ð 	ØÐ(�3�3 SÐ(å�u‘:”:Ðó    c                 óà   •— |                       |j        j        |j        ¦  «        r%|                      |j        j        |j        ¦  «         t          ¦   «                              ||¦  «         d S ©N)Ú_is_identity_columnÚ_metaÚdb_tableÚcolumnÚ_drop_identityÚsuperÚremove_field)r   ÚmodelÚfieldÚ	__class__s      €r   r'   z!DatabaseSchemaEditor.remove_field+   sb   ø€ ð ×#Ò# E¤KÔ$8¸%¼,ÑGÔGð 	DØ×Ò ¤Ô 4°e´lÑCÔCÐCÝ‰Œ×Ò˜U EÑ*Ô*Ð*Ð*Ð*r   c                 óÌ   •— t          ¦   «                              |¦  «         |                      dd| j        j                             |j        j        ¦  «        iz  ¦  «         d S )NaK  
            DECLARE
                i INTEGER;
            BEGIN
                SELECT COUNT(1) INTO i FROM USER_SEQUENCES
                    WHERE SEQUENCE_NAME = '%(sq_name)s';
                IF i = 1 THEN
                    EXECUTE IMMEDIATE 'DROP SEQUENCE "%(sq_name)s"';
                END IF;
            END;
        /Úsq_name)r&   Údelete_modelÚexecuteÚ
connectionÚopsÚ_get_no_autofield_sequence_namer"   r#   )r   r(   r*   s     €r   r-   z!DatabaseSchemaEditor.delete_model2   sn   ø€ å‰Œ×Ò˜UÑ#Ô#Ð#à�Šð
ð ˜4œ?Ô.×NÒNØ”KÔ(ñô ðññ	
ô 	
ð 	
ð 	
ð 	
r   Fc                 óÖ  •— 	 t          ¦   «                              ||||¦  «         d S # t          $ �r4}t          |¦  «        }d|v sd|v r|                      |||¦  «         nèd|v r>|                      |j        j        |j        ¦  «         |                      ||||¦  «         n¬d|v r6|j	        r/|  
                    |d¬¦  «         |                      |||¦  «         nxd|v rg|j	        r`|  
                    |d¬¦  «         |                      ||||¦  «         |j	        r)|                      |                      ||¦  «        ¦  «         n‚ Y d }~d S Y d }~d S Y d }~d S Y d }~d S d }~ww xY w)Nz	ORA-22858z	ORA-22859z	ORA-30675z	ORA-30673T)Ústrictz	ORA-43923)r&   Úalter_fieldr   r   Ú_alter_field_type_workaroundr%   r"   r#   r$   Úprimary_keyÚ_delete_primary_keyr.   Ú_create_primary_key_sql)r   r(   Ú	old_fieldÚ	new_fieldr3   ÚeÚdescriptionr*   s          €r   r4   z DatabaseSchemaEditor.alter_fieldI   sÞ  ø€ ð	Ý‰GŒG×Ò  y°)¸VÑDÔDÐDÐDÐDøÝð 	ñ 	ð 	Ý˜a™&œ&ˆKð ˜kÐ)Ð)¨[¸KÐ-GÐ-GØ×1Ò1°%¸ÀIÑNÔNÐNÐNð  Ð+Ð+Ø×#Ò# E¤KÔ$8¸)Ô:JÑKÔKÐKØ× Ò  ¨	°9¸fÑEÔEÐEÐEð  Ð+Ð+°	Ô0EÐ+Ø×(Ò(¨°tÐ(Ñ<Ô<Ð<Ø×1Ò1°%¸ÀIÑNÔNÐNÐNð  Ð+Ð+°	Ô0EÐ+Ø×(Ò(¨°tÐ(Ñ<Ô<Ð<Ø× Ò  ¨	°9¸fÑEÔEÐEàÔ(ð QØ—L’L ×!=Ò!=¸eÀYÑ!OÔ!OÑPÔPÐPøàð) OÐNÐNÐNÐNÐNð
 FÐEÐEÐEÐEÐEð
 OÐNÐNÐNÐNÐNè è è è è è øøøøð	øøøs   ƒ$) ©E(´DE#Å#E(c                 óZ  •— t          j        |¦  «        }|                     ¦   «         dv|_        |                      |j        ¦  «        |_        |                      ||¦  «         |                      |j        ¦  «        }|                     | j	        ¦  «        }t          j        d|¦  «        rd|z  }d}t          j        d|¦  «        r<|                     ¦   «         }|dk    rd|z  }n|dk    rd	|z  }n|d
k    r
d|z  }d	|z  }|                      d|                      |j        j        ¦  «        ›d|                      |j        ¦  «        ›d|›�¦  «         |                      ||¦  «         t!          ¦   «                              |||¦  «         |                     | j	        ¦  «        }|j        r|j        s|j        re|j        r`||k    rVt)          ||¦  «        D ]K\  }	}
|
j        j        r4|                      |                      |
j        |
j        d¦  «        ¦  «         ŒFdS dS dS dS )aÁ  
        Oracle refuses to change from some type to other type.
        What we need to do instead is:
        - Add a nullable version of the desired field with a temporary name. If
          the new column is an auto field, then the temporary column can't be
          nullable.
        - Update the table to transfer values from old to new
        - Drop old column
        - Rename the new column and possibly drop the nullable property
        )Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldz^N?CLOBzTO_CHAR(%s)ÚVARCHAR2z^N?VARCHAR2Ú	DateFieldzTO_DATE(%s, 'YYYY-MM-DD')ÚDateTimeFieldz,TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')Ú	TimeFieldzCONCAT('1900-01-01 ', %s)zUPDATE z set ú=Ú_fkN)ÚcopyÚdeepcopyÚget_internal_typeÚnullÚ_generate_temp_namer$   Ú	add_fieldÚ
quote_nameÚdb_typer/   ÚreÚmatchr.   r"   r#   r'   r&   r4   r6   Úuniquer   r)   Údb_constraintÚ_create_fk_sqlÚrelated_model)r   r(   r9   r:   Únew_temp_fieldÚ	new_valueÚold_typeÚnew_internal_typeÚnew_typeÚ_Úrelr*   s              €r   r5   z1DatabaseSchemaEditor._alter_field_type_workaroundg   s  ø€ õ œ yÑ1Ô1ˆØ'×9Ò9Ñ;Ô;ð D
ð 
ˆÔð
 !%× 8Ò 8¸Ô9IÑ JÔ JˆÔà�Š�u˜nÑ-Ô-Ð-ð —O’O IÔ$4Ñ5Ô5ˆ	Ø×$Ò$ T¤_Ñ5Ô5ˆÝŒ8�I˜xÑ(Ô(ð 	"Ø%¨	Ñ1ˆIØ!ˆHÝŒ8�M 8Ñ,Ô,ð 		WØ )× ;Ò ;Ñ =Ô =ÐØ  KÒ/Ð/Ø7¸)ÑC�	�	Ø" oÒ5Ð5ØJÈYÑV�	�	Ø" kÒ1Ð1à7¸)ÑC�	ØJÈYÑV�	à�Šˆð —’ ¤Ô 4Ñ5Ô5Ð5Ð5Ø—’ Ô 5Ñ6Ô6Ð6Ð6Ø�	ð	ñ	
ô 	
ð 	
ð 	×Ò˜% Ñ+Ô+Ð+å‰Œ×Ò˜E >°9Ñ=Ô=Ð=ð ×$Ò$ T¤_Ñ5Ô5ˆàÔ"ð	Ø'0Ô'<ð	àÔ ð	à%.Ô%5ð	ð ˜(Ò"Ð"Ý2°>À9ÑMÔMð ð ‘��3Ø”9Ô*ð Ø—L’LØ×+Ò+¨CÔ,=¸s¼yÈ%ÑPÔPñô ð øð #Ð"ð	ð 	ð 	ð 	ðð r   c                 óD  •— h d£}|                      ¦   «         |v r`|                      ¦   «         |vrJ|                      |j        j        |j        ¦  «        r%|                      |j        j        |j        ¦  «         t          ¦   «                              ||||||¦  «        S )N>   r>   r?   r@   )rI   r!   r"   r#   r$   r%   r&   Ú_alter_column_type_sql)	r   r(   r9   r:   rY   Úold_collationÚnew_collationÚauto_field_typesr*   s	           €r   r]   z+DatabaseSchemaEditor._alter_column_type_sqlª   s®   ø€ ð KÐJÐJÐð ×'Ò'Ñ)Ô)Ð-=Ð=Ð=Ø×+Ò+Ñ-Ô-Ð5EÐEÐEØ×(Ò(¨¬Ô)=¸yÔ?OÑPÔPð Fð ×Ò ¤Ô 4°iÔ6FÑGÔGÐGÝ‰wŒw×-Ò-Ø�9˜i¨°=À-ñ
ô 
ð 	
r   c                 ót   — |                       |¦  «        }|d         dk    r|d         dk    r
|dd…         }|S )z‚
        Get the properly shortened and uppercased identifier as returned by
        quote_name() but without the quotes.
        r   ú"éÿÿÿÿé   )rM   )r   ÚnameÚnns      r   Únormalize_namez#DatabaseSchemaEditor.normalize_name¹   s@   € ð
 �_Š_˜TÑ"Ô"ˆØˆaŒ5�CŠ<ˆ<˜B˜rœF cšM˜MØ�A�b�D”ˆBØˆ	r   c                 ó¤   — t          t          |¦  «        ¦  «                             ¦   «         dd…         }|                      |dz   |z   ¦  «        S )z@Generate temporary names for workarounds that need temp columns.rd   NrZ   )r   ÚhashÚupperrg   )r   Úfor_nameÚsuffixs      r   rK   z(DatabaseSchemaEditor._generate_temp_nameÃ   sG   € å•T˜(‘^”^Ñ$Ô$×*Ò*Ñ,Ô,¨Q¨R¨RÔ0ˆØ×"Ò" 8¨c¡>°FÑ#:Ñ;Ô;Ð;r   c                 ó,   — |                       |¦  «        S r    )r   r   s     r   Úprepare_defaultz$DatabaseSchemaEditor.prepare_defaultÈ   s   € Ø×Ò Ñ&Ô&Ð&r   c                 óÈ   •— t          ¦   «                              ||¦  «        }|                     | j        ¦  «        }|�"|                     ¦   «         | j        j        v rdS |S )NF)r&   Ú_field_should_be_indexedrN   r/   ÚlowerÚ_limited_data_types)r   r(   r)   Úcreate_indexrN   r*   s        €r   rp   z-DatabaseSchemaEditor._field_should_be_indexedË   sX   ø€ Ý‘w”w×7Ò7¸¸uÑEÔEˆØ—-’- ¤Ñ0Ô0ˆàÐØ—’‘” 4¤?Ô#FÐFÐFà�5ØÐr   c                 ó,  — |sdS | j                              ¦   «         5 }|                     d|                      |¦  «        |                      |¦  «        g¦  «         |                     ¦   «         }|r|d         ndcd d d ¦  «         S # 1 swxY w Y   d S )NFzä
                SELECT
                    CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END
                FROM user_tab_cols
                WHERE table_name = %s AND
                      column_name = %s
                r   ©r/   Úcursorr.   rg   Úfetchone)r   Ú
table_nameÚcolumn_namerv   Úrows        r   r!   z(DatabaseSchemaEditor._is_identity_columnÕ   sæ   € Øð 	Ø�5ØŒ_×#Ò#Ñ%Ô%ð 	,¨Ø�NŠNðð ×$Ò$ ZÑ0Ô0°$×2EÒ2EÀkÑ2RÔ2RÐSñ	ô 	ð 	ð —/’/Ñ#Ô#ˆCØ Ð+�3�q”6�6 eð	,ð 	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s   žAB	Â	BÂBc                 óˆ   — |                       d|                      |¦  «        |                      |¦  «        dœz  ¦  «         d S )Nz5ALTER TABLE %(table)s MODIFY %(column)s DROP IDENTITY)Útabler$   )r.   rM   )r   rx   ry   s      r   r%   z#DatabaseSchemaEditor._drop_identityæ   sR   € Ø�ŠØCàŸš¨Ñ4Ô4ØŸ/š/¨+Ñ6Ô6ðð ññ	
ô 	
ð 	
ð 	
ð 	
r   c                 óð   — | j                              ¦   «         5 }|                     d|                      |¦  «        g¦  «         |                     ¦   «         d         cd d d ¦  «         S # 1 swxY w Y   d S )Nza
                SELECT default_collation FROM user_tables WHERE table_name = %s
                r   ru   )r   rx   rv   s      r   Ú_get_default_collationz+DatabaseSchemaEditor._get_default_collationï   s¼   € ØŒ_×#Ò#Ñ%Ô%ð 	(¨Ø�NŠNðð ×$Ò$ ZÑ0Ô0Ð1ñ	ô ð ð —?’?Ñ$Ô$ QÔ'ð	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   šAA+Á+A/Á2A/Nc                 ó|   •— |€|�|                       |¦  «        }t          ¦   «                              |||¦  «        S r    )r~   r&   Ú_collate_sql)r   Ú	collationr^   rx   r*   s       €r   r€   z!DatabaseSchemaEditor._collate_sqlù   s=   ø€ ØÐ Ð!:Ø×3Ò3°JÑ?Ô?ˆIÝ‰wŒw×#Ò# I¨}¸jÑIÔIÐIr   )F)NN)Ú__name__Ú
__module__Ú__qualname__Úsql_create_columnÚsql_alter_column_typeÚsql_alter_column_nullÚsql_alter_column_not_nullÚsql_alter_column_defaultÚsql_alter_column_no_defaultÚ sql_alter_column_no_default_nullÚsql_delete_columnÚsql_create_column_inline_fkÚsql_delete_tableÚsql_create_indexr   r'   r-   r4   r5   r]   rg   rK   rn   rp   r!   r%   r~   r€   Ú__classcell__)r*   s   @r   r   r      s˜  ø€ € € € € ØMÐØEÐØ4ÐØ <ÐØFÐØ"BÐØ'BÐ$àFÐàRð  ð BÐØRÐðð ð ð+ð +ð +ð +ð +ð
ð 
ð 
ð 
ð 
ð.ð ð ð ð ð ð<Að Að Að Að AðF
ð 
ð 
ð 
ð 
ðð ð ð<ð <ð <ð
'ð 'ð 'ðð ð ð ð ð,ð ,ð ,ð"
ð 
ð 
ð(ð (ð (ðJð Jð Jð Jð Jð Jð Jð Jð Jð Jr   r   )rG   r   rO   Ú	django.dbr   Údjango.db.backends.base.schemar   r   Údjango.utils.durationr   r   © r   r   ú<module>r•      s·   ðØ €€€Ø €€€Ø 	€	€	€	à #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5ðoJð oJð oJð oJð oJÐ3ñ oJô oJð oJð oJð oJr   