Your IP : 216.73.217.129


Current Path : /opt/alt/python310/lib64/python3.10/sqlite3/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/sqlite3/test/__pycache__/dbapi.cpython-310.pyc

o

0�i���@s4ddlZddlZddlZddlZddlZddlmZmZddl	m
Z
mZGdd�dej�Z
Gdd�dej�ZGdd	�d	ej�ZGd
d�dej�ZGdd
�d
ej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�Zdd�Zdd�Zedkr�e�dSdS)�N)�check_disallow_instantiation�
SHORT_TIMEOUT)�TESTFN�unlinkc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Ze�ejdkd�dd��Zdd �Zd!S)"�ModuleTestscC�|�tjddtj�dS)Nz2.0zapilevel is %s, should be 2.0)�assertEqual�sqliteZapilevel��self�r�9/opt/alt/python310/lib64/python3.10/sqlite3/test/dbapi.py�test_api_level"�
�zModuleTests.test_api_levelcCr)N�zthreadsafety is %d, should be 1)rr	Zthreadsafetyr
rrr
�test_thread_safety&rzModuleTests.test_thread_safetycCr)NZqmarkz%paramstyle is '%s', should be 'qmark')rr	Z
paramstyler
rrr
�test_param_style*s

��zModuleTests.test_param_stylecC�|�ttjt�d�dS)Nz&Warning is not a subclass of Exception)�
assertTrue�
issubclassr	�Warning�	Exceptionr
rrr
�test_warning/��zModuleTests.test_warningcCr)Nz$Error is not a subclass of Exception)rrr	�Errorrr
rrr
�
test_error3rzModuleTests.test_errorcC�|�ttjtj�d�dS)Nz)InterfaceError is not a subclass of Error)rrr	�InterfaceErrorrr
rrr
�test_interface_error7��z ModuleTests.test_interface_errorcCr)Nz(DatabaseError is not a subclass of Error)rrr	�
DatabaseErrorrr
rrr
�test_database_error;rzModuleTests.test_database_errorcCr)Nz,DataError is not a subclass of DatabaseError)rrr	�	DataErrorr r
rrr
�test_data_error?rzModuleTests.test_data_errorcCr)Nz3OperationalError is not a subclass of DatabaseError)rrr	�OperationalErrorr r
rrr
�test_operational_errorCrz"ModuleTests.test_operational_errorcCr)Nz1IntegrityError is not a subclass of DatabaseError)rrr	�IntegrityErrorr r
rrr
�test_integrity_errorGrz ModuleTests.test_integrity_errorcCr)Nz0InternalError is not a subclass of DatabaseError)rrr	�
InternalErrorr r
rrr
�test_internal_errorKrzModuleTests.test_internal_errorcCr)Nz3ProgrammingError is not a subclass of DatabaseError)rrr	�ProgrammingErrorr r
rrr
�test_programming_errorOrz"ModuleTests.test_programming_errorcCr)Nz4NotSupportedError is not a subclass of DatabaseError)rrr	�NotSupportedErrorr r
rrr
�test_not_supported_errorSs

��z$ModuleTests.test_not_supported_error�darwinz#shared cache is deprecated on macOSc	CsPdD]#}|�t��
}t�|�Wd�n1swY|�d|j�qdS)N)TFzdbapi.py)ZassertWarns�DeprecationWarningr	Zenable_shared_cacheZassertIn�filename)rZenable�cmrrr
�test_shared_cache_deprecatedZs��z(ModuleTests.test_shared_cache_deprecatedcCs t�d�}t|t|d���dS)N�:memory:zselect 1)r	�connectr�type�r�cxrrr
�test_disallow_instantiationas
z'ModuleTests.test_disallow_instantiationN)�__name__�
__module__�__qualname__rrrrrrr!r#r%r'r)r+r-�unittest�skipIf�sys�platformr2r8rrrr
r!s"
rc@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�ConnectionTestscCs0t�d�|_|j��}|�d�|�dd�dS)Nr3z4create table test(id integer primary key, name text)�!insert into test(name) values (?)��foo)r	r4r7�cursor�execute�r�currr
�setUphs

zConnectionTests.setUpcC�|j��dS�N�r7�closer
rrr
�tearDownn�zConnectionTests.tearDowncCrIrJ�r7�commitr
rrr
�test_commitqrNzConnectionTests.test_commitcC�|j��|j��dS)zV
        A commit should also work when no changes were made to the database.
        NrOr
