
    Evg8                     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 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                 `   d}|                                 }|                                 }|dk    rO||k    rIt          |                     |                    t          |                     |                    k    r|S n.|                     |          |                     |          k    r|S dS )Nz USING %(column)s::%(type)sr-    )r(   listr/   r+   )r   	new_field	old_field	using_sqlnew_internal_typeold_internal_types         r   
_using_sqlzDatabaseSchemaEditor._using_sqlz   s    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   tablerN   rP   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                  }|d         }|j        s|j        r|                    d          r|                    d          rT|                    d          r|                    d          r*|                    d          rf|                    d          sQ|                     |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   typer4   r:   citextr5   r8   z2ALTER COLUMN %(column)s TYPE %(type)s%(collation)s>   	AutoFieldBigAutoFieldSmallAutoFieldrE   )rN   rW   	collation)rS   rN   rT   integerbigintsmallint)rZ   r[   r\   )rT   rW   )db_parametersr   r<   r=   rA   _create_index_name_metadb_tablerN   r   _delete_index_sqlsql_alter_column_typerL   r(   r   
quote_namesql_add_identitysql_drop_indentityr   _alter_column_type_sqlrU   sql_delete_sequencesql_alter_sequence_type)r   r   rH   rG   new_typeold_collationnew_collationold_db_paramsold_type
index_namerI   rJ   rK   rS   auto_field_typesold_is_autonew_is_autorN   fragment_other_actionssequence_namedb_typesr   s                          r   rj   z+DatabaseSchemaEditor._alter_column_type_sql   sp   
 "//4?/KK ( 	D)"2 	D  ++	D4<4G4G	4R4R	D##F++	D4<4G4G4O4O	D ##H--	D 7?6I6I(6S6S	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        s4|j        r-|                     ||          }	|	|                     |	           |j        ra|j        s\|j        sW|                     |j        j        |j	        gd          }
|                     | 
                    ||
                     d S d S d S d S )Nr5   rY   )r   _alter_fieldr<   r=   r   r   rb   rc   rd   rN   re   )r   r   rH   rG   rq   rm   rp   new_db_paramsstrictr"   index_to_remover   s              r   r|   z!DatabaseSchemaEditor._alter_field  s?    			
 		
 		
 # 	3y'7 	3Y=O 	3 	3%.%5	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   rg   r   _index_columns)r   rS   columnsr   r9   r   s        r   r   z#DatabaseSchemaEditor._index_columns&  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_index1  sA    UD|DDT 	 	
 	
 	
 	
 	
r   c                 \    |                      |                    || |                     d S )Nr   )r   
remove_sqlr   s       r   remove_indexz!DatabaseSchemaEditor.remove_index6  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   re   )r   r   rO   r   r   r   s        r   re   z&DatabaseSchemaEditor._delete_index_sql9  s>     'D..& 	
 ww((c:::r   rE   )r7   rO   r8   usingdb_tablespacer   r   r9   	conditionr   includeexpressionsc                    |p|s| j         n| j        }t                                          |||||||||	|
||          S )N)r7   rO   r8   r   r   r   r   r9   r   r   r   )sql_create_indexsql_create_index_concurrentlyr   rB   )r   r   r7   rO   r8   r   r   r   r   r9   r   r   r   r   r   s                 r   rB   z&DatabaseSchemaEditor._create_index_sqlA  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   rP   r   fetchone)r   rC   rP   rows       r   r@   z0DatabaseSchemaEditor._is_collation_deterministicf  s    _##%% 
	+NN
      //##C *3q66d
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+s   7AA"%A")r	   )F)NF) __name__
__module____qualname__sql_update_with_defaultrl   rk   r   r   r   r   sql_create_column_inline_fksql_delete_fksql_delete_procedurer   rh   ri   r   r   r+   r/   r   rL   rU   rj   r|   r   r   r   re   rB   r@   __classcell__)r   s   @r   r   r      s(       	*  RH	9 
	9 " 7$P!
	<  	9  J* * * * * *	+ 
 	P < < <    
 
 
: : :% % %N    q q q q qx "I "I "I "I "I "IH	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j+ j+ j+ j+ j+3 j+ j+ j+ j+ j+r   