
    >ȋh9                     R    d dl mZ d dlmZ d dlmZ d dlmZ  G d de          ZdS )    )BaseDatabaseSchemaEditor)IndexColumns)sql)strip_quotesc                        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# fd	ZdZdZd Z fdZd Zd Zd Zd Zd Zd Z fdZ	 d$ fd	Z fdZd$dZd$dZd% fd	Zddddddddddddd  fd!
Zd" Z xZ S )&DatabaseSchemaEditorzeUPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULL; SET CONSTRAINTS ALL IMMEDIATEz1ALTER SEQUENCE IF EXISTS %(sequence)s AS %(type)sz,DROP SEQUENCE IF EXISTS %(sequence)s CASCADEzZCREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(include)s%(extra)s%(condition)szgCREATE INDEX CONCURRENTLY %(name)s ON %(table)s%(using)s (%(columns)s)%(include)s%(extra)s%(condition)szDROP INDEX IF EXISTS %(name)sz*DROP INDEX CONCURRENTLY IF EXISTS %(name)szyCONSTRAINT %(name)s REFERENCES %(to_table)s(%(to_column)s)%(deferrable)s; SET CONSTRAINTS %(namespace)s%(name)s IMMEDIATEzRSET CONSTRAINTS %(name)s IMMEDIATE; ALTER TABLE %(table)s DROP CONSTRAINT %(name)sz,DROP FUNCTION %(procedure)s(%(param_types)s) c                     |"t                                          ||          S | j        j                            t          |          |          }t                                          |d           S N)superexecute
connectionopscompose_sqlstr)selfr   params	__class__s      a/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/backends/postgresql/schema.pyr   zDatabaseSchemaEditor.execute*   sX    >77??3///o!--c#hh??wwsD)))    zRALTER TABLE %(table)s ALTER COLUMN %(column)s ADD GENERATED BY DEFAULT AS IDENTITYzEALTER TABLE %(table)s ALTER COLUMN %(column)s DROP IDENTITY IF EXISTSc                 @    t          j        || j        j                  S r   )r   quoter   )r   values     r   quote_valuez DatabaseSchemaEditor.quote_value:   s    y :;;;r   c                     t                                          ||          }|                     ||          }||                    |           |S r   )r   _field_indexes_sql_create_like_index_sqlappend)r   modelfieldoutputlike_index_statementr   s        r   r   z'DatabaseSchemaEditor._field_indexes_sql=   sP    ++E599#::5%HH+MM.///r   c                     |j         r|                    | j                  S | j        j                            |                                |                    | j                            S r   )is_relationrel_db_typer   
data_typesgetget_internal_typedb_typer   r    s     r   _field_data_typez%DatabaseSchemaEditor._field_data_typeD   s`     	6$$T_555)--##%%MM$/**
 
 	
r   c              #      K   |j                                         dk    r"|                     |j                   E d {V  d S |                     |j                   V  d S )N
ArrayField)
base_fieldr(   _field_base_data_typesr+   r*   s     r   r/   z+DatabaseSchemaEditor._field_base_data_typesL   sr      --//<??2253CDDDDDDDDDDD''(89999999r   c                    |                     | j                  }||j        s|j        rd|v rdS t	          |dd          }|s|j        rt	          |j        dd          }|r|                     |          sdS |                    d          r| 	                    ||gddg          S |                    d	          r| 	                    ||gdd
g          S dS )z
        Return the statement to create an index with varchar operator pattern
        when the column type is 'varchar' or 'text', otherwise return None.
        r   N[db_collationvarchar_likevarchar_pattern_ops)fieldssuffix	opclassestexttext_pattern_ops)
r)   r   db_indexuniquegetattrr$   target_field_is_collation_deterministic
startswith_create_index_sql)r   r   r    r)   collation_names        r   r   z+DatabaseSchemaEditor._create_like_index_sqlS   s+   
 --4?-;;ENel g~~t %UNDAAN! Se&7 S!();^T!R!R d&F&F~&V&V t!!),, --!7"45	 .    ##F++ --!7"12	 .    tr   c                 r   |j         rdS d}|                                }|                                }|dk    rO||k    rIt          |                     |                    t          |                     |                    k    r|S n.|                     |          |                     |          k    r|S dS )N z USING %(column)s::%(type)sr-   )	generatedr(   listr/   r+   )r   	new_field	old_field	using_sqlnew_internal_typeold_internal_types         r   
_using_sqlzDatabaseSchemaEditor._using_sqlz   s     	21	%7799%7799,,1BFW1W1WD//	::;;t++I66@ @   !  ""9--1F1Fy1Q1QQQrr   c                     | j                                         5 }| j         j                            ||          D ]$}|d         |k    r|d         c cd d d            S %	 d d d            n# 1 swxY w Y   d S )Ncolumnname)r   cursorintrospectionget_sequences)r   tablerO   rQ   sequences        r   _get_sequence_namez'DatabaseSchemaEditor._get_sequence_name   s    _##%% 	, O9GGPUVV , ,H%//#F+++	, 	, 	, 	, 	, 	, 	, 	,/,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ts   8A-A--A14A1c                     |j         s|j        o|                    d          r|                    d           pU|                    d          o|                    d           p*|                    d          o|                    d           S )Nr4   r:   citext)r<   r=   rA   )r   rI   old_typenew_types       r   (_is_changing_type_of_indexed_text_columnz=DatabaseSchemaEditor._is_changing_type_of_indexed_text_column   s    "6i&6 
  ++RH4G4G	4R4R0R U##F++OH4G4G4O4O0OU##H--Sh6I6I(6S6S2S	
r   c           	         |                     | j                  }|d         }|                     |||          rQ|                     |j        j        |j        gd          }	|                     |                     ||	                     d| _	        | 
                    ||          x}
r| xj	        |
z  c_	        |                                }|                                }t          |j        j                  }h d}||v }||v }|ro|smt          |j                  }| j	        |                     |          |ddz  g f| j        |                     |          |                     |          d	z  g fgfS |r|s|                     | j        |                     |          |                     t          |j                            d	z             t          |j                  }t!                                          ||||||          \  }}g }|                     ||          x}r"| j        d
|                     |          iz  g fg}||fS |r|r||k    rt!                                          ||||||          \  }}t          |j                  }dddd}g }|                     ||          x}r)| j        |                     |          ||         dz  g fg}||fS t!                                          ||||||          S )Nr1   typer5   r8   z2ALTER COLUMN %(column)s TYPE %(type)s%(collation)s>   	AutoFieldBigAutoFieldSmallAutoFieldrE   )rO   r]   	collation)rT   rO   rU   integerbigintsmallint)r_   r`   ra   )rU   r]   )db_parametersr   r[   _create_index_name_metadb_tablerO   r   _delete_index_sqlsql_alter_column_typerM   r(   r   
quote_namesql_add_identitysql_drop_indentityr   _alter_column_type_sqlrV   sql_delete_sequencesql_alter_sequence_type)r   r   rI   rH   rZ   old_collationnew_collationold_db_paramsrY   
index_namerJ   rK   rL   rT   auto_field_typesold_is_autonew_is_autorO   fragment_other_actionssequence_namedb_typesr   s                          r   ro   z+DatabaseSchemaEditor._alter_column_type_sql   s   
 "//4?/KK (88HhWW 	D00$y'7&8 1  J LL//zBBCCC A 	" 	9===9 	4&&)3&&%7799%7799U[122
 
 

 (+;;'+;; O	{ O	!)"233F ."&//&"9"9 (%'   -%)__U%;%;&*oof&=&= 
 	 *  8	 8	 LL'!__U33"ool9;K.L.LMM    ")"233F''88y)X}m KHa
 M $ 7 7v F FF} 	 0&(F(F ! ]** 	[ 	->BS-S-S''88y)X}m KHa ")"233F& (", H M $ 7 7v F FF} 
 4(,(F(F$,->$? 
 	! ]**7711y)X}m  r   Fc	           
         t                                          ||||||||           |j        s|j        s|j        s%|j        s|j        s|                     |||          r-|                     ||          }	|	|                     |	           |j        ra|j        s\|j        sW|                     |j        j	        |j
        gd          }
