3
tY];                 @   s  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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 d0d1 d1e jZG d2d3 d3e jZG d4d5 d5e jZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZ d<d= Z!d>d? Z"e#d@kr~e"  dS )A    Nc               C   s   dS )Nfoo r   r   r   +lib/python3.6/sqlite3/test/userfunctions.pyfunc_returntext   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 )Ng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 )Ns   blobr   r   r   r   r   func_returnblob&   s    r   c               C   s   dS )N      l        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kS )N)typestr)vr   r   r   func_isstring-   s    r   c             C   s   t | tkS )N)r   int)r   r   r   r   
func_isint/   s    r   c             C   s   t | tkS )N)r   float)r   r   r   r   func_isfloat1   s    r   c             C   s   t | t d kS )N)r   )r   r   r   r   func_isnone3   s    r   c             C   s   t | ttfS )N)
isinstancebytes
memoryview)r   r   r   r   func_isblob5   s    r   c             C   s   t | to| dkS )Nr   r   l        )r   r   )r   r   r   r   func_islonglong7   s    r   c              G   s   t | S )N)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 )Nr   )selfr   r   r   __init__>   s    zAggrNoStep.__init__c             C   s   dS )Nr   r   )r$   r   r   r   finalizeA   s    zAggrNoStep.finalizeN)__name__
__module____qualname__r%   r&   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 )Nr   )r$   r   r   r   r%   E   s    zAggrNoFinalize.__init__c             C   s   d S )Nr   )r$   xr   r   r   stepH   s    zAggrNoFinalize.stepN)r'   r(   r)   r%   r,   r   r   r   r   r*   D   s   r*   c               @   s$   e Zd Zdd Zdd Zdd ZdS )AggrExceptionInInitc             C   s   dd  d S )Nr   r   r   )r$   r   r   r   r%   L   s    zAggrExceptionInInit.__init__c             C   s   d S )Nr   )r$   r+   r   r   r   r,   O   s    zAggrExceptionInInit.stepc             C   s   d S )Nr   )r$   r   r   r   r&   R   s    zAggrExceptionInInit.finalizeN)r'   r(   r)   r%   r,   r&   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 )AggrExceptionInStepc             C   s   d S )Nr   )r$   r   r   r   r%   V   s    zAggrExceptionInStep.__init__c             C   s   dd  d S )Nr   r   r   )r$   r+   r   r   r   r,   Y   s    zAggrExceptionInStep.stepc             C   s   dS )Nr   r   )r$   r   r   r   r&   \   s    zAggrExceptionInStep.finalizeN)r'   r(   r)   r%   r,   r&   r   r   r   r   r.   U   s   r.   c               @   s$   e Zd Zdd Zdd Zdd ZdS )AggrExceptionInFinalizec             C   s   d S )Nr   )r$   r   r   r   r%   `   s    z AggrExceptionInFinalize.__init__c             C   s   d S )Nr   )r$   r+   r   r   r   r,   c   s    zAggrExceptionInFinalize.stepc             C   s   dd  d S )Nr   r   r   )r$   r   r   r   r&   f   s    z AggrExceptionInFinalize.finalizeN)r'   r(   r)   r%   r,   r&   r   r   r   r   r/   _   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 )N)val)r$   r   r   r   r%   j   s    zAggrCheckType.__init__c             C   s.   t tttd td}t|| t|k| _d S )N)r   r   r   Noneblob)r   r   r   r   r   r1   )r$   	whichTyper1   theTyper   r   r   r,   m   s    zAggrCheckType.stepc             C   s   | j S )N)r1   )r$   r   r   r   r&   r   s    zAggrCheckType.finalizeN)r'   r(   r)   r%   r,   r&   r   r   r   r   r0   i   s   r0   c               @   s$   e Zd Zdd Zdd Zdd ZdS )AggrCheckTypesc             C   s
   d| _ d S )Nr   )r1   )r$   r   r   r   r%   v   s    zAggrCheckTypes.__init__c             G   sD   t tttd td}x*|D ]"}|  jt|| t|k7  _qW d S )N)r   r   r   r2   r3   )r   r   r   r   r   r1   )r$   r4   valsr5   r1   r   r   r   r,   y   s    
