
    4hh20                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r
S SKrS SKJrJrJr  S SKJr  S SKJrJr  S SKJrJrJr  S SKJrJrJrJrJr  SSKJrJr  SS	KJr   " S
 S\R@                  5      r! " S S\R@                  5      r" " S S\R@                  5      r#\RH                  " \%" \RL                  S5      S5       " S S\R@                  5      5       r' " S S\R@                  5      r( " S S\R@                  5      r) " S S\R@                  5      r*\RV                  " 5        " S S\R@                  5      5       r, " S S\R@                  5      r- " S S\R@                  5      r. " S  S!\R@                  5      r/ " S" S#\\R@                  5      r0 " S$ S%\R@                  5      r1\" 5        " S& S'\R@                  5      5       r2 " S( S)\R@                  5      r3\4S*:X  a  \Rj                  " 5         gg)+    N)SHORT_TIMEOUTcheck_disallow_instantiationrequires_subprocess)
gc_collect)threading_helperimport_helper)SEEK_SETSEEK_CURSEEK_END)TESTFNTESTFN_UNDECODABLEunlinktemp_dirFakePath   )memory_databasecx_limit)MemoryDatabaseMixinc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)ModuleTests.   c                 h    U R                  [        R                  SS[        R                  -  5        g )Nz2.0zapilevel is %s, should be 2.0)assertEqualsqliteapilevelselfs    E/opt/python-3.13.8/usr/lib/python3.13/test/test_sqlite3/test_dbapi.pytest_api_levelModuleTests.test_api_level/   s%    %86??J	L    c                    SnS H  nU R                  US9   U R                  [        U5       n[        [        U5        S S S 5        U R                  WR                  [        5        U R                  [        U5       n[        [        R                  U5        S S S 5        U R                  UR                  [        5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       NL= f! , (       d  f       M  = f)Nz-deprecated and will be removed in Python 3.14)versionversion_info)attr)	subTestassertWarnsRegexDeprecationWarninggetattrr   r   filename__file__dbapi2)r   msgr%   cms       r   test_deprecated_version#ModuleTests.test_deprecated_version3   s    =-D4(**+=sCrFD) D  x8**+=sCrFMM40 D  x8 )( .CC DC	 )(s9   C/C>C/=C(C/
CC/
C,(C//
C>	c                 l    U R                  [        R                  1 SkS[        R                  -  5        g )N>   r   r      z'threadsafety is %d, should be 0, 1 or 3)assertInr   threadsafetyr   s    r   test_thread_safetyModuleTests.test_thread_safety>   s)    f))9?))*	+r!   c                 h    U R                  [        R                  SS[        R                  -  5        g )Nqmarkz%paramstyle is '%s', should be 'qmark')r   r   
paramstyler   s    r   test_param_styleModuleTests.test_param_styleC   s+    **G@**+	,r!   c                 `    U R                  [        [        R                  [        5      S5        g )Nz&Warning is not a subclass of Exception)
assertTrue
issubclassr   Warning	Exceptionr   s    r   test_warningModuleTests.test_warningH   s    
6>>9==	?r!   c                 `    U R                  [        [        R                  [        5      S5        g )Nz$Error is not a subclass of Exception)r=   r>   r   Errorr@   r   s    r   
test_errorModuleTests.test_errorL   s    
6<<;>	@r!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz)InterfaceError is not a subclass of Error)r=   r>   r   InterfaceErrorrD   r   s    r   test_interface_error ModuleTests.test_interface_errorP   s%    
6#8#8&,,GC	Er!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz(DatabaseError is not a subclass of Error)r=   r>   r   DatabaseErrorrD   r   s    r   test_database_errorModuleTests.test_database_errorT   s%    
6#7#7FB	Dr!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz,DataError is not a subclass of DatabaseError)r=   r>   r   	DataErrorrL   r   s    r   test_data_errorModuleTests.test_data_errorX   s'    
6#3#3V5I5IJF	Hr!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz3OperationalError is not a subclass of DatabaseError)r=   r>   r   OperationalErrorrL   r   s    r   test_operational_error"ModuleTests.test_operational_error\   '    
6#:#:F<P<PQM	Or!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz1IntegrityError is not a subclass of DatabaseError)r=   r>   r   IntegrityErrorrL   r   s    r   test_integrity_error ModuleTests.test_integrity_error`   s'    
6#8#8&:N:NOK	Mr!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz0InternalError is not a subclass of DatabaseError)r=   r>   r   InternalErrorrL   r   s    r   test_internal_errorModuleTests.test_internal_errord   s'    
6#7#79M9MNJ	Lr!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz3ProgrammingError is not a subclass of DatabaseError)r=   r>   r   ProgrammingErrorrL   r   s    r   test_programming_error"ModuleTests.test_programming_errorh   rW   r!   c                 t    U R                  [        [        R                  [        R                  5      S5        g )Nz4NotSupportedError is not a subclass of DatabaseError)r=   r>   r   NotSupportedErrorrL   r   s    r   test_not_supported_error$ModuleTests.test_not_supported_errorl   s*    
6#;#;#)#7#79N	Pr!   c                 Z   / SQnUSS/-  nU/ SQ-  n[         R                  S:  a  U/ SQ-  n[         R                  S:  a  U/ SQ-  n[         R                  S	:  a  US
S/-  n[         R                  S:  a  USS/-  n[         R                  S:  a  U/ SQ-  n[         R                  S:  a  U/ SQ-  n[         R                  S:  a  UR                  S5        U H:  nU R                  US9   U R	                  [        [         U5      5        S S S 5        M<     g ! , (       d  f       MN  = f)N)N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_LIMIT_WORKER_THREADSSQLITE_LOCKEDSQLITE_MISMATCHSQLITE_MISUSESQLITE_NOLFSSQLITE_NOMEMSQLITE_NOTADBSQLITE_NOTFOUNDSQLITE_NOTICE	SQLITE_OKSQLITE_PERMSQLITE_PRAGMASQLITE_PROTOCOLSQLITE_RANGESQLITE_READSQLITE_READONLYSQLITE_RECURSIVESQLITE_REINDEX
SQLITE_ROWSQLITE_SAVEPOINTSQLITE_SCHEMASQLITE_SELECTSQLITE_TOOBIGSQLITE_TRANSACTIONSQLITE_UPDATESQLITE_WARNING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PARSE_DECLTYPESPARSE_COLNAMES)8SQLITE_ABORT_ROLLBACKSQLITE_AUTH_USERSQLITE_BUSY_RECOVERYSQLITE_BUSY_SNAPSHOTSQLITE_CANTOPEN_CONVPATHSQLITE_CANTOPEN_FULLPATHSQLITE_CANTOPEN_ISDIRSQLITE_CANTOPEN_NOTEMPDIRSQLITE_CONSTRAINT_CHECKSQLITE_CONSTRAINT_COMMITHOOKSQLITE_CONSTRAINT_FOREIGNKEYSQLITE_CONSTRAINT_FUNCTIONSQLITE_CONSTRAINT_NOTNULLSQLITE_CONSTRAINT_PRIMARYKEYSQLITE_CONSTRAINT_ROWIDSQLITE_CONSTRAINT_TRIGGERSQLITE_CONSTRAINT_UNIQUESQLITE_CONSTRAINT_VTABSQLITE_CORRUPT_VTABSQLITE_IOERR_ACCESSSQLITE_IOERR_AUTHSQLITE_IOERR_BLOCKEDSQLITE_IOERR_CHECKRESERVEDLOCKSQLITE_IOERR_CLOSESQLITE_IOERR_CONVPATHSQLITE_IOERR_DELETESQLITE_IOERR_DELETE_NOENTSQLITE_IOERR_DIR_CLOSESQLITE_IOERR_DIR_FSYNCSQLITE_IOERR_FSTATSQLITE_IOERR_FSYNCSQLITE_IOERR_GETTEMPPATHSQLITE_IOERR_LOCKSQLITE_IOERR_MMAP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_VNODESQLITE_IOERR_WRITESQLITE_LOCKED_SHAREDCACHESQLITE_NOTICE_RECOVER_ROLLBACKSQLITE_NOTICE_RECOVER_WALSQLITE_OK_LOAD_PERMANENTLYSQLITE_READONLY_CANTLOCKSQLITE_READONLY_DBMOVEDSQLITE_READONLY_RECOVERYSQLITE_READONLY_ROLLBACKSQLITE_WARNING_AUTOINDEX)r2      r   )SQLITE_IOERR_BEGIN_ATOMICSQLITE_IOERR_COMMIT_ATOMICSQLITE_IOERR_ROLLBACK_ATOMIC)r2      r   )SQLITE_ERROR_MISSING_COLLSEQSQLITE_ERROR_RETRYSQLITE_READONLY_CANTINITSQLITE_READONLY_DIRECTORY)r2      r   SQLITE_CORRUPT_SEQUENCESQLITE_LOCKED_VTABr2      r   SQLITE_CANTOPEN_DIRTYWALSQLITE_ERROR_SNAPSHOT)r2      r   )SQLITE_CANTOPEN_SYMLINKSQLITE_CONSTRAINT_PINNEDSQLITE_OK_SYMLINK)r2       r   )SQLITE_BUSY_TIMEOUTSQLITE_CORRUPT_INDEXSQLITE_IOERR_DATA)r2   "   r   SQLITE_IOERR_CORRUPTFS)const)r   sqlite_version_infoappendr&   r=   hasattr)r   constsr  s      r   test_module_constants!ModuleTests.test_module_constantsq   s?   P
b 	$&677 9
 9	
t %%3  F
 %%3  F %%302FGGF%%313JKKF%%3  F
 %%3  F
 %%3MM23EE* 67 +* **s   . D
