
    daf&                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z
d dlmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZmZmZmZmZ d Ze j>                  ej@                  dfd	       Z! G d
 dejD                        Z# G d dejD                        Z$ G d dejD                        Z% ejL                   e'ejP                  d      d       G d dejD                               Z) G d dejD                        Z* G d dejD                        Z+ G d dejD                        Z, ejZ                          G d dejD                               Z. G d dejD                        Z/ G d dejD                        Z0 G d  d!ejD                        Z1 G d" d#ejD                        Z2 G d$ d%ejD                        Z3 e        G d& d'ejD                               Z4e5d(k(  r ejl                          yy))    N)SHORT_TIMEOUT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        j                  dg| i |}t        j                  |      S N:memory:)sqliteconnect
contextlibclosing)argskwargscxs      7/root/Python-3.12.4/Lib/test/test_sqlite3/test_dbapi.pymemory_databaser   ,   s+    	
	4T	4V	4Bb!!       c              #      K   	 | j                  ||      }| | j                  ||       y # | j                  |       w xY wwN)setlimit)r   categorylimit_prevs       r   cx_limitr'   2   s<     %He,
He$He$s   A- AAAc                       e 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 Zd Zd Zd Zd Z ej(                  ej,                  dk  d      d        Zd Zd Zy)ModuleTestsc                 h    | j                  t        j                  ddt        j                  z         y )Nz2.0zapilevel is %s, should be 2.0)assertEqualr   apilevelselfs    r   test_api_levelzModuleTests.test_api_level<   s%    %86??J	Lr   c                    d}dD ]  }| j                  |      5  | j                  t        |      5 }t        t        |       d d d        | j                  j                  t               | j                  t        |      5 }t        t        j                  |       d d d        | j                  |j                  t               d d d         y # 1 sw Y   xY w# 1 sw Y   @xY w# 1 sw Y   xY w)Nz-deprecated and will be removed in Python 3.14)versionversion_info)attr)	subTestassertWarnsRegexDeprecationWarninggetattrr   r+   filename__file__dbapi2)r.   msgr3   cms       r   test_deprecated_versionz#ModuleTests.test_deprecated_version@   s    =- 	9D4( 9**+=sC *rFD)*  x8**+=sC 1rFMM401  x89 9	9* *1 1	9 9s:   C&C>C& C(C&CC&C#C&&C/	c                 l    | j                  t        j                  h ddt        j                  z         y )N>   r         z'threadsafety is %d, should be 0, 1 or 3)assertInr   threadsafetyr-   s    r   test_thread_safetyzModuleTests.test_thread_safetyK   s)    f))9?))*	+r   c                 h    | j                  t        j                  ddt        j                  z         y )Nqmarkz%paramstyle is '%s', should be 'qmark')r+   r   
paramstyler-   s    r   test_param_stylezModuleTests.test_param_styleP   s+    **G@**+	,r   c                 `    | j                  t        t        j                  t              d       y )Nz&Warning is not a subclass of Exception)
assertTrue
issubclassr   Warning	Exceptionr-   s    r   test_warningzModuleTests.test_warningU   s    
6>>9==	?r   c                 `    | j                  t        t        j                  t              d       y )Nz$Error is not a subclass of Exception)rI   rJ   r   ErrorrL   r-   s    r   
test_errorzModuleTests.test_errorY   s    
6<<;>	@r   c                 t    | j                  t        t        j                  t        j                        d       y )Nz)InterfaceError is not a subclass of Error)rI   rJ   r   InterfaceErrorrO   r-   s    r   test_interface_errorz ModuleTests.test_interface_error]   s%    
6#8#8&,,GC	Er   c                 t    | j                  t        t        j                  t        j                        d       y )Nz(DatabaseError is not a subclass of Error)rI   rJ   r   DatabaseErrorrO   r-   s    r   test_database_errorzModuleTests.test_database_errora   s%    
6#7#7FB	Dr   c                 t    | j                  t        t        j                  t        j                        d       y )Nz,DataError is not a subclass of DatabaseError)rI   rJ   r   	DataErrorrU   r-   s    r   test_data_errorzModuleTests.test_data_errore   s'    
6#3#3V5I5IJF	Hr   c                 t    | j                  t        t        j                  t        j                        d       y )Nz3OperationalError is not a subclass of DatabaseError)rI   rJ   r   OperationalErrorrU   r-   s    r   test_operational_errorz"ModuleTests.test_operational_errori   '    
6#:#:F<P<PQM	Or   c                 t    | j                  t        t        j                  t        j                        d       y )Nz1IntegrityError is not a subclass of DatabaseError)rI   rJ   r   IntegrityErrorrU   r-   s    r   test_integrity_errorz ModuleTests.test_integrity_errorm   s'    
6#8#8&:N:NOK	Mr   c                 t    | j                  t        t        j                  t        j                        d       y )Nz0InternalError is not a subclass of DatabaseError)rI   rJ   r   InternalErrorrU   r-   s    r   test_internal_errorzModuleTests.test_internal_errorq   s'    
6#7#79M9MNJ	Lr   c                 t    | j                  t        t        j                  t        j                        d       y )Nz3ProgrammingError is not a subclass of DatabaseError)rI   rJ   r   ProgrammingErrorrU   r-   s    r   test_programming_errorz"ModuleTests.test_programming_erroru   r]   r   c                 t    | j                  t        t        j                  t        j                        d       y )Nz4NotSupportedError is not a subclass of DatabaseError)rI   rJ   r   NotSupportedErrorrU   r-   s    r   test_not_supported_errorz$ModuleTests.test_not_supported_errory   s*    
6#;#;#)#7#79N	Pr   c                    g d}t         j                  dk\  r|ddgz  }t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       |d	d
gz  }|g dz  }t         j                  dk\  r|g dz  }t         j                  dk\  r|g dz  }t         j                  dk\  r|g dz  }t         j                  dk\  r|ddgz  }t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       t         j                  dk\  r|j                  d       t         j                  dk\  r|g dz  }t         j                  d k\  r|g d!z  }t         j                  d"k\  r|d#d$gz  }t         j                  d%k\  r|d&d'gz  }t         j                  d(k\  r|g d)z  }t         j                  d*k\  r|g d+z  }t         j                  d,k\  r|j                  d-       |D ]<  }| j                  |.      5  | j	                  t        t         |             d d d        > y # 1 sw Y   IxY w)/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)r@         SQLITE_NOTICESQLITE_WARNING)r@      r@   SQLITE_RECURSIVE)r@   r   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r@   r      )
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)r@   r   r   )SQLITE_BUSY_SNAPSHOTSQLITE_IOERR_GETTEMPPATHSQLITE_WARNING_AUTOINDEX)r@   r   r?   SQLITE_CANTOPEN_CONVPATHSQLITE_IOERR_CONVPATH)r@   r      SQLITE_CONSTRAINT_ROWIDSQLITE_READONLY_DBMOVEDSQLITE_AUTH_USER)r@   	   r   SQLITE_IOERR_VNODE)r@   
   r   SQLITE_IOERR_AUTH)r@      r?   SQLITE_OK_LOAD_PERMANENTLY)r@      r   )SQLITE_IOERR_BEGIN_ATOMICSQLITE_IOERR_COMMIT_ATOMICSQLITE_IOERR_ROLLBACK_ATOMIC)r@      r   )SQLITE_ERROR_MISSING_COLLSEQSQLITE_ERROR_RETRYSQLITE_READONLY_CANTINITSQLITE_READONLY_DIRECTORY)r@      r   SQLITE_CORRUPT_SEQUENCESQLITE_LOCKED_VTABr@      r   SQLITE_CANTOPEN_DIRTYWALSQLITE_ERROR_SNAPSHOT)r@      r   )SQLITE_CANTOPEN_SYMLINKSQLITE_CONSTRAINT_PINNEDSQLITE_OK_SYMLINK)r@       r   )SQLITE_BUSY_TIMEOUTSQLITE_CORRUPT_INDEXSQLITE_IOERR_DATA)r@   "   r   SQLITE_IOERR_CORRUPTFS)const)r   sqlite_version_infoappendr4   rI   hasattr)r.   constsr  s      r   test_module_constantsz!ModuleTests.test_module_constants~   s   L
Z %%3(899F%%2MM,-%%2MM78$&677 !
 !	
D %%3  F %%3  F
 %%2  F
 %%213JKKF%%2MM34%%2MM34%%2MM,-%%2MM./%%3MM-.%%3MM67%%3  F
 %%3  F %%302FGGF%%313JKKF%%3  F
 %%3  F
 %%3MM23 	8EE* 8 678 8	88 8s    J77K 	c                    d}t         j                  j                  d      rt        j                  }nt        j
                  }t               5 }| j                  t        j                  |      5 }t        j                  |       d d d        j                  }| j                  |j                  |       | j                  |j                  j                  d             d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)Nunable to open database filewinrq   )sysplatform
startswithr   r   rq   r   assertRaisesRegexrO   r   	exceptionr+   sqlite_errorcoderI   sqlite_errorname)r.   err_msgerr_codedbr<   es         r   test_error_code_on_exceptionz(ModuleTests.test_error_code_on_exception@  s    0<<""5)33H--HZ 	N2''g> #"r"#AQ//:OOA..99:KLM	N 	N# #	N 	Ns%   !C3.C'AC3'C0	,C33C<r   zRequires SQLite 3.7.16 or newerc                    t               5 }|5  |j                  d       d d d        d}| j                  t        j                  |      5 }|j                  d       d d d        j
                  }| j                  |j                  t        j                         | j                  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)Nz&create table t(t integer check(t > 0))zconstraint failedzinsert into t values(-1)r   )