rrr
�test_commit_after_no_changest�
z,ConnectionTests.test_commit_after_no_changescCrIrJ�r7�rollbackr
rrr
�
test_rollback{rNzConnectionTests.test_rollbackcCrR)zX
        A rollback should also work when no changes were made to the database.
        NrUr
rrr
�test_rollback_after_no_changes~rTz.ConnectionTests.test_rollback_after_no_changescCs|j��}dSrJ�r7rDrFrrr
�test_cursor�rNzConnectionTests.test_cursorcCs@d}|�tj��t�|�}Wd�dS1swYdS)Nz/foo/bar/bla/23534/mydb.db)�assertRaisesr	r$r4)rZYOU_CANNOT_OPEN_THIS�conrrr
�test_failed_open�s"�z ConnectionTests.test_failed_opencCrIrJrKr
rrr
�
test_close�rNzConnectionTests.test_closecCs�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jj	tj	�|�|jj
tj
�|�|jjtj�|�|jjtj�dSrJ)
rr7rr	rrr r"r$r&r(r*r,r
rrr
�test_exceptions�szConnectionTests.test_exceptionscCs�t�d�}|��}|�|jd�|�d�|�|jd�|�dd�|�|jd�|�ddg�|��}|�|jd�|��|�|jd�|�ddg�|��}|�|jd�dS)	Nr3Fz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)rBTz-select name from transactiontest where name=?rC)r	r4rDr�in_transactionrE�fetchonerP)rr7rG�rowrrr
�test_in_transaction�s

z#ConnectionTests.test_in_transactioncCs8|�t��
d|j_Wd�dS1swYdS)NT)r[�AttributeErrorr7r`r
rrr
�test_in_transaction_ro�s
"�z&ConnectionTests.test_in_transaction_rocCsZ|�tt�Gdd�d�}|�}t�|��}|�d�Wd�dS1s&wYdS)z| Checks that we can successfully connect to a database using an object that
            is PathLike, i.e. has __fspath__(). c@�eZdZdd�ZdS)z=ConnectionTests.test_open_with_path_like_object.<locals>.PathcSstSrJ)rr
rrr
�
__fspath__��zHConnectionTests.test_open_with_path_like_object.<locals>.Path.__fspath__N)r9r:r;rgrrrr
�Path��ri�create table test(id integer)N)�
addCleanuprrr	r4rE)rri�pathr7rrr
�test_open_with_path_like_object�s"�z/ConnectionTests.test_open_with_path_like_objectc	Cs�|�tt�t�t��
}|�d�Wd�n1swYtjdtdd��
}|�d�Wd�n1s9wYtjdtddd��,}|�tj��
|�d�Wd�n1s`wYWd�dSWd�dS1sxwYdS)Nrkzfile:T)Zurizinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1))rlrrr	r4rEr[r$r6rrr
�
test_open_uri�s����"�zConnectionTests.test_open_uriN)r9r:r;rHrMrQrSrWrXrZr]r^r_rcrernrorrrr
r@fs
r@c@�eZdZdd�Zdd�ZdS)�UninitialisedConnectionTestscCstj�tj�|_dSrJ)r	Z
Connection�__new__r7r
rrr
rH��z"UninitialisedConnectionTests.setUpc	s��fdd��fdd��fdd��fdd��fdd��fdd�f}|D] }�j|d����tjd	|�Wd�n1s=wYq"dS)
Nc��jjSrJ)r7�isolation_levelrr
rr
�<lambda>��zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>crtrJ)r7�
total_changesrr
rr
rv�rwcrtrJ)r7r`rr
rr
rv�rwc�
�j��SrJ)r7Ziterdumprr
rr
rv��
cryrJrYrr
rr
rv�rzcryrJrKrr
rr
rv�rz)�funcz#Base Connection.__init__ not called)�subTestZassertRaisesRegexr	r*)rZfuncsr{rr
r
�test_uninit_operations�s 





�����z3UninitialisedConnectionTests.test_uninit_operationsN)r9r:r;rHr}rrrr
rq�srqc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Ze� e!j"d9kd:�d;d<��Z#d=d>�Z$d?d@�Z%dAdB�Z&dCdD�Z'dEdF�Z(dGdH�Z)dIdJ�Z*dKdL�Z+dMdN�Z,dOdP�Z-dQdR�Z.dSdT�Z/dUdV�Z0dWdX�Z1dYdZ�Z2d[d\�Z3d]d^�Z4d_d`�Z5dadb�Z6dcdd�Z7dedf�Z8dgdh�Z9didj�Z:dkS)l�CursorTestscCs6t�d�|_|j��|_|j�d�|j�dd�dS)Nr3z\create table test(id integer primary key, name text, income number, unique_test text unique)rArB�r	r4r7rDrGrEr
rrr
rH�s�zCursorTests.setUpcC�|j��|j��dSrJ�rGrLr7r
rrr
rM��
zCursorTests.tearDowncC�|j�d�dS)N�delete from test�rGrEr
rrr
�test_execute_no_args��z CursorTests.test_execute_no_argscC�>|�tj��|j�d�Wd�dS1swYdS)Nzselect asdf)r[r	r$rGrEr
rrr
�test_execute_illegal_sql��"�z$CursorTests.test_execute_illegal_sqlcCr�)Nzselect 5+4; select 4+5)r[r	rrGrEr
rrr
�test_execute_too_much_sql�r�z%CursorTests.test_execute_too_much_sqlcCr�)Nzselect 5+4; -- foo barr�r
rrr
�test_execute_too_much_sql2�r�z&CursorTests.test_execute_too_much_sql2cCr�)NzT
            select 5+4;

            /*
            foo
            */
            r�r