D*	c                    Sn[         R                  R                  S5      (       a  [        R                  nO[        R
                  n[        5        nU R                  [        R                  U5       n[        R                  " U5        S S S 5        WR                  nU R                  UR                  U5        U R                  UR                  R                  S5      5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)Nunable to open database filewinro   )sysplatform
startswithr   r   ro   r   assertRaisesRegexrD   connect	exceptionr   sqlite_errorcoder=   sqlite_errorname)r   err_msgerr_codedbr.   es         r   test_error_code_on_exception(ModuleTests.test_error_code_on_exception"  s    0<<""5))33H--HZ2''g>"r" ?AQ//:OOA..99:KLM Z>> Zs%   !C>3C-
AC>-
C;	7C>>
Dc                    [        5        nU   UR                  S5        S S S 5        SnU R                  [        R                  U5       nUR                  S5        S S S 5        WR
                  nU R                  UR                  [        R                  5        U R                  UR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       g = f)Nz&create table t(t integer check(t > 0))zconstraint failedzinsert into t values(-1)r   )
r   executer  r   rY   r  r   r  r   r  )r   conerrmsgr.   excs        r   %test_extended_error_code_on_exception1ModuleTests.test_extended_error_code_on_exception0  s    #DE (F''(=(=vF"67 G,,CS11#;;=S113LM  GF	 s:   C!B?*C!
CAC!?
C		C!
C	C!!
C/c           	          [        5        n[        U [        U" S5      5      5        [        U [        R                  5        S S S 5        g ! , (       d  f       g = f)Nselect 1)r   r   typer   Blobr   cxs     r   test_disallow_instantiation'ModuleTests.test_disallow_instantiation<  s7    "(tBzN/CD(v{{; s   6A


Ac                     U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        g )Nzselect tzcreate table t(t);)assertFalser   complete_statementr=   r   s    r   test_complete_statement#ModuleTests.test_complete_statementA  s3    22:>?112FGHr!    N)__name__
__module____qualname____firstlineno__r   r/   r5   r:   rA   rE   rI   rM   rQ   rU   rZ   r^   rb   rf   r  r!  r(  r0  r5  __static_attributes__r7  r!   r   r   r   .   sp    L	9+
,
?@EDHOMLOP
o8bN
N<
Ir!   r   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)ConnectionTestsiF  c                     [         R                  " S5      U l        U R                  R                  5       nUR	                  S5        UR	                  SS5        UR                  5         g )N:memory:z4create table test(id integer primary key, name text)!insert into test(name) values (?)foo)r   r  r/  cursorr$  closer   cus     r   setUpConnectionTests.setUpH  sG    ..,WW^^


IJ


6A

r!   c                 8    U R                   R                  5         g Nr/  rE  r   s    r   tearDownConnectionTests.tearDownO      r!   c                 8    U R                   R                  5         g rK  r/  commitr   s    r   test_commitConnectionTests.test_commitR  s    r!   c                 l    U R                   R                  5         U R                   R                  5         g rK  rQ  r   s    r   test_commit_after_no_changes,ConnectionTests.test_commit_after_no_changesU  s      	r!   c                 8    U R                   R                  5         g rK  r/  rollbackr   s    r   test_rollbackConnectionTests.test_rollback\  s    r!   c                 l    U R                   R                  5         U R                   R                  5         g rK  rY  r   s    r   test_rollback_after_no_changes.ConnectionTests.test_rollback_after_no_changes_  s$     	r!   c                 8    U R                   R                  5       ng rK  r/  rD  rF  s     r   test_cursorConnectionTests.test_cursorf  s    WW^^r!   c                     SnU R                  [        R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nz/foo/bar/bla/23534/mydb.db)assertRaisesr   rT   r  )r   YOU_CANNOT_OPEN_THISs     r   test_failed_open ConnectionTests.test_failed_openi  s5    ;v667NN/0 877s   A
Ac                 8    U R                   R                  5         g rK  rL  r   s    r   
test_closeConnectionTests.test_closen  rO  r!   c                    SnU R                   R                  5       nUR                  U5      nU R                   R                  5         U R	                  [
        R                  UR                  5        U R	                  [
        R                  UR                  U5        U R	                  [
        R                  UR                  U/ 5        U R	                  [
        R                  UR                  U5        U R	                  [
        R                  U R                   R                  U5        U R	                  [
        R                  U R                   R                  U/ 5        U R	                  [
        R                  U R                   R                  U5        U R	                  [
        R                  U R                   R                  SSS 5        U R	                  [
        R                  U R                   R                  5        U R	                  [
        R                  5         U R                       S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr+  tr   c                     U $ rK  r7  xs    r   <lambda>6ConnectionTests.test_use_after_close.<locals>.<lambda>  s    Qr!   )r/  rD  r$  rE  re  r   ra   fetchallexecutemanyexecutescriptcreate_function)r   sqlrG  ress       r   test_use_after_close$ConnectionTests.test_use_after_closeq  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  87 87s$   I,H?.I?
I		I
Ic                    U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R
                  [        R
                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        U R                  U R                  R                  [        R                  5        g rK  )r   r/  r?   r   rD   rH   rL   rP   rT   rY   r]   ra   re   r   s    r   test_exceptions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                    [        5        nUR                  5       nU R                  UR                  S5        UR	                  S5        U R                  UR                  S5        UR	                  SS5        U R                  UR                  S5        UR	                  SS/5        UR                  5       nU R                  UR                  S5        UR                  5         U R                  UR                  S5        UR	                  SS/5        UR                  5       nU R                  UR                  S5        UR                  5         S S S 5        g ! , (       d  f       g = f)NFz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)rB  Tz-select name from transactiontest where name=?rC  )r   rD  r   in_transactionr$  fetchonerR  rE  )r   r/  rG  rows       r   test_in_transaction#ConnectionTests.test_in_transaction  s   "BR..6JJXYR..6JJExPR..5JJFP++-CR..5IIKR..6JJFP++-CR..6HHJ s   EE
E$c                     U R                  [        5         SU R                  l        S S S 5        g ! , (       d  f       g = f)NT)re  AttributeErrorr/  r  r   s    r   test_in_transaction_ro&ConnectionTests.test_in_transaction_ro  s(    ~.%)DGG" /..s   1
?c           	      $   / SQnU Ht  nU R                  US9   U R                  [        U R                  U5      5        U R	                  [        [        U5      [        U R                  U5      5        S S S 5        Mv     g ! , (       d  f       M  = f)N)	rP   rL   rD   rY   rH   re   rT   ra   r?   )r'  )r&   r=   r  r/  assertIsr)   r   )r   
exceptionsr'  s      r   test_connection_exceptions*ConnectionTests.test_connection_exceptions  si    


 C#& 56gfc2GDGGS4IJ '& &&s   AB  
B	c                     U R                   R                  5         U R                  [        R                  5         U R                   R                  5         S S S 5        g ! , (       d  f       g = frK  )r/  rE  re  r   ra   	interruptr   s    r   test_interrupt_on_closed_db+ConnectionTests.test_interrupt_on_closed_db  s?    v667GG 877s   A
A,c                 V    U R                  U R                  R                  5       5        g rK  )assertIsNoner/  r  r   s    r   test_interruptConnectionTests.test_interrupt  s    $''++-.r!   c                     [        S5       HD  nU R                  R                  SU 35      nU R                  UR	                  5       S   U5        MF     g )Ni  zselect r   )ranger/  r$  r   r  )r   nrG  s      r   test_drop_unused_refs%ConnectionTests.test_drop_unused_refs  sC    sA71#/BR[[]1-q1 r!   c                    [         R                  nU R                  R                  U5      n SnU R                  R	                  X5      nU R                  X$5        U R                  U R                  R                  U5      U5        SnU R                  [         R                  UU R                  R                  S5        U R                  R	                  X5        g ! U R                  R	                  X5        f = f)N
   query string is too largezselect 1 as '16')	r   r   r/  getlimitsetlimitr   r  rP   r$  )r   categorysaved_limit	new_limit
prev_limitr-   s         r   test_connection_limits&ConnectionTests.test_connection_limits  s    11gg&&x0		4I))(>J[5TWW--h7C-C""6#3#3S#'77??4FH GGX3DGGX3s   BC C7c                     SnSnU R                  [        R                  UU R                  R                  U5        U R                  [        R                  UU R                  R
                  US5        g )Nz'category' is out of boundsiW  r   )r  r   ra   r/  r  r  )r   r-   cats      r   "test_connection_bad_limit_category2ConnectionTests.test_connection_bad_limit_category  s\    +v66#ww//	6v66#ww//a	9r!   c           	         SnSnU H  nU R                  US9   U R                  [        U5         [        US9  S S S 5        [        5        nU R                  [        U5         X4l        S S S 5        U R                  UR                  S5        S S S 5        S S S 5        M     g ! , (       d  f       No= f! , (       d  f       NP= f! , (       d  f       N== f! , (       d  f       M  = f)NzJisolation_level string must be '', 'DEFERRED', 'IMMEDIATE', or 'EXCLUSIVE')BOGUS DEFERREIMMEDIATEXCLUSIV	DEFERREDS
IMMEDIATES
EXCLUSIVESlevelisolation_level )r&   r  
ValueErrorr   r  r   )r   r-   levelsr  r/  s        r   (test_connection_init_bad_isolation_level8ConnectionTests.test_connection_init_bad_isolation_level  s     		
 EE*++J<#E: =$&"//
C@-2* A $$R%7%7<	 ' +* << A@ '& +*sQ   C
B#CC#B4	*$CC#
B1-C4
C>C
CC
C%	c                    S H  nU R                  US9   [        US9 nU R                  UR                  U5        S S S 5        [        5        nU R                  UR                  S5        Xl        U R                  UR                  U5        S S S 5        S S S 5        M     g ! , (       d  f       Nl= f! , (       d  f       N,= f! , (       d  f       M  = f)N)r  DEFERRED	IMMEDIATE	EXCLUSIVENr  r  r  )r&   r   r   r  )r   r  r/  s      r   *test_connection_init_good_isolation_levels:ConnectionTests.test_connection_init_good_isolation_levels  s    EEE*$U;r$$R%7%7? <$&"$$R%7%7<).&$$R%7%7? ' +* F;;&& +*s9   
CB"C?B3C"
B0,C3
C=C
C	c                    [        5        n[        Ul        [        R                  Ul        UR                  5       nUR                  S5        UR                  SS [        S5       5       5        UR                  S5        UR                  S5       Vs/ s H  o3PM     nnU R                  [        S U 5       5      5        U R                  U Vs/ s H  o3S   PM	     snS	S
/5        UR                  S5        UR                  S5        UR                  SS S 5       5        UR                  5        Vs/ s H  o3PM     nnU R                  [        S U 5       5      5        U R                  U Vs/ s H  o3S   PM	     snSS/5        UR!                  5         S S S 5        g s  snf s  snf s  snf s  snf ! , (       d  f       g = f)Nzcreate table foo (bar)z insert into foo (bar) values (?)c              3   :   #    U  H  n[        U5      4v   M     g 7frK  )str.0vs     r   	<genexpr>9ConnectionTests.test_connection_reinit.<locals>.<genexpr>  s     8x!SVIx      zselect bar from foo   c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frK  
isinstancer   Rowr  rs     r   r  r         H4a
1fjj 9 94   ')r      0   1r@  c              3   &   #    U  H  o4v   M	     g 7frK  r7  r  s     r   r  r    s     ?*>QD*>   )abcdc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frK  r  r  s     r   r  r    r  r  23)r   bytestext_factoryr   r  row_factoryrD  r$  rt  r  	fetchmanyr=   allr   __init__rs  rE  )r   r/  rG  r  rowss        r   test_connection_reinit&ConnectionTests.test_connection_reinit   sh   "#BO#ZZBNBJJ/0NN=8uQx8:JJ,-!||A/!AD/OOCH4HHID1DqdD1D$<@KK
#JJ/0NN=?*>?A  "{{}-}!A}D-OOCH4HHID1DqdD1C:>HHJ-  01 .1+ sC   BF7F#2F7F(
AF75F- 2F72F2
 F7#F77
Gc                    [         R                  " S5      nU   UR                  S5        S S S 5        [        5        nU R	                  [         R
                  SUR                  U5        U R	                  [         R                  SUR                  SS [        S5       5       5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr@  create table t(t)r  #Base Connection.__init__ not calledzinsert into t values(?)c              3   &   #    U  H  o4v   M	     g 7frK  r7  r  s     r   r  =ConnectionTests.test_connection_bad_reinit.<locals>.<genexpr>$  s     #;(QD(r  r2   )
r   r  r$  r   r  rT   r  ra   rt  r  )r   r/  r  s      r   test_connection_bad_reinit*ConnectionTests.test_connection_bad_reinit  s    ^^J'JJ*+ Z2""6#:#:#A#%;;4 ""6#:#:#H#%>>3L#;%(#;=	 Z RZs   B0A*C0
B>
Cc                    [         R                  n[        5        nU R                  [        S5         UR                  S5        S S S 5        UR                  U5      nU(       + nUR                  X5        U R                  UR                  U5      U5        UR                  U5        U R                  UR                  U5      5        U   UR                  S5        S S S 5        U R                  [         R                  S5         UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       N9= f! , (       d  f       g = f)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   r=   ru  rY   r$  )r   opr/  oldnews        r   test_connection_config&ConnectionTests.test_connection_config&  s   //"''
I>R  ? ,,r"C'CLL!R\\"-s3LLOOBLL,-    "  
 ''(=(=|L

45 M' >> 
 ML' sS   ED&BE	D7(EEE&
D4	0E7
E	E
E	E
E'c                     SnU R                  [        U5       n[        R                  " SS5      nUR	                  5         S S S 5        U R                  WR                  [        5        g ! , (       d  f       N/= f)NzPassing more than 1 positional argument to sqlite3.connect\(\) is deprecated. Parameters 'timeout', 'detect_types', 'isolation_level', 'check_same_thread', 'factory', 'cached_statements' and 'uri' will become keyword-only parameters in Python 3.15.r@        ?)r'   r(   r   r  rE  r   r*   r+   )r   regexr.   r/  s       r   !test_connect_positional_arguments1ConnectionTests.test_connect_positional_arguments>  s^    ) 	 ""#5u=
C0BHHJ > 	h/ >=s   (A**
A8c                     U R                  [        5         [        R                  " S5      nA[	        5         S S S 5        g ! , (       d  f       g = fNr@  )assertWarnsResourceWarningr   r  r   r.  s     r    test_connection_resource_warning0ConnectionTests.test_connection_resource_warningK  s2    o.
+BL /..s   "A
Ac                 j    SSK Jn  U" U R                  5      nU R                  [	        U5      S5        g )Nr   )	signaturez(sql, /))inspectr  r/  r   r  )r   r  sigs      r   test_connection_signature)ConnectionTests.test_connection_signatureQ  s'    % S:.r!   r/  N) r8  r9  r:  r;  rH  rM  rS  rV  r[  r^  rb  rg  rj  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r<  r7  r!   r   r>  r>  F  s    1
(N&*K" 
/2
49=2@2=600/r!   r>  c                        \ rS rSrS rS rSrg)UninitialisedConnectionTestsiW  c                 h    [         R                  R                  [         R                  5      U l        g rK  )r   
Connection__new__r/  r   s    r   rH  "UninitialisedConnectionTests.setUpX  s     ##++F,=,=>r!   c                    ^  U 4S jU 4S jU 4S jU 4S jU 4S jU 4S j4nU H<  nT R                  US9   T R                  [        R                  SU5        S S S 5        M>     g ! , (       d  f       MP  = f)	Nc                  0   > T R                   R                  $ rK  )r/  r  r   s   r   rq  EUninitialisedConnectionTests.test_uninit_operations.<locals>.<lambda>]  s    DGG++r!   c                  0   > T R                   R                  $ rK  )r/  total_changesr   s   r   rq  r  ^  s    DGG))r!   c                  0   > T R                   R                  $ rK  )r/  r  r   s   r   rq  r  _  s    DGG**r!   c                  8   > T R                   R                  5       $ rK  )r/  iterdumpr   s   r   rq  r  `  s    DGG$$&r!   c                  8   > T R                   R                  5       $ rK  ra  r   s   r   rq  r  a  s    DGGNN$r!   c                  8   > T R                   R                  5       $ rK  rL  r   s   r   rq  r  b  s    DGGMMOr!   )funcr  )r&   r  r   ra   )r   funcsr  s   `  r   test_uninit_operations3UninitialisedConnectionTests.test_uninit_operations[  sa    +)*&$#
 D4(&&v'>'>'L'+- )( ((s   "A%%
A4	r  N)r8  r9  r:  r;  rH  r  r<  r7  r!   r   r  r  W  s    ?-r!   r  	serializezNeeds SQLite serialize APIc                   &    \ rS rSrS rS rS rSrg)SerializeTestsik  c                    [        5        nU   UR                  S5        S S S 5        UR                  5       nU   UR                  S5        S S S 5        SnU R                  [        R
                  U5         UR                  S5        S S S 5        UR                  U5        UR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N[= f! , (       d  f       g = f)Nr  zdrop table tzno such tablezselect t from t)r   r$  r!  r  r   rT   deserialize)r   r/  datar  s       r   test_serialize_deserialize)SerializeTests.test_serialize_deserializen  s    "

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

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

,- H NN4 JJ() 
  HG sP   C.B;C.C*C.6C*C.;
C		C.
C	C.
C+	'C..
C<c                 H   [         [        S5      S S S2   4[        / 4[        S4[        S 44nU HL  u  p#U R                  X#S9   [	        5        nU R                  X$R                  U5        S S S 5        S S S 5        MN     g ! , (       d  f       N= f! , (       d  f       Mq  = f)Ns   blobr  r   )r'  arg)BufferError
memoryview	TypeErrorr&   r   re  r%  )r   datasetr'  r*  r/  s        r   test_deserialize_wrong_args*SerializeTests.test_deserialize_wrong_args  s    *W-cc23ON	
  HC#/$&"%%c>>3? ' 0/  && 0/s$   BB,B
BB
B!	c                    [        5        nSnU R                  [        R                  U5         UR	                  S5        UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nzfile is not a databases    zcreate table fail(f))r   r  r   rL   r%  r$  )r   r/  r  s      r   !test_deserialize_corrupt_database0SerializeTests.test_deserialize_corrupt_database  s^    ",E''(<(<eDy) 

12	 E DD s"   #A3#A"A3"
A0	,A33
Br7  N)r8  r9  r:  r;  r'  r/  r2  r<  r7  r!   r   r#  r#  k  s    *"
@3r!   r#  c                       \ rS rSrSrS rS rS r\R                  " \
R                  S:H  S5      S 5       rS	 rS
 rS r\R                  " \
R                  S:H  S5      S 5       rS rS rSrg)	OpenTestsi  zcreate table test(id integer)c                    [         R                  " [        5      nU R                  [        U5        U R                  [         R                  R                  U5      5        [        R                  " [        R                  " U5      5       nU R                  [         R                  R                  U5      5        UR                  U R                  5        S S S 5        g ! , (       d  f       g = frK  )osfsencoder   
addCleanupr   r3  pathexists
contextlibclosingr   r  r=   r$  _sqlr   r:  r/  s      r   test_open_with_bytes_path#OpenTests.test_open_with_bytes_path  s    {{6"%-.t 45OOBGGNN401JJtyy! 655s   	A
C
C*c                    [        [        5      nU R                  [        U5        U R	                  [
        R                  R                  U5      5        [        R                  " [        R                  " U5      5       nU R                  [
        R                  R                  U5      5        UR                  U R                  5        S S S 5        g ! , (       d  f       g = frK  )r   r   r9  r   r3  r7  r:  r;  r<  r=  r   r  r=   r$  r>  r?  s      r   test_open_with_path_like_object)OpenTests.test_open_with_path_like_object  s     %-.t 45OOBGGNN401JJtyy! 655s   >A
C
Cc                     [         nU(       d  U R                  S5         [        US5      R                  5         [        U5        U$ ! [         a    U R                  SU< 35         N.f = f)Nz)only works if there are undecodable pathswbz(can't create file with undecodable path )r   skipTestopenrE  OSErrorr   )r   r:  s     r   get_undecodable_pathOpenTests.get_undecodable_path  se    !MMEF	Ot""$ 	t  	OMMDTHMN	Os   A A)(A)win32zskipped on Windowsc                 j   U R                  5       nU R                  [        U5        [        R                  " [
        R                  " U5      5       nU R                  [        R                  R                  U5      5        UR                  U R                  5        S S S 5        g ! , (       d  f       g = frK  )rJ  r9  r   r<  r=  r   r  r=   r7  r:  r;  r$  r>  r?  s      r   test_open_with_undecodable_path)OpenTests.test_open_with_undecodable_path  sl    ((*%t 45OOBGGNN401JJtyy! 655s   A
B$$
B2c                    [         nU R                  [        U5        S[        R                  R                  [        R                  " U5      5      -   nU R                  [        R                  R                  U5      5        [        R                  " [        R                  " USS95       nU R                  [        R                  R                  U5      5        UR!                  U R"                  5        S S S 5        g ! , (       d  f       g = fNfile:Turi)r   r9  r   urllibparsequoter7  r8  r3  r:  r;  r<  r=  r   r  r=   r$  r>  r   r:  rT  r/  s       r   test_open_uriOpenTests.test_open_uri  s    %**2;;t+<==-.s =>"OOBGGNN401JJtyy! ?>>s   *A
C==
Dc                    [         nU R                  [        U5        SU-   nU R                  [        R
                  R                  U5      5        [        R                  " [        R                  " USS95       nU R                  [        R
                  R                  U5      5        UR                  U R                  5        S S S 5        g ! , (       d  f       g = frQ  )r   r9  r   r3  r7  r:  r;  r<  r=  r   r  r=   r$  r>  rX  s       r   test_open_unquoted_uri OpenTests.test_open_unquoted_uri  s    %n-.s =>"OOBGGNN401JJtyy! ?>>s   9A
C
Cc                    [         nU R                  [        U5        S[        R                  R                  [        R                  " U5      5      -   S-   nU R                  [        R                  R                  U5      5        U R                  [        R                  5         [        R                  " USS9  S S S 5        U R                  [        R                  R                  U5      5        [        R                  " U5      R                  5         U R!                  [        R                  R                  U5      5        ["        R$                  " [        R                  " USS95       nU R                  [        R                  5         UR'                  U R(                  5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N)= f! , (       d  f       g = f)NrR  z?mode=roTrS  )r   r9  r   rU  rV  rW  r7  r8  r3  r:  r;  re  r   rT   r  rE  r=   r<  r=  r$  r>  rX  s       r   test_open_uri_readonly OpenTests.test_open_uri_readonly  s.   %**2;;t+<==
J-.v667NN3D) 8-.t""$t,-s =>"""6#:#:;

499% < ?> 87 <; ?>s0   #F7* G
G	&G7
G	
G	G
G(c                    U R                  5       nU R                  [        U5        S[        R                  R                  U5      -   n[        R                  " [        R                  " USS95       nU R                  [        R                  R                  U5      5        UR                  U R                  5        S S S 5        g ! , (       d  f       g = frQ  )rJ  r9  r   rU  rV  rW  r<  r=  r   r  r=   r7  r:  r;  r$  r>  rX  s       r   test_open_undecodable_uri#OpenTests.test_open_undecodable_uri  s    ((*%**400s =>"OOBGGNN401JJtyy! ?>>s   2A
C
Cc                 ,  ^ U4S jn[         [        R                  " [         5      [        [         5      [        [        R                  " [         5      5      4 H9  nS m[        R
                  " X!S9R                  5         U R                  TU5        M;     g )Nc                 <   > U m[         R                  " S/UQ70 UD6$ r  )r   r  )databaseargskwargsdatabase_args      r   factory4OpenTests.test_factory_database_arg.<locals>.factory  s#    #L$$ZA$A&AAr!   )rj  )r   r7  r8  r   r   r  rE  r   )r   rj  rf  ri  s      @r   test_factory_database_arg#OpenTests.test_factory_database_arg  si    	B
  V!4!&)8BKK4G+HJHLNN85;;=\84	Jr!   c                     [         R                  " [        R                  " SS95       nU R	                  [        U5      [        R                  5        S S S 5        g ! , (       d  f       g = f)Nr@  )rf  )r<  r=  r   r  r   r,  r  r.  s     r   test_database_keywordOpenTests.test_database_keyword  sB    
 CDT"Xv'8'89 EDDs   *A
A*r7  N)r8  r9  r:  r;  r>  r@  rC  rJ  unittestskipIfr  r  rN  rY  r\  r_  rb  rl  ro  r<  r7  r!   r   r5  r5    s    *D""	 __S\\W,.BC" D"""&  __S\\W,.BC" D"
5:r!   r5  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!\"RF                  " \$RJ                  S :  S!5      S" 5       r&S# r'S$ r(S% r)S& r*S' r+S( r,S) r-S* r.S+ r/S, r0S- r1S. r2S/ r3S0 r4S1 r5S2 r6S3 r7S4 r8S5 r9S6 r:S7 r;S8 r<S9 r=S: r>S; r?S< r@S= rAS> rBS? rCS@rDgA)BCursorTestsi  c                     [         R                  " S5      U l        U R                  R                  5       U l        U R                  R                  S5        U R                  R                  SS5        g )Nr@  z\create table test(id integer primary key, name text, income number, unique_test text unique)rA  rB  r   r  r/  rD  rG  r$  r   s    r   rH  CursorTests.setUp  sN    ..,''.."6	
 	;XFr!   c                 l    U R                   R                  5         U R                  R                  5         g rK  rG  rE  r/  r   s    r   rM  CursorTests.tearDown      r!   c                 :    U R                   R                  S5        g )Ndelete from testrG  r$  r   s    r   test_execute_no_args CursorTests.test_execute_no_args  s    *+r!   c                     U R                  [        R                  5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = f)Nzselect asdf)re  r   rT   rG  r$  r   s    r   test_execute_illegal_sql$CursorTests.test_execute_illegal_sql
  s2    v667GGOOM* 877   A
Ac                    SnSnU H_  nU R                  US9   U R                  [        R                  U5         U R                  R                  U5        S S S 5        S S S 5        Ma     g ! , (       d  f       N= f! , (       d  f       M  = f)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)r&   r  r   ra   rG  r$  )r   r-   r.  r  s       r    test_execute_multiple_statements,CursorTests.test_execute_multiple_statements  sl    <
 EE*++F,C,CSIGGOOE* J +* II +*s"   !A<A+A<+
A95A<<
B	c                     SnU H6  nU R                  US9   U R                  R                  U5        S S S 5        M8     g ! , (       d  f       MJ  = f)N)zselect 1; -- foo barzselect 1; --zselect 1; /*zT
            select 5+4;

            /*
            foo
            */
            r  )r&   rG  r$  )r   r.  r  s      r   #test_execute_with_appended_comments/CursorTests.test_execute_with_appended_comments$  sB    
 EE*& +* **s   A  
A	c                     U R                  [        5         U R                  R                  S5        S S S 5        g ! , (       d  f       g = fN*   )re  r-  rG  r$  r   s    r   test_execute_wrong_sql_arg&CursorTests.test_execute_wrong_sql_arg5  s,    y)GGOOB *))	   ;
A	c                 <    U R                   R                  SS5        g )Ninsert into test(id) values (?))r  r~  r   s    r   test_execute_arg_int CursorTests.test_execute_arg_int9  s    95Ar!   c                 <    U R                   R                  SS5        g )N#insert into test(income) values (?))gq=
ף@r~  r   s    r   test_execute_arg_float"CursorTests.test_execute_arg_float<  s    =zJr!   c                 <    U R                   R                  SS5        g )NrA  )Hugor~  r   s    r   test_execute_arg_string#CursorTests.test_execute_arg_string?  s    ;YGr!   c                     U R                   R                  SS5        U R                   R                  SU R                   R                  45        U R                   R                  5       nU R	                  US   S5        g )NrA  )Hu goz select name from test where id=?r   r  )rG  r$  	lastrowidr  r   r   r  s     r   &test_execute_arg_string_with_zero_byte2CursorTests.test_execute_arg_string_with_zero_byteB  s[    ;]K:TWW=N=N<PQgg Q,r!   c                     U R                  [        R                  5       nU R                  R	                  SS5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr  r  z"parameters are of unsupported type)re  r   ra   rG  r$  r   r  r  )r   r.   s     r   test_execute_non_iterable%CursorTests.test_execute_non_iterableI  sS    v6672GGOO=rB 8R\\*,PQ 87s   A++
A9c                     U R                  [        R                  5         U R                  R	                  SS5        S S S 5        g ! , (       d  f       g = f)Nr  )   Egonre  r   ra   rG  r$  r   s    r   test_execute_wrong_no_of_args1*CursorTests.test_execute_wrong_no_of_args1N  s5    v667GGOO=|L 877s   A
Ac                     U R                  [        R                  5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = fNr  r  r   s    r   test_execute_wrong_no_of_args2*CursorTests.test_execute_wrong_no_of_args2S  3    v667GGOO=> 877r  c                     U R                  [        R                  5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = fr  r  r   s    r   test_execute_wrong_no_of_args3*CursorTests.test_execute_wrong_no_of_args3X  r  r  c                     U R                   R                  S5        U R                   R                  SS/5        U R                   R                  5       nU R                  US   S5        g )N%insert into test(name) values ('foo')"select name from test where name=?rC  r   rG  r$  r  r   r  s     r   test_execute_param_list#CursorTests.test_execute_param_list]  sN    ?@<ugFgg Q'r!   c                      " S S5      nU R                   R                  S5        U R                   R                  SU" 5       5        U R                   R                  5       nU R                  US   S5        g )Nc                        \ rS rSrS rS rSrg)2CursorTests.test_execute_param_sequence.<locals>.Lid  c                     g)Nr   r7  r   s    r   __len__:CursorTests.test_execute_param_sequence.<locals>.L.__len__e  s    r!   c                     gNrC  r7  r   rp  s     r   __getitem__>CursorTests.test_execute_param_sequence.<locals>.L.__getitem__g  s    r!   r7  Nr8  r9  r:  r;  r  r  r<  r7  r!   r   Lr  d  s    r!   r  r  r  r   rC  r  )r   r  r  s      r   test_execute_param_sequence'CursorTests.test_execute_param_sequencec  sZ    	 	 	?@<acBgg Q'r!   c                      " S S5      nU R                   R                  S5        U R                  [        5         U R                   R                  SU" 5       5        S S S 5        g ! , (       d  f       g = f)Nc                        \ rS rSrS rS rSrg):CursorTests.test_execute_param_sequence_bad_len.<locals>.Lir  c                     SS-    g )Nr   r   r7  r   s    r   r  BCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__len__s  s	    !r!   c                     [         erK  )AssertionError)slfrp  s     r   r  FCursorTests.test_execute_param_sequence_bad_len.<locals>.L.__getitem__u  s    $$r!   r7  Nr  r7  r!   r   r  r  r  s    %r!   r  r  r  )rG  r$  re  ZeroDivisionError)r   r  s     r   #test_execute_param_sequence_bad_len/CursorTests.test_execute_param_sequence_bad_lenp  sO    	% 	% 	?@01GGOO@!#F 211s   "A&&
A4c                 L   SnSnU Hw  u  p4U R                  X4S9   U R                  [        U5       nU R                  R	                  X45        S S S 5        U R                  WR                  [        5        S S S 5        My     g ! , (       d  f       N;= f! , (       d  f       M  = f)N))z	select :ar   )zselect :a, ?, ?r   r  r2   )zselect ?, :b, ?r  )zselect ?, ?, :cr  )zselect :a, :b, ?r  zBinding.*is a named parameterr  params)r&   r'   r(   rG  r$  r   r*   r+   )r   r.  r-   r  r  r.   s         r   %test_execute_named_param_and_sequence1CursorTests.test_execute_named_param_and_sequence|  s    
 .$MEE9**+=sCrGGOOE2 D  x8 :9 %CC :9s"   BB(B
BB
B#	c                    S H  u  pnU R                  XS9   [        R                  " 5          [        R                  " S[        5        U R
                  R                  X5      nUR                  5       u  nU R                  XS5        S S S 5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)N))zselect ?1, ?2r   r  r  )zselect ?2, ?1r  )r  r   r  error)	r&   warningscatch_warningssimplefilterr(   rG  r$  rs  r   )r   r  r  expectedrG  actuals         r   $test_execute_indexed_nameless_params0CursorTests.test_execute_indexed_nameless_params  s    (
#E8 E9,,.))'3EF7B kkmGF$$V6	 / :9	(

 /. :9s#   B.ABB.
B+'B..
B=	c                 j   [         R                  nSn[        U R                  USS9   U R                  R                  SS5        U R                  [         R                  U5         U R                  R                  SS5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nztoo many SQL variablesr   )r  limitzselect * from test where id=?r  z(select * from test where id!=? and id!=?r  )r   r   r   r/  rG  r$  r  rT   )r   r  r-   s      r   test_execute_too_many_params(CursorTests.test_execute_too_many_params  s    66&dgg:GGOO;TB''(?(?E J &( F ;:EE ;:s#   =B$%BB$
B!	B$$
B2c                     U R                   R                  S5        U R                   R                  SSS05        U R                   R                  5       nU R                  US   S5        g )Nr  &select name from test where name=:namenamerC  r   r  r  s     r   test_execute_dict_mapping%CursorTests.test_execute_dict_mapping  sP    ?@@65/Rgg Q'r!   c                      " S S[         5      nU R                  R                  S5        U R                  R                  SU" 5       5        U R                  R                  5       nU R	                  US   S5        g )Nc                       \ rS rSrS rSrg)8CursorTests.test_execute_dict_mapping_mapping.<locals>.Di  c                     gr  r7  )r   keys     r   __missing__DCursorTests.test_execute_dict_mapping_mapping.<locals>.D.__missing__  s    r!   r7  N)r8  r9  r:  r;  r  r<  r7  r!   r   Dr    s    r!   r  r  r  r   rC  )dictrG  r$  r  r   )r   r  r  s      r   !test_execute_dict_mapping_mapping-CursorTests.test_execute_dict_mapping_mapping  s\    	 	 	?@@!#Fgg Q'r!   c                     U R                   R                  S5        U R                  [        R                  5         U R                   R                  SSS05        S S S 5        g ! , (       d  f       g = f)Nr  z1select name from test where name=:name and id=:idr  rC  rG  r$  re  r   ra   r   s    r   )test_execute_dict_mapping_too_little_args5CursorTests.test_execute_dict_mapping_too_little_args  sM    ?@v667GGOOORXZ_Q`a 877   A##
A1c                     U R                   R                  S5        U R                  [        R                  5         U R                   R                  S5        S S S 5        g ! , (       d  f       g = f)Nr  r  r  r   s    r   !test_execute_dict_mapping_no_args-CursorTests.test_execute_dict_mapping_no_args  sD    ?@v667GGOODE 877   A  
A.c                     U R                   R                  S5        U R                  [        R                  5         U R                   R                  SSS05        S S S 5        g ! , (       d  f       g = f)Nr  r  r  rC  r  r   s    r   !test_execute_dict_mapping_unnamed-CursorTests.test_execute_dict_mapping_unnamed  sJ    ?@v667GGOO@65/R 877r   c                 8    U R                   R                  5         g rK  )rG  rE  r   s    r   rj  CursorTests.test_close  rO  r!   c                 (   U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  S5        g )Nr}  r  zupdate test set name='bar'r  rG  r$  r   rowcountr   s    r   test_rowcount_execute!CursorTests.test_rowcount_execute  s`    *+?@?@45))1-r!   c                     U R                   R                  S5        U R                  U R                   R                  S5        g )Nzselect 5 union select 6r  r  r   s    r   test_rowcount_select CursorTests.test_rowcount_select  s/     	12))2.r!   c                     U R                   R                  S5        U R                   R                  S/ SQ5        U R                  U R                   R                  S5        g )Nr}  rA  r  )r  r2   r2   )rG  r$  rt  r   r  r   s    r   test_rowcount_executemany%CursorTests.test_rowcount_executemany  sC    *+?AST))1-r!   )r2   #   r   zRequires SQLite 3.35.0 or newerc                     U R                   R                  S5        U R                  U R                   R                  5       S   S5        U R                  U R                   R                  S5        g )Nz7update test set name='bar' where name='foo' returning 1r   r   )rG  r$  r   r  r  r   s    r   test_rowcount_update_returning*CursorTests.test_rowcount_update_returning  sQ     	QR))+A.2))1-r!   c                    U R                   R                  S5        U R                  U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  S5        g )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'r2   r  r   s    r   #test_rowcount_prefixed_with_comment/CursorTests.test_rowcount_prefixed_with_comment  s      	 	))1-  	
 	))1-OP))1-r!   c                 B   SnU R                   R                  SU5        U R                  U R                   R                  S5        U R                  R                  5         U R                   R                  S5        U R                  U R                   R                  S5        g )Nr  z"insert into test(income) values(?)r2   vacuumr  )rG  rt  r   r  r/  rR  r$  )r   r&  s     r   test_rowcount_vaccuum!CursorTests.test_rowcount_vaccuum  sn    !@$G))1-!))2.r!   c                     U R                   R                  S5        U R                   R                  S5        U R                  SU R                  R                  SS9  g )Nr  r  z"total changes reported wrong value)r-   )rG  r$  
assertLessr/  r  r   s    r   test_total_changesCursorTests.test_total_changes  sA    ?@?@477006Z[r!   c                 |    U R                   R                  S[        SS5       Vs/ s H  o4PM     sn5        g s  snf )Nr  d   n   )rG  rt  r  r  s     r   test_execute_many_sequence&CursorTests.test_execute_many_sequence  s5    ARWX[]`RaCbRaQDRaCbcCbs   9
c                 Z     " S S5      nU R                   R                  SU" 5       5        g )Nc                   &    \ rS rSrS rS rS rSrg)6CursorTests.test_execute_many_iterator.<locals>.MyIteri  c                     SU l         g N   valuer   s    r   r  ?CursorTests.test_execute_many_iterator.<locals>.MyIter.__init__  s	    
r!   c                     U $ rK  r7  r   s    r   __iter__?CursorTests.test_execute_many_iterator.<locals>.MyIter.__iter__	  s    r!   c                 r    U R                   S:X  a  [        eU =R                   S-  sl         U R                   4$ )Nr  r   )r2  StopIterationr   s    r   __next__?CursorTests.test_execute_many_iterator.<locals>.MyIter.__next__  s-    ::#''JJ!OJ JJ=(r!   r1  N)r8  r9  r:  r;  r  r5  r9  r<  r7  r!   r   MyIterr-    s    )r!   r;  r  rG  rt  )r   r;  s     r   test_execute_many_iterator&CursorTests.test_execute_many_iterator  s%    	) 	) 	A68Lr!   c                 L    S nU R                   R                  SU" 5       5        g )Nc               3   :   #    [        S5       H  n U 4v   M
     g 7fr/  )r  )is    r   mygen6CursorTests.test_execute_many_generator.<locals>.mygen  s     1Xd
 r  r  r<  )r   rB  s     r   test_execute_many_generator'CursorTests.test_execute_many_generator  s     	 	A57Kr!   c                     U R                  [        5         U R                  R                  SS/5        S S S 5        g ! , (       d  f       g = f)Nr  r  re  r-  rG  rt  r   s    r   test_execute_many_wrong_sql_arg+CursorTests.test_execute_many_wrong_sql_arg  s2    y)GGTF+ *))s	   =
Ac                     U R                  [        R                  5         U R                  R	                  SS/5        S S S 5        g ! , (       d  f       g = f)Nzselect ?r  )re  r   ra   rG  rt  r   s    r   test_execute_many_select$CursorTests.test_execute_many_select   s8    v667GG
TF3 877s   A
Ac                     U R                  [        5         U R                  R                  SS5        S S S 5        g ! , (       d  f       g = f)Nr  r  rG  r   s    r   test_execute_many_not_iterable*CursorTests.test_execute_many_not_iterable$  s1    y)GG ErJ *))s	   <
A
c                    U R                   R                  S5        U R                   R                  SS5        U R                   R                  SS5        U R                   R                  S5        / nU R                    H  nUR                  US   5        M     U R                  US   S5        U R                  US   S	5        g )
Nr}  r  )r0  )   zselect id from test order by idr   r0  r   rQ  )rG  r$  r  r   )r   lstr  s      r   test_fetch_iterCursorTests.test_fetch_iter(  s    *+94@94@9:77CJJs1v Q#Q#r!   c                     U R                   R                  S5        U R                   R                  5       nU R                  US   S5        U R                   R                  5       nU R                  US 5        g )Nselect name from testr   rC  r  r  s     r   test_fetchoneCursorTests.test_fetchone4  s[    /0gg Q'gg d#r!   c                 |    U R                   R                  5       nUR                  5       nU R                  US 5        g rK  )r/  rD  r  r   )r   curr  s      r   test_fetchone_no_statement&CursorTests.test_fetchone_no_statement;  s-    ggnnllnd#r!   c                    U R                  U R                  R                  S5        SU R                  l        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        U R                  R	                  5       nU R                  [        U5      S5        g )Nr   r  r}  z#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')rV  )r   rG  	arraysizer$  r  lenr   rx  s     r   test_array_sizeCursorTests.test_array_size@  s    **A.  	*+=>=>=>/0gg!S1%r!   c                     Sn[         R                  " [        U R                  S5      nU R	                  [
        US5        U R	                  [        US5        U R	                  [        X!S-   5        g )N    r^  r  r   )	functoolspartialsetattrrG  re  r-  r  OverflowError)r   
UINT32_MAXsetters      r   test_invalid_array_size#CursorTests.test_invalid_array_sizeQ  sW    "
""7DGG[A)VS1*fb1-a@r!   c                    U R                   R                  5       nU R                  U/ 5        U R                   R                  S5      nU R                  U/ 5        U R                   R                  S5        U R                   R                  5       nU R                  [	        U5      S5        U R                   R                  S5        U R                   R                  S5      nU R                  [	        U5      S5        U R                   R                  S5      nU R                  U/ 5        U R                   R                  S5        U R                   R                  S5      nU R                  U/ 5        U R                   R                  S5      nU R                  [	        U5      S5        U R                   R                  S5      nU R                  U/ 5        g )N  rV  r   r'  r   )rG  r  r   r$  r_  r`  s     r   test_fetchmanyCursorTests.test_fetchmanyY  sc   gg!b!gg%b! 	/0gg!S1% 	/0gg$S1%gg$b! 	/0gg"b!gg$S1%gg$b!r!   c                     SnU R                   R                  nU R                  [        US5        U R                  [        US5        U R                  [
        X!S-   5        g )Nrd  r  re  r   )rG  r  re  r-  r  ri  )r   rj  r  s      r   test_invalid_fetchmany"CursorTests.test_invalid_fetchmanyu  sN    "
GG%%	)Y4*i4-NCr!   c                     U R                   R                  S5        U R                   R                  SS9nU R                  [	        U5      S5        g )NrV  r'  )sizer   )rG  r$  r  r   r_  r`  s     r   test_fetchmany_kw_arg!CursorTests.test_fetchmany_kw_arg}  s>    /0ggS)S1%r!   c                     U R                   R                  S5        U R                   R                  5       nU R                  [	        U5      S5        U R                   R                  5       nU R                  U/ 5        g )NrV  r   )rG  r$  rs  r   r_  r`  s     r   test_fetchallCursorTests.test_fetchall  s[    /0gg S1%gg b!r!   c                 >    U R                   R                  / SQ5        g )N)r2   r  r0  )rG  setinputsizesr   s    r   test_setinputsizesCursorTests.test_setinputsizes  s    i(r!   c                 <    U R                   R                  SS5        g )Nr0  r   rG  setoutputsizer   s    r   test_setoutputsizeCursorTests.test_setoutputsize  s    a#r!   c                 :    U R                   R                  S5        g r  r  r   s    r   test_setoutputsize_no_column(CursorTests.test_setoutputsize_no_column  s    b!r!   c                 d    U R                  U R                  R                  U R                  5        g rK  )r   rG  
connectionr/  r   s    r   test_cursor_connection"CursorTests.test_cursor_connection  s     ++TWW5r!   c                     U R                  [        5         S nU R                  R                  U5      nS S S 5        g ! , (       d  f       g = f)Nc                      g rK  r7  r7  r!   r   f1CursorTests.test_wrong_cursor_callable.<locals>.f  s    Tr!   )re  r-  r/  rD  )r   r  rZ  s      r   test_wrong_cursor_callable&CursorTests.test_wrong_cursor_callable  s1    y)''..#C *))s	   >
Ac                      " S S5      nU" 5       nU R                  [        5         [        R                  " U5      nS S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg)0CursorTests.test_cursor_wrong_class.<locals>.Fooi  r7  Nr8  r9  r:  r;  r<  r7  r!   r   Foor    s    4r!   r  )re  r-  r   Cursor)r   r  rC  rZ  s       r   test_cursor_wrong_class#CursorTests.test_cursor_wrong_class  s6    ey)--$C *))s   A
Ac                    SnS Hl  nU R                  US9   U R                  R                  UR                  U5      S5        U R	                  U R                  R
                  S5        S S S 5        Mn     g ! , (       d  f       M  = f)Nz+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEREPLACE	statement)r   rC  r   )r&   rG  r$  formatr   r  )r   rw  r  s      r   test_last_row_id_on_replace'CursorTests.test_last_row_id_on_replace  se     <9I	2

9 5zB  !2!2A6 32 :22s   AA66
B	c                    U R                   R                  SS5        U R                  U R                   R                  S5        U R                   R                  SS5        U R                  U R                   R                  S5        g )Nz2insert or ignore into test(unique_test) values (?))testr  )rG  r$  r   r  r   s    r   test_last_row_id_on_ignore&CursorTests.test_last_row_id_on_ignore  sf    @	 	**A.@	 	**A.r!   c                 v   / nS H  nSnU R                  SR                  U5      S9   U R                  R                  UR                  U5      U45        UR	                  X R                  R
                  45        U R                  [        R                  5         U R                  R                  UR                  U5      U45        S S S 5        UR	                  X R                  R
                  45        S S S 5        M     / SQnU R                  X5        g ! , (       d  f       NV= f! , (       d  f       GM3  = f)N)FAILABORTROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {}r  )r  r  r  r  r2   r  r  r  r  )
r&   r  rG  r$  r  r  re  r   rY   r   )r   resultsr  rw  r  s        r   test_last_row_id_insert_o_r'CursorTests.test_last_row_id_insert_o_r  s    6IBC(=(=i(HI

9 5	|D	77+<+<=>&&v'<'<=GGOOCJJy$9I<H >	77+<+<=> JI 7

 	+ >= JIs$   A2D(-D.D(
D%!D((
D8	c                 &   SnU R                   R                  U5      n[        UR                  5      nU R                   R                  S5        U R                   R                  U5      n[        UR                  5      nU R	                  XC-
  S5        g )Nzselect * from testzalter table test add newcolr   )rG  r$  r_  descriptionr   )r   selectrx  	old_count	new_counts        r   test_column_countCursorTests.test_column_count  sk    %ggoof%(	56ggoof%(	.2r!   c                     [        S5       Vs/ s H  oR                  R                  S5      PM     nnU H$  nU R                  UR	                  5       S/5        M&     g s  snf )Nr2   r+  r  )r  r/  r$  r   rs  )r   _cursorsrG  s       r   #test_same_query_in_multiple_cursors/CursorTests.test_same_query_in_multiple_cursors  sM    8=aA177??:.ABR[[]TF3  Bs   $ArG  r/  N)Er8  r9  r:  r;  rH  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rj  r  r  r  rq  rr  r   r  r  r  r   r$  r)  r=  rD  rH  rK  rN  rS  rW  r[  ra  rl  rp  rs  rw  rz  r~  r  r  r  r  r  r  r  r  r  r  r<  r7  r!   r   rt  rt    sg   G,++,'" BKH-R
M
?
?
((
G97(((b
F
S
./.
 __V//*<68.8.. /\dM"L,4K
$$$
&"A"8D&")$"6$
%7/,"	34r!   rt  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S,r.g-).	BlobTestsi  c                    [         R                  " S5      U l        U R                  R                  S5        SU l        U R                  R                  SU R                  45        U R                  R                  SSS5      U l        g )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   rH  BlobTests.setUp  s]    ..,34I	8499,GGG$$VS!4	r!   c                 l    U R                   R                  5         U R                  R                  5         g rK  )r  rE  r/  r   s    r   rM  BlobTests.tearDown  s    		r!   c                 X    U R                  U R                  [        R                  5        g rK  )assertIsInstancer  r   r-  r   s    r   test_blob_is_a_blobBlobTests.test_blob_is_a_blob  s    dii5r!   c                 J   U R                   R                  S5        U R                  U R                   R                  5       S5        U R                   R                  S[        5        U R                  U R                   R                  5       S5        U R                   R                  S[
        5        U R                  U R                   R                  5       S5        U R                   R                  S[        5        U R                  U R                   R                  5       S5        g )Nr     (   )r  seekr   tellr	   r
   r   r   s    r   test_blob_seek_and_tell!BlobTests.test_blob_seek_and_tell  s    		r)2.		r8$)2.		r8$)2.		sH%)2.r!   c                   ^  SnSn[         UU 4S j4[         UU 4S j4[         UU 4S j4[         UU 4S j44nU H1  u  pEnT R                  XEUS9   T R                  XEU5        S S S 5        M3     g ! , (       d  f       ME  = f)Nzoffset out of blob rangez;'origin' should be os.SEEK_SET, os.SEEK_CUR, or os.SEEK_ENDc                  :   > T R                   R                  S5      $ )Nro  r  r  r   s   r   rq  0BlobTests.test_blob_seek_error.<locals>.<lambda>  s    $))..*>r!   c                  :   > T R                   R                  S5      $ )Nr  r  r   s   r   rq  r    s    $))..*=r!   c                  <   > T R                   R                  SS5      $ )Nr  r  r  r   s   r   rq  r    s    499>>"b+Ar!   c                  <   > T R                   R                  SS5      $ )Nr  r2   r  r   s   r   rq  r    s    499>>"a+@r!   )r'  r-   fn)r  r&   r  )r   msg_oormsg_origr.  r'  r-   r  s   `      r   test_blob_seek_errorBlobTests.test_blob_seek_error  s    ,P ">?"=>#AB#@A	
 $LCb#26&&s4 76 $66s   A00
A?	c                    Sn[         R                  " S5      nU R                  R                  S[        5        U R                  [        U5         U R                  R                  UR                  [        5        S S S 5        U R                  [        U5         U R                  R                  UR                  [        5        S S S 5        g ! , (       d  f       NX= f! , (       d  f       g = f)Nzseek offset results in overflow	_testcapir   )
r   import_moduler  r  r	   r  ri  INT_MAXr
   r   )r   msg_ofr  s      r   test_blob_seek_overflow_error'BlobTests.test_blob_seek_overflow_error  s    2!//<			q(###M6:IINN9,,h7 ;##M6:IINN9,,h7 ;: ;:::s   +C+C
C
C+c                 n    U R                   R                  5       nU R                  XR                  5        g rK  )r  readr   r&  r   bufs     r   test_blob_readBlobTests.test_blob_read  s$    iinnii(r!   c                     U R                   R                  [        U R                  5      S-  5      nU R	                  XR                  5        g )Nr  )r  r  r_  r&  r   r  s     r   test_blob_read_oversized"BlobTests.test_blob_read_oversized  s3    iinnS^a/0ii(r!   c                     SnU R                   R                  U5      nU R                  X R                  S U 5        U R                  U R                   R	                  5       U5        g )Nr  )r  r  r   r&  r  )r   r  r  s      r   test_blob_read_advance_offset'BlobTests.test_blob_read_advance_offset  sL    iinnQiim,)1-r!   c                     U R                   R                  S5        U R                  U R                   R                  S5      U R                  SS 5        g )Nr  r  )r  r  r   r  r&  r   s    r   test_blob_read_at_offset"BlobTests.test_blob_read_at_offset  s:    		r+TYYr"-=>r!   c                     U R                   R                  S5        U R                  [        R                  5         U R
                  R                  5         S S S 5        g ! , (       d  f       g = f)N&update test set b='aaaa' where rowid=1)r/  r$  re  r   rT   r  r  r   s    r    test_blob_read_error_row_changed*BlobTests.test_blob_read_error_row_changed  sA    @Av667IINN 877s   A
A-c                     SR                  S5      nU R                  R                  U5        U R                  R	                  S5      R                  5       nU R                  US   U5        g )Ns   new data2   select b from testr   )ljustr  writer/  r$  r  r   r   new_datar  s      r   test_blob_writeBlobTests.test_blob_write#  sR    $$R(		!ggoo23<<>Q*r!   c                    SnU R                   R                  S5        U R                   R                  U5        U R                  R	                  S5      R                  5       nU R                  US   U R                  S S U-   5        g )Ns   cccccccccccccccccccccccccr   r  r   )r  r  r  r/  r$  r  r   r&  r  s      r   test_blob_write_at_offset#BlobTests.test_blob_write_at_offset)  sf    		r		!ggoo23<<>Q3B(!:;r!   c                     U R                   R                  S5        U R                  U R                   R                  5       S5        g )Ns
   ddddddddddr  )r  r  r   r  r   s    r   test_blob_write_advance_offset(BlobTests.test_blob_write_advance_offset0  s-    		 )2.r!   c                    U R                  [        S5         U R                  R                  S5        S S S 5        U R                  R	                  S[
        5        [        U R                  5      nU R                  R                  SUS-
  -  5        U R                  R                  S5        U R                  [        S5         U R                  R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nzdata longer than blob  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar      ar   )r  r  r  r  r  r	   r_  )r   r  s     r   test_blob_write_error_length&BlobTests.test_blob_write_error_length4  s    ##J0GHIIOOK( I 			q(#		N		!%		##J0GHIIOOD! IH IH IHs   C'C8'
C58
Dc                     U R                   R                  S5        U R                  [        R                  5         U R
                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nr     aaa)r/  r$  re  r   rT   r  r  r   s    r   !test_blob_write_error_row_changed+BlobTests.test_blob_write_error_row_changed?  sC    @Av667IIOOF# 877r  c                     U R                   R                  SSSSS9nU R                  [        R                  S5         UR                  S5        S S S 5        UR                  5         g ! , (       d  f       N= f)Nr  r  r   T)readonlyr  r  )r/  r  r  r   rT   r  rE  )r   ro_blobs     r   test_blob_write_error_readonly(BlobTests.test_blob_write_error_readonlyD  sZ    ''""63D"A##F$;$;ZHMM&! I IHs   A((
A6c                 >   SSS04S0 4S0 4S0 44nSnU Hb  u  p4U R                  X4S9   U R                  [        R                  U5         U R                  R
                  " U0 UD6  S S S 5        S S S 5        Md     g ! , (       d  f       N= f! , (       d  f       M  = f)	N)r  r  r   r  notexisting)r  r  r   )r  r  r   )r  r  r  zno such)rg  kwds)r&   r  r   rT   r/  r  )r   r.  r  rg  r  s        r   test_blob_open_errorBlobTests.test_blob_open_errorJ  s    67$b)',r"	
 !JD43++F,C,CUKGG$$d3d3 L 43 "KK 43s#   !B
A<'B<
B
B
B	c                 N    U R                  [        U R                  5      S5        g )Nr  )r   r_  r  r   s    r   test_blob_lengthBlobTests.test_blob_lengthW  s    TYY,r!   c                    U R                  U R                  S   [        S5      5        U R                  U R                  S   [        S5      5        U R                  U R                  S   [        S5      5        U R                  U R                  S   [        S5      5        U R                  U R                  S   [        S	5      5        g )
Nr0  r  rQ  l   o   r  !)r   r  ordr   s    r   test_blob_get_itemBlobTests.test_blob_get_itemZ  s    1s3x01s3x01s3x01s3x02C1r!   c                     [        S5      U R                  S'   SU R                  SS  -   nU R                  R	                  S5      R                  5       S   nU R                  X!5        g )Nr  r      br   r  )r"  r  r&  r/  r$  r  r   r   r  r  s      r   test_blob_set_itemBlobTests.test_blob_set_itema  sV    3x		!$))AB-'!56??A!D*r!   c                    U R                   R                  S[        5        U R                  U R                   R	                  5       S5        [        S5      U R                   S'   [        S5      U R                   S'   U R                   R                  S[        5        SnU R                  U R                   R	                  5       U5        g )Nr   r!   T.r  s2   This blob data string is exactly fifty bytes long.)r  r  r   r   r  r"  r	   )r   r  s     r   test_blob_set_item_with_offset(BlobTests.test_blob_set_item_with_offsetg  s    		q(#)3/3x		!C		"		q(#H)84r!   c                 Z   SSK J n  [        S5      U R                  SS& U R                  U R                  SS S5        [	        S5      U R                  SS& U R                  U R                  SS S5        U" S/ SQ5      U R                  SS& U R                  U R                  SS S5        g )	Nr   )array   12345r0  s   23456r  )r   r  r2   r  r0  s   )r0  r,  r  r   	bytearray)r   r0  s     r   !test_blob_set_slice_buffer_object+BlobTests.test_blob_set_slice_buffer_objectp  s    #H-		!A1Q2"8,		!A1Q2sO4		!A1Q)@Ar!   c                 `    SU R                   S'   U R                  U R                   S   S5        g )N   r  )r  r   r   s    r   !test_blob_set_item_negative_index+BlobTests.test_blob_set_item_negative_index{  s'    		"2,r!   c                 B    U R                  U R                  SS S5        g )Nr0     s	   blob datar   r  r   s    r   test_blob_get_sliceBlobTests.test_blob_get_slice  s    1R,7r!   c                 B    U R                  U R                  SS S5        g )Nr0  r!   r;  r   s    r   test_blob_get_empty_slice#BlobTests.test_blob_get_empty_slice  s    1Q-r!   c                 \    U R                  U R                  SS U R                  SS 5        g )Nr0  )r   r  r&  r   s    r   "test_blob_get_slice_negative_index,BlobTests.test_blob_get_slice_negative_index  s&    1R$))Ab/:r!   c                 H    U R                  U R                  SSS2   S5        g )Nr   r  r  s   ti lbr;  r   s    r   test_blob_get_slice_with_skip'BlobTests.test_blob_get_slice_with_skip  s!    1R6*H5r!   c                     SU R                   SS& SU R                  SS  -   nU R                  R                  S5      R	                  5       S   nU R                  X!5        g )Nr1  r   r0  r  )r  r&  r/  r$  r  r   r'  s      r   test_blob_set_sliceBlobTests.test_blob_set_slice  sT    !		!Adiim+!56??A!D*r!   c                 t    SU R                   SS& U R                  U R                   S S  U R                  5        g )Nr!   r   )r  r   r&  r   s    r   test_blob_set_empty_slice#BlobTests.test_blob_set_empty_slice  s-    		!A1tyy1r!   c                     SU R                   SSS2'   U R                  R                  S5      R                  5       S   nSU R                  SS  -   nU R                  X5        g )Nr1  r   r  r  r  s
   1h2s3b4o5 )r  r/  r$  r  r&  r   )r   r  r  s      r   test_blob_set_slice_with_skip'BlobTests.test_blob_set_slice_with_skip  sY    $		!Bq&!56??A!D 499RS>1*r!   c                    SnU R                  [        U5         U R                  SS   S S S 5        U R                  [        U5         U R                  S     S S S 5        U R                  [        U5         SU R                  S'   S S S 5        g ! , (       d  f       Nk= f! , (       d  f       NN= f! , (       d  f       g = f)Nzindices must be integersr0  g      @g      ?r&  r  r  r-  r  )r   r-   s     r   $test_blob_mapping_invalid_index_type.BlobTests.test_blob_mapping_invalid_index_type  s    (##Is3IIa 4##Is3IIcN 4##Is3!DIIcN 43	 433333s#   BB5B0
B
B-0
B>c                    [        U R                  5      SS/nU HI  nU R                  US9   U R                  [        S5         U R                  U     S S S 5        S S S 5        MK     U R
                  R                  S5        U R                  [        R                  5         U R                  S     S S S 5        g ! , (       d  f       Nm= f! , (       d  f       M  = f! , (       d  f       g = f)Ni   i)idxzindex out of ranger  r   )
r_  r  r&   r  
IndexErrorr/  r$  re  r   rT   )r   r.  rW  s      r   test_blob_get_item_error"BlobTests.test_blob_get_item_error  s    tyy>3-C#&++J8LMIIcN N '&  	@Av667IIaL 87 NM '& 87s/   CB;C"C;
C	C
C	
C,c                     [         R                  " S5      nU R                  [        S5         U R                  UR
                       S S S 5        g ! , (       d  f       g = f)Nr  zcannot fit 'int')r   r  r  rX  r  
ULLONG_MAX)r   r  s     r   test_blob_get_item_error_bigint)BlobTests.test_blob_get_item_error_bigint  sB    !//<	##J0BCIIi**+ DCCs   A
Ac                    U R                  [        S5         SU R                  S'   S S S 5        U R                  [        S5         SU R                  S'   S S S 5        U R                  [        S5         [        S5      U R                  S'   S S S 5        U R                  [        S5         U R                  S	 S S S 5        U R                  [        S5         SU R                  S'   S S S 5        U R                  [
        S5         S	U R                  S'   S S S 5        U R                  [
        S5         S
U R                  S'   S S S 5        U R                  [
        S5         SS-  U R                  S'   S S S 5        g ! , (       d  f       GN\= f! , (       d  f       GN@= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nzcannot be interpreteds   multipler   r  doesn't support.*deletionzBlob index out of rangero  zmust be in ranger     r  A   )r  r-  r  r2  rX  r  r   s    r   test_blob_set_item_error"BlobTests.test_blob_set_item_error  sk   ##I/FG&DIIaL H##I/FGDIIaL H##I/FG$T?DIIaL H##I/JK		! L##J0IJDIIdO K##J0BCDIIaL D##J0BCDIIaL D ##J0BCb5DIIaL DC HGGGGGKKJJCCCC DCs_   E<F3F *F2GG2G& G7<
F
F 
F/2
G
G
G#&
G47
Hc                    U R                  [        S5         SU R                  SS& S S S 5        U R                  [        S5         SU R                  SS& S S S 5        U R                  [        S5         U R                  SS2	 S S S 5        U R                  [        S5         SU R                  SSS	2'   S S S 5        U R                  [        5         [        S
5      S S S2   U R                  SS& S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       g = f)Nz
wrong sizer  r0  r  r  r`  zstep cannot be zeror1  r   s   abcder  )r  rX  r  r-  r  re  r+  r,  r   s    r   test_blob_set_slice_error#BlobTests.test_blob_set_slice_error  s    ##J="DIIaO >##J=)DIIaO >##I/JK		!B$ L##J0EF (DIIa1f G{+(23Q37DIIaO ,+ >===KKFF++s;   C9D
3D!D,D=9
D

D
D),
D:=
Ec                    U R                  [        S5         U R                  U R                  -     S S S 5        U R                  [        S5         U R                  S-    S S S 5        U R                  [        S5         SU R                  ;     S S S 5        g ! , (       d  f       Nk= f! , (       d  f       NN= f! , (       d  f       g = f)Nzunsupported operandr0  zis not iterabler  rR  r   s    r    test_blob_sequence_not_supported*BlobTests.test_blob_sequence_not_supported  s    ##I/DEII		! F##I/DEIIM F##I/@ADII BA	 FEEEAAs#   BB'=B8
B$'
B58
Cc                    SnU R                   R                  SSS5       nUR                  U5        S S S 5        U R                   R                  S5      R	                  5       S   nU R                  X15        U R                  [        R                  S5         WR                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ns2   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r  r   r  r   zclosed blob)
r/  r  r  r$  r  r   r  r   ra   r  )r   r&  r  r  s       r   test_blob_context_manager#BlobTests.test_blob_context_manager  s    WWfc1-JJt .!56??A!D& ##F$;$;]KIIK LK .- LKs   B1C1
B?
Cc                      " S S[         5      nU R                  US5         U R                  R                  SSS5       nU" S5      e! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg)NBlobTests.test_blob_context_manager_reraise_exceptions.<locals>.DummyExceptioni  r7  Nr  r7  r!   r   DummyExceptionrp    s    r!   rq  reraisedr  r  r   )r@   r  r/  r  )r   rq  r  s      r   ,test_blob_context_manager_reraise_exceptions6BlobTests.test_blob_context_manager_reraise_exceptions  sZ    	Y 	##NJ?!!&#q1T$Z00 211 @??s   A$ 	A		
A	A$$
A2c                 n   [        5        nUR                  S5        UR                  S5        UR                  SSS5      nUR                  5         SnU R	                  [
        R                  U5         UR                  5         S S S 5        U R	                  [
        R                  U5         UR                  S5        S S S 5        U R	                  [
        R                  U5         UR                  S5        S S S 5        U R	                  [
        R                  U5         UR                  5         S S S 5        U R	                  [
        R                  U5         UR                  5         S S S 5        U R	                  [
        R                  U5         UR                  S S S 5        S S S 5        U R	                  [
        R                  U5         [        U5        S S S 5        U R	                  [
        R                  U5         US     S S S 5        U R	                  [
        R                  U5         USS   S S S 5        U R	                  [
        R                  U5         SUS'   S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNZ= f! , (       d  f       GN0= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)	Nr  z'insert into test values (zeroblob(100))r  r  r   zCannot operate on a closed blobr!   r   )r   r$  r  rE  r  r   ra   r  r  r  r  	__enter____exit__r_  )r   r/  r  r-   s       r   test_blob_closedBlobTests.test_blob_closed  s   "JJ23JJ@A;;vsA.DJJL3C''(?(?E		 F''(?(?E

3 F''(?(?E		! F''(?(?E		 F''(?(?E  F''(?(?EdD$/ F''(?(?ED	 F''(?(?EQ F''(?(?EQq	 F''(?(?EQ F3  FEEEEEEEEEEEEEEEEEEE3 s   A(L&3I5(L&,J>(L&&J8(L& J+1(L&J=*(L&K&(L&K!(L&K3(L&0L6(L&L$L&5
J	?L&
J	L&
J(	#L&+
J:	5L&=
K	L&
K	L&!
K0	+L&3
L	=L&
L	L&
L#	L&&
L4c                 ,   [        5        nUR                  S5        UR                  S5        UR                  SSS5      nUR                  5         U R	                  [
        R                  SUR                  5        S S S 5        g ! , (       d  f       g = f)Nr  z*insert into test(b) values (zeroblob(100))r  r  r   z#Cannot operate on a closed database)r   r$  r  rE  r  r   ra   r  )r   r/  r  s      r   test_blob_closed_db_read"BlobTests.test_blob_closed_db_read  sk    "JJ23JJCD;;vsA.DHHJ""6#:#:#H#'99. s   A1B
Bc                     [        5        nSnUR                  S5        UR                  SU45        UR                  SSU5        S S S 5        g ! , (       d  f       g = f)Nl        zcreate table t(t blob)z/insert into t(rowid, t) values (?, zeroblob(1))rm  )r   r$  r  )r   r/  rowids      r   test_blob_32bit_rowidBlobTests.test_blob_32bit_rowid  sI    "EJJ/0JJH5(SKKS%(	 s   :A
A)r  r/  r&  N)/r8  r9  r:  r;  rH  rM  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r#  r(  r-  r3  r7  r<  r?  rC  rF  rI  rL  rO  rS  rY  r]  rc  rf  ri  rl  rs  rx  r{  r  r<  r7  r!   r   r  r    s    56/58)).?
+</	"$
4-2+5	B-8.;6+2+"
,
!&
8	1:.)r!   r  c                   t    \ rS rSrS rS r\R                  S 5       rS r	S r
\R                  S 5       rSrg	)
ThreadTestsi  c                     [         R                  " S5      U l        U R                  R                  5       U l        U R                  R                  S5        U R                  R                  S5        g )Nr@  z$create table test(name text, b blob)z,insert into test values('blob', zeroblob(1)))r   r  r%  rD  rZ  r$  r   s    r   rH  ThreadTests.setUp!  sJ    >>*-88??$?@GHr!   c                 l    U R                   R                  5         U R                  R                  5         g rK  rZ  rE  r%  r   s    r   rM  ThreadTests.tearDown'      r!   c                    ^^^ UUU4S jn/ n[         R                  " USU0S9nUR                  5         UR                  5         U(       a!  U R	                  SR                  U5      5        g g )Nc                    >  T" T0 TD6  U R                  S5        g ! [        R                   a     g   U R                  S5         g = f)Nzdid not raise ProgrammingErrorzraised wrong exception)r  r   ra   )errrg  r  r  s    r   run"ThreadTests._run_test.<locals>.run-  sG    5D!D!

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

34s    AAr  targetrh  
)	threadingThreadstartjoinfail)r   r  rg  r  r  r  rm  s    ```   r   	_run_testThreadTests._run_test+  sS    	5 C=			IIdiin% r!   c                   ^  U 4S jU 4S jU 4S jU 4S jU 4S jU 4S jU 4S jU 4S jU 4S	 jU 4S
 j/
n[        [        R                  S5      (       a*  UR                  U 4S j5        UR                  U 4S j5        [        R                  S:  a  UR                  U 4S j5        U H,  nT R                  US9   T R                  U5        S S S 5        M.     g ! , (       d  f       M@  = f)Nc                  8   > T R                   R                  5       $ rK  )r%  rD  r   s   r   rq  :ThreadTests.test_check_connection_thread.<locals>.<lambda>?      DHHOO%r!   c                  8   > T R                   R                  5       $ rK  )r%  rR  r   s   r   rq  r  @  r  r!   c                  8   > T R                   R                  5       $ rK  )r%  rZ  r   s   r   rq  r  A      DHH%%'r!   c                  8   > T R                   R                  5       $ rK  )r%  rE  r   s   r   rq  r  B      DHHNN$r!   c                  :   > T R                   R                  S 5      $ rK  )r%  set_trace_callbackr   s   r   rq  r  C  s    DHH//5r!   c                  :   > T R                   R                  S 5      $ rK  )r%  set_authorizerr   s   r   rq  r  D  s    DHH++D1r!   c                  <   > T R                   R                  SS 5      $ r  )r%  create_collationr   s   r   rq  r  E  s    DHH--eT:r!   c                  X   > T R                   R                  [        R                  S5      $ )Nr  )r%  r  r   r   r   s   r   rq  r  F  s    DHH%%f&@&@"Er!   c                  V   > T R                   R                  [        R                  5      $ rK  )r%  r  r   r   r   s   r   rq  r  G  s    DHH%%f&@&@Ar!   c                  >   > T R                   R                  SSS5      $ )Nr  r  r   )r%  r  r   s   r   rq  r  H  s    DHH%%fc15r!   r!  c                  8   > T R                   R                  5       $ rK  )r%  r!  r   s   r   rq  r  K  s    txx113r!   c                  :   > T R                   R                  S5      $ )Nr!   )r%  r%  r   s   r   rq  r  L  s    txx33C8r!   r   c                  >   > T R                   R                  SSS 5      $ )NrC  r   )r%  create_window_functionr   s   r   rq  r  N  s    txx>>uaNr!   r  )r  r   r  r  r  r&   r  r   fnsr  s   `  r   test_check_connection_thread(ThreadTests.test_check_connection_thread=  s    %%'$51:EA5
 6$$k22JJ34JJ89%%3JJNOB$r" %$ $$s   <C
C*	c                    ^  U 4S jU 4S jU 4S jU 4S j/nU H,  nT R                  US9   T R                  U5        S S S 5        M.     g ! , (       d  f       M@  = f)Nc                  :   > T R                   R                  S5      $ )Nz"insert into test(name) values('a')rZ  r$  r   s   r   rq  6ThreadTests.test_check_cursor_thread.<locals>.<lambda>V  s    DHH$$%IJr!   c                  8   > T R                   R                  5       $ rK  )rZ  rE  r   s   r   rq  r  W  r  r!   c                  :   > T R                   R                  S5      $ )NrV  r  r   s   r   rq  r  X  s    DHH$$%<=r!   c                  8   > T R                   R                  5       $ rK  )rZ  r  r   s   r   rq  r  Y  r  r!   r  )r&   r  r  s   `  r   test_check_cursor_thread$ThreadTests.test_check_cursor_threadT  sK    J$='	
 B$r" %$ $$s   A
A	c                    S n[        SS9 n/ n[        R                  " XUS.S9nUR                  5         UR	                  5         U R                  [        U5      SSR	                  U5      5        S S S 5        g ! , (       d  f       g = f)Nc                 ~     U R                  S5        g ! [        R                   a    UR                  S5         g f = f)Nr+  zmulti-threading not allowed)r$  r   rD   r  r%  r  s     r   r  4ThreadTests.test_dont_check_same_thread.<locals>.runb  s3    :J'<< :

89:s    %<<F)check_same_threadr  r  r   r  )r   r  r  r  r  r   r_  )r   r  r%  r  rm  s        r   test_dont_check_same_thread'ThreadTests.test_dont_check_same_thread`  si    	: u5C  4LMAGGIFFHSXq$))C.9 655s   A%A;;
B	r%  rZ  N)r8  r9  r:  r;  rH  rM  r   reap_threadsr  r  r  r  r<  r7  r!   r   r  r    sK    I ""& #&"#.	# "": #:r!   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)ConstructorTestsip  c                 4    [         R                  " SSS5      ng )N  r     )r   Dater   r  s     r   	test_dateConstructorTests.test_dateq  s    KKb"%r!   c                 4    [         R                  " SSS5      ng )N   '   r  )r   Timer   rm  s     r   	test_timeConstructorTests.test_timet  s    KKB#r!   c                 :    [         R                  " SSSSSS5      ng )Nr  r  r  r  r  r  )r   	Timestampr   tss     r   test_timestampConstructorTests.test_timestampw  s    dBBB7r!   c                 0    [         R                  " S5      ng r  )r   DateFromTicksr  s     r   test_date_from_ticks%ConstructorTests.test_date_from_ticksz        $r!   c                 0    [         R                  " S5      ng r  )r   TimeFromTicksr  s     r   test_time_from_ticks%ConstructorTests.test_time_from_ticks}  r  r!   c                 0    [         R                  " S5      ng r  )r   TimestampFromTicksr  s     r   test_timestamp_from_ticks*ConstructorTests.test_timestamp_from_ticks  s    &&r*r!   c                 0    [         R                  " S5      ng )Ns    ')r   Binary)r   r  s     r   test_binaryConstructorTests.test_binary  s    MM&!r!   r7  N)r8  r9  r:  r;  r  r  r  r  r  r  r  r<  r7  r!   r   r  r  p  s%    &$8%%+"r!   r  c                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)ExtensionTestsi  c                 x    [         R                  " S5      U l        U R                  R                  5       U l        g r  )r   r  r%  rD  rZ  r   s    r   rH  ExtensionTests.setUp  s$    >>*-88??$r!   c                 l    U R                   R                  5         U R                  R                  5         g rK  r  r   s    r   rM  ExtensionTests.tearDown  r  r!   c                     U R                   nUR                  S5        UR                  S5        UR                  5       S   nU R	                  US5        g )Nz
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from ar   r0  )rZ  ru  r$  r  r   )r   rZ  rx  s      r   test_script_string_sql%ExtensionTests.test_script_string_sql  sM    hh  	 	%&llnQa r!   c                     U R                  [        R                  5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = f)Nzo
                CREATE TABLE test(x);
                asdf;
                CREATE TABLE test2(x)
            re  r   rT   rZ  ru  r   s    r   test_script_syntax_error'ExtensionTests.test_script_syntax_error  s9    v667HH"" $  877r  c                     U R                  [        R                  5         U R                  R	                  S5        S S S 5        g ! , (       d  f       g = f)Nzc
                CREATE TABLE test(sadfsadfdsa);
                SELECT foo FROM hurz;
            r  r   s    r   test_script_error_normal'ExtensionTests.test_script_error_normal  s9    v667HH"" $  877r  c                     U R                  [        5         U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nsg   
                CREATE TABLE test(foo);
                INSERT INTO test(foo) VALUES (5);
            )re  r-  rZ  ru  r   s    r   "test_cursor_executescript_as_bytes1ExtensionTests.test_cursor_executescript_as_bytes  s3    y)HH"" $  *))r  c                     U R                  [        5         U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nz^
                CREATE TABLE a(i); 
                INSERT INTO a(i) VALUES (5);
            )re  r  rZ  ru  r   s    r   .test_cursor_executescript_with_null_characters=ExtensionTests.test_cursor_executescript_with_null_characters  s3    z*HH"" $  +**r  c                     U R                  [        5         U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nua   
                CREATE TABLE a(s);
                INSERT INTO a(s) VALUES ('');
            )re  UnicodeEncodeErrorrZ  ru  r   s    r   )test_cursor_executescript_with_surrogates8ExtensionTests.test_cursor_executescript_with_surrogates  s4    12HH"" $  322r  c           	         Sn[        5        n[        U5       nUR                  SR                  U5      5        U R	                  [
        R                  U5         UR                  SR                  US-   5      5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr  zselect 'almost too large'zselect 'too large'r   )r   r   ru  r  r  r   rP   )r   r-   r/  lims       r   *test_cursor_executescript_too_large_script9ExtensionTests.test_cursor_executescript_too_large_script  s    )"hrlc8>>sCD''(8(8#>  !5!;!;CE!BC ? '3>> '3ls;   B9AB($B>B(B9
B%!B((
B6	2B99
Cc                     U R                   nUR                  S5        U R                  UR                  5        UR	                  S5        U R                  UR                  5        g )Nbeginr+  )r%  r$  r=   r  ru  r3  )r   r%  s     r   $test_cursor_executescript_tx_control3ExtensionTests.test_cursor_executescript_tx_control  sK    hhG**+*%++,r!   c                     U R                   R                  S5      R                  5       S   nU R                  USS5        g )Nzselect 5r   r0  z Basic test of Connection.execute)r%  r$  r  r   )r   results     r   test_connection_execute&ExtensionTests.test_connection_execute  s7    !!*-668;$FGr!   c                    U R                   nUR                  S5        UR                  SSS/5        UR                  S5      R                  5       nU R	                  US   S   SS5        U R	                  US	   S   S
S5        g )Nzcreate table test(foo)z insert into test(foo) values (?)r  r  z!select foo from test order by foor   r2   z$Basic test of Connection.executemanyr   r  )r%  r$  rt  rs  r   r   r%  r  s      r   test_connection_executemany*ExtensionTests.test_connection_executemany  sy    hh,-:T4LI@AJJL1q*PQ1q*PQr!   c                     U R                   nUR                  S5        UR                  S5      R                  5       S   nU R	                  USS5        g )Nz[
            CREATE TABLE test(foo);
            INSERT INTO test(foo) VALUES (5);
        zselect foo from testr   r0  z&Basic test of Connection.executescript)r%  ru  r$  r  r   r  s      r   test_connection_executescript,ExtensionTests.test_connection_executescript  sP    hh  	 34==?B$LMr!   r  N)r8  r9  r:  r;  rH  rM  r  r  r  r  r   r  r  r  r  r  r  r<  r7  r!   r   r  r    sG    %
!D-HRNr!   r  c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)ClosedConTestsi  c                     SnU R                  [        R                  U5         U" U0 UD6  S S S 5        g ! , (       d  f       g = f)Nz$Cannot operate on a closed database.)r  r   ra   )r   r  rg  r  r  s        r   checkClosedConTests.check  s7    6##F$;$;UC DCCs	   	5
Ac                     [         R                  " S5      U l        U R                  R                  5       U l        U R                  R                  5         g r  )r   r  r%  rD  rZ  rE  r   s    r   rH  ClosedConTests.setUp  s2    >>*-88??$r!   c                 N    U R                  U R                  R                  5        g rK  )r  r%  rD  r   s    r   test_closed_con_cursor%ClosedConTests.test_closed_con_cursor      

488??#r!   c                 N    U R                  U R                  R                  5        g rK  )r  r%  rR  r   s    r   test_closed_con_commit%ClosedConTests.test_closed_con_commit  r$  r!   c                 N    U R                  U R                  R                  5        g rK  )r  r%  rZ  r   s    r   test_closed_con_rollback'ClosedConTests.test_closed_con_rollback  s    

488$$%r!   c                 P    U R                  U R                  R                  S5        g )Nzselect 4)r  rZ  r$  r   s    r   test_closed_cur_execute&ClosedConTests.test_closed_cur_execute  s    

488##Z0r!   c                 Z    S nU R                  U R                  R                  SSU5        g )Nc                     gNr  r7  ro  s    r   r  5ClosedConTests.test_closed_create_function.<locals>.f  s    r!   rC  r   )r  r%  rv  )r   r  s     r   test_closed_create_function*ClosedConTests.test_closed_create_function  s#    	

488++UAq9r!   c                 h     " S S5      nU R                  U R                  R                  SSU5        g )Nc                   &    \ rS rSrS rS rS rSrg)8ClosedConTests.test_closed_create_aggregate.<locals>.Aggi   c                     g rK  r7  r   s    r   r  AClosedConTests.test_closed_create_aggregate.<locals>.Agg.__init__      r!   c                     g rK  r7  r  s     r   step=ClosedConTests.test_closed_create_aggregate.<locals>.Agg.step  r9  r!   c                     gr0  r7  r   s    r   finalizeAClosedConTests.test_closed_create_aggregate.<locals>.Agg.finalize  s    r!   r7  N)r8  r9  r:  r;  r  r;  r>  r<  r7  r!   r   Aggr6     s    r!   r@  rC  r   )r  r%  create_aggregate)r   r@  s     r   test_closed_create_aggregate+ClosedConTests.test_closed_create_aggregate  s*    	 	 	

488,,eQ<r!   c                 V    S nU R                  U R                  R                  U5        g )Nc                  "    [         R                  $ rK  )r   DENY)rg  s    r   
authorizer=ClosedConTests.test_closed_set_authorizer.<locals>.authorizer
  s    ;;r!   )r  r%  r  )r   rG  s     r   test_closed_set_authorizer)ClosedConTests.test_closed_set_authorizer	  s    	

