
    g+                     F    d dl mZ d dlmZmZmZ d dlmZ  G d de      Zy)    )BaseDatabaseSchemaEditor)NOT_PROVIDEDFUniqueConstraint)
LOOKUP_SEPc                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZed        Ze fd       Zd Zd Zd Zd Zd Zed        Z fdZ fdZ fdZ fdZ fdZ dddZ! fd Z"d! Z# fd"Z$ fd#Z% fd$Z&d% Z' fd&Z( fd'Z) xZ*S )(DatabaseSchemaEditorz+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                 2    | j                   j                  ryy)Nz8ALTER TABLE %(table)s DROP CONSTRAINT IF EXISTS %(name)sz)ALTER TABLE %(table)s DROP CHECK %(name)s)
connectionmysql_is_mariadbselfs    w/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/backends/mysql/schema.pysql_delete_checkz%DatabaseSchemaEditor.sql_delete_check%   s    ??++ N:    c                 |    | j                   j                  }|r| j                   j                  dk  ryt        |   S )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   z&DatabaseSchemaEditor.sql_rename_column.   s7    __55
$//77*D Yw((r   c                 "   | j                   j                          | j                   j                   j                  || j                   j                   j                        }t	        |t
              r t	        |t              r|j                         }|S N)r   ensure_connectionescapeencoders
isinstancestrbytesdecode)r   valuequoteds      r   quote_valuez DatabaseSchemaEditor.quote_value7   sf    ))+++224??--66
 eS!j&?]]_Fr   c                     |j                  | j                        }|d uxr& |j                         | j                  j                  v S r   )db_typer   lower_limited_data_typesr   fieldr)   s      r   _is_limited_data_typez*DatabaseSchemaEditor._is_limited_data_typeA   s?    --04 G4??#F#FF	
r   c                 ~    |j                  | j                        }|xr |j                         j                  d      S )N)blobtext)r)   r   r*   endswithr,   s      r   _is_text_or_blobz%DatabaseSchemaEditor._is_text_or_blobH   s1    --0E7==?334DEEr   c                     | j                  |      dv }|r| j                  |      ry| j                  s| j                  |      S yN) r   TF)effective_defaultr3   $_supports_limited_data_type_defaultsr.   r   r-   default_is_emptys      r   skip_defaultz!DatabaseSchemaEditor.skip_defaultL   sH    11%8IE 5 5e <88--e44r   c                     | j                  |      dv }|r| j                  |      ry| j                  |      r| j                  j                  syyr5   )r7   r3   r.   r   r   r9   s      r   skip_default_on_alterz*DatabaseSchemaEditor.skip_default_on_alterT   sM    11%8IE 5 5e <%%e,T__5U5U r   c                 b    | j                   j                  ry| j                   j                  dk\  S )NT)   r      )r   r   r   r   s    r   r8   z9DatabaseSchemaEditor._supports_limited_data_type_defaults^   s)     ??++,,
::r   c                     | j                   j                  s| j                  r| j                  |      ryt        |   |      S )Nz(%s))r   r   r8   r.   r   _column_default_sql)r   r-   r   s     r   rB   z(DatabaseSchemaEditor._column_default_sqle   s<    0099**51 w*511r   c                 @   t         |   ||       | j                  |      r||j                  d t        fvrg| j                  |      }| j                  d| j                  |j                  j                        | j                  |j                        dz  |g       y y y )Nz%UPDATE %(table)s SET %(column)s = %%s)tablecolumn)r   	add_fieldr;   defaultr   r7   execute
quote_name_metadb_tablerE   )r   modelr-   r7   r   s       r   rF   zDatabaseSchemaEditor.add_fieldp   s    %' U#dL=Q(Q $ 6 6u =LL7!__U[[-A-AB"ooell;
 ## )R#r   c                     t        |t              r:|j                  ||       (| j                  ||j                  |j
                         t        |   ||       y N)fieldsexpressions)r!   r   
create_sql_create_missing_fk_indexrO   rP   r   remove_constraint)r   rL   
constraintr   s      r   rS   z&DatabaseSchemaEditor.remove_constraint   sZ    z#34%%eT2>))!((&22 * 
 	!%4r   c           	          | j                  ||j                  D cg c]  \  }}|	 c}}|j                         t        |   ||       y c c}}w rN   )rR   fields_ordersrP   r   remove_index)r   rL   index