rrr
�test_execute_too_much_sql3�r�z&CursorTests.test_execute_too_much_sql3cCs<|�t��|j�d�Wd�dS1swYdS�N�*)r[�	TypeErrorrGrEr
rrr
�test_execute_wrong_sql_args"�z&CursorTests.test_execute_wrong_sql_argcC�|j�dd�dS)N�insert into test(id) values (?))r�r�r
rrr
�test_execute_arg_int�z CursorTests.test_execute_arg_intcCr�)N�#insert into test(income) values (?))gq=
ף��@r�r
rrr
�test_execute_arg_float	r�z"CursorTests.test_execute_arg_floatcCr�)NrA)ZHugor�r
rrr
�test_execute_arg_stringr�z#CursorTests.test_execute_arg_stringcCs@|j�dd�|j�d|jjf�|j��}|�|dd�dS)NrA)�Hugoz select name from test where id=?rr�)rGrE�	lastrowidrar�rrbrrr
�&test_execute_arg_string_with_zero_bytes
z2CursorTests.test_execute_arg_string_with_zero_bytecCsN|�t��}|j�dd�Wd�n1swY|�t|j�d�dS)Nr�r�z"parameters are of unsupported type)r[�
ValueErrorrGrEr�str�	exception)rr1rrr
�test_execute_non_iterables�z%CursorTests.test_execute_non_iterablecCs@|�tj��|j�dd�Wd�dS1swYdS)Nr�)�ZEgon�r[r	r*rGrEr
rrr
�test_execute_wrong_no_of_args1s"�z*CursorTests.test_execute_wrong_no_of_args1cCr��Nr�r�r
rrr
�test_execute_wrong_no_of_args2 �"�z*CursorTests.test_execute_wrong_no_of_args2cCr�r�r�r
rrr
�test_execute_wrong_no_of_args3%r�z*CursorTests.test_execute_wrong_no_of_args3cCs:|j�d�|j�ddg�|j��}|�|dd�dS)N�%insert into test(name) values ('foo')�"select name from test where name=?rCr�rGrErarr�rrr
�test_execute_param_list*s
z#CursorTests.test_execute_param_listcCsHGdd�d�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@rp)z2CursorTests.test_execute_param_sequence.<locals>.LcS�dS)Nrrr
rrr
�__len__2rhz:CursorTests.test_execute_param_sequence.<locals>.L.__len__cSs|dksJ�dS)NrrCr�r�xrrr
�__getitem__4sz>CursorTests.test_execute_param_sequence.<locals>.L.__getitem__N�r9r:r;r�r�rrrr
�L1�r�r�r�rrCr�)rr�rbrrr
�test_execute_param_sequence0s

z'CursorTests.test_execute_param_sequencecCsZGdd�d�}|j�d�|�t��|j�d|��Wd�dS1s&wYdS)Nc@rp)z:CursorTests.test_execute_param_sequence_bad_len.<locals>.LcSsdddS)Nrrrr
rrr
r�@�zBCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__len__cSst�rJ)�AssertionError)Zslfr�rrr
r�BrhzFCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__getitem__Nr�rrrr
r�?r�r�r�r�)rGrEr[�ZeroDivisionError)rr�rrr
�#test_execute_param_sequence_bad_len=s
"�z/CursorTests.test_execute_param_sequence_bad_lencCs<|j�d�|j�dddi�|j��}|�|dd�dS)Nr��&select name from test where name=:name�namerCrr�r�rrr
�test_execute_dict_mappingIs
z%CursorTests.test_execute_dict_mappingcCsJGdd�dt�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@rf)z8CursorTests.test_execute_dict_mapping_mapping.<locals>.DcSr��NrCr)r�keyrrr
�__missing__QrhzDCursorTests.test_execute_dict_mapping_mapping.<locals>.D.__missing__N)r9r:r;r�rrrr
�DPrjr�r�r�rrC)�dictrGrErar)rr�rbrrr
�!test_execute_dict_mapping_mappingOs

