
    h                     2    d dl mZ d dlmZ  G d de      Zy)    )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ed        Ze f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,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)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                 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    b/var/www/html/ranktracker/api/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
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_value2   s{    ))+eS!MM#t,E++225$//:T:T:]:]^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_type<   s9    --0d"]w}}$//:]:]']]r   c                 >    | j                   s| j                  |      S y)NF)$_supports_limited_data_type_defaultsr,   )r   r+   s     r   skip_defaultz!DatabaseSchemaEditor.skip_default@   s    88--e44r   c                     | j                   j                  r| j                   j                  dk\  S | j                   j                  dk\  S )N)r   r      )r   r      )r   r	   r   r
   s    r   r.   z9DatabaseSchemaEditor._supports_limited_data_type_defaultsE   s;     ??++??00J>>,,
::r   c                     | j                   j                  s| j                  r| j                  |      ryt        |   |      S )Nz(%s))r   r	   r.   r,   r   _column_default_sql)r   r+   r   s     r   r4   z(DatabaseSchemaEditor._column_default_sqlM   s<    0055&&u- 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   effective_defaultexecute
quote_name_metadb_tabler7   )r   modelr+   r:   r   s       r   r8   zDatabaseSchemaEditor.add_fieldX   s    %' U#dL=Q(Q $ 6 6u =LL@)=)=>//%,,7D  ""$ )R#r   c                 B   t         |   ||      }| j                  j                  j	                  | j                  j                         |j                  j                        }|dk(  r"|r |j                         dk(  r|j                  ry| j                  |       xr |S )NInnoDB
ForeignKeyF)r   _field_should_be_indexedr   introspectionget_storage_enginecursorr=   r>   get_internal_typedb_constraintr,   )r   r?   r+   create_indexstorager   s        r   rC   z-DatabaseSchemaEditor._field_should_be_indexedd   s    w7uE////BBOO""$ekk&:&:
 x'')\9##--e44EEr   c                    |j                   j                  |d         }|j                         dk(  rE| j                  ||j                  gd      }|s$| j                  | j                  ||gd             t        |    ||g| 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.
        http://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   rB   T)index )suffix)	r=   	get_fieldrG   _constraint_namesr7   r;   _create_index_sqlr   _delete_composed_index)r   r?   fieldsargsfirst_fieldconstraint_namesr   s         r   rR   z+DatabaseSchemaEditor._delete_composed_indexs   s     kk++F1I6((*l:#55ek>P>P=QY]5^#T33EK=QS3TU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                 L    | j                  ||      }t        | 	  ||||      S r'   )rZ   r   _alter_column_type_sql)r   r?   	old_field	new_fieldrY   r   s        r   r\   z+DatabaseSchemaEditor._alter_column_type_sql   s+    77	8Lw-eY	8TTr   c                 L    | j                  ||      }t        | 	  ||||      S r'   )rZ   r   _rename_field_sql)r   r6   r]   r^   rY   r   s        r   r`   z&DatabaseSchemaEditor._rename_field_sql   s+    77	8Lw(	9hOOr   )__name__
__module____qualname__sql_rename_tablesql_alter_column_nullsql_alter_column_not_nullsql_alter_column_typesql_delete_columnsql_delete_uniquesql_create_column_inline_fksql_delete_fksql_delete_indexsql_create_pksql_delete_pksql_create_indexpropertyr   r   r%   r,   r/   r.   r4   r8   rC   rR   rZ   r\   r`   __classcell__)r   s   @r   r   r      s    D= E8 GC	1   FM9]M<MR; ; U U^
 ; ;	2
$FD 	UP Pr   r   N)django.db.backends.base.schemar   django.db.modelsr   r    r   r   <module>ru      s    C )OP3 OPr   