
    >ȋh~#                         d dl mZ d dlmZ d dl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dS )    )NoneType)ValidationError)DEFAULT_DB_ALIAS)Expressions	StatementTable)BaseConstraint
DeferrableFQ)ExistsExpressionList)IndexExpression)PostgresOperatorLookup)QueryExclusionConstraintc                       e Zd ZdZdS )ExclusionConstraintExpressionz!%(expressions)s WITH %(operator)sN)__name__
__module____qualname__template     `/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/postgres/constraints.pyr   r      s        2HHHr   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
 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%|                                 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          || _	        |pd	| _
        || _        || _        |rt          |          nd
| _        t                                          |||           d S )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   t   K   | ]3}t          |t          t          f          ot          |          d k    V  4dS )   N)
isinstancelisttuplelen).0exprs     r   	<genexpr>z/ExclusionConstraint.__init__.<locals>.<genexpr>.   sP       
 
CGJtdE]++>D		Q
 
 
 
 
 
r   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__)
selfr0   r4   r   r   r   r    r!   r"   	__class__s
            r   r6   zExclusionConstraint.__init__   s     	***,,4FFFM    	    
 
KV
 
 
 
 
 	L JKKK)h]33 	TRSSS*x&<== 	O   'HdE#:;; 	USTTT&$."$)08uW~~~b!5$; 	 	
 	
 	
 	
 	
r   c                 @   g }t          | j                  D ]l\  }\  }}t          |t                    rt	          |          }t          ||          }|                    |j                   |                    |           mt          | 
                    |          S )N)operator)	enumerater4   r(   strr   r   set_wrapper_classes
connectionappendr   resolve_expression)r7   schema_editorqueryr4   idx
expressionr:   s          r   _get_expressionsz$ExclusionConstraint._get_expressionsE   s    +4T5E+F+F 	+ 	+'C'*h*c** +z]]
6zHUUUJ**=+CDDDz****{+>>uEEEr   c                     t                      }| j        D ]Q\  }}t          |t                    rt	          |          }|                    |                    |                     R|                     ||          S N)setr4   r(   r<   r   update_get_expr_references_check_references)r7   modelr>   
referencesr-   _s         r   _checkzExclusionConstraint._checkO   s{    UU
' 	@ 	@GD!$$$ wwe88>>????%%eZ888r   c                     | j         d S |                    | j                   }|                    |j                  \  }}|t	          fd|D                       z  S )Nc              3   B   K   | ]}                     |          V  d S rG   )quote_value)r,   prA   s     r   r.   z9ExclusionConstraint._get_condition_sql.<locals>.<genexpr>\   s1      HHA=44Q77HHHHHHr   )r   build_whereas_sqlr>   r*   )r7   compilerrA   rB   wheresqlparamss     `    r   _get_condition_sqlz&ExclusionConstraint._get_condition_sqlW   sg    >!4!!$.11ll8]-EFFVUHHHHHHHHHHHr   c                    t          d          }|                    |j                  }|                     ||          }j        j        }|                     |||          }fd| j        D             }t          | j	        t          ||j                  |                    | j                  | j        t          ||||j                  |rd|z  nd|                    |          |                    | j                            S )NF)
alias_cols)r>   c                 N    g | ]!}j                             |          j        "S r   )_meta	get_fieldcolumn)r,   
field_namerL   s     r   
<listcomp>z6ExclusionConstraint.constraint_sql.<locals>.<listcomp>d   s9     
 
 
9CEK!!*--4
 
 
r   z WHERE (%s) )tabler0   r   r4   rW   r    r   )r   get_compilerr>   rE   r^   db_tablerZ   r    r   r   r   
quote_namer0   r   r   rR   _index_include_sql_deferrable_constraint_sqlr   )	r7   rL   rA   rB   rV   r4   rd   r   r    s	    `       r   constraint_sqlz"ExclusionConstraint.constraint_sql^   s'   e...%%1I%JJ++M5AA$++HmUKK	
 
 
 
GK|
 
 
 M}788))$)44#{Hm.G  09@-)++b!44UGDD$??PP
 
 
 	
r   c                     t          dt          |j        j        |j                  |                     ||                    S )Nz(ALTER TABLE %(table)s ADD %(constraint)s)rd   
constraint)r   r   r^   rf   rg   rj   r7   rL   rA   s      r   
create_sqlzExclusionConstraint.create_sqlt   sD    6,m.FGG**5-@@
 
 
 	
r   c                 j    |                     |j        ||                    | j                            S rG   )_delete_constraint_sqlsql_delete_checkrg   r0   rm   s      r   
remove_sqlzExclusionConstraint.remove_sql{   s6    33*$$TY//
 
 	
r   c                    t                                                      \  }}}| j        |d<   | j        
| j        |d<   | j                                        dk    r
| j        |d<   | j        r
| j        |d<   | j        r
| j        |d<   |||fS )Nr4   r   r$   r   r   r    )r5   deconstructr4   r   r   r1   r   r    )r7   pathargskwargsr8   s       r   rt   zExclusionConstraint.deconstruct   s    "WW0022dF $ 0}>%"&.F;?  ""f,,#'?F< ? 	3#'?F< < 	- $F9T6!!r   c                 p   t          || j                  r| j        |j        k    oo| j        |j        k    o_| j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j	        |j	        k    S t                                          |          S rG   )r(   r8   r0   r   r4   r   r   r    r!   r"   r5   __eq__)r7   otherr8   s     r   ry   zExclusionConstraint.__eq__   s    eT^,, 
		UZ' ROu'77R$(99R Neo5R Ou'77	R
 LEM1R -1KKR 0E4QQ	 ww~~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n	d
| j
        z  dS )N<z: index_type=z expressions=z name=rc   z condition=%sz deferrable=%rz include=%sz violation_error_code=%rz violation_error_message=%r>)r8   r   reprr   r4   r0   r   r   r    r!   r"   default_violation_error_message)r7   s    r   __repr__zExclusionConstraint.__repr__   s     N'''!!!!!""""OOO.(BBo.NN/)BB/?$//QQlJBBT\8J8J(JJ ,4 /$2KKL /7/43WWW  3T5QQR R
 	
r   c                    |j                             |          }|                    |j        |          }d |                                D             }g }| j        D ]\  }	}
t          |	t                    rt          |	          }	|r| 	                    ||	|          r d S |	
                    |          }t          |	d          r|	                                }	t          |d          r|                                }t          |	|          }|
|_        |                    |            |j        | }|                    |j                  }|j        j        s0|                    |j                  r|                    |          }| j        s>|                                r(t1          |                                 | j                  d S | j        t7          |                    | j                            z                      ||          r(t1          |                                 | j                  d S )N)metaexcludec                 4    i | ]\  }}t          |          |S r   )r   )r,   fieldvalues      r   
<dictcomp>z0ExclusionConstraint.validate.<locals>.<dictcomp>   s$    TTTLE5%%TTTr   get_expression_for_validation)lhsrhs)pk)code)using)_default_managerr   _get_field_expression_mapr^   itemsr4   r(   r<   r   _expression_refs_excludereplace_expressionshasattrr   r   postgres_operatorr?   filter_get_pk_val_stateadding
_is_pk_setr   r   existsr   get_violation_error_messager!   r   check)r7   rL   instancer   r   querysetreplacement_mapreplacementslookupsrD   r:   rhs_expressionlookupmodel_class_pks                 r   validatezExclusionConstraint.validate   so   )//66"<<g = 
 
 UTO<Q<Q<S<STTT$($4 	# 	# J*c** +z]]
 488
GTT ';;LIINz#BCC H'EEGG
~'FGG P!/!M!M!O!O+
OOOF'/F$NN6"""""8?G,!--ek::% 	;(*=*=ek*J*J 	;''>'::H~ 	   %4466T=V    
 (G(G!H!HHOOu P    &4466T=V    r   )r   r   r   r   r6   rE   rO   rZ   rj   rn   rr   rt   ry   r   r   r   __classcell__)r8   s   @r   r   r      s       	>  ! $*
 *
 *
 *
 *
 *
 *
XF F F9 9 9I I I
 
 
,
 
 

 
 
" " " " "% % % % %
 
 
, 15<L # # # # # # # #r   N)typesr   django.core.exceptionsr   	django.dbr   !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      s;         2 2 2 2 2 2 & & & & & & K K K K K K K K K K = = = = = = = = = = = = ? ? ? ? ? ? ? ? 4 4 4 4 4 4 ; ; ; ; ; ; & & & & & & 
!3 3 3 3 3O 3 3 3C C C C C. C C C C Cr   