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_dbapi.cpython-311.opt-2.pyc
�

��Vc�%���ddlZddlZddlZddlZddlZddlZddlZddlZ	ddl
mZmZm
Z
mZmZmZddl
mZddlmZmZddlmZmZmZddlmZmZmZmZmZd�Zejej dfd	���Z!Gd
�dej"��Z#Gd�d
ej"��Z$Gd�dej"��Z%ej&e'ej(d��d��Gd�dej"����Z)Gd�dej"��Z*Gd�dej"��Z+Gd�dej"��Z,ej-��Gd�dej"����Z.Gd�dej"��Z/Gd�dej"��Z0Gd �d!ej"��Z1Gd"�d#ej"��Z2Gd$�d%ej"��Z3e��Gd&�d'ej"����Z4e5d(krej6��dSdS))�N)�
SHORT_TIMEOUT�
bigmemtest�check_disallow_instantiation�requires_subprocess�
is_emscripten�is_wasi)�threading_helper)�INT_MAX�
ULLONG_MAX)�SEEK_SET�SEEK_CUR�SEEK_END)�TESTFN�TESTFN_UNDECODABLE�unlink�temp_dir�FakePathc�T�tjdg|�Ri|��}tj|��S�N�:memory:)�sqlite�connect�
contextlib�closing)�args�kwargs�cxs   �0D:\Python311\Lib\test\test_sqlite3\test_dbapi.py�memory_databaser+s2��	��
�	4�T�	4�	4�	4�V�	4�	4�B���b�!�!�!��c#�K�	|�||��}|V�|�||��dS#|�||��wxYw�N)�setlimit)r�category�limit�_prevs    r�cx_limitr(1s[����%����H�e�,�,������
���H�e�$�$�$�$�$�����H�e�$�$�$�$���s	�6�Ac��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zejejdkd��d���Zejejdkd��d���Zd�Zd�ZdS)�ModuleTestsc�b�|�tjddtjz��dS)Nz2.0zapilevel is %s, should be 2.0)�assertEqualr�apilevel��selfs r�test_api_levelzModuleTests.test_api_level;s9�������%�8�6�?�J�	L�	L�	L�	L�	Lr c�f�|�tjhd�dtjz��dS)N>r��z'threadsafety is %d, should be 0, 1 or 3)�assertInr�threadsafetyr.s r�test_thread_safetyzModuleTests.test_thread_safety?s;���
�
�f�)�9�9�9�?��)�*�	+�	+�	+�	+�	+r c�b�|�tjddtjz��dS)N�qmarkz%paramstyle is '%s', should be 'qmark')r,r�
paramstyler.s r�test_param_stylezModuleTests.test_param_styleDs9������*�G�@��*�+�	,�	,�	,�	,�	,r c�l�|�ttjt��d��dS)Nz&Warning is not a subclass of Exception)�
assertTrue�
issubclassr�Warning�	Exceptionr.s r�test_warningzModuleTests.test_warningIs3�����
�6�>�9�=�=�=�	?�	?�	?�	?�	?r c�l�|�ttjt��d��dS)Nz$Error is not a subclass of Exception)r<r=r�Errorr?r.s r�
test_errorzModuleTests.test_errorMs8�����
�6�<��;�;�>�	@�	@�	@�	@�	@r c�v�|�ttjtj��d��dS)Nz)InterfaceError is not a subclass of Error)r<r=r�InterfaceErrorrBr.s r�test_interface_errorz ModuleTests.test_interface_errorQs;�����
�6�#8�&�,�G�G�C�	E�	E�	E�	E�	Er c�v�|�ttjtj��d��dS)Nz(DatabaseError is not a subclass of Error)r<r=r�
DatabaseErrorrBr.s r�test_database_errorzModuleTests.test_database_errorUs;�����
�6�#7���F�F�B�	D�	D�	D�	D�	Dr c�v�|�ttjtj��d��dS)Nz,DataError is not a subclass of DatabaseError)r<r=r�	DataErrorrHr.s r�test_data_errorzModuleTests.test_data_errorYs<�����
�6�#3�V�5I�J�J�F�	H�	H�	H�	H�	Hr c�v�|�ttjtj��d��dS)Nz3OperationalError is not a subclass of DatabaseError)r<r=r�OperationalErrorrHr.s r�test_operational_errorz"ModuleTests.test_operational_error]�<�����
�6�#:�F�<P�Q�Q�M�	O�	O�	O�	O�	Or c�v�|�ttjtj��d��dS)Nz1IntegrityError is not a subclass of DatabaseError)r<r=r�IntegrityErrorrHr.s r�test_integrity_errorz ModuleTests.test_integrity_erroras<�����
�6�#8�&�:N�O�O�K�	M�	M�	M�	M�	Mr c�v�|�ttjtj��d��dS)Nz0InternalError is not a subclass of DatabaseError)r<r=r�
InternalErrorrHr.s r�test_internal_errorzModuleTests.test_internal_errores<�����
�6�#7��9M�N�N�J�	L�	L�	L�	L�	Lr c�v�|�ttjtj��d��dS)Nz3ProgrammingError is not a subclass of DatabaseError)r<r=r�ProgrammingErrorrHr.s r�test_programming_errorz"ModuleTests.test_programming_errorirPr c�v�|�ttjtj��d��dS)Nz4NotSupportedError is not a subclass of DatabaseError)r<r=r�NotSupportedErrorrHr.s r�test_not_supported_errorz$ModuleTests.test_not_supported_errormsA�����
�6�#;�#)�#7�9�9�N�	P�	P�	P�	P�	Pr c�t�gd�}tjdkr|ddgz
}tjdkr|�d��tjdkr|�d��|d	d
gz
}|gd�z
}tjdkr|gd
�z
}tjdkr|gd�z
}tjdkr|gd�z
}tjdkr|ddgz
}tjdkr|�d��tjdkr|�d��tjdkr|�d��tjdkr|�d��tjdkr|�d��tjdkr|�d��tjdkr|gd�z
}tjd kr|gd!�z
}tjd"kr|d#d$gz
}tjd%kr|d&d'gz
}tjd(kr|gd)�z
}tjd*kr|gd+�z
}tjd,kr|�d-��|D]X}|�|�.��5|�tt|����ddd��n#1swxYwY�YdS)/N)J�SQLITE_ABORT�SQLITE_ALTER_TABLE�SQLITE_ANALYZE�
SQLITE_ATTACH�SQLITE_AUTH�SQLITE_BUSY�SQLITE_CANTOPEN�SQLITE_CONSTRAINT�SQLITE_CORRUPT�SQLITE_CREATE_INDEX�SQLITE_CREATE_TABLE�SQLITE_CREATE_TEMP_INDEX�SQLITE_CREATE_TEMP_TABLE�SQLITE_CREATE_TEMP_TRIGGER�SQLITE_CREATE_TEMP_VIEW�SQLITE_CREATE_TRIGGER�SQLITE_CREATE_VIEW�SQLITE_CREATE_VTABLE�
SQLITE_DELETE�SQLITE_DENY�
SQLITE_DETACH�SQLITE_DONE�SQLITE_DROP_INDEX�SQLITE_DROP_TABLE�SQLITE_DROP_TEMP_INDEX�SQLITE_DROP_TEMP_TABLE�SQLITE_DROP_TEMP_TRIGGER�SQLITE_DROP_TEMP_VIEW�SQLITE_DROP_TRIGGER�SQLITE_DROP_VIEW�SQLITE_DROP_VTABLE�SQLITE_EMPTY�SQLITE_ERROR�
SQLITE_FORMAT�SQLITE_FULL�SQLITE_FUNCTION�
SQLITE_IGNORE�
SQLITE_INSERT�SQLITE_INTERNAL�SQLITE_INTERRUPT�SQLITE_IOERR�
SQLITE_LOCKED�SQLITE_MISMATCH�
SQLITE_MISUSE�SQLITE_NOLFS�SQLITE_NOMEM�
SQLITE_NOTADB�SQLITE_NOTFOUND�	SQLITE_OK�SQLITE_PERM�
SQLITE_PRAGMA�SQLITE_PROTOCOL�SQLITE_RANGE�SQLITE_READ�SQLITE_READONLY�SQLITE_REINDEX�
SQLITE_ROW�SQLITE_SAVEPOINT�
SQLITE_SCHEMA�
SQLITE_SELECT�
SQLITE_TOOBIG�SQLITE_TRANSACTION�
SQLITE_UPDATE�SQLITE_LIMIT_LENGTH�SQLITE_LIMIT_SQL_LENGTH�SQLITE_LIMIT_COLUMN�SQLITE_LIMIT_EXPR_DEPTH�SQLITE_LIMIT_COMPOUND_SELECT�SQLITE_LIMIT_VDBE_OP�SQLITE_LIMIT_FUNCTION_ARG�SQLITE_LIMIT_ATTACHED� SQLITE_LIMIT_LIKE_PATTERN_LENGTH�SQLITE_LIMIT_VARIABLE_NUMBER�SQLITE_LIMIT_TRIGGER_DEPTH)r3���
SQLITE_NOTICE�SQLITE_WARNING)r3�r3�SQLITE_RECURSIVE)r3r�r��SQLITE_LIMIT_WORKER_THREADS�PARSE_DECLTYPES�PARSE_COLNAMES) �SQLITE_ABORT_ROLLBACK�SQLITE_BUSY_RECOVERY�SQLITE_CANTOPEN_FULLPATH�SQLITE_CANTOPEN_ISDIR�SQLITE_CANTOPEN_NOTEMPDIR�SQLITE_CORRUPT_VTAB�SQLITE_IOERR_ACCESS�SQLITE_IOERR_BLOCKED�SQLITE_IOERR_CHECKRESERVEDLOCK�SQLITE_IOERR_CLOSE�SQLITE_IOERR_DELETE�SQLITE_IOERR_DELETE_NOENT�SQLITE_IOERR_DIR_CLOSE�SQLITE_IOERR_DIR_FSYNC�SQLITE_IOERR_FSTAT�SQLITE_IOERR_FSYNC�SQLITE_IOERR_LOCK�SQLITE_IOERR_NOMEM�SQLITE_IOERR_RDLOCK�SQLITE_IOERR_READ�SQLITE_IOERR_SEEK�SQLITE_IOERR_SHMLOCK�SQLITE_IOERR_SHMMAP�SQLITE_IOERR_SHMOPEN�SQLITE_IOERR_SHMSIZE�SQLITE_IOERR_SHORT_READ�SQLITE_IOERR_TRUNCATE�SQLITE_IOERR_UNLOCK�SQLITE_IOERR_WRITE�SQLITE_LOCKED_SHAREDCACHE�SQLITE_READONLY_CANTLOCK�SQLITE_READONLY_RECOVERY�r3r��)
�SQLITE_CONSTRAINT_CHECK�SQLITE_CONSTRAINT_COMMITHOOK�SQLITE_CONSTRAINT_FOREIGNKEY�SQLITE_CONSTRAINT_FUNCTION�SQLITE_CONSTRAINT_NOTNULL�SQLITE_CONSTRAINT_PRIMARYKEY�SQLITE_CONSTRAINT_TRIGGER�SQLITE_CONSTRAINT_UNIQUE�SQLITE_CONSTRAINT_VTAB�SQLITE_READONLY_ROLLBACK)�SQLITE_IOERR_MMAP�SQLITE_NOTICE_RECOVER_ROLLBACK�SQLITE_NOTICE_RECOVER_WAL)r3r�r)�SQLITE_BUSY_SNAPSHOT�SQLITE_IOERR_GETTEMPPATH�SQLITE_WARNING_AUTOINDEX)r3r�r2�SQLITE_CANTOPEN_CONVPATH�SQLITE_IOERR_CONVPATH)r3r���SQLITE_CONSTRAINT_ROWID�SQLITE_READONLY_DBMOVED�SQLITE_AUTH_USER)r3�	r�SQLITE_IOERR_VNODE)r3�
r�SQLITE_IOERR_AUTH)r3�r2�SQLITE_OK_LOAD_PERMANENTLY)r3�r)�SQLITE_IOERR_BEGIN_ATOMIC�SQLITE_IOERR_COMMIT_ATOMIC�SQLITE_IOERR_ROLLBACK_ATOMIC)r3�r)�SQLITE_ERROR_MISSING_COLLSEQ�SQLITE_ERROR_RETRY�SQLITE_READONLY_CANTINIT�SQLITE_READONLY_DIRECTORY)r3�r�SQLITE_CORRUPT_SEQUENCE�SQLITE_LOCKED_VTAB�r3�r�SQLITE_CANTOPEN_DIRTYWAL�SQLITE_ERROR_SNAPSHOT)r3�r)�SQLITE_CANTOPEN_SYMLINK�SQLITE_CONSTRAINT_PINNED�SQLITE_OK_SYMLINK)r3� r)�SQLITE_BUSY_TIMEOUT�SQLITE_CORRUPT_INDEX�SQLITE_IOERR_DATA)r3�"r�SQLITE_IOERR_CORRUPTFS)�const)r�sqlite_version_info�append�subTestr<�hasattr)r/�constsr	s   r�test_module_constantsz!ModuleTests.test_module_constantsrs���L
�L
�L
��Z�%��3�	:���(8�9�9�F��%��2�	.��M�M�,�-�-�-��%��2�	9��M�M�7�8�8�8��$�&6�7�7���!
�!
�!
�!	
��D�%��3�	�����
�F��%��3�	�����
�F�
�%��2�	�����
�F�
�%��2�	L��1�3J�K�K�F��%��2�	5��M�M�3�4�4�4��%��2�	5��M�M�3�4�4�4��%��2�	.��M�M�,�-�-�-��%��2�	0��M�M�.�/�/�/��%��3�	/��M�M�-�.�.�.��%��3�	8��M�M�6�7�7�7��%��3�	�����
�F�
�%��3�	�����
�F��%��3�	H��0�2F�G�G�F��%��3�	L��1�3J�K�K�F��%��3�	�����
�F�
�%��3�	�����
�F�
�%��3�	4��M�M�2�3�3�3��	8�	8�E����E��*�*�
8�
8������� 6� 6�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8��	8�	8s�7)J,�,J0	�3J0	c��d}tj�d��r
tj}ntj}t
��5}|�tj|��5}tj	|��ddd��n#1swxYwY|j
}|�|j|��|�
|j�d����ddd��dS#1swxYwYdS)N�unable to open database file�winrd)�sys�platform�
startswithrr�rdr�assertRaisesRegexrBr�	exceptionr,�sqlite_errorcoder<�sqlite_errorname)r/�err_msg�err_code�db�cm�es      r�test_error_code_on_exceptionz(ModuleTests.test_error_code_on_exception4sm��0���<�"�"�5�)�)�	.��3�H�H��-�H�
�Z�Z�	N�2��'�'���g�>�>�
#�"���r�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#���A����Q�/��:�:�:��O�O�A�.�9�9�:K�L�L�M�M�M�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N�	N�	Ns7�	!C2�*B�?C2�B	�C2�B	�AC2�2C6�9C6r�zRequires SQLite 3.7.16 or newerc���t��5}|5|�d��ddd��n#1swxYwYd}|�tj|��5}|�d��ddd��n#1swxYwY|j}|�|jtj��|�|j	d��ddd��dS#1swxYwYdS)Nz&create table t(t integer check(t > 0))zconstraint failedzinsert into t values(-1)r�)
r�executerrrRrr,rr�r)r/�con�errmsgr�excs     r�%test_extended_error_code_on_exceptionz1ModuleTests.test_extended_error_code_on_exceptionBs����
�
�		N�#��
F�
F����D�E�E�E�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F�(�F��'�'��(=�v�F�F�
8�"����6�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8��,�C����S�1�#�;�
=�
=�
=����S�1�3L�M�M�M�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N����		N�		N�		N�		N�		N�		NsQ�C"�4�C"�8	�C"�8	�%C"�!B�7C"�B	�C"�
B	�A
C"�"C&�)C&�darwinz#shared cache is deprecated on macOSc���dD]c}|�t��5}tj|��ddd��n#1swxYwY|�d|j���ddS)N)TFzdbapi.py)�assertWarns�DeprecationWarningr�enable_shared_cacher4�filename)r/�enablers   r�test_shared_cache_deprecatedz(ModuleTests.test_shared_cache_deprecatedRs���#�	3�	3�F��!�!�"4�5�5�
3���*�6�2�2�2�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3��M�M�*�b�k�2�2�2�2�	3�	3s�A�A	�A	c��tjd��}t|t|d������t|tj��dS)Nr�select 1)rrr�type�Blob�r/rs  r�test_disallow_instantiationz'ModuleTests.test_disallow_instantiationYsI��
�^�J�
'�
'��$�T�4���:���+?�+?�@�@�@�$�T�6�;�7�7�7�7�7r c��|�tjd����|�tjd����dS)Nzselect tzcreate table t(t);)�assertFalser�complete_statementr<r.s r�test_complete_statementz#ModuleTests.test_complete_statement^sE������2�:�>�>�?�?�?�����1�2F�G�G�H�H�H�H�Hr N)�__name__�
__module__�__qualname__r0r6r:r@rCrFrIrLrOrSrVrYr\rr�unittest�skipIfrr
r%rrr-r3r7�r rr*r*:s�������L�L�L�+�+�+�
,�,�,�
?�?�?�@�@�@�E�E�E�D�D�D�H�H�H�O�O�O�M�M�M�L�L�L�O�O�O�P�P�P�
@8�@8�@8�DN�N�N��X�_�V�/�:�=�6�8�8�
N�
N�8�8�
N��X�_�S�\�X�-�/T�U�U�3�3�V�U�3�8�8�8�
I�I�I�I�Ir r*c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�ConnectionTestsc��tjd��|_|j���}|�d��|�dd��dS)Nrz4create table test(id integer primary key, name text)�!insert into test(name) values (?)��foo)rrr�cursorr!�r/�cus  r�setUpzConnectionTests.setUpesR���.��,�,���
�W�^�^�
�
��
�
�
�I�J�J�J�
�
�
�6��A�A�A�A�Ar c�8�|j���dSr#�r�closer.s r�tearDownzConnectionTests.tearDownk�����
�
�����r c�8�|j���dSr#�r�commitr.s r�test_commitzConnectionTests.test_commitns����������r c�l�	|j���|j���dSr#rNr.s r�test_commit_after_no_changesz,ConnectionTests.test_commit_after_no_changesqs3��	�	
���������������r c�8�|j���dSr#�r�rollbackr.s r�
test_rollbackzConnectionTests.test_rollbackxs����������r c�l�	|j���|j���dSr#rTr.s r�test_rollback_after_no_changesz.ConnectionTests.test_rollback_after_no_changes{s7��	�	
���������������r c�8�|j���}dSr#�rrDrEs  r�test_cursorzConnectionTests.test_cursor�s��
�W�^�^�
�
���r c��d}|�tj��5tj|��ddd��dS#1swxYwYdS)Nz/foo/bar/bla/23534/mydb.db)�assertRaisesrrNr)r/�YOU_CANNOT_OPEN_THISs  r�test_failed_openz ConnectionTests.test_failed_open�s���;��
�
�
�v�6�
7�
7�	1�	1��N�/�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�A�A�Ac�8�|j���dSr#rIr.s r�
test_closezConnectionTests.test_close�rLr c�,�d}|j���}|�|��}|j���|�t
j|j��|�t
j|j|��|�t
j|j|g��|�t
j|j	|��|�t
j|jj|��|�t
j|jj|g��|�t
j|jj	|��|�t
j|jj
ddd���|�t
j|jj��|�t
j��5|j5	ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr/�tr2c��|Sr#r=��xs r�<lambda>z6ConnectionTests.test_use_after_close.<locals>.<lambda>�s��Q�r )rrDr!rJr]rrX�fetchall�executemany�
executescript�create_function)r/�sqlrF�ress    r�test_use_after_closez$ConnectionTests.test_use_after_close�s;����
�W�^�^�
�
���j�j��o�o����
�
�������&�1�3�<�@�@�@����&�1�2�:�s�C�C�C����&�1�2�>�3��K�K�K����&�1�2�3C�S�I�I�I����&�1�4�7�?�C�H�H�H����&�1��'�-�s�B�	8�	8�	8����&�1�4�7�3H�#�N�N�N����&�1��'�1�3��;�;�	H�	H�	H����&�1�4�7�>�B�B�B�
�
�
�v�6�
7�
7�	�	���
�
��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s6�H	�#G1�%H	�1G5	�5H	�8G5	�9H	�	H
�H
c�N�|�|jjtj��|�|jjtj��|�|jjtj��|�|jjtj��|�|jjtj��|�|jjtj��|�|jj	tj	��|�|jj
tj
��|�|jjtj��|�|jjtj��dSr#)
r,rr>rrBrErHrKrNrRrUrXr[r.s r�test_exceptionszConnectionTests.test_exceptions�s0��������&�.�9�9�9���������5�5�5������/��1F�G�G�G������.��0D�E�E�E������*�F�,<�=�=�=������1�6�3J�K�K�K������/��1F�G�G�G������.��0D�E�E�E������1�6�3J�K�K�K������2�F�4L�M�M�M�M�Mr c���tjd��}|���}|�|jd��|�d��|�|jd��|�dd��|�|jd��|�ddg��|���}|�|jd��|���|�|jd��|�ddg��|���}|�|jd��dS)	NrFz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)rBTz-select name from transactiontest where name=?rC)rrrDr,�in_transactionr!�fetchonerO)r/rrF�rows    r�test_in_transactionz#ConnectionTests.test_in_transaction�s7��
�^�J�
'�
'��
�Y�Y�[�[������*�E�2�2�2�
�
�
�T�U�U�U�����*�E�2�2�2�
�
�
�A�8�L�L�L�����*�D�1�1�1�
�
�
�B�U�G�L�L�L��k�k�m�m������*�D�1�1�1�
�	�	��������*�E�2�2�2�
�
�
�B�U�G�L�L�L��k�k�m�m������*�E�2�2�2�2�2r c��|�t��5d|j_ddd��dS#1swxYwYdS)NT)r]�AttributeErrorrrrr.s r�test_in_transaction_roz&ConnectionTests.test_in_transaction_ro�s���
�
�
�~�
.�
.�	*�	*�%)�D�G�"�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	*�	*s�
5�9�9c	�<�gd�}|D]�}|�|���5|�t|j|����|�tt|��t|j|����ddd��n#1swxYwY��dS)N)	rKrHrBrRrEr[rNrXr>)r$)rr<r
r�assertIs�getattrr)r/�
exceptionsr$s   r�test_connection_exceptionsz*ConnectionTests.test_connection_exceptions�s���

�

�

�
��	K�	K�C����#��&�&�
K�
K�������� 5� 5�6�6�6��
�
�g�f�c�2�2�G�D�G�S�4I�4I�J�J�J�
K�
K�
K�
K�
K�
K�
K�
K�
K�
K�
K����
K�
K�
K�
K��	K�	Ks�A%B�B	�B	c���tjd��}|���|�tj��5|���ddd��dS#1swxYwYdSr)rrrJr]rX�	interruptr2s  r�test_interrupt_on_closed_dbz+ConnectionTests.test_interrupt_on_closed_db�s���
�^�J�
'�
'��
���
�
�
�
�
�
�v�6�
7�
7�	�	��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��A*�*A.�1A.c�^�|�|j�����dSr#)�assertIsNonerrr.s r�test_interruptzConnectionTests.test_interrupt�s*�����$�'�+�+�-�-�.�.�.�.�.r c��td��D]M}|j�d|����}|�|���d|���NdS)Ni�zselect r)�rangerr!r,rs)r/�nrFs   r�test_drop_unused_refsz%ConnectionTests.test_drop_unused_refs�s`���s���	2�	2�A������1���/�/�B����R�[�[�]�]�1�-�q�1�1�1�1�	2�	2r c���tj}|j�|��}	d}|j�||��}|�||��|�|j�|��|��d}|�tj||jjd��|j�||��dS#|j�||��wxYw)Nr��query string is too largezselect 1 as '16')	rr�r�getlimitr$r,rrKr!)r/r%�saved_limit�	new_limit�
prev_limit�msgs      r�test_connection_limitsz&ConnectionTests.test_connection_limits�s����1���g�&�&�x�0�0��		4��I���)�)�(�I�>�>�J����[�*�5�5�5����T�W�-�-�h�7�7��C�C�C�-�C��"�"�6�#3�S�#'�7�?�4F�
H�
H�
H�
�G���X�{�3�3�3�3�3��D�G���X�{�3�3�3�3���s�BC�C1c��d}d}|�tj||jj|��|�tj||jj|d��dS)Nz'category' is out of boundsiWr)rrrXrr�r$)r/r��cats   r�"test_connection_bad_limit_categoryz2ConnectionTests.test_connection_bad_limit_category�sj��+�������v�6��#�w�/��	6�	6�	6����v�6��#�w�/��a�	9�	9�	9�	9�	9r c	���d}d}|D]�}|�|���5|�t|��5t|���ddd��n#1swxYwYt��5}|�t|��5||_ddd��n#1swxYwY|�|jd��ddd��n#1swxYwYddd��n#1swxYwY��dS)NzJisolation_level string must be '', 'DEFERRED', 'IMMEDIATE', or 'EXCLUSIVE')�BOGUS� �DEFERRE�IMMEDIAT�EXCLUSIV�	DEFERREDS�
IMMEDIATES�
EXCLUSIVES��level��isolation_level�)rr�
ValueErrorrr�r,)r/r��levelsr�rs     r�(test_connection_init_bad_isolation_levelz8ConnectionTests.test_connection_init_bad_isolation_level�s��
�	�	
���	=�	=�E����E��*�*�
=�
=��+�+�J��<�<�;�;�#�E�:�:�:�:�;�;�;�;�;�;�;�;�;�;�;����;�;�;�;�$�&�&�=�"��/�/�
�C�@�@�3�3�-2��*�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3��$�$�R�%7��<�<�<�	=�=�=�=�=�=�=�=�=�=�=����=�=�=�=�
=�
=�
=�
=�
=�
=�
=�
=�
=�
=�
=����
=�
=�
=�
=��	=�	=s|�C*�A�C*�A�C*�A� C*�1C�
B!	�C�!B%
�%C�(B%
�)C�C*�C�C*�C�C*�*C.	�1C.	c��dD]�}|�|���5t|���5}|�|j|��ddd��n#1swxYwYt��5}|�|jd��||_|�|j|��ddd��n#1swxYwYddd��n#1swxYwY��dS)N)r��DEFERRED�	IMMEDIATE�	EXCLUSIVENr�r�r�)rrr,r�)r/r�rs   r�*test_connection_init_good_isolation_levelsz:ConnectionTests.test_connection_init_good_isolation_levelss���E�	@�	@�E����E��*�*�
@�
@�$�U�;�;�;�@�r��$�$�R�%7��?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@�$�&�&�@�"��$�$�R�%7��<�<�<�).�B�&��$�$�R�%7��?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@��	@�	@sX�C�A�C�A�C�A�C�->B7�+C�7B;�;C�>B;�?C�C	�C	c��d}tj|��}t|_tj|_|���}|�d��|�dd�td��D����|�d��d�|�
d��D��}|�td	�|D������|�
d
�|D��ddg��|�|��|�d��|�dd
�dD����d�|���D��}|�td�|D������|�
d�|D��ddg��dS)Nrzcreate table foo (bar)z insert into foo (bar) values (?)c3�6K�|]}t|��fV��dSr#)�str��.0�vs  r�	<genexpr>z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>$s*����4�4�a��Q���	�4�4�4�4�4�4r �zselect bar from fooc��g|]}|��Sr=r=�r��rs  r�
<listcomp>z:ConnectionTests.test_connection_reinit.<locals>.<listcomp>'s��+�+�+�a��+�+�+r r�c3�JK�|]}t|tj��V��dSr#��
isinstancer�Rowr�s  rr�z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>(�.����D�D�!�J�q�&�*�5�5�D�D�D�D�D�Dr c��g|]
}|d��S�rr=r�s  rr�z:ConnectionTests.test_connection_reinit.<locals>.<listcomp>)���-�-�-�1�!�A�$�-�-�-r �0�1c3�K�|]}|fV��dSr#r=r�s  rr�z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>.s$����;�;����;�;�;�;�;�;r )�a�b�c�dc��g|]}|��Sr=r=r�s  rr�z:ConnectionTests.test_connection_reinit.<locals>.<listcomp>1s��)�)�)�a��)�)�)r c3�JK�|]}t|tj��V��dSr#r�r�s  rr�z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>2r�r c��g|]
}|d��Sr�r=r�s  rr�z:ConnectionTests.test_connection_reinit.<locals>.<listcomp>3r�r �2�3)rr�bytes�text_factoryr��row_factoryrDr!rir��	fetchmanyr<�allr,�__init__rh)r/rrrF�rowss     r�test_connection_reinitz&ConnectionTests.test_connection_reinits���
��
�^�B�
�
���������
�Y�Y�[�[��
�
�
�+�,�,�,�
���9�4�4�5��8�8�4�4�4�	6�	6�	6�
�
�
�(�)�)�)�+�+�2�<�<��?�?�+�+�+������D�D�t�D�D�D�D�D�E�E�E����-�-��-�-�-��d�|�<�<�<�
���B����
�
�
�+�,�,�,�
���9�;�;�&:�;�;�;�	=�	=�	=�*�)�2�;�;�=�=�)�)�)������D�D�t�D�D�D�D�D�E�E�E����-�-��-�-�-��S�z�:�:�:�:�:r c��tjd��}|5|�d��ddd��n#1swxYwYt��5}|�tjd|j|��|�tjd|jdd�td��D����ddd��dS#1swxYwYdS)Nr�create table t(t)r�#Base Connection.__init__ not calledzinsert into t values(?)c3�K�|]}|fV��dSr#r=r�s  rr�z=ConnectionTests.test_connection_bad_reinit.<locals>.<genexpr>@s$����#;�#;�Q�Q�D�#;�#;�#;�#;�#;�#;r r3)
rrr!rrrNr�rXrir�)r/rrs   r�test_connection_bad_reinitz*ConnectionTests.test_connection_bad_reinit5sR��
�^�J�
'�
'��
�	,�	,��J�J�*�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�
�Z�Z�	=�2��"�"�6�#:�#A�#%�;��
4�
4�
4�
�"�"�6�#:�#H�#%�>�3L�#;�#;�%��(�(�#;�#;�#;�
=�
=�
=�		=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=s �9�=�=�A'C�C
�
C
N)r8r9r:rGrKrPrRrVrXr[r_rarnrprurxr}r�r�r�r�r�r�r�r�r�r=r rr?r?csy������B�B�B�������������������1�1�1�
������(N�N�N�3�3�3�$*�*�*�K�K�K�"���/�/�/�2�2�2�
4�4�4�9�9�9�=�=�=�2@�@�@�;�;�;�2=�=�=�=�=r r?c��eZdZd�Zd�ZdS)�UninitialisedConnectionTestsc�b�tj�tj��|_dSr#)r�
Connection�__new__rr.s rrGz"UninitialisedConnectionTests.setUpDs!���#�+�+�F�,=�>�>����r c�����fd��fd��fd��fd��fd��fd�f}|D]Q}��|���5��tjd|��ddd��n#1swxYwY�RdS)	Nc����jjSr#)rr�r.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Is���D�G�+�r c����jjSr#)r�
total_changesr.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Js���D�G�)�r c����jjSr#)rrrr.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Ks���D�G�*�r c�6���j���Sr#)r�iterdumpr.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Ls���D�G�$�$�&�&�r c�6���j���Sr#rZr.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Ms���D�G�N�N�$�$�r c�6���j���Sr#rIr.s�rrgzEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>Ns���D�G�M�M�O�O�r )�funcr�)rrrrX)r/�funcsr�s`  r�test_uninit_operationsz3UninitialisedConnectionTests.test_uninit_operationsGs����+�+�+�+�)�)�)�)�*�*�*�*�&�&�&�&�$�$�$�$�#�#�#�#�

���	-�	-�D����4��(�(�
-�
-��&�&�v�'>�'L�'+�-�-�-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-��	-�	-s�"A$�$A(	�+A(	N)r8r9r:rGr�r=r rr�r�Cs2������?�?�?�
-�
-�
-�
-�
-r r��	serializezNeeds SQLite serialize APIc��eZdZd�Zd�Zd�Zejej	dkd��e
ddd�	��d
�����ZdS)�SerializeTestsc�p�t��5}|5|�d��ddd��n#1swxYwY|���}|�t	|��d��|5|�d��ddd��n#1swxYwYd}|�tj|��5|�d��ddd��n#1swxYwY|�|��|�d��ddd��dS#1swxYwYdS)Nr�i zdrop table tz
no such tablezselect t from t)	rr!r�r,�lenrrrN�deserialize)r/r�data�regexs    r�test_serialize_deserializez)SerializeTests.test_serialize_deserializeZs"��
�
�
�	*�"��
0�
0��
�
�.�/�/�/�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0����
0�
0�
0�
0��<�<�>�>�D����S��Y�Y��-�-�-��
+�
+��
�
�>�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�#�E��'�'��(?��G�G�
.�
.��
�
�,�-�-�-�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.����
.�
.�
.�
.�
�N�N�4� � � ��J�J�(�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	*�	*st�D+�4�D+�8	�D+�8	�<D+�8B�D+�B	�D+�!B	�"%D+�C)�D+�)C-	�-D+�0C-	�1-D+�+D/�2D/c�h�ttd��ddd�ftgftdftdff}|D]v\}}|�||���5t	��5}|�||j|��ddd��n#1swxYwYddd��n#1swxYwY�wdS)Nsblobr�r2)r$�arg)�BufferError�
memoryview�	TypeErrorrrr]r�)r/�datasetr$r�rs     r�test_deserialize_wrong_argsz*SerializeTests.test_deserialize_wrong_argslsb��
�*�W�-�-�c�c��c�2�3�
��O�
��N�
���	
�� �	@�	@�H�C�����#�3��/�/�
@�
@�$�&�&�@�"��%�%�c�2�>�3�?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@��	@�	@s6�B&�&B�B&�B�B&�B�B&�&B*	�-B*	c��t��5}d}|�tj|��5|�d��|�d��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nzfile is not a databaseszcreate table fail(f))rrrrHr�r!)r/rr�s   r�!test_deserialize_corrupt_databasez0SerializeTests.test_deserialize_corrupt_databasexs	��
�
�
�	3�"�,�E��'�'��(<�e�D�D�
3�
3����y�)�)�)��
�
�1�2�2�2�	
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s4�#B�+A)�B�)A-	�-B�0A-	�1B�B�Blzrequires 64bit platformlr3F)�size�memuse�dry_runc���t��5}|�td��5|�dtz��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nz'data' is too large�b)rr�
OverflowErrorr�r�r2s  r�$test_deserialize_too_much_data_64bitz3SerializeTests.test_deserialize_too_much_data_64bit�s����
�
�	,�"��'�'�
�7L�M�M�
,�
,����t�d�{�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�	,�	,s4�A-�A�	A-�A	�A-�A	�A-�-A1�4A1N)r8r9r:r�r�r�r;�
skipUnlessr�maxsizerrr=r rr�r�Ws�������*�*�*�$
@�
@�
@�3�3�3��X����u�,�.G�H�H��Z�U�1�e�4�4�4�,�,�5�4�I�H�,�,�,r r�c��eZdZdZd�Zejejdkd��ejejdkd��eje	pe
d��ejed��d	���������Z
d
�Zd�Zd�Zejejdkd��ejejdkd��eje	pe
d��ejed��d
���������Zd�Zd�ZdS)�	OpenTestszcreate table test(id integer)c���	tt��}|�t|��|�t
j�|����tj	tj|����5}|�t
j�|����|�
|j��ddd��dS#1swxYwYdSr#)rr�
addCleanuprr5�os�path�existsrrrrr<r!�_sql�r/rrs   r�test_open_with_path_like_objectz)OpenTests.test_open_with_path_like_object�s���	4�����������%�%�%���������-�-�.�.�.�
�
���t� 4� 4�
5�
5�	"���O�O�B�G�N�N�4�0�0�1�1�1��J�J�t�y�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�	A
C#�#C'�*C'�win32zskipped on Windowsr&zskipped on macOSz not supported on Emscripten/WASIz)only works if there are undecodable pathsc���t}|�t|��|�tj�|����tjtj
|����5}|�tj�|����|�|j
��ddd��dS#1swxYwYdSr#)rrrr5rrr	rrrrr<r!r
rs   r�test_open_with_undecodable_pathz)OpenTests.test_open_with_undecodable_path�s���
"�������%�%�%���������-�-�.�.�.�
�
���t� 4� 4�
5�
5�	"���O�O�B�G�N�N�4�0�0�1�1�1��J�J�t�y�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�;A
C�C�Cc�0�t}|�t|��dtj�t
j|����z}|�tj	�
|����tjtj|d�����5}|�tj	�
|����|�|j��ddd��dS#1swxYwYdS�N�file:T��uri)rrr�urllib�parse�quoter�fsencoder5rr	rrrrr<r!r
�r/rrrs    r�
test_open_urizOpenTests.test_open_uri�s���������%�%�%����*�*�2�;�t�+<�+<�=�=�=����������-�-�.�.�.�
�
���s�� =� =� =�
>�
>�	"�"��O�O�B�G�N�N�4�0�0�1�1�1��J�J�t�y�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�1A
D�D�Dc���t}|�t|��d|z}|�tj�|����tjtj
|d�����5}|�tj�|����|�|j
��ddd��dS#1swxYwYdSr)rrrr5rrr	rrrrr<r!r
rs    r�test_open_unquoted_uriz OpenTests.test_open_unquoted_uri�s����������%�%�%���n����������-�-�.�.�.�
�
���s�� =� =� =�
>�
>�	"�"��O�O�B�G�N�N�4�0�0�1�1�1��J�J�t�y�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�A
C�C �#C c���t}|�t|��dtj�t
j|����zdz}|�tj	�
|����|�tj
��5tj|d���ddd��n#1swxYwY|�tj	�
|����tj|�����|�tj	�
|����t#jtj|d�����5}|�tj
��5|�|j��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nrz?mode=roTr)rrrrrrrrr5rr	r]rrNrrJr<rrr!r
rs    r�test_open_uri_readonlyz OpenTests.test_open_uri_readonly�sF���������%�%�%����*�*�2�;�t�+<�+<�=�=�=�
�J����������-�-�.�.�.�
�
�
�v�6�
7�
7�	*�	*��N�3�D�)�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*���������-�-�.�.�.���t���"�"�$�$�$��������t�,�,�-�-�-�
�
���s�� =� =� =�
>�
>�	&�"��"�"�6�#:�;�;�
&�
&��
�
�4�9�%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&sH�+C�C�C� G*�+G�G*�G	�G*�G	�G*�*G.�1G.c��t}|�t|��dtj�|��z}|�tj�	|����tjtj
|d�����5}|�tj�	|����|�|j��ddd��dS#1swxYwYdSr)rrrrrrr5rrr	rrrrr<r!r
rs    r�test_open_undecodable_uriz#OpenTests.test_open_undecodable_uri�s��
"�������%�%�%����*�*�4�0�0�0����������-�-�.�.�.�
�
���s�� =� =� =�
>�
>�	"�"��O�O�B�G�N�N�4�0�0�1�1�1��J�J�t�y�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s�A
C9�9C=�C=c�H���fd�}ttjt��tt��ttjt����fD]B}d�t	j||������|��|���CdS)Nc�2��|�tjdg|�Ri|��Sr)rr�)�databaserr�database_args   �r�factoryz4OpenTests.test_factory_database_arg.<locals>.factory�s)���#�L��$�Z�A�$�A�A�A�&�A�A�Ar )r%)rrrrrrrJr,)r/r%r#r$s   @r�test_factory_database_argz#OpenTests.test_factory_database_arg�s����	B�	B�	B�	B�	B�
 ���V�!4�!4�!�&�)�)�8�B�K��4G�4G�+H�+H�J�	5�	5�H��L��N�8�W�5�5�5�;�;�=�=�=����\�8�4�4�4�4�		5�	5r c���tjtjd�����5}|�t|��tj��ddd��dS#1swxYwYdS)Nr)r#)rrrrr,r0r�r2s  r�test_database_keywordzOpenTests.test_database_keyword�s���
�
���
� C� C� C�
D�
D�	:�����T�"�X�X�v�'8�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�	:�	:s�.A#�#A'�*A'N)r8r9r:r
rr;r<rrrrrrrrrrr r&r(r=r rrr�s�������*�D�"�"�"��X�_�S�\�W�,�.B�C�C��X�_�S�\�X�-�/A�B�B��X�_�]�-�g�/Q�R�R��X��+�-X�Y�Y�"�"�Z�Y�S�R�C�B�D�C�"�"�"�"�"�"�"�&�&�&� �X�_�S�\�W�,�.B�C�C��X�_�S�\�X�-�/A�B�B��X�_�]�-�g�/Q�R�R��X��+�-X�Y�Y�"�"�Z�Y�S�R�C�B�D�C�"�
5�
5�
5�:�:�:�:�:r rc��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej e!j"dkd��d���Z#d �Z$d!�Z%d"�Z&d#�Z'd$�Z(d%�Z)d&�Z*d'�Z+d(�Z,d)�Z-d*�Z.d+�Z/d,�Z0d-�Z1d.�Z2d/�Z3d0�Z4d1�Z5d2�Z6d3�Z7d4�Z8d5�Z9d6�Z:d7�Z;d8�Z<d9�Z=d:�Z>d;S)<�CursorTestsc���tjd��|_|j���|_|j�d��|j�dd��dS)Nrz\create table test(id integer primary key, name text, income number, unique_test text unique)rArB�rrrrDrFr!r.s rrGzCursorTests.setUp�sb���.��,�,����'�.�.�"�"�������
6�	
�	
�	
�	
����;�X�F�F�F�F�Fr c�j�|j���|j���dSr#�rFrJrr.s rrKzCursorTests.tearDown��$����
�
������
�
�����r c�:�|j�d��dS)N�delete from test�rFr!r.s r�test_execute_no_argsz CursorTests.test_execute_no_args�s������*�+�+�+�+�+r c��|�tj��5|j�d��ddd��dS#1swxYwYdS)Nzselect asdf)r]rrNrFr!r.s r�test_execute_illegal_sqlz$CursorTests.test_execute_illegal_sql�s���
�
�
�v�6�
7�
7�	+�	+��G�O�O�M�*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+��A�A�Ac��d}d}|D]�}|�|���5|�tj|��5|j�|��ddd��n#1swxYwYddd��n#1swxYwY��dS)Nz,You can only execute one statement at a time)
zselect 1; select 2z)select 1; // c++ comments are not allowedzselect 1; *not a commentzselect 1; -*not a commentzselect 1; /* */ azselect 1; /**/azselect 1; -zselect 1; /zselect 1; -
- select 2zHselect 1;
               -- comment
               select 2
            ��query)rrrrXrFr!)r/r�r�r9s    r� test_execute_multiple_statementsz,CursorTests.test_execute_multiple_statements�s��<��
���	+�	+�E����E��*�*�
+�
+��+�+�F�,C�S�I�I�+�+��G�O�O�E�*�*�*�+�+�+�+�+�+�+�+�+�+�+����+�+�+�+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+��	+�	+s5�!A>�A'�A>�'A+�+A>�.A+�/A>�>B	�B	c��d}|D]J}|�|���5|j�|��ddd��n#1swxYwY�KdS)N)zselect 1; -- foo barzselect 1; --zselect 1; /*zT
            select 5+4;

            /*
            foo
            */
            r8)rrFr!)r/r�r9s   r�#test_execute_with_appended_commentsz/CursorTests.test_execute_with_appended_comments
s���
���	'�	'�E����E��*�*�
'�
'������&�&�&�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'����
'�
'�
'�
'��	'�	's�A�A	�A	c��|�t��5|j�d��ddd��dS#1swxYwYdS�N�*)r]r�rFr!r.s r�test_execute_wrong_sql_argz&CursorTests.test_execute_wrong_sql_args���
�
�
�y�
)�
)�	 �	 ��G�O�O�B����	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 s�A�A�
Ac�<�|j�dd��dS)N�insert into test(id) values (?))r?r2r.s r�test_execute_arg_intz CursorTests.test_execute_arg_int"s������9�5�A�A�A�A�Ar c�<�|j�dd��dS)N�#insert into test(income) values (?))gq=
ף��@r2r.s r�test_execute_arg_floatz"CursorTests.test_execute_arg_float%s������=�z�J�J�J�J�Jr c�<�|j�dd��dS)NrA)�Hugor2r.s r�test_execute_arg_stringz#CursorTests.test_execute_arg_string(s������;�Y�G�G�G�G�Gr c���|j�dd��|j�d|jjf��|j���}|�|dd��dS)NrA)�Hugoz select name from test where id=?rrK)rFr!�	lastrowidrsr,�r/rts  r�&test_execute_arg_string_with_zero_bytez2CursorTests.test_execute_arg_string_with_zero_byte+sk������;�]�K�K�K�����:�T�W�=N�<P�Q�Q�Q��g��� � ������Q���,�,�,�,�,r c��|�tj��5}|j�dd��ddd��n#1swxYwY|�t
|j��d��dS)NrBr?z"parameters are of unsupported type)r]rrXrFr!r,r�r)r/rs  r�test_execute_non_iterablez%CursorTests.test_execute_non_iterable2s���
�
�
�v�6�
7�
7�	C�2��G�O�O�=�r�B�B�B�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�����R�\�*�*�,P�Q�Q�Q�Q�Qs�A�A�Ac��|�tj��5|j�dd��ddd��dS#1swxYwYdS)NrB)r��Egon�r]rrXrFr!r.s r�test_execute_wrong_no_of_args1z*CursorTests.test_execute_wrong_no_of_args17s���
�
�
�v�6�
7�
7�	M�	M��G�O�O�=�|�L�L�L�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M�	M�	Ms�A	�	A
�A
c��|�tj��5|j�d��ddd��dS#1swxYwYdS�NrBrSr.s r�test_execute_wrong_no_of_args2z*CursorTests.test_execute_wrong_no_of_args2<���
�
�
�v�6�
7�
7�	?�	?��G�O�O�=�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?r6c��|�tj��5|j�d��ddd��dS#1swxYwYdSrVrSr.s r�test_execute_wrong_no_of_args3z*CursorTests.test_execute_wrong_no_of_args3ArXr6c���|j�d��|j�ddg��|j���}|�|dd��dS)N�%insert into test(name) values ('foo')�"select name from test where name=?rCr�rFr!rsr,rMs  r�test_execute_param_listz#CursorTests.test_execute_param_listFsc������?�@�@�@�����<�u�g�F�F�F��g��� � ������Q���'�'�'�'�'r c��Gd�d��}|j�d��|j�d|����|j���}|�|dd��dS)Nc��eZdZd�Zd�ZdS)�2CursorTests.test_execute_param_sequence.<locals>.Lc��dS)Nr2r=r.s r�__len__z:CursorTests.test_execute_param_sequence.<locals>.L.__len__Ns���qr c��dS�NrCr=�r/rfs  r�__getitem__z>CursorTests.test_execute_param_sequence.<locals>.L.__getitem__Ps���ur N�r8r9r:rdrhr=r r�LrbMs2������
�
�
�
�
�
�
�
r rjr\r]rrCr^)r/rjrts   r�test_execute_param_sequencez'CursorTests.test_execute_param_sequenceLs���	�	�	�	�	�	�	�	�	
����?�@�@�@�����<�a�a�c�c�B�B�B��g��� � ������Q���'�'�'�'�'r c��Gd�d��}|j�d��|�t��5|j�d|����ddd��dS#1swxYwYdS)Nc��eZdZd�Zd�ZdS)�:CursorTests.test_execute_param_sequence_bad_len.<locals>.Lc��ddzdS)Nr2rr=r.s rrdzBCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__len__\s���!����r c��t�r#)�AssertionError)�slfrfs  rrhzFCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__getitem__^s��$�$r Nrir=r rrjrn[s2������
�
�
�
%�
%�
%�
%�
%r rjr\r])rFr!r]�ZeroDivisionError)r/rjs  r�#test_execute_param_sequence_bad_lenz/CursorTests.test_execute_param_sequence_bad_lenYs���	%�	%�	%�	%�	%�	%�	%�	%�	
����?�@�@�@�
�
�
�0�
1�
1�	G�	G��G�O�O�@�!�!�#�#�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	Gs�$A3�3A7�:A7c�^�tj}d}t|j|d���5|j�dd��|�tj|��5|j�dd��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nztoo many SQL variablesr2)r%r&zselect * from test where id=?�r2z(select * from test where id!=? and id!=?)r2r�)rr�r(rrFr!rrN)r/r%r�s   r�test_execute_too_many_paramsz(CursorTests.test_execute_too_many_paramses-���6��&��
�d�g���
:�
:�
:�	(�	(��G�O�O�;�T�B�B�B��'�'��(?��E�E�
(�
(����� J� &�(�(�(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	(�	(s5�<B"�"B
�>B"�
B	�B"�B	�B"�"B&�)B&c���|j�d��|j�dddi��|j���}|�|dd��dS)Nr\�&select name from test where name=:name�namerCrr^rMs  r�test_execute_dict_mappingz%CursorTests.test_execute_dict_mappingnse������?�@�@�@�����@�6�5�/�R�R�R��g��� � ������Q���'�'�'�'�'r c��Gd�dt��}|j�d��|j�d|����|j���}|�|dd��dS)Nc��eZdZd�ZdS)�8CursorTests.test_execute_dict_mapping_mapping.<locals>.Dc��dSrfr=)r/�keys  r�__missing__zDCursorTests.test_execute_dict_mapping_mapping.<locals>.D.__missing__vs���ur N)r8r9r:r�r=r r�Dr~us#������
�
�
�
�
r r�r\ryrrC)�dictrFr!rsr,)r/r�rts   r�!test_execute_dict_mapping_mappingz-CursorTests.test_execute_dict_mapping_mappingts���	�	�	�	�	��	�	�	�	
����?�@�@�@�����@�!�!�#�#�F�F�F��g��� � ������Q���'�'�'�'�'r c���|j�d��|�tj��5|j�dddi��ddd��dS#1swxYwYdS)Nr\z1select name from test where name=:name and id=:idrzrC�rFr!r]rrXr.s r�)test_execute_dict_mapping_too_little_argsz5CursorTests.test_execute_dict_mapping_too_little_args~s�������?�@�@�@�
�
�
�v�6�
7�
7�	b�	b��G�O�O�O�RX�Z_�Q`�a�a�a�	b�	b�	b�	b�	b�	b�	b�	b�	b�	b�	b�	b����	b�	b�	b�	b�	b�	b��A%�%A)�,A)c���|j�d��|�tj��5|j�d��ddd��dS#1swxYwYdS)Nr\ryr�r.s r�!test_execute_dict_mapping_no_argsz-CursorTests.test_execute_dict_mapping_no_args�s�������?�@�@�@�
�
�
�v�6�
7�
7�	F�	F��G�O�O�D�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�	F�	F��A"�"A&�)A&c���|j�d��|�tj��5|j�dddi��ddd��dS#1swxYwYdS)Nr\r]rzrCr�r.s r�!test_execute_dict_mapping_unnamedz-CursorTests.test_execute_dict_mapping_unnamed�s�������?�@�@�@�
�
�
�v�6�
7�
7�	S�	S��G�O�O�@�6�5�/�R�R�R�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S����	S�	S�	S�	S�	S�	Sr�c�8�|j���dSr#)rFrJr.s rrazCursorTests.test_close�rLr c��|j�d��|j�d��|j�d��|j�d��|�|jjd��dS)Nr1r\zupdate test set name='bar'r��rFr!r,�rowcountr.s r�test_rowcount_executez!CursorTests.test_rowcount_execute�sw������*�+�+�+�����?�@�@�@�����?�@�@�@�����4�5�5�5������)�1�-�-�-�-�-r c�|�	|j�d��|�|jjd��dS)Nzselect 5 union select 6���r�r.s r�test_rowcount_selectz CursorTests.test_rowcount_select�s?��	�
	
����1�2�2�2������)�2�.�.�.�.�.r c��|j�d��|j�dgd���|�|jjd��dS)Nr1rA�rv)r��r3r3)rFr!rir,r�r.s r�test_rowcount_executemanyz%CursorTests.test_rowcount_executemany�sX������*�+�+�+�����?�AS�AS�AS�T�T�T������)�1�-�-�-�-�-r )r3�#rzRequires SQLite 3.35.0 or newerc���|j�d��|�|j���dd��|�|jjd��dS)Nz7update test set name='bar' where name='foo' returning 1rr2)rFr!r,rsr�r.s r�test_rowcount_update_returningz*CursorTests.test_rowcount_update_returning�sc��	
����Q�R�R�R������)�)�+�+�A�.��2�2�2������)�1�-�-�-�-�-r c�b�|j�d��|�|jjd��|j�d��|�|jjd��|j�d��|�|jjd��dS)NzW
            -- foo
            insert into test(name) values ('foo'), ('foo')
        r�z�
            /* -- messy *r /* /* ** *- *--
            */
            /* one more */ insert into test(name) values ('messy')
        r2z5/* bar */ update test set name='bar' where name='foo'r3r�r.s r�#test_rowcount_prefixed_with_commentz/CursorTests.test_rowcount_prefixed_with_comment�s��������	
�	
�	
�	
�����)�1�-�-�-������	
�	
�	
�
	
�����)�1�-�-�-�����O�P�P�P������)�1�-�-�-�-�-r c�&�d}|j�d|��|�|jjd��|j���|j�d��|�|jjd��dS)Nr�z"insert into test(income) values(?)r3�vacuumr�)rFrir,r�rrOr!)r/r�s  r�test_rowcount_vaccuumz!CursorTests.test_rowcount_vaccuum�s���!������@�$�G�G�G������)�1�-�-�-�������������!�!�!������)�2�.�.�.�.�.r c��|j�d��|j�d��|�d|jjd���dS)Nr\r�z"total changes reported wrong value)r�)rFr!�
assertLessrr�r.s r�test_total_changeszCursorTests.test_total_changes�sP������?�@�@�@�����?�@�@�@�����4�7�0�6Z��[�[�[�[�[r c�l�|j�dd�tdd��D����dS)NrEc��g|]}|f��Sr=r=)r�rfs  rr�z:CursorTests.test_execute_many_sequence.<locals>.<listcomp>�s��Cb�Cb�Cb�Q�Q�D�Cb�Cb�Cbr �d�n)rFrir�r.s r�test_execute_many_sequencez&CursorTests.test_execute_many_sequence�s=������A�Cb�Cb�RW�X[�]`�Ra�Ra�Cb�Cb�Cb�c�c�c�c�cr c�f�Gd�d��}|j�d|����dS)Nc� �eZdZd�Zd�Zd�ZdS)�6CursorTests.test_execute_many_iterator.<locals>.MyIterc��d|_dS�N�)�valuer.s rr�z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__init__�s
����
�
�
r c��|Sr#r=r.s r�__iter__z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__iter__�s���r c�V�|jdkrt�|xjdz
c_|jfS)Nr�r2)r��
StopIterationr.s r�__next__z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__next__�s0���:��#�)�'�'��J�J�!�O�J�J� �J�=�(r N)r8r9r:r�r�r�r=r r�MyIterr��sA������
�
�
�
�
�
�
)�
)�
)�
)�
)r r�rE�rFri)r/r�s  r�test_execute_many_iteratorz&CursorTests.test_execute_many_iterator�sQ��	)�	)�	)�	)�	)�	)�	)�	)�	
����A�6�6�8�8�L�L�L�L�Lr c�R�d�}|j�d|����dS)Nc3�8K�td��D]}|fV��dSr�)r�)�is r�mygenz6CursorTests.test_execute_many_generator.<locals>.mygen�s2�����1�X�X�
�
���d�
�
�
�
�
�
r rEr�)r/r�s  r�test_execute_many_generatorz'CursorTests.test_execute_many_generator�s8��	�	�	�	
����A�5�5�7�7�K�K�K�K�Kr c��|�t��5|j�ddg��ddd��dS#1swxYwYdS)Nr?r��r]r�rFrir.s r�test_execute_many_wrong_sql_argz+CursorTests.test_execute_many_wrong_sql_arg�s���
�
�
�y�
)�
)�	,�	,��G����T�F�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�	,�	,s�A�A	�A	c��|�tj��5|j�ddg��ddd��dS#1swxYwYdS)Nzselect ?r�)r]rrXrFrir.s r�test_execute_many_selectz$CursorTests.test_execute_many_select�s���
�
�
�v�6�
7�
7�	4�	4��G���
�T�F�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�A
�
A�Ac��|�t��5|j�dd��ddd��dS#1swxYwYdS)NrEr?r�r.s r�test_execute_many_not_iterablez*CursorTests.test_execute_many_not_iterable�s���
�
�
�y�
)�
)�	K�	K��G��� E�r�J�J�J�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K�	K�	Ks�A�A�Ac��|j�d��|j�dd��|j�dd��|j�d��g}|jD]}|�|d���|�|dd��|�|dd	��dS)
Nr1rB)r�)�zselect id from test order by idrr�r2r�)rFr!rr,)r/�lstrts   r�test_fetch_iterzCursorTests.test_fetch_iter�s�������*�+�+�+�����9�4�@�@�@�����9�4�@�@�@�����9�:�:�:����7�	�	�C��J�J�s�1�v���������Q���#�#�#�����Q���#�#�#�#�#r c��|j�d��|j���}|�|dd��|j���}|�|d��dS)N�select name from testrrCr^rMs  r�
test_fetchonezCursorTests.test_fetchoness������/�0�0�0��g��� � ������Q���'�'�'��g��� � ������d�#�#�#�#�#r c��|j���}|���}|�|d��dSr#)rrDrsr,)r/�currts   r�test_fetchone_no_statementz&CursorTests.test_fetchone_no_statements<���g�n�n�����l�l�n�n������d�#�#�#�#�#r c���|�|jjd��d|j_|j�d��|j�d��|j�d��|j�d��|j�d��|j���}|�t|��d��dS)Nr2r�r1z#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')r�)r,rF�	arraysizer!r�r��r/rms  r�test_array_sizezCursorTests.test_array_size
s��������*�A�.�.�.�����	
����*�+�+�+�����=�>�>�>�����=�>�>�>�����=�>�>�>�����/�0�0�0��g���!�!������S���1�%�%�%�%�%r c��|j�d��|j�d��}|�t	|��d��|j�d��}|�|g��dS)Nr�r�r2�rFr!r�r,r�r�s  r�test_fetchmanyzCursorTests.test_fetchmanysy������/�0�0�0��g����$�$������S���1�%�%�%��g����$�$������b�!�!�!�!�!r c��	|j�d��|j�d���}|�t	|��d��dS)Nr�r�)r�r2r�r�s  r�test_fetchmany_kw_argz!CursorTests.test_fetchmany_kw_arg%sT��>�����/�0�0�0��g���S��)�)������S���1�%�%�%�%�%r c��|j�d��|j���}|�t	|��d��|j���}|�|g��dS)Nr�r2)rFr!rhr,r�r�s  r�
test_fetchallzCursorTests.test_fetchall+su������/�0�0�0��g��� � ������S���1�%�%�%��g��� � ������b�!�!�!�!�!r c�>�|j�gd���dS)N)r3r�r�)rF�
setinputsizesr.s r�test_setinputsizeszCursorTests.test_setinputsizes2s"������i�i�i�(�(�(�(�(r c�<�|j�dd��dS)Nr�r�rF�
setoutputsizer.s r�test_setoutputsizezCursorTests.test_setoutputsize5s ������a��#�#�#�#�#r c�:�|j�d��dSr>r�r.s r�test_setoutputsize_no_columnz(CursorTests.test_setoutputsize_no_column8s������b�!�!�!�!�!r c�P�|�|jj|j��dSr#)r,rF�
connectionrr.s r�test_cursor_connectionz"CursorTests.test_cursor_connection;s%�������+�T�W�5�5�5�5�5r c��|�t��5d�}|j�|��}ddd��dS#1swxYwYdS)Nc��dSr#r=r=r r�fz1CursorTests.test_wrong_cursor_callable.<locals>.fA����r )r]r�rrD)r/r�r�s   r�test_wrong_cursor_callablez&CursorTests.test_wrong_cursor_callable?s���
�
�
�y�
)�
)�	$�	$��M�M��'�.�.��#�#�C�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�A�A
�
A
c���Gd�d��}|��}|�t��5tj|��}ddd��dS#1swxYwYdS)Nc��eZdZdS)�0CursorTests.test_cursor_wrong_class.<locals>.FooN�r8r9r:r=r r�Foor�Es�������r r�)r]r�r�Cursor)r/r�rCr�s    r�test_cursor_wrong_classz#CursorTests.test_cursor_wrong_classDs������������c�e�e��
�
�
�y�
)�
)�	%�	%��-��$�$�C�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	%�	%s�A�A�Ac��	d}dD]~}|�|���5|j�|�|��d��|�|jjd��ddd��n#1swxYwY�dS)Nz+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACE�REPLACE��	statement)r2rCr2)rrFr!�formatr,rL)r/rlr�s   r�test_last_row_id_on_replacez'CursorTests.test_last_row_id_on_replaceJs���	�<��9�	7�	7�I����	��2�2�
7�
7������
�
�9� 5� 5�z�B�B�B�� � ���!2�A�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7��	7�	7s�AA9�9A=	�A=	c���|j�dd��|�|jjd��|j�dd��|�|jjd��dS)Nz2insert or ignore into test(unique_test) values (?))�testr�)rFr!r,rLr.s r�test_last_row_id_on_ignorez&CursorTests.test_last_row_id_on_ignoreTs~������@��	�	�	�	
�����*�A�.�.�.�����@��	�	�	�	
�����*�A�.�.�.�.�.r c��g}dD�]}d}|�d�|�����5|j�|�|��|f��|�||jjf��|�tj��5|j�|�|��|f��ddd��n#1swxYwY|�||jjf��ddd��n#1swxYwY��gd�}|�	||��dS)N)�FAIL�ABORT�ROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {}r�)�r�r�r��r�r3r�r�r�r)
rr�rFr!rrLr]rrRr,)r/�resultsr�rl�expecteds     r�test_last_row_id_insert_o_rz'CursorTests.test_last_row_id_insert_o_r^s�����6�	?�	?�I�B�C�����(=�(=�i�(H�(H��I�I�
?�
?������
�
�9� 5� 5�	�|�D�D�D����	�4�7�+<�=�>�>�>��&�&�v�'<�=�=�I�I��G�O�O�C�J�J�y�$9�$9�I�<�H�H�H�I�I�I�I�I�I�I�I�I�I�I����I�I�I�I����	�4�7�+<�=�>�>�>�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?����
?�
?�
?�
?��
�
�
��
	