r   executer"  r   r_   r#  r+   r$  r   r%  )r.   conerrmsgr<   excs        r   %test_extended_error_code_on_exceptionz1ModuleTests.test_extended_error_code_on_exceptionN  s      		N# FDEF(F''(=(=vF 8"678,,CS11#;;=S113LM		N 		NF F8 8			N 		Ns:   CB?*C
CAC?C	CC	CC c                     t        j                  d      }t        | t         |d                   t        | t         j                         y )Nr   select 1)r   r   r   typeBlobr.   r   s     r   test_disallow_instantiationz'ModuleTests.test_disallow_instantiation\  s1    ^^J'$T4:+?@$T6;;7r   c                     | j                  t        j                  d             | j                  t        j                  d             y )Nzselect tzcreate table t(t);)assertFalser   complete_statementrI   r-   s    r   test_complete_statementz#ModuleTests.test_complete_statementa  s3    22:>?112FGHr   N)__name__
__module____qualname__r/   r=   rC   rG   rM   rP   rS   rV   rY   r\   r`   rc   rf   ri   r  r*  unittestskipIfr   r  r0  r6  r:   r   r   r)   r)   ;   s    L	9+
,
?@EDHOMLOP
@8DN X__V//:=68
N8
N8
Ir   r)   c                       e 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 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y)ConnectionTestsc                     t        j                  d      | _        | j                  j                         }|j	                  d       |j	                  dd       y )Nr   z4create table test(id integer primary key, name text)!insert into test(name) values (?)foo)r   r   r   cursorr,  r.   cus     r   setUpzConnectionTests.setUph  s>    ..,WW^^


IJ


6Ar   c                 8    | j                   j                          y r"   r   closer-   s    r   tearDownzConnectionTests.tearDownn      r   c                 8    | j                   j                          y r"   r   commitr-   s    r   test_commitzConnectionTests.test_commitq  s    r   c                 l    | j                   j                          | j                   j                          y)zV
        A commit should also work when no changes were made to the database.
        NrQ  r-   s    r   test_commit_after_no_changesz,ConnectionTests.test_commit_after_no_changest  s      	r   c                 8    | j                   j                          y r"   r   rollbackr-   s    r   test_rollbackzConnectionTests.test_rollback{  s    r   c                 l    | j                   j                          | j                   j                          y)zX
        A rollback should also work when no changes were made to the database.
        NrW  r-   s    r   test_rollback_after_no_changesz.ConnectionTests.test_rollback_after_no_changes~  s$     	r   c                 8    | j                   j                         }y r"   r   rG  rH  s     r   test_cursorzConnectionTests.test_cursor  s    WW^^r   c                     d}| j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nz/foo/bar/bla/23534/mydb.db)assertRaisesr   r[   r   )r.   YOU_CANNOT_OPEN_THISs     r   test_failed_openz ConnectionTests.test_failed_open  s>    ;v667 	1NN/0	1 	1 	1s   AA
c                 8    | j                   j                          y r"   rL  r-   s    r   
test_closezConnectionTests.test_close  rO  r   c                    d}| j                   j                         }|j                  |      }| j                   j                          | j	                  t
        j                  |j                         | j	                  t
        j                  |j                  |       | j	                  t
        j                  |j                  |g        | j	                  t
        j                  |j                  |       | j	                  t
        j                  | j                   j                  |       | j	                  t
        j                  | j                   j                  |g        | j	                  t
        j                  | j                   j                  |       | j	                  t
        j                  | j                   j                  ddd        | j	                  t
        j                  | j                   j                         | j	                  t
        j                        5  | j                   5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr2  tr?   c                     | S r"   r@  xs    r   <lambda>z6ConnectionTests.test_use_after_close.<locals>.<lambda>  s    Q r   )r   rG  r,  rM  r`  r   re   fetchallexecutemanyexecutescriptcreate_function)r.   sqlrI  ress       r   test_use_after_closez$ConnectionTests.test_use_after_close  s   WW^^jjo&113<<@&112::sC&112>>3K&1123C3CSI&11477??CH&11''--sB	8&114773H3H#N&11''113;	H&11477>>Bv667 	 	 	 	 	s$   I,H?.I?I	IIc                    | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j
                  t        j
                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         | j                  | j                  j                  t        j                         y r"   )r+   r   rK   r   rO   rR   rU   rX   r[   r_   rb   re   rh   r-   s    r   test_exceptionszConnectionTests.test_exceptions  s:   &..95//1F1FG..0D0DE**F,<,<=1163J3JK//1F1FG..0D0DE1163J3JK22F4L4LMr   c                    t        j                  d      }|j                         }| j                  |j                  d       |j                  d       | j                  |j                  d       |j                  dd       | j                  |j                  d       |j                  ddg       |j                         }| j                  |j                  d       |j                          | j                  |j                  d       |j                  ddg       |j                         }| j                  |j                  d       y )	Nr   Fz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)rE  Tz-select name from transactiontest where name=?rF  )r   r   rG  r+   in_transactionr,  fetchonerR  )r.   r   rI  rows       r   test_in_transactionz#ConnectionTests.test_in_transaction  s    ^^J'YY[**E2


TU**E2


A8L**D1


BUGLkkm**D1
		**E2


BUGLkkm**E2r   c                 z    | j                  t              5  d| j                  _        d d d        y # 1 sw Y   y xY w)NT)r`  AttributeErrorr   ru  r-   s    r   test_in_transaction_roz&ConnectionTests.test_in_transaction_ro  s1    ~. 	*%)DGG"	* 	* 	*s   1:c           	         g d}|D ]v  }| j                  |      5  | j                  t        | j                  |             | j	                  t        t        |      t        | j                  |             d d d        x y # 1 sw Y   xY w)N)	rX   rU   rO   r_   rR   rh   r[   re   rK   )r/  )r4   rI   r  r   assertIsr7   r   )r.   
exceptionsr/  s      r   test_connection_exceptionsz*ConnectionTests.test_connection_exceptions  s    


  	KC#& K 56gfc2GDGGS4IJK K	KK Ks   ABB
	c                     t        j                  d      }|j                          | j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY wr   )r   r   rM  r`  re   	interruptr5  s     r   test_interrupt_on_closed_dbz+ConnectionTests.test_interrupt_on_closed_db  sK    ^^J'

v667 	LLN	 	 	   AA(c                 V    | j                  | j                  j                                y r"   )assertIsNoner   r  r-   s    r   test_interruptzConnectionTests.test_interrupt  s    $''++-.r   c                     t        d      D ]C  }| j                  j                  d|       }| j                  |j	                         d   |       E y )Ni  zselect r   )ranger   r,  r+   rv  )r.   nrI  s      r   test_drop_unused_refsz%ConnectionTests.test_drop_unused_refs  sH    s 	2A71#/BR[[]1-q1	2r   c                    t         j                  }| j                  j                  |      }	 d}| j                  j	                  ||      }| j                  ||       | j                  | j                  j                  |      |       d}| j                  t         j                  || j                  j                  d       | j                  j	                  ||       y # | j                  j	                  ||       w xY w)Nr   query string is too largezselect 1 as '16')	r   r   r   getlimitr#   r+   r"  rX   r,  )r.   r$   saved_limit	new_limit
prev_limitr;   s         r   test_connection_limitsz&ConnectionTests.test_connection_limits  s    11gg&&x0		4I))(I>J[*5TWW--h7C-C""6#3#3S#'77??4FH GGX{3DGGX{3s   BC C;c                     d}d}| j                  t        j                  || j                  j                  |       | j                  t        j                  || j                  j
                  |d       y )Nz'category' is out of boundsiW  r   )r"  r   re   r   r  r#   )r.   r;   cats      r   "test_connection_bad_limit_categoryz2ConnectionTests.test_connection_bad_limit_category  s\    +v66#ww//	6v66#ww//a	9r   c           	         d}d}|D ]  }| j                  |      5  | j                  t        |      5  t        |       d d d        t               5 }| j                  t        |      5  ||_        d d d        | j                  |j                  d       d d d        d d d         y # 1 sw Y   ixY w# 1 sw Y   DxY w# 1 sw Y   ,xY w# 1 sw Y   xY w)NzJisolation_level string must be '', 'DEFERRED', 'IMMEDIATE', or 'EXCLUSIVE')BOGUS DEFERREIMMEDIATEXCLUSIV	DEFERREDS
IMMEDIATES
EXCLUSIVESlevelisolation_level )r4   r"  
ValueErrorr   r  r+   )r.   r;   levelsr  r   s        r   (test_connection_init_bad_isolation_levelz8ConnectionTests.test_connection_init_bad_isolation_level  s     		
  	=EE* =++J< ;#E:;$& ="//
C@ 3-2*3 $$R%7%7<	== =	=; ;3 3= == =sR   CB( CC )B4	1$C C(B1-C4B=9C  C	CC	c                    dD ]  }| j                  |      5  t        |      5 }| j                  |j                  |       d d d        t               5 }| j                  |j                  d       ||_        | j                  |j                  |       d d d        d d d         y # 1 sw Y   fxY w# 1 sw Y    xY w# 1 sw Y   xY w)N)r  DEFERRED	IMMEDIATE	EXCLUSIVENr  r  r  )r4   r   r+   r  )r.   r  r   s      r   *test_connection_init_good_isolation_levelsz:ConnectionTests.test_connection_init_good_isolation_levels  s    E 	@EE* @$U; @r$$R%7%7?@$& @"$$R%7%7<).B&$$R%7%7?@@ @	@@ @@ @@ @s;   B?B'B?A B3B?'B0,B?3B<8B??C	c                 F   d}t        j                  |      }t        |_        t         j                  |_        |j                         }|j                  d       |j                  dd t        d      D               |j                  d       |j                  d      D cg c]  }| }}| j                  t        d |D                     | j                  |D cg c]  }|d	   	 c}d
dg       |j                  |       |j                  d       |j                  dd dD               |j                         D cg c]  }| }}| j                  t        d |D                     | j                  |D cg c]  }|d	   	 c}ddg       y c c}w c c}w c c}w c c}w )Nr   zcreate table foo (bar)z insert into foo (bar) values (?)c              3   4   K   | ]  }t        |      f  y wr"   )str.0vs     r   	<genexpr>z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>'  s     4aQ	4s      zselect bar from foor   c              3   P   K   | ]  }t        |t        j                           y wr"   
isinstancer   Rowr  rs     r   r  z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>+       D!Jq&**5D   $&r      0   1c              3   "   K   | ]  }|f 	 y wr"   r@  r  s     r   r  z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>1  s     ;;   )abcdc              3   P   K   | ]  }t        |t        j                           y wr"   r  r  s     r   r  z9ConnectionTests.test_connection_reinit.<locals>.<genexpr>5  r  r  23)r   r   bytestext_factoryr  row_factoryrG  r,  rl  r  	fetchmanyrI   allr+   __init__rk  )r.   r(  r   rI  r  rowss         r   test_connection_reinitz&ConnectionTests.test_connection_reinit  sQ   ^^BYY[


+,
94584	6


()<<?+a++DtDDE-1!A$-d|<
B


+,
9;&:;	= ;;=)a))DtDDE-1!A$-Sz: ,- *-s   	FF=	F8Fc                    t        j                  d      }|5  |j                  d       d d d        t               5 }| j	                  t         j
                  d|j                  |       | j	                  t         j                  d|j                  dd t        d      D               d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   create table t(t)r  #Base Connection.__init__ not calledzinsert into t values(?)c              3   "   K   | ]  }|f 	 y wr"   r@  r  s     r   r  z=ConnectionTests.test_connection_bad_reinit.<locals>.<genexpr>C  s     #;QQD#;r  r@   )
r   r   r,  r   r"  r[   r  re   rl  r  )r.   r   r(  s      r   test_connection_bad_reinitz*ConnectionTests.test_connection_bad_reinit8  s    ^^J' 	,JJ*+	,Z 	=2""6#:#:#A#%;;4 ""6#:#:#H#%>>3L#;%(#;=		= 	=	, 	,	= 	=s   B/A*B;/B8;Cc                    t         j                  }t               5 }| j                  t        d      5  |j                  d       d d d        |j                  |      }| }|j                  ||       | j                  |j                  |      |       |j                  |       | j                  |j                  |             |5  |j                  d       d d d        | j                  t         j                  d      5  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nunknownz
                    create table t(t integer primary key);
                    create table u(u, foreign key(u) references t(t));
                
constraintzinsert into u values(0))r   SQLITE_DBCONFIG_ENABLE_FKEYr   r"  r  	getconfig	setconfigr+   rI   rm  r_   r,  )r.   opr   oldnews        r   test_connection_configz&ConnectionTests.test_connection_configE  s&   // 	6"''
I> !R ! ,,r"C'CLLS!R\\"-s3LLOOBLL,-     " 
 ''(=(=|L 6

456'	6 	6! ! 
6 6'	6 	6sS   ED#BED/(E D;E#D,	(E/D8	4E;E	 EEN)r;  r<  r=  rJ  rN  rS  rU  rY  r[  r^  rb  rd  rq  rs  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r@  r   r   rB  rB  f  s~    B1
(N3$*K"/2
49=2@;2=6r   rB  c                       e Zd Zd Zd Zy)UninitialisedConnectionTestsc                 h    t         j                  j                  t         j                        | _        y r"   )r   
Connection__new__r   r-   s    r   rJ  z"UninitialisedConnectionTests.setUp_  s     ##++F,=,=>r   c                       fd fd fd fd fd fdf}|D ]>  } j                  |      5   j                  t        j                  d|       d d d        @ y # 1 sw Y   KxY w)	Nc                  0     j                   j                  S r"   )r   r  r-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>d  s    DGG++ r   c                  0     j                   j                  S r"   )r   total_changesr-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>e  s    DGG)) r   c                  0     j                   j                  S r"   )r   ru  r-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>f  s    DGG** r   c                  8     j                   j                         S r"   )r   iterdumpr-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>g  s    DGG$$& r   c                  8     j                   j                         S r"   r]  r-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>h  s    DGGNN$ r   c                  8     j                   j                         S r"   rL  r-   s   r   rj  zEUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>i  s    DGGMMO r   )funcr  )r4   r"  r   re   )r.   funcsr  s   `  r   test_uninit_operationsz3UninitialisedConnectionTests.test_uninit_operationsb  sq    +)*&$#
  	-D4( -&&v'>'>'L'+-- -	-- -s   "A  A)	N)r;  r<  r=  rJ  r  r@  r   r   r  r  ^  s    ?-r   r  	serializezNeeds SQLite serialize APIc                       e Zd Zd Zd Zd Zy)SerializeTestsc                    t               5 }|5  |j                  d       d d d        |j                         }|5  |j                  d       d d d        d}| j                  t        j
                  |      5  |j                  d       d d d        |j                  |       |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   LxY w# 1 sw Y   y xY w)Nr  zdrop table tzno such tablezselect t from t)r   r,  r  r"  r   r[   deserialize)r.   r   dataregexs       r   test_serialize_deserializez)SerializeTests.test_serialize_deserializeu  s     	*" 0

./0<<>D  +

>*+#E''(?(?G .

,-. NN4 JJ()	* 	*0 0
+ +. .	* 	*sP   CB;CC*C6C*C;C	 CC	CC	CC(c                 :   t         t        d      d d d   ft        g ft        dft        d ff}|D ]Q  \  }}| j                  ||      5  t	               5 }| j                  ||j                  |       d d d        d d d        S y # 1 sw Y   xY w# 1 sw Y   jxY w)Ns   blobr   r?   )r/  arg)BufferError
memoryview	TypeErrorr4   r   r`  r  )r.   datasetr/  r  r   s        r   test_deserialize_wrong_argsz*SerializeTests.test_deserialize_wrong_args  s    *W-cc23ON	
   	@HC#3/ @$& @"%%c2>>3?@@ @	@@ @@ @s$   	BB2BB
BB	c                     t               5 }d}| j                  t        j                  |      5  |j	                  d       |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzfile is not a databases    zcreate table fail(f))r   r"  r   rU   r  r,  )r.   r   r  s      r   !test_deserialize_corrupt_databasez0SerializeTests.test_deserialize_corrupt_database  so     	3",E''(<(<eD 3y) 

12	3	3 	33 3	3 	3s"   #A.#A"A."A+	'A..A7N)r;  r<  r=  r  r  r  r@  r   r   r  r  r  s    *"
@3r   r  c                      e Zd ZdZd Z ej                  ej                  dk(  d       ej                  ej                  dk(  d       ej                  e	xs e
d       ej                  ed      d	                             Zd
 Zd Zd Z ej                  ej                  dk(  d       ej                  ej                  dk(  d       ej                  e	xs e
d       ej                  ed      d                             Zd Zd Zy)	OpenTestszcreate table test(id integer)c                    t        t              }| j                  t        |       | j	                  t
        j                  j                  |             t        j                  t        j                  |            5 }| j                  t
        j                  j                  |             |j                  | j                         ddd       y# 1 sw Y   yxY w)z| Checks that we can successfully connect to a database using an object that
            is PathLike, i.e. has __fspath__(). N)r   r   
addCleanupr   r8  ospathexistsr   r   r   r   rI   r,  _sqlr.   r  r   s      r   test_open_with_path_like_objectz)OpenTests.test_open_with_path_like_object  s     %-.t 45 	"OOBGGNN401JJtyy!	" 	" 	"s   <A
CCwin32zskipped on Windowsdarwinzskipped on macOSz not supported on Emscripten/WASIz)only works if there are undecodable pathsc                    t         }| j                  t        |       | j                  t        j
                  j                  |             t        j                  t        j                  |            5 }| j                  t        j
                  j                  |             |j                  | j                         d d d        y # 1 sw Y   y xY wr"   )r   r  r   r8  r  r  r  r   r   r   r   rI   r,  r  r  s      r   test_open_with_undecodable_pathz)OpenTests.test_open_with_undecodable_path  s    
 "%-.t 45 	"OOBGGNN401JJtyy!	" 	" 	"s   3A
CCc                    t         }| j                  t        |       dt        j                  j                  t        j                  |            z   }| j                  t        j                  j                  |             t        j                  t        j                  |d            5 }| j                  t        j                  j                  |             |j!                  | j"                         d d d        y # 1 sw Y   y xY wNfile:Turi)r   r  r   urllibparsequoter  fsencoder8  r  r  r   r   r   r   rI   r,  r  r.   r  r  r   s       r   test_open_urizOpenTests.test_open_uri  s    %**2;;t+<==-.s => 	""OOBGGNN401JJtyy!	" 	" 	"s   *A
C==Dc                    t         }| j                  t        |       d|z   }| j                  t        j
                  j                  |             t        j                  t        j                  |d            5 }| j                  t        j
                  j                  |             |j                  | j                         d d d        y # 1 sw Y   y xY wr  )r   r  r   r8  r  r  r  r   r   r   r   rI   r,  r  r  s       r   test_open_unquoted_uriz OpenTests.test_open_unquoted_uri  s    %n-.s => 	""OOBGGNN401JJtyy!	" 	" 	"s   :A
CCc                    t         }| j                  t        |       dt        j                  j                  t        j                  |            z   dz   }| j                  t        j                  j                  |             | j                  t        j                        5  t        j                  |d       d d d        | j                  t        j                  j                  |             t        j                  |      j                          | j!                  t        j                  j                  |             t#        j$                  t        j                  |d            5 }| j                  t        j                        5  |j'                  | j(                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  z?mode=roTr  )r   r  r   r  r  r  r  r  r8  r  r  r`  r   r[   r   rM  rI   r   r   r,  r  r  s       r   test_open_uri_readonlyz OpenTests.test_open_uri_readonly  sE   %**2;;t+<==
J-.v667 	*NN3D)	*-.t""$t,-s => 	&"""6#:#:; &

499%&	& 	&	* 	*& &	& 	&s0   "F8+ GG'G8GG		GGc                    t         }| j                  t        |       dt        j                  j                  |      z   }| j                  t        j                  j                  |             t        j                  t        j                  |d            5 }| j                  t        j                  j                  |             |j                  | j                          d d d        y # 1 sw Y   y xY wr  )r   r  r   r  r  r  r8  r  r  r  r   r   r   r   rI   r,  r  r  s       r   test_open_undecodable_uriz#OpenTests.test_open_undecodable_uri  s    
 "%**400-.s => 	""OOBGGNN401JJtyy!	" 	" 	"s   A
C**C3c                 (   fd}t         t        j                  t               t        t               t        t        j                  t                     fD ];  }d t	        j
                  ||      j                          | j                  |       = y )Nc                 :    | t        j                  dg|i |S r   )r   r  )databaser   r   database_args      r   factoryz4OpenTests.test_factory_database_arg.<locals>.factory  s#    #L$$ZA$A&AAr   )r#  )r   r  r  r   r   r   rM  r+   )r.   r#  r!  r"  s      @r   test_factory_database_argz#OpenTests.test_factory_database_arg  so    	B
  V!4!&)8BKK4G+HJ 	5HLNN8W5;;=\84		5r   c                     t        j                  t        j                  d            5 }| j	                  t        |      t        j                         d d d        y # 1 sw Y   y xY w)Nr   )r!  )r   r   r   r   r+   r3  r  r5  s     r   test_database_keywordzOpenTests.test_database_keyword  sJ    
 CD 	:T"Xv'8'89	: 	: 	:s   *AA&N)r;  r<  r=  r  r	  r>  r?  r  r   r   r   
skipUnlessr   r  r  r  r  r  r$  r&  r@  r   r   r  r    s)   *D" X__S\\W,.BCX__S\\X-/ABX__]-g/QRX+-XY" Z S C D"""&  X__S\\W,.BCX__S\\X-/ABX__]-g/QRX+-XY" Z S C D"
5:r   r  c                      e 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 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 Zd Zd Zd Zd Zd Z  e!jD                  e#jH                  dk  d       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; Z?d< Z@y=)>CursorTestsc                     t        j                  d      | _        | j                  j                         | _        | j                  j                  d       | j                  j                  dd       y )Nr   z\create table test(id integer primary key, name text, income number, unique_test text unique)rD  rE  r   r   r   rG  rI  r,  r-   s    r   rJ  zCursorTests.setUp  sN    ..,''.."6	
 	;XFr   c                 l    | j                   j                          | j                  j                          y r"   rI  rM  r   r-   s    r   rN  zCursorTests.tearDown      r   c                 :    | j                   j                  d       y )Ndelete from testrI  r,  r-   s    r   test_execute_no_argsz CursorTests.test_execute_no_args  s    *+r   c                     | j                  t        j                        5  | j                  j	                  d       d d d        y # 1 sw Y   y xY w)Nzselect asdf)r`  r   r[   rI  r,  r-   s    r   test_execute_illegal_sqlz$CursorTests.test_execute_illegal_sql  s;    v667 	+GGOOM*	+ 	+ 	+   AAc                    d}d}|D ]a  }| j                  |      5  | j                  t        j                  |      5  | j                  j                  |       d d d        d d d        c y # 1 sw Y   xY w# 1 sw Y   zxY w)Nz,You can only execute one statement at a time)
