
    0~h+                        d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ  G d d      Z G d d	      Z G d
 d      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 G d de      Z G d de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 G d* d+e      Z  G d, d-eee      Z! G d. d/eee      Z" G d0 d1eeee      Z# G d2 d3eeee      Z$ G d4 d5eeee      Z% G d6 d7e      Z& G d8 d9e      Z' G d: d;e      Z( G d< d=e      Z)y>)?    NotSupportedError)FuncValue)	CharFieldIntegerField	TextField)CastCoalesce)	Transformc                        e Zd Z fdZ xZS )MySQLSHA2Mixinc                 J    t        |   ||fdd| j                  dd  z  i|S )NtemplatezSHA2(%%(expressions)s, %s)   )superas_sqlfunctionselfcompiler
connectionextra_context	__class__s       h/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/django/db/models/functions/text.pyas_mysqlzMySQLSHA2Mixin.as_mysql	   s>    w~
 2DMM!"4EE
 	
 	
    )__name__
__module____qualname__r   __classcell__r   s   @r   r   r      s    
 
r   r   c                        e Zd Z fdZ xZS )OracleHashMixinc                 *    t        |   ||fddi|S )Nr   zcLOWER(RAWTOHEX(STANDARD_HASH(UTL_I18N.STRING_TO_RAW(%(expressions)s, 'AL32UTF8'), '%(function)s')))r   r   r   s       r   	as_oraclezOracleHashMixin.as_oracle   s/    w~
B	
 
 	
r   )r   r   r    r'   r!   r"   s   @r   r$   r$      s    	
 	
r   r$   c                        e Zd Z fdZ xZS )PostgreSQLSHAMixinc                 \    t        |   ||fd| j                  j                         d|S )Nz6ENCODE(DIGEST(%(expressions)s, '%(function)s'), 'hex'))r   r   )r   r   r   lowerr   s       r   as_postgresqlz PostgreSQLSHAMixin.as_postgresql    s?    w~
 N]]((*	

 
 	
r   )r   r   r    r,   r!   r"   s   @r   r)   r)      s    
 
r   r)   c                   H     e Zd ZdZdZ e       Z fdZ fdZ fdZ	 xZ
S )ChrCHRchrc                 ,    t        |   ||fddd|S )NCHARz)%(function)s(%(expressions)s USING utf16)r   r   r&   r   s       r   r   zChr.as_mysql/   s1    w~
 @	

 
 	
r   c                 *    t        |   ||fddi|S )Nr   z,%(function)s(%(expressions)s USING NCHAR_CS)r&   r   s       r   r'   zChr.as_oracle8   s/    w~
 D
 	
 	
r   c                 *    t        |   ||fddi|S )Nr   r2   r&   r   s       r   	as_sqlitezChr.as_sqlite@   s    w~h
UVU}UUr   )r   r   r    r   lookup_namer   output_fieldr   r'   r6   r!   r"   s   @r   r.   r.   *   s*    HK;L

V Vr   r.   c                   @     e Zd ZdZdZ fdZ fdZ fdZd Z xZ	S )
ConcatPairz
    Concatenate two arguments together. This is used by `Concat` because not
    all backend databases support more than two arguments.
    CONCATc                 T    | j                         }t        t        |  ||fddd|S )N%(expressions)sz || )r   
arg_joiner)coalescer   r:   r   )r   r   r   r   	coalescedr   s        r   r6   zConcatPair.as_sqliteL   s?    MMO	Z2
 '	

 
 	
r   c           
          | j                         }|j                  |j                         D cg c]  }t        |t	                      c}       t        t        |  ||fi |S c c}w N)copyset_source_expressionsget_source_expressionsr
   r	   r   r:   r   )r   r   r   r   rC   
expressionr   s         r   r,   zConcatPair.as_postgresqlV   sq    yy{## #'"="="? Z-	
 Z-
 
 	
s   A&c                 ,    t        |   ||fddd|S )N	CONCAT_WSz!%(function)s('', %(expressions)s)r3   r&   r   s       r   r   zConcatPair.as_mysqld   s1    w~
 !8	

 
 	
r   c                     | j                         }|j                  |j                         D cg c]  }t        |t	        d             c}       |S c c}w )N )rC   rD   rE   r   r   )r   crF   s      r   r?   zConcatPair.coalescen   sS    IIK	   #$":":"< U2Y/	
 s   A)
r   r   r    __doc__r   r6   r,   r   r?   r!   r"   s   @r   r:   r:   D   s#    
 H


	r   r:   c                   0     e Zd ZdZdZdZ fdZd Z xZS )Concatz
    Concatenate text fields together. Backends that result in an entire
    null expression when any arguments are null will wrap each argument in
    coalesce functions to ensure a non-null result.
    Nr=   c                 z    t        |      dk  rt        d      | j                  |      }t        |   |fi | y )N   z)Concat must take at least two expressions)len