����(�+�+�+�+�+s6�A0D�#0C�D�C#�#D�&C#�'$D�D	�D	c�(�d}|j�|��}t|j��}|j�d��|j�|��}t|j��}|�||z
d��dS)Nzselect * from testzalter table test add newcolr2)rFr!r��descriptionr,)r/�selectrm�	old_count�	new_counts     r�test_column_countzCursorTests.test_column_countos���%���g�o�o�f�%�%�����(�(�	�����5�6�6�6��g�o�o�f�%�%�����(�(�	�����Y�.��2�2�2�2�2r c����fd�td��D��}|D]+}��|���dg���,dS)Nc�D��g|]}�j�d����S)r/)rr!)r��_r/s  �rr�zCCursorTests.test_same_query_in_multiple_cursors.<locals>.<listcomp>{s'���A�A�A�1�4�7�?�?�:�.�.�A�A�Ar r3rv)r�r,rh)r/�cursorsrFs`  r�#test_same_query_in_multiple_cursorsz/CursorTests.test_same_query_in_multiple_cursorszs^���A�A�A�A��a���A�A�A���	4�	4�B����R�[�[�]�]�T�F�3�3�3�3�	4�	4r N)?r8r9r:rGrKr3r5r:r<r@rCrFrIrNrPrTrWrZr_rkrtrwr{r�r�r�r�rar�r�r�r;r<rr
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�rr
rr=r rr*r*�s�������G�G�G����,�,�,�+�+�+�+�+�+�,'�'�'�" � � �B�B�B�K�K�K�H�H�H�-�-�-�R�R�R�
M�M�M�
?�?�?�
?�?�?�
(�(�(�(�(�(�
G�
G�
G�(�(�(�(�(�(�(�(�(�b�b�b�
F�F�F�
S�S�S�
���.�.�.�/�/�/�.�.�.�
�X�_�V�/�*�<�6�8�8�.�.�8�8�.�.�.�.� /�/�/�\�\�\�d�d�d�M�M�M�"L�L�L�,�,�,�4�4�4�K�K�K�
$�
$�
$�$�$�$�$�$�$�
&�&�&�""�"�"�&�&�&�"�"�"�)�)�)�$�$�$�"�"�"�6�6�6�$�$�$�
%�%�%�7�7�7�/�/�/�,�,�,�"	3�	3�	3�4�4�4�4�4r r*c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(S))�	BlobTestsc��tjd��|_|j�d��d|_|j�d|jf��|j�ddd��|_dS)Nr�create table test(b blob)s2this blob data string is exactly fifty bytes long!zinsert into test(b) values (?)r�r�r2)rrrr!r��blobopen�blobr.s rrGzBlobTests.setUp�si���.��,�,�������3�4�4�4�I��	�����8�4�9�,�G�G�G��G�$�$�V�S�!�4�4��	�	�	r c�j�|j���|j���dSr#)rrJrr.s rrKzBlobTests.tearDown�s'���	��������
�
�����r c�P�|�|jtj��dSr#)�assertIsInstancerrr1r.s r�test_blob_is_a_blobzBlobTests.test_blob_is_a_blob�s"�����d�i���5�5�5�5�5r c�b�|j�d��|�|j���d��|j�dt��|�|j���d��|j�dt
��|�|j���d��|j�dt��|�|j���d��dS)Nr������()r�seekr,�tellrr
rr.s r�test_blob_seek_and_tellz!BlobTests.test_blob_seek_and_tell�s����	���r�����������)�)�2�.�.�.��	���r�8�$�$�$��������)�)�2�.�.�.��	���r�8�$�$�$��������)�)�2�.�.�.��	���s�H�%�%�%��������)�)�2�.�.�.�.�.r c���d}d}d}t|�fd�ft|�fd�ft|�fd�ft|�fd�ff}|D]M\}}}��|||���5��|||��ddd��n#1swxYwY�N�j�d	t
����t|��5�j�tt��ddd��n#1swxYwY��t|��5�j�tt��ddd��dS#1swxYwYdS)
Nzoffset out of blob rangez;'origin' should be os.SEEK_SET, os.SEEK_CUR, or os.SEEK_ENDzseek offset results in overflowc�8���j�d��S)N���rrr.s�rrgz0BlobTests.test_blob_seek_error.<locals>.<lambda>�s���$�)�.�.��*>�*>�r c�8���j�d��S)Nrr$r.s�rrgz0BlobTests.test_blob_seek_error.<locals>.<lambda>�s���$�)�.�.��*=�*=�r c�:���j�dd��S)Nr�r�r$r.s�rrgz0BlobTests.test_blob_seek_error.<locals>.<lambda>�s���4�9�>�>�"�b�+A�+A�r c�:���j�dd��S)Nr�r3r$r.s�rrgz0BlobTests.test_blob_seek_error.<locals>.<lambda>�s���4�9�>�>�"�a�+@�+@�r )r$r��fnr2)
r�rrrrrr�r
r
r)r/�msg_oor�msg_orig�msg_ofr�r$r�r(s`       r�test_blob_seek_errorzBlobTests.test_blob_seek_error�s1���,��P��2����">�">�">�">�?�
��"=�"=�"=�"=�>�
��#A�#A�#A�#A�B�
��#@�#@�#@�#@�A�	
��$�	5�	5�L�C��b����#�3�2��6�6�
5�
5��&�&�s�C��4�4�4�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5��	
�	���q�(�#�#�#�
�
#�
#�M�6�
:�
:�	.�	.��I�N�N�7�H�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�
�
#�
#�M�6�
:�
:�	.�	.��I�N�N�7�H�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s6�A>�>B	�B	�&C7�7C;�>C;�&E�E�Ec�n�|j���}|�||j��dSr#)r�readr,r��r/�bufs  r�test_blob_readzBlobTests.test_blob_read�s1���i�n�n��������d�i�(�(�(�(�(r c��|j�t|j��dz��}|�||j��dS)Nr�)rr.r�r�r,r/s  r�test_blob_read_oversizedz"BlobTests.test_blob_read_oversized�s@���i�n�n�S���^�^�a�/�0�0������d�i�(�(�(�(�(r c���d}|j�|��}|�||jd|���|�|j���|��dS)Nr�)rr.r,r�r)r/r�r0s   r�test_blob_read_advance_offsetz'BlobTests.test_blob_read_advance_offset�sb�����i�n�n�Q��������d�i����m�,�,�,��������)�)�1�-�-�-�-�-r c��|j�d��|�|j�d��|jdd���dS)Nr�r)rrr,r.r�r.s r�test_blob_read_at_offsetz"BlobTests.test_blob_read_at_offset�sK���	���r������������+�+�T�Y�r�"�u�-=�>�>�>�>�>r c���|j�d��|�tj��5|j���ddd��dS#1swxYwYdS)N�&update test set b='aaaa' where rowid=1)rr!r]rrNrr.r.s r� test_blob_read_error_row_changedz*BlobTests.test_blob_read_error_row_changed�s�������@�A�A�A�
�
�
�v�6�
7�
7�	�	��I�N�N����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�A!�!A%�(A%c���d�d��}|j�|��|j�d�����}|�|d|��dS)Nsnew data�2�select b from testr)�ljustr�writerr!rsr,�r/�new_datarts   r�test_blob_writezBlobTests.test_blob_write�si���$�$�R�(�(���	����!�!�!��g�o�o�2�3�3�<�<�>�>������Q���*�*�*�*�*r c�"�d}|j�d��|j�|��|j�d�����}|�|d|jdd�|z��dS)Nscccccccccccccccccccccccccr�r=r)rrr?rr!rsr,r�r@s   r�test_blob_write_at_offsetz#BlobTests.test_blob_write_at_offset�s~�����	���r�����	����!�!�!��g�o�o�2�3�3�<�<�>�>������Q����3�B�3��(�!:�;�;�;�;�;r c��|j�d��|�|j���d��dS)Ns
ddddddddddr�)rr?r,rr.s r�test_blob_write_advance_offsetz(BlobTests.test_blob_write_advance_offset�s>���	���� � � ��������)�)�2�.�.�.�.�.r c��|�td��5|j�d��ddd��n#1swxYwY|j�dt
��t
|j��}|j�d|dz
z��|j�d��|�td��5|j�d��ddd��dS#1swxYwYdS)Nzdata longer than blob��aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar�ar2)rr�rr?rrr�)r/r�s  r�test_blob_write_error_lengthz&BlobTests.test_blob_write_error_length�sf��
�
#�
#�J�0G�
H�
H�	)�	)��I�O�O�K�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�	
�	���q�(�#�#�#���	�N�N���	�����!���%�%�%��	�������
�
#�
#�J�0G�
H�
H�	"�	"��I�O�O�D�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s#�A�A�
A�C?�?D�Dc���|j�d��|�tj��5|j�d��ddd��dS#1swxYwYdS)Nr9�aaa)rr!r]rrNrr?r.s r�!test_blob_write_error_row_changedz+BlobTests.test_blob_write_error_row_changed�s�������@�A�A�A�
�
�
�v�6�
7�
7�	$�	$��I�O�O�F�#�#�#�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$r�c��|j�dddd���}|�tjd��5|�d��ddd��n#1swxYwY|���dS)Nr�r�r2T)�readonlyrOrL)rrrrrNr?rJ)r/�ro_blobs  r�test_blob_write_error_readonlyz(BlobTests.test_blob_write_error_readonly�s����'�"�"�6�3��D�"�A�A��
�
#�
#�F�$;�Z�
H�
H�	"�	"��M�M�&�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"��
�
�����s�A!�!A%�(A%c�,�dddifdifdifdiff}d}|D]~\}}|�||���5|�tj|��5|jj|i|��ddd��n#1swxYwYddd��n#1swxYwY�dS)	N)r�r�r2rz�notexisting)rSr�r2)r�rSr2)r�r�r�zno such)r�kwds)rrrrNrr)r/r�r�rrTs     r�test_blob_open_errorzBlobTests.test_blob_open_error�sF��
��
�6�7�
$�b�)�
'��,�
�r�"�	
����!�	4�	4�J�D�$����4�d��3�3�
4�
4��+�+�F�,C�U�K�K�4�4�$�D�G�$�d�3�d�3�3�3�4�4�4�4�4�4�4�4�4�4�4����4�4�4�4�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4�
4����
4�
4�
4�
4��	4�	4s5�!B�A1�%B�1A5�5B�8A5�9B�B	�B	c�V�|�t|j��d��dS)Nr<)r,r�rr.s r�test_blob_lengthzBlobTests.test_blob_length�s&������T�Y����,�,�,�,�,r c���|�|jdtd����|�|jdtd����|�|jdtd����|�|jdtd����|�|jdtd	����dS)
Nr�r�r��lr��or�r��!)r,r�ordr.s r�test_blob_get_itemzBlobTests.test_blob_get_items��������1��s�3�x�x�0�0�0������1��s�3�x�x�0�0�0������1��s�3�x�x�0�0�0������1��s�3�x�x�0�0�0������2���C���1�1�1�1�1r c���td��|jd<d|jdd�z}|j�d�����d}|�||��dS)Nr�rr�r2r=)r\rr�rr!rsr,�r/r�actuals   r�test_blob_set_itemzBlobTests.test_blob_set_itemsh���3�x�x��	�!���$�)�A�B�B�-�'������!5�6�6�?�?�A�A�!�D�������*�*�*�*�*r c��|j�dt��|�|j���d��td��|jd<td��|jd<|j�dt��d}|�|j���|��dS)Nrr �T�.r�s2This blob data string is exactly fifty bytes long.)rrrr,r.r\r)r/rs  r�test_blob_set_item_with_offsetz(BlobTests.test_blob_set_item_with_offset
s����	���q�(�#�#�#��������)�)�3�/�/�/��3�x�x��	�!���C����	�"�
��	���q�(�#�#�#�H���������)�)�8�4�4�4�4�4r c�x�ddlm}td��|jdd�<|�|jdd�d��t	d��|jdd�<|�|jdd�d��|dgd���|jdd�<|�|jdd�d��dS)	Nr)�array�12345r�s23456r�)r2r�r3r�r�s)rgr�rr,�	bytearray)r/rgs  r�!test_blob_set_slice_buffer_objectz+BlobTests.test_blob_set_slice_buffer_objects���������#�H�-�-��	�!�A�#�������1�Q�3���2�2�2�"�8�,�,��	�!�A�#�������1�Q�3���2�2�2���s�O�O�O�4�4��	�!�A�#�������1�Q�3��)@�A�A�A�A�Ar c�\�d|jd<|�|jdd��dS)N�r�)rr,r.s r�!test_blob_set_item_negative_indexz+BlobTests.test_blob_set_item_negative_index!s/����	�"�
������2���,�,�,�,�,r c�L�|�|jdd�d��dS)Nr�r�s	blob data�r,rr.s r�test_blob_get_slicezBlobTests.test_blob_get_slice%s(�������1�R�4��,�7�7�7�7�7r c�L�|�|jdd�d��dS)Nr�r ror.s r�test_blob_get_empty_slicez#BlobTests.test_blob_get_empty_slice(s(�������1�Q�3���-�-�-�-�-r c�f�|�|jdd�|jdd���dS)Nr����)r,rr�r.s r�"test_blob_get_slice_negative_indexz,BlobTests.test_blob_get_slice_negative_index+s2�������1�R�4��$�)�A�b�D�/�:�:�:�:�:r c�N�|�|jddd�d��dS)Nrr�r�sti lbror.s r�test_blob_get_slice_with_skipz'BlobTests.test_blob_get_slice_with_skip.s+�������1�R��6�*�H�5�5�5�5�5r c���d|jdd�<d|jdd�z}|j�d�����d}|�||��dS)Nrhrr�r=)rr�rr!rsr,r_s   r�test_blob_set_slicezBlobTests.test_blob_set_slice1sf��!��	�!�A�#���d�i����m�+������!5�6�6�?�?�A�A�!�D�������*�*�*�*�*r c�n�d|jdd�<|�|jdd�|j��dS)Nr r)rr,r�r.s r�test_blob_set_empty_slicez#BlobTests.test_blob_set_empty_slice7s9����	�!�A�#�������1�1�1��t�y�1�1�1�1�1r c���d|jddd�<|j�d�����d}d|jdd�z}|�||��dS)Nrhrr�r�r=s
1h2s3b4o5 )rrr!rsr�r,)r/r`rs   r�test_blob_set_slice_with_skipz'BlobTests.test_blob_set_slice_with_skip;si��$��	�!�B�q�&������!5�6�6�?�?�A�A�!�D�� �4�9�R�S�S�>�1�������*�*�*�*�*r c��d}|�t|��5|jdd�ddd��n#1swxYwY|�t|��5|jdddd��n#1swxYwY|�t|��5d|jd<ddd��dS#1swxYwYdS)Nzindices must be integersr�g@g�?r�r��rr�r)r/r�s  r�$test_blob_mapping_invalid_index_typez.BlobTests.test_blob_mapping_invalid_index_typeAs~��(��
�
#�
#�I�s�
3�
3�	�	��I�a��e���	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
#�
#�I�s�
3�
3�	�	��I�c�N�N�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
#�
#�I�s�
3�
3�	"�	"�!�D�I�c�N�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s1�:�>�>� A:�:A>�A>� B8�8B<�?B<c�b�t|j��ddg}|D]p}|�|���5|�td��5|j|ddd��n#1swxYwYddd��n#1swxYwY�q|�td��5|jt
ddd��n#1swxYwY|j�d��|�tj
��5|jdddd��dS#1swxYwYdS)N�ii����)�idxzindex out of rangezcannot fit 'int'r9r)r�rrr�
IndexErrorrrr!r]rrN)r/r�r�s   r�test_blob_get_item_errorz"BlobTests.test_blob_get_item_errorJs���t�y�>�>�3��-���	#�	#�C����#��&�&�
#�
#��+�+�J�8L�M�M�#�#��I�c�N�N�#�#�#�#�#�#�#�#�#�#�#����#�#�#�#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#���
#�
#�J�0B�
C�
C�	"�	"��I�j�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	
����@�A�A�A�
�
�
�v�6�
7�
7�	�	��I�a�L�L�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	sY�A?�A(�A?�(A,�,A?�/A,�0A?�?B	�B	�&C�C	�C	�	D$�$D(�+D(c���|�td��5d|jd<ddd��n#1swxYwY|�td��5d|jd<ddd��n#1swxYwY|�td��5td��|jd<ddd��n#1swxYwY|�td��5|jd=ddd��n#1swxYwY|�td��5d|jd<ddd��n#1swxYwY|�t
d��5d	|jd<ddd��n#1swxYwY|�t
d��5d
|jd<ddd��n#1swxYwY|�t
d��5ddz|jd<ddd��dS#1swxYwYdS)
Nzcannot be interpretedsmultiplerr��doesn't support.*deletionzBlob index out of ranger#zmust be in ranger��r��A)rr�rrir�r�r.s r�test_blob_set_item_errorz"BlobTests.test_blob_set_item_errorXs���
�
#�
#�I�/F�
G�
G�	'�	'�&�D�I�a�L�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'����	'�	'�	'�	'�
�
#�
#�I�/F�
G�
G�	 �	 ��D�I�a�L�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �
�
#�
#�I�/F�
G�
G�	+�	+�$�T�?�?�D�I�a�L�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�
�
#�
#�I�/J�
K�
K�	�	��	�!��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
#�
#�J�0I�
J�
J�	 �	 ��D�I�d�O�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �
�
#�
#�J�0B�
C�
C�	�	��D�I�a�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
#�
#�J�0B�
C�
C�	�	��D�I�a�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
#�
#�J�0B�
C�
C�	!�	!��b�5�D�I�a�L�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s��3�7�7�A0�0A4�7A4�B:�:B>�B>� 	C5�5C9�<C9�D2�2D6�9D6�E/�/E3�6E3�F,�,F0�3F0�G-�-G1�4G1c��|�td��5d|jdd�<ddd��n#1swxYwY|�td��5d|jdd�<ddd��n#1swxYwY|�td��5|jdd�=ddd��n#1swxYwY|�td��5d|jddd	�<ddd��n#1swxYwY|�t��5td
��ddd�|jdd�<ddd��dS#1swxYwYdS)Nz
wrong sizerIr�r�rHr�zstep cannot be zerorhrsabcder�)rr�rr�r�r]r�r�r.s r�test_blob_set_slice_errorz#BlobTests.test_blob_set_slice_errorks���
�
#�
#�J��
=�
=�	#�	#�"�D�I�a��d�O�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�
�
#�
#�J��
=�
=�	*�	*�)�D�I�a��d�O�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�
�
#�
#�I�/J�
K�
K�	 �	 ��	�!�B�$��	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �
�
#�
#�J�0E�
F�
F�	)�	)� (�D�I�a��1�f��	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�
�
�
�{�
+�
+�	8�	8�(��2�2�3�3�Q�3�7�D�I�a��d�O�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8sT�
5�9�9�
A4�4A8�;A8�B1�1B5�8B5�C1�1C5�8C5�#E�E
�
E
c�~�|�td��5|j|jzddd��n#1swxYwY|�td��5|jdzddd��n#1swxYwY|�td��5d|jvddd��dS#1swxYwYdS)Nzunsupported operandr�zis not iterablerIrr.s r� test_blob_sequence_not_supportedz*BlobTests.test_blob_sequence_not_supportedws|��
�
#�
#�I�/D�
E�
E�	"�	"��I��	�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�
�
#�
#�I�/D�
E�
E�	�	��I��M�M�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
#�
#�I�/@�
A�
A�	�	��D�I���	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s0�8�<�<�A5�5A9�<A9�
B2�2B6�9B6c���d}|j�ddd��5}|�|��ddd��n#1swxYwY|j�d�����d}|�||��|�tjd��5|�	��ddd��dS#1swxYwYdS)Ns2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar�r�r2r=rzclosed blob)
rrr?r!rsr,rrrXr.)r/r�rr`s    r�test_blob_context_managerz#BlobTests.test_blob_context_managersL����
�W�
�
�f�c�1�
-�
-�	���J�J�t����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�����!5�6�6�?�?�A�A�!�D�������&�&�&��
#�
#�F�$;�]�
K�
K�	�	��I�I�K�K�K�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s#�A�A�A�4C�C�Cc���Gd�dt��}|�|d��5|j�ddd��5}|d���#1swxYwY	ddd��dS#1swxYwYdS)Nc��eZdZdS)�NBlobTests.test_blob_context_manager_reraise_exceptions.<locals>.DummyExceptionNr�r=r r�DummyExceptionr��s�������Dr r��reraisedr�r�r2)r?rrr)r/r�rs   r�,test_blob_context_manager_reraise_exceptionsz6BlobTests.test_blob_context_manager_reraise_exceptions�s��	�	�	�	�	�Y�	�	�	�
�
#�
#�N�J�
?�
?�	1�	1���!�!�&�#�q�1�1�
1�T�$�n�Z�0�0�0�
1�
1�
1�
1����
1�
1�
1�
1�
1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s/�A,�A�A	�A,�A	�A,�,A0�3A0c��t��5}|�d��|�d��|�ddd��}|���d}|�t
j|��5|���ddd��n#1swxYwY|�t
j|��5|�d��ddd��n#1swxYwY|�t
j|��5|�	d��ddd��n#1swxYwY|�t
j|��5|�
��ddd��n#1swxYwY|�t
j|��5|���ddd��n#1swxYwY|�t
j|��5|�ddd��ddd��n#1swxYwY|�t
j|��5t|��ddd��n#1swxYwY|�t
j|��5|dddd��n#1swxYwY|�t
j|��5|dd�ddd��n#1swxYwY|�t
j|��5d|d<ddd��n#1swxYwYddd��dS#1swxYwYdS)	Nrz'insert into test values (zeroblob(100))r�r�r2zCannot operate on a closed blobr r)rr!rrJrrrXr.r?rr�	__enter__�__exit__r�)r/rrr�s    r�test_blob_closedzBlobTests.test_blob_closed�s���
�
�
�	�"��J�J�2�3�3�3��J�J�@�A�A�A��;�;�v�s�A�.�.�D��J�J�L�L�L�3�C��'�'��(?��E�E�
�
��	�	����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
 �
 ��
�
�3����
 �
 �
 �
 �
 �
 �
 �
 �
 �
 �
 ����
 �
 �
 �
 ��'�'��(?��E�E�
�
��	�	�!����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
�
��	�	����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
!�
!���� � � �
!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!����
!�
!�
!�
!��'�'��(?��E�E�
0�
0��
�
�d�D�$�/�/�/�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0����
0�
0�
0�
0��'�'��(?��E�E�
�
��D�	�	�	�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
�
��Q���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
�
��Q�q�S�	�	�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'��(?��E�E�
�
���Q��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�3	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	sz�A8M�B(�M�(B,	�,M�/B,	�0#M�C5�)M�5C9	�9M�<C9	�=#M� E�6M�E	�M�	E	�
#M�-F�M�F	�M�F	�#M�9G�M�G	�M�!G	�"#M�H)�M�)H-	�-M�0H-	�1#M�I0�$M�0I4	�4M�7I4	�8#M�	J0�$M�0J4	�4M�7J4	�8#M�K2�&M�2K6	�6M�9K6	�:#M�L/�#M�/L3	�3M�6L3	�7M�M�Mc�J�t��5}|�d��|�d��|�ddd��}|���|�t
jd|j��ddd��dS#1swxYwYdS)Nrz*insert into test(b) values (zeroblob(100))r�r�r2z#Cannot operate on a closed database)rr!rrJrrrXr.)r/rrs   r�test_blob_closed_db_readz"BlobTests.test_blob_closed_db_read�s���
�
�
�	.�"��J�J�2�3�3�3��J�J�C�D�D�D��;�;�v�s�A�.�.�D��H�H�J�J�J��"�"�6�#:�#H�#'�9�
.�
.�
.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s�A<B�B�BN)*r8r9r:rGrKrr r,r1r3r5r7r:rBrDrFrJrMrQrUrWr]rarerjrmrprrrurwryr{r}r�r�r�r�r�r�r�r�r�r=r rrr�s`������5�5�5����6�6�6�/�/�/�.�.�.�,)�)�)�)�)�)�.�.�.�?�?�?����
+�+�+�<�<�<�/�/�/�	"�	"�	"�$�$�$�
���4�4�4�-�-�-�2�2�2�+�+�+�5�5�5�	B�	B�	B�-�-�-�8�8�8�.�.�.�;�;�;�6�6�6�+�+�+�2�2�2�+�+�+�"�"�"����!�!�!�&
8�
8�
8����	�	�	�1�1�1����:.�.�.�.�.r rc�f�eZdZd�Zd�Zejd���Zd�Zd�Z	ejd���Z
dS)�ThreadTestsc���tjd��|_|j���|_|j�d��|j�d��dS)Nrz$create table test(name text, b blob)z,insert into test values('blob', zeroblob(1)))rrr"rDr�r!r.s rrGzThreadTests.setUp�sZ���>�*�-�-����8�?�?�$�$�������?�@�@�@�����G�H�H�H�H�Hr c�j�|j���|j���dSr#)r�rJr"r.s rrKzThreadTests.tearDown�s,�����������������r c��������fd�}g}tj|d|i���}|���|���|r*|�d�|����dSdS)Nc���	��i���|�d��dS#tj$rYdS|�d��YdSxYw)Nzdid not raise ProgrammingErrorzraised wrong exception)rrrX)�errrr(rTs ���r�runz"ThreadTests._run_test.<locals>.run�sw���
5���D�!�D�!�!�!��
�
�;�<�<�<�<�<���*�
�
�
����
5��
�
�3�4�4�4�4�4�4���s�"�A
�A
r���targetr�
)�	threading�Thread�start�join�fail)r/r(rrTr�r�rcs ```   r�	_run_testzThreadTests._run_test�s������	5�	5�	5�	5�	5�	5�	5�����C����=�=�=��	���	�	�	�	�������	&��I�I�d�i�i��n�n�%�%�%�%�%�	&�	&r c�����fd��fd��fd��fd��fd��fd��fd��fd��fd	��fd
�g
}ttjd��r0|��fd���|��fd
���tjdkr|��fd���|D]E}��|���5��|��ddd��n#1swxYwY�FdS)Nc�6���j���Sr#)r"rDr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�����D�H�O�O�%�%�r c�6���j���Sr#)r"rOr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�r�r c�6���j���Sr#)r"rUr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�����D�H�%�%�'�'�r c�6���j���Sr#)r"rJr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�����D�H�N�N�$�$�r c�8���j�d��Sr#)r"�set_trace_callbackr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�/�/��5�5�r c�8���j�d��Sr#)r"�set_authorizerr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�+�+�D�1�1�r c�:���j�dd��Srf)r"�create_collationr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�-�-�e�T�:�:�r c�N���j�tjd��S)Nr�)r"r$rr�r.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�%�%�f�&@�"�E�E�r c�L���j�tj��Sr#)r"r�rr�r.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�%�%�f�&@�A�A�r c�<���j�ddd��S)Nr�r�r2)r"rr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���D�H�%�%�f�c�1�5�5�r r�c�6���j���Sr#)r"r�r.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���t�x�1�1�3�3�r c�8���j�d��S)Nr )r"r�r.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���t�x�3�3�C�8�8�r r�c�<���j�ddd��S)NrCr)r"�create_window_functionr.s�rrgz:ThreadTests.test_check_connection_thread.<locals>.<lambda>�s���t�x�>�>�u�a��N�N�r �r()r
rr�rr
rr��r/�fnsr(s`  r�test_check_connection_threadz(ThreadTests.test_check_connection_thread�s����%�%�%�%�%�%�%�%�'�'�'�'�$�$�$�$�5�5�5�5�1�1�1�1�:�:�:�:�E�E�E�E�A�A�A�A�5�5�5�5�
���6�$�k�2�2�	:��J�J�3�3�3�3�4�4�4��J�J�8�8�8�8�9�9�9��%��3�	P��J�J�N�N�N�N�O�O�O��	#�	#�B������$�$�
#�
#����r�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#��	#�	#s�8C�C	�!C	c����fd��fd��fd��fd�g}|D]E}��|���5��|��ddd��n#1swxYwY�FdS)Nc�8���j�d��S)Nz"insert into test(name) values('a')�r�r!r.s�rrgz6ThreadTests.test_check_cursor_thread.<locals>.<lambda>�s���D�H�$�$�%I�J�J�r c�6���j���Sr#)r�rJr.s�rrgz6ThreadTests.test_check_cursor_thread.<locals>.<lambda>�r�r c�8���j�d��S)Nr�r�r.s�rrgz6ThreadTests.test_check_cursor_thread.<locals>.<lambda>�s���D�H�$�$�%<�=�=�r c�6���j���Sr#)r�rsr.s�rrgz6ThreadTests.test_check_cursor_thread.<locals>.<lambda>�r�r r�)rr�r�s`  r�test_check_cursor_threadz$ThreadTests.test_check_cursor_thread�s����J�J�J�J�$�$�$�$�=�=�=�=�'�'�'�'�	
���	#�	#�B������$�$�
#�
#����r�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#��	#�	#s�A�A	�A	c�,�d�}tjdd���}g}tj|||d����}|���|���|�t|��dd�|����dS)	Nc��	|�d��dS#tj$r|�d��YdSwxYw)Nr/zmulti-threading not allowed)r!rrBr�r"r�s  rr�z4ThreadTests.test_dont_check_same_thread.<locals>.run�sX��
:����J�'�'�'�'�'���<�
:�
:�
:��
�
�8�9�9�9�9�9�9�
:���s��$A�ArF)�check_same_threadr�r�rr�)rrr�r�r�r�r,r�)r/r�r"r�rcs     r�test_dont_check_same_threadz'ThreadTests.test_dont_check_same_thread�s���	:�	:�	:��n�Z�5�A�A�A������C��C�0H�0H�I�I�I��	���	�	�	�	����������S���1�d�i�i��n�n�5�5�5�5�5r N)r8r9r:rGrKr	�reap_threadsr�r�r�r�r=r rr�r��s�������I�I�I�����"�&�&�#�"�&�"#�#�#�.	#�	#�	#��"�6�6�#�"�6�6�6r r�c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�ConstructorTestsc�2�tjddd��}dS)N��r��)r�Date�r/r�s  r�	test_datezConstructorTests.test_dates���K��b�"�%�%���r c�2�tjddd��}dS)N��'r�)r�Time�r/rcs  r�	test_timezConstructorTests.test_times���K��B��#�#���r c�8�tjdddddd��}dS)Nr�r�r�r�r�r�)r�	Timestamp�r/�tss  r�test_timestampzConstructorTests.test_timestamps ��
�
�d�B��B��B�
7�
7���r c�.�tjd��}dSr>)r�
DateFromTicksr�s  r�test_date_from_ticksz%ConstructorTests.test_date_from_ticks���� ��$�$���r c�.�tjd��}dSr>)r�
TimeFromTicksr�s  r�test_time_from_ticksz%ConstructorTests.test_time_from_ticksr�r c�.�tjd��}dSr>)r�TimestampFromTicksr�s  r�test_timestamp_from_ticksz*ConstructorTests.test_timestamp_from_tickss��
�
&�r�
*�
*���r c�.�tjd��}dS)Ns')r�Binary)r/r�s  r�test_binaryzConstructorTests.test_binarys���M�&�!�!���r N)
r8r9r:r�r�r�r�r�r�r�r=r rr�r�s}������&�&�&�$�$�$�8�8�8�%�%�%�%�%�%�+�+�+�"�"�"�"�"r r�c�P�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dS)
�ExtensionTestsc�
�tjd��}|���}|�d��|�d��|���d}|�|d��dS)Nrz�
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from arr�)rrrDrjr!rsr,)r/r"r�rms    r�test_script_string_sqlz%ExtensionTests.test_script_string_sql"s~���n�Z�(�(���j�j�l�l������	�	�	�	���%�&�&�&��l�l�n�n�Q�������a� � � � � r c���tjd��}|���}|�tj��5|�d��ddd��dS#1swxYwYdS)Nrz1create table test(x); asdf; create table test2(x)�rrrDr]rNrj�r/r"r�s   r�test_script_syntax_errorz'ExtensionTests.test_script_syntax_error/s����n�Z�(�(���j�j�l�l��
�
�
�v�6�
7�
7�	S�	S����Q�R�R�R�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S����	S�	S�	S�	S�	S�	S��A+�+A/�2A/c���tjd��}|���}|�tj��5|�d��ddd��dS#1swxYwYdS)Nrz5create table test(sadfsadfdsa); select foo from hurz;r�r�s   r�test_script_error_normalz'ExtensionTests.test_script_error_normal5s����n�Z�(�(���j�j�l�l��
�
�
�v�6�
7�
7�	W�	W����U�V�V�V�	W�	W�	W�	W�	W�	W�	W�	W�	W�	W�	W�	W����	W�	W�	W�	W�	W�	Wr�c���tjd��}|���}|�t��5|�d��ddd��dS#1swxYwYdS)Nrs9create table test(foo); insert into test(foo) values (5);)rrrDr]r�rjr�s   r�"test_cursor_executescript_as_bytesz1ExtensionTests.test_cursor_executescript_as_bytes;s����n�Z�(�(���j�j�l�l��
�
�
�y�
)�
)�	\�	\����Z�[�[�[�	\�	\�	\�	\�	\�	\�	\�	\�	\�	\�	\�	\����	\�	\�	\�	\�	\�	\��A&�&A*�-A*c���tjd��}|���}|�t��5|�d��ddd��dS#1swxYwYdS)Nrzb
                create table a(i);
                insert into a(i) values (5);
                )rrrDr]r�rjr�s   r�.test_cursor_executescript_with_null_charactersz=ExtensionTests.test_cursor_executescript_with_null_charactersAs����n�Z�(�(���j�j�l�l��
�
�
�z�
*�
*�	�	�����
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	rc���tjd��}|���}|�t��5|�d��ddd��dS#1swxYwYdS)Nrue
                create table a(s);
                insert into a(s) values ('�');
                )rrrDr]�UnicodeEncodeErrorrjr�s   r�)test_cursor_executescript_with_surrogatesz8ExtensionTests.test_cursor_executescript_with_surrogatesJs����n�Z�(�(���j�j�l�l��
�
�
�1�
2�
2�	�	�����
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	rc	��d}t��5}t|��5}|�d�|����|�t
j|��5|�d�|dz����ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�zselect 'almost too large'zselect 'too large'r2)rr(rjr>rrrK)r/r�r�lims    r�*test_cursor_executescript_too_large_scriptz9ExtensionTests.test_cursor_executescript_too_large_scriptSs���)��
�
�
�	D�"�h�r�l�l�	D�c����8�>�>�s�C�C�D�D�D��'�'��(8�#�>�>�
D�
D�� � �!5�!;�!;�C��E�!B�!B�C�C�C�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D����
D�
D�
D�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	DsY�C�A	B9�*,B"�B9�"B&�&B9�)B&�*B9�-C�9B=	�=C�B=	�C�C�Cc���tjd��}|�d��|�|j��|�d��|�|j��dS)Nr�beginr/)rrr!r<rrrjr5�r/r"s  r�$test_cursor_executescript_tx_controlz3ExtensionTests.test_cursor_executescript_tx_controlZsi���n�Z�(�(�����G��������*�+�+�+����*�%�%�%�����+�,�,�,�,�,r c��tjd��}|�d�����d}|�|dd��dS)Nrzselect 5rr�z Basic test of Connection.execute)rrr!rsr,�r/r"�results   r�test_connection_executez&ExtensionTests.test_connection_executeasR���n�Z�(�(�����Z�(�(�1�1�3�3�A�6�������$F�G�G�G�G�Gr c�b�tjd��}|�d��|�dddg��|�d�����}|�|dddd	��|�|d
ddd	��dS)Nrzcreate table test(foo)z insert into test(foo) values (?)r��r�z!select foo from test order by foorr3z$Basic test of Connection.executemanyr2r�)rrr!rirhr,rs   r�test_connection_executemanyz*ExtensionTests.test_connection_executemanyfs����n�Z�(�(�����,�-�-�-����:�T�4�L�I�I�I����@�A�A�J�J�L�L��������1��q�*P�Q�Q�Q�������1��q�*P�Q�Q�Q�Q�Qr c���tjd��}|�d��|�d�����d}|�|dd��dS)Nrz9create table test(foo); insert into test(foo) values (5);zselect foo from testrr�z&Basic test of Connection.executescript)rrrjr!rsr,rs   r�test_connection_executescriptz,ExtensionTests.test_connection_executescriptnsh���n�Z�(�(�����U�V�V�V����3�4�4�=�=�?�?��B�������$L�M�M�M�M�Mr N)r8r9r:r�r�r�rrrr	r
rrrr=r rr�r�!s�������!�!�!�S�S�S�W�W�W�\�\�\�������D�D�D�-�-�-�H�H�H�
R�R�R�N�N�N�N�Nr r�c�D�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�ClosedConTestsc���tjd��}|���|�tj��5|���}ddd��dS#1swxYwYdSr)rrrJr]rXrDr�s   r�test_closed_con_cursorz%ClosedConTests.test_closed_con_cursorus����n�Z�(�(���	�	����
�
�
�v�6�
7�
7�	�	��*�*�,�,�C�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�c���tjd��}|���|�tj��5|���ddd��dS#1swxYwYdSr)rrrJr]rXrOrs  r�test_closed_con_commitz%ClosedConTests.test_closed_con_commit{s����n�Z�(�(���	�	����
�
�
�v�6�
7�
7�	�	��J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�c���tjd��}|���|�tj��5|���ddd��dS#1swxYwYdSr)rrrJr]rXrUrs  r�test_closed_con_rollbackz'ClosedConTests.test_closed_con_rollback�s����n�Z�(�(���	�	����
�
�
�v�6�
7�
7�	�	��L�L�N�N�N�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	r�c��tjd��}|���}|���|�tj��5|�d��ddd��dS#1swxYwYdS)Nrzselect 4)rrrDrJr]rXr!r�s   r�test_closed_cur_executez&ClosedConTests.test_closed_cur_execute�s����n�Z�(�(���j�j�l�l���	�	����
�
�
�v�6�
7�
7�	$�	$��K�K�
�#�#�#�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�A?�?B�Bc��tjd��}|���d�}|�tj��5|�dd|��ddd��dS#1swxYwYdS)Nrc��dS�Nr�r=res rr�z5ClosedConTests.test_closed_create_function.<locals>.f�s���r rCr2)rrrJr]rXrk)r/r"r�s   r�test_closed_create_functionz*ClosedConTests.test_closed_create_function�s����n�Z�(�(���	�	�������
�
�
�v�6�
7�
7�	-�	-�����q�!�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�	-�	-s�A0�0A4�7A4c��tjd��}|���Gd�d��}|�tj��5|�dd|��ddd��dS#1swxYwYdS)Nrc� �eZdZd�Zd�Zd�ZdS)�8ClosedConTests.test_closed_create_aggregate.<locals>.Aggc��dSr#r=r.s rr�zAClosedConTests.test_closed_create_aggregate.<locals>.Agg.__init__�����r c��dSr#r=rgs  r�stepz=ClosedConTests.test_closed_create_aggregate.<locals>.Agg.step�r)r c��dSr#r=r.s r�finalizezAClosedConTests.test_closed_create_aggregate.<locals>.Agg.finalize�s���rr N)r8r9r:r�r+r-r=r r�Aggr'�sA������
�
�
�
�
�
�
�
�
�
�
r r.rCr2)rrrJr]rX�create_aggregate)r/r"r.s   r�test_closed_create_aggregatez+ClosedConTests.test_closed_create_aggregate�s����n�Z�(�(���	�	����	�	�	�	�	�	�	�	��
�
�v�6�
7�
7�	0�	0�� � ���3�/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�A:�:A>�A>c��tjd��}|���d�}|�tj��5|�|��ddd��dS#1swxYwYdS)Nrc��tjSr#)r�DENY)rs r�
authorizerz=ClosedConTests.test_closed_set_authorizer.<locals>.authorizer�s
���;�r )rrrJr]rXr�)r/r"r4s   r�test_closed_set_authorizerz)ClosedConTests.test_closed_set_authorizer�s����n�Z�(�(���	�	����	�	�	�
�
�
�v�6�
7�
7�	+�	+����z�*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+s�A.�.A2�5A2c��tjd��}|���d�}|�tj��5|�|d��ddd��dS#1swxYwYdS)Nrc��dSr#r=r=r r�progresszBClosedConTests.test_closed_set_progress_callback.<locals>.progress�r�r r�)rrrJr]rX�set_progress_handler)r/r"r8s   r�!test_closed_set_progress_callbackz0ClosedConTests.test_closed_set_progress_callback�s����n�Z�(�(���	�	�������
�
�
�v�6�
7�
7�	4�	4��$�$�X�s�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�A/�/A3�6A3c���tjd��}|���|�tj��5|��ddd��dS#1swxYwYdSr)rrrJr]rXrs  r�test_closed_callzClosedConTests.test_closed_call�s����n�Z�(�(���	�	����
�
�
�v�6�
7�
7�	�	��C�E�E�E�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�A � A$�'A$N)r8r9r:rrrr r$r0r5r:r<r=r rrrts����������������$�$�$�-�-�-�0�0�0�+�+�+�4�4�4�����r rc��eZdZd�ZdS)�ClosedCurTestsc�L�tjd��}|���}|���dD]d}|dvrd}n|dkrdddgf}ng}|�tj��5t
||��}||�ddd��n#1swxYwY�edS)	Nr)r!rirjrhr�rs)r!rj)zselect 4 union select 5rizinsert into foo(bar) values (?)r�r)rrrDrJr]rXr{)r/r"r��method_name�params�methods      r�test_closedzClosedCurTests.test_closed�s���n�Z�(�(���j�j�l�l���	�	����k�
	 �
	 �K��:�:�
