
     h1                     N    d dl Z d dlmZ d dlmZ d dlmZ  G d de          ZdS )    N)BaseDatabaseSchemaEditor)IndexColumns)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ZdZd Z f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 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)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          |t                    r|                    dd          }t          j                            |          }t          |d          rd|_        |                                	                                S )N%z%%encodingutf8)

isinstancestrreplacepsycopg2
extensionsadapthasattrr
   	getquoteddecode)selfvalueadapteds      `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/django/db/backends/postgresql/schema.pyquote_valuez DatabaseSchemaEditor.quote_value4   su    eS!! 	-MM#t,,E%++E227J'' 	&%G  ""))+++    c                     t                                          ||          }|                     ||          }||                    |           |S N)super_field_indexes_sql_create_like_index_sqlappend)r   modelfieldoutputlike_index_statement	__class__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_type
connection
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   r3   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                  }|t|j        s|j        rfd|v r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[varchar_likevarchar_pattern_ops)fieldssuffix	opclassestexttext_pattern_ops)r-   r)   db_indexunique
startswith_create_index_sql)r   r!   r"   r-   s       r   r   z+DatabaseSchemaEditor._create_like_index_sqlS   s    
 --4?-;;ENel g~~t!!),, --!7"45	 .    ##F++ --!7"12	 .    tr   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   tablerC   rE   sequences        r   _get_sequence_namez'DatabaseSchemaEditor._get_sequence_names   s    _##%% 	, O9GGPUVV , ,H%//#F+++	, 	, 	, 	, 	, 	, 	, 	,/,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ts   8A-A--A14A1c           	         d| _         d}|                                }|                                }|dk    r]||k    rWt          |                     |                    t          |                     |                    k    r| xj         |z  c_         n<|                     |          |                     |          k    r| xj         |z  c_         t          |j        j                  }h d}	||	v }
||	v }|rn|
slt          |j                  }| j         | 	                    |          |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 )Nz%ALTER COLUMN %(column)s TYPE %(type)sz USING %(column)s::%(type)sr1   >   	AutoFieldBigAutoFieldSmallAutoField)rC   type)rH   rC   rI   integerbigintsmallint)rL   rM   rN   )rI   rO   )sql_alter_column_typer,   listr3   r/   r   _metadb_tablerC   
quote_namesql_add_identityexecutesql_drop_indentityr   _alter_column_type_sqlrJ   sql_delete_sequencesql_alter_sequence_type)r   r!   	old_field	new_fieldnew_type	using_sqlnew_internal_typeold_internal_typerH   auto_field_typesold_is_autonew_is_autorC   fragment_other_actionssequence_namedb_typesr%   s                     r   r[   z+DatabaseSchemaEditor._alter_column_type_sqlz   s   %L"1	%7799%7799,,1BFW1W1WD//	::;;t++I66@ @   **i7**""9--1F1Fy1Q1QQQ&&)3&&U[122
 
 

 (+;;'+;; L	Y{ L	Y!)"233F ."&//&"9"9 ( 
  -%)__U%;%;&*oof&=&= 
 	 (  6	Y 6	Y LL'!__U33"ool9;K.L.LMM    ")"233F''88y)X KHa
 M $ 7 7v F FF} 	 0&(F(F ! ]** 	Y[ 	Y->BS-S-S''88y)X KHa ")"233F& (", H M $ 7 7v F FF} 
 4(,(F(F$,->$? 
 	! ]**7711%IxXXXr   Fc	           
         |j         s|j        r|                    d          r|                    d          rT|                    d          r|                    d          r*|                    d          rf|                    d          sQ|                     |j        j        |j        gd          }	|                     |                     ||	                     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 )Nr6   r<   citextr7   )r:   )r>   r?   r@   _create_index_namerU   rV   rC   rY   _delete_index_sqlr   _alter_fieldr   )r   r!   r^   r_   old_typer`   old_db_paramsnew_db_paramsstrict
index_namer$   index_to_remover%   s               r   rp   z!DatabaseSchemaEditor._alter_field   s6     	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		
 		
 		
 # 	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_suffixesr;   )r   rW   r   _index_columns)r   rH   columnsrx   r;   r%   s        r   ry   z#DatabaseSchemaEditor._index_columns  sS     	)#    ww%%eWlINNNr   c                 `    |                      |                    || |          d            d S )Nconcurrently)params)rY   
create_sqlr   r!   indexr}   s       r   	add_indexzDatabaseSchemaEditor.add_index  sA    UD|DDT 	 	
 	
 	
 	
 	
r   c                 \    |                      |                    || |                     d S )Nr|   )rY   
remove_sqlr   s       r   remove_indexz!DatabaseSchemaEditor.remove_index  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   ro   )r   r!   rD   sqlr}   r%   s        r   ro   z&DatabaseSchemaEditor._delete_index_sql"  s>     'D..& 	
 ww((c:::r     )r9   rD   r:   usingdb_tablespacerx   r   r;   	conditionr}   includeexpressionsc                ~    |s| j         n| j        }t                                          |||||||||	|
||          S )N)r9   rD   r:   r   r   rx   r   r;   r   r   r   )sql_create_indexsql_create_index_concurrentlyr   rA   )r   r!   r9   rD   r:   r   r   rx   r   r;   r   r}   r   r   r%   s                 r   rA   z&DatabaseSchemaEditor._create_index_sql*  sg    &  4D!!3 	
 ww(('%# ) 
 
 	
r   )F)NF)__name__
__module____qualname__sql_update_with_defaultr]   r\   r   r   r   r   sql_create_column_inline_fksql_delete_fksql_delete_procedurerX   rZ   r   r   r/   r3   r   rJ   r[   rp   ry   r   r   ro   rA   __classcell__)r%   s   @r   r   r      s       
	*  RH	9 
	9 " 7$P!
	<  	9  J	+ 
 	P , , ,    
 
 
: : :  @  cY cY cY cY cY\ .I .I .I .I .I .I`	O 	O 	O 	O 	O
 
 
 

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