
    g#                         d Z 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 G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)z;Database functions that do comparisons or type conversions.    )NotSupportedError)FuncValue)	TextField)	JSONField)_lazy_re_compilec                   T     e Zd ZdZdZdZ fdZ fdZ fdZd Z	d Z
 fd	Z xZS )
Castz)Coerce an expression to a new field type.CASTz,%(function)s(%(expressions)s AS %(db_type)s)c                 (    t         |   ||       y )N)output_field)super__init__)self
expressionr   	__class__s      }/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/models/functions/comparison.pyr   zCast.__init__   s    ,?    c                 b    | j                   j                  |      |d<   t        |   ||fi |S )Ndb_type)r   cast_db_typer   as_sqlr   compiler
connectionextra_contextr   s       r   r   zCast.as_sql   s4    #'#4#4#A#A*#Mi w~h
DmDDr   c                    | j                   j                  |      }|dv r7d}t        	|   ||fd|i|\  }}|dk(  rdnd}|j	                  d|       ||fS |dk(  rd	}t        	|   ||fd|i|S  | j                  ||fi |S )
N>   timedatetimezstrftime(%%s, %(expressions)s)templater   z%H:%M:%fz%Y-%m-%d %H:%M:%fr   datezdate(%(expressions)s))r   r   r   r   insert)
r   r   r   r   r   r    sqlparamsformat_stringr   s
            r   	as_sqlitezCast.as_sqlite   s    ##++J7**7H'.*/7;HKC +2V*;JATMMM!]+;.H7>*/7;H  t{{8ZA=AAr   c                     d }| j                   j                         }|dk(  rd}n|dk(  r|j                  rd} | j                  ||fd|i|S )N
FloatFieldz(%(expressions)s + 0.0)r   z"JSON_EXTRACT(%(expressions)s, '$')r    )r   get_internal_typemysql_is_mariadbr   )r   r   r   r   r    output_types         r   as_mysqlzCast.as_mysql)   sZ    ''99;,&0HK'J,G,G;Ht{{8ZT(TmTTr   c                 .     | j                   ||fddi|S )Nr    z(%(expressions)s)::%(db_type)sr   r   r   r   r   s       r   as_postgresqlzCast.as_postgresql4   s1     t{{
 6
 	
 	
r   c                     | j                   j                         dk(  rd}t        |   ||fd|i|S  | j                  ||fi |S )Nr   z JSON_QUERY(%(expressions)s, '$')r    )r   r)   r   r   )r   r   r   r   r    r   s        r   	as_oraclezCast.as_oracle?   s_    ..0K?9H7>*/7;H  t{{8ZA=AAr   )__name__
__module____qualname____doc__functionr    r   r   r&   r,   r0   r2   __classcell__r   s   @r   r
   r
   
   s9    3H=H@EB$	U	
B Br   r
   c                   @     e Zd ZdZdZ fdZed        Z fdZ xZ	S )Coalescez:Return, from left to right, the first non-null expression.COALESCEc                 V    t        |      dk  rt        d      t        |   |i | y )N   z+Coalesce must take at least two expressionslen
ValueErrorr   r   r   expressionsextrar   s      r   r   zCoalesce.__init__N   .    {aJKK+//r   c                 b    | j                         D ]  }|j                  }|t        u s||c S  y N)get_source_expressionsempty_result_set_valueNotImplemented)r   r   results      r   rI   zCoalesce.empty_result_set_valueS   s7    557J66F'6+= 8 r   c           	      *   | j                   j                         dk(  r]| j                         }|j                  | j	                         D cg c]  }t        |d       c}       t        t        |"  ||fi |S  | j                  ||fi |S c c}w )Nr   TO_NCLOB)r7   )	r   r)   copyset_source_expressionsrH   r   r   r;   r   )r   r   r   r   cloner   r   s         r   r2   zCoalesce.as_oracle[   s     ..0K?IIKE(( '+&A&A&C&C
 j9&C 50:WWWt{{8ZA=AAs   B)
r3   r4   r5   r6   r7   r   propertyrI   r2   r8   r9   s   @r   r;   r;   I   s0    DH0
  B Br   r;   c                   D     e Zd ZdZdZdZ ed      Z fdZ fdZ	 xZ
S )CollateCOLLATEz*%(expressions)s %(function)s %(collation)sFz^[\w-]+$c                     |r| j                   j                  |      st        d|z        || _        t        |   |       y )NzInvalid collation name: %r.)collation_rematchrA   	collationr   r   )r   r   rX   r   s      r   r   zCollate.__init__r   s>    d//55i@:YFGG"$r   c                     |j                  d|j                  j                  | j                               t	        |   ||fi |S )NrX   )
setdefaultops
quote_namerX   r   r   r   s       r   r   zCollate.as_sqlx   s<      jnn.G.G.WXw~h
DmDDr   )r3   r4   r5   r7   r    allowed_defaultr   rV   r   r   r8   r9   s   @r   rS   rS   j   s/    H;HO $K0L%E Er   rS   c                   0     e Zd ZdZdZ fdZ fdZ xZS )Greatestz
    Return the maximum expression.

    If any expression is null the return value is database-specific:
    On PostgreSQL, the maximum not-null expression is returned.
    On MySQL, Oracle, and SQLite, if any expression is null, null is returned.
    GREATESTc                 V    t        |      dk  rt        d      t        |   |i | y )Nr>   z+Greatest must take at least two expressionsr?   rB   s      r   r   zGreatest.__init__   rE   r   c                 *    t        |   ||fddi|S )zUse the MAX function on SQLite.r7   MAXr   r&   r   s       r   r&   zGreatest.as_sqlite       w :WWWWr   r3   r4   r5   r6   r7   r   r&   r8   r9   s   @r   r_   r_   }   s      H0
