Ë
    ¹ûàg=&  ã                   ó¾   — d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d
gZ G d„ de«      Z G d„ d
e«      Zy)é    )ÚNoneType)ÚValidationError)ÚDEFAULT_DB_ALIASÚNotSupportedError)ÚExpressionsÚ	StatementÚTable)ÚBaseConstraintÚ
DeferrableÚFÚQ)ÚExistsÚExpressionList)ÚIndexExpression)ÚPostgresOperatorLookup)ÚQueryÚExclusionConstraintc                   ó   — e Zd ZdZy)ÚExclusionConstraintExpressionz!%(expressions)s WITH %(operator)sN)Ú__name__Ú
__module__Ú__qualname__Útemplate© ó    úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/contrib/postgres/constraints.pyr   r      s   „ Ø2�Hr   r   c                   ó‚   ‡ — e Zd ZdZdddddddœˆ fd„
Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zˆ fd„Zˆ fd„Zd„ Zdefd„Zˆ xZS )r   zdCONSTRAINT %(name)s EXCLUDE USING %(index_type)s (%(expressions)s)%(include)s%(where)s%(deferrable)sN)Ú
index_typeÚ	conditionÚ
deferrableÚincludeÚviolation_error_codeÚviolation_error_messagec                óô  •— |r|j                  «       dvrt        d«      ‚|st        d«      ‚t        d„ |D «       «      st        d«      ‚t        |t        t
        f«      st        d«      ‚t        |t        t        f«      st        d«      ‚t        |t        t        t        f«      st        d«      ‚|| _	        |xs d	| _
        || _        || _        |rt        |«      nd
| _        t        ‰	| �=  |||¬«       y )N>   ÚgistÚspgistz;Exclusion constraints only support GiST or SP-GiST indexes.zFAt least one expression is required to define an exclusion constraint.c              3   óh   K  — | ]*  }t        |t        t        f«      xr t        |«      d k(  –— Œ, y­w)é   N)Ú
isinstanceÚlistÚtupleÚlen)Ú.0Úexprs     r   ú	<genexpr>z/ExclusionConstraint.__init__.<locals>.<genexpr>.   s0   è ø€ ò 
ØCGŒJ�tœd¤E˜]Ó+Ò>´°D³	¸Q±Ó>ñ
ùs   ‚02z+The expressions must be a list of 2-tuples.z3ExclusionConstraint.condition must be a Q instance.z=ExclusionConstraint.deferrable must be a Deferrable instance.z4ExclusionConstraint.include must be a list or tuple.ÚGISTr   )Únamer"   r#   )ÚlowerÚ
ValueErrorÚallr)   r   r   r   r*   r+   Úexpressionsr   r   r    r!   ÚsuperÚ__init__)
Úselfr1   r5   r   r   r    r!   r"   r#   Ú	__class__s
            €r   r7   zExclusionConstraint.__init__   s	  ø€ ñ ˜*×*Ñ*Ó,Ð4FÑFÜØMóð ñ Üðóð ô ñ 
