
 X[	                 @   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                   sg   e  Z d  Z d Z d Z   f d d   Z d d   Z d d d d d   f d d	  Z 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__ U/home/ubuntu/projects/ifolica/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_expressionc             C   s   | j  j | |  j  S)N)r
   Zconvert_geomoutput_field)r   value
expressionr   contextr   r   r   convert_value!   s    zGeoAggregate.convert_value)	__name__
__module____qualname__r   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)Nr!   )r   r   __init__r   )r   r#   r   )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   r"   r#   r   r$   r   r   r   r%   0   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)   8   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%   ;   s    zExtent3D.convert_value)r&   r'   r(   r   r   r)   r%   r   r   )r   r   r   4   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   C   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   