
    ih                         d Z ddlmZ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dS )z;Database functions that do comparisons or type conversions.    )FuncValue)_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                 N    t                                          ||           d S )N)output_field)super__init__)self
expressionr
   	__class__s      \/var/www/histauto/venv/lib/python3.11/site-packages/django/db/models/functions/comparison.pyr   zCast.__init__   s&    ,?????    c                 t    | j                             |          |d<    t                      j        ||fi |S )Ndb_type)r
   cast_db_typer   as_sqlr   compiler
connectionextra_contextr   s       r   r   zCast.as_sql   s>    #'#4#A#A*#M#Mi uww~h
DDmDDDr   c                 4   | j                             |          }|dv rFd} t                      j        ||fd|i|\  }}|dk    rdnd}|                    d|           ||fS |dk    rd	} t                      j        ||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7***7H(%''.* /7;H KC +2V*;*;JJATMMM!]+++;.H!577>* /7;H   t{8ZAA=AAAr   c                     d }| j                                         }|dk    rd}n|dk    r	|j        rd} | j        ||fd|i|S )N
FloatFieldz(%(expressions)s + 0.0)	JSONFieldz"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&   sf    '99;;,&&0HHK''J,G';Ht{8ZTT(TmT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_postgresql1   s9     t{
 
 6
 	
 
 	
r   c                     | j                                         dk    rd} t                      j        ||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<   st    ..00K??9H!577>* /7;H   t{8ZAA=AAAr   )__name__
__module____qualname____doc__functionr   r   r   r#   r*   r,   r.   __classcell__r   s   @r   r   r      s        33H=H@ @ @ @ @E E E E EB B B B B$	U 	U 	U	
 	
 	
B B B B B B B B Br   r   c                   F     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                 ~    t          |          dk     rt          d           t                      j        |i | d S )N   z+Coalesce must take at least two expressionslen
ValueErrorr   r   r   expressionsextrar   s      r   r   zCoalesce.__init__K   G    {aJKKK+//////r   c                 `    |                                  D ]}|j        }|t          u s||c S d S )N)get_source_expressionsempty_result_set_valueNotImplemented)r   r   results      r   rD   zCoalesce.empty_result_set_valueP   sH    5577 	 	J6F''6+= ,>tr   c                 *   | j                                         dk    rg|                                 }|                    d |                                 D                         t          t          |          j        ||fi |S  | j        ||fi |S )N	TextFieldc                 0    g | ]}t          |d           S )TO_NCLOB)r3   )r   ).0r   s     r   
<listcomp>z&Coalesce.as_oracle.<locals>.<listcomp>^   s5       " j999  r   )r
   r'   copyset_source_expressionsrC   r   r7   r   )r   r   r   r   cloner   s        r   r.   zCoalesce.as_oracleX   s     ..00K??IIKKE(( &*&A&A&C&C     155))0:WWWWWt{8ZAA=AAAr   )
r/   r0   r1   r2   r3   r   propertyrD   r.   r4   r5   s   @r   r7   r7   F   s        DDH0 0 0 0 0
   XB B B B B B B B Br   r7   c                   J     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                             |          st          d|z            || _        t	                                          |           d S )NzInvalid collation name: %r.)collation_rematchr=   	collationr   r   )r   r   rW   r   s      r   r   zCollate.__init__o   s^     	Hd/55i@@ 	H:YFGGG"$$$$$r   c                     |                     d|j                            | j                              t	                      j        ||fi |S )NrW   )
setdefaultops
quote_namerW   r   r   r   s       r   r   zCollate.as_sqlu   sK      jn.G.G.W.WXXXuww~h
DDmDDDr   )r/   r0   r1   r3   r   allowed_defaultr   rU   r   r   r4   r5   s   @r   rR   rR   g   s{        H;HO $#K00L% % % % %E E E E E E E E Er   rR   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                 ~    t          |          dk     rt          d           t                      j        |i | d S )Nr:   z+Greatest must take at least two expressionsr;   r>   s      r   r   zGreatest.__init__   rA   r   c                 >     t                      j        ||fddi|S )zUse the MAX function on SQLite.r3   MAXr   r#   r   s       r   r#   zGreatest.as_sqlite   )     uww :WWWWWWr   r/   r0   r1   r2   r3   r   r#   r4   r5   s   @r   r^   r^   z   sk          H0 0 0 0 0
X X X X X X X X Xr   r^   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                 ~    t          |          dk     rt          d           t                      j        |i | d S )Nr:   z(Least must take at least two expressionsr;   r>   s      r   r   zLeast.__init__   sG    {aGHHH+//////r   c                 >     t                      j        ||fddi|S )zUse the MIN function on SQLite.r3   MINrc   r   s       r   r#   zLeast.as_sqlite   rd   r   re   r5   s   @r   rg   rg      sk          H0 0 0 0 0
X X X X X X X X Xr   rg   c                   &     e Zd ZdZdZ fdZ xZS )NullIfNULLIFr:   c                     |                                  d         }t          |t                    r|j        t	          d           t                      j        ||fi |S )Nr   z2Oracle does not allow Value(None) for expression1.)rC   
isinstancer   valuer=   r   r   )r   r   r   r   expression1r   s        r   r.   zNullIf.as_oracle   sc    1133A6k5)) 	Sk.?.GQRRRuww~h
DDmDDDr   )r/   r0   r1   r3   arityr.   r4   r5   s   @r   rm   rm      sK        HEE E E E E E E E Er   rm   N)r2   django.db.models.expressionsr   r   django.utils.regex_helperr   r   r7   rR   r^   rg   rm    r   r   <module>rw      so   A A 4 4 4 4 4 4 4 4 6 6 6 6 6 6<B <B <B <B <B4 <B <B <B~B B B B Bt B B BBE E E E Ed E E E&X X X X Xt X X X*X X X X XD X X X*E E E E ET E E E E Er   