�5����
�-�
�;�d�D�\�J������"�"�6�#:�;�;�
 �
 � ��k�2�2�������
 �
 �
 �
 �
 �
 �
 �
 �
 �
 �
 ����
 �
 �
 �
 ��
	 �
	 s�6B�B	�B	N)r8r9r:rCr=r rr>r>�s#������ � � � � r r>c�F�eZdZ	d�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�SqliteOnConflictTestsc��tjd��|_|j���|_|j�d��dS)Nrzz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        r,r.s rrGzSqliteOnConflictTests.setUp�sM���.��,�,����'�.�.�"�"��������	
�	
�	
�	
�	
r c�j�|j���|j���dSr#r.r.s rrKzSqliteOnConflictTests.tearDown�r/r c�X�d|j_|j���|_|j�d��|j�d��|j�d��|�tj��5|j�d��ddd��n#1swxYwY|j���|j�d��|�	|j�
��g��dS)N�BEGIN�,INSERT INTO test(name) VALUES ('abort_test')�8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name from test�rr�rDrFr!r]rrRrOr,rhr.s r�3test_on_conflict_rollback_with_explicit_transactionzISqliteOnConflictTests.test_on_conflict_rollback_with_explicit_transaction�sB��"&�����'�.�.�"�"�������� � � �����F�G�G�G�����R�S�S�S�
�
�
�v�4�
5�
5�	X�	X��G�O�O�V�W�W�W�	X�	X�	X�	X�	X�	X�	X�	X�	X�	X�	X����	X�	X�	X�	X�	
�����������<�=�=�=������)�)�+�+�R�0�0�0�0�0��B?�?C�Cc�\�d|j_|j���|_|j�d��|j�d��|j�d��|�tj��5|j�d��ddd��n#1swxYwY|j���|j�d��|�	|j�
��ddg��dS)NrIrJ�5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')�"SELECT name, unique_name FROM test��
abort_testNrfrLr.s r�8test_on_conflict_abort_raises_with_explicit_transactionszNSqliteOnConflictTests.test_on_conflict_abort_raises_with_explicit_transactions�sH��#'�����'�.�.�"�"�������� � � �����F�G�G�G�����O�P�P�P�
�
�
�v�4�
5�
5�	U�	U��G�O�O�S�T�T�T�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U����	U�	U�	U�	U������������<�=�=�=������)�)�+�+�.B�N�-S�T�T�T�T�TrNc��|j�d��|j�d��|�tj��5|j�d��ddd��n#1swxYwY|j�d��|�|j���g��dS)NrJrKrQ�rFr!r]rrRr,rhr.s r�-test_on_conflict_rollback_without_transactionzCSqliteOnConflictTests.test_on_conflict_rollback_without_transaction�s�������F�G�G�G�����R�S�S�S�
�
�
�v�4�
5�
5�	X�	X��G�O�O�V�W�W�W�	X�	X�	X�	X�	X�	X�	X�	X�	X�	X�	X����	X�	X�	X�	X�����<�=�=�=������)�)�+�+�R�0�0�0�0�0��A;�;A?�A?c��|j�d��|j�d��|�tj��5|j�d��ddd��n#1swxYwY|j�d��|�|j���ddg��dS)NrJrPrQrRrfrVr.s r�2test_on_conflict_abort_raises_without_transactionszHSqliteOnConflictTests.test_on_conflict_abort_raises_without_transactionss��	
����F�G�G�G�����O�P�P�P�
�
�
�v�4�
5�
5�	U�	U��G�O�O�S�T�T�T�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U�	U����	U�	U�	U�	U�	
����<�=�=�=������)�)�+�+�.B�N�-S�T�T�T�T�TrXc�6�|j�d��|�tj��5|j�d��ddd��n#1swxYwY|�|j���g��dS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')rVr.s r�test_on_conflict_failz+SqliteOnConflictTests.test_on_conflict_fails�������N�O�O�O�
�
�
�v�4�
5�
5�	T�	T��G�O�O�R�S�S�S�	T�	T�	T�	T�	T�	T�	T�	T�	T�	T�	T����	T�	T�	T�	T������)�)�+�+�R�0�0�0�0�0s�A!�!A%�(A%c��|j�d��|j�d��|j�d��|�|j���dg��dS)Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testrB�rFr!r,rhr.s r�test_on_conflict_ignorez-SqliteOnConflictTests.test_on_conflict_ignoresm������P�Q�Q�Q�����P�Q�Q�Q�����6�7�7�7������)�)�+�+�h�Z�8�8�8�8�8r c��|j�d��|j�d��|j�d��|�|j���dg��dS)NzFINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')zUINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')rQ)zVery different data!rCr^r.s r�test_on_conflict_replacez.SqliteOnConflictTests.test_on_conflict_replaceso������`�a�a�a�����o�p�p�p�����<�=�=�=������)�)�+�+�.M�-N�O�O�O�O�Or N)r8r9r:rGrKrMrTrWrZr\r_rar=r rrErE�s��������
�
�
����
1�
1�
1�U�U�U� 1�1�1�	U�	U�	U�1�1�1�9�9�9�P�P�P�P�Pr rEc�$�eZdZedzZd�Zd�ZdS)�MultiprocessTestsg@�@c�.�tt��dSr#)rrr.s rrKzMultiprocessTests.tearDown+s���v�����r c�(�dt�d|j�d�}tjtjd|gddtjtj���}|�|j��|�	d|j
��������tjt|j�	��}	|5|�d
��ddd��n#1swxYwY|j�d��nC#tj$r1}|j�t'|����Yd}~nd}~wwxYw|���n#|���wxYw|�|j��	|�dt.�
��n<#tj$r*|���|����wxYw|�	|jd��dS)Nz�if 1:
            import sqlite3
            def wait():
                print("started")
                assert "database is locked" in input()

            cx = sqlite3.connect("z", timeout=a�)
            cx.create_function("wait", 0, wait)
            with cx:
                cx.execute("create table t(t)")
            try:
                # execute two transactions; both will try to lock the db
                cx.executescript('''
                    -- start a transaction and wait for parent
                    begin transaction;
                    select * from t;
                    select wait();
                    rollback;

                    -- start a new transaction; would fail if parent holds lock
                    begin transaction;
                    select * from t;
                    rollback;
                ''')
            finally:
                cx.close()
        z-czutf-8r)�encoding�bufsize�stdin�stdout�started)�timeoutzinsert into t values('test')zno error�end)�inputrk)r�CONNECTION_TIMEOUT�
subprocess�Popenr�
executable�PIPEr�communicater,ri�readline�striprrr!rhr?rNr�rJr��
returncoder�TimeoutExpired�kill)r/�SCRIPT�procrr$s     r�&test_ctx_mgr_rollback_if_commit_failedz8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failed.s]���$*�
��7;�6M�
����:��
�^�T�6�*����/��?�
�
�
��	
����(�)�)�)�	
����D�K�$8�$8�$:�$:�$@�$@�$B�$B�C�C�C�
�^�F�D�,C�
D�
D�
D��	��
;�
;��
�
�9�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;�

�J���Z�(�(�(�(���&�	'�	'�	'��J���S��X�X�&�&�&�&�&�&�&�&�����	'����

�H�H�J�J�J�J��B�H�H�J�J�J�J����	
���$�/�*�*�*�	����5�-��@�@�@�@���(�	�	�	��I�I�K�K�K��������	����	
�����!�,�,�,�,�,s`�D�
C,� D�,C0�0D�3C0�4D�7E*�E�!'E
�E*�
E�E*�*F�F;�;9G4N)r8r9r:rrnrKr{r=r rrcrc's=������&��.�����>-�>-�>-�>-�>-r rc�__main__)7rr�sqlite3rrorr�r;�urllib.parser�test.supportrrrrrrr	�	_testcapir
rrr
r�test.support.os_helperrrrrrr�contextmanagerr�r(�TestCaser*r?r�rr
r�r�rr*r�requires_working_threadingr�r�r�rr>rErcr8�mainr=r r�<module>r�s���.����	�	�	�	���������
�
�
�
�����������������������������*�)�)�)�)�)�)�)�)�)�)�)�)�)�+�+�+�+�+�+�+�+�+�+�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�"�"�"��� �8��%�%�%���%�fI�fI�fI�fI�fI�(�#�fI�fI�fI�R	]=�]=�]=�]=�]=�h�'�]=�]=�]=�@-�-�-�-�-�8�#4�-�-�-�(���W�W�V�.��<�<�1�3�3�-,�-,�-,�-,�-,�X�&�-,�-,�3�3�-,�`V:�V:�V:�V:�V:��!�V:�V:�V:�r[4�[4�[4�[4�[4�(�#�[4�[4�[4�|w.�w.�w.�w.�w.��!�w.�w.�w.�t	-��,�.�.�M6�M6�M6�M6�M6�(�#�M6�M6�/�.�M6�`"�"�"�"�"�x�(�"�"�"�,QN�QN�QN�QN�QN�X�&�QN�QN�QN�fA�A�A�A�A�X�&�A�A�A�F � � � � �X�&� � � �&ZP�ZP�ZP�ZP�ZP�H�-�ZP�ZP�ZP�z����D-�D-�D-�D-�D-��)�D-�D-���D-�N�z����H�M�O�O�O�O�O��r