a
    	¼3j®G  ã                   @   s   d dl Z d dlZ d dlZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ ZG d"d#„ d#ƒZG d$d%„ d%ƒZG d&d'„ d'ƒZG d(d)„ d)ƒZG d*d+„ d+ƒZG d,d-„ d-ƒZG d.d/„ d/ƒZG d0d1„ d1ƒZG d2d3„ d3ƒZG d4d5„ d5e jƒZG d6d7„ d7e jƒZG d8d9„ d9e jƒZ G d:d;„ d;e ƒZ!G d<d=„ d=e ƒZ"G d>d?„ d?e ƒZ#d@dA„ Z$dBdC„ Z%e&dDkrœe%ƒ  dS )Eé    Nc                   C   s   dS )NÚfoo© r   r   r   úV/www/server/python_manager/versions/3.9.10/lib/python3.9/sqlite3/test/userfunctions.pyÚfunc_returntext   s    r   c                   C   s   dS )Nú1 2r   r   r   r   r   Úfunc_returntextwithnull   s    r   c                   C   s   dS )NÚbarr   r   r   r   r   Úfunc_returnunicode    s    r	   c                   C   s   dS ©Né*   r   r   r   r   r   Úfunc_returnint"   s    r   c                   C   s   dS )Nç…ëQ¸	@r   r   r   r   r   Úfunc_returnfloat$   s    r   c                   C   s   d S ©Nr   r   r   r   r   Úfunc_returnnull&   s    r   c                   C   s   dS )Nó   blobr   r   r   r   r   Úfunc_returnblob(   s    r   c                   C   s   dS ©Nì        r   r   r   r   r   Úfunc_returnlonglong*   s    r   c                   C   s   dd  d S ©Né   r   r   r   r   r   r   Úfunc_raiseexception,   s    r   c                 C   s   t | ƒtu S r   )ÚtypeÚstr©Úvr   r   r   Úfunc_isstring/   s    r   c                 C   s   t | ƒtu S r   )r   Úintr   r   r   r   Ú
