U
    5i                     @   s   d dl 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 ddd	d
dddgZe ZG dd d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ZG dd deeeZG dd deeeZdS )    N)
ArrayField)	AggregateBooleanField	JSONFieldValue)RemovedInDjango50Warning   )OrderableAggMixinArrayAggBitAndBitOrBoolAndBoolOrJSONBAgg	StringAggc                       s*   e Zd Zed fdd
Zdd Z  ZS )DeprecatedConvertValueMixin)defaultc                   s4   |t krd }d| _nd| _t j|d|i| d S )NFTr   )NOT_PROVIDED_default_providedsuper__init__)selfr   Zexpressionsextra	__class__ N/tmp/pip-unpacked-wheel-gcyiijx6/django/contrib/postgres/aggregates/general.pyr      s
    z$DeprecatedConvertValueMixin.__init__c                 C   s(   |d kr$| j s$tj| jtd | jS |S )N)category)r   warningswarndeprecation_msgr   deprecation_value)r   value
expression
connectionr   r   r   convert_value   s    z)DeprecatedConvertValueMixin.convert_value)__name__
__module____qualname__r   r   r%   __classcell__r   r   r   r   r      s   r   c                   @   s4   e Zd ZdZdZdZedd ZdZedd Z	d	S )
r
   Z	ARRAY_AGG6%(function)s(%(distinct)s%(expressions)s %(ordering)s)Tc                 C   s   g S Nr   r   r   r   r   <lambda>(       zArrayAgg.<lambda>zIn Django 5.0, ArrayAgg() will return None instead of an empty list if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default=Value([]) to keep the previous behavior.c                 C   s   t | jd jS )Nr   )r   Zsource_expressionsoutput_fieldr,   r   r   r   r/   0   s    zArrayAgg.output_fieldN)
r&   r'   r(   functiontemplateallow_distinctpropertyr!   r    r/   r   r   r   r   r
   "   s   c                   @   s   e Zd ZdZdS )r   ZBIT_ANDNr&   r'   r(   r0   r   r   r   r   r   5   s   c                   @   s   e Zd ZdZdS )r   ZBIT_ORNr4   r   r   r   r   r   9   s   c                   @   s   e Zd ZdZe ZdS )r   ZBOOL_ANDNr&   r'   r(   r0   r   r/   r   r   r   r   r   =   s   c                   @   s   e Zd ZdZe ZdS )r   ZBOOL_ORNr5   r   r   r   r   r   B   s   c                   @   s&   e Zd ZdZdZdZe ZdZdZ	dS )r   Z	JSONB_AGGr*   Tz[]zIn Django 5.0, JSONBAgg() will return None instead of an empty list if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default=Value('[]') to keep the previous behavior.N)
r&   r'   r(   r0   r1   r2   r   r/   r!   r    r   r   r   r   r   G   s   c                       s0   e Zd ZdZdZdZdZdZ fddZ  Z	S )r   Z
STRING_AGGr*   T zIn Django 5.0, StringAgg() will return None instead of an empty string if there are no rows. Pass default=None to opt into the new behavior and silence this warning or default=Value('') to keep the previous behavior.c                    s"   t t|}t j||f| d S r+   )r   strr   r   )r   r#   	delimiterr   Zdelimiter_exprr   r   r   r   e   s    zStringAgg.__init__)
r&   r'   r(   r0   r1   r2   r!   r    r   r)   r   r   r   r   r   W   s   )r   Zdjango.contrib.postgres.fieldsr   Zdjango.db.modelsr   r   r   r   Zdjango.utils.deprecationr   Zmixinsr	   __all__objectr   r   r
   r   r   r   r   r   r   r   r   r   r   <module>   s*         