zselect 1; select 2z)select 1; // c++ comments are not allowedzselect 1; *not a commentzselect 1; -*not a commentzselect 1; /* */ azselect 1; /**/azselect 1; -zselect 1; /zselect 1; -
- select 2zHselect 1;
               -- comment
               select 2
            query)r4   r"  r   re   rI  r,  )r.   r;   r  r8  s       r    test_execute_multiple_statementsz,CursorTests.test_execute_multiple_statements
  s    <
  	+EE* +++F,C,CSI +GGOOE*++ +	++ ++ +s"   !A8A,A8,A51A88B	c                     d}|D ]8  }| j                  |      5  | j                  j                  |       d d d        : y # 1 sw Y   ExY w)N)zselect 1; -- foo barzselect 1; --zselect 1; /*zT
            select 5+4;

            /*
            foo
            */
            r7  )r4   rI  r,  )r.   r  r8  s      r   #test_execute_with_appended_commentsz/CursorTests.test_execute_with_appended_comments   sR    
  	'EE* '&' '	'' 's   AA
	c                     | j                  t              5  | j                  j                  d       d d d        y # 1 sw Y   y xY wN*   )r`  r  rI  r,  r-   s    r   test_execute_wrong_sql_argz&CursorTests.test_execute_wrong_sql_arg1  s5    y) 	 GGOOB	  	  	 s	   ;Ac                 <    | j                   j                  dd       y )Ninsert into test(id) values (?))r>  r1  r-   s    r   test_execute_arg_intz CursorTests.test_execute_arg_int5  s    95Ar   c                 <    | j                   j                  dd       y )N#insert into test(income) values (?))gq=