z-CursorTests.test_execute_dict_mapping_mappingcC�P|j�d�|�tj��|j�dddi�Wd�dS1s!wYdS)Nr�z1select name from test where name=:name and id=:idr�rC�rGrEr[r	r*r
rrr
�)test_execute_dict_mapping_too_little_argsY�"�z5CursorTests.test_execute_dict_mapping_too_little_argscCsJ|j�d�|�tj��|j�d�Wd�dS1swYdS)Nr�r�r�r
rrr
�!test_execute_dict_mapping_no_args^s"�z-CursorTests.test_execute_dict_mapping_no_argscCr�)Nr�r�r�rCr�r
rrr
�!test_execute_dict_mapping_unnamedcr�z-CursorTests.test_execute_dict_mapping_unnamedcCrIrJ)rGrLr
rrr
r^hrNzCursorTests.test_closecCsD|j�d�|j�d�|j�d�|j�d�|�|jjd�dS)Nr�r�zupdate test set name='bar'��rGrEr�rowcountr
rrr
�test_rowcount_executeks
z!CursorTests.test_rowcount_executecCs |j�d�|�|jjd�dS)z�
        pysqlite does not know the rowcount of SELECT statements, because we
        don't fetch all rows after executing the select statement. The rowcount
        has thus to be -1.
        zselect 5 union select 6���Nr�r
rrr
�test_rowcount_selectrsz CursorTests.test_rowcount_selectcCs2|j�d�|j�dgd��|�|jjd�dS)Nr�rA))r)r���r�)rGrE�executemanyrr�r
rrr
�test_rowcount_executemany{sz%CursorTests.test_rowcount_executemany)r��#rzRequires SQLite 3.35.0 or newercCs6|j�d�|�|j��dd�|�|jjd�dS)Nz7update test set name='bar' where name='foo' returning 1rr)rGrErrar�r
rrr
�test_rowcount_update_returning�sz*CursorTests.test_rowcount_update_returningcCs0|j�d�|j�d�|jd|jjdd�dS)Nr�r�z"total changes reported wrong value)�msg)rGrEZ
assertLessr7rxr
rrr
�test_total_changes�szCursorTests.test_total_changescCs"|j�ddd�tdd�D��dS)Nr�cSsg|]}|f�qSrr)�.0r�rrr
�
<listcomp>�sz:CursorTests.test_execute_many_sequence.<locals>.<listcomp>�d�n)rGr��ranger
rrr
�test_execute_many_sequence�s"z&CursorTests.test_execute_many_sequencecCs"Gdd�d�}|j�d|��dS)Nc@�$eZdZdd�Zdd�Zdd�ZdS)z6CursorTests.test_execute_many_iterator.<locals>.MyItercSs
d|_dS�N�)�valuer
rrr
�__init__�s
z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__init__cSs|SrJrr
rrr
�__iter__�rhz?CursorTests.test_execute_many_iterator.<locals>.MyIter.__iter__cSs$|jdkrt�|jd7_|jfS)N�
r)r��
StopIterationr
rrr
�__next__�s
z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__next__N)r9r:r;r�r�r�rrrr
�MyIter�sr�r��rGr�)rr�rrr
�test_execute_many_iterator�sz&CursorTests.test_execute_many_iteratorcCsdd�}|j�d|��dS)Ncss�td�D]}|fVqdSr�)r�)�irrr
�mygen�s�
�z6CursorTests.test_execute_many_generator.<locals>.mygenr�r�)rr�rrr
�test_execute_many_generator�sz'CursorTests.test_execute_many_generatorcCs@|�t��|j�ddg�Wd�dS1swYdS)Nr�r��r[r�rGr�r
rrr
�test_execute_many_wrong_sql_arg�s"�z+CursorTests.test_execute_many_wrong_sql_argcCsB|�tj��|j�ddg�Wd�dS1swYdS)Nzselect ?r�)r[r	r*rGr�r
rrr
�test_execute_many_select�s"�z$CursorTests.test_execute_many_selectcCs>|�t��|j�dd�Wd�dS1swYdS)Nr�r�r�r
rrr
�test_execute_many_not_iterable�s"�z*CursorTests.test_execute_many_not_iterablecCsv|j�d�|j�dd�|j�dd�|j�d�g}|jD]	}|�|d�q|�|dd�|�|dd	�dS)
Nr�r�)r�)�zselect id from test order by idrr�rr�)rGrE�appendr)rZlstrbrrr
�test_fetch_iter�s
zCursorTests.test_fetch_itercCs@|j�d�|j��}|�|dd�|j��}|�|d�dS)N�select name from testrrCr�r�rrr
�
test_fetchone��


zCursorTests.test_fetchonecCs"|j��}|��}|�|d�dSrJ)r7rDrar)r�currbrrr
�test_fetchone_no_statement�s
z&CursorTests.test_fetchone_no_statementcCsr|�|jjd�d|j_|j�d�|j�d�|j�d�|j�d�|j�d�|j��}|�t|�d�dS)Nrr�r�z#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')r�)rrGZ	arraysizerE�	fetchmany�len�r�resrrr
�test_array_size�s
zCursorTests.test_array_sizecCsD|j�d�|j�d�}|�t|�d�|j�d�}|�|g�dS)Nr�r�r�rGrEr�rr�r�rrr
�test_fetchmany�s
zCursorTests.test_fetchmanycCs.|j�d�|jjdd�}|�t|�d�dS)z0Checks if fetchmany works with keyword argumentsr�r�)�sizerNr�r�rrr
�test_fetchmany_kw_arg�sz!CursorTests.test_fetchmany_kw_argcCs@|j�d�|j��}|�t|�d�|j��}|�|g�dS)Nr�r)rGrE�fetchallrr�r�rrr
�
test_fetchall�r�zCursorTests.test_fetchallcCs|j�gd��dS)N)r��r�)rGZ
setinputsizesr
rrr
�test_setinputsizes�rszCursorTests.test_setinputsizescCr�)Nr�r�rGZ
setoutputsizer
rrr
�test_setoutputsize�r�zCursorTests.test_setoutputsizecCr�r�rr
rrr
�test_setoutputsize_no_column�r�z(CursorTests.test_setoutputsize_no_columncCs|�|jj|j�dSrJ)rrGZ
connectionr7r
rrr
�test_cursor_connection�sz"CursorTests.test_cursor_connectioncCsD|�t��dd�}|j�|�}Wd�dS1swYdS)NcS�dSrJrrrrr
�f�z1CursorTests.test_wrong_cursor_callable.<locals>.f)r[r�r7rD)rr	r�rrr
�test_wrong_cursor_callables"�z&CursorTests.test_wrong_cursor_callablecCsNGdd�d�}|�}|�t��t�|�}Wd�dS1s wYdS)Nc@seZdZdS)z0CursorTests.test_cursor_wrong_class.<locals>.FooN)r9r:r;rrrr
�Foosr)r[r�r	ZCursor)rrrCr�rrr
�test_cursor_wrong_classs
"�z#CursorTests.test_cursor_wrong_classc	Csbd}dD]*}|j|d��|j�|�|�d�|�|jjd�Wd�n1s)wYqdS)zV
        INSERT OR REPLACE and REPLACE INTO should produce the same behavior.
        z+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEZREPLACE��	statement)rrCrN)r|rGrE�formatrr�)r�sqlrrrr
�test_last_row_id_on_replace
s���z'CursorTests.test_last_row_id_on_replacecCs@|j�dd�|�|jjd�|j�dd�|�|jjd�dS)Nz2insert or ignore into test(unique_test) values (?))�testr�)rGrErr�r
rrr
�test_last_row_id_on_ignores��z&CursorTests.test_last_row_id_on_ignorec
Cs�g}dD][}d}|jd�|�d��F|j�|�|�|f�|�||jjf�|�tj��|j�|�|�|f�Wd�n1sBwY|�||jjf�Wd�n1sZwYqgd�}|�	||�dS)N)�FAIL�ABORT�ROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {}r)�rr�r�rr�r�rrr)
r|rrGrEr�r�r[r	r&r)rZresultsrrZexpectedrrr
�test_last_row_id_insert_o_r!s���z'CursorTests.test_last_row_id_insert_o_rN);r9r:r;rHrMr�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�r<r=r	Zsqlite_version_infor�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr
rrrrrrr
r~�sp		

	�
	

