Ë
    ¹ûàgÌ)  ã                   óZ   — 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
y)é    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|j                  dd«      z  S t        |t        t        t        f«      rd|j                  «       z  S t        |t        «      r|rdS dS t        |«      S )Nz'%s'ú'z''Ú1Ú0)Ú
isinstanceÚdatetimeÚdateÚtimeÚ	timedeltar   ÚstrÚreplaceÚbytesÚ	bytearrayÚ
memoryviewÚhexÚbool©ÚselfÚvalues     ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/db/backends/oracle/schema.pyÚquote_valuez DatabaseSchemaEditor.quote_value   s¯   € Ü�eœhŸm™m¬X¯]©]¼H×<MÑ<MÐNÔOØ˜E‘>Ð!Ü˜œx×1Ñ1Ô2ØÔ/°Ó6Ñ6Ð6Ü˜œsÔ#Ø˜EŸM™M¨#¨tÓ4Ñ4Ð4Ü˜¤¤y´*Ð=Ô>Ø˜EŸI™I›KÑ'Ð'Ü˜œtÔ$Ù�3Ð( SÐ(ä�u“:Ðó    c                 óæ   •— | j                  |j                  j                  |j                  «      r0| j	                  |j                  j                  |j                  «       t
        ‰| �  ||«       y ©N)Ú_is_identity_columnÚ_metaÚdb_tableÚcolumnÚ_drop_identityÚsuperÚremove_field)r   ÚmodelÚfieldÚ	__class__s      €r   r'   z!DatabaseSchemaEditor.remove_field+   sP   ø€ ð ×#Ñ# E§K¡K×$8Ñ$8¸%¿,¹,ÔGØ×Ñ §¡× 4Ñ 4°e·l±lÔCÜ‰Ñ˜U EÕ*r   c                 ó¾   •— t         ‰| �  |«       | j                  dd| j                  j                  j                  |j                  j                  «      iz  «       y )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   sT   ø€ ä‰Ñ˜UÔ#à�‰ð
ð ˜4Ÿ?™?×.Ñ.×NÑNØ—K‘K×(Ñ(óðñõ	
r   c                 óœ  •— 	 t         ‰| �  ||||«       y # t        $ �r+}t        |«      }d|v sd|v r| j	                  |||«       núd|v rE| j                  |j                  j                  |j                  «       | j                  ||||«       n¬d|v r3|j                  r'| j                  |d¬«       | j	                  |||«       npd|v ra|j                  rU| j                  |d¬«       | j                  ||||«       |j                  r(| j                  | j                  ||«      «       n‚ Y d }~y Y d }~y Y d }~y Y d }~y Y d }~y 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   sG  ø€ ð	Ü‰GÑ  y°)¸VÕDøÜó 	Ü˜a›&ˆKð ˜kÑ)¨[¸KÑ-GØ×1Ñ1°%¸ÀIÕNð  Ñ+Ø×#Ñ# E§K¡K×$8Ñ$8¸)×:JÑ:JÔKØ× Ñ  ¨	°9¸fÕEð  Ñ+°	×0EÒ0EØ×(Ñ(¨°tÐ(Ô<Ø×1Ñ1°%¸ÀIÕNð  Ñ+°	×0EÒ0EØ×(Ñ(¨°tÐ(Ô<Ø× Ñ  ¨	°9¸fÔEà×(Ò(Ø—L‘L ×!=Ñ!=¸eÀYÓ!OÕPàô Qô )ô Oô Fô Oûð	ús   ƒ –
E DEÅEc                 óX  •— t        j                  |«      }|j                  «       dv|_        | j	                  |j
                  «      |_        | j                  ||«       | j                  |j
                  «      }|j                  | j                  «      }t        j                  d|«      rd|z  }d}t        j                  d|«      r5|j                  «       }|dk(  rd|z  }n|dk(  rd	|z  }n|d
k(  r
d|z  }d	|z  }| j                  d| j                  |j                  j                  «      ›d| j                  |j
                  «      ›d|›�«       | j                  ||«       t         ‰| �E  |||«       |j                  | j                  «      }|j$                  r|j$                  s|j&                  ru|j&                  rh||k7  rbt)        ||«      D ]R  \  }	}