X Xr   r_   c                   P     e Zd ZdZ e       Z fdZ fdZd Z fdZ	d Z
 xZS )
JSONObjectJSON_OBJECTc                     g }|j                         D ]!  \  }}|j                  t        |      |f       # t        |   |  y rG   )itemsextendr   r   r   )r   fieldsrC   keyvaluer   s        r   r   zJSONObject.__init__   s@     ,,.JCc
E23 )+&r   c                 h    |j                   j                  st        d      t        |   ||fi |S )Nz7JSONObject() is not supported on this database backend.)featureshas_json_object_functionr   r   r   r   s       r   r   zJSONObject.as_sql   s:    "";;#I  w~h
DmDDr   c                V     G d d      } | j                   ||f |       d| dd|S )Nc                       e Zd Zd Zy)'JSONObject.as_native.<locals>.ArgJoinerc                     t        |d d d   |dd d   d      }dj                  |D cg c]  }dj                  |       c}      S c c}w )Nr>      T)strictz, z VALUE )zipjoin)r   argspairspairs       r   rz   z,JSONObject.as_native.<locals>.ArgJoiner.join   sL    D1ItADqDz$?yy5!I54).."65!IJJ!Is   A	N)r3   r4   r5   rz    r   r   	ArgJoinerru      s    Kr   r   z'%(function)s(%(expressions)s RETURNING ))
arg_joinerr    r.   )r   r   r   	returningr   r   s         r   	as_nativezJSONObject.as_native   sK    	K 	K
 t{{
 !{>ykK	

 
 	
r   c                    |j                   j                  r|j                   j                  r~| j                         }|j	                  t        |j                               D cg c]#  \  }}|dz  dk(  rt        |t                     n|% c}}       t        t        |.  ||fddi|S  | j                  ||fddi|S c c}}w )Nr>   r   r7   JSONB_BUILD_OBJECTr   JSONB)rq   is_postgresql_16uses_server_side_bindingrN   rO   	enumeraterH   r
   r   r   rh   r   r   )r   r   r   r   rN   indexr   r   s          r   r0   zJSONObject.as_postgresql   s    ##44"";;99;D'' .7t7R7R7T-U-U)z 6;QY!^DY[1S-U T1 .  	  t~~h
WgWWWs   %(C
c                 .     | j                   ||fddi|S )Nr   CLOB)r   r/   s       r   r2   zJSONObject.as_oracle   s    t~~h
VfVVVr   )r3   r4   r5   r7   r   r   r   r   r   r0   r2   r8   r9   s   @r   rh   rh      s+    H;L'E
X(Wr   rh   c                   0     e Zd ZdZdZ fdZ fdZ xZS )Leastz
    Return the minimum expression.

    If any expression is null the return value is database-specific:
    On PostgreSQL, return the minimum not-null expression.
    On MySQL, Oracle, and SQLite, if any expression is null, return null.
    LEASTc                 V    t        |      dk  rt        d      t        |   |i | y )Nr>   z(Least must take at least two expressionsr?   rB   s      r   r   zLeast.__init__   s.    {aGHH+//r   c                 *    t        |   ||fddi|S )zUse the MIN function on SQLite.r7   MINrd   r   s       r   r&   zLeast.as_sqlite   re   r   rf   r9   s   @r   r   r      s      H0
X Xr   r   c                   &     e Zd ZdZdZ fdZ xZS )NullIfNULLIFr>   c                     | j                         d   }t        |t              r|j                  t	        d      t        |   ||fi |S )Nr   z2Oracle does not allow Value(None) for expression1.)rH   
isinstancer   ro   rA   r   r   )r   r   r   r   expression1r   s        r   r2   zNullIf.as_oracle   sM    113A6k5)k.?.?.GQRRw~h
DmDDr   )r3   r4   r5   r7   arityr2   r8   r9   s   @r   r   r      s    HEE Er   r   N)r6   	django.dbr   django.db.models.expressionsr   r   django.db.models.fieldsr   django.db.models.fields.jsonr   django.utils.regex_helperr   r
   r;   rS   r_   rh   r   r   r~   r   r   <module>r      s|    A ' 4 - 2 6<B4 <B~Bt BBEd E&Xt X*4W 4WnXD X*ET Er   