ף@r1  r-   s    r   test_execute_arg_floatz"CursorTests.test_execute_arg_float8  s    =zJr   c                 <    | j                   j                  dd       y )NrD  )Hugor1  r-   s    r   test_execute_arg_stringz#CursorTests.test_execute_arg_string;  s    ;YGr   c                     | j                   j                  dd       | j                   j                  d| j                   j                  f       | j                   j                         }| j	                  |d   d       y )NrD  )Hu goz select name from test where id=?r   rJ  )rI  r,  	lastrowidrv  r+   r.   rw  s     r   &test_execute_arg_string_with_zero_bytez2CursorTests.test_execute_arg_string_with_zero_byte>  s[    ;]K:TWW=N=N<PQgg Q,r   c                     | j                  t        j                        5 }| j                  j	                  dd       d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)NrA  r>  z"parameters are of unsupported type)r`  r   re   rI  r,  r+   r  r#  )r.   r<   s     r   test_execute_non_iterablez%CursorTests.test_execute_non_iterableE  s^    v667 	C2GGOO=rB	CR\\*,PQ	C 	Cs   A++A4c                     | j                  t        j                        5  | j                  j	                  dd       d d d        y # 1 sw Y   y xY w)NrA  )r   Egonr`  r   re   rI  r,  r-   s    r   test_execute_wrong_no_of_args1z*CursorTests.test_execute_wrong_no_of_args1J  sB    v667 	MGGOO=|L	M 	M 	Ms   AAc                     | j                  t        j                        5  | j                  j	                  d       d d d        y # 1 sw Y   y xY wNrA  rR  r-   s    r   test_execute_wrong_no_of_args2z*CursorTests.test_execute_wrong_no_of_args2O  <    v667 	?GGOO=>	? 	? 	?r5  c                     | j                  t        j                        5  | j                  j	                  d       d d d        y # 1 sw Y   y xY wrU  rR  r-   s    r   test_execute_wrong_no_of_args3z*CursorTests.test_execute_wrong_no_of_args3T  rW  r5  c                     | j                   j                  d       | j                   j                  ddg       | j                   j                         }| j                  |d   d       y )N%insert into test(name) values ('foo')"select name from test where name=?rF  r   rI  r,  rv  r+   rL  s     r   test_execute_param_listz#CursorTests.test_execute_param_listY  sN    ?@<ugFgg Q'r   c                      G d d      }| j                   j                  d       | j                   j                  d |              | j                   j                         }| j                  |d   d       y )Nc                       e Zd Zd Zd Zy)2CursorTests.test_execute_param_sequence.<locals>.Lc                      y)Nr?   r@  r-   s    r   __len__z:CursorTests.test_execute_param_sequence.<locals>.L.__len__a  s    r   c                     |dk(  sJ y)Nr   rF  r@  r.   ri  s     r   __getitem__z>CursorTests.test_execute_param_sequence.<locals>.L.__getitem__c  s    Avvr   Nr;  r<  r=  rc  rf  r@  r   r   Lra  `  s    r   rh  r[  r\  r   rF  r]  )r.   rh  rw  s      r   test_execute_param_sequencez'CursorTests.test_execute_param_sequence_  sZ    	 	 	?@<acBgg Q'r   c                      G d d      }| j                   j                  d       | j                  t              5  | j                   j                  d |              d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zd Zy):CursorTests.test_execute_param_sequence_bad_len.<locals>.Lc                     ddz   y )Nr?   r   r@  r-   s    r   rc  zBCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__len__o  s	    !r   c                     t         r"   )AssertionError)slfri  s     r   rf  zFCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__getitem__q  s    $$r   Nrg  r@  r   r   rh  rl  n  s    %r   rh  r[  r\  )rI  r,  r`  ZeroDivisionError)r.   rh  s     r   #test_execute_param_sequence_bad_lenz/CursorTests.test_execute_param_sequence_bad_lenl  s\    	% 	% 	?@01 	GGGOO@!#F	G 	G 	Gs   "A&&A/c                 >   d}d}|D ]|  \  }}| j                  ||      5  | j                  t        |      5 }| j                  j	                  ||       d d d        | j                  j                  t               d d d        ~ y # 1 sw Y   4xY w# 1 sw Y   xY w)N))z	select :ar?   )zselect :a, ?, ?r?   r   r@   )zselect ?, :b, ?ru  )zselect ?, ?, :cru  )zselect :a, :b, ?ru  zBinding.*is a named parameterr8  params)r4   r5   r6   rI  r,  r+   r8   r9   )r.   r  r;   r8  rw  r<   s         r   %test_execute_named_param_and_sequencez1CursorTests.test_execute_named_param_and_sequencex  s    
 .$ 	9ME6E&9 9**+=sC 3rGGOOE623  x89 9	93 39 9s"   BB(BBBB	c                 p   dD ]  \  }}}| j                  ||      5  t        j                         5  t        j                  dt               | j
                  j                  ||      }|j                         \  }| j                  ||       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)N))zselect ?1, ?2r?   r   rz  )zselect ?2, ?1rz  )r   r?   rv  error)	r4   warningscatch_warningssimplefilterr6   rI  r,  rk  r+   )r.   r8  rw  expectedrI  actuals         r   $test_execute_indexed_nameless_paramsz0CursorTests.test_execute_indexed_nameless_params  s    (
 		7#E68 E&9 7,,. 7))'3EF7B kkmGF$$VX6	77 7			7
7 77 7s#   B,AB B, B)%B,,B5	c                 \   t         j                  }d}t        | j                  |d      5  | j                  j                  dd       | j                  t         j                  |      5  | j                  j                  dd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nztoo many SQL variablesr?   )r$   r%   zselect * from test where id=?rt  z(select * from test where id!=? and id!=?rz  )r   r   r'   r   rI  r,  r"  r[   )r.   r$   r;   s      r   test_execute_too_many_paramsz(CursorTests.test_execute_too_many_params  s    66&dgg: 	(GGOO;TB''(?(?E ( J &((	( 	(( (	( 	(s#   =B"(BB"B	B""B+c                     | j                   j                  d       | j                   j                  dddi       | j                   j                         }| j                  |d   d       y )Nr[  &select name from test where name=:namenamerF  r   r]  rL  s     r   test_execute_dict_mappingz%CursorTests.test_execute_dict_mapping  sP    ?@@65/Rgg Q'r   c                      G d dt               }| j                  j                  d       | j                  j                  d |              | j                  j                         }| j	                  |d   d       y )Nc                       e Zd Zd Zy)8CursorTests.test_execute_dict_mapping_mapping.<locals>.Dc                      yNrF  r@  )r.   keys     r   __missing__zDCursorTests.test_execute_dict_mapping_mapping.<locals>.D.__missing__  s    r   N)r;  r<  r=  r  r@  r   r   Dr    s    r   r  r[  r  r   rF  )dictrI  r,  rv  r+   )r.   r  rw  s      r   !test_execute_dict_mapping_mappingz-CursorTests.test_execute_dict_mapping_mapping  s\    	 	 	?@@!#Fgg Q'r   c                     | j                   j                  d       | j                  t        j                        5  | j                   j                  dddi       d d d        y # 1 sw Y   y xY w)Nr[  z1select name from test where name=:name and id=:idr  rF  rI  r,  r`  r   re   r-   s    r   )test_execute_dict_mapping_too_little_argsz5CursorTests.test_execute_dict_mapping_too_little_args  sZ    ?@v667 	bGGOOORXZ_Q`a	b 	b 	b   A##A,c                     | j                   j                  d       | j                  t        j                        5  | j                   j                  d       d d d        y # 1 sw Y   y xY w)Nr[  r  r  r-   s    r   !test_execute_dict_mapping_no_argsz-CursorTests.test_execute_dict_mapping_no_args  sQ    ?@v667 	FGGOODE	F 	F 	F   A  A)c                     | j                   j                  d       | j                  t        j                        5  | j                   j                  dddi       d d d        y # 1 sw Y   y xY w)Nr[  r\  r  rF  r  r-   s    r   !test_execute_dict_mapping_unnamedz-CursorTests.test_execute_dict_mapping_unnamed  sW    ?@v667 	SGGOO@65/R	S 	S 	Sr  c                 8    | j                   j                          y r"   )rI  rM  r-   s    r   rd  zCursorTests.test_close  rO  r   c                 (   | j                   j                  d       | j                   j                  d       | j                   j                  d       | j                   j                  d       | j                  | j                   j                  d       y )Nr0  r[  zupdate test set name='bar'r   rI  r,  r+   rowcountr-   s    r   test_rowcount_executez!CursorTests.test_rowcount_execute  s`    *+?@?@45))1-r   c                     | j                   j                  d       | j                  | j                   j                  d       y)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.
        zselect 5 union select 6r  Nr  r-   s    r   test_rowcount_selectz CursorTests.test_rowcount_select  s/     	12))2.r   c                     | j                   j                  d       | j                   j                  dg d       | j                  | j                   j                  d       y )Nr0  rD  rt  )r   r@   r@   )rI  r,  rl  r+   r  r-   s    r   test_rowcount_executemanyz%CursorTests.test_rowcount_executemany  sC    *+?AST))1-r   )r@   #   r   zRequires SQLite 3.35.0 or newerc                     | j                   j                  d       | j                  | j                   j                         d   d       | j                  | j                   j                  d       y )Nz7update test set name='bar' where name='foo' returning 1r   r?   )rI  r,  r+   rv  r  r-   s    r   test_rowcount_update_returningz*CursorTests.test_rowcount_update_returning  sQ     	QR))+A.2))1-r   c                    | j                   j                  d       | j                  | j                   j                  d       | j                   j                  d       | j                  | j                   j                  d       | j                   j                  d       | j                  | j                   j                  d       y )NzW
            -- foo
            insert into test(name) values ('foo'), ('foo')
        r   z
            /* -- messy *r /* /* ** *- *--
            */
            /* one more */ insert into test(name) values ('messy')
        r?   z5/* bar */ update test set name='bar' where name='foo'r@   r  r-   s    r   #test_rowcount_prefixed_with_commentz/CursorTests.test_rowcount_prefixed_with_comment  s      	 	))1-  	
 	))1-OP))1-r   c                 B   d}| j                   j                  d|       | j                  | j                   j                  d       | j                  j                          | j                   j                  d       | j                  | j                   j                  d       y )Nr  z"insert into test(income) values(?)r@   vacuumr  )rI  rl  r+   r  r   rR  r,  )r.   r  s     r   test_rowcount_vaccuumz!CursorTests.test_rowcount_vaccuum  sn    !@$G))1-!))2.r   c                     | j                   j                  d       | j                   j                  d       | j                  d| j                  j                  d       y )Nr[  r   z"total changes reported wrong value)r;   )rI  r,  