r~c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ThreadTestscC�(t�d�|_|j��|_|j�d�dS)Nr3z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))r	r4r\rDr�rEr
rrr
rH4�zThreadTests.setUpcCr�rJ)r�rLr\r
rrr
rM9r�zThreadTests.tearDowncC�Vdd�}g}tj||j|d�d�}|��|��t|�dkr)|�d�|��dSdS)NcS�Dz|��}|�d�WdStjyYdS|�d�YdS�N�did not raise ProgrammingError�raised wrong exception)rDr�r	r*)r\�errorsr�rrr
�run>�
z(ThreadTests.test_con_cursor.<locals>.run�r\r$��target�kwargsr�
��	threading�Threadr\�start�joinr��fail�rr%r$�trrr
�test_con_cursor=�
�zThreadTests.test_con_cursorcCr)NcS�Dz|��|�d�WdStjyYdS|�d�YdSr!)rPr�r	r*r'rrr
r%Pr&z(ThreadTests.test_con_commit.<locals>.runr'r(rr+r,r2rrr
�test_con_commitOr5zThreadTests.test_con_commitcCr)NcSr6r!)rVr�r	r*r'rrr
r%br&z*ThreadTests.test_con_rollback.<locals>.runr'r(rr+r,r2rrr
�test_con_rollbackar5zThreadTests.test_con_rollbackcCr)NcSr6r!�rLr�r	r*r'rrr
r%tr&z'ThreadTests.test_con_close.<locals>.runr'r(rr+r,r2rrr
�test_con_closesr5zThreadTests.test_con_closecCr)NcS�Fz
|�d�|�d�WdStjyYdS|�d�YdS)N�#insert into test(name) values ('a')r"r#�rEr�r	r*�r�r$rrr
r%��

z0ThreadTests.test_cur_implicit_begin.<locals>.runr>r(rr+�r-r.r�r/r0r�r1r2rrr
�test_cur_implicit_begin�r5z#ThreadTests.test_cur_implicit_begincCr)NcSr6r!r9r>rrr
r%�r&z'ThreadTests.test_cur_close.<locals>.runr>r(rr+r@r2rrr
�test_cur_close�r5zThreadTests.test_cur_closecCsbdd�}g}|j�d�tj||j|d�d�}|��|��t|�dkr/|�d�|��dSdS)NcSr;)Nr�r"r#r=r>rrr
r%�r?z)ThreadTests.test_cur_execute.<locals>.runr<r>r(rr+�r�rEr-r.r/r0r�r1r2rrr
�test_cur_execute�s
�zThreadTests.test_cur_executecCsndd�}g}|j�d�|j�d�tj||j|d�d�}|��|��t|�dkr5|�d�|��dSdS)	NcSr r!)rar�r	r*)r�r$rbrrr
r%�r&z+ThreadTests.test_cur_iter_next.<locals>.runr<r�r>r(rr+rCr2rrr
�test_cur_iter_next�s
�zThreadTests.test_cur_iter_nextN)
r9r:r;rHrMr4r7r8r:rArBrDrErrrr
r3src@�DeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ConstructorTestscC�t�ddd�}dS)N��r��)r	ZDate�r�drrr
�	test_date�r�zConstructorTests.test_datecCrH)N��'r�)r	ZTime�rr3rrr
�	test_time�r�zConstructorTests.test_timecCst�dddddd�}dS)NrIr�rJrNrOr�)r	Z	Timestamp�rZtsrrr
�test_timestamp�szConstructorTests.test_timestampcC�t�d�}dSr�)r	Z
DateFromTicksrKrrr
�test_date_from_ticks�rNz%ConstructorTests.test_date_from_tickscCrTr�)r	Z
TimeFromTicksrPrrr
�test_time_from_ticks�rNz%ConstructorTests.test_time_from_tickscCrTr�)r	ZTimestampFromTicksrRrrr
�test_timestamp_from_ticks�rNz*ConstructorTests.test_timestamp_from_tickscCrT)Ns')r	ZBinary)r�brrr
�test_binary�rNzConstructorTests.test_binaryN)
r9r:r;rMrQrSrUrVrWrYrrrr
rG�srGc@rF)�ExtensionTestscCsBt�d�}|��}|�d�|�d�|��d}|�|d�dS)Nr3z�
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from arr�)r	r4rD�
executescriptrErar)rr\r�r�rrr
�test_script_string_sql�s


