
    hp                         d Z ddlmZ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y)z;Database functions that do comparisons or type conversions.    )FuncValuec                   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      h/var/www/html/ranktracker/api/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'.:bbTabKC*1V*;JATMMM!]+;.H7>(J[[][[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)	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   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_postgresql*   s#     t{{8Zl:Zl^kllr   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_oracle0   sR    ..0K?9H7>(J[[][[t{{8ZA=AAr   )__name__
__module____qualname____doc__functionr   r   r   r"   r)   r+   r-   __classcell__r   s   @r   r   r      s:    3H=H@EB	UmB Br   r   c                   0     e Zd ZdZdZ f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__<   .    {aJKK+//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 )N	TextFieldTO_NCLOB)r2   )	r	   r&   copyset_source_expressionsget_source_expressionsr   r
   r6   r   )r   r   r   r   cloner   r   s         r   r-   zCoalesce.as_oracleA   s     ..0K?IIKE((HLHcHcHe*:DZ*5*  50:WWWt{{8ZA=AA	*s   B)r.   r/   r0   r1   r2   r   r-   r3   r4   s   @r   r6   r6   8   s    DH0
	B 	Br   r6   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 )Nr9   z+Greatest must take at least two expressionsr:   r=   s      r   r   zGreatest.__init__W   r@   r   c                 *    t        |   ||fddi|S )zUse the MAX function on SQLite.r2   MAXr
   r"   r   s       r   r"   zGreatest.as_sqlite\       w :WWWWr   r.   r/   r0   r1   r2   r   r"   r3   r4   s   @r   rI   rI   M   s      H0
X Xr   rI   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 )Nr9   z(Least must take at least two expressionsr:   r=   s      r   r   zLeast.__init__k   s.    {aGHH+//r   c                 *    t        |   ||fddi|S )zUse the MIN function on SQLite.r2   MINrN   r   s       r   r"   zLeast.as_sqlitep   rO   r   rP   r4   s   @r   rR   rR   a   s      H0
X Xr   rR   c                   &     e Zd ZdZdZ fdZ xZS )NullIfNULLIFr9   c                     | j                         d   }t        |t              r|j                  t	        d      t        |   ||fi |S )Nr   z2Oracle does not allow Value(None) for expression1.)rF   
isinstancer   valuer<   r
   r   )r   r   r   r   expression1r   s        r   r-   zNullIf.as_oracley   sM    113A6k5)k.?.?.GQRRw~h
DmDDr   )r.   r/   r0   r2   arityr-   r3   r4   s   @r   rX   rX   u   s    HEE Er   rX   N)	r1   django.db.models.expressionsr   r   r   r6   rI   rR   rX    r   r   <module>ra      sR    A 40B4 0BfBt B*Xt X(XD X(ET Er   