assertLessr   r  r-   s    r   test_total_changeszCursorTests.test_total_changes  sA    ?@?@477006Z[r   c                 x    | j                   j                  dt        dd      D cg c]  }|f c}       y c c}w )NrD  d   n   )rI  rl  r  re  s     r   test_execute_many_sequencez&CursorTests.test_execute_many_sequence  s1    ARWX[]`RaCbQQDCbcCbs   
7
c                 Z     G d d      }| j                   j                  d |              y )Nc                       e Zd Zd Zd Zd Zy)6CursorTests.test_execute_many_iterator.<locals>.MyIterc                     d| _         y N   )valuer-   s    r   r  z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__init__  s	    
r   c                     | S r"   r@  r-   s    r   __iter__z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__iter__  s    r   c                 p    | j                   dk(  rt        | xj                   dz  c_         | j                   fS )Nr   r?   )r  StopIterationr-   s    r   __next__z?CursorTests.test_execute_many_iterator.<locals>.MyIter.__next__  s-    ::#''JJ!OJ JJ=(r   N)r;  r<  r=  r  r  r  r@  r   r   MyIterr    s    )r   r  rD  rI  rl  )r.   r  s     r   test_execute_many_iteratorz&CursorTests.test_execute_many_iterator   s%    	) 	) 	A68Lr   c                 L    d }| j                   j                  d |              y )Nc               3   6   K   t        d      D ]  } | f 	 y wr  )r  )is    r   mygenz6CursorTests.test_execute_many_generator.<locals>.mygen  s      1X d
s   rD  r  )r.   r  s     r   test_execute_many_generatorz'CursorTests.test_execute_many_generator  s     	 	A57Kr   c                     | j                  t              5  | j                  j                  ddg       d d d        y # 1 sw Y   y xY w)Nr>  r  r`  r  rI  rl  r-   s    r   test_execute_many_wrong_sql_argz+CursorTests.test_execute_many_wrong_sql_arg  s;    y) 	,GGTF+	, 	, 	,s	   =Ac                     | j                  t        j                        5  | j                  j	                  ddg       d d d        y # 1 sw Y   y xY w)Nzselect ?r  )r`  r   re   rI  rl  r-   s    r   test_execute_many_selectz$CursorTests.test_execute_many_select  sA    v667 	4GG
TF3	4 	4 	4s   AAc                     | j                  t              5  | j                  j                  dd       d d d        y # 1 sw Y   y xY w)NrD  r>  r  r-   s    r   test_execute_many_not_iterablez*CursorTests.test_execute_many_not_iterable   s>    y) 	KGG ErJ	K 	K 	Ks	   <Ac                    | j                   j                  d       | j                   j                  dd       | j                   j                  dd       | j                   j                  d       g }| j                   D ]  }|j                  |d           | j                  |d   d       | j                  |d   d	       y )
Nr0  rA  )r  )   zselect id from test order by idr   r  r?   r  )rI  r,  r  r+   )r.   lstrw  s      r   test_fetch_iterzCursorTests.test_fetch_iter$  s    *+94@94@9:77 	CJJs1v	Q#Q#r   c                     | j                   j                  d       | j                   j                         }| j                  |d   d       | j                   j                         }| j                  |d        y )Nselect name from testr   rF  r]  rL  s     r   test_fetchonezCursorTests.test_fetchone0  s[    /0gg Q'gg d#r   c                 |    | j                   j                         }|j                         }| j                  |d        y r"   )r   rG  rv  r+   )r.   currw  s      r   test_fetchone_no_statementz&CursorTests.test_fetchone_no_statement7  s-    ggnnllnd#r   c                    | j                  | j                  j                  d       d| j                  _        | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j	                         }| j                  t        |      d       y )Nr?   r   r0  z#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')r  )r+   rI  	arraysizer,  r  lenr.   rp  s     r   test_array_sizezCursorTests.test_array_size<  s    **A.  	*+=>=>=>/0gg!S1%r   c                     | j                   j                  d       | j                   j                  d      }| j                  t	        |      d       | j                   j                  d      }| j                  |g        y )Nr  r  r?   rI  r,  r  r+   r  r  s     r   test_fetchmanyzCursorTests.test_fetchmanyM  s_    /0gg$S1%gg$b!r   c                     | j                   j                  d       | j                   j                  d      }| j                  t	        |      d       y)z0Checks if fetchmany works with keyword argumentsr  r  )sizer?   Nr  r  s     r   test_fetchmany_kw_argz!CursorTests.test_fetchmany_kw_argT  s>    /0ggS)S1%r   c                     | j                   j                  d       | j                   j                         }| j                  t	        |      d       | j                   j                         }| j                  |g        y )Nr  r?   )rI  r,  rk  r+   r  r  s     r   test_fetchallzCursorTests.test_fetchallZ  s[    /0gg S1%gg b!r   c                 >    | j                   j                  g d       y )N)r@   r  r  )rI  setinputsizesr-   s    r   test_setinputsizeszCursorTests.test_setinputsizesa  s    i(r   c                 <    | j                   j                  dd       y )Nr  r   rI  setoutputsizer-   s    r   test_setoutputsizezCursorTests.test_setoutputsized  s    a#r   c                 :    | j                   j                  d       y r=  r  r-   s    r   test_setoutputsize_no_columnz(CursorTests.test_setoutputsize_no_columng  s    b!r   c                 d    | j                  | j                  j                  | j                         y r"   )r+   rI  
connectionr   r-   s    r   test_cursor_connectionz"CursorTests.test_cursor_connectionj  s     ++TWW5r   c                     | j                  t              5  d }| j                  j                  |      }d d d        y # 1 sw Y   y xY w)Nc                       y r"   r@  r@  r   r   fz1CursorTests.test_wrong_cursor_callable.<locals>.fp  s    Tr   )r`  r  r   rG  )r.   r  r  s      r   test_wrong_cursor_callablez&CursorTests.test_wrong_cursor_callablen  s:    y) 	$''..#C	$ 	$ 	$s	   >Ac                      G d d      } |       }| j                  t              5  t        j                  |      }d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)0CursorTests.test_cursor_wrong_class.<locals>.FooNr;  r<  r=  r@  r   r   Foor  t  s    r   r  )r`  r  r   Cursor)r.   r  rF  r  s       r   test_cursor_wrong_classz#CursorTests.test_cursor_wrong_classs  s?    ey) 	%--$C	% 	% 	%s   AAc                    d}dD ]n  }| j                  |      5  | j                  j                  |j                  |      d       | j	                  | j                  j
                  d       ddd       p y# 1 sw Y   {xY w)zV
        INSERT OR REPLACE and REPLACE INTO should produce the same behavior.
        z+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEREPLACE	statement)r?   rF  r?   N)r4   rI  r,  formatr+   rK  )r.   ro  r  s      r   test_last_row_id_on_replacez'CursorTests.test_last_row_id_on_replacey  su     <9 	7I	2 7

9 5zB  !2!2A67 7	77 7s   AA77B 	c                    | j                   j                  dd       | j                  | j                   j                  d       | j                   j                  dd       | j                  | j                   j                  d       y )Nz2insert or ignore into test(unique_test) values (?))testr   )rI  r,  r+   rK  r-   s    r   test_last_row_id_on_ignorez&CursorTests.test_last_row_id_on_ignore  sf    @	 	**A.@	 	**A.r   c                 h   g }dD ]  }d}| j                  dj                  |            5  | j                  j                  |j                  |      |f       |j	                  || j                  j
                  f       | j                  t        j                        5  | j                  j                  |j                  |      |f       d d d        |j	                  || j                  j
                  f       d d d         g d}| j                  ||       y # 1 sw Y   QxY w# 1 sw Y   ,xY w)N)FAILABORTROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {}r   )r  r   r  r	  r@   r  r
  r  r  )
r4   r  rI  r,  r  rK  r`  r   r_   r+   )r.   resultsr  ro  r  s        r   test_last_row_id_insert_o_rz'CursorTests.test_last_row_id_insert_o_r  s   6 	?IBC(=(=i(HI ?

9 5	|D	477+<+<=>&&v'<'<= IGGOOCJJy$9I<HI	477+<+<=>? ?	?

 	(+I I? ?s$   A3D'-D/D'D$ D''D1	c                 (   d}| j                   j                  |      }t        |j                        }| j                   j                  d       | j                   j                  |      }t        |j                        }| j	                  ||z
  d       y )Nzselect * from testzalter table test add newcolr?   )rI  r,  r  descriptionr+   )r.   selectrp  	old_count	new_counts        r   test_column_countzCursorTests.test_column_count  sm    %ggoof%(	56ggoof%(	Y.2r   c                     t        d      D cg c]  }| j                  j                  d       }}|D ]#  }| j                  |j	                         dg       % y c c}w )Nr@   r2  rt  )r  r   r,  r+   rk  )r.   _cursorsrI  s       r   #test_same_query_in_multiple_cursorsz/CursorTests.test_same_query_in_multiple_cursors  sS    8=aA1477??:.AA 	4BR[[]TF3	4 Bs   "AN)Ar;  r<  r=  rJ  rN  r2  r4  r9  r;  r?  rB  rE  rH  rM  rO  rS  rV  rY  r^  ri  rr  rx  r  r  r  r  r  r  r  rd  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  r  r  r  r  r  r  r  r@  r   r   r)  r)    s]   G,++,'" BKH-R
M
?
?
((
G97(((b
F
S
./.
 X__V//*<68.8.. /\dM"L,4K
$$$
&""&")$"6$
%7/,"	34r   r)  c                       e 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 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 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& Z(d' Z)d( Z*y))*	BlobTestsc                    t        j                  d      | _        | j                  j                  d       d| _        | j                  j                  d| j                  f       | j                  j                  ddd      | _        y )Nr   create table test(b blob)s2   this blob data string is exactly fifty bytes long!zinsert into test(b) values (?)r  r  r?   )r   r   r   r,  r  blobopenblobr-   s    r   rJ  zBlobTests.setUp  s]    ..,34I	8499,GGG$$VS!4	r   c                 l    | j                   j                          | j                  j                          y r"   )r  rM  r   r-   s    r   rN  zBlobTests.tearDown  s    		r   c                 X    | j                  | j                  t        j                         y r"   )assertIsInstancer  r   r4  r-   s    r   test_blob_is_a_blobzBlobTests.test_blob_is_a_blob  s    dii5r   c                 J   | j                   j                  d       | j                  | j                   j                         d       | j                   j                  dt               | j                  | j                   j                         d       | j                   j                  dt
               | j                  | j                   j                         d       | j                   j                  dt               | j                  | j                   j                         d       y )Nr      (   )r  seekr+   tellr   r   r   r-   s    r   test_blob_seek_and_tellz!BlobTests.test_blob_seek_and_tell  s    		r)2.		r8$)2.		r8$)2.		sH%)2.r   c                 x    d}d}d}t         | fdft         | fdft         | fdft         | fdff}|D ]6  \  }}} j                  |||      5   j                  |||       d d d        8  j                  j	                  d	t
                j                  t        |      5   j                  j	                  t        t               d d d         j                  t        |      5   j                  j	                  t        t               d d d        y # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)
Nzoffset out of blob rangez;'origin' should be os.SEEK_SET, os.SEEK_CUR, or os.SEEK_ENDzseek offset results in overflowc                  :     j                   j                  d      S )N  r  r(  r-   s   r   rj  z0BlobTests.test_blob_seek_error.<locals>.<lambda>  s    $))..*> r   c                  :     j                   j                  d      S )Nr&  r.  r-   s   r   rj  z0BlobTests.test_blob_seek_error.<locals>.<lambda>  s    $))..*= r   c                  <     j                   j                  dd      S )Nr   r  r.  r-   s   r   rj  z0BlobTests.test_blob_seek_error.<locals>.<lambda>  s    499>>"b+A r   c                  <     j                   j                  dd      S )Nr   r@   r.  r-   s   r   rj  z0BlobTests.test_blob_seek_error.<locals>.<lambda>  s    499>>"a+@ r   )r/  r;   fnr?   )
r  r4   r"  r  r(  r   OverflowErrorr	   r   r   )r.   msg_oormsg_origmsg_ofr  r/  r;   r2  s   `       r   test_blob_seek_errorzBlobTests.test_blob_seek_error  s#   ,P2 ">?"=>#AB#@A	
 $ 	5LCb#326 5&&sC45 5	5
 			q(###M6: 	.IINN7H-	.##M6: 	.IINN7H-	. 	.5 5
	. 	.	. 	.s$   D'%D$*%D0D!	$D-0D9c                 p    | j                   j                         }| j                  || j                         y r"   )r  readr+   r  r.   bufs     r   test_blob_readzBlobTests.test_blob_read  s&    iinndii(r   c                     | j                   j                  t        | j                        dz        }| j	                  || j                         y )Nr   )r  r9  r  r  r+   r:  s     r   test_blob_read_oversizedz"BlobTests.test_blob_read_oversized  s5    iinnS^a/0dii(r   c                     d}| j                   j                  |      }| j                  || j                  d |        | j                  | j                   j	                         |       y )Nr   )r  r9  r+   r  r)  )r.   r  r;  s      r   test_blob_read_advance_offsetz'BlobTests.test_blob_read_advance_offset  sN    iinnQdiim,)1-r   c                     | j                   j                  d       | j                  | j                   j                  d      | j                  dd        y )Nr   r%  )r  r(  r+   r9  r  r-   s    r   test_blob_read_at_offsetz"BlobTests.test_blob_read_at_offset  s:    		r+TYYr"-=>r   c                     | j                   j                  d       | j                  t        j                        5  | j
                  j                          d d d        y # 1 sw Y   y xY w)N&update test set b='aaaa' where rowid=1)r   r,  r`  r   r[   r  r9  r-   s    r    test_blob_read_error_row_changedz*BlobTests.test_blob_read_error_row_changed  sJ    @Av667 	IINN	 	 	s   AA(c                     dj                  d      }| j                  j                  |       | j                  j	                  d      j                         }| j                  |d   |       y )Ns   new data2   select b from testr   )ljustr  writer   r,  rv  r+   r.   new_datarw  s      r   test_blob_writezBlobTests.test_blob_write  sR    $$R(		!ggoo23<<>Q*r   c                    d}| j                   j                  d       | j                   j                  |       | j                  j	                  d      j                         }| j                  |d   | j                  d d |z          y )Ns   cccccccccccccccccccccccccr	  rH  r   )r  r(  rJ  r   r,  rv  r+   r  rK  s      r   test_blob_write_at_offsetz#BlobTests.test_blob_write_at_offset  sf    		r		!ggoo23<<>Q3B(!:;r   c                     | j                   j                  d       | j                  | j                   j                         d       y )Ns
   ddddddddddr   )r  rJ  r+   r)  r-   s    r   test_blob_write_advance_offsetz(BlobTests.test_blob_write_advance_offset  s-    		 )2.r   c                    | j                  t        d      5  | j                  j                  d       d d d        | j                  j	                  dt
               t        | j                        }| j                  j                  d|dz
  z         | j                  j                  d       | j                  t        d      5  | j                  j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzdata longer than blob  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar      ar?   )r"  r  r  rJ  r(  r   r  )r.   r  s     r   test_blob_write_error_lengthz&BlobTests.test_blob_write_error_length	  s    ##J0GH 	)IIOOK(	) 			q(#		N		!%		##J0GH 	"IIOOD!	" 	"	) 	)	" 	"s   C'C3'C03C<c                     | j                   j                  d       | j                  t        j                        5  | j
                  j                  d       d d d        y # 1 sw Y   y xY w)NrD     aaa)r   r,  r`  r   r[   r  rJ  r-   s    r   !test_blob_write_error_row_changedz+BlobTests.test_blob_write_error_row_changed  sL    @Av667 	$IIOOF#	$ 	$ 	$r  c                     | j                   j                  dddd      }| j                  t        j                  d      5  |j                  d       d d d        |j                          y # 1 sw Y   xY w)Nr  r  r?   T)readonlyrZ  rW  )r   r  r"  r   r[   rJ  rM  )r.   ro_blobs     r   test_blob_write_error_readonlyz(BlobTests.test_blob_write_error_readonly  s_    ''""63D"A##F$;$;ZH 	"MM&!	"	" 	"s    A++A4c                 .   dddifdi fdi fdi ff}d}|D ]f  \  }}| j                  ||      5  | j                  t        j                  |      5   | j                  j
                  |i | d d d        d d d        h y # 1 sw Y   xY w# 1 sw Y   xY w)	N)r  r  r?   r  notexisting)r^  r  r?   )r  r^  r?   )r  r  r   zno such)r   kwds)r4   r"  r   r[   r   r  )r.   r  r  r   r_  s        r   test_blob_open_errorzBlobTests.test_blob_open_error  s    67$b)',r"	
 ! 	4JD$4d3 4++F,C,CUK 4$DGG$$d3d344 4	44 44 4s#   !BA?,B?BBB	c                 N    | j                  t        | j                        d       y )NrG  )r+   r  r  r-   s    r   test_blob_lengthzBlobTests.test_blob_length,  s    TYY,r   c                    | j                  | j                  d   t        d             | j                  | j                  d   t        d             | j                  | j                  d   t        d             | j                  | j                  d   t        d             | j                  | j                  d   t        d	             y )