field_name_r   s        r   rW   z!DatabaseSchemaEditor.remove_index   sW    %%494G4GH4G=:qJ4GH)) 	& 	

 	UE* Is   Ac                 8   t         |   ||      sy| j                  j                  j	                  | j                  j                         |j                  j                        }|dk(  r |j                         dk(  r|j                  ry| j                  |       S )NFInnoDB
ForeignKey)r   _field_should_be_indexedr   introspectionget_storage_enginecursorrJ   rK   get_internal_typedb_constraintr.   )r   rL   r-   storager   s       r   r^   z-DatabaseSchemaEditor._field_should_be_indexed   s    w/u=////BBOO""$ekk&:&:
 x'')\9##--e444r   )rP   c                0   d}|r|d   }nY|rW| j                   j                  j                  r7t        |d   t              r$t
        |d   j                  vr|d   j                  }|sy|j                  j                  |      }|j                         dk(  r| j                   j                  j                  |j                        }| j                   j                         5 }| j                   j                  j                  ||j                  j                        j!                         D 	cg c]  \  }}	|	d   r|	d   d   |k(  r| }
}}	ddd       t#        
      dk(  r%| j%                  | j'                  ||gd             yyyc c}	}w # 1 sw Y   DxY w)	a  
        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   r]   rX   columns   r6   )rO   suffix)r   featuressupports_expression_indexesr!   r   r   namerJ   	get_fieldrb   r_   identifier_converterrE   ra   get_constraintsrK   itemslenrH   _create_index_sql)r   rL   rO   rP   first_field_namefirst_fieldrE   ra   rk   infodictconstraint_namess              r   rR   z-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+$+h  (Xi-@-Cv-M	 + ! $ * #$)**5+r*R * ;
$ *)s   AF*FFFFc                 L    | j                  ||       t        |   ||g| S )N)rO   )rR   r   _delete_composed_index)r   rL   rO   argsr   s       r   rw   z+DatabaseSchemaEditor._delete_composed_index   s-    %%eF%;w-eVCdCCr   c                      |j                   t        ur3 j                  |      \  }}|t         fd|D              z  }|d| z  }|j                  r|dz  }|S |dz  }|S )z
        Keep the NULL and DEFAULT properties of the old field. If it has
        changed, it will be handled separately.
        c              3   @   K   | ]  }j                  |        y wr   )r'   ).0pr   s     r   	<genexpr>z;DatabaseSchemaEditor._set_field_new_type.<locals>.<genexpr>   s      Ef!1!1!!4fs   z	 DEFAULT z NULLz	 NOT NULL)
db_defaultr   db_default_sqltuplenull)r   r-   new_typedefault_sqlparamss   `    r   _set_field_new_typez(DatabaseSchemaEditor._set_field_new_type   sw    
 </"&"5"5e"<K5 Ef EEEK)K=11H::H  #Hr   c                 P    | j                  ||      }t        | 	  ||||||      S r   )r   r   _alter_column_type_sql)r   rL   	old_field	new_fieldr   old_collationnew_collationr   s          r   r   z+DatabaseSchemaEditor._alter_column_type_sql   s6     ++Ix@w-9i=-
 	
r   c                     | j                   j                  r)| j                   j                  dk\  rt        |   ||      S |d   S )Nr   check)r   r   r   r   _field_db_check)r   r-   field_db_paramsr   s      r   r   z$DatabaseSchemaEditor._field_db_check   sH    ??++0M0M R
 1

 7*5/BB
 w''r   c                 L    | j                  ||      }t        | 	  ||||      S r   )r   r   _rename_field_sql)r   rD   r   r   r   r   s        r   r   z&DatabaseSchemaEditor._rename_field_sql   s+    ++Ix@w(	9hOOr   c                 
    dg fS )Nr6    )r   rL   r   r   new_db_comments        r   _alter_column_comment_sqlz.DatabaseSchemaEditor._alter_column_comment_sql  s    2vr   c                 ,    t         |   |      }d| S )Nz	 COMMENT )r   _comment_sql)r   commentcomment_sqlr   s      r   r   z!DatabaseSchemaEditor._comment_sql  s    g*73;-((r   c                     |j                   t        u rt        |   |||      S |j	                  | j
                        }| j                  ||d         }d| j                  |j                        |dz  g fS )N)r   typezMODIFY %(column)s %(type)s)rE   r   )	r~   r   r   _alter_column_null_sqldb_parametersr   r   rI   rE   )r   rL   r   r   new_db_paramstype_sqlr   s         r   r   z+DatabaseSchemaEditor._alter_column_null_sql  s    </71%INN!//4??/K++I}V7LM(//)*:*:; 
 
 	
r   )+__name__
__module____qualname__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'   r.   r3   r;   r=   r8   rB   rF   rS   rW   r^   rR   rw   r   r   r   r   r   r   r   __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   