
     h                     :    d dl mZ d dlmZ  G d de          ZdS )    )BaseDatabaseSchemaEditor)NOT_PROVIDEDc                        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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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 NULLzMODIFY %(column)s %(type)sz'MODIFY %(column)s %(type)s%(collation)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)sc                 "    | j         j        rdS dS )Nz8ALTER TABLE %(table)s DROP CONSTRAINT IF EXISTS %(name)sz)ALTER TABLE %(table)s DROP CHECK %(name)s)
connectionmysql_is_mariadbselfs    [/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/django/db/backends/mysql/schema.pysql_delete_checkz%DatabaseSchemaEditor.sql_delete_check#   s    ?+ 	N NM::    c                     | j         j        r$| j         j        dk    rt                      j        S n#| j         j        dk    rt                      j        S dS )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     ?+ 	-,
::ww00 ;_*i7777,,TTr   c                 h   | j                                          t          |t                    r|                    dd          }| j         j                             || j         j         j                  }t          |t                    r)t          |t                    r|                                }|S )N%z%%)	r   ensure_connection
isinstancestrreplaceescapeencodersbytesdecode)r   valuequoteds      r   quote_valuez DatabaseSchemaEditor.quote_value7   s    ))+++eS!! 	-MM#t,,E+224?-6
 
 eS!! 	%j&?&? 	%]]__Fr   c                 ~    |                     | j                  }|d uo|                                | j        j        v S N)db_typer   lower_limited_data_types)r   fieldr(   s      r   _is_limited_data_typez*DatabaseSchemaEditor._is_limited_data_typeC   s=    --004 G4?#FF	
r   c                 >    | j         s|                     |          S dS )NF)$_supports_limited_data_type_defaultsr,   r   r+   s     r   skip_defaultz!DatabaseSchemaEditor.skip_defaultJ   s&    8 	5--e444ur   c                 L    |                      |          r| j        j        sdS dS )NTF)r,   r   r	   r/   s     r   skip_default_on_alterz*DatabaseSchemaEditor.skip_default_on_alterO   s0    %%e,, 	T_5U 	 4ur   c                 >    | j         j        rdS | j         j        dk    S )NT)r   r      )r   r	   r   r
   s    r   r.   z9DatabaseSchemaEditor._supports_limited_data_type_defaultsV   s&     ?+ 	4,
::r   c                     | j         j        s| j        r|                     |          rdS t	                                          |          S )Nz(%s))r   r	   r.   r,   r   _column_default_sql)r   r+   r   s     r   r6   z(DatabaseSchemaEditor._column_default_sql]   sR    0	9	 **511	 6ww**5111r   c                 l   t                                          ||           |                     |          ry|j        d t          fvrk|                     |          }|                     d|                     |j        j	                  |                     |j
                  dz  |g           d S d S d S )Nz%UPDATE %(table)s SET %(column)s = %%s)tablecolumn)r   	add_fieldr0   defaultr   effective_defaultexecute
quote_name_metadb_tabler9   )r   modelr+   r<   r   s       r   r:   zDatabaseSchemaEditor.add_fieldh   s    %''' U## 		dL=Q(Q(Q $ 6 6u = =LL7!__U[-ABB"ooel;; 
 ##    		 		(Q(Qr   c                 H   t                                          ||          sdS | j        j                            | j                                        |j        j                  }|dk    r!|                                dk    r	|j	        rdS | 
                    |           S )NFInnoDB
ForeignKey)r   _field_should_be_indexedr   introspectionget_storage_enginecursorr?   r@   get_internal_typedb_constraintr,   )r   rA   r+   storager   s       r   rE   z-DatabaseSchemaEditor._field_should_be_indexedx   s    ww//u== 	5//BBO""$$ek&:
 
 x''))\99# : 5--e4444r   c                 B   |j                             |d                   }|                                dk    rL|                     ||j        gd          }|s,|                     |                     ||gd                      t                      j        ||g|R  S )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 starts like the simpler one.
        https://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757
        We check here before removing the [unique|index]_together if we have to
        recreate a FK index.
        r   rD   T)index )fieldssuffix)	r?   	get_fieldrI   _constraint_namesr9   r=   _create_index_sqlr   _delete_composed_index)r   rA   rO   argsfirst_fieldconstraint_namesr   s         r   rT   z+DatabaseSchemaEditor._delete_composed_index   s     k++F1I66((**l::#55*+4  6     $ **5+r*RR   .uww-eVCdCCCCr   c                 *    |j         r|dz  }n|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)    
 : 	$HH#Hr   c                 x    |                      ||          }t                                          ||||          S r'   )r[   r   _alter_column_type_sql)r   rA   	old_field	new_fieldrZ   r   s        r   r]   z+DatabaseSchemaEditor._alter_column_type_sql   s6    77	8LLww--eY	8TTTr   c                 x    |                      ||          }t                                          ||||          S r'   )r[   r   _rename_field_sql)r   r8   r^   r_   rZ   r   s        r   ra   z&DatabaseSchemaEditor._rename_field_sql   s6    77	8LLww((	9hOOOr   )"__name__
__module____qualname__sql_rename_tablesql_alter_column_nullsql_alter_column_not_nullsql_alter_column_typesql_alter_column_collate 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propertyr   r   r%   r,   r0   r2   r.   r6   r:   rE   rT   r[   r]   ra   __classcell__)r   s   @r   r   r      s       D= E8H'Q$ GC	1   FM9X 	R  =MR; ; X; U U U U XU
 
 

 
 
  
   ; ; X;	2 	2 	2 	2 	2     5 5 5 5 5$D D D D D(	 	 	U U U U UP P P P P P P P Pr   r   N)django.db.backends.base.schemar   django.db.modelsr   r    r   r   <module>ry      sr    C C C C C C ) ) ) ) ) )jP jP jP jP jP3 jP jP jP jP jPr   