|                     |                     ||
                     d S d S d S d S )Nr5   r^   )r   _alter_fieldr<   r=   r[   r   r   rg   rh   ri   rO   rj   )r   r   rI   rH   rY   rZ   rt   new_db_paramsstrictr"   index_to_remover   s              r   r   z!DatabaseSchemaEditor._alter_field  sb    			
 		
 		
 $	3(1(8	3>G>P	3$	3)2)9	3 ==x 		3 $(#>#>ui#P#P #/1222  	IY%7 	I9;K 	I"55$y'7&8 6  O LL//GGHHHHH		I 	I 	I 	I 	I 	Ir   c                     |rt          ||| j        ||          S t                                          ||||          S )N)col_suffixesr9   )r   rl   r   _index_columns)r   rT   columnsr   r9   r   s        r   r   z#DatabaseSchemaEditor._index_columns1  sS     	)#    ww%%eWlINNNr   c                 `    |                      |                    || |          d            d S )Nconcurrently)r   )r   
create_sqlr   r   indexr   s       r   	add_indexzDatabaseSchemaEditor.add_index<  sA    UD|DDT 	 	
 	
 	
 	
 	
r   c                 \    |                      |                    || |                     d S )Nr   )r   
remove_sqlr   s       r   remove_indexz!DatabaseSchemaEditor.remove_indexA  s/    U%%eT%MMNNNNNr   Nc                 j    |r| j         n| j        }t                                          |||          S r   )sql_delete_index_concurrentlysql_delete_indexr   rj   )r   r   rP   r   r   r   s        r   rj   z&DatabaseSchemaEditor._delete_index_sqlD  s>     'D..& 	
 ww((c:::r   rE   )r7   rP   r8   usingdb_tablespacer   r   r9   	conditionr   includeexpressionsc                    |p|s| j         n| j        }t                                          |||||||||	|