zAggrCheckTypes.stepc             C   s   | j S )N)r1   )r$   r   r   r   r&      s    zAggrCheckTypes.finalizeN)r'   r(   r)   r%   r,   r&   r   r   r   r   r6   u   s   r6   c               @   s$   e Zd Zdd Zdd Zdd ZdS )AggrSumc             C   s
   d| _ d S )Ng        )r1   )r$   r   r   r   r%      s    zAggrSum.__init__c             C   s   |  j |7  _ d S )N)r1   )r$   r1   r   r   r   r,      s    zAggrSum.stepc             C   s   | j S )N)r1   )r$   r   r   r   r&      s    zAggrSum.finalizeN)r'   r(   r)   r%   r,   r&   r   r   r   r   r8      s   r8   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'S )(FunctionTestsc             C   s   t jd| _| jjddt | jjddt | jjddt | jjddt | jjddt | jjddt	 | jjd	dt
 | jjd
dt | jjddt | jjddt | jjddt | jjddt | jjddt | jjddt | jjddt d S )Nz:memory:Z
returntextr   ZreturnunicodeZ	returnintZreturnfloatZ
returnnullZ
returnblobZreturnlonglongZraiseexceptionisstringr   ZisintZisfloatZisnoneZisblobZ
islonglongZspam)sqliteconnectconcreate_functionr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r"   )r$   r   r   r   setUp   s     zFunctionTests.setUpc             C   s   | j j  d S )N)r>   close)r$   r   r   r   tearDown   s    zFunctionTests.tearDownc             C   s0   | j tj | jjdddd  W d Q R X d S )Nblad   c             S   s   d|  S )N   r   )r+   r   r   r   <lambda>   s    z6FunctionTests.CheckFuncErrorOnCreate.<locals>.<lambda>i)assertRaisesr<   OperationalErrorr>   r?   )r$   r   r   r   CheckFuncErrorOnCreate   s    z$FunctionTests.CheckFuncErrorOnCreatec             C   s@   dd }| }|t  d< | jjdd| | jj }|jd d S )Nc              S   s   dd } | S )Nc               S   s   dS )Nr   r   r   r   r   r   f   s    z;FunctionTests.CheckFuncRefCount.<locals>.getfunc.<locals>.fr   )rJ   r   r   r   getfunc   s    z0FunctionTests.CheckFuncRefCount.<locals>.getfuncr   Zreftestr   zselect reftest())globalsr>   r?   cursorexecute)r$   rK   rJ   curr   r   r   CheckFuncRefCount   s    

zFunctionTests.CheckFuncRefCountc             C   s@   | j j }|jd |j d }| jt|t | j|d d S )Nzselect returntext()r   r   )r>   rM   rN   fetchoneassertEqualr   r   )r$   rO   r1   r   r   r   CheckFuncReturnText   s
    

z!FunctionTests.CheckFuncReturnTextc             C   s@   | j j }|jd |j d }| jt|t | j|d d S )Nzselect returnunicode()r   r   )r>   rM   rN   rQ   rR   r   r   )r$   rO   r1   r   r   r   CheckFuncReturnUnicode   s
    

z$FunctionTests.CheckFuncReturnUnicodec             C   s@   | j j }|jd |j d }| jt|t | j|d d S )Nzselect returnint()r   r   )r>   rM   rN   rQ   rR   r   r   )r$   rO   r1   r   r   r   CheckFuncReturnInt   s
    

z FunctionTests.CheckFuncReturnIntc             C   sN   | j j }|jd |j d }| jt|t |dk s@|dkrJ| jd d S )Nzselect returnfloat()r   g&1	@gT㥛 	@zwrong value)r>   rM   rN   rQ   rR   r   r   Zfail)r$   rO   r1   r   r   r   CheckFuncReturnFloat   s    

z"FunctionTests.CheckFuncReturnFloatc             C   sD   | j j }|jd |j d }| jt|td  | j|d  d S )Nzselect returnnull()r   )r>   rM   rN   rQ   rR   r   )r$   rO   r1   r   r   r   CheckFuncReturnNull   s
    

z!FunctionTests.CheckFuncReturnNullc             C   s@   | j j }|jd |j d }| jt|t | j|d d S )Nzselect returnblob()r   s   blob)r>   rM   rN   rQ   rR   r   r   )r$   rO   r1   r   r   r   CheckFuncReturnBlob   s
    

z!FunctionTests.CheckFuncReturnBlobc             C   s0   | j j }|jd |j d }| j|d d S )Nzselect returnlonglong()r   r   r   l        )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckFuncReturnLongLong   s    

