
    sgh<                     p    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e      Z G d d	e      Zy
)    )NotSupportedError)FuncValue)	TextField)	JSONField)Castc                   B     e Zd ZdZ e       Z fdZd Zd Zd Z	 xZ
S )	JSONArray
JSON_ARRAYc                 h    |j                   j                  st        d      t        |   ||fi |S )Nz6JSONFields are not supported on this database backend.)featuressupports_json_fieldr   superas_sqlselfcompiler
connectionextra_context	__class__s       c/var/www/enzed_healthcare/enzed_env/lib/python3.12/site-packages/django/db/models/functions/json.pyr   zJSONArray.as_sql   s:    ""66#H  w~h
DmDD    c          	      |    t        | j                               dkD  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_nulls         r   	as_nativezJSONArray.as_native   s^    
 *-T-H-H-J)Ka)O~UWt{{
 0~[STU	
 
 	
r   c           	      V   | j                         }|j                  |j                         D cg c]*  }t        |t              r|nt	        ||j
                        , c}       |j                  j                  r |j                  ||fddi|S  |j                  ||fddi|S c c}w )Nr   JSONBfunctionJSONB_BUILD_ARRAY)
copyset_source_expressionsr   
isinstancer   output_fieldr   is_postgresql_16r!   r   )r   r   r   r   
casted_obj
expressions         r   as_postgresqlzJSONArray.as_postgresql#   s     YY[
)) #-"C"C"E  "*d3 j**A*ABC
	
 //':''*07;H  !z  
 )
 	
 	
!s   /B&c                 .     | j                   ||fddi|S Nr   CLOBr!   r   r   r   r   s       r   	as_oraclezJSONArray.as_oracle@       t~~h
VfVVVr   )__name__
__module____qualname__r$   r   r)   r   r!   r-   r3   __classcell__r   s   @r   r
   r
      s%    H;LE
 
:Wr   r
   c                   V     e Zd ZdZ e       Z fdZ fdZd Zd Z	 fdZ
d Z xZS )
JSONObjectJSON_OBJECTc                     g }|j                         D ]!  \  }}|j                  t        |      |f       # t        |   |  y )N)itemsextendr   r   __init__)r   fieldsexpressionskeyvaluer   s        r   r@   zJSONObject.__init__H   sE     ,,. 	4JCc
E23	4+&r   c                 h    |j                   j                  st        d      t        |   ||fi |S )Nz7JSONObject() is not supported on this database backend.)r   has_json_object_functionr   r   r   r   s       r   r   zJSONObject.as_sqlN   s:    "";;#I  w~h
DmDDr   c           
          t        |d d d   |dd d   d      }dj                  |D cg c]  \  }}d| d|  c}}      S c c}}w )N      T)strictz, (z) VALUE )zipjoin)r   argspairsrC   rD   s        r   rM   zJSONObject.joinU   sP    D1ItADqDz$7yyUKzsEAcU(5'2KLLKs   A
c                8     | j                   ||f| d| dd|S )Nz'%(function)s(%(expressions)s RETURNING r   )
arg_joinerr   )r   )r   r   r   r   r   s        r   r!   zJSONObject.as_nativeZ   s;    t{{
 >ykK	

 
 	
r   c                 d   | j                         }|j                  t        |j                               D cg c]#  \  }}|dz  dk(  rt	        |t                     n|% c}}       |j                  j                  r |j                  ||fddi|S t        t        |.  ||fddi|S c c}}w )NrH   r   r   r#   r$   JSONB_BUILD_OBJECT)r&   r'   	enumerater   r   r   r   r*   r!   r   r;   r   )r   r   r   r   r&   indexr,   r   s          r   r-   zJSONObject.as_postgresqlc   s     yy{## *343N3N3P)Q%E: 27aZ-ZO	
 //!4>>*07;H  Z-
 *
 	
 	
s   (B,
c                 .     | j                   ||fddi|S r/   r1   r2   s       r   r3   zJSONObject.as_oracle{   r4   r   )r5   r6   r7   r$   r   r)   r@   r   rM   r!   r-   r3   r8   r9   s   @r   r;   r;   D   s0    H;L'EM


0Wr   r;   N)	django.dbr   django.db.models.expressionsr   r   django.db.models.fieldsr   django.db.models.fields.jsonr   django.db.models.functionsr   r
   r;    r   r   <module>r]      s1    ' 4 - 2 +9W 9Wx8W 8Wr   