z%ExtensionTests.test_script_string_sqlcC�Nt�d�}|��}|�tj��|�d�Wd�dS1s wYdS)Nr3z1create table test(x); asdf; create table test2(x)�r	r4rDr[r$r[�rr\r�rrr
�test_script_syntax_error��

"�z'ExtensionTests.test_script_syntax_errorcCr])Nr3z5create table test(sadfsadfdsa); select foo from hurz;r^r_rrr
�test_script_error_normal�raz'ExtensionTests.test_script_error_normalcCs\t�d�}|��}|�t��
}|�d�Wd�n1swY|�t|j�d�dS)Nr3s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.)	r	r4rDr[r�r[rr�r�)rr\r�r1rrr
�"test_cursor_executescript_as_bytess
�z1ExtensionTests.test_cursor_executescript_as_bytescCs.t�d�}|�d���d}|�|dd�dS)Nr3zselect 5rr�z Basic test of Connection.execute)r	r4rErar�rr\�resultrrr
�test_connection_executes
z&ExtensionTests.test_connection_executecCsbt�d�}|�d�|�dddg�|�d���}|�|dddd	�|�|d
ddd	�dS)Nr3zcreate table test(foo)z insert into test(foo) values (?)r��rz!select foo from test order by foorr�z$Basic test of Connection.executemanyrr)r	r4rEr�rrrdrrr
�test_connection_executemanys

z*ExtensionTests.test_connection_executemanycCs8t�d�}|�d�|�d���d}|�|dd�dS)Nr3z9create table test(foo); insert into test(foo) values (5);zselect foo from testrr�z&Basic test of Connection.executescript)r	r4r[rErarrdrrr
�test_connection_executescripts

z,ExtensionTests.test_connection_executescriptN)
r9r:r;r\r`rbrcrfrhrirrrr
rZ�s
rZc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�ClosedConTestscCsLt�d�}|��|�tj��
|��}Wd�dS1swYdS�Nr3)r	r4rLr[r*rDr_rrr
�test_closed_con_cursor�


"�z%ClosedConTests.test_closed_con_cursorcC�Lt�d�}|��|�tj��
|��Wd�dS1swYdSrk)r	r4rLr[r*rP�rr\rrr
�test_closed_con_commit!rmz%ClosedConTests.test_closed_con_commitcCrnrk)r	r4rLr[r*rVrorrr
�test_closed_con_rollback'rmz'ClosedConTests.test_closed_con_rollbackcCsVt�d�}|��}|��|�tj��|�d�Wd�dS1s$wYdS)Nr3zselect 4)r	r4rDrLr[r*rEr_rrr
�test_closed_cur_execute-s
"�z&ClosedConTests.test_closed_cur_executecCsZt�d�}|��dd�}|�tj��|�dd|�Wd�dS1s&wYdS)Nr3cSr��Nr�r)r�rrr
r	7r
z5ClosedConTests.test_closed_create_function.<locals>.frCr)r	r4rLr[r*Zcreate_function)rr\r	rrr
�test_closed_create_function4s
"�z*ClosedConTests.test_closed_create_functioncCs`t�d�}|��Gdd�d�}|�tj��|�dd|�Wd�dS1s)wYdS)Nr3c@r�)z8ClosedConTests.test_closed_create_aggregate.<locals>.AggcSrrJrr
rrr
r�?rhzAClosedConTests.test_closed_create_aggregate.<locals>.Agg.__init__cSrrJrr�rrr
�stepArhz=ClosedConTests.test_closed_create_aggregate.<locals>.Agg.stepcSr�rsrr
rrr
�finalizeCrhzAClosedConTests.test_closed_create_aggregate.<locals>.Agg.finalizeN)r9r:r;r�rurvrrrr
�Agg>srwrCr)r	r4rLr[r*Zcreate_aggregate)rr\rwrrr
�test_closed_create_aggregate;s
"�z+ClosedConTests.test_closed_create_aggregatecCsVt�d�}|��dd�}|�tj��|�|�Wd�dS1s$wYdS)Nr3cWstjSrJ)r	ZDENY)�argsrrr
�
authorizerKsz=ClosedConTests.test_closed_set_authorizer.<locals>.authorizer)r	r4rLr[r*Zset_authorizer)rr\rzrrr
�test_closed_set_authorizerHs
"�z)ClosedConTests.test_closed_set_authorizercCsXt�d�}|��dd�}|�tj��|�|d�Wd�dS1s%wYdS)Nr3cSrrJrrrrr
�progressSr
zBClosedConTests.test_closed_set_progress_callback.<locals>.progressr�)r	r4rLr[r*Zset_progress_handler)rr\r|rrr
�!test_closed_set_progress_callbackPs
"�z0ClosedConTests.test_closed_set_progress_callbackcCsJt�d�}|��|�tj��|�Wd�dS1swYdSrk)r	r4rLr[r*rorrr
�test_closed_callWs

