
    Hwg%                     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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$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    V/var/www/horilla/myenv/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
t        |   S y| j                   j                  dk\  r
t        |   S y)N)
         )   r      zCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)s)r   r   mysql_versionsupersql_rename_column)r   	__class__s    r   r   z&DatabaseSchemaEditor.sql_rename_column.   sW     ??++,,
:w00 U __**i77,,Tr   c                 f   | j                   j                          t        |t              r|j	                  dd      }| j                   j                   j                  || j                   j                   j                        }t        |t              r t        |t              r|j                         }|S )N%z%%)	r   ensure_connection
isinstancestrreplaceescapeencodersbytesdecode)r   valuequoteds      r   quote_valuez DatabaseSchemaEditor.quote_value9   s    ))+eS!MM#t,E++224??--66
 eS!j&?]]_Fr   c                     |j                  | j                        }|d uxr& |j                         | j                  j                  v S N)db_typer   lower_limited_data_types)r   fieldr+   s      r   _is_limited_data_typez*DatabaseSchemaEditor._is_limited_data_typeE   s?    --04 G4??#F#FF	
r   c                 >    | j                   s| j                  |      S y)NF)$_supports_limited_data_type_defaultsr/   r   r.   s     r   skip_defaultz!DatabaseSchemaEditor.skip_defaultL   s    88--e44r   c                 T    | j                  |      r| j                  j                  syy)NTF)r/   r   r   r2   s     r   skip_default_on_alterz*DatabaseSchemaEditor.skip_default_on_alterQ   s$    %%e,T__5U5U r   c                 b    | j                   j                  ry| j                   j                  dk\  S )NT)r   r      )r   r   r   r   s    r   r1   z9DatabaseSchemaEditor._supports_limited_data_type_defaultsX   s)     ??++,,
::r   c                     | j                   j                  s| j                  r| j                  |      ryt        |   |      S )Nz(%s))r   r   r1   r/   r   _column_default_sql)r   r.   r   s     r   r9   z(DatabaseSchemaEditor._column_default_sql_   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_fieldr3   defaultr   effective_defaultexecute
quote_name_metadb_tabler<   )r   modelr.   r?   r   s       r   r=   zDatabaseSchemaEditor.add_fieldj   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_indexrG   rH   r   remove_constraint)r   rD   
constraintr   s      r   rK   z&DatabaseSchemaEditor.remove_constraintz   sZ    z#34%%eT2>))!((&22 * 
 	!%4r   c           	          | j                  ||j                  D cg c]  \  }}|	 c}}|j                         t        |   ||       y c c}}w rF   )rJ   fields_ordersrH   r   remove_index)r   rD   index
field_name_r   s        r   rO   z!DatabaseSchemaEditor.remove_index   sQ    %%494G4GH=:qJ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cursorrB   rC   get_internal_typedb_constraintr/   )r   rD   r.   storager   s       r   rV   z-DatabaseSchemaEditor._field_should_be_indexed   s    w/u=////BBOO""$ekk&:&:
 x'')\9##--e444r   )rH   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   rU   rP   columns    )rG   suffix)r   featuressupports_expression_indexesr   r   r   namerB   	get_fieldrZ   rW   identifier_converterr<   rY   get_constraintsrC   itemslenr@   _create_index_sql)r   rD   rG   rH   first_field_namefirst_fieldr<   rY   rd   infodictconstraint_namess              r   rJ   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)rG   )rJ   r   _delete_composed_index)r   rD   rG   argsr   s       r   rp   z+DatabaseSchemaEditor._delete_composed_index   s-    %%eF%;w-eVCdCCr   c                 6    |j                   r|dz  }|S |dz  }|S )zt
        Keep the null property of the old field. If it has changed, it will be
        handled separately.
        z NULLz	 NOT NULL)null)r   r.   new_types      r   _set_field_new_type_null_statusz4DatabaseSchemaEditor._set_field_new_type_null_status   s-    
 ::H  #Hr   c                 P    | j                  ||      }t        | 	  ||||||      S r*   )ru   r   _alter_column_type_sql)r   rD   	old_field	new_fieldrt   old_collationnew_collationr   s          r   rw   z+DatabaseSchemaEditor._alter_column_type_sql   s6     77	8Lw-9i=-
 	
r   c                 L    | j                  ||      }t        | 	  ||||      S r*   )ru   r   _rename_field_sql)r   r;   rx   ry   rt   r   s        r   r}   z&DatabaseSchemaEditor._rename_field_sql   s+    77	8Lw(	9hOOr   c                 
    dg fS )Nr`    )r   rD   ry   rt   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   )(__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   r5   r1   r9   r=   rK   rO   rV   rJ   rp   ru   rw   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#; ; U U


 ; ;	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m)3 m)r   