
^Q\                 @   s   d  d l  m Z d  d l m Z 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
 d S)    )ExtentField)	AggregateCollectExtentExtent3DMakeLineUnionc                   s[   e  Z d  Z d Z d Z   f d d   Z d d   Z d d d d d   f d d	  Z   S)
GeoAggregateNFc                sA   | j  j |   | j  j |  j  |  _ t t |   j | |  S)N)opsZcheck_expression_supportZspatial_aggregate_namenamefunctionsuperr	   as_sql)selfcompiler
connection)	__class__ M/var/www/dbchiro/venv/build/Django/django/contrib/gis/db/models/aggregates.pyr      s    zGeoAggregate.as_sqlc             C   sP   t  |  d  s d |  _ n  |  j |  j d <|  j s@ d |  _ n  |  j | |  S)N	toleranceg?z8%(function)s(SDOAGGRTYPE(%(expressions)s,%(tolerance)s)))hasattrr   extra	is_extenttemplater   )r   r   r   r   r   r   	as_oracle   s    	zGeoAggregate.as_oracleTc                s`   t  t |   j | | | | |  } x5 | j   D]' } t | j d  s1 t d   q1 q1 W| S)NZ	geom_typez6Geospatial aggregates only allowed on geometry fields.)r   r	   resolve_expressionZget_source_expressionsr   field
ValueError)r   queryZallow_joinsZreuseZ	summarizeZfor_savecexpr)r   r   r   r      s
    $zGeoAggregate.resolve_expression)__name__
__module____qualname__r   r   r   r   r   r   r   )r   r   r	      s
   r	   c               @   s   e  Z d  Z d  Z d S)r   N)r!   r"   r#   r   r   r   r   r   r   "   s   c                   s:   e  Z d  Z d  Z d Z   f d d   Z d d   Z   S)r   Z2Dc                s&   t  t |   j | d t   | d  S)Noutput_field)r   r   __init__r   )r   
expressionr   )r   r   r   r%   *   s    zExtent.__init__c             C   s   | j  j | | j d   S)Ntransformed_srid)r
   Zconvert_extentget)r   valuer&   r   contextr   r   r   convert_value-   s    zExtent.convert_value)r!   r"   r#   r   r   r%   r+   r   r   )r   r   r   &   s   c                   s:   e  Z d  Z d  Z d Z   f d d   Z d d   Z   S)r   Z3Dc                s&   t  t |   j | d t   | d  S)Nr$   )r   r   r%   r   )r   r&   r   )r   r   r   r%   5   s    zExtent3D.__init__c             C   s   | j  j | | j d   S)Nr'   )r
   Zconvert_extent3dr(   )r   r)   r&   r   r*   r   r   r   r+   8   s    zExtent3D.convert_value)r!   r"   r#   r   r   r%   r+   r   r   )r   r   r   1   s   c               @   s   e  Z d  Z d  Z d S)r   N)r!   r"   r#   r   r   r   r   r   r   <   s   c               @   s   e  Z d  Z d  Z d S)r   N)r!   r"   r#   r   r   r   r   r   r   @   s   N)Z#django.contrib.gis.db.models.fieldsr   Zdjango.db.models.aggregatesr   __all__r	   r   r   r   r   r   r   r   r   r   <module>   s   