Ë
    ¦#ij¤9  ã                   óJ   — 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y)é    )Ú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                  j	                  t        |«      |«      }t         ‰| �  |d «      S ©N)ÚsuperÚexecuteÚ
connectionÚopsÚcompose_sqlÚstr)Úselfr   ÚparamsÚ	__class__s      €ú^/var/www/html/office/venv/lib/python3.12/site-packages/django/db/backends/postgresql/schema.pyr   zDatabaseSchemaEditor.execute*   sJ   ø€ àˆ>Ü‘7‘? 3¨Ó/Ð/Ø�o‰o×!Ñ!×-Ñ-¬c°#«h¸Ó?ˆä‰w‰˜s DÓ)Ð)ó    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                 óV   — t        j                  || j                  j                  «      S r   )r   Úquoter   )r   Úvalues     r   Úquote_valuez DatabaseSchemaEditor.quote_value:   s   € Ü�y‰y˜ §¡× :Ñ :Ó;Ð;r   c                 ór   •— t         ‰| �  ||«      }| j                  ||«      }|�|j                  |«       |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=   s?   ø€ Ü‘Ñ+¨E°5Ó9ˆØ#×:Ñ:¸5À%ÓHÐØÐ+Ø�M‰MÐ.Ô/Øˆr   c                 óê   — |j                   r|j                  | j                  «      S | j                  j                  j	                  |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   sY   € Ø×ÒØ×$Ñ$ T§_¡_Ó5Ð5Ø�‰×)Ñ)×-Ñ-Ø×#Ñ#Ó%Ø�M‰M˜$Ÿ/™/Ó*ó
ð 	
r   c              #   óÌ   K  — |j                   j                  «       dk(  r$| j                  |j                   «      E d {  –—†  y | j                  |j                   «      –— y 7 Œ#­w)NÚ
ArrayField)Ú
base_fieldr(   Ú_field_base_data_typesr+   r*   s     r   r/   z+DatabaseSchemaEditor._field_base_data_typesL   sT   è ø€ à×Ñ×-Ñ-Ó/°<Ò?Ø×2Ñ2°5×3CÑ3CÓD×DÑDà×'Ñ'¨×(8Ñ(8Ó9Ó9ð Eús   ‚<A$¾A"¿$A$c                 ó¦  — |j                  | j                  ¬«      }|�³|j                  s|j                  r›d|v ryt	        |dd«      }|s#|j
                  rt	        |j                  dd«      }|r| j                  |«      sy|j                  d«      r| j                  ||gddg¬«      S |j                  d	«      r| j                  ||gdd
g¬«      S y)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¯?©?�-Ó;ˆØÐ E§N¢N°e·l²lð �g‰~Øô % U¨N¸DÓAˆNÙ! e×&7Ò&7Ü!(¨×);Ñ);¸^ÈTÓ!R�Ù d×&FÑ&FÀ~Ô&VØØ×!Ñ! )Ô,Ø×-Ñ-ØØ!˜7Ø"Ø4Ð5ð	 .ó ð ð ×#Ñ# FÔ+Ø×-Ñ-ØØ!˜7Ø"Ø1Ð2ð	 .ó ð ð r   c                 ó0  — |j                   ryd}|j                  «       }|j                  «       }|dk(  r=||k(  r8t        | j                  |«      «      t        | j                  |«      «      k7  r|S y| j	                  |«      | j	                  |«      k7  r|S y)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¦   € Ø×ÒØØ1ˆ	Ø%×7Ñ7Ó9ÐØ%×7Ñ7Ó9ÐØ Ò,Ð1BÐFWÒ1Wä�D×/Ñ/°	Ó:Ó;¼tØ×+Ñ+¨IÓ6ó@ò ð !Ð ð ð ×"Ñ" 9Ó-°×1FÑ1FÀyÓ1QÒQØÐØr   c                 óê   — | j                   j                  «       5 }| j                   j                  j                  ||«      D ]  }|d   |k(  sŒ|d   c cd d d «       S  	 d d d «       y # 1 sw Y   y xY w)NÚcolumnÚname)r   ÚcursorÚintrospectionÚget_sequences)r   ÚtablerO   rQ   Úsequences        r   Ú_get_sequence_namez'DatabaseSchemaEditor._get_sequence_nameŠ   sw   € Ø�_‰_×#Ñ#Ó%ð 	,¨Ø ŸO™O×9Ñ9×GÑGÈÐPUÓVò ,�Ø˜HÑ%¨Ó/Ø# FÑ+Ñ+÷	,ñ 	,ñ,÷	,ð ÷		,ð ús   ›2A)ÁA)ÁA)Á)A2c                 ó   — |j                   xs |j                  xrs |j                  d«      xr |j                  d«       xsL |j                  d«      xr |j                  d«       xs% |j                  d«      xr |j                  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�   € Ø×"Ñ"Ò6 i×&6Ñ&6ò 
Ø× Ñ  Ó+ÒR°H×4GÑ4GÈ	Ó4RÐ0Rò UØ×#Ñ# FÓ+ÒO°H×4GÑ4GÈÓ4OÐ0OòUà×#Ñ# HÓ-ÒS°h×6IÑ6IÈ(Ó6SÐ2Sð	
r   c           	      óˆ  •— |j                  | j                  ¬«      }|d   }| j                  |||«      rT| j                  |j                  j
                  |j                  gd¬«      }	| j                  | j                  ||	«      «       d| _	        | j                  ||«      x}
r| xj                  |
z  c_	        |j                  «       }|j                  «       }t        |j                  j
                  «      }h d£}||v }||v }|rn|slt        |j                  «      }| j                  | j                  |«      |ddœz  g f| j                  | j                  |«      | j                  |«      d	œz  g fgfS |r½|s»| j                  | j                  | j                  |«      | j                  t        |j                  «      «      d	œz  «       t        |j                  «      }t         ‰| �E  ||||||«      \  }}g }| j%                  ||«      x}r#| j&                  d
