o
    GXîhxL  ã                   @   sv  d dl Z d dlZ d dlZd dlm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 d#d$„ d$ƒZG d%d&„ d&ƒZG d'd(„ d(e jƒZG d)d*„ d*e jƒZG d+d,„ d,e jƒZG d-d.„ d.eƒZG d/d0„ d0eƒZG d1d2„ d2eƒZd3d4„ Zd5d6„ Z e!d7kr¹e ƒ  dS dS )8é    N)Ú
gc_collectc                   C   ó   dS )NÚfoo© r   r   r   úD/opt/python-3.10.19/usr/lib/python3.10/sqlite3/test/userfunctions.pyÚfunc_returntext   ó   r   c                   C   r   )Nú1 2r   r   r   r   r   Úfunc_returntextwithnull!   r   r
   c                   C   r   )NÚbarr   r   r   r   r   Úfunc_returnunicode#   r   r   c                   C   r   ©Né*   r   r   r   r   r   Úfunc_returnint%   r   r   c                   C   r   )Nç…ëQ¸	@r   r   r   r   r   Úfunc_returnfloat'   r   r   c                   C   ó   d S ©Nr   r   r   r   r   Úfunc_returnnull)   r   r   c                   C   r   )Nó   blobr   r   r   r   r   Úfunc_returnblob+   r   r   c                   C   r   )Nì        r   r   r   r   r   Úfunc_returnlonglong-   r   r   c                   C   ó   dd  d S ©Né   r   r   r   r   r   r   Úfunc_raiseexception/   ó   r   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú
AggrNoStepc                 C   r   r   r   ©Úselfr   r   r   Ú__init__3   r   zAggrNoStep.__init__c                 C   r   ©Né   r   r    r   r   r   Úfinalize6   r   zAggrNoStep.finalizeN)Ú__name__Ú
__module__Ú__qualname__r"   r%   r   r   r   r   r   2   ó    r   c                   @   r   )ÚAggrNoFinalizec                 C   r   r   r   r    r   r   r   r"   :   r   zAggrNoFinalize.__init__c                 C   r   r   r   ©r!   Úxr   r   r   Ústep=   r   zAggrNoFinalize.stepN)r&   r'   r(   r"   r-   r   r   r   r   r*   9   r)   r*   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInInitc                 C   r   r   r   r    r   r   r   r"   A   r   zAggrExceptionInInit.__init__c                 C   r   r   r   r+   r   r   r   r-   D   r   zAggrExceptionInInit.stepc                 C   r   r   r   r    r   r   r   r%   G   r   zAggrExceptionInInit.finalizeN©r&   r'   r(   r"   r-   r%   r   r   r   r   r/   @   ó    r/   c                   @   r.   )ÚAggrExceptionInStepc                 C   r   r   r   r    r   r   r   r"   K   r   zAggrExceptionInStep.__init__c                 C   r   r   r   r+   r   r   r   r-   N   r   zAggrExceptionInStep.stepc                 C   r   r   r   r    r   r   r   r%   Q   r   zAggrExceptionInStep.finalizeNr0   r   r   r   r   r2   J   r1   r2   c                   @   r.   )ÚAggrExceptionInFinalizec                 C   r   r   r   r    r   r   r   r"   U   r   z AggrExceptionInFinalize.__init__c                 C   r   r   r   r+   r   r   r   r-   X   r   zAggrExceptionInFinalize.stepc                 C   r   r   r   r    r   r   r   r%   [   r   z AggrExceptionInFinalize.finalizeNr0   r   r   r   r   r3   T   r1   r3   c                   @   r.   )ÚAggrCheckTypec                 C   s
   d | _ d S r   ©Úvalr    r   r   r   r"   _   ó   
