
    4hhv                        S SK r S SKrS SKrS SKJrJr  S SKJrJ	r	  SSK
JrJr  SSK
Jr  S rS rS	 rS
 rS rS rS rS rS rS rS r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S  S!5      r  " S" S#5      r! " S$ S%\RD                  5      r# " S& S'5      r$ " S( S)\%5      r&\RN                  " \RP                  S*:  S+5       " S, S-\RD                  5      5       r) " S. S/\RD                  5      r* " S0 S1\RD                  5      r+ " S2 S3\+5      r, " S4 S5\+5      r- " S6 S7\+5      r.\/S8:X  a  \R`                  " 5         gg)9    N)Mockpatch)
bigmemtest
gc_collect   )cx_limitmemory_database)with_tracebacksc                      g)Nfoo r       M/opt/python-3.13.8/usr/lib/python3.13/test/test_sqlite3/test_userfunctions.pyfunc_returntextr   #       r   c                      g)N1 2r   r   r   r   func_returntextwithnullr   %   s    r   c                      g)Nbarr   r   r   r   func_returnunicoder   '   r   r   c                      gN*   r   r   r   r   func_returnintr   )   s    r   c                      g)NQ	@r   r   r   r   func_returnfloatr   +       r   c                      g Nr   r   r   r   func_returnnullr"   -   r   r   c                      g)N   blobr   r   r   r   func_returnblobr%   /   s    r   c                      g)N        r   r   r   r   func_returnlonglongr(   1   r   r   c                      SS-    g N   r   r   r   r   r   func_raiseexceptionr,   3   s	    aCr   c                      [         er!   )MemoryErrorr   r   r   func_memoryerrorr/   5   s    
r   c                      [         er!   )OverflowErrorr   r   r   func_overflowerrorr2   7   s    
r   c                        \ rS rSrS rS rSrg)
AggrNoStep:   c                     g r!   r   selfs    r   __init__AggrNoStep.__init__;       r   c                     gNr   r   r7   s    r   finalizeAggrNoStep.finalize>   s    r   r   N)__name__
__module____qualname____firstlineno__r9   r>   __static_attributes__r   r   r   r4   r4   :   s    r   r4   c                        \ rS rSrS rS rSrg)AggrNoFinalizeA   c                     g r!   r   r7   s    r   r9   AggrNoFinalize.__init__B   r;   r   c                     g r!   r   r8   xs     r   stepAggrNoFinalize.stepE   r;   r   r   N)r@   rA   rB   rC   r9   rM   rD   r   r   r   rF   rF   A   s    r   rF   c                   &    \ rS rSrS rS rS rSrg)AggrExceptionInInitH   c                     SS-    g r*   r   r7   s    r   r9   AggrExceptionInInit.__init__I   	    	!r   c                     g r!   r   rK   s     r   rM   AggrExceptionInInit.stepL   r;   r   c                     g r!   r   r7   s    r   r>   AggrExceptionInInit.finalizeO   r;   r   r   Nr@   rA   rB   rC   r9   rM   r>   rD   r   r   r   rP   rP   H   s    r   rP   c                   &    \ rS rSrS rS rS rSrg)AggrExceptionInStepR   c                     g r!   r   r7   s    r   r9   AggrExceptionInStep.__init__S   r;   r   c                     SS-    g r*   r   rK   s     r   rM   AggrExceptionInStep.stepV   rT   r   c                     gr   r   r7   s    r   r>   AggrExceptionInStep.finalizeY   s    r   r   NrY   r   r   r   r[   r[   R   s    r   r[   c                   &    \ rS rSrS rS rS rSrg)AggrExceptionInFinalize\   c                     g r!   r   r7   s    r   r9    AggrExceptionInFinalize.__init__]   r;   r   c                     g r!   r   rK   s     r   rM   AggrExceptionInFinalize.step`   r;   r   c                     SS-    g r*   r   r7   s    r   r>    AggrExceptionInFinalize.finalizec   rT   r   r   NrY   r   r   r   rd   rd   \   s    r   rd   c                   &    \ rS rSrS rS rS rSrg)AggrCheckTypef   c                     S U l         g r!   valr7   s    r   r9   AggrCheckType.__init__g   s	    r   c                     [         [        [        [        S 5      [        S.n[        X1   [        U5      L 5      U l        g N)strintfloatNoneblobru   rv   rw   typebytesrq   )r8   	whichTyperq   theTypes       r   rM   AggrCheckType.stepj   s1    cE4: "w)T#Y67r   c                     U R                   $ r!   rp   r7   s    r   r>   AggrCheckType.finalizeo       xxr   rp   NrY   r   r   r   rm   rm   f   s    8
r   rm   c                   &    \ rS rSrS rS rS rSrg)AggrCheckTypesr   c                     SU l         g Nr   rp   r7   s    r   r9   AggrCheckTypes.__init__s   s	    r   c           	          [         [        [        [        S 5      [        S.nU H.  nU =R
                  [        X1   [        U5      L 5      -  sl        M0     g rt   rz   )r8   r}   valsr~   rq   s        r   rM   AggrCheckTypes.stepv   sB    cE4: "CHHG.$s);<<H r   c                     U R                   $ r!   rp   r7   s    r   r>   AggrCheckTypes.finalize|   r   r   rp   NrY   r   r   r   r   r   r   s    =r   r   c                   &    \ rS rSrS rS rS rSrg)AggrSum   c                     SU l         g )N        rp   r7   s    r   r9   AggrSum.__init__   s	    r   c                 .    U =R                   U-  sl         g r!   rp   )r8   rq   s     r   rM   AggrSum.step   s    Cr   c                     U R                   $ r!   rp   r7   s    r   r>   AggrSum.finalize   r   r   rp   NrY   r   r   r   r   r      s    r   r   c                   &    \ rS rSrS rS rS rSrg)AggrText   c                     SU l         g )N txtr7   s    r   r9   AggrText.__init__   s	    r   c                 ,    U R                   U-   U l         g r!   r   )r8   r   s     r   rM   AggrText.step   s    88c>r   c                     U R                   $ r!   r   r7   s    r   r>   AggrText.finalize   r   r   r   NrY   r   r   r   r   r      s    "r   r   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS r\" \SS9S 5       r\" \SS9S 5       r\" \SS9S 5       rS rS rS rS rS r\" \SS9S 5       rS r S  r!S! r"S" r#S# r$S$ r%\" \5      S% 5       r&\" \'S&S'5      S( 5       r(\)RT                  " \+RX                  S):  S*5      \-" S+S,S-S.9S/ 5       5       r.\)RT                  " \+RX                  S):  S*5      \-" S+S0S-S.9S1 5       5       r/S2 r0S3 r1S4r2g5)6FunctionTests   c                 r   [         R                  " S5      U l        U R                  R                  SS[        5        U R                  R                  SS[
        5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  S	S[        5        U R                  R                  S
S[        5        U R                  R                  SSS 5        U R                  R                  SSS 5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  SSS 5        U R                  R                  SSS 5        U R                  R                  SSS 5        U R                  R                  S5        g )N:memory:
returntextr   returntextwithnullreturnunicode	returnintreturnfloat
returnnull
returnblobreturnlonglong	returnnanc                      [        S5      $ )Nnan)rw   r   r   r   <lambda>%FunctionTests.setUp.<locals>.<lambda>   s    ur   return_noncont_blobc                  $    [        S5      S S S2   $ )Nr$      )
memoryviewr   r   r   r   r      s    G)<SqS)Ar   raiseexceptionmemoryerroroverflowerrorisblobr   c                 "    [        U [        5      $ r!   )
isinstancer|   rL   s    r   r   r      s    
1e8Lr   isnonec                 
    U S L $ r!   r   r   s    r   r   r      s    T	r   spamc                      [        U 5      $ r!   )lenr   s    r   r   r      s    Ar   zcreate table test(t text))sqliteconnectconcreate_functionr   r   r   r   r   r"   r%   r(   r,   r/   r2   executer7   s    r   setUpFunctionTests.setUp   s   >>*-  q/B  !5q:QR  !5GH  a@  3CD  q/B  q/B  !116IJ  a1EF  !6!A	C  !116IJ  3CD  !5GH  1.LM  1.AB  ->?45r   c                 8    U R                   R                  5         g r!   r   closer7   s    r   tearDownFunctionTests.tearDown       r   c                     U R                  [        R                  5         U R                  R	                  SSS 5        S S S 5        g ! , (       d  f       g = f)Nblac                     SU -  $ Nr   r   r   s    r   r   9FunctionTests.test_func_error_on_create.<locals>.<lambda>   s    AaCr   )assertRaisesr   OperationalErrorr   r   r7   s    r   test_func_error_on_create'FunctionTests.test_func_error_on_create   s8    v667HH$$UD-@ 877s   A
Ac                 f   [         R                  nSn[        U R                  USS9   U R                  R	                  S5        U R                  [         R                  U5         U R                  R	                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nztoo many arguments on functionr   )categorylimitzselect abs(-1)zselect max(1, 2))r   SQLITE_LIMIT_FUNCTION_ARGr   r   r   assertRaisesRegexr   )r8   r   msgs      r   test_func_too_many_args%FunctionTests.test_func_too_many_args   s|    33.dhh;HH-.''(?(?E  !34 F <;EE <;s#   <B"$B B"
B	B""
B0c                     S nU" 5       nU[        5       S'   U R                  R                  SSU5        U R                  R                  5       nUR	                  S5        g )Nc                      S n U $ )Nc                      gr=   r   r   r   r   f=FunctionTests.test_func_ref_count.<locals>.getfunc.<locals>.f   s    r   r   )r   s    r   getfunc2FunctionTests.test_func_ref_count.<locals>.getfunc   s    Hr   r   reftestr   zselect reftest())globalsr   r   cursorr   )r8   r   r   curs       r   test_func_ref_count!FunctionTests.test_func_ref_count   sO    	 I	%  Aq1hhoo&'r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        5        U R	                  US5        g )Nzselect returntext()r   r   r   r   r   fetchoneassertEqualr{   ru   r8   r   rq   s      r   test_func_return_text#FunctionTests.test_func_return_text   sS    hhoo)*llnQcC(e$r   c                     U R                   R                  5       nUR                  S5      R                  5       S   nU R	                  [        U5      [        5        U R	                  US5        g )Nzselect returntextwithnull()r   r   r   )r8   r   ress      r   $test_func_return_text_with_null_char2FunctionTests.test_func_return_text_with_null_char   sS    hhookk78AACAFcC(h'r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        5        U R	                  US5        g )Nzselect returnunicode()r   r   r   r   s      r   test_func_return_unicode&FunctionTests.test_func_return_unicode   sS    hhoo,-llnQcC(e$r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        5        U R	                  US5        g )Nzselect returnint()r   r   )r   r   r   r   r   r{   rv   r   s      r   test_func_return_int"FunctionTests.test_func_return_int   sS    hhoo()llnQcC(b!r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        5        US:  d  US:  a  U R                  S5        g g )Nzselect returnfloat()r   g&1	@gT㥛 	@zwrong value)r   r   r   r   r   r{   rw   failr   s      r   test_func_return_float$FunctionTests.test_func_return_float   sa    hhoo*+llnQcE*;#+IIm$ &r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        S 5      5        U R	                  US 5        g )Nzselect returnnull()r   )r   r   r   r   r   r{   r   s      r   test_func_return_null#FunctionTests.test_func_return_null   sW    hhoo)*llnQcDJ/d#r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  [        U5      [        5        U R	                  US5        g )Nzselect returnblob()r   r$   )r   r   r   r   r   r{   r|   r   s      r   test_func_return_blob#FunctionTests.test_func_return_blob   sS    hhoo)*llnQcE*g&r   c                     U R                   R                  5       nUR                  S5        UR                  5       S   nU R	                  US5        g )Nzselect returnlonglong()r   r'   r   r   r   r   r   r   s      r   test_func_return_long_long(FunctionTests.test_func_return_long_long   s?    hhoo-.llnQe$r   c                     U R                   R                  5       nUR                  S5        U R                  UR	                  5       S   5        g )Nzselect returnnan()r   )r   r   r   assertIsNoner   r8   r   s     r   test_func_return_nan"FunctionTests.test_func_return_nan   s8    hhoo()#,,.+,r   r,   namec                 6   U R                   R                  5       nU R                  [        R                  5       nUR                  S5        UR                  5         S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nzselect raiseexception()&user-defined function raised exception
r   r   r   r   r   r   r   r   ru   	exceptionr8   r   cms      r   test_func_exception!FunctionTests.test_func_exception  sh    hhoov6672KK12LLN 8 	R\\*,TU 87s   "B


Br/   c                     U R                   R                  5       nU R                  [        5         UR	                  S5        UR                  5         S S S 5        g ! , (       d  f       g = f)Nzselect memoryerror())r   r   r   r.   r   r   r  s     r   test_func_memory_error$FunctionTests.test_func_memory_error	  sB    hhoo{+KK./LLN ,++s   "A
A)r2   c                     U R                   R                  5       nU R                  [        R                  5         UR                  S5        UR                  5         S S S 5        g ! , (       d  f       g = f)Nzselect overflowerror())r   r   r   r   	DataErrorr   r   r  s     r   test_func_overflow_error&FunctionTests.test_func_overflow_error  sH    hhoov//0KK01LLN 100s   "A%%
A3c                     U R                   R                  5       nUR                  SS5        UR                  5       S   nU R	                  US5        g )Nzselect spam(?, ?))r   r   r   r   r  r   s      r   test_any_arguments FunctionTests.test_any_arguments  sA    hhoo'0llnQa r   c                 ~    U R                   R                  S5      nU R                  UR                  5       S   5        g )Nzselect isblob(x'')r   )r   r   
assertTruer   r  s     r   test_empty_blobFunctionTests.test_empty_blob  s.    hh34q)*r   c                     U R                   R                  S[        S5      45      nU R                  UR	                  5       S   5        g )Nzselect isnone(?)r   r   )r   r   rw   r,  r   r  s     r   test_nan_floatFunctionTests.test_nan_float!  s6    hh1E%L?Cq)*r   c                 `    SnU R                  [        XR                  R                  SS5        g )Nz1Python int too large to convert to SQLite INTEGERselect spam(?))             )r   r1   r   r   )r8   errs     r   test_too_large_int FunctionTests.test_too_large_int&  s(    A}c883C3C/	=r   c           
      ~    U R                  [        SU R                  R                  S[	        S5      S S S2   45        g )Nz%underlying buffer is not C-contiguousr3  r$   r   )r   BufferErrorr   r   r   r7   s    r   test_non_contiguous_blob&FunctionTests.test_non_contiguous_blob+  s9    {F#xx//1A *7 3CaC 8:	<r   zbuffer.*contiguous)regexc                     U R                  [        R                  5         U R                  R	                  S5      nUR                  5         S S S 5        g ! , (       d  f       g = f)Nzselect return_noncont_blob())r   r   r   r   r   r   r  s     r   test_return_non_contiguous_blob-FunctionTests.test_return_non_contiguous_blob1  s@    v667((""#ABCLLN 877s   ,A
A#c                 ^    U R                  [        SU R                  R                  SS5        g )Nsurrogates not allowedr3  )u   )r   UnicodeEncodeErrorr   r   r7   s    r   test_param_surrogates#FunctionTests.test_param_surrogates7  s)    13K#xx//1A0	2r   c                   ^ / mU4S jnU R                   R                  SSU5        S[        4S[        4S[        4S[        4S[        4[        S	5      [        4S
[        4S[        4S[        4S[
        4[        [        S5      5      [
        4[        S5      [
        4S [        S 5      4/nU H2  u  p4U R                   R                  SU45      nUR                  5         M4     U R                  UT5        g )Nc                 >   > TR                  U [        U 5      45        g r!   )appendr{   )argresultss    r   append_result5FunctionTests.test_func_params.<locals>.append_result>  s    NNCc+,r   test_paramsr   r   r   l   {C	 l           r   inftextr   u   ˢqˡⁱᵗᵉr$   r   zselect test_params(?))r   r   rv   rw   ru   r|   	bytearrayranger   r{   r   r   r   )r8   rJ  datasetrq   _r   rI  s         @r   test_func_paramsFunctionTests.test_func_params<  s    	-  =A II #& #&5M5\5!SMsO.4euQx %( %(4:
 FC((""#:SFCCLLN  	'*r   c                     [        S S9nU R                  R                  SSUSS9  U R                  [        R
                  5         U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nreturn_valuenondeterministicr   Fdeterministicz>create index t on test(t) where nondeterministic() is not null)r   r   r   r   r   r   r   r8   mocks     r   test_func_non_deterministic)FunctionTests.test_func_non_deterministic\  s[    &  !3QE Rv667HH]^ 877s   A**
A8c                     [        S S9nU R                  R                  SSUSS9   U R                  R                  S5        g ! [        R
                   a    U R                  S5         g f = f)NrV  rZ  r   TrY  z;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index)r   r   r   r   r   r   r  r[  s     r   test_func_deterministic%FunctionTests.test_func_deterministicb  sd    &  !T N	IHHZ[&& 	IIIGH	Is   A %A+*A+c                     U R                  [        5         U R                  R                  SS[        S5        S S S 5        g ! , (       d  f       g = f)NrZ  r   T)r   	TypeErrorr   r   rv   r7   s    r   $test_func_deterministic_keyword_only2FunctionTests.test_func_deterministic_keyword_onlyj  s4    y)HH$$_adC *))s   #A
Ac                     S n[        5        nUR                  SSU5        U" S5      nAAU/nUR                  U5        AA[        5         S S S 5        g ! , (       d  f       g = f)Nc                     g r!   r   )ts    r   md5sum=FunctionTests.test_function_destructor_via_gc.<locals>.md5sumq  s    r   md5r   z(create table lang (name, first_appeared))r	   r   rG  r   )r8   ri  destrL   ys        r   test_function_destructor_via_gc-FunctionTests.test_function_destructor_via_gcn  s[    	 $  62?@AAHHQK!L s   >A
A#c                 (   U R                   R                  5       nSnS H^  nU R                   R                  SSU4S j5        U R                  [        R
                  U5         UR                  S5        S S S 5        M`     g ! , (       d  f       Mr  = f)Nstring or blob too big)l            l        l            largeintr   c                     U $ r!   r   )values    r   r   >FunctionTests.test_func_return_too_large_int.<locals>.<lambda>  s    r   zselect largeint())r   r   r   r   r   r%  r   )r8   r   r   rt  s       r   test_func_return_too_large_int,FunctionTests.test_func_return_too_large_int  sl    hhoo&+EHH$$Z4MN''(8(8#>/0 ?> ,>>s   #B
B	rA  chrc                 &   U R                   R                  5       nU R                   R                  SS[        5        S H>  nU R	                  [
        R                  5         UR                  SU45        S S S 5        M@     g ! , (       d  f       MR  = f)Npychrr   )i  i  zselect pychr(?))r   r   r   rx  r   r   r   r   )r8   r   rt  s      r   %test_func_return_text_with_surrogates3FunctionTests.test_func_return_text_with_surrogates  sf    hhoo  !S1#E""6#:#:;-x8 <; $;;s    B
B	        zrequires 64bit platformr'      F)sizememusedry_runc                 "   U R                   R                  5       nS H]  nU R                   R                  SSU4S j5        U R                  [        R
                  5         UR                  S5        S S S 5        M_     g ! , (       d  f       Mq  = f)Nir'   	largetextr   c                     SU -  $ )Nbr   r  s    r   r   ?FunctionTests.test_func_return_too_large_text.<locals>.<lambda>  s    sTzr   zselect largetext()r   r   r   r   r   r%  r   r8   r  r   s      r   test_func_return_too_large_text-FunctionTests.test_func_return_too_large_text  sg     hhoo"DHH$$[!5QR""6#3#3401 54 #44    A??
B	r   c                 "   U R                   R                  5       nS H]  nU R                   R                  SSU4S j5        U R                  [        R
                  5         UR                  S5        S S S 5        M_     g ! , (       d  f       Mq  = f)Nr  	largeblobr   c                     SU -  $ )N   br   r  s    r   r   ?FunctionTests.test_func_return_too_large_blob.<locals>.<lambda>  s    td{r   zselect largeblob()r  r  s      r   test_func_return_too_large_blob-FunctionTests.test_func_return_too_large_blob  sg     hhoo"DHH$$[!5RS""6#3#3401 54 #44r  c                    ^  T R                   R                  SSU 4S j5        SnT R                  [        R                  UT R                   R
                  S5        g )N	badreturnr   c                     > T $ r!   r   r7   s   r   r   >FunctionTests.test_func_return_illegal_value.<locals>.<lambda>  s    r   r  zselect badreturn())r   r   r   r   r   r   )r8   r   s   ` r   test_func_return_illegal_value,FunctionTests.test_func_return_illegal_value  sG      a>6v66#xx//1E	Gr   c                    SnS nU R                  [        U5       nU R                  R                  SSUS9  S S S 5        U R	                  WR
                  [        5        U R                  [        U5       nU R                  R                  SSUS9  S S S 5        U R	                  UR
                  [        5        U R                  [        U5       nU R                  R                  SSUS9  S S S 5        U R	                  UR
                  [        5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NQ= f)NzPassing keyword arguments 'name', 'narg' and 'func' to _sqlite3.Connection.create_function\(\) is deprecated. Parameters 'name', 'narg' and 'func' will become positional-only in Python 3.15.c                      g r!   r   r   r   r   noop2FunctionTests.test_func_keyword_args.<locals>.noop  s    r   r  r   )func)nargr  )r  r  r  )assertWarnsRegexDeprecationWarningr   r   r   filename__file__)r8   r<  r  r  s       r   test_func_keyword_args$FunctionTests.test_func_keyword_args  s    / 		 ""#5u=HH$$VQT$: >h/""#5u=HH$$V!$$? >h/""#5u=HH$$&qt$D >h/ >= >= >=s#   D6D&D7
D#&
D47
Er   N)3r@   rA   rB   rC   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r
   ZeroDivisionErrorr  r.   r"  r1   r&  r)  r-  r0  r6  r:  r9  r>  rC  rS  r]  r`  rd  rn  rv  rB  r{  unittest
skipUnlesssysmaxsizer   r  r  r  r  rD   r   r   r   r   r      s   6.A6
(%(%"%$'%-
 &-BCV DV ['9: ; ])=> ?!++
=
< [(<= >
2
+@_ID" ]#1 $1 ')A5I9 J9 u,.GHU1e42 5 I2 u,.GHU1e42 5 I2G0r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	WindowSumInti  c                     SU l         g r   countr7   s    r   r9   WindowSumInt.__init__  s	    
r   c                 .    U =R                   U-  sl         g r!   r  r8   rt  s     r   rM   WindowSumInt.step      

e
r   c                     U R                   $ r!   r  r7   s    r   rt  WindowSumInt.value      zzr   c                 .    U =R                   U-  sl         g r!   r  r  s     r   inverseWindowSumInt.inverse  r  r   c                     U R                   $ r!   r  r7   s    r   r>   WindowSumInt.finalize  r  r   r  N)
r@   rA   rB   rC   r9   rM   rt  r  r>   rD   r   r   r   r  r    s    r   r  c                       \ rS rSrSrg)	BadWindowi  r   N)r@   rA   rB   rC   rD   r   r   r   r  r    s    r   r  )r~     r   zRequires SQLite 3.25.0 or newerc                       \ rS rSrS rS rS rS r\" \	5      S 5       r
\" \	5      S 5       r\" \5      S 5       r\" \5      S	 5       rS
 rS rS rSrg)WindowFunctionTestsi  c                    [         R                  " S5      U l        U R                  R                  5       U l        / SQnU R                     U R                  R                  S5        U R                  R                  SU5        S S S 5        / SQU l        SU l        U R                  R                  SS[        5        g ! , (       d  f       N@= f)	Nr   ))a   )r  r+   )cr~  )d   )er   zcreate table test(x, y)zinsert into test values(?, ?)))r  	   )r     )r     )r  r  )r  r  z
            select x, %s(y) over (
                order by x rows between 1 preceding and 1 following
            ) as sum_y
            from test order by x
        sumintr   )r   r   r   r   r   r   executemanyexpectedquerycreate_window_functionr  )r8   valuess     r   r   WindowFunctionTests.setUp  s    >>*-88??$
 XXHH67HH  !@&I 

 	''!\B! Xs   8B==
Cc                 l    U R                   R                  5         U R                  R                  5         g r!   )r   r   r   r7   s    r   r   WindowFunctionTests.tearDown  s    r   c                     U R                   R                  U R                  S-  5        U R                  U R                   R	                  5       U R
                  5        g )Nr  )r   r   r  r   fetchallr  r7   s    r   test_win_sum_int$WindowFunctionTests.test_win_sum_int  s>    h./**,dmm<r   c                 z    U R                  [        R                  U R                  R                  SS[
        5        g )N
shouldfailr   )r   r   ProgrammingErrorr   r  r  r7   s    r   test_win_error_on_create,WindowFunctionTests.test_win_error_on_create  s,    &11((99&l	<r   c           	      ,   S H  nU R                  US9   [        R                  " [        U[        S9   SU 3nU R
                  R                  US[        5        SU S3nU R                  [        R                  U5         U R                  R                  U R                  U-  5        U R                  R                  5         S S S 5        S S S 5        S S S 5        M     g ! , (       d  f       N#= f! , (       d  f       N,= f! , (       d  f       GM  = f)N)r9   rM   rt  r  )methside_effectexc_r   'z' method raised error)subTestr   objectr  r  r   r  r   r   r   r   r   r  r  )r8   r  r  r   s       r   test_win_exception_in_method0WindowFunctionTests.test_win_exception_in_method  s    :D4(\\,)L!$=DHH33D!\JdV#89C//0G0GM((d):;))+ N	 M )( ; NM	 ML )(s<   DAC2AC!	C2D!
C/+C22
D <D
D	c                 >   [         R                  " [        S[        S9   SnU R                  R                  US[        5        U R                  R                  U R                  U-  5        U R                  R                  5         S S S 5        g ! , (       d  f       g = f)Nr>   r  exception_in_finalizer   )
r   r  r  r  r   r  r   r   r  r  )r8   r  s     r   test_win_exception_in_finalize2WindowFunctionTests.test_win_exception_in_finalize  sg    
 \\,
	J*DHH++D!\BHHTZZ$./HH	 KJJs   A&B
Bc                     " S S5      n " S S5      n " S S5      nSU4SU4S	U44nU H  u  pVU R                  XVS
9   SU 3nU R                  R                  USU5        U R                  [        R
                  SU S35         U R                  R                  U R                  U-  5        U R                  R                  5         S S S 5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nc                   &    \ rS rSrS rS rS rSrg)AWindowFunctionTests.test_win_missing_method.<locals>.MissingValuei  c                     g r!   r   rK   s     r   rM   FWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.step      tr   c                     g r!   r   rK   s     r   r  IWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.inverse      $r   c                     gr   r   r7   s    r   r>   JWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.finalize      rr   r   N)r@   rA   rB   rC   rM   r  r>   rD   r   r   r   MissingValuer        #&)r   r  c                   &    \ rS rSrS rS rS rSrg)CWindowFunctionTests.test_win_missing_method.<locals>.MissingInversei   c                     g r!   r   rK   s     r   rM   HWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.step!  r  r   c                     gr   r   r7   s    r   rt  IWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.value"      Br   c                     gr   r   r7   s    r   r>   LWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.finalize#  r  r   r   N)r@   rA   rB   rC   rM   rt  r>   rD   r   r   r   MissingInverser     r  r   r  c                   &    \ rS rSrS rS rS rSrg)@WindowFunctionTests.test_win_missing_method.<locals>.MissingStepi%  c                     gr   r   r7   s    r   rt  FWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.value&  r  r   c                     g r!   r   rK   s     r   r  HWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.inverse'  r  r   c                     gr   r   r7   s    r   r>   IWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.finalize(  r  r   r   N)r@   rA   rB   rC   rt  r  r>   rD   r   r   r   MissingStepr  %  s    &&)r   r  rM   rt  r  )r  clsr  r   r  z' method not defined)
r  r   r  r   r   r   r   r   r  r  )r8   r  r  r  rQ  r  r  r  s           r   test_win_missing_method+WindowFunctionTests.test_win_missing_method  s    	* 	*
	* 	*
	* 	* [!l#'

 !ID41dV}//a=++F,C,C./v5I,JLHH$$TZZ$%67HH%%'L 21 !L L 21s&    AC0AC
C0
C-)C00
C?	c                      " S S5      nSnU R                   R                  USU5        U R                  R                  U R                  U-  5        U R                  R                  5         g )Nc                   &    \ rS rSrS rS rS rSrg)FWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalizei=  c                     g r!   r   rK   s     r   rM   KWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.step>  r  r   c                     gr   r   r7   s    r   rt  LWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.value?  r  r   c                     g r!   r   rK   s     r   r  NWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.inverse@  r  r   r   N)r@   rA   rB   rC   rM   rt  r  rD   r   r   r   MissingFinalizer  =  s    #&&r   r  missing_finalizer   )r   r  r   r   r  r  )r8   r  r  s      r   test_win_missing_finalize-WindowFunctionTests.test_win_missing_finalize8  sT    
	' 	'
 "''aAd*+r   c                     U R                   R                  SSS 5        U R                  [        R                  U R
                  R                  U R                  S-  5        g )Nr  r   )r   r  r   r   r   r   r   r  r7   s    r   test_win_clear_function+WindowFunctionTests.test_win_clear_functionG  sF    ''!T:&114883C3C**x/	1r   c                 V    " S S[         5      nU R                   Vs/ s H  o"S   US   S-  4PM     nnU R                  R                  SSU5        U R                  R                  U R                  S-  5        U R                  U R                  R                  5       U5        g s  snf )Nc                        \ rS rSrS rS rSrg)AWindowFunctionTests.test_win_redefine_function.<locals>.RedefinediN  c                 4    U =R                   US-  -  sl         g r   r  r  s     r   rM   FWindowFunctionTests.test_win_redefine_function.<locals>.Redefined.stepO  s    4::#::r   c                 4    U =R                   US-  -  sl         g r   r  r  s     r   r  IWindowFunctionTests.test_win_redefine_function.<locals>.Redefined.inverseP  s    djjEAI&=jr   r   N)r@   rA   rB   rC   rM   r  rD   r   r   r   	Redefinedr$  N  s    :=r   r)  r   r   r   r  )	r  r  r   r  r   r   r  r   r  )r8   r)  vr  s       r   test_win_redefine_function.WindowFunctionTests.test_win_redefine_functionL  s    	> 	> -1MM:MqqT1Q46NM:''!Y?h./**,h7	 ;s   B&c                      " S S5      nU R                   R                  SSU5        U R                  [        R                  SU R
                  R                  U R                  S-  5        g )Nc                   &    \ rS rSrS rS rS rSrg)IWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturniX  c                     g r!   r   r7   s    r   r9   RWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.__init__Y  s    r   c                     g r!   r   rK   s     r   rM   NWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.stepZ  r  r   c                     g)Nr4  r   r7   s    r   rt  OWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.value[  s    Gr   r   N)r@   rA   rB   rC   r9   rM   rt  rD   r   r   r   ErrorValueReturnr/  X  s    $#+r   r6  err_val_retr   rq  )r   r  r   r   r%  r   r   r  )r8   r6  s     r   test_win_error_value_return/WindowFunctionTests.test_win_error_value_returnW  sW    	, 	,
 	''q:JKv//1I#xx//m1K	Mr   )r   r   r  r  N)r@   rA   rB   rC   r   r   r  r  r
   r  r  r  AttributeErrorr  r  r   r+  r8  rD   r   r   r   r  r    s    C<=<
 Y	,  	, Y     ^$( %(< ^$ %1
	8Mr   r  c                       \ rS rSrS rS rS r\" \SS9S 5       r	S r
\" \S	S9S
 5       r\" \SS9S 5       r\" \SS9S 5       rS rS rS rS rS rS rS rS rS rS rSrg)AggregateTestsib  c           
      B   [         R                  " S5      U l        U R                  R                  5       nUR	                  S5        UR	                  SSSSS [        S5      45        UR                  5         U R                  R                  SS	[        5        U R                  R                  S
S	[        5        U R                  R                  SS	[        5        U R                  R                  SS	[        5        U R                  R                  SS	[        5        U R                  R                  SS[        5        U R                  R                  SS[        5        U R                  R                  SS	[        5        U R                  R                  SS	[         5        g )Nr   z
            create table test(
                t text,
                i integer,
                f float,
                n,
                b blob
                )
            z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)r   r+   r   r$   nostepr   
nofinalizeexcInitexcStepexcFinalize	checkTyper   
checkTypesr   mysumaggtxt)r   r   r   r   r   r   r   create_aggregater4   rF   rP   r[   rd   rm   r   r   r   r  s     r   r   AggregateTests.setUpc  s)   >>*-hhoo  	 	LAtT:g#68	:		!!(Az:!!,>B!!)Q0CD!!)Q0CD!!-4KL!!+q-@!!,NC!!'1g6!!(Ax8r   c                 8    U R                   R                  5         g r!   r   r7   s    r   r   AggregateTests.tearDown}  r   r   c                     U R                  [        R                  5         U R                  R	                  SS[
        5        S S S 5        g ! , (       d  f       g = f)Nr   r   )r   r   r   r   r   r   r7   s    r   test_aggr_error_on_create(AggregateTests.test_aggr_error_on_create  s8    v667HH$$UD': 877s   "A
Ar4   r  c                    U R                   R                  5       nU R                  [        R                  5       nUR                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nzselect nostep(t) from testz2user-defined aggregate's 'step' method not defined)	r   r   r   r   r   r   r   ru   r  r  s      r   test_aggr_no_step AggregateTests.test_aggr_no_step  s`    hhoov6672KK45 8R\\*M	O 87s   A::
Bc                     U R                   R                  5       nSnU R                  [        R                  U5         UR                  S5        UR                  5       S   nS S S 5        g ! , (       d  f       g = f)Nz6user-defined aggregate's 'finalize' method not definedzselect nofinalize(t) from testr   )r   r   r   r   r   r   r   )r8   r   r   rq   s       r   test_aggr_no_finalize$AggregateTests.test_aggr_no_finalize  sW    hhooF##F$;$;SAKK89,,.#C BAAs   %A++
A9rP   c                 <   U R                   R                  5       nU R                  [        R                  5       nUR                  S5        UR                  5       S   nS S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised errorr  r8   r   r  rq   s       r   test_aggr_exception_in_init*AggregateTests.test_aggr_exception_in_init  so    hhoov6672KK56,,.#C 8 	R\\*,ef 87   %B
Br[   c                 <   U R                   R                  5       nU R                  [        R                  5       nUR                  S5        UR                  5       S   nS S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised errorr  rU  s       r   test_aggr_exception_in_step*AggregateTests.test_aggr_exception_in_step  so    hhoov6672KK56,,.#C 8 	R\\*,ab 87rX  rd   c                 <   U R                   R                  5       nU R                  [        R                  5       nUR                  S5        UR                  5       S   nS S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nzselect excFinalize(t) from testr   z7user-defined aggregate's 'finalize' method raised errorr  rU  s       r   test_aggr_exception_in_finalize.AggregateTests.test_aggr_exception_in_finalize  so    hhoov6672KK9:,,.#C 8 	R\\*,ef 87rX  c                     U R                   R                  5       nUR                  SS[        5       45        UR	                  5       S   nU R                  US5        g )Nzselect checkTypes('str', ?, ?)r   r   r   )r   r   r   ru   r   r   r   s      r   test_aggr_check_param_str(AggregateTests.test_aggr_check_param_str  sG    hhoo4ucenEllnQa r   c                     U R                   R                  5       nUR                  SS5        UR                  5       S   nU R	                  US5        g )Nzselect checkType('int', ?))r   r   r   r  r   s      r   test_aggr_check_param_int(AggregateTests.test_aggr_check_param_int  sA    hhoo0%8llnQa r   c                     U R                   R                  5       nUR                  SS5        UR                  5       S   nU R	                  US5        g )Nzselect checkTypes('int', ?, ?))r      r   r   r  r   s      r   test_aggr_check_params_int)AggregateTests.test_aggr_check_params_int  sA    hhoo4h?llnQa r   c                     U R                   R                  5       nUR                  SS5        UR                  5       S   nU R	                  US5        g )Nzselect checkType('float', ?))r   r   r   r  r   s      r   test_aggr_check_param_float*AggregateTests.test_aggr_check_param_float  sA    hhoo2G<llnQa r   c                     U R                   R                  5       nUR                  SS5        UR                  5       S   nU R	                  US5        g )Nzselect checkType('None', ?)r!   r   r   r  r   s      r   test_aggr_check_param_none)AggregateTests.test_aggr_check_param_none  sA    hhoo17;llnQa r   c                     U R                   R                  5       nUR                  S[        S5      45        UR	                  5       S   nU R                  US5        g )Nzselect checkType('blob', ?)r$   r   r   )r   r   r   r   r   r   r   s      r   test_aggr_check_param_blob)AggregateTests.test_aggr_check_param_blob  sI    hhoo1Jw4G3IJllnQa r   c                     U R                   R                  5       nUR                  S5        UR                  S/ SQ5        UR                  S5        UR	                  5       S   nU R                  US5        g )Nzdelete from testzinsert into test(i) values (?)))
   )   )   zselect mysum(i) from testr   <   )r   r   r   r  r   r   r   s      r   test_aggr_check_aggr_sum'AggregateTests.test_aggr_check_aggr_sum  s\    hhoo&'8:OP/0llnQb!r   c                     U R                   R                  S5      nUR                  5       S   nU R                  U5        g )Nz1select mysum(i) from (select 1 as i) where i == 0r   )r   r   r   r  r   s      r   test_aggr_no_match!AggregateTests.test_aggr_no_match  s5    hhRSllnQ#r   c                    U R                   R                  5       nS HR  nU R                  US9   UR                  SU45        UR	                  5       S   nU R                  X25        S S S 5        MT     g ! , (       d  f       Mf  = f)N)r   r   r   zselect aggtxt(?) from testr   )r   r   r  r   r   r   )r8   r   r   rq   s       r   test_aggr_textAggregateTests.test_aggr_text  sh    hhoo$C#&83&AllnQ'  * '& %&&s   8A44
B	c                    SnU R                  [        U5       nU R                  R                  SS[        S9  S S S 5        U R                  WR                  [        5        U R                  [        U5       nU R                  R                  SS[        S9  S S S 5        U R                  UR                  [        5        U R                  [        U5       nU R                  R                  SS[        S9  S S S 5        U R                  UR                  [        5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NQ= f)NzPassing keyword arguments 'name', 'n_arg' and 'aggregate_class' to _sqlite3.Connection.create_aggregate\(\) is deprecated. Parameters 'name', 'n_arg' and 'aggregate_class' will become positional-only in Python 3.15.testr   )aggregate_class)n_argr  r   )r  r  r  )r  r  r   rG  r   r   r  r  r8   r<  r  s      r   test_agg_keyword_args$AggregateTests.test_agg_keyword_args  s    / 	 ""#5u=HH%%fa%J >h/""#5u=HH%%fAx%P >h/""#5u=HH%%66> & @ > 	h/ >= >= >=s#    D7 D/ E 
D,/
D= 
Er  N)r@   rA   rB   rC   r   r   rL  r
   r:  rO  rR  r  rV  rZ  r]  r`  rc  rg  rj  rm  rp  rw  rz  r}  r  rD   r   r   r   r<  r<  b  s    94; ^,7O 8O$ &-BCg Dg &-BCc Dc &-FGg Hg!!!!!!"
+0r   r<  c                   H    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	rg
)AuthorizerTestsi  c                     U [         R                  :w  a  [         R                  $ US:X  d  US:X  a  [         R                  $ [         R                  $ Nc2t2)r   SQLITE_SELECTSQLITE_DENY	SQLITE_OKactionarg1arg2dbnamesources        r   authorizer_cbAuthorizerTests.authorizer_cb  sA    V)))%%%4<44<%%%r   c                     [         R                  " S5      U l        U R                  R                  S5        U R                  R	                  S5        U R                  R                  U R                  5        g )Nr   z
            create table t1 (c1, c2);
            create table t2 (c1, c2);
            insert into t1 (c1, c2) values (1, 2);
            insert into t2 (c1, c2) values (4, 5);
            zselect c2 from t2)r   r   r   executescriptr   set_authorizerr  r7   s    r   r   AuthorizerTests.setUp  sV    >>*-   	 	,- 2 23r   c                 8    U R                   R                  5         g r!   r   r7   s    r   r   AuthorizerTests.tearDown  r   r   c                     U R                  [        R                  5       nU R                  R	                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nselect * from t2
prohibitedr   r   DatabaseErrorr   r   assertInru   r  r8   r  s     r   test_table_access!AuthorizerTests.test_table_access  sP    v334HH/0 5lC$56 54   A**
A8c                     U R                  [        R                  5       nU R                  R	                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nselect c2 from t1r  r  r  s     r   test_column_access"AuthorizerTests.test_column_access  sP    v334HH01 5lC$56 54r  c                     U R                   R                  S 5        U R                   R                  S5        U R                   R                  S5        g )Nr  r  )r   r  r   r7   s    r   test_clear_authorizer%AuthorizerTests.test_clear_authorizer  s:    %+,,-r   c                     SnU R                  [        U5       nU R                  R                  S S9  S S S 5        U R	                  WR
                  [        5        g ! , (       d  f       N/= f)NzPassing keyword argument 'authorizer_callback' to _sqlite3.Connection.set_authorizer\(\) is deprecated. Parameter 'authorizer_callback' will become positional-only in Python 3.15.c                      g r!   r   r   r   r   r   >AuthorizerTests.test_authorizer_keyword_args.<locals>.<lambda>,  s    r   )authorizer_callback)r  r  r   r  r   r  r  r  s      r   test_authorizer_keyword_args,AuthorizerTests.test_authorizer_keyword_args#  sX     	 ""#5u=HH###E >h/ >=s   A
A+r  N)r@   rA   rB   rC   staticmethodr  r   r   r  r  r  r  rD   r   r   r   r  r    s2       47
7
.

0r   r  c                   l   ^  \ rS rSr\S 5       r\" \SS9U 4S j5       r\" \SS9U 4S j5       r	Sr
U =r$ )AuthorizerRaiseExceptionTestsi0  c                 z    U [         R                  :w  a  [        eUS:X  d  US:X  a  [        e[         R                  $ r  )r   r  
ValueErrorr  r  s        r   r  +AuthorizerRaiseExceptionTests.authorizer_cb1  s5    V)))4<44<r   r  r  c                 "   > [         TU ]  5         g r!   superr  r8   	__class__s    r   r  /AuthorizerRaiseExceptionTests.test_table_access9      !#r   c                 "   > [         TU ]  5         g r!   r  r  s    r   r  0AuthorizerRaiseExceptionTests.test_column_access=  r  r   r   )r@   rA   rB   rC   r  r  r
   r  r  r  rD   __classcell__)r  s   @r   r  r  0  sK        Zo6$ 7$ Zo6$ 7$r   r  c                   $    \ rS rSr\S 5       rSrg)AuthorizerIllegalTypeTestsiA  c                 f    U [         R                  :w  a  gUS:X  d  US:X  a  g[         R                  $ )Nr   r  r  r   r  r  r  s        r   r  (AuthorizerIllegalTypeTests.authorizer_cbB  s/    V)))4<44<r   r   Nr@   rA   rB   rC   r  r  rD   r   r   r   r  r  A         r   r  c                   $    \ rS rSr\S 5       rSrg)AuthorizerLargeIntegerTestsiJ  c                 f    U [         R                  :w  a  gUS:X  d  US:X  a  g[         R                  $ )Nr}  r  r  r  r  s        r   r  )AuthorizerLargeIntegerTests.authorizer_cbK  s/    V)))4<44<r   r   Nr  r   r   r   r  r  J  r  r   r  __main__)1r  r  sqlite3r   unittest.mockr   r   test.supportr   r   utilr   r	   r
   r   r   r   r   r   r"   r%   r(   r,   r/   r2   r4   rF   rP   r[   rd   rm   r   r   r   TestCaser   r  	Exceptionr  skipIfsqlite_version_infor  r<  r  r  r  r  r@   mainr   r   r   <module>r     s}  0    % / + !     
 
   k0H%% k0\	  		 	 
++j824IM(++ IM4IMXU0X&& U0p30h'' 30l$O $"    /   zMMO r   