3
š(ƒh[	  ã               @   sŠ   d dl mZ d dlmZ dddddgZG dd	„ d	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ƒZ	G dd„ deƒZ
dS )é    )ÚExtentField)Ú	AggregateÚCollectÚExtentÚExtent3DÚMakeLineÚUnionc                   sB   e Zd ZdZdZ‡ fdd„Zdd„ Zd‡ fdd	„	Zd
d„ Z‡  Z	S )ÚGeoAggregateNFc                s.   |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__© úK/tmp/pip-install-q3hcpn_q/Django/django/contrib/gis/db/models/aggregates.pyr      s    zGeoAggregate.as_sqlc             C   s4   t | dƒsd| _| j| jd< | js(d| _| 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                sB   t t| ƒj|||||ƒ}x$|jƒ D ]}t|jdƒs"tdƒ‚q"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)NTNFF)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r%   Ú__classcell__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‡  ZS )r   Z2Dc                s"   t t| ƒj|fdtƒ i|—Ž 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   r   )   s   c                   s,   e Zd Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )r   Z3Dc                s"   t t| ƒj|fdtƒ i|—Ž 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   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   