Nr  r  r  lr   or   r  !)r+   r  ordr-   s    r   test_blob_get_itemzBlobTests.test_blob_get_item/  s    1s3x01s3x01s3x01s3x02C1r   c                     t        d      | j                  d<   d| j                  dd  z   }| j                  j	                  d      j                         d   }| j                  ||       y )Nr  r      br?   rH  )rg  r  r  r   r,  rv  r+   r.   r  r  s      r   test_blob_set_itemzBlobTests.test_blob_set_item6  sX    3x		!$))AB-'!56??A!D*r   c                    | j                   j                  dt               | j                  | j                   j	                         d       t        d      | j                   d<   t        d      | j                   d<   | j                   j                  dt               d}| j                  | j                   j	                         |       y )Nr   r   T.r  s2   This blob data string is exactly fifty bytes long.)r  r(  r   r+   r9  rg  r   )r.   r  s     r   test_blob_set_item_with_offsetz(BlobTests.test_blob_set_item_with_offset<  s    		q(#)3/3x		!C		"		q(#H)84r   c                 Z   ddl m } t        d      | j                  dd | j                  | j                  dd d       t	        d      | j                  dd | j                  | j                  dd d        |dg d      | j                  dd | j                  | j                  dd d       y )	Nr   )array   12345r  s   23456r  )r?   r   r@   r  r  s   )rr  r  r  r+   	bytearray)r.   rr  s     r   !test_blob_set_slice_buffer_objectz+BlobTests.test_blob_set_slice_buffer_objectE  s    #H-		!A1Q2"8,		!A1Q2sO4		!A1Q)@Ar   c                 `    d| j                   d<   | j                  | j                   d   d       y )N   r  )r  r+   r-   s    r   !test_blob_set_item_negative_indexz+BlobTests.test_blob_set_item_negative_indexP  s'    		"2,r   c                 B    | j                  | j                  dd d       y )Nr  r   s	   blob datar+   r  r-   s    r   test_blob_get_slicezBlobTests.test_blob_get_sliceT  s    1R,7r   c                 B    | j                  | j                  dd d       y )Nr  r   rz  r-   s    r   test_blob_get_empty_slicez#BlobTests.test_blob_get_empty_sliceW  s    1Q-r   c                 \    | j                  | j                  dd | j                  dd        y )Nr  )r+   r  r  r-   s    r   "test_blob_get_slice_negative_indexz,BlobTests.test_blob_get_slice_negative_indexZ  s&    1R$))Ab/:r   c                 H    | j                  | j                  ddd   d       y )Nr   r   r   s   ti lbrz  r-   s    r   test_blob_get_slice_with_skipz'BlobTests.test_blob_get_slice_with_skip]  s!    1R6*H5r   c                     d| j                   dd d| j                  dd  z   }| j                  j                  d      j	                         d   }| j                  ||       y )Nrs  r   r  rH  )r  r  r   r,  rv  r+   rk  s      r   test_blob_set_slicezBlobTests.test_blob_set_slice`  sV    !		!Adiim+!56??A!D*r   c                 t    d| j                   dd | j                  | j                   d d  | j                         y )Nr   r   )r  r+   r  r-   s    r   test_blob_set_empty_slicez#BlobTests.test_blob_set_empty_slicef  s-    		!A1tyy1r   c                     d| j                   ddd<   | j                  j                  d      j                         d   }d| j                  dd  z   }| j                  ||       y )Nrs  r   r   r   rH  s
   1h2s3b4o5 )r  r   r,  rv  r  r+   )r.   r  r  s      r   test_blob_set_slice_with_skipz'BlobTests.test_blob_set_slice_with_skipj  s[    $		!Bq&!56??A!D 499RS>1*r   c                 d   d}| j                  t        |      5  | j                  dd  d d d        | j                  t        |      5  | j                  d    d d d        | j                  t        |      5  d| j                  d<   d d d        y # 1 sw Y   fxY w# 1 sw Y   DxY w# 1 sw Y   y xY w)Nzindices must be integersr  g      @g      ?rj  r  r"  r  r  )r.   r;   s     r   $test_blob_mapping_invalid_index_typez.BlobTests.test_blob_mapping_invalid_index_typep  s    (##Is3 	IIa	##Is3 	IIcN	##Is3 	"!DIIcN	" 	"		 		 		" 	"s#   BB5B&BB#&B/c                 <   t        | j                        ddg}|D ]K  }| j                  |      5  | j                  t        d      5  | j                  |    d d d        d d d        M | j                  t        d      5  | j                  t
            d d d        | j                  j                  d       | j                  t        j                        5  | j                  d    d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   txY w# 1 sw Y   y xY w)Ni   i)idxzindex out of rangezcannot fit 'int'rD  r   )r  r  r4   r"  
IndexErrorr
   r   r,  r`  r   r[   )r.   r  r  s      r   test_blob_get_item_errorz"BlobTests.test_blob_get_item_errory  s    tyy>3- 	#C#& #++J8LM #IIcN## #	# ##J0BC 	"IIj!	" 	@Av667 	IIaL	 	# ## #	" 	"
	 	s;   C:C.C:?DD.C73C::D	DDc                    | j                  t        d      5  d| j                  d<   d d d        | j                  t        d      5  d| j                  d<   d d d        | j                  t        d      5  t        d      | j                  d<   d d d        | j                  t        d      5  | j                  d= d d d        | j                  t        d      5  d| j                  d<   d d d        | j                  t
        d      5  d	| j                  d<   d d d        | j                  t
        d      5  d
| j                  d<   d d d        | j                  t
        d      5  ddz  | j                  d<   d d d        y # 1 sw Y   WxY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nzcannot be interpreteds   multipler   r  doesn't support.*deletionzBlob index out of ranger-  zmust be in ranger     r   A   )r"  r  r  rt  r  r  r-   s    r   test_blob_set_item_errorz"BlobTests.test_blob_set_item_error  s   ##I/FG 	'&DIIaL	'##I/FG 	 DIIaL	 ##I/FG 	+$T?DIIaL	+##I/JK 			!	##J0IJ 	 DIIdO	 ##J0BC 	DIIaL	##J0BC 	DIIaL	 ##J0BC 	!b5DIIaL	! 	!	' 	'	  	 	+ 	+	 		  	 	 		 		! 	!s_   E<F	3F*F#F/F;2G G<F	FF #F,/F8;GGGc                 j   | j                  t        d      5  d| j                  dd d d d        | j                  t        d      5  d| j                  dd d d d        | j                  t        d      5  | j                  dd= d d d        | j                  t        d      5  d| j                  ddd	<   d d d        | j                  t              5  t        d
      d d d   | j                  dd d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   y xY w)Nz
wrong sizerT  r  r   rS  r  zstep cannot be zerors  r   s   abcder   )r"  r  r  r  r  r`  r  r  r-   s    r   test_blob_set_slice_errorz#BlobTests.test_blob_set_slice_error  s   ##J= 	#"DIIaO	###J= 	*)DIIaO	*##I/JK 	 		!B$	 ##J0EF 	) (DIIa1f	){+ 	8(23Q37DIIaO	8 	8	# 	#	* 	*	  	 	) 	)	8 	8s;   C9D3D!DD)9DDDD&)D2c                 r   | j                  t        d      5  | j                  | j                  z    d d d        | j                  t        d      5  | j                  dz   d d d        | j                  t        d      5  d| j                  v  d d d        y # 1 sw Y   exY w# 1 sw Y   CxY w# 1 sw Y   y xY w)Nzunsupported operandr  zis not iterablerT  r  r-   s    r    test_blob_sequence_not_supportedz*BlobTests.test_blob_sequence_not_supported  s    ##I/DE 	"II		!	"##I/DE 	IIM	##I/@A 	DII	 			" 	"	 		 	s#   BB!=B-B!B*-B6c                    d}| j                   j                  ddd      5 }|j                  |       d d d        | j                   j                  d      j	                         d   }| j                  ||       | j                  t        j                  d      5  j                          d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns2   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r  r?   rH  r   zclosed blob)
r   r  rJ  r,  rv  r+   r"  r   re   r9  )r.   r  r  r  s       r   test_blob_context_managerz#BlobTests.test_blob_context_manager  s    WWfc1- 	JJt	!56??A!D& ##F$;$;]K 	IIK	 		 		 	s   B2B>2B;>Cc                      G d dt               }| j                  |d      5  | j                  j                  ddd      5 } |d      # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)NBlobTests.test_blob_context_manager_reraise_exceptions.<locals>.DummyExceptionNr  r@  r   r   DummyExceptionr    s    r   r  reraisedr  r  r?   )rL   r"  r   r  )r.   r  r  s      r   ,test_blob_context_manager_reraise_exceptionsz6BlobTests.test_blob_context_manager_reraise_exceptions  sk    	Y 	##NJ? 	1!!&#q1 1T$Z001 1 1	1 	1 	1s   A 	A		A	AA(c                    t               5 }|j                  d       |j                  d       |j                  ddd      }|j                          d}| j	                  t
        j                  |      5  |j                          d d d        | j	                  t
        j                  |      5  |j                  d       d d d        | j	                  t
        j                  |      5  |j                  d       d d d        | j	                  t
        j                  |      5  |j                          d d d        | j	                  t
        j                  |      5  |j                          d d d        | j	                  t
        j                  |      5  |j                  d d d        d d d        | j	                  t
        j                  |      5  t        |       d d d        | j	                  t
        j                  |      5  |d    d d d        | j	                  t
        j                  |      5  |dd  d d d        | j	                  t
        j                  |      5  d|d<   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nr  z'insert into test values (zeroblob(100))r  r  r?   zCannot operate on a closed blobr   r   )r   r,  r  rM  r"  r   re   r9  rJ  r(  r)  	__enter____exit__r  )r.   r   r  r;   s       r   test_blob_closedzBlobTests.test_blob_closed  sn    	"JJ23JJ@A;;vsA.DJJL3C''(?(?E 		''(?(?E  