zAggrCheckType.__init__c                 C   s.   t tttd ƒtdœ}t|| t|ƒu ƒ| _d S ©N)ÚstrÚintÚfloatÚNoneZblob©r9   r:   r;   ÚtypeÚbytesr6   )r!   Ú	whichTyper6   ÚtheTyper   r   r   r-   b   s   ÿzAggrCheckType.stepc                 C   ó   | j S r   r5   r    r   r   r   r%   g   ó   zAggrCheckType.finalizeNr0   r   r   r   r   r4   ^   s    r4   c                   @   r.   )ÚAggrCheckTypesc                 C   ó
   d| _ d S )Nr   r5   r    r   r   r   r"   k   r7   zAggrCheckTypes.__init__c                 G   s@   t tttd ƒtdœ}|D ]}|  jt|| t|ƒu ƒ7  _qd S r8   r=   )r!   r@   ZvalsrA   r6   r   r   r   r-   n   s   ÿ ÿzAggrCheckTypes.stepc                 C   rB   r   r5   r    r   r   r   r%   t   rC   zAggrCheckTypes.finalizeNr0   r   r   r   r   rD   j   s    rD   c                   @   r.   )ÚAggrSumc                 C   rE   )Nç        r5   r    r   r   r   r"   x   r7   zAggrSum.__init__c                 C   s   |  j |7  _ d S r   r5   )r!   r6   r   r   r   r-   {   s   zAggrSum.stepc                 C   rB   r   r5   r    r   r   r   r%   ~   rC   zAggrSum.finalizeNr0   r   r   r   r   rF   w   r1   rF   c                   @   r.   )ÚAggrTextc                 C   rE   )NÚ ©Útxtr    r   r   r   r"   ‚   r7   zAggrText.__init__c                 C   s   | j | | _ d S r   rJ   )r!   rK   r   r   r   r-   „   s   zAggrText.stepc                 C   rB   r   rJ   r    r   r   r   r%   †   rC   zAggrText.finalizeNr0   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d)d*„ Zd+d,„ Ze ejd-k d.¡d/d0„ ƒZe ejd-k d.¡d1d2„ ƒZe ejd-kd3¡d4d5„ ƒZd6d7„ Z d8d9„ Z!d:S );Ú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dd„ ¡ | j dddd„ ¡ | j ddt¡ | j dddd„ ¡ | j dddd„ ¡ | j dddd„ ¡ | j d¡ d S )Nú:memory:Z
returntextr   ZreturntextwithnullZreturnunicodeZ	returnintZreturnfloatZ
returnnullZ
returnblobZreturnlonglongZ	returnnanc                   S   s   t dƒS )NÚnan)r;   r   r   r   r   Ú<lambda>–   ó    z%FunctionTests.setUp.<locals>.<lambda>Zreturntoolargeintc                   S   r   )Nì             r   r   r   r   r   rO   —   s    ZraiseexceptionZisblobr$   c                 S   s
   t | tƒS r   )Ú
isinstancer?   ©r,   r   r   r   rO   š   s   
 Zisnonec                 S   s   | d u S r   r   rS   r   r   r   rO   ›   rP   Zspaméÿÿÿÿc                  W   s   t | ƒS r   )ÚlenrS   r   r   r   rO   œ   rP   zcreate table test(t text))ÚsqliteÚconnectÚconÚcreate_functionr   r
   r   r   r   r   r   r   r   Úexecuter    r   r   r   ÚsetUp‹   s    zFunctionTests.setUpc                 C   s   | j  ¡  d S r   )rX   Úcloser    r   r   r   ÚtearDownŸ   s   zFunctionTests.tearDownc                 C   sF   |   tj¡ | j dddd„ ¡ W d   ƒ d S 1 sw   Y  d S )NÚblaéœÿÿÿc                 S   s   d|  S )Né   r   rS   r   r   r   rO   ¤   rP   z9FunctionTests.test_func_error_on_create.<locals>.<lambda>)ÚassertRaisesrV   ÚOperationalErrorrX   rY   r    r   r   r   Útest_func_error_on_create¢   s   "ÿz'FunctionTests.test_func_error_on_createc                 C   s@   dd„ }|ƒ }|t ƒ d< | j dd|¡ | j ¡ }| d¡ d S )Nc                  S   s   dd„ } | S )Nc                   S   r   r#   r   r   r   r   r   Úf¨   r   z=FunctionTests.test_func_ref_count.<locals>.getfunc.<locals>.fr   )rd   r   r   r   Úgetfunc§   s   z2FunctionTests.test_func_ref_count.<locals>.getfuncr   Zreftestr   zselect reftest())ÚglobalsrX   rY   ÚcursorrZ   )r!   re   rd   Úcurr   r   r   Útest_func_ref_count¦   s   

