3
g-                 @   s   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZmZ dddd	d
dddgZG dd deZG dd deeeZG dd deZG dd	 d	eZG dd
 d
eZG dd deeZG dd deeZG dd deeZdS )z>
Classes to represent the definitions of aggregate functions.
    )
FieldError)CaseFuncStarWhen)IntegerField)FixDurationInputMixinNumericOutputFieldMixin	AggregateAvgCountMaxMinStdDevSumVariancec                   s   e Zd ZdZdZdZdZdZdZddd fdd
Z	 fd	d
Z
 fddZ fddZd fdd	Zedd ZdddZ fddZ fddZ  ZS )r
   z)%(function)s(%(distinct)s%(expressions)s)TNz%s FILTER (WHERE %%(filter)s)F)distinctfilterc               s:   |r| j  rtd| jj || _|| _t j|| d S )Nz%s does not allow distinct.)allow_distinct	TypeError	__class____name__r   r   super__init__)selfr   r   expressionsextra)r    Y/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/models/aggregates.pyr      s
    zAggregate.__init__c                s   dd t  j D S )Nc             S   s   g | ]
}|j qS r   )Z_output_field_or_none).0er   r   r   
<listcomp>!   s    z/Aggregate.get_source_fields.<locals>.<listcomp>)r   get_source_expressions)r   )r   r   r   get_source_fields   s    zAggregate.get_source_fieldsc                s    t  j }| jr|| jg S |S )N)r   r"   r   )r   source_expressions)r   r   r   r"   #   s    
z Aggregate.get_source_expressionsc                s   | j o|j | _ t j|S )N)r   popr   set_source_expressions)r   exprs)r   r   r   r&   )   s    z Aggregate.set_source_expressionsc                s   t  j||||}|jo(|jj|||||_|st t|j }xRt|D ]F\}}	|	jrH| j | }
t|
drr|
jnt	|
}t
d|j||f qHW |S )Nnamez-Cannot compute %s('%s'): '%s' is an aggregate)r   resolve_expressionr   r
   r"   	enumeratecontains_aggregatehasattrr(   reprr   )r   queryZallow_joinsZreuseZ	summarizeZfor_savecr   indexexprZbefore_resolvedr(   )r   r   r   r)   -   s    zAggregate.resolve_expressionc             C   sF   | j  }t|dkr:t|d dr:d|d j| jj f S tdd S )N   r   r(   z%s__%sz$Complex expressions require an alias)r"   lenr,   r(   lowerr   )r   r   r   r   r   default_alias<   s    zAggregate.default_aliasc             C   s   g S )Nr   )r   aliasr   r   r   get_group_by_colsC   s    zAggregate.get_group_by_colsc                s   | j r
dnd|d< | jr|jjrr| jj||\}}| j|jd| j }t j||f||d|\}}||| fS | j	 }	d |	_|	j
 }
t| j|
d d}|	jt|g|
dd    tt|	j||f|S t j||f|S )	Nz	DISTINCT  r   template)r9   r   r   )Zthenr2   )r   r   featuresZ supports_aggregate_filter_clauseas_sqlfilter_templategetr9   r   copyr"   r   r&   r   r
   )r   compiler
connectionZextra_contextZ
filter_sqlZfilter_paramsr9   Zsqlparamsr>   r$   	condition)r   r   r   r;   F   s     zAggregate.as_sqlc                s.   t  j }| jr| j|d< | jr*| j|d< |S )Nr   r   )r   _get_repr_optionsr   r   )r   options)r   r   r   rC   Z   s    


zAggregate._get_repr_options)NTNFF)N)r   
__module____qualname__r9   r+   r(   r<   Zwindow_compatibler   r   r#   r"   r&   r)   propertyr5   r7   r;   rC   __classcell__r   r   )r   r   r
      s   
c               @   s   e Zd ZdZd ZdZdS )r   ZAVGTN)r   rE   rF   functionr(   r   r   r   r   r   r   c   s   c                   s8   e Zd ZdZd Ze ZdZd fdd	Zdd Z	  Z
S )	r   ZCOUNTTNc                sD   |dkrt  }t|t r(|d k	r(tdt j|fd|i| d S )N*z8Star cannot be used with filter. Please specify a field.r   )r   
isinstance
ValueErrorr   r   )r   
expressionr   r   )r   r   r   r   o   s
    zCount.__init__c             C   s   |d krdS |S )Nr   r   )r   valuerM   r@   r   r   r   convert_valuev   s    zCount.convert_value)N)r   rE   rF   rI   r(   r   Zoutput_fieldr   r   rO   rH   r   r   )r   r   r   i   s   c               @   s   e Zd ZdZd ZdS )r   MAXN)r   rE   rF   rI   r(   r   r   r   r   r   z   s   c               @   s   e Zd ZdZd ZdS )r   ZMINN)r   rE   rF   rI   r(   r   r   r   r   r      s   c                   s.   e Zd Zd Zd fdd	Z fddZ  ZS )r   Fc                s"   |rdnd| _ t j|f| d S )NSTDDEV_SAMPZ
STDDEV_POP)rI   r   r   )r   rM   sampler   )r   r   r   r      s    zStdDev.__init__c                s   t  j d| jdkiS )NrR   rQ   )r   rC   rI   )r   )r   r   r   rC      s    zStdDev._get_repr_options)F)r   rE   rF   r(   r   rC   rH   r   r   )r   r   r      s   c               @   s   e Zd ZdZd ZdZdS )r   ZSUMTN)r   rE   rF   rI   r(   r   r   r   r   r   r      s   c                   s.   e Zd Zd Zd fdd	Z fddZ  ZS )r   Fc                s"   |rdnd| _ t j|f| d S )NVAR_SAMPZVAR_POP)rI   r   r   )r   rM   rR   r   )r   r   r   r      s    zVariance.__init__c                s   t  j d| jdkiS )NrR   rS   )r   rC   rI   )r   )r   r   r   rC      s    zVariance._get_repr_options)F)r   rE   rF   r(   r   rC   rH   r   r   )r   r   r      s   N)__doc__Zdjango.core.exceptionsr   Zdjango.db.models.expressionsr   r   r   r   Zdjango.db.models.fieldsr   Z!django.db.models.functions.mixinsr   r	   __all__r
   r   r   r   r   r   r   r   r   r   r   r   <module>   s   S