HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/test/test_sqlite3/__pycache__/test_userfunctions.cpython-311.opt-2.pyc
�

��Vcuz��R�ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZm
Z
mZddlmZd:d�Zejd���Zd�Zd	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�ZGd�d��ZGd�d��Z Gd�d��Z!Gd�d��Z"Gd�d��Z#Gd�d��Z$Gd�d ��Z%Gd!�d"��Z&Gd#�d$��Z'Gd%�d&ej(��Z)Gd'�d(��Z*Gd)�d*e+��Z,ej-ej.d+kd,��Gd-�d.ej(����Z/Gd/�d0ej(��Z0Gd1�d2ej(��Z1Gd3�d4e1��Z2Gd5�d6e1��Z3Gd7�d8e1��Z4e5d9krej6��dSdS);�N)�Mock�patch)�
bigmemtest�catch_unraisable_exception�
gc_collect)�cx_limit�c�����	���fd�}|S)Nc������rtj���nd�tj�������fd���}|S)Nc����t��5}t||�����5�|g|�Ri|��ddd��n#1swxYwYddd��n#1swxYwY�|g|�Ri|��dS�N)r�check_tracebacks)�self�args�kwargs�cm�_regex�exc�func�names    �����8D:\Python311\Lib\test\test_sqlite3\test_userfunctions.py�wrapperz3with_tracebacks.<locals>.decorator.<locals>.wrapper*s���+�-�-�
0��%�d�B��V�T�B�B�0�0��D��/��/�/�/��/�/�/�0�0�0�0�0�0�0�0�0�0�0����0�0�0�0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0����
0�
0�
0�
0�
�D��'��'�'�'��'�'�'�'�'s1�A�
=�A�A	�A�A	�A�A�A)�re�compile�	functools�wraps)rrrrr�regexs` @���r�	decoratorz"with_tracebacks.<locals>.decorator(sb�����&+�5���E�"�"�"���	���	�	�	(�	(�	(�	(�	(�	(�	(�
�	�	(����)rrrrs``` r�with_tracebacksr!&s3�����@���������rc#�*K�	tjd��	tj��}t	j|��5dV�ddd��n#1swxYwY|�|jj|��|rAt|jj
��}|�|�|����|r%|�|jj
j|��tjd��dS#tjd��wxYw)NTF)�sqlite�enable_callback_tracebacks�io�StringIO�
contextlib�redirect_stderr�assertEqual�
unraisable�exc_type�str�	exc_value�assertIsNotNone�search�object�__name__)rrrr�obj_name�buf�msgs       rrr7sE����F�
�%�d�+�+�+�1��k�m�m��
�
'��
,�
,�	�	��E�E�E�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�����/��5�5�5��	4��b�m�-�.�.�C�� � ����c�!2�!2�3�3�3��	F����R�]�1�:�H�E�E�E��)�%�0�0�0�0�0���)�%�0�0�0�0���s0�'C<�A�C<�A�C<�A�B
C<�<Dc��dS)N�foor r rr�func_returntextr7J����5rc��dS)N�12r r rr�func_returntextwithnullr;Ls���8rc��dS)N�barr r rr�func_returnunicoder>Nr8rc��dS�N�*r r rr�func_returnintrBPs��
�2rc��dS)N���Q�	@r r rr�func_returnfloatrER����4rc��dSr
r r rr�func_returnnullrHTrFrc��dS)N�blobr r rr�func_returnblobrKVs���7rc��dS)N�r r rr�func_returnlonglongrNXr8rc��ddzdS�N�rr r rr�func_raiseexceptionrRZs���a�C�C�C�Crc��t�r
)�MemoryErrorr rr�func_memoryerrorrU\s��
�rc��t�r
)�
OverflowErrorr rr�func_overflowerrorrX^s��
�rc��eZdZd�Zd�ZdS)�
AggrNoStepc��dSr
r �rs r�__init__zAggrNoStep.__init__b����rc��dS�N�r r\s r�finalizezAggrNoStep.finalizees���qrN)r1�
__module__�__qualname__r]rbr rrrZrZas2������
�
�
�����rrZc��eZdZd�Zd�ZdS)�AggrNoFinalizec��dSr
r r\s rr]zAggrNoFinalize.__init__ir^rc��dSr
r �r�xs  r�stepzAggrNoFinalize.steplr^rN)r1rcrdr]rkr rrrfrfhs2������
�
�
�
�
�
�
�
rrfc� �eZdZd�Zd�Zd�ZdS)�AggrExceptionInInitc��ddzdSrPr r\s rr]zAggrExceptionInInit.__init__p���	�!����rc��dSr
r ris  rrkzAggrExceptionInInit.stepsr^rc��dSr
r r\s rrbzAggrExceptionInInit.finalizevr^rN�r1rcrdr]rkrbr rrrmrmosA���������
�
�
�
�
�
�
�
rrmc� �eZdZd�Zd�Zd�ZdS)�AggrExceptionInStepc��dSr
r r\s rr]zAggrExceptionInStep.__init__zr^rc��ddzdSrPr ris  rrkzAggrExceptionInStep.step}rorc��dSr@r r\s rrbzAggrExceptionInStep.finalize�s���rrNrrr rrrtrtysA������
�
�
��������rrtc� �eZdZd�Zd�Zd�ZdS)�AggrExceptionInFinalizec��dSr
r r\s rr]z AggrExceptionInFinalize.__init__�r^rc��dSr
r ris  rrkzAggrExceptionInFinalize.step�r^rc��ddzdSrPr r\s rrbz AggrExceptionInFinalize.finalize�rorNrrr rrryry�sA������
�
�
�
�
�
�����rryc� �eZdZd�Zd�Zd�ZdS)�
AggrCheckTypec��d|_dSr
��valr\s rr]zAggrCheckType.__init__�s
������rc��ttttd��td�}t||t|��u��|_dS�N)r,�int�float�None�blob�r,r�r��type�bytesr�)r�	whichTyper��theTypes    rrkzAggrCheckType.step�sC���c�E�4��:�:� �"�"���w�y�)�T�#�Y�Y�6�7�7����rc��|jSr
r�r\s rrbzAggrCheckType.finalize��	���x�rNrrr rrr~r~�sA���������8�8�8�
����rr~c� �eZdZd�Zd�Zd�ZdS)�AggrCheckTypesc��d|_dS�Nrr�r\s rr]zAggrCheckTypes.__init__�s
������rc	���ttttd��td�}|D]4}|xjt||t|��u��z
c_�5dSr�r�)rr��valsr�r�s     rrkzAggrCheckTypes.step�sc���c�E�4��:�:� �"�"���	=�	=�C��H�H��G�I�.�$�s�)�)�;�<�<�<�H�H�H�	=�	=rc��|jSr
r�r\s rrbzAggrCheckTypes.finalize�r�rNrrr rrr�r��sA���������=�=�=�����rr�c� �eZdZd�Zd�Zd�ZdS)�AggrSumc��d|_dS)N�r�r\s rr]zAggrSum.__init__�s
������rc�&�|xj|z
c_dSr
r�)rr�s  rrkzAggrSum.step�s�����C�����rc��|jSr
r�r\s rrbzAggrSum.finalize�r�rNrrr rrr�r��sA����������������rr�c� �eZdZd�Zd�Zd�ZdS)�AggrTextc��d|_dS)Nr	��txtr\s rr]zAggrText.__init__�s
������rc�$�|j|z|_dSr
r�)rr�s  rrkz
AggrText.step�s���8�c�>����rc��|jSr
r�r\s rrbzAggrText.finalize�r�rNrrr rrr�r��sA���������"�"�"�����rr�c�V�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zeed���d���Zeed���d���Zeed���d���Zd�Zd�Zd�Zd�Zd�Zeed���d���Zd�Z d �Z!e"j#e$j%d!kd"��d#���Z&e"j#e$j%d!kd"��d$���Z'e"j#e$j%d!kd%��d&���Z(d'�Z)d(�Z*ee��d)���Zee+d*d+��d,���Z,e"j-e.j/d-kd.��e0d/d0d1�2��d3�����Z1e"j-e.j/d-kd.��e0d/d4d1�2��d5�����Z2d6�Z3d7S)8�
FunctionTestsc��tjd��|_|j�ddt��|j�ddt
��|j�ddt��|j�ddt��|j�ddt��|j�ddt��|j�d	dt��|j�d
dt��|j�ddd���|j�d
dd���|j�ddd���|j�ddt��|j�ddt��|j�ddt��|j�ddd���|j�ddd���|j�ddd���|j�d��dS)N�:memory:�
returntextr�returntextwithnull�
returnunicode�	returnint�returnfloat�
returnnull�
returnblob�returnlonglong�	returnnanc� �td��S)N�nan)r�r rr�<lambda>z%FunctionTests.setUp.<locals>.<lambda>�s���u���r�returntoolargeintc��dS�N� r r rrr�z%FunctionTests.setUp.<locals>.<lambda>�s���r�return_noncont_blobc�2�td��ddd�S)NrJ�)�
memoryviewr rrr�z%FunctionTests.setUp.<locals>.<lambda>�s���G�)<�)<�S�S�q�S�)A�r�raiseexception�memoryerror�
overflowerror�isblobrac�,�t|t��Sr
)�
isinstancer��rjs rr�z%FunctionTests.setUp.<locals>.<lambda>�s��
�1�e�8L�8L�r�isnonec�
�|duSr
r r�s rr�z%FunctionTests.setUp.<locals>.<lambda>�s
���T�	�r�spam���c� �t|��Sr
)�lenr�s rr�z%FunctionTests.setUp.<locals>.<lambda>�s���A���rzcreate table test(t text))r#�connect�con�create_functionr7r;r>rBrErHrKrNrRrUrX�executer\s r�setUpzFunctionTests.setUp�s���>�*�-�-����� � ��q�/�B�B�B��� � �!5�q�:Q�R�R�R��� � ��!�5G�H�H�H��� � ��a��@�@�@��� � ���3C�D�D�D��� � ��q�/�B�B�B��� � ��q�/�B�B�B��� � �!1�1�6I�J�J�J��� � ��a�1E�1E�F�F�F��� � �!4�a���I�I�I��� � �!6��!A�!A�	C�	C�	C��� � �!1�1�6I�J�J�J��� � ���3C�D�D�D��� � ��!�5G�H�H�H��� � ��1�.L�.L�M�M�M��� � ��1�.A�.A�B�B�B��� � ���->�->�?�?�?�����4�5�5�5�5�5rc�8�|j���dSr
)r��closer\s r�tearDownzFunctionTests.tearDown�s����������rc��|�tj��5|j�ddd���ddd��dS#1swxYwYdS)N�bla���c��d|zS�Nr�r r�s rr�z9FunctionTests.test_func_error_on_create.<locals>.<lambda>�s
��A�a�C�r)�assertRaisesr#�OperationalErrorr�r�r\s r�test_func_error_on_createz'FunctionTests.test_func_error_on_create�s���
�
�
�v�6�
7�
7�	A�	A��H�$�$�U�D�-�-�@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	As�A�A�Ac�Z�tj}d}t|j|d���5|j�d��|�tj|��5|j�d��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nztoo many arguments on functionra)�category�limitzselect abs(-1)zselect max(1, 2))r#�SQLITE_LIMIT_FUNCTION_ARGrr�r��assertRaisesRegexr�)rr�r4s   r�test_func_too_many_argsz%FunctionTests.test_func_too_many_args�s&���3��.��
�d�h���
;�
;�
;�	6�	6��H���-�.�.�.��'�'��(?��E�E�
6�
6��� � �!3�4�4�4�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	6�	6s5�;B �!B�<B �B	�B �B	�B � B$�'B$c���d�}|��}|t��d<|j�dd|��|j���}|�d��dS)Nc��d�}|S)Nc��dSr`r r rr�fz=FunctionTests.test_func_ref_count.<locals>.getfunc.<locals>.f�s���qrr )r�s r�getfuncz2FunctionTests.test_func_ref_count.<locals>.getfunc�s��
�
�
��Hrr6�reftestrzselect reftest())�globalsr�r��cursorr�)rr�r��curs    r�test_func_ref_countz!FunctionTests.test_func_ref_count�sp��	�	�	�
�G�I�I����	�	�%���� � ��A�q�1�1�1��h�o�o�������&�'�'�'�'�'rc��|j���}|�d��|���d}|�t|��t��|�|d��dS)Nzselect returntext()rr6�r�r�r��fetchoner)r�r,�rr�r�s   r�test_func_return_textz#FunctionTests.test_func_return_text�sp���h�o�o�������)�*�*�*��l�l�n�n�Q�������c���C�(�(�(�����e�$�$�$�$�$rc��|j���}|�d�����d}|�t|��t��|�|d��dS)Nzselect returntextwithnull()rr:r�)rr��ress   r�$test_func_return_text_with_null_charz2FunctionTests.test_func_return_text_with_null_char�sn���h�o�o�����k�k�7�8�8�A�A�C�C�A�F������c���C�(�(�(�����h�'�'�'�'�'rc��|j���}|�d��|���d}|�t|��t��|�|d��dS)Nzselect returnunicode()rr=r�r�s   r�test_func_return_unicodez&FunctionTests.test_func_return_unicode�sp���h�o�o�������,�-�-�-��l�l�n�n�Q�������c���C�(�(�(�����e�$�$�$�$�$rc��|j���}|�d��|���d}|�t|��t��|�|d��dS)Nzselect returnint()rrA)r�r�r�r�r)r�r�r�s   r�test_func_return_intz"FunctionTests.test_func_return_intsp���h�o�o�������(�)�)�)��l�l�n�n�Q�������c���C�(�(�(�����b�!�!�!�!�!rc�,�|j���}|�d��|���d}|�t|��t��|dks|dkr|�d��dSdS)Nzselect returnfloat()rg�&1�	@gT㥛� 	@zwrong value)r�r�r�r�r)r�r��failr�s   r�test_func_return_floatz$FunctionTests.test_func_return_floats����h�o�o�������*�+�+�+��l�l�n�n�Q�������c���E�*�*�*���;�	%�#��+�	%��I�I�m�$�$�$�$�$�	%�	%rc�"�|j���}|�d��|���d}|�t|��td����|�|d��dS)Nzselect returnnull()r)r�r�r�r�r)r�r�s   r�test_func_return_nullz#FunctionTests.test_func_return_nullsv���h�o�o�������)�*�*�*��l�l�n�n�Q�������c���D��J�J�/�/�/�����d�#�#�#�#�#rc��|j���}|�d��|���d}|�t|��t��|�|d��dS)Nzselect returnblob()rrJ)r�r�r�r�r)r�r�r�s   r�test_func_return_blobz#FunctionTests.test_func_return_blobsp���h�o�o�������)�*�*�*��l�l�n�n�Q�������c���E�*�*�*�����g�&�&�&�&�&rc���|j���}|�d��|���d}|�|d��dS)Nzselect returnlonglong()rrM�r�r�r�r�r)r�s   r�test_func_return_long_longz(FunctionTests.test_func_return_long_longsT���h�o�o�������-�.�.�.��l�l�n�n�Q�������e�$�$�$�$�$rc��|j���}|�d��|�|���d��dS)Nzselect returnnan()r)r�r�r��assertIsNoner��rr�s  r�test_func_return_nanz"FunctionTests.test_func_return_nan$sM���h�o�o�������(�)�)�)����#�,�,�.�.��+�,�,�,�,�,rc��|j���}|�tjd|jjd��dS)N�string or blob too bigzselect returntoolargeint())r�r�r�r#�	DataErrorr�rs  r�test_func_return_too_large_intz,FunctionTests.test_func_return_too_large_int)sM���h�o�o�������v�/�1I�#�x�/�1M�	O�	O�	O�	O�	OrrR�rc�H�|j���}|�tj��5}|�d��|���ddd��n#1swxYwY|�t|j	��d��dS)Nzselect raiseexception()�&user-defined function raised exception�
r�r�r�r#r�r�r�r)r,�	exception�rr�rs   r�test_func_exceptionz!FunctionTests.test_func_exception.s����h�o�o����
�
�
�v�6�
7�
7�	�2��K�K�1�2�2�2��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
����R�\�*�*�,T�U�U�U�U�Us�*A/�/A3�6A3rUc���|j���}|�t��5|�d��|���ddd��dS#1swxYwYdS)Nzselect memoryerror())r�r�r�rTr�r�rs  r�test_func_memory_errorz$FunctionTests.test_func_memory_error6s����h�o�o����
�
�
�{�
+�
+�	�	��K�K�.�/�/�/��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�*A+�+A/�2A/rXc��|j���}|�tj��5|�d��|���ddd��dS#1swxYwYdS)Nzselect overflowerror())r�r�r�r#rr�r�rs  r�test_func_overflow_errorz&FunctionTests.test_func_overflow_error=s����h�o�o����
�
�
�v�/�
0�
0�	�	��K�K�0�1�1�1��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�*A0�0A4�7A4c���|j���}|�dd��|���d}|�|d��dS)Nzselect spam(?, ?))rar�rr�r�r�s   r�test_any_argumentsz FunctionTests.test_any_argumentsDsV���h�o�o�������'��0�0�0��l�l�n�n�Q�������a� � � � � rc��|j�d��}|�|���d��dS)Nzselect isblob(x'')r)r�r��
assertTruer�rs  r�test_empty_blobzFunctionTests.test_empty_blobJs=���h���3�4�4����������q�)�*�*�*�*�*rc��|j�dtd��f��}|�|���d��dS)Nzselect isnone(?)r�r)r�r�r�rr�rs  r�test_nan_floatzFunctionTests.test_nan_floatNsG���h���1�E�%�L�L�?�C�C����������q�)�*�*�*�*�*rc�Z�d}|�t||jjdd��dS)Nz1Python int too large to convert to SQLite INTEGER�select spam(?))r�)r�rWr�r�)r�errs  r�test_too_large_intz FunctionTests.test_too_large_intSs9��A�����}�c�4�8�3C�/��	=�	=�	=�	=�	=rc
��|�td|jjdt	d��ddd�f��dS)Nz%underlying buffer is not C-contiguousrrJr�)r��BufferErrorr�r�r�r\s r�test_non_contiguous_blobz&FunctionTests.test_non_contiguous_blobXsM�����{�F�#�x�/�1A� *�7� 3� 3�C�C�a�C� 8�:�	<�	<�	<�	<�	<rzbuffer.*contiguous)rc���|�tj��5|j�d��}|���ddd��dS#1swxYwYdS)Nzselect return_noncont_blob())r�r#r�r�r�r�rs  r�test_return_non_contiguous_blobz-FunctionTests.test_return_non_contiguous_blob^s���
�
�
�v�6�
7�
7�	�	��(�"�"�#A�B�B�C��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�/A�A �#A c�V�|�td|jjdd��dS)N�surrogates not allowedr)u��)r��UnicodeEncodeErrorr�r�r\s r�test_param_surrogatesz#FunctionTests.test_param_surrogatesds8�����1�3K�#�x�/�1A�0�	2�	2�	2�	2�	2rc�6��g��fd�}|j�dd|��dtfdtfdtfdtfdtftd	��tfd
tfdtfdtfd
t
ft
td����t
ftd
��t
fdtd��fg
}|D]5\}}|j�
d|f��}|����6|�|���dS)Nc�P����|t|��f��dSr
)�appendr�)�arg�resultss �r�
append_resultz5FunctionTests.test_func_params.<locals>.append_resultks&����N�N�C��c���+�,�,�,�,�,r�test_paramsrarAr�l�{�C	lrD�inf�textr:uˢqˡⁱᵗᵉrJr�zselect test_params(?))
r�r�r�r�r,r��	bytearray�ranger�r�r�r�r))rr*�datasetr��_r�r)s      @r�test_func_paramszFunctionTests.test_func_paramsis#�����	-�	-�	-�	-�	-��� � ���=�A�A�A���I�
��I�
 �#�&�
 �#�&�
