
W.>                 @   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 Gd  d!   d!  Z Gd" d#   d#  Z Gd$ d%   d%  Z Gd& d'   d'  Z Gd( d)   d)  Z Gd* d+   d+  Z Gd, d-   d-  Z Gd. d/   d/  Z Gd0 d1   d1 e  j  Z Gd2 d3   d3 e  j  Z Gd4 d5   d5 e  j  Z Gd6 d7   d7 e  Z Gd8 d9   d9 e  Z Gd: 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   B/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/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               @   s4   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               @   s4   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               @   s4   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               @   s4   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   sM   d t  d t d t d t d   d t i } t | | t |  k  |  _ d  S)Nr   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               @   s4   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   d t  d t d t d t d   d t i } x3 | D]+ } |  j t | | t |  k  7_ q1 Wd  S)Nr   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               @   s4   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   sI   y- |  j  j d d d d    |  j d  Wn t j k
 rD Yn Xd  S)Nblad   c             S   s   d |  S)N   r   )r+   r   r   r   <lambda>   s    z6FunctionTests.CheckFuncErrorOnCreate.<locals>.<lambda>z&should have raised an OperationalErrori)r>   r?   failr<   OperationalError)r$   r   r   r   CheckFuncErrorOnCreate   s
    z$FunctionTests.CheckFuncErrorOnCreatec             C   sX   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   sV   |  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   sV   |  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   sV   |  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   sk   |  j  j   } | j d  | j   d } |  j t |  t  | d k  sZ | d k rg |  j d  d  S)Nzselect returnfloat()r   g&1	@gT㥛 	@zwrong value)r>   rM   rN   rQ   rR   r   r   rG   )r$   rO   r1   r   r   r   CheckFuncReturnFloat   s    z"FunctionTests.CheckFuncReturnFloatc             C   s\   |  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   sV   |  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   s@   |  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   s}   |  j  j   } y( | j d  | j   |  j d  Wn? t j k
 rx } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect raiseexception()z#should have raised OperationalErrorr   z&user-defined function raised exception)	r>   rM   rN   rQ   rG   r<   rH   rR   r!   )r$   rO   er   r   r   CheckFuncException   s    
