
    h)                     Z    S SK r S SKrS SKrS SKJr  S SKJrJr  S SKJ	r	   " S S\5      r
g)    N)DatabaseError)BaseDatabaseSchemaEditor_related_non_m2m_objects)duration_iso_stringc                      ^  \ rS rSrSrSrSrSrSrSr	\	r
SrS	rS
rSrS rU 4S jrU 4S jrSU 4S jjrU 4S jrU 4S jrS rS rS rU 4S jrS rS rS rSU 4S jjrSrU =r$ )DatabaseSchemaEditor   z3ALTER 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                    [        U[        R                  [        R                  [        R                  45      (       a  SU-  $ [        U[        R                  5      (       a  S[        U5      -  $ [        U[        5      (       a  SUR                  SS5      -  $ [        U[        [        [        45      (       a  SUR                  5       -  $ [        U[        5      (       a  U(       a  S$ S$ [        U5      $ )Nz'%s''z''10)
isinstancedatetimedatetime	timedeltar   strreplacebytes	bytearray
memoryviewhexboolselfvalues     R/var/www/html/env/lib/python3.13/site-packages/django/db/backends/oracle/schema.pyquote_value DatabaseSchemaEditor.quote_value   s    ehmmX]]H<M<MNOOE>!x1122/666s##EMM#t444y*=>>EIIK''t$$3(S(u:    c                    > U R                  UR                  R                  UR                  5      (       a0  U R	                  UR                  R                  UR                  5        [
        TU ]  X5        g N)_is_identity_column_metadb_tablecolumn_drop_identitysuperremove_field)r   modelfield	__class__s      r   r)   !DatabaseSchemaEditor.remove_field+   sQ     ##EKK$8$8%,,GG 4 4ellCU*r    c                    > [         TU ]  U5        U R                  SSU R                  R                  R                  UR                  R                  5      0-  5        g )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   r0   !DatabaseSchemaEditor.delete_model2   sT    U#
 4??..NNKK((	
r    c                   >  [         TU ]  XX45        g ! [         Ga3  n[        U5      nSU;   d  SU;   a  U R	                  XU5         S nAg SU;   aG  U R                  UR                  R                  UR                  5        U R                  XX45         S nAg SU;   a8  UR                  (       a'  U R                  USS9  U R	                  XU5         S nAg SU;   an  UR                  (       a]  U R                  USS9  U R                  XX45        UR                  (       a%  U R                  U R                  X5      5         S nAg  S nAg e S nAff = f)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_keyr1   _create_primary_key_sql)r   r*   	old_field	new_fieldr7   edescriptionr,   s          r   r8    DatabaseSchemaEditor.alter_fieldI   s+   	G)D 	a&K k)[K-G11%INN +##EKK$8$8):J:JK  9EE +	0E0E((t(<11%INN +	0E0E((t(<  9E((LL!=!=e!OPP ) 3	s.    E)EAE9EA*EEEc                   > [         R                  " U5      nUR                  5       S;  Ul        U R	                  UR
                  5      Ul        U R                  X5        U R                  UR
                  5      nUR                  U R                  5      n[        R                  " SU5      (       a  SU-  nSn[        R                  " SU5      (       a8  UR                  5       nUS:X  a  SU-  nOUS:X  a  S	U-  nOUS
:X  a
  SU-  nS	U-  nU R                  SU R                  UR                  R                  5      < SU R                  UR
                  5      < SU< 35        U R                  X5        [         TU ]E  XU5        UR                  U R                  5      nUR$                  (       a  UR$                  (       d"  UR&                  (       a  UR&                  (       an  Xh:w  ah  [)        XC5       HX  u  pU
R*                  R,                  (       d  M"  U R                  U R/                  U
R0                  U
R*                  S5      5        MZ     gggg)ay  
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_typer2   rematchr1   r$   r%   r)   r(   r8   r:   uniquer   r+   db_constraint_create_fk_sqlrelated_model)r   r*   r=   r>   new_temp_field	new_valueold_typenew_internal_typenew_type_relr,   s              r   r9   1DatabaseSchemaEditor._alter_field_type_workaroundg   s    y1'99; D
 

 !% 8 89I9I Ju- OOI$4$45	$$T__588Ix((%	1I!H88M8,, ) ; ; = K/7)C	"o5JYV	"k17)C	JYV	  4 45 5 56		
 	%+E9= $$T__5""y'<'<  Y%5%5"2>M99***LL++C,=,=syy%P N # &6 r    c                 H  > 1 SknUR                  5       U;   ay  UR                  5       U;  ae  U R                  UR                  R                  UR                  5      (       a0  U R                  UR                  R                  UR                  5        [        TU ]  XX4XV5      $ )N>   rC   rD   rE   )rN   r#   r$   r%   r&   r'   r(   _alter_column_type_sql)	r   r*   r=   r>   r^   old_collationnew_collationauto_field_typesr,   s	           r   rc   +DatabaseSchemaEditor._alter_column_type_sql   s     K '')-==++-5EE(()=)=y?O?OPP 4 4i6F6FGw-i=
 	
r    c                 V    U R                  U5      nUS   S:X  a  US   S:X  a  USS nU$ )zj
Get the properly shortened and uppercased identifier as returned by
quote_name() but without the quotes.
r   "   )rR   )r   namenns      r   normalize_name#DatabaseSchemaEditor.normalize_name   s7    
 __T"a5C<BrFcMAbB	r    c                 z    [        [        U5      5      R                  5       SS nU R                  US-   U-   5      $ )z@Generate temporary names for workarounds that need temp columns.rk   Nr_   )r   hashupperrn   )r   for_namesuffixs      r   rP   (DatabaseSchemaEditor._generate_temp_name   s:    T(^$**,QR0""8c>F#:;;r    c                 $    U R                  U5      $ r"   )r   r   s     r   prepare_default$DatabaseSchemaEditor.prepare_default   s    &&r    c                    > [         TU ]  X5      nUR                  U R                  5      nUb)  UR	                  5       U R                  R
                  ;   a  gU$ )NF)r(   _field_should_be_indexedrS   r2   lower_limited_data_types)r   r*   r+   create_indexrS   r,   s        r   rz   -DatabaseSchemaEditor._field_should_be_indexed   sK    w7E--04??#F#FFr    c                    U R                   R                  5        nUR                  SU R                  U5      U R                  U5      /5        UR	                  5       nU(       a  US   OSsS S S 5        $ ! , (       d  f       g = f)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r2   cursorr1   rn   fetchone)r   
table_namecolumn_namer   rows        r   r#   (DatabaseSchemaEditor._is_identity_column   sj    __##%NN $$Z0$2E2Ek2RS	 //#C 3q6e &%%s   AA55
Bc                 n    U R                  SU R                  U5      U R                  U5      S.-  5        g )Nz5ALTER TABLE %(table)s MODIFY %(column)s DROP IDENTITY)tabler&   )r1   rR   )r   r   r   s      r   r'   #DatabaseSchemaEditor._drop_identity   s3    C4//+6	
r    c                     U R                   R                  5        nUR                  SU R                  U5      /5        UR	                  5       S   sS S S 5        $ ! , (       d  f       g = f)Nza
                SELECT default_collation FROM user_tables WHERE table_name = %s
                r   r   )r   r   r   s      r   _get_default_collation+DatabaseSchemaEditor._get_default_collation   sU    __##%NN $$Z01	 ??$Q' &%%s   5A
A(c                 R   > Uc  Ub  U R                  U5      n[        TU ]	  XU5      $ r"   )r   r(   _collate_sql)r   	collationrd   r   r,   s       r   r   !DatabaseSchemaEditor._collate_sql   s0    !:33J?Iw#IjIIr     )F)NN)__name__
__module____qualname____firstlineno__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)   r0   r8   r9   rc   rn   rP   rw   rz   r#   r'   r   r   __static_attributes____classcell__)r,   s   @r   r   r      s    ME4 <F"B'B$FR   BR+
.<AF
<
',
(J Jr    r   )rL   r   rT   	django.dbr   django.db.backends.base.schemar   r   django.utils.durationr   r   r   r    r   <module>r      s,      	 # 6mJ3 mJr    