o 3at@snddlmZddlmZddlmZgdZGdddZGdddeZGd d d eZ Gd d d eZ d S))Enum)Q)Query)CheckConstraint DeferrableUniqueConstraintc@s<eZdZddZddZddZddZd d Zd d Zd S)BaseConstraintcCs ||_dSN)name)selfr r >/usr/lib/python3/dist-packages/django/db/models/constraints.py__init__ s zBaseConstraint.__init__cCtdNz.This method must be implemented by a subclass.NotImplementedErrorr model schema_editorr r r constraint_sql zBaseConstraint.constraint_sqlcCrrrrr r r create_sqlrzBaseConstraint.create_sqlcCrrrrr r r remove_sqlrzBaseConstraint.remove_sqlcCs0d|jj|jjf}|dd}|dd|jifS)Nz%s.%szdjango.db.models.constraintszdjango.db.modelsr r ) __class__ __module____name__replacer )r pathr r r deconstructs zBaseConstraint.deconstructcCs|\}}}|j|i|Sr )rr)r _argskwargsr r r cloneszBaseConstraint.cloneN) rr __qualname__rrrrrr#r r r r r s rcs\eZdZfddZddZddZddZd d Zd d Zfd dZ fddZ Z S)rcs*||_t|dds tdt|dS)N conditionalFzACheckConstraint.check must be a Q instance or boolean expression.)checkgetattr TypeErrorsuperr)r r&r rr r r!s  zCheckConstraint.__init__csRt|dd}||j}|jjd}||j\}}|tfdd|DS)NFr alias_cols connectionc3|]}|VqdSr  quote_value.0prr r /z1CheckConstraint._get_check_sql..)r build_wherer& get_compilerr.as_sqltupler rrquerywherecompilersqlparamsr r5r _get_check_sql*s  zCheckConstraint._get_check_sqlcCs|||}||j|Sr )rB _check_sqlr r rrr&r r r r1s zCheckConstraint.constraint_sqlcCs|||}|||j|Sr )rB_create_check_sqlr rDr r r r5s zCheckConstraint.create_sqlcCs|||jSr )_delete_check_sqlr rr r r r9szCheckConstraint.remove_sqlcCsd|jj|j|jfS)Nz<%s: check='%s' name=%r>)rrr&r r r r r __repr__<szCheckConstraint.__repr__cs.t|tr|j|jko|j|jkSt|Sr ) isinstancerr r&r)__eq__r otherr*r r rJ?s  zCheckConstraint.__eq__cs$t\}}}|j|d<|||fS)Nr&)r)rr&r rr!r"r*r r rDs  zCheckConstraint.deconstruct) rrr$rrBrrrrHrJr __classcell__r r r*r r s   rc@seZdZdZdZdS)rdeferred immediateN)rrr$DEFERRED IMMEDIATEr r r r rJsrcsheZdZdddddfdd ZddZdd Zd d Zd d ZddZfddZ fddZ Z S)rNr  condition deferrableinclude opclassescs|stdt|tdtfstd|r|rtd|r#|r#td|r+|r+tdt|tdtfs8tdt|tdttfsFtdt|ttfsQtd|r_t|t|kr_td t||_||_ ||_ |rpt|nd |_ ||_ t |dS) Nz=At least one field is required to define a unique constraint.z0UniqueConstraint.condition must be a Q instance.z4UniqueConstraint with conditions cannot be deferred.z8UniqueConstraint with include fields cannot be deferred.z3UniqueConstraint with opclasses cannot be deferred.z:UniqueConstraint.deferrable must be a Deferrable instance.z1UniqueConstraint.include must be a list or tuple.z3UniqueConstraint.opclasses must be a list or tuple.z]UniqueConstraint.fields and UniqueConstraint.opclasses must have the same number of elements.r ) ValueErrorrItyperrlistr;lenfieldsrTrUrVrWr)r)r r\r rTrUrVrWr*r r rPsD  zUniqueConstraint.__init__cs`|jdurdSt|dd}||j}|jjd}||j\}}|tfdd|DS)NFr+r-c3r/r r0r2r5r r r6r7z6UniqueConstraint._get_condition_sql..)rTrr8r9r.r:r;r<r r5r _get_condition_sql~s   z#UniqueConstraint._get_condition_sqlc Rfdd|jD}fdd|jD}||}|j||j||j||jdS)Ncg|] }j|jqSr _meta get_fieldcolumnr3 field_namerr r z3UniqueConstraint.constraint_sql..cr_r r`rdrfr r rgrhrS)r\rVr] _unique_sqlr rUrWr rrr\rVrTr rfr r  zUniqueConstraint.constraint_sqlc r^)Ncr_r r`rdrfr r rgrhz/UniqueConstraint.create_sql..cr_r r`rdrfr r rgrhrS)r\rVr]_create_unique_sqlr rUrWrjr rfr rrkzUniqueConstraint.create_sqlcs<||}fdd|jD}|j|j||j||jdS)Ncr_r r`rdrfr r rgrhz/UniqueConstraint.remove_sql..rS)r]rV_delete_unique_sqlr rUrW)r rrrTrVr rfr rs  zUniqueConstraint.remove_sqlc Csrd|jj|j|j|jdurdnd|j|jdurdnd|j|js#dndt|j|js0dfSdt|jfS)Nz<%s: fields=%r name=%r%s%s%s%s>z condition=%sz deferrable=%sz include=%sz opclasses=%s) rrr\r rTrUrVreprrWrGr r r rHs zUniqueConstraint.__repr__cs^t|tr)|j|jko(|j|jko(|j|jko(|j|jko(|j|jko(|j|jkSt |Sr ) rIrr r\rTrUrVrWr)rJrKr*r r rJs        zUniqueConstraint.__eq__csdt\}}}|j|d<|jr|j|d<|jr|j|d<|jr%|j|d<|jr-|j|d<|||fS)Nr\rTrUrVrW)r)rr\rTrUrVrWrMr*r r rs      zUniqueConstraint.deconstruct) rrr$rr]rrrrHrJrrNr r r*r rOs.     rN) enumrdjango.db.models.query_utilsrdjango.db.models.sql.queryr__all__rrrrr r r r s  *