||          S )N)r7   rP   r8   r   r   r   r   r9   r   r   r   )sql_create_indexsql_create_index_concurrentlyr   rB   )r   r   r7   rP   r8   r   r   r   r   r9   r   r   r   r   r   s                 r   rB   z&DatabaseSchemaEditor._create_index_sqlL  so    "  
4D!!3 	
 ww(('%# ) 
 
 	
r   c                     | j                                         5 }|                    d|g           |                                }|r|d         nd cd d d            S # 1 swxY w Y   d S )Nz
                SELECT collisdeterministic
                FROM pg_collation
                WHERE collname = %s
                r   )r   rQ   r   fetchone)r   rC   rQ   rows       r   r@   z0DatabaseSchemaEditor._is_collation_deterministicq  s    _##%% 
	+NN
      //##C *3q66d
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+s   7AA"%A")r	   )F)NF)!__name__
__module____qualname__sql_update_with_defaultrq   rp   r   r   r   r   sql_create_column_inline_fksql_delete_fksql_delete_procedurer   rm   rn   r   r   r+   r/   r   rM   rV   r[   ro   r   r   r   r   rj   rB   r@   __classcell__)r   s   @r   r   r      s7       	*  RH	9 
	9 " 7$P!
	<  	9  J* * * * * *	+ 
 	P < < <    
 
 
: : :% % %N     
 
 
m m m m mp (I (I (I (I (I (IT	O 	O 	O 	O 	O
 
 
 

O O O O; ; ; ; ; ; #
 #
 #
 #
 #
 #
 #
J+ + + + + + +r   r   N)	django.db.backends.base.schemar   !django.db.backends.ddl_referencesr   )django.db.backends.postgresql.psycopg_anyr   django.db.backends.utilsr   r   r	   r   r   <module>r      s    C C C C C C : : : : : : 9 9 9 9 9 9 1 1 1 1 1 1u+ u+ u+ u+ u+3 u+ u+ u+ u+ u+r   