func_isint1   s    r   c                 C   s   t | ƒtu S r   )r   Úfloatr   r   r   r   Úfunc_isfloat3   s    r!   c                 C   s   t | ƒt d ƒu S r   )r   r   r   r   r   Úfunc_isnone5   s    r"   c                 C   s   t | ttfƒS r   )Ú
isinstanceÚbytesÚ
memoryviewr   r   r   r   Úfunc_isblob7   s    r&   c                 C   s   t | tƒo| dkS r   )r#   r   r   r   r   r   Úfunc_islonglong9   s    r'   c                  G   s   t | ƒS r   )Úlen)Úargsr   r   r   Úfunc<   s    r*   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
AggrNoStepc                 C   s   d S r   r   ©Úselfr   r   r   Ú__init__@   s    zAggrNoStep.__init__c                 C   s   dS ©Né   r   r,   r   r   r   ÚfinalizeC   s    zAggrNoStep.finalizeN)Ú__name__Ú
__module__Ú__qualname__r.   r1   r   r   r   r   r+   ?   s   r+   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAggrNoFinalizec                 C   s   d S r   r   r,   r   r   r   r.   G   s    zAggrNoFinalize.__init__c                 C   s   d S r   r   ©r-   Úxr   r   r   ÚstepJ   s    zAggrNoFinalize.stepN)r2   r3   r4   r.   r8   r   r   r   r   r5   F   s   r5   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInInitc                 C   s   dd  d S r   r   r,   r   r   r   r.   N   s    zAggrExceptionInInit.__init__c                 C   s   d S r   r   r6   r   r   r   r8   Q   s    zAggrExceptionInInit.stepc                 C   s   d S r   r   r,   r   r   r   r1   T   s    zAggrExceptionInInit.finalizeN©r2   r3   r4   r.   r8   r1   r   r   r   r   r9   M   s   r9   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInStepc                 C   s   d S r   r   r,   r   r   r   r.   X   s    zAggrExceptionInStep.__init__c                 C   s   dd  d S r   r   r6   r   r   r   r8   [   s    zAggrExceptionInStep.stepc                 C   s   dS r
   r   r,   r   r   r   r1   ^   s    zAggrExceptionInStep.finalizeNr:   r   r   r   r   r;   W   s   r;   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInFinalizec                 C   s   d S r   r   r,   r   r   r   r.   b   s    z AggrExceptionInFinalize.__init__c                 C   s   d S r   r   r6   r   r   r   r8   e   s    zAggrExceptionInFinalize.stepc                 C   s   dd  d S r   r   r,   r   r   r   r1   h   s    z AggrExceptionInFinalize.finalizeNr:   r   r   r   r   r<   a   s   r<   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrCheckTypec                 C   s
   d | _ d S r   ©Úvalr,   r   r   r   r.   l   s    zAggrCheckType.__init__c                 C   s.   t tttd ƒtdœ}t|| t|ƒu ƒ| _d S ©N)r   r   r    ÚNoneZblob©r   r   r    r   r$   r?   )r-   Ú	whichTyper?   ÚtheTyper   r   r   r8   o   s    ÿzAggrCheckType.stepc                 C   s   | j S r   r>   r,   r   r   r   r1   t   s    zAggrCheckType.finalizeNr:   r   r   r   r   r=   k   s   r=   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrCheckTypesc                 C   s
   d| _ d S )Nr   r>   r,   r   r   r   r.   x   s    zAggrCheckTypes.__init__c                 G   s@   t tttd ƒtdœ}|D ]"}|  jt|| t|ƒu ƒ7  _qd S r@   rB   )r-   rC   ZvalsrD   r?   r   r   r   r8   {   s
    ÿzAggrCheckTypes.stepc                 C   s   | j S r   r>   r,   r   r   r   r1      s    zAggrCheckTypes.finalizeNr:   r   r   r   r   rE   w   s   rE   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrSumc                 C   s
   d| _ d S )Nç        r>   r,   r   r   r   r.   …   s    zAggrSum.__init__c                 C   s   |  j |7  _ d S r   r>   )r-   r?   r   r   r   r8   ˆ   s    zAggrSum.stepc                 C   s   | j S r   r>   r,   r   r   r   r1   ‹   s    zAggrSum.finalizeNr:   r   r   r   r   rF   „   s   rF   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrTextc                 C   s
   d| _ d S )NÚ ©Útxtr,   r   r   r   r.      s    zAggrText.__init__c                 C   s   | j | | _ d S r   rJ   )r-   rK   r   r   r   r8   ‘   s    zAggrText.stepc                 C   s   | j S r   rJ   r,   r   r   r   r1   “   s    zAggrText.finalizeNr:   r   r   r   r   rH   Ž   s   rH   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Ze ejd)k d*¡d+d,„ ƒZe ejd)k d*¡d-d.„ ƒZe ejd)kd/¡d0d1„ ƒZd2d3„ Zd4S )5ÚFunctionTestsc                 C   s  t  d¡| _| j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt	¡ | j d	dt
