
    Evg+                     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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                 "    | 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/pixelcanvas.ch/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         j        }|r| j         j        dk     rdS t                      j        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.   s;    _5
 	Y$/7*DD YXww((r   c                    | j                                          | j         j                             || j         j         j                  }t	          |t
                    r)t	          |t                    r|                                }|S N)r   ensure_connectionescapeencoders
isinstancestrbytesdecode)r   valuequoteds      r   quote_valuez DatabaseSchemaEditor.quote_value7   st    ))++++224?-6
 
 eS!! 	%j&?&? 	%]]__Fr   c                 ~    |                     | j                  }|d uo|                                | 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04 G4?#FF	
r   c                     |                     | j                  }|o&|                                                    d          S )N)blobtext)r)   r   r*   endswithr,   s      r   _is_text_or_blobz%DatabaseSchemaEditor._is_text_or_blobH   s7    --00E7==??334DEEEr   c                     |                      |          dv }|r|                     |          rdS | j        s|                     |          S dS N) r   TF)effective_defaultr3   $_supports_limited_data_type_defaultsr.   r   r-   default_is_emptys      r   skip_defaultz!DatabaseSchemaEditor.skip_defaultL   sa    11%88IE 	 5 5e < < 	48 	5--e444ur   c                     |                      |          dv }|r|                     |          rdS |                     |          r| j        j        sdS dS r5   )r7   r3   r.   r   r   r9   s      r   skip_default_on_alterz*DatabaseSchemaEditor.skip_default_on_alterT   sk    11%88IE 	 5 5e < < 	4%%e,, 	T_5U 	 4ur   c                 >    | j         j        rdS | j         j        dk    S )NT)   r      )r   r   r   r   s    r   r8   z9DatabaseSchemaEditor._supports_limited_data_type_defaults^   s&     ?+ 	4,
::r   c                     | j         j        s| j        r|                     |          rdS t	                                          |          S )Nz(%s))r   r   r8   r.   r   _column_default_sql)r   r-   r   s     r   rB   z(DatabaseSchemaEditor._column_default_sqle   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_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(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_indexrO   rP   r   remove_constraint)r   rL   
constraintr   s      r   rS   z&DatabaseSchemaEditor.remove_constraint   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  rW   ).0
field_name_s      r   
<listcomp>z5DatabaseSchemaEditor.remove_index.<locals>.<listcomp>   s    HHH=:qJHHHr   rN   )rR   fields_ordersrP   r   remove_index)r   rL   indexr   s      r   r]   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cursorrJ   rK   get_internal_typedb_constraintr.   )r   rL   r-   storager   s       r   rb   z-DatabaseSchemaEditor._field_should_be_indexed   s    ww//u== 	5//BBO""$$ek&:
 
 x''))\99# : 5--e4444r   )rP   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   ra   c                 N    g | ]!\  }}|d          r|d         d         k    |"S )r^   columnsr   rW   )rX   nameinfodictrE   s      r   r[   zADatabaseSchemaEditor._create_missing_fk_index.<locals>.<listcomp>   sP     $ $ $&h  ($
 .6i-@-Cv-M-M	  .N-M-Mr      r6   )rO   suffix)r   featuressupports_expression_indexesr!   r   r   rl   rJ   	get_fieldrf   rc   identifier_converterrE   re   get_constraintsrK   itemslenrH   _create_index_sql)	r   rL   rO   rP   first_field_namefirst_fieldre   constraint_namesrE   s	           @r   rR   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)rO   )rR   r   _delete_composed_index)r   rL   rO   argsr   s       r   r|   z+DatabaseSchemaEditor._delete_composed_index   s=    %%eF%;;;-uww-eVCdCCCCr   c                      |j         t          ur>                     |          \  }}|t           fd|D                       z  }|d| z  }|j        r|dz  }n|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   B   K   | ]}                     |          V  d S r   )r'   )rX   pr   s     r   	<genexpr>z;DatabaseSchemaEditor._set_field_new_type.<locals>.<genexpr>   s1       E E!1!1!!4!4 E E E E E Er   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   s    
 <//"&"5"5e"<"<K5 E E E Ef E E EEEEK1K111H: 	$HH#Hr   c                 |    |                      ||          }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   sC     ++Ix@@ww--9i=-
 
 	
r   c                     | j         j        r2| 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   sQ    ?+ 	C0M R
 1
 1

 77**5/BBB
 w''r   c                 x    |                      ||          }t                                          ||||          S r   )r   r   _rename_field_sql)r   rD   r   r   r   r   s        r   r   z&DatabaseSchemaEditor._rename_field_sql   s6    ++Ix@@ww((	9hOOOr   c                 
    dg fS )Nr6   rW   )r   rL   r   r   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   c                    |j         t          u r#t                                          |||          S |                    | j                  }|                     ||d                   }d|                     |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    <//7711%INNN!//4?/KK++I}V7LM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   r]   rb   rR   r|   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#; ; X; ) ) ) ) X)  
 
 
F F F     ; ; 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	   rW   r   r   <module>r      s    C C C C C C > > > > > > > > > > 1 1 1 1 1 1S
 S
 S
 S
 S
3 S
 S
 S
 S
 S
r   