
    +hS+                     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 f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 )DatabaseSchemaEditorzCREATE SEQUENCE %(sequence)sz,DROP SEQUENCE IF EXISTS %(sequence)s CASCADEz=SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)sz9ALTER SEQUENCE %(sequence)s OWNED BY %(table)s.%(column)szZCREATE 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          |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      h/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/db/backends/postgresql/schema.pyquote_valuez DatabaseSchemaEditor.quote_value&   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_type6   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_types>   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_sqlE   s    
 --4?-;;ENel g~~t!!),, --!7"45	 .    ##F++ --!7"12	 .    tr   c                 f   d| _         d}|                                }|                                }|dk    r]||k    rWt          |                     |                    t          |                     |                    k    r| xj         |z  c_         n<|                     |          |                     |          k    r| xj         |z  c_         t          |j        j                  }dddd}	|                                |	v r}t          |j	                  }
|d|
d	}| j         | 
                    |
          |	|                                         d
z  g f| j        d| 
                    |          iz  g f| j        d| 
                    |          iz  g f| j        | 
                    |          | j        | 
                    |
          d| 
                    |          z  dz  dz  g f| j        | 
                    |          | 
                    |
          | 
                    |          dz  g f| j        | 
                    |          | 
                    |
          | 
                    |          dz  g fgfS |                    | j                  d         |	v rgt          |j	                  }
|d|
d	}t'                                          ||||          \  }}|| j        d| 
                    |          iz  g fgfS t'                                          ||||          S )Nz%ALTER COLUMN %(column)s TYPE %(type)sz USING %(column)s::%(type)sr1   bigintintegersmallint)	bigserialserialsmallserial__seq)columntypesequenceznextval('%s'))rL   default)tablechanges)rP   rL   rN   r5   rM   )sql_alter_column_typer,   listr3   r/   r   _metadb_tablelowerrL   
quote_namesql_delete_sequencesql_create_sequencesql_alter_columnsql_alter_column_defaultsql_set_sequence_maxsql_set_sequence_ownerdb_parametersr)   r   _alter_column_type_sql)r   r!   	old_field	new_fieldnew_type	using_sqlnew_internal_typeold_internal_typerP   serial_fields_maprL   sequence_namefragmentrJ   r%   s                 r   r_   z+DatabaseSchemaEditor._alter_column_type_sqle   s   %L"1	%7799%7799,,1BFW1W1WD//	::;;tDD_D_`iDjDj?k?kkk**i7**""9--1F1Fy1Q1QQQ&&)3&&U[122*2iXbcc>>000!)"233F+055&&&9M ."&//&"9"9 1(..2B2B C2 2   0&(F(F4  	 0&(F(F4  	 -%)__U%;%;'+'D*.//&*A*A+:T__]=[=[+[H H (1 1  	 1%)__U%;%;&*oof&=&=(,(F(F5 5 
  3%)__U%;%;&*oof&=&=(,(F(F7 7 
 ?'0 0b $$$@@HL]]]!)"233F+055&&&9M''88	9V^__KHa,"DOOM$B$B0  	   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 )Nr7   r=   citextr8   )r;   )r?   r@   rA   _create_index_namerT   rU   rL   execute_delete_index_sqlr   _alter_fieldr   )r   r!   r`   ra   old_typerb   old_db_paramsnew_db_paramsstrict
index_namer$   index_to_remover%   s               r   rn   z!DatabaseSchemaEditor._alter_field   s     	D)"2 	D  ++	D4<4G4G	4R4R	D  ((	D191D1DV1L1L	D   **	D 4<3F3Fx3P3P	D
 001E	HXGYbi0jjJLL//zBBCCC9i8]6	
 	
 	

 $ 	3	(8 	3i>P 	3%	3*3*:	3#'#>#>ui#P#P #/1222  	IY%7 	I9;K 	I"55ek6JYM]L^gn5ooO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   rP   columnsrv   r<   r%   s        r   rw   z#DatabaseSchemaEditor._index_columns   sF     	qwlfoppppww%%eWlINNNr   c                 `    |                      |                    || |          d            d S )Nconcurrently)params)rl   
create_sqlr   r!   indexr{   s       r   	add_indexzDatabaseSchemaEditor.add_index   s4    U%%eT%MMVZ[[[[[r   c                 \    |                      |                    || |                     d S )Nrz   )rl   
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   rm   )r   r!   namesqlr{   r%   s        r   rm   z&DatabaseSchemaEditor._delete_index_sql   s4    4@[d00dF[ww((c:::r     )r:   r   r;   usingdb_tablespacerv   r   r<   	conditionr{   includeexpressionsc                ~    |s| j         n| j        }t                                          |||||||||	|
||          S )N)r:   r   r;   r   r   rv   r   r<   r   r   r   )sql_create_indexsql_create_index_concurrentlyr   rB   )r   r!   r:   r   r;   r   r   rv   r   r<   r   r{   r   r   r%   s                 r   rB   z&DatabaseSchemaEditor._create_index_sql   sW    
 ,8_d##T=_ww((&tF%'l9g#	 ) 
 
 	
r   )F)NF)__name__
__module____qualname__rY   rX   r\   r]   r   r   r   r   sql_create_column_inline_fksql_delete_fksql_delete_procedurer   r   r/   r3   r   r_   rn   rw   r   r   rm   rB   __classcell__)r%   s   @r   r   r      s       8HZX	9 
	9 " 7$P!
	<   iMI, , ,    
 
 
: : :  @QY QY QY QY QYh ;@I I I I I I8O O O O O
\ \ \ \O O O O; ; ; ; ; ;
  $$rUDd
 
 
 
 
 
 
 
 
 
 
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f
 f
 f
 f
 f
3 f
 f
 f
 f
 f
r   