z%FunctionTests.CheckFuncReturnLongLongc          
   C   sJ   | j j }| jtj}|jd |j  W d Q R X | jt|j	d d S )Nzselect raiseexception()z&user-defined function raised exception)
r>   rM   rG   r<   rH   rN   rQ   rR   r   	exception)r$   rO   cmr   r   r   CheckFuncException   s
    

z FunctionTests.CheckFuncExceptionc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect isstring(?)r   r   r   )r   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamString   s    
zFunctionTests.CheckParamStringc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect isint(?)r   r   r   )r   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamInt   s    
zFunctionTests.CheckParamIntc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect isfloat(?)Q	@r   r   )r_   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamFloat   s    
zFunctionTests.CheckParamFloatc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect isnone(?)r   r   )N)r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamNone   s    
zFunctionTests.CheckParamNonec             C   s8   | j j }|jdtdf |j d }| j|d d S )Nzselect isblob(?)s   blobr   r   )r>   rM   rN   r   rQ   rR   )r$   rO   r1   r   r   r   CheckParamBlob  s    
zFunctionTests.CheckParamBlobc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect islonglong(?)r   r   r           )rc   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamLongLong
  s    
z FunctionTests.CheckParamLongLongc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect spam(?, ?)r   rE   r   )r   rE   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAnyArguments  s    
zFunctionTests.CheckAnyArgumentsN)r'   r(   r)   r@   rB   rI   rP   rS   rT   rU   rV   rW   rX   rY   r\   r]   r^   r`   ra   rb   rd   re   r   r   r   r   r9      s&   r9   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S ) AggregateTestsc             C   s   t jd| _| jj }|jd |jddddd tdf | jjdd	t | jjd
d	t | jjdd	t	 | jjdd	t
 | jjdd	t | jjddt | jjddt | jjdd	t d S )Nz:memory:z
            create table test(
                t text,
                i integer,
                f float,
                n,
                b blob
                )
            z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)r   r   gQ	@s   blobZnostepr   Z
nofinalizeZexcInitZexcStepZexcFinalizeZ	checkTyperE   Z
checkTypesZmysumr;   )r<   r=   r>   rM   rN   r   Zcreate_aggregater#   r*   r-   r.   r/   r0   r6   r8   )r$   rO   r   r   r   r@     s    
zAggregateTests.setUpc             C   s   d S )Nr   )r$   r   r   r   rB   0  s    zAggregateTests.tearDownc             C   s,   | j tj | jjddt W d Q R X d S )NrC   rD   i)rG   r<   rH   r>   r?   r8   )r$   r   r   r   CheckAggrErrorOnCreate5  s    z%AggregateTests.CheckAggrErrorOnCreatec          
   C   s@   | j j }| jt}|jd W d Q R X | jt|jd d S )Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')r>   rM   rG   AttributeErrorrN   rR   r   rZ   )r$   rO   r[   r   r   r   CheckAggrNoStep9  s    
zAggregateTests.CheckAggrNoStepc          
   C   sN   | j j }| jtj}|jd |j d }W d Q R X | jt|j	d d S )Nzselect nofinalize(t) from testr   z7user-defined aggregate's 'finalize' method raised error)
r>   rM   rG   r<   rH   rN   rQ   rR   r   rZ   )r$   rO   r[   r1   r   r   r   CheckAggrNoFinalize?  s
    

z"AggregateTests.CheckAggrNoFinalizec          
   C   sN   | j j }| jtj}|jd |j d }W d Q R X | jt|j	d d S )Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised error)
r>   rM   rG   r<   rH   rN   rQ   rR   r   rZ   )r$   rO   r[   r1   r   r   r   CheckAggrExceptionInInitF  s
    

z'AggregateTests.CheckAggrExceptionInInitc          
   C   sN   | j j }| jtj}|jd |j d }W d Q R X | jt|j	d d S )Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised error)
r>   rM   rG   r<   rH   rN   rQ   rR   r   rZ   )r$   rO   r[   r1   r   r   r   CheckAggrExceptionInStepM  s
    

z'AggregateTests.CheckAggrExceptionInStepc          
   C   sN   | j j }| jtj}|jd |j d }W d Q R X | jt|j	d d S )Nzselect excFinalize(t) from testr   z7user-defined aggregate's 'finalize' method raised error)
