HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/sqlite3/test/__pycache__/dbapi.cpython-310.opt-1.pyc
o

�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�//usr/local/lib/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)r�enable�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�platformr3r9r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)Nr4z4create table test(id integer primary key, name text)�!insert into test(name) values (?)��foo)r	r5r8�cursor�execute�r�currr
�setUphs

zConnectionTests.setUpcC�|j��dS�N�r8�closer
rrr
�tearDownn�zConnectionTests.tearDowncCrJrK�r8�commitr
rrr
�test_commitqrOzConnectionTests.test_commitcC�|j��|j��dS)zV
        A commit should also work when no changes were made to the database.
        NrPr
rrr
�test_commit_after_no_changest�
z,ConnectionTests.test_commit_after_no_changescCrJrK�r8�rollbackr
rrr
�
test_rollback{rOzConnectionTests.test_rollbackcCrS)zX
        A rollback should also work when no changes were made to the database.
        NrVr
rrr
�test_rollback_after_no_changes~rUz.ConnectionTests.test_rollback_after_no_changescCs|j��}dSrK�r8rErGrrr
�test_cursor�rOzConnectionTests.test_cursorcCs@d}|�tj��t�|�}Wd�dS1swYdS)Nz/foo/bar/bla/23534/mydb.db)�assertRaisesr	r$r5)rZYOU_CANNOT_OPEN_THIS�conrrr
�test_failed_open�s"�z ConnectionTests.test_failed_opencCrJrKrLr
rrr
�
test_close�rOzConnectionTests.test_closecCs�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jj	tj	�|�|jj
tj
�|�|jjtj�|�|jjtj�dSrK)
rr8rr	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)	Nr4Fz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)rCTz-select name from transactiontest where name=?rD)r	r5rEr�in_transactionrF�fetchonerQ)rr8rH�rowrrr
�test_in_transaction�s

z#ConnectionTests.test_in_transactioncCs8|�t��
d|j_Wd�dS1swYdS)NT)r\�AttributeErrorr8rar
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>.PathcSstSrK)rr
rrr
�
__fspath__��zHConnectionTests.test_open_with_path_like_object.<locals>.Path.__fspath__N)r:r;r<rhrrrr
�Path��rj�create table test(id integer)N)�
addCleanuprrr	r5rF)rrj�pathr8r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)Nrlzfile:T)Zurizinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1))rmrrr	r5rFr\r$r7rrr
�
test_open_uri�s����"�zConnectionTests.test_open_uriN)r:r;r<rIrNrRrTrXrYr[r^r_r`rdrfrorprrrr
rAfs
rAc@�eZdZdd�Zdd�ZdS)�UninitialisedConnectionTestscCstj�tj�|_dSrK)r	�
Connection�__new__r8r
rrr
rI��z"UninitialisedConnectionTests.setUpc	s��fdd��fdd��fdd��fdd��fdd��fdd�f}|D] }�j|d����tjd	|�Wd�n1s=wYq"dS)
Nc��jjSrK)r8�isolation_levelrr
rr
�<lambda>��zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>crvrK)r8�
total_changesrr
rr
rx�rycrvrK)r8rarr
rr
rx�ryc�
�j��SrK)r8Ziterdumprr
rr
rx��
cr{rKrZrr
rr
rx�r|cr{rKrLrr
rr
rx�r|)�funcz#Base Connection.__init__ not called)�subTestZassertRaisesRegexr	r*)rZfuncsr}rr
r
�test_uninit_operations�s 





�����z3UninitialisedConnectionTests.test_uninit_operationsN)r:r;r<rIrrrrr
rr�srrc@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)Nr4z\create table test(id integer primary key, name text, income number, unique_test text unique)rBrC�r	r5r8rErHrFr
rrr
rI�s�zCursorTests.setUpcC�|j��|j��dSrK�rHrMr8r
rrr
rN��
zCursorTests.tearDowncC�|j�d�dS)N�delete from test�rHrFr
rrr
�test_execute_no_args��z CursorTests.test_execute_no_argscC�>|�tj��|j�d�Wd�dS1swYdS)Nzselect asdf)r\r	r$rHrFr
rrr
�test_execute_illegal_sql��"�z$CursorTests.test_execute_illegal_sqlcCr�)Nzselect 5+4; select 4+5)r\r	rrHrFr
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\�	TypeErrorrHrFr
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�)NrB)ZHugor�r
rrr
�test_execute_arg_stringr�z#CursorTests.test_execute_arg_stringcCs@|j�dd�|j�d|jjf�|j��}|�|dd�dS)NrB)�Hugoz select name from test where id=?rr�)rHrF�	lastrowidrbr�rrcr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\�
ValueErrorrHrFr�str�	exception)rr2rrr
�test_execute_non_iterables�z%CursorTests.test_execute_non_iterablecCs@|�tj��|j�dd�Wd�dS1swYdS)Nr�)�ZEgon�r\r	r*rHrFr
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=?rDr�rHrFrbrr�rrr
�test_execute_param_list*s
z#CursorTests.test_execute_param_listcCsHGdd�d�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@rq)z2CursorTests.test_execute_param_sequence.<locals>.LcS�dS)Nrrr
rrr
�__len__2riz:CursorTests.test_execute_param_sequence.<locals>.L.__len__cSr��NrDr�r�xrrr
�__getitem__4sz>CursorTests.test_execute_param_sequence.<locals>.L.__getitem__N�r:r;r<r�r�rrrr
�L1�r�r�r�rrDr�)rr�rcrrr
�test_execute_param_sequence0s