| j                  |«      iz  g fg}||fS |rz|rx||k7  rst         ‰| �E  ||||||«      \  }}t        |j                  «      }ddddœ}g }| j%                  ||«      x}r'| j(                  | j                  |«      ||   dœz  g fg}||fS t         ‰| �E  ||||||«      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˜   sJ  ø€ ð
 "×/Ñ/¸4¿?¹?Ð/ÓKˆØ  Ñ(ˆØ×8Ñ8¸ÀHÈhÔWØ×0Ñ0Ø—‘×$Ñ$ y×'7Ñ'7Ð&8Àð 1ó ˆJð �L‰L˜×/Ñ/°°zÓBÔCð Að 	Ô"ð Ÿ™¨	°9Ó=Ð=ˆ9Ð=Ø×&Ò&¨)Ñ3Õ&Ø%×7Ñ7Ó9ÐØ%×7Ñ7Ó9Ðä˜UŸ[™[×1Ñ1Ó2ˆò
Ðð
 (Ð+;Ð;ˆØ'Ð+;Ð;ˆÙ™{Ü! )×"2Ñ"2Ó3ˆFð ×.Ñ.à"&§/¡/°&Ó"9Ø (Ø%'ññð ðð ×-Ñ-à%)§_¡_°UÓ%;Ø&*§o¡o°fÓ&=ññð
 ðð	ðð ñ* ¡ð �L‰LØ×'Ñ'à!Ÿ_™_¨UÓ3Ø"Ÿo™o¬l¸9×;KÑ;KÓ.LÓMññôô " )×"2Ñ"2Ó3ˆFÜ™'Ñ8Ø�y )¨X°}Àmó‰KˆH�að
 ˆMØ $× 7Ñ 7¸¸vÓ FÐFˆ}ÐFð ×0Ñ0à&¨¯©¸Ó(Fðñð ðð!�ð ˜]Ð*Ð*Ù™[Ð->ÐBSÒ-SÜ™'Ñ8Ø�y )¨X°}Àmó‰KˆH�aô " )×"2Ñ"2Ó3ˆFà&Ø (Ø",ñˆHð ˆMØ $× 7Ñ 7¸¸vÓ FÐFˆ}ÐFð ×4Ñ4à(,¯©¸Ó(FØ$,Ð->Ñ$?ññð
 ðð	!�ð ˜]Ð*Ð*ä‘7Ñ1Ø�y )¨X°}Àmóð r   Fc	           
      ó  •— t         ‰| �  ||||||||«       |j                  s|j                  s|j                  s+|j                  s|j                  s| j	                  |||«      r%| j                  ||«      }	|	�| j                  |	«       |j                  ro|j                  sb|j                  sU| j                  |j                  j                  |j                  gd¬«      }
| j                  | j                  ||
«      «       y y y y )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  s  ø€ ô 	‰ÑØØØØØØØØô		
ð ×$Ò$¨	×(8Ò(8¸i×>PÒ>PØ×$Ò$¨×)9Ò)9à×=Ñ=Ø˜x¨ôð
 $(×#>Ñ#>¸uÀiÓ#PÐ Ø#Ð/Ø—‘Ð1Ô2ð ×Ò Y×%7Ò%7¸9×;KÒ;KØ"×5Ñ5Ø—‘×$Ñ$ y×'7Ñ'7Ð&8Àð 6ó ˆOð �L‰L˜×/Ñ/°°ÓGÕHð	 <LÐ%7Ð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  s>   ø€ ÙÜØØØ—‘Ø)Ø#ôð ô ‰wÑ% e¨W°lÀIÓNÐNr   c                 óN   — | j                  |j                  || |¬«      d ¬«       y )N©Úconcurrently)r   )r   Ú
create_sql©r   r   Úindexr‰   s       r   Ú	add_indexzDatabaseSchemaEditor.add_index<  s*   € Ø�‰Ø×Ñ˜U D°|ÐÓDÈTð 	õ 	
r   c                 óJ   — | j                  |j                  || |¬«      «       y )Nrˆ   )r   Ú
remove_sqlr‹   s       r   Úremove_indexz!DatabaseSchemaEditor.remove_indexA  s    € Ø�‰�U×%Ñ% e¨TÀÐ%ÓMÕNr   Nc                 ób   •— |xs |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=   ø€ Øò 
áð ×.Ò.à×&Ñ&ð 	ô
 ‰wÑ(¨°°cÓ:Ð:r   rE   )r7   rP   r8   ÚusingÚdb_tablespacer„   r   r9   Ú	conditionr‰   ÚincludeÚexpressionsc                óv   •— |xs |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  sf   ø€ ð" ò 
áð ×!Ò!à×3Ñ3ð 	ô
 ‰wÑ(ØØØØØØ'Ø%ØØØØØ#ð )ó 
ð 	
r   c                 óº   — | j                   j                  «       5 }|j                  d|g«       |j                  «       }|r|d   nd cd d d «       S # 1 sw Y   y xY w)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[   € Ø�_‰_×#Ñ#Ó%ð 
	+¨Ø�N‰Nðð
  Ð ôð —/‘/Ó#ˆCÙ �3�q’6 d÷
	+÷ 
	+ò 
	+ús   ›,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      sø   ø„ ð	*ð ð RÐØHÐð	9ð ð
	9ð "ð 7ÐØ$PÐ!ð
	<ð  ð	9ð ð JÐõ*ð	+ð ð
 	Pð ò<ôò
ò:ò%òNò ò
ômðp õ(IôT	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Ý :Ý 9Ý 1ôu+Ð3õ u+r   