z FunctionTests.CheckFuncExceptionc             C   sC   |  j  j   } | j d d  | j   d } |  j | d  d  S)Nzselect isstring(?)r   r   r   )zfoo)r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamString   s    zFunctionTests.CheckParamStringc             C   sC   |  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   sC   |  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   sC   |  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   sL   |  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   sC   |  j  j   } | j d d  | j   d } |  j | d  d  S)Nzselect islonglong(?)r   r   r           )rb   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckParamLongLong  s    z FunctionTests.CheckParamLongLongc             C   sC   |  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_   r`   ra   rc   rd   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   5  s    zAggregateTests.tearDownc             C   sC   y' |  j  j d d t  |  j d  Wn t j k
 r> Yn Xd  S)NrC   rD   z&should have raised an OperationalErrori)r>   r?   r8   rG   r<   rH   )r$   r   r   r   CheckAggrErrorOnCreate:  s
    z%AggregateTests.CheckAggrErrorOnCreatec             C   sp   |  j  j   } y | j d  |  j d  Wn< t k
 rk } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect nostep(t) from testz$should have raised an AttributeErrorr   z+'AggrNoStep' object has no attribute 'step')r>   rM   rN   rG   AttributeErrorrR   r!   )r$   rO   rZ   r   r   r   CheckAggrNoStepA  s    zAggregateTests.CheckAggrNoStepc             C   s   |  j  j   } y. | j d  | j   d } |  j d  Wn? t j k
 r~ } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect nofinalize(t) from testr   z&should have raised an OperationalErrorz7user-defined aggregate's 'finalize' method raised error)	r>   rM   rN   rQ   rG   r<   rH   rR   r!   )r$   rO   r1   rZ   r   r   r   CheckAggrNoFinalizeI  s    z"AggregateTests.CheckAggrNoFinalizec             C   s   |  j  j   } y. | j d  | j   d } |  j d  Wn? t j k
 r~ } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect excInit(t) from testr   z&should have raised an OperationalErrorz7user-defined aggregate's '__init__' method raised error)	r>   rM   rN   rQ   rG   r<   rH   rR   r!   )r$   rO   r1   rZ   r   r   r   CheckAggrExceptionInInitR  s    z'AggregateTests.CheckAggrExceptionInInitc             C   s   |  j  j   } y. | j d  | j   d } |  j d  Wn? t j k
 r~ } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect excStep(t) from testr   z&should have raised an OperationalErrorz3user-defined aggregate's 'step' method raised error)	r>   rM   rN   rQ   rG   r<   rH   rR   r!   )r$   rO   r1   rZ   r   r   r   CheckAggrExceptionInStep[  s    z'AggregateTests.CheckAggrExceptionInStepc             C   s   |  j  j   } y. | j d  | j   d } |  j d  Wn? t j k
 r~ } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nzselect excFinalize(t) from testr   z&should have raised an OperationalErrorz7user-defined aggregate's 'finalize' method raised error)	r>   rM   rN   rQ   rG   r<   rH   rR   r!   )r$   rO   r1   rZ   r   r   r   CheckAggrExceptionInFinalized  s    z+AggregateTests.CheckAggrExceptionInFinalizec             C   sC   |  j  j   } | j d d  | j   d } |  j | d  d  S)Nzselect checkType('str', ?)r   r   r   )zfoo)r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamStrm  s    z%AggregateTests.CheckAggrCheckParamStrc             C   sC   |  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   CheckAggrCheckParamInts  s    z%AggregateTests.CheckAggrCheckParamIntc             C   sC   |  j  j   } | j d d  | j   d } |  j | d  d  S)Nzselect checkTypes('int', ?, ?)r      r   rE   )r   ro   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamsInty  s    z&AggregateTests.CheckAggrCheckParamsIntc             C   sC   |  j  j   } | j d d  | j   d } |  j | d  d  S)Nzselect checkType('float', ?)Q	@r   r   )rq   )r>   rM   rN   rQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckParamFloat  s    z'AggregateTests.CheckAggrCheckParamFloatc             C   sC   |  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   CheckAggrCheckParamNone  s    z&AggregateTests.CheckAggrCheckParamNonec             C   sL   |  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   CheckAggrCheckParamBlob  s    z&AggregateTests.CheckAggrCheckParamBlobc             C   sf   |  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   <   )ru   )rv   )rw   )r>   rM   rN   ZexecutemanyrQ   rR   )r$   rO   r1   r   r   r   CheckAggrCheckAggrSum  s    z$AggregateTests.CheckAggrCheckAggrSumN)r'   r(   r)   r@   rB   rf   rh   ri   rj   rk   rl   rm   rn   rp   rr   rs   rt   ry   r   r   r   r   re     s   				re   c               @   sR   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 r5 t  j St  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   sI   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   y |  j  j d  WnZ t j k
 rp } z7 | j d j d  sZ |  j d | j d  d  SWYd  d  } ~ Xn X|  j d  d  S)Nzselect * from t2r   
prohibitedzwrong exception text: %sz9should have raised an exception due to missing privileges)r>   rN   r<   DatabaseErrorr!   endswithrG   )r$   rZ   r   r   r   test_table_access  s    z!AuthorizerTests.test_table_accessc             C   s   y |  j  j d  WnZ t j k
 rp } z7 | j d j d  sZ |  j d | j d  d  SWYd  d  } ~ Xn X|  j d  d  S)Nzselect c2 from t1r   r   zwrong exception text: %sz9should have raised an exception due to missing privileges)r>   rN   r<   r   r!   r   rG   )r$   rZ   r   r   r   test_column_access  s    z"AuthorizerTests.test_column_accessN)	r'   r(   r)   staticmethodr   r@   rB   r   r   r   r   r   r   rz     s
   	rz   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 r3 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   s6   |  t  j k r d S| d k s+ | d k r/ d St  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   s6   |  t  j k r d S| d k s+ | d k r/ d St  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   sm   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   re   rz   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TextTestRunner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   re   rz   r   r   r   r   r   r'   r   r   r   r   <module>   sD   



},		
