
     h%                     N    d dl mZ d dlmZmZmZ d dlmZ  G d de          ZdS )    )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                 "    | 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/surfInsights/venv3-11/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_value9   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_typeE   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_defaultL   s&    8 	5--e444ur   c                 L    |                      |          r| j        j        sdS dS )NTF)r/   r   r   r2   s     r   skip_default_on_alterz*DatabaseSchemaEditor.skip_default_on_alterQ   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   r1   z9DatabaseSchemaEditor._supports_limited_data_type_defaultsX   s&     ?+ 	4,
::r   c                     | j         j        s| j        r|                     |          rdS t	                                          |          S )Nz(%s))r   r   r1   r/   r   _column_default_sql)r   r.   r   s     r   r9   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_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(Q $ 6 6u = =LL7!__U[-ABB"ooel;; 
 ##    		 		(Q(Qr   c                     t          |t                    r8|                    ||           "|                     ||j        |j                   t                                          ||           d S )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4	%%eT22>))!(&2 *   
 	!!%44444r   c                     |                      |d |j        D             |j                   t                                          ||           d S )Nc                     g | ]\  }}|S  rO   ).0
field_name_s      r   
<listcomp>z5DatabaseSchemaEditor.remove_index.<locals>.<listcomp>   s    HHH=:qJHHHr   rF   )rJ   fields_ordersrH   r   remove_index)r   rD   indexr   s      r   rU   z!DatabaseSchemaEditor.remove_index   s_    %%HHE4GHHH) 	& 	
 	
 	

 	UE*****r   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cursorrB   rC   get_internal_typedb_constraintr/   )r   rD   r.   storager   s       r   rZ   z-DatabaseSchemaEditor._field_should_be_indexed   s    ww//u== 	5//BBO""$$ek&:
 
 x''))\99# : 5--e4444r   )rH   c                   d}|r	|d         }nO|rM| j         j        j        r<t          |d         t                    r!t
          |d         j        vr|d         j        }|sdS |j                            |          }|	                                dk    r| j         j
                            |j                  | j                                         5 }fd| j         j
                            ||j        j                                                  D             }ddd           n# 1 swxY w Y   t#          |          dk    r0|                     |                     ||gd                     dS dS d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 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   rY   c                 N    g | ]!\  }}|d          r|d         d         k    |"S )rV   columnsr   rO   )rP   nameinfodictr<   s      r   rS   zADatabaseSchemaEditor._create_missing_fk_index.<locals>.<listcomp>   sP     $ $ $&h  ($
 .6i-@-Cv-M-M	  .N-M-Mr       )rG   suffix)r   featuressupports_expression_indexesr   r   r   rd   rB   	get_fieldr^   r[   identifier_converterr<   r]   get_constraintsrC   itemslenr@   _create_index_sql)	r   rD   rG   rH   first_field_namefirst_fieldr]   constraint_namesr<   s	           @r   rJ   z-DatabaseSchemaEditor._create_missing_fk_index   s       	3%ay	3(D	3 ;q>1--	3 +a."555*1~2 	Fk++,<==((**l::_2GG" F '')) V$ $ $ $*./*G*W*W 4+ +egg	$ $ $                #$$))**5+r*RR     ;: *)s   A	D&&D*-D*c                 h    |                      ||            t                      j        ||g|R  S )N)rG   )rJ   r   _delete_composed_index)r   rD   rG   argsr   s       r   ru   z+DatabaseSchemaEditor._delete_composed_index   s=    %%eF%;;;-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                 |    |                      ||          }t                                          ||||||          S r*   )rz   r   _alter_column_type_sql)r   rD   	old_field	new_fieldry   old_collationnew_collationr   s          r   r|   z+DatabaseSchemaEditor._alter_column_type_sql   sC     77	8LLww--9i=-
 
 	
r   c                 x    |                      ||          }t                                          ||||          S r*   )rz   r   _rename_field_sql)r   r;   r}   r~   ry   r   s        r   r   z&DatabaseSchemaEditor._rename_field_sql   s6    77	8LLww((	9hOOOr   c                 
    dg fS )Nrg   rO   )r   rD   r~   ry   new_db_comments        r   _alter_column_comment_sqlz.DatabaseSchemaEditor._alter_column_comment_sql   s    2vr   c                 P    t                                          |          }d| S )Nz	 COMMENT )r   _comment_sql)r   commentcomment_sqlr   s      r   r   z!DatabaseSchemaEditor._comment_sql   s(    gg**73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   rU   rZ   rJ   ru   rz   r|   r   r   r   __classcell__)r   s   @r   r	   r	      sP       D= EP'Q$ GC	1   FM9X 	R  =MRK#; ; X; U U U U XU
 
 

 
 
  
   ; ; X;	2 	2 	2 	2 	2     
5 
5 
5 
5 
5+ + + + +5 5 5 5 5. 0 0 0 0 0dD D D D D	 	 	
 
 
 
 
P P P P P  ) ) ) ) ) ) ) ) )r   r	   N)	django.db.backends.base.schemar   django.db.modelsr   r   r   django.db.models.constantsr   r	   rO   r   r   <module>r      s    C C C C C C > > > > > > > > > > 1 1 1 1 1 1m) m) m) m) m)3 m) m) m) m) m)r   