r>   rM   rG   r<   rH   rN   rQ   rR   r   rZ   )r$   rO   r[   r1   r   r   r   CheckAggrExceptionInFinalizeT  s
    

z+AggregateTests.CheckAggrExceptionInFinalizec             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect checkType('str', ?)r   r   r   )r   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamStr[  s    
z%AggregateTests.CheckAggrCheckParamStrc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect checkType('int', ?)r   r   r   )r   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamInta  s    
z%AggregateTests.CheckAggrCheckParamIntc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect checkTypes('int', ?, ?)r      r   rE   )r   rp   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamsIntg  s    
z&AggregateTests.CheckAggrCheckParamsIntc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect checkType('float', ?)Q	@r   r   )rr   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamFloatm  s    
z'AggregateTests.CheckAggrCheckParamFloatc             C   s2   | j j }|jdd |j d }| j|d d S )Nzselect checkType('None', ?)r   r   )N)r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamNones  s    
z&AggregateTests.CheckAggrCheckParamNonec             C   s8   | j j }|jdtdf |j d }| j|d d S )Nzselect checkType('blob', ?)s   blobr   r   )r>   rM   rN   r   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamBloby  s    
z&AggregateTests.CheckAggrCheckParamBlobc             C   sL   | j j }|jd |jdd	d
dg |jd |j d }| j|d d S )Nzdelete from testzinsert into test(i) values (?)
         zselect mysum(i) from testr   <   )rv   )rw   )rx   )r>   rM   rN   ZexecutemanyrQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckAggrSum  s    


z$AggregateTests.CheckAggrCheckAggrSumN)r'   r(   r)   r@   rB   rg   ri   rj   rk   rl   rm   rn   ro   rq   rs   rt   ru   rz   r   r   r   r   rf     s   rf   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)r<   SQLITE_SELECTZSQLITE_DENY	SQLITE_OK)actionarg1arg2dbnamesourcer   r   r   authorizer_cb  s
    
zAuthorizerTests.authorizer_cbc             C   s6   t jd| _| jjd | jjd | jj| j d S )Nz:memory: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>   ZexecutescriptrN   Zset_authorizerr   )r$   r   r   r   r@     s
    zAuthorizerTests.setUpc             C   s   d S )Nr   )r$   r   r   r   rB     s    zAuthorizerTests.tearDownc             C   s:   | j tj}| jjd W d Q R X | jdt|j d S )Nzselect * from t2
prohibited)rG   r<   DatabaseErrorr>   rN   assertInr   rZ   )r$   r[   r   r   r   test_table_access  s    z!AuthorizerTests.test_table_accessc             C   s:   | j tj}| jjd W d Q R X | jdt|j d S )Nzselect c2 from t1r   )rG   r<   r   r>   rN   r   r   rZ   )r$   r[   r   r   r   test_column_access  s    z"AuthorizerTests.test_column_accessN)	r'   r(   r)   staticmethodr   r@   rB   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 )Nr|   r}   )r<   r~   
ValueErrorr   )r   r   r   r   r   r   r   r   r     s
    
z+AuthorizerRaiseExceptionTests.authorizer_cbN)r'   r(   r)   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 )Ng        r|   r}   )r<   r~   r   )r   r   r   r   r   r   r   r   r     s
    
z(AuthorizerIllegalTypeTests.authorizer_cbN)r'   r(   r)   r   r   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 )NrE       r|   r}   l        l        )r<   r~   r   )r   r   r   r   r   r   r   r   r     s
    
z)AuthorizerLargeIntegerTests.authorizer_cbN)r'   r(   r)   r   r   r   r   r   r   r     s   r   c              C   sJ   t jtd} t jtd}t jt}t j| ||t jtt jtt jtfS )NZCheck)	unittestZ	makeSuiter9   rf   r{   Z	TestSuiter   r   r   )Zfunction_suiteZaggregate_suiteZauthorizer_suiter   r   r   suite  s    
r   c              C   s   t j } | jt  d S )N)r   ZTextTestRunnerZrunr   )Zrunnerr   r   r   test  s    r   __main__)$r   Zsqlite3r<   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r"   r#   r*   r-   r.   r/   r0   r6   r8   ZTestCaser9   rf   r{   r   r   r   r   r   r'   r   r   r   r   <module>   sF   



 p$		