¡ | j d
dt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j d¡ d S )Nú:memory:Z
returntextr   ZreturntextwithnullZreturnunicodeZ	returnintZreturnfloatZ
returnnullZ
returnblobZreturnlonglongZraiseexceptionÚisstringr0   ZisintZisfloatZisnoneZisblobZ
islonglongZspaméÿÿÿÿzcreate table test(t text))ÚsqliteÚconnectÚconÚcreate_functionr   r   r	   r   r   r   r   r   r   r   r   r!   r"   r&   r'   r*   Úexecuter,   r   r   r   ÚsetUp˜   s$    zFunctionTests.setUpc                 C   s   | j  ¡  d S r   )rR   Úcloser,   r   r   r   ÚtearDown®   s    zFunctionTests.tearDownc                 C   sD   |   tj¡$ | j dddd„ ¡ W d   ƒ n1 s60    Y  d S )NÚblaéœÿÿÿc                 S   s   d|  S )Né   r   )r7   r   r   r   Ú<lambda>³   ó    z6FunctionTests.CheckFuncErrorOnCreate.<locals>.<lambda>)ÚassertRaisesrP   ÚOperationalErrorrR   rS   r,   r   r   r   ÚCheckFuncErrorOnCreate±   s    z$FunctionTests.CheckFuncErrorOnCreatec                 C   s@   dd„ }|ƒ }|t ƒ d< | j dd|¡ | j ¡ }| d¡ d S )Nc                  S   s   dd„ } | S )Nc                   S   s   dS r/   r   r   r   r   r   Úf·   s    z;FunctionTests.CheckFuncRefCount.<locals>.getfunc.<locals>.fr   )r`   r   r   r   Úgetfunc¶   s    z0FunctionTests.CheckFuncRefCount.<locals>.getfuncr   Zreftestr   zselect reftest())ÚglobalsrR   rS   ÚcursorrT   )r-   ra   r`   Úcurr   r   r   ÚCheckFuncRefCountµ   s    

zFunctionTests.CheckFuncRefCountc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntext()r   r   ©rR   rc   rT   ÚfetchoneÚassertEqualr   r   ©r-   rd   r?   r   r   r   ÚCheckFuncReturnTextÁ   s
    

z!FunctionTests.CheckFuncReturnTextc                 C   s<   | j  ¡ }| d¡ ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntextwithnull()r   r   rf   )r-   rd   Úresr   r   r   ÚCheckFuncReturnTextWithNullCharÈ   s    
z-FunctionTests.CheckFuncReturnTextWithNullCharc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnunicode()r   r   rf   ri   r   r   r   ÚCheckFuncReturnUnicodeÎ   s
    

z$FunctionTests.CheckFuncReturnUnicodec                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnint()r   r   )rR   rc   rT   rg   rh   r   r   ri   r   r   r   ÚCheckFuncReturnIntÕ   s
    

z FunctionTests.CheckFuncReturnIntc                 C   sN   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |dk s@|dkrJ|  d¡ d S )Nzselect returnfloat()r   gé&1¬	@gTã¥›Ä 	@zwrong value)rR   rc   rT   rg   rh   r   r    Úfailri   r   r   r   ÚCheckFuncReturnFloatÜ   s    

z"FunctionTests.CheckFuncReturnFloatc                 C   sD   | j  ¡ }| d¡ | ¡ d }|  t|ƒtd ƒ¡ |  |d ¡ d S )Nzselect returnnull()r   )rR   rc   rT   rg   rh   r   ri   r   r   r   ÚCheckFuncReturnNullä   s
    

z!FunctionTests.CheckFuncReturnNullc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnblob()r   r   )rR   rc   rT   rg   rh   r   r$   ri   r   r   r   ÚCheckFuncReturnBlobë   s
    

z!FunctionTests.CheckFuncReturnBlobc                 C   s0   | j  ¡ }| d¡ | ¡ d }|  |d¡ d S )Nzselect returnlonglong()r   r   ©rR   rc   rT   rg   rh   ri   r   r   r   ÚCheckFuncReturnLongLongò   s    

z%FunctionTests.CheckFuncReturnLongLongc                 C   s^   | j  ¡ }|  tj¡"}| d¡ | ¡  W d   ƒ n1 s>0    Y  |  t|j	ƒd¡ d S )Nzselect raiseexception()z&user-defined function raised exception©
rR   rc   r]   rP   r^   rT   rg   rh   r   Ú	exception©r-   rd   Úcmr   r   r   ÚCheckFuncExceptionø   s
    