ØKVô
ô 
ô ÐJÓKÐKÜ˜)¤h´ ]Ô3ÜÐRÓSÐSÜ˜*¤x´Ð&<Ô=ÜØOóð ô ˜'¤H¬d´EÐ#:Ô;ÜÐSÓTÐTØ&ˆÔØ$Ò.¨ˆŒØ"ˆŒØ$ˆŒÙ)0”u˜W”~°bˆŒÜ‰ÑØØ!5Ø$;ð 	õ 	
r   c                 ó  — g }t        | j                  «      D ]\  \  }\  }}t        |t        «      rt	        |«      }t        ||¬«      }|j                  |j                  «       |j                  |«       Œ^ t        |Ž j                  |«      S )N)Úoperator)Ú	enumerater5   r)   Ústrr   r   Úset_wrapper_classesÚ
connectionÚappendr   Úresolve_expression)r8   Úschema_editorÚqueryr5   ÚidxÚ
expressionr;   s          r   Ú_get_expressionsz$ExclusionConstraint._get_expressionsE   s„   € ØˆÜ+4°T×5EÑ5EÓ+Fò 	+Ñ'ˆCÑ'�*˜hÜ˜*¤cÔ*Ü˜z›]�
Ü6°zÈHÔUˆJØ×*Ñ*¨=×+CÑ+CÔDØ×Ñ˜zÕ*ð	+ô ˜{Ð+×>Ñ>¸uÓEÐEr   c                 óØ   — t        «       }| j                  D ]@  \  }}t        |t        «      rt	        |«      }|j                  |j                  |«      «       ŒB | j                  ||«      S ©N)Úsetr5   r)   r=   r   ÚupdateÚ_get_expr_referencesÚ_check_references)r8   Úmodelr?   Ú
referencesr.   Ú_s         r   Ú_checkzExclusionConstraint._checkO   se   € Ü“Uˆ
Ø×'Ñ'ò 	@‰GˆD�!Ü˜$¤Ô$Ü˜“w�Ø×Ñ˜e×8Ñ8¸Ó>Õ?ð	@ð ×%Ñ% e¨ZÓ8Ð8r   c                 óÀ   ‡— | j                   €y |j                  | j                   «      }|j                  |‰j                  «      \  }}|t	        ˆfd„|D «       «      z  S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrH   )Úquote_value)r-   ÚprB   s     €r   r/   z9ExclusionConstraint._get_condition_sql.<locals>.<genexpr>\   s   øè ø€ ÒH¸A˜=×4Ñ4°Q×7ÑHùs   ƒ)r   Úbuild_whereÚas_sqlr?   r+   )r8   ÚcompilerrB   rC   ÚwhereÚsqlÚparamss     `    r   Ú_get_condition_sqlz&ExclusionConstraint._get_condition_sqlW   sT   ø€ Ø�>‰>Ð!ØØ×!Ñ! $§.¡.Ó1ˆØ—l‘l 8¨]×-EÑ-EÓF‰ˆˆVØ”UÓHÀÔHÓHÑHÐHr   c                 ó€  — t        |d¬«      }|j                  |j                  ¬«      }| j                  ||«      }|j                  j
                  }| j                  |||«      }| j                  D �cg c]'  }|j                  j                  |«      j                  ‘Œ) }	}t        | j                  t        ||j                  «      |j                  | j                  «      | j                  t!        ||||j"                  «      |rd|z  nd|j%                  ||	«      |j'                  | j(                  «      ¬«      S c c}w )NF)Ú
alias_cols)r?   z WHERE (%s)Ú )Útabler1   r   r5   rX   r!   r    )r   Úget_compilerr?   rF   Ú_metaÚdb_tabler[   r!   Ú	get_fieldÚcolumnr   r   r	   Ú
quote_namer1   r   r   rS   Ú_index_include_sqlÚ_deferrable_constraint_sqlr    )
r8   rM   rB   rC   rW   r5   r_   r   Ú
field_namer!   s
             r   Úconstraint_sqlz"ExclusionConstraint.constraint_sql^   s  € Ü�e¨Ô.ˆØ×%Ñ%°×1IÑ1IÐ%ÓJˆØ×+Ñ+¨M¸5ÓAˆØ—‘×$Ñ$ˆØ×+Ñ+¨H°mÀUÓKˆ	àGKÇ|Á|ö
Ø9CˆE�K‰K×!Ñ! *Ó-×4Ó4ð
ˆð 
ô Ø�M‰MÜ˜˜}×7Ñ7Ó8Ø×)Ñ)¨$¯)©)Ó4Ø—‘Ü#Ø�{ H¨m×.GÑ.Góñ 09�- )Ò+¸bØ!×4Ñ4°U¸GÓDØ$×?Ñ?ÀÇÁÓPô
ð 	
ùò
s   Á3,D;c                 ó°   — | j                  |«       t        dt        |j                  j                  |j
                  «      | j                  ||«      ¬«      S )Nz(ALTER TABLE %(table)s ADD %(constraint)s)r_   Ú
constraint)Úcheck_supportedr   r	   ra   rb   re   ri   ©r8   rM   rB   s      r   Ú
create_sqlzExclusionConstraint.create_sqlt   sJ   € Ø×Ñ˜]Ô+ÜØ6Ü˜Ÿ™×,Ñ,¨m×.FÑ.FÓGØ×*Ñ*¨5°-Ó@ô
ð 	
r   c                 ón   — |j                  |j                  ||j                  | j                  «      «      S rH   )Ú_delete_constraint_sqlÚsql_delete_checkre   r1   rm   s      r   Ú
remove_sqlzExclusionConstraint.remove_sql|   s3   € Ø×3Ñ3Ø×*Ñ*ØØ×$Ñ$ T§Y¡YÓ/ó
ð 	
r   c                 ó°   — | j                   rJ| j                  j                  «       dk(  r,|j                  j                  j
                  st        d«      ‚y y y )Nr&   zMCovering exclusion constraints using an SP-GiST index require PostgreSQL 14+.)r!   r   r2   r?   ÚfeaturesÚ supports_covering_spgist_indexesr   )r8   rB   s     r   rl   z#ExclusionConstraint.check_supportedƒ   sU   € à�LŠLØ—‘×%Ñ%Ó'¨8Ò3Ø!×,Ñ,×5Ñ5×VÒVä#ð*óð ð Wð 4ð r   c                 óJ  •— t         ‰| �  «       \  }}}| j                  |d<   | j                  �| j                  |d<   | j                  j                  «       dk7  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   |||fS )Nr5   r   r%   r   r    r!   )r6   Údeconstructr5   r   r   r2   r    r!   )r8   ÚpathÚargsÚkwargsr9   s       €r   rw   zExclusionConstraint.deconstructŽ   s™   ø€ Ü"™WÑ0Ó2Ñˆˆd�FØ $× 0Ñ 0ˆˆ}ÑØ�>‰>Ð%Ø"&§.¡.ˆF�;ÑØ�?‰?× Ñ Ó" fÒ,Ø#'§?¡?ˆF�<Ñ Ø�?Š?Ø#'§?¡?ˆF�<Ñ Ø�<Š<Ø $§¡ˆF�9ÑØ�T˜6Ð!Ð!r   c                 óú  •— t        || j                  «      rÖ| j                  |j                  k(  xr» | j                  |j                  k(  xr  | j                  |j                  k(  xr… | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S t        ‰| �-  |«      S rH   )r)   r9   r1   r   r5   r   r    r!   r"   r#   r6   Ú__eq__)r8   Úotherr9   s     €r   r|   zExclusionConstraint.__eq__›   së   ø€ Ü�e˜TŸ^™^Ô,à—	‘	˜UŸZ™ZÑ'ò RØ—O‘O u×'7Ñ'7Ñ7òRà×$Ñ$¨×(9Ñ(9Ñ9òRð —N‘N e§o¡oÑ5òRð —O‘O u×'7Ñ'7Ñ7ò	Rð
 —L‘L E§M¡MÑ1òRð ×-Ñ-°×1KÑ1KÑKòRð ×0Ñ0°E×4QÑ4QÑQð	ô ‰w‰~˜eÓ$Ð$r   c                 ó&  — d| j                   j                  ›dt        | j                  «      ›dt        | j                  «      ›dt        | j
                  «      ›| j                  €dnd| j                  z  ›| j                  €dnd| j                  z  ›| j                  sdndt        | j                  «      z  ›| j                  €dnd	| j                  z  ›| j                  �| j                  | j                  k(  rd›d�S d
| j                  z  ›d�S )Nú<z: index_type=z expressions=z name=r^   z condition=%sz deferrable=%rz include=%sz violation_error_code=%rz violation_error_message=%rú>)r9   r   Úreprr   r5   r1   r   r    r!   r"   r#   Údefault_violation_error_message)r8   s    r   Ú__repr__zExclusionConstraint.__repr__©   s  � à�N‰N×'Ó'Ü�—‘Õ!Ü�×!Ñ!Õ"Ü�—‘ŒOØ—.‘.Ð(‰B¨oÀÇÁÑ.NÐNØ—/‘/Ð)‰BÐ/?À$Ç/Á/Ñ/QÐQØ—l’l‰B¨¼¸T¿\¹\Ó8JÑ(JÐJð ×,Ñ,Ð4ñ à/°$×2KÑ2KÑKðLð ×/Ñ/Ð7Ø×/Ñ/°4×3WÑ3WÒWð ñ Rð
ð 	
ð" 3°T×5QÑ5QÑQñRð
ð 	
r   c                 óÚ  — |j                   j                  |«      }|j                  |j                  |¬«      }|j	                  «       D ��ci c]  \  }}t        |«      |“Œ }	}}g }
t        | j                  «      D ]ê  \  }\  }}t        |t        «      rt        |«      }|rWt        |t
        «      r|j                  |v r9 y |j                  «       D ]$  }t        |t
        «      sŒ|j                  |v sŒ#  y  |j                  |	«      }t        |d«      r|j                  «       }t        |d«      r|j                  «       }t        ||¬«      }||_        |
j#                  |«       Œì  |j$                  |
Ž }|j'                  |j                  «      }|j(                  j*                  s|�|j-                  |¬«      }| j.                  s6|j1                  «       r%t3        | j5                  «       | j6                  ¬«      ‚y | j.                  t9        |j%                  | j.                  «      «      z  j;                  ||¬«      r%t3        | j5                  «       | j6                  ¬«      ‚y c c}}w )N)ÚmetaÚexcludeÚget_expression_for_validation)ÚlhsÚrhs)Úpk)Úcode)Úusing)Ú_default_managerrŒ   Ú_get_field_expression_mapra   Úitemsr   r<   r5   r)   r=   r1   ÚflattenÚreplace_expressionsÚhasattrr‡   r   Úpostgres_operatorr@   ÚfilterÚ_get_pk_valÚ_stateÚaddingr†   r   Úexistsr   Úget_violation_error_messager"   r   Úcheck)r8   rM   Úinstancer†   rŒ   ÚquerysetÚreplacement_mapÚfieldÚvalueÚreplacementsÚlookupsrD   rE   r;   r.   Úrhs_expressionÚlookupÚmodel_class_pks                     r   ÚvalidatezExclusionConstraint.validate¿   s3  € Ø×)Ñ)×/Ñ/°Ó6ˆØ"×<Ñ<Ø—‘ gð =ó 
ˆð =L×<QÑ<QÓ<S×T©L¨E°5œ˜%› %™ÐTˆÑTØˆÜ+4°T×5EÑ5EÓ+Fò 	#Ñ'ˆCÑ'�*˜hÜ˜*¤cÔ*Ü˜z›]�
ÙÜ˜j¬!Ô,Ø!—‘¨'Ñ1Ùà *× 2Ñ 2Ó 4ò #˜Ü% d¬AÕ.°4·9±9ÀÒ3GÚ"ð#ð (×;Ñ;¸LÓIˆNÜ�zÐ#BÔCØ'×EÑEÓG�
Ü�~Ð'FÔGØ!/×!MÑ!MÓ!O�Ü+°
ÀÔOˆFØ'/ˆFÔ$Ø�N‰N˜6Õ"ð%	#ð& #�8—?‘? GÐ,ˆØ!×-Ñ-¨e¯k©kÓ:ˆØ�‰×%Ò%¨.Ð*DØ×'Ñ'¨>Ð'Ó:ˆHØ�~Š~Ø�‰Ô Ü%Ø×4Ñ4Ó6¸T×=VÑ=Vôð ð !ð
 —‘¤¨¯©¸¿¹Ó(GÓ!HÑH×OÑOØ uð Pô ô &Ø×4Ñ4Ó6¸T×=VÑ=Vôð ðùó? Us   ÁI')r   r   r   r   r7   rF   rP   r[   ri   rn   rr   rl   rw   r|   rƒ   r   r¥   Ú__classcell__)r9   s   @r   r   r      sh   ø„ ð	>ð ð ØØØØ!Ø $ö*
òXFò9òIò
ò,
ò
ò	ô"ô%ò
ð, 15Ð<L÷ )r   N)Útypesr   Údjango.core.exceptionsr   Ú	django.dbr   r   Ú!django.db.backends.ddl_referencesr   r   r	   Údjango.db.modelsr
   r   r   r   Údjango.db.models.expressionsr   r   Údjango.db.models.indexesr   Údjango.db.models.lookupsr   Údjango.db.models.sqlr   Ú__all__r   r   r   r   r   ú<module>r±      sH   ðÝ å 2ß 9ß KÑ Kß =Ó =ß ?Ý 4Ý ;Ý &à Ð
!€ô3 Oô 3ôU˜.õ Ur   