�5�M�
�5�\�\�5�!�
�S�M�
�s�O�
.��4�
�e��
�u�Q�x�x�
 �
 �%�(�
��
 �
 �%�(�
�4��:�:��
���	�	�F�C���(�"�"�#:�S�F�C�C�C��L�L�N�N�N�N�����'�*�*�*�*�*r)��r3zRequires SQLite 3.8.3 or higherc��td���}|j�dd|d���tjdkr7|j�d��|�|jd��dS|�tj	��5|j�d	��ddd��dS#1swxYwYdS)
N��return_value�nondeterministicrF��
deterministic�r3�rz.select nondeterministic() = nondeterministic()r�z>create index t on test(t) where nondeterministic() is not null)
rr�r�r#�sqlite_version_infor�r)�
call_countr�r��r�mocks  r�test_func_non_deterministicz)FunctionTests.test_func_non_deterministic�s����&�&�&���� � �!3�Q��E� �R�R�R��%�
�2�	c��H���M�N�N�N����T�_�a�0�0�0�0�0��"�"�6�#:�;�;�
c�
c��� � �!a�b�b�b�
c�
c�
c�
c�
c�
c�
c�
c�
c�
c�
c�
c����
c�
c�
c�
c�
c�
cs�B=�=C�Cc�|�td���}|j�dd|d���tjdkr7|j�d��|�|jd��dS	|j�d	��dS#tj$r|�	d
��YdSwxYw)Nr6r:rTr9r;z(select deterministic() = deterministic()raz;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index)
rr�r�r#r=r�r)r>r�r�r?s  r�test_func_deterministicz%FunctionTests.test_func_deterministic�s�����&�&�&���� � ��!�T�� �N�N�N��%�
�2�	M��H���G�H�H�H����T�_�a�0�0�0�0�0�
M��� � �!^�_�_�_�_�_���*�
M�
M�
M��	�	�K�L�L�L�L�L�L�
M���s�7B�$B;�:B;zSQLite < 3.8.3 neededc��|�tj��5|j�ddt
d���ddd��dS#1swxYwYdS)Nr:rTr9)r�r#�NotSupportedErrorr�r�r�r\s r�%test_func_deterministic_not_supportedz3FunctionTests.test_func_deterministic_not_supported�s���
�
�
�v�7�
8�
8�	R�	R��H�$�$�_�a��D�$�Q�Q�Q�	R�	R�	R�	R�	R�	R�	R�	R�	R�	R�	R�	R����	R�	R�	R�	R�	R�	Rs�$A�A�Ac��|�t��5|j�ddtd��ddd��dS#1swxYwYdS)Nr:rT)r��	TypeErrorr�r�r�r\s r�$test_func_deterministic_keyword_onlyz2FunctionTests.test_func_deterministic_keyword_only�s���
�
�
�y�
)�
)�	D�	D��H�$�$�_�a��d�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Ds�#A�A�Ac���tjd��}d�}|�dd|��|d��}~~|g}|�|��~~t	��dS)Nr�c��dSr
r )�ts r�md5sumz=FunctionTests.test_function_destructor_via_gc.<locals>.md5sum�s���Fr�md5raz(create table lang (name, first_appeared))r#r�r�r'r)r�destrMrj�ys     r�test_function_destructor_via_gcz-FunctionTests.test_function_destructor_via_gc�sy���~�j�)�)��	�	�	�	
���U�A�v�.�.�.��D�;�<�<���D�
�C��	�������
�a������rc��|j���}dD]m}|j�dd|fd���|�tj��5|�d��ddd��n#1swxYwY�ndS)N)ll����l�largeintrc��|Sr
r )�values rr�z>FunctionTests.test_func_return_too_large_int.<locals>.<lambda>�s���rzselect largeint()�r�r�r�r�r#rr��rr�rUs   rrz,FunctionTests.test_func_return_too_large_int�s����h�o�o����+�	1�	1�E��H�$�$�Z���4M�4M�4M�N�N�N��"�"�6�#3�4�4�
1�
1����/�0�0�0�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1��	1�	1��A>�>B	�B	r"�chrc� �|j���}|j�ddt��dD]P}|�t
j��5|�d|f��ddd��n#1swxYwY�QdS)N�pychrra)i��i��zselect pychr(?))r�r�r�rYr�r#r�r�rWs   r�%test_func_return_text_with_surrogatesz3FunctionTests.test_func_return_text_with_surrogates�s����h�o�o������ � ��!�S�1�1�1�#�	9�	9�E��"�"�6�#:�;�;�
9�
9����-��x�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9��	9�	9s�B�B	�	B	�zrequires 64bit platformrMr3F)�size�memuse�dry_runc��|j���}dD]m}|j�dd|fd���|�tj��5|�d��ddd��n#1swxYwY�ndS)N�i���rM�	largetextrc��d|zS)N�br �r^s rr�z?FunctionTests.test_func_return_too_large_text.<locals>.<lambda>�s
��s�T�z�rzselect largetext()rV�rr^r�s   r�test_func_return_too_large_textz-FunctionTests.test_func_return_too_large_text�s����h�o�o����"�	2�	2�D��H�$�$�[�!��5Q�5Q�5Q�R�R�R��"�"�6�#3�4�4�
2�
2����0�1�1�1�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2��	2�	2rXr�c��|j���}dD]m}|j�dd|fd���|�tj��5|�d��ddd��n#1swxYwY�ndS)Nrb�	largeblobrc��d|zS)N�br rfs rr�z?FunctionTests.test_func_return_too_large_blob.<locals>.<lambda>�s
��t�d�{�rzselect largeblob()rVrgs   r�test_func_return_too_large_blobz-FunctionTests.test_func_return_too_large_blob�s����h�o�o����"�	2�	2�D��H�$�$�[�!��5R�5R�5R�S�S�S��"�"�6�#3�4�4�
2�
2����0�1�1�1�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2��	2�	2rXc����j�dd�fd���d}��tj|�jjd��dS)N�	badreturnrc����Sr
r r\s�rr�z>FunctionTests.test_func_return_illegal_value.<locals>.<lambda>�s����rrzselect badreturn())r�r�r�r#r�r�)rr4s` r�test_func_return_illegal_valuez,FunctionTests.test_func_return_illegal_value�sa����� � ��a�����>�>�>�6�����v�6��#�x�/�1E�	G�	G�	G�	G�	GrN)4r1rcrdr�r�r�r�r�r�r�r�r�r�r�r�r�rrr!�ZeroDivisionErrorrrTrrWrrrrrrrr r$r2�unittest�skipIfr#r=rArCrFrIrQr#r\�
skipUnless�sys�maxsizerrhrmrqr rrr�r��s�������6�6�6�0���A�A�A�6�6�6�
(�
(�
(�%�%�%�(�(�(�%�%�%�"�"�"�%�%�%�$�$�$�'�'�'�%�%�%�-�-�-�
O�O�O�
�_�&�-B�C�C�C�V�V�D�C�V��_�[�'9�:�:�:���;�:���_�]�)=�>�>�>���?�>��!�!�!�+�+�+�+�+�+�
=�=�=�
<�<�<��_�[�(<�=�=�=���>�=��
2�2�2�
+�+�+�B�X�_�V�/�)�;�=^�_�_�c�c�`�_�c��X�_�V�/�)�;�=^�_�_�
M�
M�`�_�
M��X�_�V�/�9�<�>U�V�V�R�R�W�V�R�D�D�D����"�_�]�#�#�1�1�$�#�1��_�'�)A�5�I�I�9�9�J�I�9��X����u�,�.G�H�H��Z�U�1�e�4�4�4�2�2�5�4�I�H�2��X����u�,�.G�H�H��Z�U�1�e�4�4�4�2�2�5�4�I�H�2�G�G�G�G�Grr�c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�WindowSumIntc��d|_dSr���countr\s rr]zWindowSumInt.__init__�s
����
�
�
rc�&�|xj|z
c_dSr
r{�rrUs  rrkzWindowSumInt.step�����
�
�e��
�
�
�
rc��|jSr
r{r\s rrUzWindowSumInt.value��
���z�rc�&�|xj|zc_dSr
r{r~s  r�inversezWindowSumInt.inverse�rrc��|jSr
r{r\s rrbzWindowSumInt.finalize�r�rN)r1rcrdr]rkrUr�rbr rrryry�s_����������������������rryc��eZdZdS)�	BadWindowN)r1rcrdr rrr�r��s�������Drr�)r3�rzRequires SQLite 3.25.0 or newerc���eZdZd�Zd�Zd�Zee��d���Zee��d���Z	ee
��d���Zee
��d���Zd�Z
d	�Zd
�ZdS)�WindowFunctionTestsc��tjd��|_|j���|_gd�}|j5|j�d��|j�d|��ddd��n#1swxYwYgd�|_d|_|j�	ddt��dS)	Nr�))�a�)rerQ)�cr3)�dr4)�erazcreate table test(x, y)zinsert into test values(?, ?)))r��	)re�)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
        �sumintra)r#r�r�r�r�r��executemany�expected�query�create_window_functionry)r�valuess  rr�zWindowFunctionTests.setUp�s���>�*�-�-����8�?�?�$�$���
�
�
���X�	J�	J��H���6�7�7�7��H� � �!@�&�I�I�I�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J����	J�	J�	J�	J�
�
�
��
���
�	
��'�'��!�\�B�B�B�B�Bs�6B�B	�B	c��|j�|jdz��|�|j���|j��dS)Nr�)r�r�r�r)�fetchallr�r\s r�test_win_sum_intz$WindowFunctionTests.test_win_sum_intsK��������h�.�/�/�/������*�*�,�,�d�m�<�<�<�<�<rc�j�|�tj|jjddt
��dS)N�
shouldfailr�)r�r#�ProgrammingErrorr�r�ryr\s r�test_win_error_on_createz,WindowFunctionTests.test_win_error_on_creates8�����&�1��(�9�&��l�	<�	<�	<�	<�	<rc	� �dD�]	}|�|���5tjt|t���5d|��}|j�|dt��d|�d�}|�tj	|��5|j
�|j|z��|j
�
��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY��dS)N)r]rkrUr�)�meth��side_effect�exc_ra�'z' method raised error)�subTestrr0ryr�r�r�r�r#r�r�r�r�r�)rr�rr4s    r�test_win_exception_in_methodz0WindowFunctionTests.test_win_exception_in_method#s���:�	,�	,�D����4��(�(�
,�
,��\�,��)�L�L�L�,�,�(�$�=�=�D��H�3�3�D�!�\�J�J�J�9�d�9�9�9�C��/�/��0G��M�M�,�,���(�(���d�):�;�;�;���)�)�+�+�+�,�,�,�,�,�,�,�,�,�,�,����,�,�,�,�	,�,�,�,�,�,�,�,�,�,�,����,�,�,�,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,��	,�	,sY�"D�A
C*�<C	�C*�C
�C*�C
�C*�D�*C.�.D�1C.�2D�D	�D	c�6�tjtdt���5d}|j�|dt��|j�|j|z��|j�	��ddd��dS#1swxYwYdS)Nrbr��exception_in_finalizera)
rr0ryr�r�r�r�r�r�r�)rrs  r�test_win_exception_in_finalizez2WindowFunctionTests.test_win_exception_in_finalize/s���
�\�,�
�	�
J�
J�
J�	 �	 �+�D��H�+�+�D�!�\�B�B�B��H���T�Z�$�.�/�/�/��H������		 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 s�AB�B�Bc��Gd�d��}Gd�d��}Gd�d��}d|fd|fd	|ff}|D]�\}}|�||�
��5d|��}|j�|d|��|�tjd
|�d���5|j�|j|z��|j�	��ddd��n#1swxYwYddd��n#1swxYwY��dS)Nc� �eZdZd�Zd�Zd�ZdS)�AWindowFunctionTests.test_win_missing_method.<locals>.MissingValuec��dSr
r ris  rrkzFWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.step=����rc��dSr
r ris  rr�zIWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.inverse>r�rc��dSr@r r\s rrbzJWindowFunctionTests.test_win_missing_method.<locals>.MissingValue.finalize?���r�rrN)r1rcrdrkr�rbr rr�MissingValuer�<�+������#�#�#�&�&�&�)�)�)�)�)rr�c� �eZdZd�Zd�Zd�ZdS)�CWindowFunctionTests.test_win_missing_method.<locals>.MissingInversec��dSr
r ris  rrkzHWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.stepBr�rc��dSr@r r\s rrUzIWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.valueC���B�Brc��dSr@r r\s rrbzLWindowFunctionTests.test_win_missing_method.<locals>.MissingInverse.finalizeDr�rN)r1rcrdrkrUrbr rr�MissingInverser�Ar�rr�c� �eZdZd�Zd�Zd�ZdS)�@WindowFunctionTests.test_win_missing_method.<locals>.MissingStepc��dSr@r r\s rrUzFWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.valueGr�rc��dSr
r ris  rr�zHWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.inverseHr�rc��dSr@r r\s rrbzIWindowFunctionTests.test_win_missing_method.<locals>.MissingStep.finalizeIr�rN)r1rcrdrUr�rbr rr�MissingStepr�Fs+������&�&�&�&�&�&�)�)�)�)�)rr�rkrUr�)r��clsr�rar�z' method not defined)
r�r�r�r�r#r�r�r�r�r�)rr�r�r�r0r�r�rs        r�test_win_missing_methodz+WindowFunctionTests.test_win_missing_method:s���	*�	*�	*�	*�	*�	*�	*�	*�
	*�	*�	*�	*�	*�	*�	*�	*�
	*�	*�	*�	*�	*�	*�	*�	*��[�!�
�l�#�
��'�
��
!�	(�	(�I�D�#����4�S��1�1�
(�
(�$�d�}�}����/�/��a��=�=�=��+�+�F�,C�,J��,J�,J�,J�L�L�(�(��H�$�$�T�Z�$�%6�7�7�7��H�%�%�'�'�'�(�(�(�(�(�(�(�(�(�(�(����(�(�(�(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��	(�	(s7�AC6�<C�C6�C#�#C6�&C#�'C6�6C:	�=C:	c���Gd�d��}d}|j�|d|��|j�|j|z��|j���dS)Nc� �eZdZd�Zd�Zd�ZdS)�FWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalizec��dSr
r ris  rrkzKWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.step_r�rc��dSr@r r\s rrUzLWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.value`r�rc��dSr
r ris  rr�zNWindowFunctionTests.test_win_missing_finalize.<locals>.MissingFinalize.inversear�rN)r1rcrdrkrUr�r rr�MissingFinalizer�^s+������#�#�#�&�&�&�&�&�&�&�&rr��missing_finalizera)r�r�r�r�r�r�)rr�rs   r�test_win_missing_finalizez-WindowFunctionTests.test_win_missing_finalizeYs���
	'�	'�	'�	'�	'�	'�	'�	'�
"����'�'��a��A�A�A�������d�*�+�+�+���������rc��|j�ddd��|�tj|jj|jdz��dS)Nr�ra)r�r�r�r#r�r�r�r�r\s r�test_win_clear_functionz+WindowFunctionTests.test_win_clear_functionhsT����'�'��!�T�:�:�:����&�1�4�8�3C��*�x�/�	1�	1�	1�	1�	1rc�$�Gd�dt��}d�|jD��}|j�dd|��|j�|jdz��|�|j���|��dS)Nc��eZdZd�Zd�ZdS)�AWindowFunctionTests.test_win_redefine_function.<locals>.Redefinedc�,�|xj|dzz
c_dSr�r{r~s  rrkzFWindowFunctionTests.test_win_redefine_function.<locals>.Redefined.stepps��4�:�:����#:�:�:�:�:rc�,�|xj|dzzc_dSr�r{r~s  rr�zIWindowFunctionTests.test_win_redefine_function.<locals>.Redefined.inverseqs��d�j�j�E�A�I�&=�j�j�j�jrN)r1rcrdrkr�r rr�	Redefinedr�os"������:�:�:�=�=�=�=�=rr�c�4�g|]}|d|ddzf��S)rrar�r )�.0�vs  r�
<listcomp>zBWindowFunctionTests.test_win_redefine_function.<locals>.<listcomp>rs(��:�:�:�q�Q�q�T�1�Q�4��6�N�:�:�:rr�ra)	ryr�r�r�r�r�r�r)r�)rr�r�s   r�test_win_redefine_functionz.WindowFunctionTests.test_win_redefine_functionms���	>�	>�	>�	>�	>��	>�	>�	>�;�:�D�M�:�:�:����'�'��!�Y�?�?�?�������h�.�/�/�/������*�*�,�,�h�7�7�7�7�7rc��Gd�d��}|j�dd|��|�tjd|jj|jdz��dS)Nc� �eZdZd�Zd�Zd�ZdS)�IWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturnc��dSr
r r\s rr]zRWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.__init__zr�rc��dSr
r ris  rrkzNWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.step{r�rc��dSr�r r\s rrUzOWindowFunctionTests.test_win_error_value_return.<locals>.ErrorValueReturn.value|s��G�GrN)r1rcrdr]rkrUr rr�ErrorValueReturnr�ys+������$�$�$�#�#�#�+�+�+�+�+rr��err_val_retrar)r�r�r�r#rr�r�r�)rr�s  r�test_win_error_value_returnz/WindowFunctionTests.test_win_error_value_returnxs���	,�	,�	,�	,�	,�	,�	,�	,�
	
��'�'�
�q�:J�K�K�K����v�/�1I�#�x�/���m�1K�	M�	M�	M�	M�	MrN)r1rcrdr�r�r�r!r�r�r��AttributeErrorr�r�r�r�r�r rrr�r��s������C�C�C�<=�=�=�<�<�<�
�_�Y���	,�	,� ��	,��_�Y��� � � �� ��_�^�$�$�(�(�%�$�(�<�_�^�$�$���%�$��1�1�1�
	8�	8�	8�M�M�M�M�Mrr�c��eZdZd�Zd�Zd�Zeed���d���Zd�Z	ee
d���d	���Zee
d
���d���Zee
d���d
���Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�AggregateTestsc
�6�tjd��|_|j���}|�d��|�dddddtd��f��|j�dd	t��|j�d
d	t��|j�dd	t��|j�dd	t��|j�d
d	t��|j�ddt��|j�ddt��|j�dd	t��|j�dd	t��dS)Nr�z�
            create table test(
                t text,
                i integer,
                f float,
                n,
                b blob
                )
            z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)r6rQrDrJ�nostepra�
nofinalize�excInit�excStep�excFinalize�	checkTyper��
checkTypesr��mysum�aggtxt)r#r�r�r�r�r��create_aggregaterZrfrmrtryr~r�r�r�rs  rr�zAggregateTests.setUp�se���>�*�-�-����h�o�o��������	�	�	�	���L�
�A�t�T�:�g�#6�#6�8�	:�	:�	:�	
��!�!�(�A�z�:�:�:���!�!�,��>�B�B�B���!�!�)�Q�0C�D�D�D���!�!�)�Q�0C�D�D�D���!�!�-��4K�L�L�L���!�!�+�q�-�@�@�@���!�!�,��N�C�C�C���!�!�'�1�g�6�6�6���!�!�(�A�x�8�8�8�8�8rc��dSr
r r\s rr�zAggregateTests.tearDown�s	��	
�rc��|�tj��5|j�ddt
��ddd��dS#1swxYwYdS)Nr�r�)r�r#r�r�r�r�r\s r�test_aggr_error_on_createz(AggregateTests.test_aggr_error_on_create�s���
�
�
�v�6�
7�
7�	;�	;��H�$�$�U�D�'�:�:�:�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�	;�	;s�"A�A�ArZrc� �|j���}|�tj��5}|�d��ddd��n#1swxYwY|�t|j��d��dS)Nzselect nostep(t) from testz2user-defined aggregate's 'step' method not defined)	r�r�r�r#r�r�r)r,r
rs   r�test_aggr_no_stepz AggregateTests.test_aggr_no_step�s����h�o�o����
�
�
�v�6�
7�
7�	6�2��K�K�4�5�5�5�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�����R�\�*�*�M�	O�	O�	O�	O�	Os�A�A�"Ac��|j���}d}|�tj|��5|�d��|���d}ddd��dS#1swxYwYdS)Nz6user-defined aggregate's 'finalize' method not definedzselect nofinalize(t) from testr)r�r�r�r#r�r�r�)rr�r4r�s    r�test_aggr_no_finalizez$AggregateTests.test_aggr_no_finalize�s����h�o�o����F��
�
#�
#�F�$;�S�
A�
A�	$�	$��K�K�8�9�9�9��,�,�.�.��#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�0A9�9A=�A=rmc�T�|j���}|�tj��5}|�d��|���d}ddd��n#1swxYwY|�t|j	��d��dS)Nzselect excInit(t) from testrz7user-defined aggregate's '__init__' method raised errorr	�rr�rr�s    r�test_aggr_exception_in_initz*AggregateTests.test_aggr_exception_in_init�s����h�o�o����
�
�
�v�6�
7�
7�	$�2��K�K�5�6�6�6��,�,�.�.��#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	
����R�\�*�*�,e�f�f�f�f�f��0A5�5A9�<A9rtc�T�|j���}|�tj��5}|�d��|���d}ddd��n#1swxYwY|�t|j	��d��dS)Nzselect excStep(t) from testrz3user-defined aggregate's 'step' method raised errorr	r�s    r�test_aggr_exception_in_stepz*AggregateTests.test_aggr_exception_in_step�s����h�o�o����
�
�
�v�6�
7�
7�	$�2��K�K�5�6�6�6��,�,�.�.��#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	
����R�\�*�*�,a�b�b�b�b�br�ryc�T�|j���}|�tj��5}|�d��|���d}ddd��n#1swxYwY|�t|j	��d��dS)Nzselect excFinalize(t) from testrz7user-defined aggregate's 'finalize' method raised errorr	r�s    r�test_aggr_exception_in_finalizez.AggregateTests.test_aggr_exception_in_finalize�s����h�o�o����
�
�
�v�6�
7�
7�	$�2��K�K�9�:�:�:��,�,�.�.��#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	
����R�\�*�*�,e�f�f�f�f�fr�c���|j���}|�ddt��f��|���d}|�|d��dS)Nzselect checkTypes('str', ?, ?)r6rr�)r�r�r�r,r�r)r�s   r�test_aggr_check_param_strz(AggregateTests.test_aggr_check_param_str�s^���h�o�o�������4�u�c�e�e�n�E�E�E��l�l�n�n�Q�������a� � � � � rc���|j���}|�dd��|���d}|�|d��dS)Nzselect checkType('int', ?))rArrar�r�s   r�test_aggr_check_param_intz(AggregateTests.test_aggr_check_param_int�sV���h�o�o�������0�%�8�8�8��l�l�n�n�Q�������a� � � � � rc���|j���}|�dd��|���d}|�|d��dS)Nzselect checkTypes('int', ?, ?))rA�rr�r�r�s   r�test_aggr_check_params_intz)AggregateTests.test_aggr_check_params_int�sV���h�o�o�������4�h�?�?�?��l�l�n�n�Q�������a� � � � � rc���|j���}|�dd��|���d}|�|d��dS)Nzselect checkType('float', ?))rDrrar�r�s   r�test_aggr_check_param_floatz*AggregateTests.test_aggr_check_param_float�sV���h�o�o�������2�G�<�<�<��l�l�n�n�Q�������a� � � � � rc���|j���}|�dd��|���d}|�|d��dS)Nzselect checkType('None', ?)r
rrar�r�s   r�test_aggr_check_param_nonez)AggregateTests.test_aggr_check_param_none�sV���h�o�o�������1�7�;�;�;��l�l�n�n�Q�������a� � � � � rc���|j���}|�dtd��f��|���d}|�|d��dS)Nzselect checkType('blob', ?)rJrra)r�r�r�r�r�r)r�s   r�test_aggr_check_param_blobz)AggregateTests.test_aggr_check_param_blob�sa���h�o�o�������1�J�w�4G�4G�3I�J�J�J��l�l�n�n�Q�������a� � � � � rc��|j���}|�d��|�dgd���|�d��|���d}|�|d��dS)Nzdelete from testzinsert into test(i) values (?)))�
)�)�zselect mysum(i) from testr�<)r�r�r�r�r�r)r�s   r�test_aggr_check_aggr_sumz'AggregateTests.test_aggr_check_aggr_sum�s����h�o�o�������&�'�'�'����8�:O�:O�:O�P�P�P����/�0�0�0��l�l�n�n�Q�������b�!�!�!�!�!rc��|j�d��}|���d}|�|��dS)Nz1select mysum(i) from (select 1 as i) where i == 0r)r�r�r�r�r�s   r�test_aggr_no_matchz!AggregateTests.test_aggr_no_match�sD���h���R�S�S���l�l�n�n�Q������#�����rc�,�|j���}dD]w}|�|���5|�d|f��|���d}|�||��ddd��n#1swxYwY�xdS)N)r6r:r�zselect aggtxt(?) from testr)r�r�r�r�r�r))rr�r�r�s    r�test_aggr_textzAggregateTests.test_aggr_text�s����h�o�o����$�	+�	+�C����#��&�&�
+�
+����8�3�&�A�A�A��l�l�n�n�Q�'��� � ��c�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+��	+�	+s�AB�B	�B	N)r1rcrdr�r�r�r!r�r�r�rrr�r�r�rrrrr
rrrrr rrr�r��s�������9�9�9�2
�
�
�
;�;�;��_�^�,�7�7�7�O�O�8�7�O�$�$�$��_�&�-B�C�C�C�g�g�D�C�g��_�&�-B�C�C�C�c�c�D�C�c��_�&�-F�G�G�G�g�g�H�G�g�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�"�"�"����
+�+�+�+�+rr�c�B�eZdZed���Zd�Zd�Zd�Zd�Zd�Z	dS)�AuthorizerTestsc��|tjkrtjS|dks|dkrtjStjS�N�c2�t2)r#�
SQLITE_SELECT�SQLITE_DENY�	SQLITE_OK��action�arg1�arg2�dbname�sources     r�
authorizer_cbzAuthorizerTests.authorizer_cbsD���V�)�)�	&��%�%��4�<�	&�4�4�<�	&��%�%���rc���tjd��|_|j�d��|j�d��|j�|j��dS)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);
            zselect c2 from t2)r#r�r��
executescriptr��set_authorizerr&r\s rr�zAuthorizerTests.setUpsj���>�*�-�-������� �	�	�	�	
����,�-�-�-������ 2�3�3�3�3�3rc��dSr
r r\s rr�zAuthorizerTests.tearDownr^rc��|�tj��5}|j�d��ddd��n#1swxYwY|�dt
|j����dS)N�select * from t2�
prohibited�r�r#�
DatabaseErrorr�r��assertInr,r
�rrs  r�test_table_accessz!AuthorizerTests.test_table_access!s���
�
�
�v�3�
4�
4�	1���H���/�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1��
�
�l�C���$5�$5�6�6�6�6�6��A�A�Ac��|�tj��5}|j�d��ddd��n#1swxYwY|�dt
|j����dS)N�select c2 from t1r-r.r1s  r�test_column_accessz"AuthorizerTests.test_column_access&s���
�
�
�v�3�
4�
4�	2���H���0�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��
�
�l�C���$5�$5�6�6�6�6�6r3c��|j�d��|j�d��|j�d��dS)Nr,r5)r�r)r�r\s r�test_clear_authorizerz%AuthorizerTests.test_clear_authorizer+sL�������%�%�%�����+�,�,�,�����,�-�-�-�-�-rN)
r1rcrd�staticmethodr&r�r�r2r6r8r rrrrsx������� � ��\� �4�4�4�
�
�
�7�7�7�
7�7�7�
.�.�.�.�.rrc���eZdZed���Zeed����fd���Zeed����fd���Z�xZ	S)�AuthorizerRaiseExceptionTestsc�n�|tjkrt�|dks|dkrt�tjSr)r#r�
ValueErrorrr s     rr&z+AuthorizerRaiseExceptionTests.authorizer_cb2s>���V�)�)�	����4�<�	�4�4�<�	�����rr&rc�H��t�����dSr
��superr2�r�	__class__s �rr2z/AuthorizerRaiseExceptionTests.test_table_access:����
���!�!�#�#�#�#�#rc�H��t�����dSr
r?rAs �rr6z0AuthorizerRaiseExceptionTests.test_column_access>rCr)
r1rcrdr9r&r!r=r2r6�
__classcell__)rBs@rr;r;1s��������� � ��\� ��_�Z�o�6�6�6�$�$�$�$�7�6�$��_�Z�o�6�6�6�$�$�$�$�7�6�$�$�$�$�$rr;c�$�eZdZed���ZdS)�AuthorizerIllegalTypeTestsc�Z�|tjkrdS|dks|dkrdStjS)Nr�rr�r#rrr s     rr&z(AuthorizerIllegalTypeTests.authorizer_cbCs<���V�)�)�	��3��4�<�	�4�4�<�	��3���rN�r1rcrdr9r&r rrrGrGB�-������� � ��\� � � rrGc�$�eZdZed���ZdS)�AuthorizerLargeIntegerTestsc�Z�|tjkrdS|dks|dkrdStjS)Nr]rrrIr s     rr&z)AuthorizerLargeIntegerTests.authorizer_cbLs<���V�)�)�	��5��4�<�	�4�4�<�	��5���rNrJr rrrMrMKrKrrM�__main__)r	r	)7r'rr%rrvrs�sqlite3r#�
unittest.mockrr�test.supportrrr�test.test_sqlite3.test_dbapirr!�contextmanagerrr7r;r>rBrErHrKrNrRrUrXrZrfrmrtryr~r�r�r��TestCaser�ry�	Exceptionr�rtr=r�r�rr;rGrMr1�mainr rr�<module>rXs���0��������	�	�	�	�	�	�	�	�
�
�
�
���������%�%�%�%�%�%�%�%�K�K�K�K�K�K�K�K�K�K�1�1�1�1�1�1�����"��1�1���1�$�����������������������������������������
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�����������������
�
�
�
�
�
�
�
�������������������������iG�iG�iG�iG�iG�H�%�iG�iG�iG�X	�������� 	�	�	�	�	�	�	�	�	�����+�j�8�2�4�4�EM�EM�EM�EM�EM�(�+�EM�EM�4�4�EM�PA+�A+�A+�A+�A+�X�&�A+�A+�A+�H'.�'.�'.�'.�'.�h�'�'.�'.�'.�T$�$�$�$�$�O�$�$�$�" � � � � �� � � � � � � � �/� � � ��z����H�M�O�O�O�O�O��r