
 X                 @   s  d  Z  d d l m Z d d l m Z m Z d d l m Z m Z m	 Z	 d d d d d	 d
 d d g Z
 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d	   d	 e  Z Gd d
   d
 e  Z Gd d   d e  Z Gd d   d e  Z d S)z>
Classes to represent the definitions of aggregate functions.
    )
FieldError)FuncStar)DecimalField
FloatFieldIntegerField	AggregateAvgCountMaxMinStdDevSumVariancec                   s[   e  Z d  Z d Z d Z d d d d d   f d d  Z e d d    Z d d	   Z   S)
r   TNFc                s   t  t |   j | | | |  } | s | j   } xy t |  D]h \ } }	 |	 j r@ |  j   | }
 t |
 d  r} |
 j n	 t |
  } t	 d | j | | f   q@ q@ Wn  | S)Nnamez-Cannot compute %s('%s'): '%s' is an aggregate)
superr   resolve_expressionget_source_expressions	enumeratecontains_aggregatehasattrr   reprr   )selfqueryZallow_joinsZreuseZ	summarizeZfor_savecexpressionsindexexprZbefore_resolvedr   )	__class__ I/home/ubuntu/projects/ifolica/build/django/django/db/models/aggregates.pyr      s    !	$&zAggregate.resolve_expressionc             C   s_   |  j    } t |  d k rO t | d d  rO d | d j |  j j   f St d   d  S)N   r   r   z%s__%sz$Complex expressions require an alias)r   lenr   r   lower	TypeError)r   r   r   r   r    default_alias   s    %zAggregate.default_aliasc             C   s   g  S)Nr   )r   r   r   r    get_group_by_cols$   s    zAggregate.get_group_by_cols)	__name__
__module____qualname__r   r   r   propertyr%   r&   r   r   )r   r    r      s
   !c                   s@   e  Z d  Z d Z d  Z   f d d   Z   f d d   Z   S)r	   ZAVGc                sK   |  j    d } t | t t f  r4 t   |  _ n  t t |   j   d  S)Nr   )	Zget_source_fields
isinstancer   r   r   Z_output_fieldr   r	   _resolve_output_field)r   Zsource_field)r   r   r    r,   ,   s    zAvg._resolve_output_fieldc                ss   |  j  j   d k rZ |  j   d } d d l m } m } | j | t | |     St t |   j	 | |  S)NDurationFieldr   )IntervalToSecondsSecondsToInterval)
output_fieldget_internal_typer   #django.db.backends.oracle.functionsr.   r/   compiler	   r   as_sql)r   compiler
connection
expressionr.   r/   )r   r   r    	as_oracle2   s    zAvg.as_oracle)r'   r(   r)   functionr   r,   r8   r   r   )r   r    r	   (   s   c                   sO   e  Z d  Z d Z d  Z d Z d   f d d  Z d d   Z d d	   Z   S)
r
   ZCOUNTz)%(function)s(%(distinct)s%(expressions)s)Fc                sP   | d k r t    } n  t t |   j | d | r9 d n d d t   | d  S)N*distinctz	DISTINCT  r0   )r   r   r
   __init__r   )r   r7   r;   extra)r   r   r    r=   A   s    zCount.__init__c             C   sN   d j  |  j j |  j j d d   |  j D  |  j d d k rG d n d  S)Nz{}({}, distinct={})c             s   s   |  ] } t  |  Vq d  S)N)str).0argr   r   r    	<genexpr>J   s    z!Count.__repr__.<locals>.<genexpr>r;   r<   FalseTrue)formatr   r'   
arg_joinerjoinsource_expressionsr>   )r   r   r   r    __repr__G   s    	zCount.__repr__c             C   s   | d  k r d St  |  S)Nr   )int)r   valuer7   r6   contextr   r   r    convert_valueN   s    zCount.convert_value)	r'   r(   r)   r9   r   templater=   rI   rM   r   r   )r   r    r
   <   s   c               @   s   e  Z d  Z d Z d  Z d S)r   MAXN)r'   r(   r)   r9   r   r   r   r   r    r   T   s   c               @   s   e  Z d  Z d Z d  Z d S)r   ZMINN)r'   r(   r)   r9   r   r   r   r   r    r   Y   s   c                   sC   e  Z d  Z d  Z d   f d d  Z d d   Z d d   Z   S)r   Fc                s;   | r d n d |  _  t t |   j | d t   | d  S)NZSTDDEV_SAMP
STDDEV_POPr0   )r9   r   r   r=   r   )r   r7   sampler>   )r   r   r    r=   a   s    zStdDev.__init__c             C   sJ   d j  |  j j |  j j d d   |  j D  |  j d k rC d n d  S)Nz{}({}, sample={})c             s   s   |  ] } t  |  Vq d  S)N)r?   )r@   rA   r   r   r    rB   h   s    z"StdDev.__repr__.<locals>.<genexpr>rP   rC   rD   )rE   r   r'   rF   rG   rH   r9   )r   r   r   r    rI   e   s    	zStdDev.__repr__c             C   s   | d  k r | St  |  S)N)float)r   rK   r7   r6   rL   r   r   r    rM   l   s    zStdDev.convert_value)r'   r(   r)   r   r=   rI   rM   r   r   )r   r    r   ^   s   c                   s.   e  Z d  Z d Z d  Z   f d d   Z   S)r   ZSUMc                ss   |  j  j   d k rZ |  j   d } d d l m } m } | j | t | |     St t |   j	 | |  S)Nr-   r   )r.   r/   )
r0   r1   r   r2   r.   r/   r3   r   r   r4   )r   r5   r6   r7   r.   r/   )r   r   r    r8   v   s    zSum.as_oracle)r'   r(   r)   r9   r   r8   r   r   )r   r    r   r   s   c                   sC   e  Z d  Z d  Z d   f d d  Z d d   Z d d   Z   S)r   Fc                s;   | r d n d |  _  t t |   j | d t   | d  S)NZVAR_SAMPVAR_POPr0   )r9   r   r   r=   r   )r   r7   rQ   r>   )r   r   r    r=      s    zVariance.__init__c             C   sJ   d j  |  j j |  j j d d   |  j D  |  j d k rC d n d  S)Nz{}({}, sample={})c             s   s   |  ] } t  |  Vq d  S)N)r?   )r@   rA   r   r   r    rB      s    z$Variance.__repr__.<locals>.<genexpr>rS   rC   rD   )rE   r   r'   rF   rG   rH   r9   )r   r   r   r    rI      s    	zVariance.__repr__c             C   s   | d  k r | St  |  S)N)rR   )r   rK   r7   r6   rL   r   r   r    rM      s    zVariance.convert_value)r'   r(   r)   r   r=   rI   rM   r   r   )r   r    r      s   N)__doc__Zdjango.core.exceptionsr   Zdjango.db.models.expressionsr   r   Zdjango.db.models.fieldsr   r   r   __all__r   r	   r
   r   r   r   r   r   r   r   r   r    <module>   s   