488**J7r!   c                 X    S nU R                  U R                  R                  US5        g )Nc                      g rK  r7  r7  r!   r   progressBClosedConTests.test_closed_set_progress_callback.<locals>.progress  s    r!   r'  )r  r%  set_progress_handler)r   rM  s     r   !test_closed_set_progress_callback0ClosedConTests.test_closed_set_progress_callback  s!    	

48800(C@r!   c                 :    U R                  U R                  5        g rK  )r  r%  r   s    r   test_closed_callClosedConTests.test_closed_call  s    

488r!   r  N)r8  r9  r:  r;  r  rH  r"  r&  r)  r,  r2  rB  rI  rP  rS  r<  r7  r!   r   r  r    s:    

$$&1:
=8
A
r!   r  c                       \ rS rSrS rSrg)ClosedCurTestsi  c                 .   U R                   R                  5       nUR                  5         S HS  nUS;   a  SnOUS:X  a  SSS/4nO/ nU R                  [        R
                  5         [        X5      nU" U6   S S S 5        MU     g ! , (       d  f       Mg  = f)N)r$  rt  ru  rs  r  r  )r$  ru  )zselect 4 union select 5rt  zinsert into foo(bar) values (?)r  r  )r/  rD  rE  re  r   ra   r)   )r   rZ  method_namer  methods        r   test_closedClosedCurTests.test_closed  s    ggnn		kK::5-;dD\J""6#:#:; 2 <; l <;s   'B
B	r7  N)r8  r9  r:  r;  rZ  r<  r7  r!   r   rV  rV    s     r!   rV  c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)SqliteOnConflictTestsi)  c                     [         R                  " S5      U l        U R                  R                  5       U l        U R                  R                  S5        g )Nr@  zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        rv  r   s    r   rH  SqliteOnConflictTests.setUp0  s9    ..,''.."  	r!   c                 l    U R                   R                  5         U R                  R                  5         g rK  ry  r   s    r   rM  SqliteOnConflictTests.tearDown9  r{  r!   c                 l   S U R                   l        U R                   R                  5       U l        U R                  R	                  S5        U R                  R	                  S5        U R                  R	                  S5        U R                  [        R                  5         U R                  R	                  S5        S S S 5        U R                   R                  5         U R                  R	                  S5        U R                  U R                  R                  5       / 5        g ! , (       d  f       Nn= f)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  rD  rG  r$  re  r   rY   rR  r   rs  r   s    r   3test_on_conflict_rollback_with_explicit_transactionISqliteOnConflictTests.test_on_conflict_rollback_with_explicit_transaction=  s    "&''.." FGRSv445GGOOVW 6 	<=))+R0 65s   !D%%
D3c                 p   S U R                   l        U R                   R                  5       U l        U R                  R	                  S5        U R                  R	                  S5        U R                  R	                  S5        U R                  [        R                  5         U R                  R	                  S5        S S S 5        U R                   R                  5         U R                  R	                  S5        U R                  U R                  R                  5       SS/5        g ! , (       d  f       Np= f)Nrc  rd  5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')"SELECT name, unique_name FROM test
abort_testNr  rf  r   s    r   8test_on_conflict_abort_raises_with_explicit_transactionsNSqliteOnConflictTests.test_on_conflict_abort_raises_with_explicit_transactionsL  s     #'''.." FGOPv445GGOOST 6<=))+.BN-ST 65s   !D''
D5c                    U R                   R                  S5        U R                   R                  S5        U R                  [        R                  5         U R                   R                  S5        S S S 5        U R                   R                  S5        U R                  U R                   R                  5       / 5        g ! , (       d  f       NT= f)Nrd  re  rk  rG  r$  re  r   rY   r   rs  r   s    r   -test_on_conflict_rollback_without_transactionCSqliteOnConflictTests.test_on_conflict_rollback_without_transaction\  s    FGRSv445GGOOVW 6<=))+R0	 65s   C  
Cc                    U R                   R                  S5        U R                   R                  S5        U R                  [        R                  5         U R                   R                  S5        S S S 5        U R                   R                  S5        U R                  U R                   R                  5       SS/5        g ! , (       d  f       NV= f)Nrd  rj  rk  rl  r  rq  r   s    r   2test_on_conflict_abort_raises_without_transactionsHSqliteOnConflictTests.test_on_conflict_abort_raises_without_transactionsf  s     	FGOPv445GGOOST 6 	<=))+.BN-ST	 65s   C
Cc                 6   U R                   R                  S5        U R                  [        R                  5         U R                   R                  S5        S S S 5        U R                  U R                   R                  5       / 5        g ! , (       d  f       N9= f)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')rq  r   s    r   test_on_conflict_fail+SqliteOnConflictTests.test_on_conflict_failq  sc    NOv445GGOORS 6))+R0 65s   B


Bc                     U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  5       S/5        g )Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testrB  rG  r$  r   rs  r   s    r   test_on_conflict_ignore-SqliteOnConflictTests.test_on_conflict_ignorew  sT    PQPQ67))+hZ8r!   c                     U R                   R                  S5        U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  5       S/5        g )NzFINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')zUINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')rk  )zVery different data!rC  r{  r   s    r   test_on_conflict_replace.SqliteOnConflictTests.test_on_conflict_replace~  sV    `aop<=))+.M-NOr!   r  N)r8  r9  r:  r;  rH  rM  rg  rn  rr  ru  rx  r|  r  r<  r7  r!   r   r]  r]  )  s2    1U 1	U19Pr!   r]  c                   $    \ rS rSrSrS rS rSrg)MultiprocessTestsi  r   c                 "    [        [        5        g rK  )r   r   r   s    r   rM  MultiprocessTests.tearDown  s	    vr!   c                    S[          SU R                   S3n[        R                  " [        R
                  SU/SS[        R                  [        R                  S9nU R                  UR                  5        U R                  SUR                  R                  5       R                  5       5        [        R                  " [         U R                  S	9n U   UR                  S
5        S S S 5        UR                   R#                  S5        UR)                  5         U R+                  UR,                  5         UR                  S[.        S9  U R                  UR,                  S5        g ! , (       d  f       N= f! [        R$                   a.  nUR                   R#                  ['        U5      5         S nANS nAff = f! UR)                  5         f = f! [        R0                   a"    UR3                  5         UR                  5         e f = f)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)inputr  )r   CONNECTION_TIMEOUT
subprocessPopenr  
executablePIPEr9  communicater   r  readlinestripr   r  r$  r  r  rT   r  rE  r  
returncoder   TimeoutExpiredkill)r   SCRIPTprocr/  r'  s        r   &test_ctx_mgr_rollback_if_commit_failed8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failed  s   # $*(+d6M6M5N O	: ^^T6*//??
 	(() 	DKK$8$8$:$@$@$BC^^FD,C,CD	

9: 
 JJZ(HHJ 	$//*	5-@
 	!,# && 	'JJSX&&	'
 HHJ (( 	IIK	sT   E9 E((E9 0F> 7G (
E62E9 9F;$F61F> 6F;;F> >G6H	r7  N)r8  r9  r:  r;  r  rM  r  r<  r7  r!   r   r  r    s    >-r!   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)RowTestsi  c                 x    [         R                  " S5      U l        [         R                  U R                  l        g r  )r   r  r/  r  r  r   s    r   rH  RowTests.setUp  s"    ..,$jjr!   c                 8    U R                   R                  5         g rK  rL  r   s    r   rM  RowTests.tearDown  rO  r!   c                     U R                   R                  S5      nUR                  5       nU R                  UR	                  5       SS/5        g )NzSELECT 1 as first, 2 as secondfirstsecond)r/  r$  r  r   keysr   rG  r  s      r   test_row_keysRowTests.test_row_keys  s;    WW__=>kkmgx%89r!   c                     U R                   R                  S5      nUR                  5       nU R                  [	        U5      S5        g )NzSELECT 1, 2, 3r2   )r/  r$  r  r   r_  r  s      r   test_row_lengthRowTests.test_row_length  s4    WW__-.kkmS1%r!   c                    U R                   R                  S5      nUR                  5       nU R                  US   S5        U R                  US   S5        U R                  US   S5        U R                  US   S5        S H=  nU R	                  US9   U R                  [        5         X#     S S S 5        S S S 5        M?     g ! , (       d  f       N= f! , (       d  f       Mb  = f)	NzSELECT 1 as a, 2 as br   r   r  r  r  )nokeyr  g333333?)r  )r/  r$  r  r   r&   re  rX  )r   rG  r  r  s       r   test_row_getitemRowTests.test_row_getitem  s    WW__45kkmQ#Q#S1%S1%"C#&&&z2H 3 '& #22 '&s$   C*C/C
CC
C$	c                 l   U R                   R                  S5      nUR                  5       nU R                   R                  S5      nUR                  5       nU R                  X$5        U R	                  X$5        U R                   R                  S5      nUR                  5       nU R                  X&5        g )NzSELECT 1 as azSELECT 1 as b)r/  r$  r  assertIsNotr   assertNotEqual)r   c1r1c2r2c3r3s          r   test_row_equalityRowTests.test_row_equality  s    WW___-[[]WW___-[[]  WW___-[[]B#r!   c                 F   U R                   R                  5       nU R                  UR                  5        [        R
                  " US5      nU R                  UR                  5       / 5        U R                  [        S5         US     S S S 5        g ! , (       d  f       g = f)Nr7  r  )
r/  rD  r  r  r   r  r   r  r  rX  r  s      r   test_row_no_description RowTests.test_row_no_description  sm    WW^^"..)jjR R(##J8L 988s   B
B c                     SSK Jn  U R                  R                  S5      nUR	                  5       nU R                  [        [        R                  U5      5        U R                  [        X15      5        g )Nr   )SequencezSELECT 1)
collections.abcr  r/  r$  r  r=   r>   r   r  r  )r   r  rG  r  s       r   test_row_is_a_sequenceRowTests.test_row_is_a_sequence  sJ    ,WW__Z(kkm
6::x89
312r!   r  N)r8  r9  r:  r;  rH  rM  r  r  r  r  r  r  r<  r7  r!   r   r  r    s*    ):
&

$3r!   r  __main__)6r<  rf  r7  sqlite3r   r  r  r  rq  urllib.parserU  r  test.supportr   r   r   r   r   r   r	   r
   r   test.support.os_helperr   r   r   r   r   utilr   r   r   TestCaser   r>  r  
skipUnlessr  r  r#  r5  rt  r  requires_working_threadingr  r  r  r  rV  r]  r  r  r8  mainr7  r!   r   <module>r     s  .   	   
      $ 8 + + Y Y + %UI(## UIpN/h'' N/b-8#4#4 -( 
WV..<13%3X&& %33%3Pa:!! a:H\4(## \4~D)!! D)N
 ,,.M:(## M: /M:`"x(( ",ZNX&& ZNz1X&& 1h ((*;*;  $ZPH-- ZPz D-)) D- D-N>3x   >3B zMMO r!   