|
j*                  j,                  sŒ| j                  | j/                  |
j0                  |
j*                  d«      «       ŒT yyyy)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ˆØ'×9Ñ9Ó;ð D
ð 
ˆÔð
 !%× 8Ñ 8¸×9IÑ9IÓ JˆÔà�‰�u˜nÔ-ð —O‘O I×$4Ñ$4Ó5ˆ	Ø×$Ñ$ T§_¡_Ó5ˆÜ�8‰8�I˜xÔ(Ø%¨	Ñ1ˆIØ!ˆHÜ�8‰8�M 8Ô,Ø )× ;Ñ ;Ó =ÐØ  KÒ/Ø7¸)ÑC‘	Ø" oÒ5ØJÈYÑV‘	Ø" kÒ1à7¸)ÑC�	ØJÈYÑV�	à�Šð —‘ §¡× 4Ñ 4Õ5Ø—‘ × 5Ñ 5Õ6Ùð	ô	
ð 	×Ñ˜% Ô+ä‰Ñ˜E >°9Ô=ð ×$Ñ$ T§_¡_Ó5ˆà×"Ò" y×'<Ò'<Ø× Ò  Y×%5Ò%5Ø˜(Ò"Ü2°>À9ÓMò ‘��3Ø—9‘9×*Ó*Ø—L‘LØ×+Ñ+¨C×,=Ñ,=¸s¿y¹yÈ%ÓPõñð #ð &6Ð r   c                 ó<  •— h d£}|j                  «       |v rr|j                  «       |vr`| j                  |j                  j                  |j                  «      r0| j                  |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Ðð ×'Ñ'Ó)Ð-=Ñ=Ø×+Ñ+Ó-Ð5EÑEØ×(Ñ(¨¯©×)=Ñ)=¸y×?OÑ?OÔPà×Ñ §¡× 4Ñ 4°i×6FÑ6FÔGÜ‰wÑ-Ø�9˜i¨°=À-ó
ð 	
r   c                 óR   — | j                  |«      }|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¹   s7   € ð
 �_‰_˜TÓ"ˆØˆa‰5�CŠ<˜B˜r™F cšMØ�A�b�ˆBØˆ	r   c                 óz   — t        t        |«      «      j                  «       dd }| j                  |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Ã   s:   € ä”T˜(“^Ó$×*Ñ*Ó,¨Q¨RÐ0ˆØ×"Ñ" 8¨c¡>°FÑ#:Ó;Ð;r   c                 ó$   — | j                  |«      S r    )r   r   s     r   Úprepare_defaultz$DatabaseSchemaEditor.prepare_defaultÈ   s   € Ø×Ñ Ó&Ð&r   c                 ó°   •— t         ‰| �  ||«      }|j                  | j                  «      }|�'|j	                  «       | j                  j
                  v ry|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Ë   sM   ø€ Ü‘wÑ7¸¸uÓEˆØ—-‘- §¡Ó0ˆàÐØ—‘“ 4§?¡?×#FÑ#FÑFàØÐr   c                 óø   — | j                   j                  «       5 }|j                  d| j                  |«      | j                  |«      g«       |j	                  «       }|r|d   ndcd d d «       S # 1 sw Y   y xY w)Nzä
                SELECT
                    CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END
                FROM user_tab_cols
                WHERE table_name = %s AND
                      column_name = %s
                r   F©r/   Úcursorr.   rg   Úfetchone)r   Ú
table_nameÚcolumn_namerv   Úrows        r   r!   z(DatabaseSchemaEditor._is_identity_columnÕ   ss   € Ø�_‰_×#Ñ#Ó%ð 	,¨Ø�N‰Nðð ×$Ñ$ ZÓ0°$×2EÑ2EÀkÓ2RÐSô	ð —/‘/Ó#ˆCÙ �3�q’6 e÷	,÷ 	,ò 	,ús   ›AA0Á0A9c                 ón   — | j                  d| j                  |«      | j                  |«      dœz  «       y )Nz5ALTER TABLE %(table)s MODIFY %(column)s DROP IDENTITY)Útabler$   )r.   rM   )r   rx   ry   s      r   r%   z#DatabaseSchemaEditor._drop_identityä   s3   € Ø�‰ØCàŸ™¨Ó4ØŸ/™/¨+Ó6ññõ	
r   c                 óÌ   — | j                   j                  «       5 }|j                  d| j                  |«      g«       |j	                  «       d   cd d d «       S # 1 sw Y   y xY w)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Ð1ô	ð —?‘?Ó$ QÑ'÷	(÷ 	(ò 	(ús   ›5AÁA#c                 óP   •— |€|�| j                  |«      }t        ‰| �	  |||«      S r    )r~   r&   Ú_collate_sql)r   Ú	collationr^   rx   r*   s       €r   r€   z!DatabaseSchemaEditor._collate_sql÷   s2   ø€ ØÐ Ð!:Ø×3Ñ3°JÓ?ˆIÜ‰wÑ# I¨}¸jÓ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ôF
òò<ò
'ôò,ò
ò(÷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ômJÐ3õ mJr   