o
    [h<                     @   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 )
	JSONArrayZ
JSON_ARRAYc                    &   |j jstdt j||fi |S )Nz6JSONFields are not supported on this database backend.)featuresZsupports_json_fieldr   superas_sqlselfcompiler
connectionextra_context	__class__ /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   Z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functionZJSONB_BUILD_ARRAY)copyset_source_expressionsr   r
   is_postgresql_16r   r   )r   r   r   r   Z
casted_objr   r   r   as_postgresql#   s,   zJSONArray.as_postgresqlc                 K      | j ||fddi|S Nr   ZCLOBr   r   r   r   r   	as_oracle@      zJSONArray.as_oracle)__name__
__module____qualname__r$   r   r   r   r   r(   r,   __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 )
JSONObjectZJSON_OBJECTc                    s8   g }|  D ]\}}|t||f qt j|  d S )N)itemsextendr   r   __init__)r   fieldsZexpressionskeyvaluer   r   r   r5   H   s   zJSONObject.__init__c                    r	   )Nz7JSONObject() is not supported on this database backend.)r
   Z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    r7   r8   r   r   r   r"   X   s     z#JSONObject.join.<locals>.<listcomp>)zipjoin)r   argspairsr   r   r   r>   U   s   "zJSONObject.joinc                K   s"   | j ||f| d| dd|S )Nz'%(function)s(%(expressions)s RETURNING r   )Z
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 )r9   r   )r   r   )r    indexr!   r   r   r   r"   i   s    z,JSONObject.as_postgresql.<locals>.<listcomp>r   r#   r$   ZJSONB_BUILD_OBJECT)
r%   r&   	enumerater   r
   r'   r   r   r2   r   )r   r   r   r   r%   r   r   r   r(   c   s,   

zJSONObject.as_postgresqlc                 K   r)   r*   r+   r   r   r   r   r,   {   r-   zJSONObject.as_oracle)r.   r/   r0   r$   r   r   r5   r   r>   r   r(   r,   r1   r   r   r   r   r2   D   s    	r2   N)Z	django.dbr   Zdjango.db.models.expressionsr   r   Zdjango.db.models.fieldsr   Zdjango.db.models.fields.jsonr   Zdjango.db.models.functionsr   r   r2   r   r   r   r   <module>   s    <