
    h+                     F    S SK Jr  S SKJrJrJr  S SKJr   " S S\5      rg)    )BaseDatabaseSchemaEditor)NOT_PROVIDEDFUniqueConstraint)
LOOKUP_SEPc                   N  ^  \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSr\S 5       r\U 4S j5       rS rS rS rS rS r\S 5       rU 4S jrU 4S jrU 4S jrU 4S jr U 4S jr!SS.S  jr"U 4S! jr#S" r$U 4S# jr%U 4S$ jr&U 4S% jr'S& r(U 4S' jr)U 4S( jr*S)r+U =r,$ )*DatabaseSchemaEditor   z+RENAME TABLE %(old_table)s TO %(new_table)szMODIFY %(column)s %(type)s NULLz#MODIFY %(column)s %(type)s NOT NULLz2MODIFY %(column)s %(type)s%(collation)s%(comment)sz(ALTER COLUMN %(column)s SET DEFAULT NULLz,ALTER TABLE %(table)s DROP COLUMN %(column)sz)ALTER TABLE %(table)s DROP INDEX %(name)szY, ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) REFERENCES %(to_table)s(%(to_column)s)z/ALTER TABLE %(table)s DROP FOREIGN KEY %(name)sz DROP INDEX %(name)s ON %(table)sz?ALTER TABLE %(table)s RENAME INDEX %(old_name)s TO %(new_name)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)z&ALTER TABLE %(table)s DROP PRIMARY KEYz9CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)sz+ALTER TABLE %(table)s COMMENT = %(comment)sNc                 <    U R                   R                  (       a  gg)Nz8ALTER TABLE %(table)s DROP CONSTRAINT IF EXISTS %(name)sz)ALTER TABLE %(table)s DROP CHECK %(name)s)
connectionmysql_is_mariadbselfs    Q/var/www/html/env/lib/python3.13/site-packages/django/db/backends/mysql/schema.pysql_delete_check%DatabaseSchemaEditor.sql_delete_check%   s    ??++ N:    c                    > U R                   R                  nU(       a  U R                   R                  S:  a  g[        TU ]  $ )N
         zCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)s)r   r   mysql_versionsupersql_rename_column)r   
is_mariadb	__class__s     r   r   &DatabaseSchemaEditor.sql_rename_column.   s7    __55
$//77*D Yw((r   c                 4   U R                   R                  5         U R                   R                   R                  XR                   R                   R                  5      n[	        U[
        5      (       a%  [	        U[        5      (       a  UR                  5       nU$ N)r   ensure_connectionescapeencoders
isinstancestrbytesdecode)r   valuequoteds      r   quote_value DatabaseSchemaEditor.quote_value7   sj    ))+++22??--66
 eS!!j&?&?]]_Fr   c                     UR                  U R                  5      nUS L=(       a'    UR                  5       U R                  R                  ;   $ r    )db_typer   lower_limited_data_typesr   fieldr-   s      r   _is_limited_data_type*DatabaseSchemaEditor._is_limited_data_typeA   s?    --04 G4??#F#FF	
r   c                     UR                  U R                  5      nU=(       a    UR                  5       R                  S5      $ )N)blobtext)r-   r   r.   endswithr0   s      r   _is_text_or_blob%DatabaseSchemaEditor._is_text_or_blobH   s1    --0E7==?334DEEr   c                     U R                  U5      S;   nU(       a  U R                  U5      (       a  gU R                  (       d  U R                  U5      $ gN) r   TF)effective_defaultr8   $_supports_limited_data_type_defaultsr2   r   r1   default_is_emptys      r   skip_default!DatabaseSchemaEditor.skip_defaultL   sK    11%8IE 5 5e < <88--e44r   c                     U R                  U5      S;   nU(       a  U R                  U5      (       a  gU R                  U5      (       a  U R                  R                  (       d  ggr;   )r=   r8   r2   r   r   r?   s      r   skip_default_on_alter*DatabaseSchemaEditor.skip_default_on_alterT   sS    11%8IE 5 5e < <%%e,,T__5U5U r   c                 l    U R                   R                  (       a  gU R                   R                  S:  $ )NT)   r      )r   r   r   r   s    r   r>   9DatabaseSchemaEditor._supports_limited_data_type_defaults^   s)     ??++,,
::r   c                    > U R                   R                  (       d(  U R                  (       a  U R                  U5      (       a  g[        TU ]  U5      $ )Nz(%s))r   r   r>   r2   r   _column_default_sql)r   r1   r   s     r   rK   (DatabaseSchemaEditor._column_default_sqle   s?    0099**511 w*511r   c                 L  > [         TU ]  X5        U R                  U5      (       a~  UR                  S [        4;  ag  U R                  U5      nU R                  SU R                  UR                  R                  5      U R                  UR                  5      S.-  U/5        g g g )Nz%UPDATE %(table)s SET %(column)s = %%s)tablecolumn)r   	add_fieldrA   defaultr   r=   execute
quote_name_metadb_tablerO   )r   modelr1   r=   r   s       r   rP   DatabaseSchemaEditor.add_fieldp   s    %' U##dL=Q(Q $ 6 6u =LL7!__U[[-A-AB"ooell;
 ## )R#r   c                    > [        U[        5      (       a7  UR                  X5      b%  U R                  UUR                  UR
                  S9  [        TU ]  X5        g N)fieldsexpressions)r$   r   