"�zClosedConTests.test_closed_callN)r9r:r;rlrprqrrrtrxr{r}r~rrrr
rjs
rjc@rf)�ClosedCurTestsc	Cs�t�d�}|��}|��dD]5}|dvrd}n
|dkr#dddgf}ng}|�tj��t||�}||�Wd�n1s?wYqdS)	Nr3)rEr�r[rr�ra)rEr[)zselect 4 union select 5r�zinsert into foo(bar) values (?)r�rg)r	r4rDrLr[r*�getattr)rr\r�Zmethod_name�params�methodrrr
�test_closed^s


���zClosedCurTests.test_closedN)r9r:r;r�rrrr
r]rjrc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�SqliteOnConflictTestszz
    Tests for SQLite's "insert on conflict" feature.

    See https://www.sqlite.org/lang_conflict.html for details.
    cCr)Nr3zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        rr
rrr
rHwrzSqliteOnConflictTests.setUpcCr�rJr�r
rrr
rM�r�zSqliteOnConflictTests.tearDowncCs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�Wd�n1s3wY|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�r7rurDrGrEr[r	r&rPrrr
rrr
�3test_on_conflict_rollback_with_explicit_transaction�s�
zISqliteOnConflictTests.test_on_conflict_rollback_with_explicit_transactioncCs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�Wd�n1s3wY|j��|j�d�|�	|j�
�ddg�dS)Nr�r��5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')�"SELECT name, unique_name FROM test�Z
abort_testNr�r�r
rrr
�8test_on_conflict_abort_raises_with_explicit_transactions�s�
zNSqliteOnConflictTests.test_on_conflict_abort_raises_with_explicit_transactionscCsr|j�d�|j�d�|�tj��|j�d�Wd�n1s#wY|j�d�|�|j��g�dS)Nr�r�r��rGrEr[r	r&rrr
rrr
�-test_on_conflict_rollback_without_transaction�s�zCSqliteOnConflictTests.test_on_conflict_rollback_without_transactioncCsv|j�d�|j�d�|�tj��|j�d�Wd�n1s#wY|j�d�|�|j��ddg�dS)Nr�r�r�r�r�r�r
rrr
�2test_on_conflict_abort_raises_without_transactions�s�zHSqliteOnConflictTests.test_on_conflict_abort_raises_without_transactionscCsZ|j�d�|�tj��|j�d�Wd�n1swY|�|j��g�dS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')r�r
rrr
�test_on_conflict_fail�s
�z+SqliteOnConflictTests.test_on_conflict_failcCs<|j�d�|j�d�|j�d�|�|j��dg�dS)Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testrB�rGrErrr
rrr
�test_on_conflict_ignore��z-SqliteOnConflictTests.test_on_conflict_ignorecCs<|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')r�)zVery different data!rCr�r
rrr
�test_on_conflict_replace�r�z.SqliteOnConflictTests.test_on_conflict_replaceN)
r9r:r;�__doc__rHrMr�r�r�r�r�r�r�rrrr
r�ps	
r�c@s$eZdZedZdd�Zdd�ZdS)�MultiprocessTestsg@�@cCstt�dSrJ)rrr
rrr
rM�r�zMultiprocessTests.tearDownc
CsHdt�d|j�d�}tjtjd|gddtjtjd�}|�|j�|�	d|j
�����t
jt|jd	�}zAz|�
|�d
�Wd�n1sGwYWnt
jyh}z|j�t|��WYd}~nd}~ww|j�d�W|��n|��w|�|j�z	|jdtd
�Wntjy�|��|���w|�	|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�stdoutZstarted)�timeoutzinsert into t values('test')zno error�end)�inputr�)r�CONNECTION_TIMEOUT�
subprocess�Popenr>�
executable�PIPErlZcommunicaterr��readline�stripr	r4rEr$r��writer�rLZassertIsNone�
returncoderZTimeoutExpired�kill)rZSCRIPT�procr7�excrrr
�&test_ctx_mgr_rollback_if_commit_failed�sH��
�������z8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failedN)r9r:r;rr�rMr�rrrr
r��sr�cCs.tttttttttt	t
g}t�dd�|D��S)NcSsg|]	}t���|��qSr)r<Z
TestLoaderZloadTestsFromTestCase)r�r3rrr
r�#szsuite.<locals>.<listcomp>)
rjrr@rGr~rZrr�r�rrqr<Z	TestSuite)Ztestsrrr
�suites�
�r�cCst��}|�t��dSrJ)r<ZTextTestRunnerr%r�)Zrunnerrrr
r&sr�__main__)r�r-r<Zsqlite3r	r>Ztest.supportrrZtest.support.os_helperrrZTestCaserr@rqr~rrGrZrjrr�r�r�rr9rrrr
�<module>s4EcX4C]G