z!FunctionTests.test_func_ref_countc                 C   ó@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntext()r   r   ©rX   rg   rZ   ÚfetchoneÚassertEqualr>   r9   ©r!   rh   r6   r   r   r   Útest_func_return_text²   ó
   

z#FunctionTests.test_func_return_textc                 C   s<   | j  ¡ }| d¡ ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntextwithnull()r   r	   rk   )r!   rh   Úresr   r   r   Ú$test_func_return_text_with_null_char¹   s   
z2FunctionTests.test_func_return_text_with_null_charc                 C   rj   )Nzselect returnunicode()r   r   rk   rn   r   r   r   Útest_func_return_unicode¿   rp   z&FunctionTests.test_func_return_unicodec                 C   rj   )Nzselect returnint()r   r   )rX   rg   rZ   rl   rm   r>   r:   rn   r   r   r   Útest_func_return_intÆ   rp   z"FunctionTests.test_func_return_intc                 C   sR   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |dk s |dkr'|  d¡ d S d S )Nzselect returnfloat()r   gé&1¬	@gTã¥›Ä 	@zwrong value)rX   rg   rZ   rl   rm   r>   r;   Úfailrn   r   r   r   Útest_func_return_floatÍ   s   

ÿz$FunctionTests.test_func_return_floatc                 C   sD   | j  ¡ }| d¡ | ¡ d }|  t|ƒtd ƒ¡ |  |d ¡ d S )Nzselect returnnull()r   )rX   rg   rZ   rl   rm   r>   rn   r   r   r   Útest_func_return_nullÕ   s
   

z#FunctionTests.test_func_return_nullc                 C   rj   )Nzselect returnblob()r   r   )rX   rg   rZ   rl   rm   r>   r?   rn   r   r   r   Útest_func_return_blobÜ   rp   z#FunctionTests.test_func_return_blobc                 C   s0   | j  ¡ }| d¡ | ¡ d }|  |d¡ d S )Nzselect returnlonglong()r   r   ©rX   rg   rZ   rl   rm   rn   r   r   r   Útest_func_return_long_longã   s   

z(FunctionTests.test_func_return_long_longc                 C   s*   | j  ¡ }| d¡ |  | ¡ d ¡ d S )Nzselect returnnan()r   )rX   rg   rZ   ÚassertIsNonerl   ©r!   rh   r   r   r   Útest_func_return_nané   s   

z"FunctionTests.test_func_return_nanc                 C   sH   | j  ¡ }|  tj¡ | j  d¡ W d   ƒ d S 1 sw   Y  d S )Nzselect returntoolargeint())rX   rg   ra   rV   rb   rZ   r|   r   r   r   Útest_func_return_too_large_intî   s   
"ÿz,FunctionTests.test_func_return_too_large_intc                 C   s^   | j  ¡ }|  tj¡}| d¡ | ¡  W d   ƒ n1 sw   Y  |  t|j	ƒd¡ d S )Nzselect raiseexception()z&user-defined function raised exception©
rX   rg   ra   rV   rb   rZ   rl   rm   r9   Ú	exception©r!   rh   Úcmr   r   r   Útest_func_exceptionó   s   