ValueError_pairedr   __init__)r   expressionsextrapairedr   s       r   rT   zConcat.__init__   s<    {aHIIk*)5)r   c                 p    t        |      dk(  rt        | S t        |d   | j                  |dd              S )NrP   r      )rQ   r:   rS   )r   rU   s     r   rS   zConcat._paired   s<     {q {+++a.$,,{12*GHHr   )	r   r   r    rL   r   r   rT   rS   r!   r"   s   @r   rN   rN   z   s     H H*Ir   rN   c                   F     e Zd ZdZdZ e       Z fdZd Zd Z	d Z
 xZS )LeftLEFTrP   c                 `    t        |d      s|dk  rt        d      t        |   ||fi | y)z
        expression: the name of a field, or an expression returning a string
        length: the number of characters to return from the start of the string
        resolve_expressionrY   z 'length' must be greater than 0.NhasattrrR   r   rT   )r   rF   lengthrV   r   s       r   rT   zLeft.__init__   s7    
 v34z !CDDV5u5r   c                 b    t        | j                  d   t        d      | j                  d         S )Nr   rY   Substrsource_expressionsr   r   s    r   
get_substrzLeft.get_substr   s,    d--a0%(D<S<STU<VWWr   c                 F     | j                         j                  ||fi |S rB   )rg   r'   r   r   r   r   s       r   r'   zLeft.as_oracle   #    *t **8ZQ=QQr   c                 F     | j                         j                  ||fi |S rB   )rg   r6   ri   s       r   r6   zLeft.as_sqlite   rj   r   )r   r   r    r   arityr   r8   rT   rg   r'   r6   r!   r"   s   @r   r[   r[      s+    HE;L6XRRr   r[   c                   8     e Zd ZdZdZdZ e       Z fdZ xZ	S )Lengthz2Return the number of characters in the expression.LENGTHra   c                 *    t        |   ||fddi|S )Nr   CHAR_LENGTHr&   r   s       r   r   zLength.as_mysql   s)    w~j
+8
<I
 	
r   )
r   r   r    rL   r   r7   r   r8   r   r!   r"   s   @r   rn   rn      s!    <HK>L
 
r   rn   c                       e Zd ZdZdZy)LowerLOWERr+   Nr   r   r    r   r7    r   r   rs   rs          HKr   rs   c                   @     e Zd ZdZ e       Z ed      f fd	Z xZS )LPadLPAD c                 f    t        |d      s||dk  rt        d      t        |   |||fi | y )Nr^   r   z''length' must be greater or equal to 0.r_   )r   rF   ra   	fill_textrV   r   s        r   rT   zLPad.__init__   s=     45"
FGGVY@%@r   )	r   r   r    r   r   r8   r   rT   r!   r"   s   @r   ry   ry      s"    H;L5:3Z A Ar   ry   c                       e Zd ZdZdZy)LTrimLTRIMltrimNru   rv   r   r   r   r      rw   r   r   c                       e Zd Zd ZdZy)MD5md5Nru   rv   r   r   r   r      s    HKr   r   c                   >     e Zd ZdZdZ e       Z fdZ fdZ xZ	S )OrdASCIIordc                 *    t        |   ||fddi|S )Nr   ORDr&   r   s       r   r   zOrd.as_mysql   s    w~h
TUTmTTr   c                 *    t        |   ||fddi|S )Nr   UNICODEr&   r   s       r   r6   zOrd.as_sqlite   s    w~h
XYX-XXr   )
r   r   r    r   r7   r   r8   r   r6   r!   r"   s   @r   r   r      s&    HK>LUY Yr   r   c                   6     e Zd ZdZ e       Z fdZd Z xZS )RepeatREPEATc                 d    t        |d      s||dk  rt        d      t        |   ||fi | y )Nr^   r   z''number' must be greater or equal to 0.r_   )r   rF   numberrV   r   s       r   rT   zRepeat.__init__   s;     45"
FGGV5u5r   c                     | j                   \  }}|d nt        |      |z  }t        |||      } |j                  ||fi |S rB   )re   rn   RPadr   )r   r   r   r   rF   r   ra   rpads           r   r'   zRepeat.as_oracle   sM    !44
FVJ-?&-HJ
3t{{8ZA=AAr   )	r   r   r    r   r   r8   rT   r'   r!   r"   s   @r   r   r      s    H;L6Br   r   c                   2     e Zd ZdZ ed      f fd	Z xZS )ReplaceREPLACErJ   c                 *    t        |   |||fi | y rB   )r   rT   )r   rF   textreplacementrV   r   s        r   rT   zReplace.__init__   s    T;@%@r   )r   r   r    r   r   rT   r!   r"   s   @r   r   r      s    H5:2Y A Ar   r   c                   &     e Zd ZdZdZ fdZ xZS )ReverseREVERSEreversec                 >    t        |   ||fddi|\  }}||dz  fS )Nr   z(SELECT LISTAGG(s) WITHIN GROUP (ORDER BY n DESC) FROM (SELECT LEVEL n, SUBSTR(%(expressions)s, LEVEL, 1) s FROM DUAL CONNECT BY LEVEL <= LENGTH(%(expressions)s)) GROUP BY %(expressions)s)r   r&   )r   r   r   r   sqlparamsr   s         r   r'   zReverse.as_oracle  sA     gn

,	

 

V FQJr   )r   r   r    r   r7   r'   r!   r"   s   @r   r   r      s    HK r   r   c                       e Zd ZdZd Zy)RightRIGHTc                     t        | j                  d   | j                  d   t        d      z  | j                  d         S )Nr   rY   rc   rf   s    r   rg   zRight.get_substr  sB    ##A&##A&r2##A&
 	
r   N)r   r   r    r   rg   rv   r   r   r   r     s    H
r   r   c                       e Zd ZdZy)r   RPADN)r   r   r    r   rv   r   r   r   r     s    Hr   r   c                       e Zd ZdZdZy)RTrimRTRIMrtrimNru   rv   r   r   r   r   !  rw   r   r   c                       e Zd Zd ZdZy)SHA1sha1Nru   rv   r   r   r   r   &      HKr   r   c                       e Zd Zd ZdZd Zy)SHA224sha224c                     t        d      )Nz"SHA224 is not supported on Oracle.r   ri   s       r   r'   zSHA224.as_oracle/  s     DEEr   N)r   r   r    r   r7   r'   rv   r   r   r   r   +  s    HKFr   r   c                       e Zd Zd ZdZy)SHA256sha256Nru   rv   r   r   r   r   3      HKr   r   c                       e Zd Zd ZdZy)SHA384sha384Nru   rv   r   r   r   r   8  r   r   r   c                       e Zd Zd ZdZy)SHA512sha512Nru   rv   r   r   r   r   =  r   r   r   c                   8     e Zd ZdZdZdZ e       Z fdZ xZ	S )StrIndexz
    Return a positive integer corresponding to the 1-indexed position of the
    first occurrence of a substring inside another string, or 0 if the
    substring is not found.
    INSTRrP   c                 *    t        |   ||fddi|S )Nr   STRPOSr&   r   s       r   r,   zStrIndex.as_postgresqlM      w~h
WXWWWr   )
r   r   r    rL   r   rl   r   r8   r,   r!   r"   s   @r   r   r   B  s'     HE>LX Xr   r   c                   F     e Zd ZdZ e       Zd fd	Z fdZ fdZ xZ	S )rd   	SUBSTRINGc                     t        |d      s|dk  rt        d      ||g}||j                  |       t        |   |i | y)z
        expression: the name of a field, or an expression returning a string
        pos: an integer > 0, or an expression returning an integer
        length: an optional number of characters to return
        r^   rY   z'pos' must be greater than 0N)r`   rR   appendr   rT   )r   rF   posra   rV   rU   r   s         r   rT   zSubstr.__init__U  sS     s01Qw !?@@!3'v&+//r   c                 *    t        |   ||fddi|S Nr   SUBSTRr&   r   s       r   r6   zSubstr.as_sqlitec  r   r   c                 *    t        |   ||fddi|S r   r&   r   s       r   r'   zSubstr.as_oraclef  r   r   rB   )
r   r   r    r   r   r8   rT   r6   r'   r!   r"   s   @r   rd   rd   Q  s&    H;L0XX Xr   rd   c                       e Zd ZdZdZy)TrimTRIMtrimNru   rv   r   r   r   r   j  r   r   r   c                       e Zd ZdZdZy)UpperUPPERupperNru   rv   r   r   r   r   o  rw   r   r   N)*	django.dbr   django.db.models.expressionsr   r   django.db.models.fieldsr   r   r	   django.db.models.functionsr
   r   django.db.models.lookupsr   r   r$   r)   r.   r:   rN   r[   rn   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   rv   r   r   <module>r      s   ' 4 F F 5 .
 


 


 
V) V43 3lIT I2R4 R2

Y 

I 
A4 AI 
/9 
	Y) 	YBT B(Ad Ai *
D 
4 I 
?.	 
F^/ F^_.@) 
^_.@) 
^_.@) 
Xt XXT X29 
I r   