o
    "7h<                     @   sd   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 G dd deZG dd	 d	eZd
S )    )NotSupportedError)FuncValue)	TextField)	JSONField)Castc                       s>   e Zd ZdZe Z fddZdd Zdd Zdd	 Z	  Z
S )
	JSONArray
JSON_ARRAYc                    &   |j jstdt j||fi |S )Nz6JSONFields are not supported on this database backend.)featuressupports_json_fieldr   superas_sqlselfcompiler
connectionextra_context	__class__ t/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/django/db/models/functions/json.pyr      
   zJSONArray.as_sqlc                K   s>   t |  dkr
dnd}| j||fdd| d| di|S )Nr   zNULL ON NULL templatez%(function)s(%(expressions)s z RETURNING ))lenget_source_expressionsr   )r   r   r   	returningr   null_on_nullr   r   r   	as_native   s   zJSONArray.as_nativec                 K   sX   |   }|dd | D  |jjr |j||fddi|S |j||fddi|S )Nc                 S   s&   g | ]}t |tr|nt||jqS r   )
isinstancer   output_field).0
expressionr   r   r   
<listcomp>)   s    
z+JSONArray.as_postgresql.<locals>.<listcomp>r   JSONBfunctionJSONB_BUILD_ARRAY)copyset_source_expressionsr   r   is_postgresql_16r    r   )r   r   r   r   
casted_objr   r   r   as_postgresql#   s,   zJSONArray.as_postgresqlc                 K      | j ||fddi|S Nr   CLOBr    r   r   r   r   	as_oracle@      zJSONArray.as_oracle)__name__
__module____qualname__r'   r   r"   r   r    r-   r2   __classcell__r   r   r   r   r      s    r   c                       sV   e Zd ZdZe Z fddZ fddZdd Zdd	 Z	 fd
dZ
dd Z  ZS )
JSONObjectJSON_OBJECTc                    s8   g }|  D ]\}}|t||f qt j|  d S )N)itemsextendr   r   __init__)r   fieldsexpressionskeyvaluer   r   r   r<   H   s   zJSONObject.__init__c                    r
   )Nz7JSONObject() is not supported on this database backend.)r   has_json_object_functionr   r   r   r   r   r   r   r   N   r   zJSONObject.as_sqlc                 C   s6   t |d d d |dd d dd}ddd |D S )N      T)strictz, c                 S   s    g | ]\}}d | d| qS )(z) VALUE r   )r#   r?   r@   r   r   r   r%   X   s     z#JSONObject.join.<locals>.<listcomp>)zipjoin)r   argspairsr   r   r   rG   U   s   "zJSONObject.joinc                K   s"   | j ||f| d| dd|S )Nz'%(function)s(%(expressions)s RETURNING r   )
arg_joinerr   )r   )r   r   r   r   r   r   r   r   r    Z   s   
zJSONObject.as_nativec                    sb   |   }|dd t| D  |jjr"|j||fddi|S tt|j	||fddi|S )Nc                 S   s,   g | ]\}}|d  dkrt |t n|qS )rB   r   )r   r   )r#   indexr$   r   r   r   r%   i   s    z,JSONObject.as_postgresql.<locals>.<listcomp>r   r&   r'   JSONB_BUILD_OBJECT)
r)   r*   	enumerater   r   r+   r    r   r8   r   )r   r   r   r   r)   r   r   r   r-   c   s,   

zJSONObject.as_postgresqlc                 K   r.   r/   r1   r   r   r   r   r2   {   r3   zJSONObject.as_oracle)r4   r5   r6   r'   r   r"   r<   r   rG   r    r-   r2   r7   r   r   r   r   r8   D   s    	r8   N)	django.dbr   django.db.models.expressionsr   r   django.db.models.fieldsr   django.db.models.fields.jsonr   django.db.models.functionsr   r   r8   r   r   r   r   <module>   s    <