þz!FunctionTests.test_func_exceptionc                 C   ó2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect spam(?, ?))r$   r`   r   r`   ry   rn   r   r   r   Útest_any_argumentsú   ó   
z FunctionTests.test_any_argumentsc                 C   s"   | j  d¡}|  | ¡ d ¡ d S )Nzselect isblob(x'')r   )rX   rZ   Ú
assertTruerl   r|   r   r   r   Útest_empty_blob   s   zFunctionTests.test_empty_blobc                 C   s*   | j  dtdƒf¡}|  | ¡ d ¡ d S )Nzselect isnone(?)rN   r   )rX   rZ   r;   r‡   rl   r|   r   r   r   Útest_nan_float  s   zFunctionTests.test_nan_floatc                 C   s   d}|   t|| jjdd¡ d S )Nz1Python int too large to convert to SQLite INTEGERúselect spam(?))rQ   )ÚassertRaisesRegexÚOverflowErrorrX   rZ   )r!   Úerrr   r   r   Útest_too_large_int	  s   ÿz FunctionTests.test_too_large_intc              
   C   s*   |   td| jjdtdƒd d d… f¡ d S )Nz could not convert BLOB to bufferrŠ   r   r`   )r‹   Ú
ValueErrorrX   rZ   Ú
memoryviewr    r   r   r   Útest_non_contiguous_blob  s   þz&FunctionTests.test_non_contiguous_blobc                 C   s   |   td| jjdd¡ d S )Nzsurrogates not allowedrŠ   )u   í ƒí¹­)r‹   ÚUnicodeEncodeErrorrX   rZ   r    r   r   r   Útest_param_surrogates  s   þz#FunctionTests.test_param_surrogatesc                    s¼   g ‰ ‡ fdd„}| j  dd|¡ dtfdtfdtfdtfd	tftd
ƒtfdtfdtfdtfdtfttdƒƒtftdƒtfd t	d ƒfg}|D ]\}}| j  
d|f¡}| ¡  qE|  |ˆ ¡ d S )Nc                    s   ˆ   | t| ƒf¡ d S r   )Úappendr>   )Úarg©Úresultsr   r   Úappend_result  s   z5FunctionTests.test_func_params.<locals>.append_resultZtest_paramsr$   r   rT   l   Ó{ÑC	 l           r   ÚinfÚtextr	   u   Ë¢qË¡â±áµ—áµ‰r   r`   zselect test_params(?))rX   rY   r:   r;   r9   r?   Ú	bytearrayÚranger   r>   rZ   rl   rm   )r!   r˜   Zdatasetr6   Ú_rh   r   r–   r   Útest_func_params  s*   


ó
zFunctionTests.test_func_params)é   é   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 r%| j d¡ |  |j	d¡ d S |  
tj¡ | j d	¡ W d   ƒ d S 1 s=w   Y  d S )
N©Zreturn_valueZnondeterministicr   F©Údeterministic©rŸ   é   r   z.select nondeterministic() = nondeterministic()r`   z>create index t on test(t) where nondeterministic() is not null)ÚunittestÚmockÚMockrX   rY   rV   Úsqlite_version_inforZ   rm   Ú
call_countra   rb   ©r!   r§   r   r   r   Útest_func_non_deterministic9  s   
"ÿz)FunctionTests.test_func_non_deterministicc                 C   s~   t jjd d}| jjdd|dd tjdk r%| j d¡ |  |j	d¡ d S z	| j d	¡ W d S  tj
y>   |  d
¡ Y d S w )Nr¡   r£   r   Tr¢   r¤   z(select deterministic() = deterministic()r$   z;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index)r¦   r§   r¨   rX   rY   rV   r©   rZ   rm   rª   rb   ru   r«   r   r   r   Útest_func_deterministicD  s   
ÿz%FunctionTests.test_func_deterministiczSQLite < 3.8.3 neededc                 C   sF   |   tj¡ | jjddtdd W d   ƒ d S 1 sw   Y  d S )Nr£   r   Tr¢   )ra   rV   ZNotSupportedErrorrX   rY   r:   r    r   r   r   Ú%test_func_deterministic_not_supportedQ  s   "ÿz3FunctionTests.test_func_deterministic_not_supportedc                 C   sB   |   t¡ | j ddtd¡ W d   ƒ d S 1 sw   Y  d S )Nr£   r   T)ra   Ú	TypeErrorrX   rY   r:   r    r   r   r   Ú$test_func_deterministic_keyword_onlyV  s   "ÿz2FunctionTests.test_func_deterministic_keyword_onlyc                 C   sJ   t  d¡}dd„ }| dd|¡ |dƒ}~~|g}| |¡ ~~tƒ  d S )NrM   c                 S   r   r   r   )Útr   r   r   Úmd5sum^  r   z=FunctionTests.test_function_destructor_via_gc.<locals>.md5sumÚmd5r$   z(create table lang (name, first_appeared))rV   rW   rY   r”   r   )r!   Údestr²   r,   Úyr   r   r   Útest_function_destructor_via_gcZ  s   


z-FunctionTests.test_function_destructor_via_gcN)"r&   r'   r(   r[   r]   rc   ri   ro   rr   rs   rt   rv   rw   rx   rz   r}   r~   rƒ   r…   rˆ   r‰   rŽ   r‘   r“   rž   r¦   ZskipIfrV   r©   r¬   r­   r®   r°   r¶   r   r   r   r   rL   Š   s>    !



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!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nostepr$   Z
nofinalizeZexcInitZexcStepZexcFinalizeZ	checkTyper`   Z
checkTypesrT   ZmysumZaggtxt)rV   rW   rX   rg   rZ   r   Zcreate_aggregater   r*   r/   r2   r3   r4   rD   rF   rH   r|   r   r   r   r[   l  s   

	ÿzAggregateTests.setUpc                 C   r   r   r   r    r   r   r   r]   …  s   zAggregateTests.tearDownc                 C   sB   |   tj¡ | j ddt¡ W d   ƒ d S 1 sw   Y  d S )Nr^   r_   )ra   rV   rb   rX   rY   rF   r    r   r   r   Útest_aggr_error_on_createŠ  s   "ÿz(AggregateTests.test_aggr_error_on_createc                 C   sT   | j  ¡ }|  t¡}| d¡ W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')rX   rg   ra   ÚAttributeErrorrZ   rm   r9   r€   r   r   r   r   Útest_aggr_no_stepŽ  s
   