3 ''(?(?E 		!''(?(?E 		''(?(?E ! !''(?(?E 0dD$/0''(?(?E D	''(?(?E Q''(?(?E Qq	''(?(?E Q3	 	      ! !0 0    3	 	s   A(K33I5(K3,J>(K3&J8(K3 J1(K3J)*(K3J6&(K3K(K3K(K30K6(K3K'$K35I?	:K3J	K3J	K3J&	!K3)J3	.K36K 	;K3K	K3K	K3K$	 K3'K0	,K33K<c                 "   t               5 }|j                  d       |j                  d       |j                  ddd      }|j                          | j	                  t
        j                  d|j                         d d d        y # 1 sw Y   y xY w)Nr  z*insert into test(b) values (zeroblob(100))r  r  r?   z#Cannot operate on a closed database)r   r,  r  rM  r"  r   re   r9  )r.   r   r  s      r   test_blob_closed_db_readz"BlobTests.test_blob_closed_db_read  st     	."JJ23JJCD;;vsA.DHHJ""6#:#:#H#'99.	. 	. 	.s   A1BBc                     t               5 }d}|j                  d       |j                  d|f       |j                  dd|       d d d        y # 1 sw Y   y xY w)Nl        zcreate table t(t blob)z/insert into t(rowid, t) values (?, zeroblob(1))rf  )r   r,  r  )r.   r   rowids      r   test_blob_32bit_rowidzBlobTests.test_blob_32bit_rowid  sR     	)"EJJ/0JJH5(SKKS%(		) 	) 	)s   :AAN)+r;  r<  r=  rJ  rN  r#  r*  r7  r<  r>  r@  rB  rE  rM  rO  rQ  rU  rX  r\  r`  rb  rh  rl  rp  ru  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  r   r   r  r    s    56/.,)).?
+</	"$
4-2+5	B-8.;6+2+"!&
8	1:.)r   r  c                   l    e Zd Zd Zd Zej                  d        Zd Zd Z	ej                  d        Z
y)ThreadTestsc                     t        j                  d      | _        | j                  j                         | _        | j                  j                  d       | j                  j                  d       y )Nr   z$create table test(name text, b blob)z,insert into test values('blob', zeroblob(1)))r   r   r-  rG  r  r,  r-   s    r   rJ  zThreadTests.setUp  sJ    >>*-88??$?@GHr   c                 l    | j                   j                          | j                  j                          y r"   )r  rM  r-  r-   s    r   rN  zThreadTests.tearDown  s    r   c                     fd}g }t        j                  |d|i      }|j                          |j                          |r!| j	                  dj                  |             y y )Nc                     	  i  | j                  d       y # t        j                  $ r Y y  | j                  d       Y y xY w)Nzdid not raise ProgrammingErrorzraised wrong exception)r  r   re   )errr   r2  r_  s    r   runz"ThreadTests._run_test.<locals>.run  sG    5D!D!

;<** 5

34s    AAr  targetr   
)	threadingThreadstartjoinfail)r.   r2  r   r_  r  r  rf  s    ```   r   	_run_testzThreadTests._run_test  sS    	5 C=			IIdiin% r   c                      fd fd fd fd fd fd fd fd fd	 fd
g
}t        t        j                  d      r(|j                   fd       |j                   fd       t        j                  dk\  r|j                   fd       |D ].  } j                  |      5   j                  |       d d d        0 y # 1 sw Y   ;xY w)Nc                  8     j                   j                         S r"   )r-  rG  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>      DHHOO% r   c                  8     j                   j                         S r"   )r-  rR  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  r  r   c                  8     j                   j                         S r"   )r-  rX  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>      DHH%%' r   c                  8     j                   j                         S r"   )r-  rM  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>      DHHNN$ r   c                  :     j                   j                  d       S r"   )r-  set_trace_callbackr-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH//5 r   c                  :     j                   j                  d       S r"   )r-  set_authorizerr-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH++D1 r   c                  <     j                   j                  dd       S r  )r-  create_collationr-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH--eT: r   c                  X     j                   j                  t        j                  d      S )Nr  )r-  r#   r   r   r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH%%f&@&@"E r   c                  V     j                   j                  t        j                        S r"   )r-  r  r   r   r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH%%f&@&@A r   c                  >     j                   j                  ddd      S )Nr  r  r?   )r-  r  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    DHH%%fc15 r   r  c                  8     j                   j                         S r"   )r-  r  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    txx113 r   c                  :     j                   j                  d      S )Nr   )r-  r  r-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>  s    txx33C8 r   r  c                  >     j                   j                  ddd       S )NrF  r   )r-  create_window_functionr-   s   r   rj  z:ThreadTests.test_check_connection_thread.<locals>.<lambda>   s    txx>>uaN r   r2  )r  r   r  r  r  r4   r  r.   fnsr2  s   `  r   test_check_connection_threadz(ThreadTests.test_check_connection_thread  s    %%'$51:EA5
 6$$k2JJ34JJ89%%3JJNO 	#B$ #r"# #	## #s   ,C		C	c                       fd fd fd fdg}|D ].  } j                  |      5   j                  |       d d d        0 y # 1 sw Y   ;xY w)Nc                  :     j                   j                  d      S )Nz"insert into test(name) values('a')r  r,  r-   s   r   rj  z6ThreadTests.test_check_cursor_thread.<locals>.<lambda>(  s    DHH$$%IJ r   c                  8     j                   j                         S r"   )r  rM  r-   s   r   rj  z6ThreadTests.test_check_cursor_thread.<locals>.<lambda>)  r  r   c                  :     j                   j                  d      S )Nr  r  r-   s   r   rj  z6ThreadTests.test_check_cursor_thread.<locals>.<lambda>*  s    DHH$$%<= r   c                  8     j                   j                         S r"   )r  rv  r-   s   r   rj  z6ThreadTests.test_check_cursor_thread.<locals>.<lambda>+  r  r   r  )r4   r  r  s   `  r   test_check_cursor_threadz$ThreadTests.test_check_cursor_thread&  s[    J$='	
  	#B$ #r"# #	## #s   AA	c                    d }t        j                  dd      }g }t        j                  |||d      }|j	                          |j                          | j                  t        |      ddj                  |             y )	Nc                 |    	 | j                  d       y # t        j                  $ r |j                  d       Y y w xY w)Nr2  zmulti-threading not allowed)r,  r   rO   r  r-  r  s     r   r  z4ThreadTests.test_dont_check_same_thread.<locals>.run4  s3    :J'<< :

89:s    $;;r   F)check_same_threadr  r  r   r  )r   r   r  r  r  r  r+   r  )r.   r  r-  r  rf  s        r   test_dont_check_same_threadz'ThreadTests.test_dont_check_same_thread2  se    	: nnZ5ACC0HI			S1diin5r   N)r;  r<  r=  rJ  rN  r   reap_threadsr  r  r  r  r@  r   r   r  r    sK    I ""& #&"#.	# ""6 #6r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	ConstructorTestsc                 2    t        j                  ddd      }y )N  r      )r   Dater.   r  s     r   	test_datezConstructorTests.test_dateC  s    KKb"%r   c                 2    t        j                  ddd      }y )N   '   r  )r   Timer.   rf  s     r   	test_timezConstructorTests.test_timeF  s    KKB#r   c                 8    t        j                  dddddd      }y )Nr  r   r  r  r  r  )r   	Timestampr.   tss     r   test_timestampzConstructorTests.test_timestampI  s    dBBB7r   c                 .    t        j                  d      }y r=  )r   DateFromTicksr  s     r   test_date_from_ticksz%ConstructorTests.test_date_from_ticksL        $r   c                 .    t        j                  d      }y r=  )r   TimeFromTicksr  s     r   test_time_from_ticksz%ConstructorTests.test_time_from_ticksO  r  r   c                 .    t        j                  d      }y r=  )r   TimestampFromTicksr  s     r   test_timestamp_from_ticksz*ConstructorTests.test_timestamp_from_ticksR  s    &&r*r   c                 .    t        j                  d      }y )Ns    ')r   Binary)r.   r  s     r   test_binaryzConstructorTests.test_binaryU  s    MM&!r   N)
r;  r<  r=  r  r  r  r  r  r  r  r@  r   r   r  r  B  s%    &$8%%+"r   r  c                   N    e 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y)ExtensionTestsc                     t        j                  d      }|j                         }|j                  d       |j	                  d       |j                         d   }| j                  |d       y )Nr   z
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from ar   r  )r   r   rG  rm  r,  rv  r+   )r.   r-  r  rp  s       r   test_script_string_sqlz%ExtensionTests.test_script_string_sqlY  s]    nnZ(jjl  	 	%&llnQa r   c                     t        j                  d      }|j                         }| j                  t         j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   z1create table test(x); asdf; create table test2(x)r   r   rG  r`  r[   rm  r.   r-  r  s      r   test_script_syntax_errorz'ExtensionTests.test_script_syntax_errorf  sW    nnZ(jjlv667 	SQR	S 	S 	S   A  A)c                     t        j                  d      }|j                         }| j                  t         j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   z5create table test(sadfsadfdsa); select foo from hurz;r  r  s      r   test_script_error_normalz'ExtensionTests.test_script_error_normall  sW    nnZ(jjlv667 	WUV	W 	W 	Wr
  c                     t        j                  d      }|j                         }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   s9   create table test(foo); insert into test(foo) values (5);)r   r   rG  r`  r  rm  r  s      r   "test_cursor_executescript_as_bytesz1ExtensionTests.test_cursor_executescript_as_bytesr  sQ    nnZ(jjly) 	\Z[	\ 	\ 	\   AAc                     t        j                  d      }|j                         }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   zb
                create table a(i); 
                insert into a(i) values (5);
                )r   r   rG  r`  r  rm  r  s      r   .test_cursor_executescript_with_null_charactersz=ExtensionTests.test_cursor_executescript_with_null_charactersx  sQ    nnZ(jjlz* 	  	 	 	r  c                     t        j                  d      }|j                         }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   ue   
                create table a(s);
                insert into a(s) values ('');
                )r   r   rG  r`  UnicodeEncodeErrorrm  r  s      r   )test_cursor_executescript_with_surrogatesz8ExtensionTests.test_cursor_executescript_with_surrogates  sR    nnZ(jjl12 	  	 	 	r  c           	      v   d}t               5 }t        |      5 }|j                  dj                  |             | j	                  t
        j                  |      5  |j                  dj                  |dz                d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  zselect 'almost too large'zselect 'too large'r?   )r   r'   rm  rI  r"  r   rX   )r.   r;   r   lims       r   *test_cursor_executescript_too_large_scriptz9ExtensionTests.test_cursor_executescript_too_large_script  s    ) 	D"hrl 	Dc8>>sCD''(8(8#> D  !5!;!;CE!BCD	D 	D 	DD D	D 	D 	D 	Ds;   B/AB#$B>B#B/B B##B,	(B//B8c                     t        j                  d      }|j                  d       | j                  |j                         |j                  d       | j                  |j                         y )Nr   beginr2  )r   r   r,  rI   ru  rm  r8  r.   r-  s     r   $test_cursor_executescript_tx_controlz3ExtensionTests.test_cursor_executescript_tx_control  sP    nnZ(G**+*%++,r   c                     t        j                  d      }|j                  d      j                         d   }| j	                  |dd       y )Nr   zselect 5r   r  z Basic test of Connection.execute)r   r   r,  rv  r+   r.   r-  results      r   test_connection_executez&ExtensionTests.test_connection_execute  s?    nnZ(Z(113A6$FGr   c                    t        j                  d      }|j                  d       |j                  dddg       |j                  d      j	                         }| j                  |d   d   dd	       | j                  |d
   d   dd	       y )Nr   zcreate table test(foo)z insert into test(foo) values (?)r  r  z!select foo from test order by foor   r@   z$Basic test of Connection.executemanyr?   r  )r   r   r,  rl  rk  r+   r  s      r   test_connection_executemanyz*ExtensionTests.test_connection_executemany  s~    nnZ(,-:T4LI@AJJL1q*PQ1q*PQr   c                     t        j                  d      }|j                  d       |j                  d      j	                         d   }| j                  |dd       y )Nr   z9create table test(foo); insert into test(foo) values (5);zselect foo from testr   r  z&Basic test of Connection.executescript)r   r   rm  r,  rv  r+   r  s      r   test_connection_executescriptz,ExtensionTests.test_connection_executescript  sO    nnZ(UV34==?B$LMr   N)r;  r<  r=  r  r	  r  r  r  r  r  r  r  r"  r$  r@  r   r   r  r  X  s@    !SW\D-H
RNr   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)ClosedConTestsc                     t        j                  d      }|j                          | j                  t         j                        5  |j                         }d d d        y # 1 sw Y   y xY wr   )r   r   rM  r`  re   rG  r  s      r   test_closed_con_cursorz%ClosedConTests.test_closed_con_cursor  sM    nnZ(		v667 	**,C	 	 	r  c                     t        j                  d      }|j                          | j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY wr   )r   r   rM  r`  re   rR  r  s     r   test_closed_con_commitz%ClosedConTests.test_closed_con_commit  sK    nnZ(		v667 	JJL	 	 	r  c                     t        j                  d      }|j                          | j                  t         j                        5  |j                          d d d        y # 1 sw Y   y xY wr   )r   r   rM  r`  re   rX  r  s     r   test_closed_con_rollbackz'ClosedConTests.test_closed_con_rollback  sK    nnZ(		v667 	LLN	 	 	r  c                     t        j                  d      }|j                         }|j                          | j	                  t         j
                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   zselect 4)r   r   rG  rM  r`  re   r,  r  s      r   test_closed_cur_executez&ClosedConTests.test_closed_cur_execute  sY    nnZ(jjl		v667 	$KK
#	$ 	$ 	$s   A00A9c                     t        j                  d      }|j                          d }| j                  t         j                        5  |j                  dd|       d d d        y # 1 sw Y   y xY w)Nr   c                      yNr   r@  rh  s    r   r  z5ClosedConTests.test_closed_create_function.<locals>.f  s    r   rF  r?   )r   r   rM  r`  re   rn  )r.   r-  r  s      r   test_closed_create_functionz*ClosedConTests.test_closed_create_function  sW    nnZ(		v667 	-q!,	- 	- 	-s   A%%A.c                     t        j                  d      }|j                           G d d      }| j                  t         j                        5  |j                  dd|       d d d        y # 1 sw Y   y xY w)Nr   c                       e Zd Zd Zd Zd Zy)8ClosedConTests.test_closed_create_aggregate.<locals>.Aggc                      y r"   r@  r-   s    r   r  zAClosedConTests.test_closed_create_aggregate.<locals>.Agg.__init__      r   c                      y r"   r@  re  s     r   stepz=ClosedConTests.test_closed_create_aggregate.<locals>.Agg.step  r7  r   c                      yr1  r@  r-   s    r   finalizezAClosedConTests.test_closed_create_aggregate.<locals>.Agg.finalize  s    r   N)r;  r<  r=  r  r9  r;  r@  r   r   Aggr5    s    r   r<  rF  r?   )r   r   rM  r`  re   create_aggregate)r.   r-  r<  s      r   test_closed_create_aggregatez+ClosedConTests.test_closed_create_aggregate  s`    nnZ(			 	 v667 	0  3/	0 	0 	0s   A,,A5c                     t        j                  d      }|j                          d }| j                  t         j                        5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr   c                  "    t         j                  S r"   )r   DENY)r   s    r   
authorizerz=ClosedConTests.test_closed_set_authorizer.<locals>.authorizer  s    ;;r   )r   r   rM  r`  re   r  )r.   r-  rB  s      r   test_closed_set_authorizerz)ClosedConTests.test_closed_set_authorizer  sU    nnZ(			v667 	+z*	+ 	+ 	+s   A##A,c                     t        j                  d      }|j                          d }| j                  t         j                        5  |j                  |d       d d d        y # 1 sw Y   y xY w)Nr   c                       y r"   r@  r@  r   r   progresszBClosedConTests.test_closed_set_progress_callback.<locals>.progress  s    r   r  )r   r   rM  r`  re   set_progress_handler)r.   r-  rF  s      r   !test_closed_set_progress_callbackz0ClosedConTests.test_closed_set_progress_callback  sU    nnZ(		v667 	4$$Xs3	4 	4 	4s   A$$A-c                     t        j                  d      }|j                          | j                  t         j                        5   |        d d d        y # 1 sw Y   y xY wr   )r   r   rM  r`  re   r  s     r   test_closed_callzClosedConTests.test_closed_call  sG    nnZ(		v667 	E	 	 	s   AAN)r;  r<  r=  r(  r*  r,  r.  r2  r>  rC  rH  rJ  r@  r   r   r&  r&    s/    $-0+4r   r&  c                       e Zd Zd Zy)ClosedCurTestsc                 0   t        j                  d      }|j                         }|j                          dD ]P  }|dv rd}n|dk(  rdddgf}ng }| j	                  t         j
                        5  t        ||      } ||  d d d        R y # 1 sw Y   ]xY w)	Nr   )r,  rl  rm  rk  r  rv  )r,  rm  )zselect 4 union select 5rl  zinsert into foo(bar) values (?)r  r!  )r   r   rG  rM  r`  re   r7   )r.   r-  r  method_namerw  methods         r   test_closedzClosedCurTests.test_closed  s    nnZ(jjl		k 
	 K::5-;dD\J""6#:#:;   k2   
	    s   /BB	N)r;  r<  r=  rP  r@  r   r   rL  rL    s     r   rL  c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)SqliteOnConflictTestszz
    Tests for SQLite's "insert on conflict" feature.

    See https://www.sqlite.org/lang_conflict.html for details.
    c                     t        j                  d      | _        | j                  j                         | _        | j                  j                  d       y )Nr   zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        r+  r-   s    r   rJ  zSqliteOnConflictTests.setUp  s9    ..,''.."  	r   c                 l    | j                   j                          | j                  j                          y r"   r-  r-   s    r   rN  zSqliteOnConflictTests.tearDown  r.  r   c                 b   d | j                   _        | j                   j                         | _        | j                  j	                  d       | j                  j	                  d       | j                  j	                  d       | j                  t        j                        5  | j                  j	                  d       d d d        | j                   j                          | j                  j	                  d       | j                  | j                  j                         g        y # 1 sw Y   ixY w)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r   r  rG  rI  r,  r`  r   r_   rR  r+   rk  r-   s    r   3test_on_conflict_rollback_with_explicit_transactionzISqliteOnConflictTests.test_on_conflict_rollback_with_explicit_transaction  s    "&''.." FGRSv445 	XGGOOVW	X 	<=))+R0	X 	Xs   !D%%D.c                 f   d | j                   _        | j                   j                         | _        | j                  j	                  d       | j                  j	                  d       | j                  j	                  d       | j                  t        j                        5  | j                  j	                  d       d d d        | j                   j                          | j                  j	                  d       | j                  | j                  j                         ddg       y # 1 sw Y   kxY w)NrV  rW  5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')"SELECT name, unique_name FROM test