&z FunctionTests.CheckFuncExceptionc              	   C   sp   | j  ¡ }dtƒ fD ]V}| j|d6 | d|f¡ | ¡ d }|  |d¡ W d   ƒ q1 s`0    Y  qd S )Nr   )Útextzselect isstring(?)r   r0   )rR   rc   r   ÚsubTestrT   rg   rh   )r-   rd   rz   r?   r   r   r   ÚCheckParamStringÿ   s    
zFunctionTests.CheckParamStringc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isint(?)©r   r   r0   rs   ri   r   r   r   ÚCheckParamInt  s    
zFunctionTests.CheckParamIntc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isfloat(?)©r   r   r0   rs   ri   r   r   r   ÚCheckParamFloat  s    
zFunctionTests.CheckParamFloatc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isnone(?)r   r   r0   rs   ri   r   r   r   ÚCheckParamNone  s    
zFunctionTests.CheckParamNonec                 C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect isblob(?)r   r   r0   ©rR   rc   rT   r%   rg   rh   ri   r   r   r   ÚCheckParamBlob  s    
zFunctionTests.CheckParamBlobc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect islonglong(?))l        r   r0   rs   ri   r   r   r   ÚCheckParamLongLong  s    
z FunctionTests.CheckParamLongLongc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect spam(?, ?))r0   rZ   r   rZ   rs   ri   r   r   r   ÚCheckAnyArguments%  s    
zFunctionTests.CheckAnyArguments)é   é   r†   zRequires SQLite 3.8.3 or higherc                 C   s„   t jjd d}| jjdd|dd tjdk rH| j d¡ |  |j	d¡ n8|  
tj¡ | j d	¡ W d   ƒ n1 sv0    Y  d S )
N©Zreturn_valueZnondeterministicr   F©Údeterministic©r†   é   r   z.select nondeterministic() = nondeterministic()rZ   z>create index t on test(t) where nondeterministic() is not null)ÚunittestÚmockÚMockrR   rS   rP   Úsqlite_version_inforT   rh   Ú
call_countr]   r^   ©r-   rŽ   r   r   r   ÚCheckFuncNonDeterministic2  s    
z'FunctionTests.CheckFuncNonDeterministicc                 C   s|   t jjd d}| jjdd|dd tjdk rH| j d¡ |  |j	d¡ n0z| j d	¡ W n tj
yv   |  d
¡ Y n0 d S )Nrˆ   rŠ   r   Tr‰   r‹   z(select deterministic() = deterministic()r0   z;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index)r   rŽ   r   rR   rS   rP   r   rT   rh   r‘   r^   ro   r’   r   r   r   ÚCheckFuncDeterministic=  s    
z$FunctionTests.CheckFuncDeterministiczSQLite < 3.8.3 neededc                 C   sD   |   tj¡$ | jjddtdd W d   ƒ n1 s60    Y  d S )NrŠ   r   Tr‰   )r]   rP   ZNotSupportedErrorrR   rS   r   r,   r   r   r   Ú"CheckFuncDeterministicNotSupportedJ  s    z0FunctionTests.CheckFuncDeterministicNotSupportedc                 C   s@   |   t¡" | j ddtd¡ W d   ƒ n1 s20    Y  d S )NrŠ   r   T)r]   Ú	TypeErrorrR   rS   r   r,   r   r   r   Ú!CheckFuncDeterministicKeywordOnlyO  s    z/FunctionTests.CheckFuncDeterministicKeywordOnlyN)r2   r3   r4   rU   rW   r_   re   rj   rl   rm   rn   rp   rq   rr   rt   ry   r|   r~   r€   r   rƒ   r„   r…   r   ZskipIfrP   r   r“   r”   r•   r—   r   r   r   r   rL   —   s6   



rL   c                   @   sŒ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚAggregateTestsc              	   C   sÎ   t  d¡| _| j ¡ }| d¡ | ddddd tdƒf¡ | j dd	t¡ | j d
d	t¡ | j dd	t	¡ | j dd	t
¡ | j dd	t¡ | j ddt¡ | j ddt¡ | j dd	t¡ | j dd	t¡ d S )NrM   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   Znostepr0   Z
nofinalizeZexcInitZexcStepZexcFinalizeZ	checkTyperZ   Z
checkTypesrO   ZmysumZaggtxt)rP   rQ   rR   rc   rT   r%   Zcreate_aggregater+   r5   r9   r;   r<   r=   rE   rF   rH   )r-   rd   r   r   r   rU   U  s    

	ÿzAggregateTests.setUpc                 C   s   d S r   r   r,   r   r   r   rW   n  s    zAggregateTests.tearDownc                 C   s@   |   tj¡  | j ddt¡ W d   ƒ n1 s20    Y  d S )NrX   rY   )r]   rP   r^   rR   rS   rF   r,   r   r   r   ÚCheckAggrErrorOnCreates  s    z%AggregateTests.CheckAggrErrorOnCreatec                 C   sT   | j  ¡ }|  t¡}| d¡ W d   ƒ n1 s40    Y  |  t|jƒd¡ d S )Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')rR   rc   r]   ÚAttributeErrorrT   rh   r   rv   rw   r   r   r   ÚCheckAggrNoStepw  s    
(zAggregateTests.CheckAggrNoStepc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect nofinalize(t) from testr   ú7user-defined aggregate's 'finalize' method raised errorru   ©r-   rd   rx   r?   r   r   r   ÚCheckAggrNoFinalize}  s
    

*z"AggregateTests.CheckAggrNoFinalizec                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised errorru   r   r   r   r   ÚCheckAggrExceptionInInit„  s
    

*z'AggregateTests.CheckAggrExceptionInInitc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised errorru   r   r   r   r   ÚCheckAggrExceptionInStep‹  s
    

*z'AggregateTests.CheckAggrExceptionInStepc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excFinalize(t) from testr   rœ   ru   r   r   r   r   ÚCheckAggrExceptionInFinalize’  s
    

*z+AggregateTests.CheckAggrExceptionInFinalizec                 C   s8   | j  ¡ }| ddtƒ f¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('str', ?, ?)r   r   rZ   )rR   rc   rT   r   rg   rh   ri   r   r   r   ÚCheckAggrCheckParamStr™  s    
z%AggregateTests.CheckAggrCheckParamStrc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('int', ?)r}   r   r0   rs   ri   r   r   r   ÚCheckAggrCheckParamIntŸ  s    
z%AggregateTests.CheckAggrCheckParamIntc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('int', ?, ?))r   é   r   rZ   rs   ri   r   r   r   ÚCheckAggrCheckParamsInt¥  s    
z&AggregateTests.CheckAggrCheckParamsIntc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('float', ?)r   r   r0   rs   ri   r   r   r   ÚCheckAggrCheckParamFloat«  s    
z'AggregateTests.CheckAggrCheckParamFloatc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('None', ?)r   r   r0   rs   ri   r   r   r   ÚCheckAggrCheckParamNone±  s    
z&AggregateTests.CheckAggrCheckParamNonec                 C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect checkType('blob', ?)r   r   r0   r‚   ri   r   r   r   ÚCheckAggrCheckParamBlob·  s    
z&AggregateTests.CheckAggrCheckParamBlobc                 C   sJ   | j  ¡ }| d¡ | dg d¢¡ | d¡ | ¡ d }|  |d¡ d S )Nzdelete from testzinsert into test(i) values (?)))é
   )é   )é   zselect mysum(i) from testr   é<   )rR   rc   rT   Zexecutemanyrg   rh   ri   r   r   r   ÚCheckAggrCheckAggrSum½  s    


z$AggregateTests.CheckAggrCheckAggrSumc              	   C   sj   | j  ¡ }dD ]V}| j|d6 | d|f¡ | ¡ d }|  ||¡ W d   ƒ q1 sZ0    Y  qd S )N)r   r   rJ   zselect aggtxt(?) from testr   )rR   rc   r{   rT   rg   rh   )r-   rd   rK   r?   r   r   r   ÚCheckAggrTextÅ  s    
zAggregateTests.CheckAggrTextN)r2   r3   r4   rU   rW   r™   r›   rž   rŸ   r    r¡   r¢   r£   r¥   r¦   r§   r¨   r­   r®   r   r   r   r   r˜   T  s    r˜   c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAuthorizerTestsc                 C   s,   | t jkrt jS |dks |dkr&t jS t jS ©NÚc2Út2)rP   ÚSQLITE_SELECTZSQLITE_DENYÚ	SQLITE_OK©ÚactionZarg1Zarg2ZdbnameÚsourcer   r   r   Úauthorizer_cbÏ  s
    
zAuthorizerTests.authorizer_cbc                 C   s6   t  d¡| _| j d¡ | j d¡ | j | j¡ d S )NrM   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)rP   rQ   rR   ZexecutescriptrT   Zset_authorizerr¸   r,   r   r   r   rU   ×  s    zAuthorizerTests.setUpc                 C   s   d S r   r   r,   r   r   r   rW   å  s    zAuthorizerTests.tearDownc                 C   sN   |   tj¡}| j d¡ W d   ƒ n1 s.0    Y  |  dt|jƒ¡ d S )Nzselect * from t2Ú
prohibited©r]   rP   ZDatabaseErrorrR   rT   ZassertInr   rv   ©r-   rx   r   r   r   Útest_table_accessè  s    *z!AuthorizerTests.test_table_accessc                 C   sN   |   tj¡}| j d¡ W d   ƒ n1 s.0    Y  |  dt|jƒ¡ d S )Nzselect c2 from t1r¹   rº   r»   r   r   r   Útest_column_accessí  s    *z"AuthorizerTests.test_column_accessN)	r2   r3   r4   Ústaticmethodr¸   rU   rW   r¼   r½   r   r   r   r   r¯   Î  s   
r¯   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerRaiseExceptionTestsc                 C   s(   | t jkrt‚|dks|dkr"t‚t jS r°   )rP   r³   Ú
ValueErrorr´   rµ   r   r   r   r¸   ó  s
    
z+AuthorizerRaiseExceptionTests.authorizer_cbN©r2   r3   r4   r¾   r¸   r   r   r   r   r¿   ò  s   r¿   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerIllegalTypeTestsc                 C   s(   | t jkrdS |dks|dkr"dS t jS )NrG   r±   r²   ©rP   r³   r´   rµ   r   r   r   r¸   ü  s
    
z(AuthorizerIllegalTypeTests.authorizer_cbNrÁ   r   r   r   r   rÂ   û  s   rÂ   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerLargeIntegerTestsc                 C   s(   | t jkrdS |dks|dkr"dS t jS )Nl        r±   r²   rÃ   rµ   r   r   r   r¸     s
    
z)AuthorizerLargeIntegerTests.authorizer_cbNrÁ   r   r   r   r   rÄ     s   rÄ   c               
   C   sJ   t  td¡} t  td¡}t  t¡}t  | ||t  t¡t  t¡t  t¡f¡S )NZCheck)	r   Z	makeSuiterL   r˜   r¯   Z	TestSuiter¿   rÂ   rÄ   )Zfunction_suiteZaggregate_suiteZauthorizer_suiter   r   r   Úsuite  s    
úrÅ   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r   ZTextTestRunnerÚrunrÅ   )Zrunnerr   r   r   Útest  s    rÇ   Ú__main__)'r   Zunittest.mockZsqlite3rP   r   r   r	   r   r   r   r   r   r   r   r   r!   r"   r&   r'   r*   r+   r5   r9   r;   r<   r=   rE   rF   rH   ZTestCaserL   r˜   r¯   r¿   rÂ   rÄ   rÅ   rÇ   r2   r   r   r   r   Ú<module>   sL   



	 >z$		