ÿz AggregateTests.test_aggr_no_stepc                 C   ób   | j  ¡ }|  tj¡}| d¡ | ¡ d }W d   ƒ n1 s!w   Y  |  t|j	ƒd¡ d S )Nzselect nofinalize(t) from testr   ú7user-defined aggregate's 'finalize' method raised errorr   ©r!   rh   r‚   r6   r   r   r   Útest_aggr_no_finalize”  ó   

þz$AggregateTests.test_aggr_no_finalizec                 C   r»   )Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised errorr   r½   r   r   r   Útest_aggr_exception_in_init›  r¿   z*AggregateTests.test_aggr_exception_in_initc                 C   r»   )Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised errorr   r½   r   r   r   Útest_aggr_exception_in_step¢  r¿   z*AggregateTests.test_aggr_exception_in_stepc                 C   r»   )Nzselect excFinalize(t) from testr   r¼   r   r½   r   r   r   Útest_aggr_exception_in_finalize©  r¿   z.AggregateTests.test_aggr_exception_in_finalizec                 C   s8   | j  ¡ }| ddtƒ f¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('str', ?, ?)r   r   r`   )rX   rg   rZ   r9   rl   rm   rn   r   r   r   Útest_aggr_check_param_str°  ó   
z(AggregateTests.test_aggr_check_param_strc                 C   r„   )Nzselect checkType('int', ?))r   r   r$   ry   rn   r   r   r   Útest_aggr_check_param_int¶  r†   z(AggregateTests.test_aggr_check_param_intc                 C   r„   )Nzselect checkTypes('int', ?, ?))r   é   r   r`   ry   rn   r   r   r   Útest_aggr_check_params_int¼  r†   z)AggregateTests.test_aggr_check_params_intc                 C   r„   )Nzselect checkType('float', ?))r   r   r$   ry   rn   r   r   r   Útest_aggr_check_param_floatÂ  r†   z*AggregateTests.test_aggr_check_param_floatc                 C   r„   )Nzselect checkType('None', ?)r   r   r$   ry   rn   r   r   r   Útest_aggr_check_param_noneÈ  r†   z)AggregateTests.test_aggr_check_param_nonec                 C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect checkType('blob', ?)r   r   r$   )rX   rg   rZ   r   rl   rm   rn   r   r   r   Útest_aggr_check_param_blobÎ  rÄ   z)AggregateTests.test_aggr_check_param_blobc                 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   é<   )rX   rg   rZ   Zexecutemanyrl   rm   rn   r   r   r   Útest_aggr_check_aggr_sumÔ  s   