create_sql_create_missing_fk_indexrZ   r[   r   remove_constraint)r   rV   
constraintr   s      r   r^   &DatabaseSchemaEditor.remove_constraint   sY    z#344%%e2>))!((&22 * 
 	!%4r   c           	         > U R                  UUR                   VVs/ s H  u  p4UPM	     snnUR                  S9  [        TU ]  X5        g s  snnf rY   )r]   fields_ordersr[   r   remove_index)r   rV   index
field_name_r   s        r   rc   !DatabaseSchemaEditor.remove_index   sS    %%494G4GH4G=:J4GH)) 	& 	

 	U* Is   Ac                 V  > [         TU ]  X5      (       d  gU R                  R                  R	                  U R                  R                  5       UR                  R                  5      nUS:X  a&  UR                  5       S:X  a  UR                  (       a  gU R                  U5      (       + $ )NFInnoDB
ForeignKey)r   _field_should_be_indexedr   introspectionget_storage_enginecursorrT   rU   get_internal_typedb_constraintr2   )r   rV   r1   storager   s       r   rk   -DatabaseSchemaEditor._field_should_be_indexed   s    w/==////BBOO""$ekk&:&:
 x'')\9##--e444r   )r[   c                   SnU(       a  US   nOjU(       ac  U R                   R                  R                  (       a>  [        US   [        5      (       a&  [
        US   R                  ;  a  US   R                  nU(       d  gUR                  R                  U5      nUR                  5       S:X  a  U R                   R                  R                  UR                  5      nU R                   R                  5        nU R                   R                  R                  XqR                  R                  5      R!                  5        VV	s/ s H!  u  pU	S   (       d  M  U	S   S   U:X  d  M  UPM#     n
nn	SSS5        [#        W
5      S:X  a!  U R%                  U R'                  X/SS95        gggs  sn	nf ! , (       d  f       NF= f)	aR  
MySQL can remove an implicit FK index on a field when that field is
covered by another index like a unique_together. "covered" here means
that the more complex index has the FK field as its first field (see
https://bugs.mysql.com/bug.php?id=37910).

Manually create an implicit FK index to make it possible to remove the
composed index.
Nr   rj   rd   columns   r<   )rZ   suffix)r   featuressupports_expression_indexesr$   r   r   namerT   	get_fieldro   rl   identifier_converterrO   rn   get_constraintsrU   itemslenrR   _create_index_sql)r   rV   rZ   r[   first_field_namefirst_fieldrO   rn   ry   infodictconstraint_namess              r   r]   -DatabaseSchemaEditor._create_missing_fk_index   s      %ay((DD;q>1--+a."5"55*1~22kk++,<=((*l:__22GG""F '')V +///*G*G*W*W 4 4+eg+$+  (	  .6i-@-Cv-M	 + ! $ * #$)**5r*R * ;
$ *)s+   :AF0F*
F*'F*-F0*F00
F>c                 D   > U R                  XS9  [        TU ]  " X/UQ76 $ )N)rZ   )r]   r   _delete_composed_index)r   rV   rZ   argsr   s       r   r   +DatabaseSchemaEditor._delete_composed_index   s)    %%e%;w-eCdCCr   c                    ^  UR                   [        La3  T R                  U5      u  p4U[        U 4S jU 5       5      -  nUSU 3-  nUR                  (       a  US-  nU$ US-  nU$ )zj
Keep the NULL and DEFAULT properties of the old field. If it has
changed, it will be handled separately.
c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr    )r*   ).0pr   s     r   	<genexpr>;DatabaseSchemaEditor._set_field_new_type.<locals>.<genexpr>   s      Ef!1!1!!4!4fs   !z	 DEFAULT z NULLz	 NOT NULL)
db_defaultr   db_default_sqltuplenull)r   r1   new_typedefault_sqlparamss   `    r   _set_field_new_type(DatabaseSchemaEditor._set_field_new_type   su    
 </"&"5"5e"<K5 Ef EEEK)K=11H::H  #Hr   c                 H   > U R                  X$5      n[        TU ]	  XX4XV5      $ r    )r   r   _alter_column_type_sql)r   rV   	old_field	new_fieldr   old_collationnew_collationr   s          r   r   +DatabaseSchemaEditor._alter_column_type_sql   s.     ++I@w-i=
 	
r   c                    > U R                   R                  (       a)  U R                   R                  S:  a  [        TU ]  X5      $ US   $ )Nr   check)r   r   r   r   _field_db_check)r   r1   field_db_paramsr   s      r   r   $DatabaseSchemaEditor._field_db_check   sF    ??++0M0M R
 1

 7*5BB
 w''r   c                 F   > U R                  X$5      n[        TU ]	  XX45      $ r    )r   r   _rename_field_sql)r   rN   r   r   r   r   s        r   r   &DatabaseSchemaEditor._rename_field_sql   s%    ++I@w(9OOr   c                 
    S/ 4$ )Nr<    )r   rV   r   r   new_db_comments        r   _alter_column_comment_sql.DatabaseSchemaEditor._alter_column_comment_sql  s    2vr   c                 ,   > [         TU ]  U5      nSU 3$ )Nz	 COMMENT )r   _comment_sql)r   commentcomment_sqlr   s      r   r   !DatabaseSchemaEditor._comment_sql  s    g*73;-((r   c                    > UR                   [        L a  [        TU ]  XU5      $ UR	                  U R
                  S9nU R                  X4S   5      nSU R                  UR                  5      US.-  / 4$ )N)r   typezMODIFY %(column)s %(type)s)rO   r   )	r   r   r   _alter_column_null_sqldb_parametersr   r   rS   rO   )r   rV   r   r   new_db_paramstype_sqlr   s         r   r   +DatabaseSchemaEditor._alter_column_null_sql  s    </71%INN!//4??/K++IV7LM(//)*:*:; 
 
 	
r   r   )-__name__
__module____qualname____firstlineno__sql_rename_tablesql_alter_column_nullsql_alter_column_not_nullsql_alter_column_type sql_alter_column_no_default_nullsql_delete_columnsql_delete_uniquesql_create_column_inline_fksql_delete_fksql_delete_indexsql_rename_indexsql_create_pksql_delete_pksql_create_indexsql_alter_table_commentsql_alter_column_commentpropertyr   r   r*   r2   r8   rA   rD   r>   rK   rP   r^   rc   rk   r]   r   r   r   r   r   r   r   r   __static_attributes____classcell__)r   s   @r   r	   r	      s   D= EP'Q$ GC	1   FM9X 	R  =MRK#; ; ) )
F ; ;	2 
5+5. 0dD
(P)
 
r   r	   N)	django.db.backends.base.schemar   django.db.modelsr   r   r   django.db.models.constantsr   r	   r   r   r   <module>r      s     C > > 1S
3 S
r   