abort_testNr  rY  r-   s    r   8test_on_conflict_abort_raises_with_explicit_transactionszNSqliteOnConflictTests.test_on_conflict_abort_raises_with_explicit_transactions$  s     #'''.." FGOPv445 	UGGOOST	U<=))+.BN-ST	U 	Us   !D''D0c                    | j                   j                  d       | j                   j                  d       | j                  t        j                        5  | j                   j                  d       d d d        | j                   j                  d       | j                  | j                   j                         g        y # 1 sw Y   OxY w)NrW  rX  r]  rI  r,  r`  r   r_   r+   rk  r-   s    r   -test_on_conflict_rollback_without_transactionzCSqliteOnConflictTests.test_on_conflict_rollback_without_transaction4  s    FGRSv445 	XGGOOVW	X<=))+R0		X 	Xs   C  C	c                    | j                   j                  d       | j                   j                  d       | j                  t        j                        5  | j                   j                  d       d d d        | j                   j                  d       | j                  | j                   j                         ddg       y # 1 sw Y   QxY w)NrW  r\  r]  r^  r  rb  r-   s    r   2test_on_conflict_abort_raises_without_transactionszHSqliteOnConflictTests.test_on_conflict_abort_raises_without_transactions>  s     	FGOPv445 	UGGOOST	U 	<=))+.BN-ST		U 	Us   CCc                 ,   | j                   j                  d       | j                  t        j                        5  | j                   j                  d       d d d        | j                  | j                   j                         g        y # 1 sw Y   4xY w)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')rb  r-   s    r   test_on_conflict_failz+SqliteOnConflictTests.test_on_conflict_failI  sn    NOv445 	TGGOORS	T))+R0	T 	Ts   B

Bc                     | j                   j                  d       | j                   j                  d       | j                   j                  d       | j                  | j                   j                         dg       y )Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testrE  rI  r,  r+   rk  r-   s    r   test_on_conflict_ignorez-SqliteOnConflictTests.test_on_conflict_ignoreO  sT    PQPQ67))+hZ8r   c                     | j                   j                  d       | j                   j                  d       | j                   j                  d       | j                  | j                   j                         dg       y )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]  )zVery different data!rF  ri  r-   s    r   test_on_conflict_replacez.SqliteOnConflictTests.test_on_conflict_replaceV  sV    `aop<=))+.M-NOr   N)r;  r<  r=  __doc__rJ  rN  rZ  r`  rc  re  rg  rj  rl  r@  r   r   rR  rR    s7    1U 1	U19Pr   rR  c                       e Zd ZdZd Zd Zy)MultiprocessTestsr   c                 "    t        t               y r"   )r   r   r-   s    r   rN  zMultiprocessTests.tearDownb  s	    vr   c                    dt          d| j                   d}t        j                  t        j
                  d|gddt        j                  t        j                        }| j                  |j                         | j                  d|j                  j                         j                                t        j                  t         | j                  	      }	 |5  |j                  d
       d d d        |j                   j#                  d       |j)                          | j+                  |j,                         	 |j                  dt.               | j                  |j,                  d       y # 1 sw Y   xY w# t        j$                  $ r.}|j                   j#                  t'        |             Y d }~d }~ww xY w# |j)                          w xY w# t        j0                  $ r" |j3                          |j                           w xY w)Nzif 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-czutf-8r   )encodingbufsizestdinstdoutstarted)timeoutzinsert into t values('test')zno errorend)inputrw  )r   CONNECTION_TIMEOUT
subprocessPopenr  
executablePIPEr  communicater+   ru  readlinestripr   r   r,  rt  rJ  r[   r  rM  r  
returncoder   TimeoutExpiredkill)r.   SCRIPTprocr   r/  s        r   &test_ctx_mgr_rollback_if_commit_failedz8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failede  s   # $*(+d6M6M5N O	: ^^T6*//??
 	(() 	DKK$8$8$:$@$@$BC^^FD,C,CD	 ;

9:;
 JJZ(HHJ 	$//*	5-@
 	!,#; ;&& 	'JJSX&&	'
 HHJ (( 	IIK	sT   E; E/,E; 4F? ;G /E84E; ;F<$F72F? 7F<<F? ?G5H	N)r;  r<  r=  rz  rN  r  r@  r   r   ro  ro  ^  s    >-r   ro  __main__)7r   r  sqlite3r   r{  r  r  r>  urllib.parser  r|  test.supportr   r   r   r   r   r   	_testcapir	   r
   r   r   r   test.support.os_helperr   r   r   r   r   r   contextmanagerr   r'   TestCaser)   rB  r  r'  r  r  r  r  r)  r  requires_working_threadingr  r  r  r&  rL  rR  ro  r;  mainr@  r   r   <module>r     s  .  	   
      * ) + + Y Y"  88 % %hI(## hIV	u6h'' u6p-8#4#4 -( WV..<13%3X&& %33%3PV:!! V:rw4(## w4t)!! )D
 -,,.M6(## M6 /M6`"x(( ",QNX&& QNfAX&& AF X&&  &ZPH-- ZPz D-)) D- D-N zHMMO r   