z'AggregateTests.test_aggr_check_aggr_sumc                 C   s&   | j  d¡}| ¡ d }|  |¡ d S )Nz1select mysum(i) from (select 1 as i) where i == 0r   )rX   rZ   rl   r{   rn   r   r   r   Útest_aggr_no_matchÜ  s   z!AggregateTests.test_aggr_no_matchc              	   C   sj   | j  ¡ }dD ]+}| j|d | d|f¡ | ¡ d }|  ||¡ W d   ƒ n1 s-w   Y  qd S )N)r   r	   rJ   zselect aggtxt(?) from testr   )rX   rg   ZsubTestrZ   rl   rm   )r!   rh   rK   r6   r   r   r   Útest_aggr_textá  s   
ý€ÿzAggregateTests.test_aggr_textN)r&   r'   r(   r[   r]   r¸   rº   r¾   rÀ   rÁ   rÂ   rÃ   rÅ   rÇ   rÈ   rÉ   rÊ   rÏ   rÐ   rÑ   r   r   r   r   r·   k  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)rV   Ú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)rV   rW   rX   ZexecutescriptrZ   Zset_authorizerrÛ   r    r   r   r   r[   ó  s   zAuthorizerTests.setUpc                 C   r   r   r   r    r   r   r   r]     r   zAuthorizerTests.tearDownc                 C   óN   |   tj¡}| j d¡ W d   ƒ n1 sw   Y  |  dt|jƒ¡ d S )Nzselect * from t2Ú
prohibited©ra   rV   ZDatabaseErrorrX   rZ   ZassertInr9   r€   ©r!   r‚   r   r   r   Útest_table_access  ó   ÿz!AuthorizerTests.test_table_accessc                 C   rÜ   )Nzselect c2 from t1rÝ   rÞ   rß   r   r   r   Útest_column_access	  rá   z"AuthorizerTests.test_column_accessN)	r&   r'   r(   ÚstaticmethodrÛ   r[   r]   rà   râ   r   r   r   r   rÒ   ê  s    
rÒ   c                   @   ó   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Ó   )rV   rÖ   r   r×   rØ   r   r   r   rÛ     ó
   
z+AuthorizerRaiseExceptionTests.authorizer_cbN©r&   r'   r(   rã   rÛ   r   r   r   r   rå     ó    rå   c                   @   rä   )ÚAuthorizerIllegalTypeTestsc                 C   ó(   | t jkrdS |dks|dkrdS t jS )NrG   rÔ   rÕ   ©rV   rÖ   r×   rØ   r   r   r   rÛ     ræ   z(AuthorizerIllegalTypeTests.authorizer_cbNrç   r   r   r   r   ré     rè   ré   c                   @   rä   )ÚAuthorizerLargeIntegerTestsc                 C   rê   )Nl        rÔ   rÕ   rë   rØ   r   r   r   rÛ   !  ræ   z)AuthorizerLargeIntegerTests.authorizer_cbNrç   r   r   r   r   rì      rè   rì   c                  C   s$   t tttttg} t dd„ | D ƒ¡S )Nc                 S   s   g | ]	}t  ¡  |¡‘qS r   )r¦   Z
TestLoaderZloadTestsFromTestCase)Ú.0r±   r   r   r   Ú
<listcomp>4  s    zsuite.<locals>.<listcomp>)r·   ré   rì   rå   rÒ   rL   r¦   Z	TestSuite)Ztestsr   r   r   Úsuite*  s   úÿrï   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r¦   ZTextTestRunnerÚrunrï   )Zrunnerr   r   r   Útest7  s   rñ   Ú__main__)"r¦   Zunittest.mockZsqlite3rV   Ztest.supportr   r   r
   r   r   r   r   r   r   r   r   r*   r/   r2   r3   r4   rD   rF   rH   ZTestCaserL   r·   rÒ   rå   ré   rì   rï   rñ   r&   r   r   r   r   Ú<module>   sD   



	 b$		

ÿ