z'CursorTests.test_execute_param_sequencecCsZGdd�d�}|j�d�|�t��|j�d|��Wd�dS1s&wYdS)Nc@rq)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�rK)�AssertionError)Zslfr�rrr
r�BrizFCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__getitem__Nr�rrrr
r�?r�r�r�r�)rHrFr\�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�namerDrr�r�rrr
�test_execute_dict_mappingIs
z%CursorTests.test_execute_dict_mappingcCsJGdd�dt�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@rg)z8CursorTests.test_execute_dict_mapping_mapping.<locals>.DcSr�r�r)r�keyrrr
�__missing__QrizDCursorTests.test_execute_dict_mapping_mapping.<locals>.D.__missing__N)r:r;r<r�rrrr
�DPrkr�r�r�rrD)�dictrHrFrbr)rr�rcr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�rD�rHrFr\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�rDr�r
rrr
�!test_execute_dict_mapping_unnamedcr�z-CursorTests.test_execute_dict_mapping_unnamedcCrJrK)rHrMr
rrr
r_hrOzCursorTests.test_closecCsD|j�d�|j�d�|j�d�|j�d�|�|jjd�dS)Nr�r�zupdate test set name='bar'��rHrFr�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�rB))r)r���r�)rHrF�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)rHrFrrbr�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)rHrFZ
assertLessr8rzr
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)rHr��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|SrKrr
rrr
�__iter__�riz?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)r:r;r<r�r�r�rrrr
�MyIter�sr�r��rHr�)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�rHr�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*rHr�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�)rHrF�appendr)rZlstrcrrr
�test_fetch_iter�s
zCursorTests.test_fetch_itercCs@|j�d�|j��}|�|dd�|j��}|�|d�dS)N�select name from testrrDr�r�rrr
�
test_fetchone��


zCursorTests.test_fetchonecCs"|j��}|��}|�|d�dSrK)r8rErbr)r�currcr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�)rrHZ	arraysizerF�	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�rHrFr�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)rHrF�fetchallrr�r�rrr
�
test_fetchall�r�zCursorTests.test_fetchallcCs|j�gd��dS)N)r��r�)rHZ
setinputsizesr
rrr
�test_setinputsizes�ruzCursorTests.test_setinputsizescCr�)Nr�r�rHZ
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�dSrK)rrH�
connectionr8r
rrr
�test_cursor_connection�sz"CursorTests.test_cursor_connectioncCsD|�t��dd�}|j�|�}Wd�dS1swYdS)NcS�dSrKrrrrr
�f�z1CursorTests.test_wrong_cursor_callable.<locals>.f)r\r�r8rE)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)r:r;r<rrrr
�Foosr)r\r�r	ZCursor)rrrDr�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)rrDrN)r~rHrF�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�)rHrFrr�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~rrHrFr�r�r\r	r&r)r�resultsrrZexpectedrrr
�test_last_row_id_insert_o_r!s���z'CursorTests.test_last_row_id_insert_o_rN);r:r;r<rIrNr�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�rrrrrr
rrrrrr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)Nr4z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))r	r5r]rEr�rFr
rrr
rI4�zThreadTests.setUpcCr�rK)r�rMr]r
rrr
rN9r�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)rEr�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%)rQr�r	r*r+rrr
r)Pr*z(ThreadTests.test_con_commit.<locals>.runr+r,rr/r0r6rrr
�test_con_commitOr9zThreadTests.test_con_commitcCr#)NcSr:r%)rWr�r	r*r+rrr
r)br*z*ThreadTests.test_con_rollback.<locals>.runr+r,rr/r0r6rrr
�test_con_rollbackar9zThreadTests.test_con_rollbackcCr#)NcSr:r%�rMr�r	r*r+rrr
r)tr*z'ThreadTests.test_con_close.<locals>.runr+r,rr/r0r6rrr
�test_con_closesr9zThreadTests.test_con_closecCr#)NcS�Fz
|�d�|�d�WdStjyYdS|�d�YdS)N�#insert into test(name) values ('a')r&r'�rFr�r	r*�r�r(rrr
r)��

z0ThreadTests.test_cur_implicit_begin.<locals>.runrBr,rr/�r1r2r�r3r4r�r5r6rrr
�test_cur_implicit_begin�r9z#ThreadTests.test_cur_implicit_begincCr#)NcSr:r%r=rBrrr
r)�r*z'ThreadTests.test_cur_close.<locals>.runrBr,rr/rDr6rrr
�test_cur_close�r9zThreadTests.test_cur_closecCsbdd�}g}|j�d�tj||j|d�d�}|��|��t|�dkr/|�d�|��dSdS)NcSr?)Nr�r&r'rArBrrr
r)�rCz)ThreadTests.test_cur_execute.<locals>.runr@rBr,rr/�r�rFr1r2r3r4r�r5r6r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%)rbr�r	r*)r�r(rcrrr
r)�r*z+ThreadTests.test_cur_iter_next.<locals>.runr@r�rBr,rr/rGr6rrr
�test_cur_iter_next�s
�zThreadTests.test_cur_iter_nextN)
r:r;r<rIrNr8r;r<r>rErFrHrIrrrr
r 3sr c@�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_datecCrL)N��'r�)r	ZTime�rr7rrr
�	test_time�r�zConstructorTests.test_timecCst�dddddd�}dS)NrMr�rNrRrSr�)r	Z	Timestamp�r�tsrrr
�test_timestamp�szConstructorTests.test_timestampcC�t�d�}dSr�)r	Z
DateFromTicksrOrrr
�test_date_from_ticks�rOz%ConstructorTests.test_date_from_tickscCrYr�)r	Z
TimeFromTicksrTrrr
�test_time_from_ticks�rOz%ConstructorTests.test_time_from_tickscCrYr�)r	ZTimestampFromTicksrVrrr
�test_timestamp_from_ticks�rOz*ConstructorTests.test_timestamp_from_tickscCrY)Ns')r	ZBinary)r�brrr
�test_binary�rOzConstructorTests.test_binaryN)
r:r;r<rQrUrXrZr[r\r^rrrr
rK�srKc@rJ)�ExtensionTestscCsBt�d�}|��}|�d�|�d�|��d}|�|d�dS)Nr4z�
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from arr�)r	r5rE�
executescriptrFrbr)rr]r�r�rrr
�test_script_string_sql�s


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

"�z'ExtensionTests.test_script_syntax_errorcCrb)Nr4z5create table test(sadfsadfdsa); select foo from hurz;rcrdrrr
�test_script_error_normal�rfz'ExtensionTests.test_script_error_normalcCs\t�d�}|��}|�t��
}|�d�Wd�n1swY|�t|j�d�dS)Nr4s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.)	r	r5rEr\r�r`rr�r�)rr]r�r2rrr
�"test_cursor_executescript_as_bytess
�z1ExtensionTests.test_cursor_executescript_as_bytescCs.t�d�}|�d���d}|�|dd�dS)Nr4zselect 5rr�z Basic test of Connection.execute)r	r5rFrbr�rr]�resultrrr
�test_connection_executes
z&ExtensionTests.test_connection_executecCsbt�d�}|�d�|�dddg�|�d���}|�|dddd	�|�|d
ddd	�dS)Nr4zcreate 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	r5rFr�rrrirrr
�test_connection_executemanys

z*ExtensionTests.test_connection_executemanycCs8t�d�}|�d�|�d���d}|�|dd�dS)Nr4z9create table test(foo); insert into test(foo) values (5);zselect foo from testrr�z&Basic test of Connection.executescript)r	r5r`rFrbrrirrr
�test_connection_executescripts

z,ExtensionTests.test_connection_executescriptN)
r:r;r<rarergrhrkrmrnrrrr
r_�s
r_c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�ClosedConTestscCsLt�d�}|��|�tj��
|��}Wd�dS1swYdS�Nr4)r	r5rMr\r*rErdrrr
�test_closed_con_cursor�


"�z%ClosedConTests.test_closed_con_cursorcC�Lt�d�}|��|�tj��
|��Wd�dS1swYdSrp)r	r5rMr\r*rQ�rr]rrr
�test_closed_con_commit!rrz%ClosedConTests.test_closed_con_commitcCrsrp)r	r5rMr\r*rWrtrrr
�test_closed_con_rollback'rrz'ClosedConTests.test_closed_con_rollbackcCsVt�d�}|��}|��|�tj��|�d�Wd�dS1s$wYdS)Nr4zselect 4)r	r5rErMr\r*rFrdrrr
�test_closed_cur_execute-s
"�z&ClosedConTests.test_closed_cur_executecCsZt�d�}|��dd�}|�tj��|�dd|�Wd�dS1s&wYdS)Nr4cSr��Nr�r)r�rrr
r7r
z5ClosedConTests.test_closed_create_function.<locals>.frDr)r	r5rMr\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)Nr4c@r�)z8ClosedConTests.test_closed_create_aggregate.<locals>.AggcSrrKrr
rrr
r�?rizAClosedConTests.test_closed_create_aggregate.<locals>.Agg.__init__cSrrKrr�rrr
�stepAriz=ClosedConTests.test_closed_create_aggregate.<locals>.Agg.stepcSr�rxrr
rrr
�finalizeCrizAClosedConTests.test_closed_create_aggregate.<locals>.Agg.finalizeN)r:r;r<r�rzr{rrrr
�Agg>sr|rDr)r	r5rMr\r*Zcreate_aggregate)rr]r|rrr
�test_closed_create_aggregate;s
"�z+ClosedConTests.test_closed_create_aggregatecCsVt�d�}|��dd�}|�tj��|�|�Wd�dS1s$wYdS)Nr4cWstjSrK)r	ZDENY)�argsrrr
�
authorizerKsz=ClosedConTests.test_closed_set_authorizer.<locals>.authorizer)r	r5rMr\r*Zset_authorizer)rr]rrrr
�test_closed_set_authorizerHs
"�z)ClosedConTests.test_closed_set_authorizercCsXt�d�}|��dd�}|�tj��|�|d�Wd�dS1s%wYdS)Nr4cSrrKrrrrr
�progressSr
zBClosedConTests.test_closed_set_progress_callback.<locals>.progressr�)r	r5rMr\r*Zset_progress_handler)rr]r�rrr
�!test_closed_set_progress_callbackPs
"�z0ClosedConTests.test_closed_set_progress_callbackcCsJt�d�}|��|�tj��|�Wd�dS1swYdSrp)r	r5rMr\r*rtrrr
�test_closed_callWs

"�zClosedConTests.test_closed_callN)r:r;r<rqrurvrwryr}r�r�r�rrrr
ros
roc@rg)�ClosedCurTestsc	Cs�t�d�}|��}|��dD]5}|dvrd}n
|dkr#dddgf}ng}|�tj��t||�}||�Wd�n1s?wYqdS)	Nr4)rFr�r`rr�rb)rFr`)zselect 4 union select 5r�zinsert into foo(bar) values (?)r�rl)r	r5rErMr\r*�getattr)rr]r�Zmethod_name�params�methodrrr
�test_closed^s


���zClosedCurTests.test_closedN)r:r;r<r�rrrr
r�]rkr�c@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!)Nr4zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        r�r
rrr
rIwr"zSqliteOnConflictTests.setUpcCr�rKr�r
rrr
rN�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�r8rwrErHrFr\r	r&rQrrr
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��rHrFr\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 testrC�rHrFrrr
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!rDr�r
rrr
�test_on_conflict_replace�r�z.SqliteOnConflictTests.test_on_conflict_replaceN)
r:r;r<�__doc__rIrNr�r�r�r�r�r�r�rrrr
r�ps	
r�c@s$eZdZedZdd�Zdd�ZdS)�MultiprocessTestsg@�@cCstt�dSrK)rrr
rrr
rN�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�stdout�started)�timeoutzinsert into t values('test')zno error�end)�inputr�)r�CONNECTION_TIMEOUT�
subprocess�Popenr?�
executable�PIPErm�communicaterr��readline�stripr	r5rFr$r��writer�rMZassertIsNone�
returncoder�TimeoutExpired�kill)rZSCRIPT�procr8�excrrr
�&test_ctx_mgr_rollback_if_commit_failed�sH��
�������z8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failedN)r:r;r<rr�rNr�rrrr
r��sr�cCs.tttttttttt	t
g}t�dd�|D��S)NcSsg|]	}t���|��qSr)r=Z
TestLoaderZloadTestsFromTestCase)r�r7rrr
r�#szsuite.<locals>.<listcomp>)
ror�rArKr�r_rr�r�r rrr=Z	TestSuite)Ztestsrrr
�suites�
�r�cCst��}|�t��dSrK)r=ZTextTestRunnerr)r�)Zrunnerrrr
r&sr�__main__)r�r1r=Zsqlite3r	r?Ztest.supportrrZtest.support.os_helperrrZTestCaserrArrr�r rKr_ror�r�r�r�rr:rrrr
�<module>s4EcX4C]G
