a 8êdgØ<ã@shddlZddlZddlZddlZddlZddlmZGdd„dejƒZ dd„Z dd„Ze d krdeƒdS) éN)Úsupportc@seZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e   e j dkd¡dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Z d7d8„Z!d9d:„Z"d;d<„Z#d=d>„Z$d?d@„Z%dAS)BÚRegressionTestscCst d¡|_dS)Nú:memory:)ÚsqliteÚconnectÚcon©Úself©r ú3/usr/local/lib/python3.9/sqlite3/test/regression.pyÚsetUp szRegressionTests.setUpcCs|j ¡dS©N)rÚcloserr r r ÚtearDown#szRegressionTests.tearDowncCs|j ¡}| d¡dS)Nzpragma user_version)rÚcursorÚexecute©r Úcurr r r ÚCheckPragmaUserVersion&s z&RegressionTests.CheckPragmaUserVersioncCsPtjdtjd}z(|j ¡}| d¡W| ¡| ¡n| ¡| ¡0dS)Nr©Z detect_typeszpragma schema_version)rrZPARSE_COLNAMESrrrr©r rrr r r ÚCheckPragmaSchemaVersion+s   ÿz(RegressionTests.CheckPragmaSchemaVersioncsŽtjddd‰‡fdd„tdƒDƒ}|d d¡tdƒD]"}|d d d d„tdƒDƒ¡q:tdƒD]}|| d |d ¡qfˆ ¡dS) Nré)Zcached_statementscsg|] }ˆ ¡‘qSr )r©Ú.0Úx©rr r Ú :óz7RegressionTests.CheckStatementReset..rzcreate table test(x)é zinsert into test(x) values (?)cSsg|] }|f‘qSr r rr r r r=rú zselect x from test)rrÚrangerÚ executemanyÚrollback)r ÚcursorsÚir rr ÚCheckStatementReset5s   z#RegressionTests.CheckStatementResetcCsN|j ¡}| d¡| |jddd¡| d¡| |jddd¡dS)Nz select 1 as "foo bar [datetime]"rzfoo bar [datetime]zselect 1 as "foo baz"zfoo baz)rrrÚ assertEqualÚ descriptionrr r r ÚCheckColumnNameWithSpacesDs    z)RegressionTests.CheckColumnNameWithSpacescCsLt d¡}g}tdƒD](}| ¡}| |¡| dt|ƒ¡q| ¡dS)Nréizselect 1 x union select )rrr!rÚappendrÚstrr)r rr$r%rr r r Ú#CheckStatementFinalizationOnCloseDbLs   z3RegressionTests.CheckStatementFinalizationOnCloseDb)éér/zneeds sqlite 3.2.2 or newercCs|t d¡}| d¡| d¡z| d¡Wntjy@Yn0| d¡z | ¡Wntjyv| d¡Yn0dS)Nrz3create table foo(x, unique(x) on conflict rollback)zinsert into foo(x) values (1)zinsert into foo(x) values (2)z1pysqlite knew nothing about the implicit ROLLBACK)rrrZ DatabaseErrorÚcommitÚOperationalErrorZfail©r rr r r ÚCheckOnConflictRollbackZs     z'RegressionTests.CheckOnConflictRollbackcCs(|j d¡|j d¡|j d¡dS)Núcreate table foo(bar)údrop table foo©rrrr r r Ú-CheckWorkaroundForBuggySqliteTransferBindingsis  z=RegressionTests.CheckWorkaroundForBuggySqliteTransferBindingscCs|j d¡dS©NÚr6rr r r ÚCheckEmptyStatementrsz#RegressionTests.CheckEmptyStatementcCshd}tjdtjd}| d¡| dtj ¡f¡| |¡| d¡| d¡| d¡| |¡dS) Nzselect * from foorrzcreate table foo(bar timestamp)zinsert into foo(bar) values (?)r5zcreate table foo(bar integer)úinsert into foo(bar) values (5))rrÚPARSE_DECLTYPESrÚdatetimeZnow)r ZSELECTrr r r ÚCheckTypeMapUsageys     z!RegressionTests.CheckTypeMapUsagecspG‡fdd„dƒ}|ƒdg‰tjdtjd}| d¡| t¡| dˆ¡Wdƒn1sb0YdS)NcseZdZ‡fdd„ZdS)z0RegressionTests.CheckBindMutatingList..Xcs ˆ ¡dS)Nz...)Úclear)r Úprotocol©Ú parametersr r Ú __conform__‹sz.X.__conform__N)Ú__name__Ú __module__Ú __qualname__rCr rAr r ÚXŠsrGrrrz$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))rrr<rÚ assertRaisesÚ IndexError)r rGrr rAr ÚCheckBindMutatingListˆs    z%RegressionTests.CheckBindMutatingListcCsd| tj¡.}|j dttdgƒƒf¡ ¡Wdƒn1s@0Yd}| |t |j ƒ¡dS)Nz"select 'xxx' || ? || 'yyy' colnameéúz9Could not decode to UTF-8 column 'colname' with text 'xxx) rHrr1rrÚbytesÚ bytearrayÚfetchoneZassertInr,Ú exception)r ÚcmÚmsgr r r ÚCheckErrorMsgDecodeError•s ÿ&z(RegressionTests.CheckErrorMsgDecodeErrorcCs| ttjid¡dSr )rHÚ TypeErrorrZregister_adapterrr r r ÚCheckRegisterAdapteržsz$RegressionTests.CheckRegisterAdapterc s*G‡fdd„dtƒ}t d¡‰dˆ_dD]T}|j|d4|ˆ_| ¡ˆ_| ¡ˆ_||ƒˆ_Wdƒq(1sr0Yq(dˆ_dˆ_dtfdtfd tfd tfd tfg}|D]t\}}|j|dN|  |¡|ˆ_Wdƒn1sì0Y|  ˆjd¡Wdƒq°1s0Yq°dS) Ncs eZdZdd„Z‡fdd„ZdS)z9RegressionTests.CheckSetIsolationLevel..CustomStrcSsdSr r rr r r Úupper§sz?RegressionTests.CheckSetIsolationLevel..CustomStr.uppercs dˆ_dSr8©Úisolation_levelrrr r Ú__del__©szARegressionTests.CheckSetIsolationLevel..CustomStr.__del__N)rDrErFrUrXr rr r Ú CustomStr¦srYr)r9ÚDEFERREDZ IMMEDIATEZ EXCLUSIVE)ÚlevelrZérÚabczIMMEDIATEEXCLUSIVEõé) r,rrrWÚsubTestÚlowerÚ capitalizerSÚ ValueErrorrHr')r rYr[ÚpairsÚvalueÚexcr rr ÚCheckSetIsolationLevel¤s&   * þ  $z&RegressionTests.CheckSetIsolationLevelcCs˜Gdd„dtjƒ}t d¡}||ƒ}| tj¡| d¡ ¡Wdƒn1sT0Y| tjd¡| ¡Wdƒn1sŠ0YdS)Nc@seZdZdd„ZdS)z?RegressionTests.CheckCursorConstructorCallCheck..CursorcSsdSr r r2r r r Ú__init__ÈszHRegressionTests.CheckCursorConstructorCallCheck..Cursor.__init__N©rDrErFrgr r r r ÚCursorÇsrirz select 4+5z$^Base Cursor\.__init__ not called\.$) rrirrHÚProgrammingErrorrÚfetchallZassertRaisesRegexr)r rirrr r r ÚCheckCursorConstructorCallCheckÂs ,ÿz/RegressionTests.CheckCursorConstructorCallCheckcCs(Gdd„dtƒ}|j d|dƒf¡dS)Nc@s eZdZdS)z/RegressionTests.CheckStrSubclass..MyStrN)rDrErFr r r r ÚMyStr×rrmzselect ?r])r,rr)r rmr r r ÚCheckStrSubclassÓsz RegressionTests.CheckStrSubclasscCsRGdd„dtjƒ}|dƒ}| tj¡| ¡}Wdƒn1sD0YdS)Nc@seZdZdd„ZdS)zGRegressionTests.CheckConnectionConstructorCallCheck..ConnectioncSsdSr r )r Únamer r r rgàszPRegressionTests.CheckConnectionConstructorCallCheck..Connection.__init__Nrhr r r r Ú Connectionßsrpr)rrprHrjr©r rprrr r r Ú#CheckConnectionConstructorCallCheckÚsz3RegressionTests.CheckConnectionConstructorCallCheckcsœG‡fdd„dtjƒ}Gdd„dtjƒ‰|dƒ}| ¡}| d¡| dgd¢¡| d ¡| ¡| tj¡|  ¡Wdƒn1sŽ0YdS) NcseZdZ‡fdd„ZdS)z;RegressionTests.CheckCursorRegistration..Connectioncsˆ|ƒSr r r©rir r ríszBRegressionTests.CheckCursorRegistration..Connection.cursorN)rDrErFrr rsr r rpìsrpc@seZdZdd„ZdS)z7RegressionTests.CheckCursorRegistration..CursorcSstj ||¡dSr )rrirgr2r r r rgñsz@RegressionTests.CheckCursorRegistration..Cursor.__init__Nrhr r r r riðsrirzcreate table foo(x)zinsert into foo(x) values (?)))r.)é)rzselect x from foo) rrprirrr"r#rHZInterfaceErrorrkrqr rsr ÚCheckCursorRegistrationçs  z'RegressionTests.CheckCursorRegistrationcCstjddd}dS)NrrV)rrr2r r r ÚCheckAutoCommitýszRegressionTests.CheckAutoCommitcCs4|j ¡}| d¡| d¡| d¡| ¡}dS)Nr4r;zpragma page_size)rrrrN)r rÚrowr r r ÚCheckPragmaAutocommits     z%RegressionTests.CheckPragmaAutocommitcCs| t|jd¡dS©Nr\)rHrSrrr r r ÚCheckConnectionCallsz#RegressionTests.CheckConnectionCallcCs"dd„}| tj|jjd|¡dS)NcSsdSryr )ÚaÚbr r r Ú collation_cbsz4RegressionTests.CheckCollation..collation_cbuí²€)rHrrjrZcreate_collation)r r}r r r ÚCheckCollationsþzRegressionTests.CheckCollationcszt d¡}| ¡‰ˆ d¡ˆ d¡‡fdd„}| tj¡(ˆ ddd„|ƒDƒ¡Wdƒn1sl0YdS) Nrzcreate table a (bar)zcreate table b (baz)c3sˆ dd¡dVdS)Nzinsert into a (bar) values (?))r\r\)rr ©rr r Úfoo,s z4RegressionTests.CheckRecursiveCursorUse..foozinsert into b (baz) values (?)css|] }|fVqdSr r )rr%r r r Ú 2rz:RegressionTests.CheckRecursiveCursorUse..)rrrrrHrjr")r rr€r rr ÚCheckRecursiveCursorUses    ÿz'RegressionTests.CheckRecursiveCursorUsec CsŠtjdtjd}| ¡}| d¡| d¡| d¡| d¡dd„| ¡Dƒ}| |t d d d d d d d¡t d d d d d d d¡g¡dS)NrrzCREATE TABLE t (x TIMESTAMP)z4INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.456')z:INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.123456789')zSELECT * FROM tcSsg|] }|d‘qS)rr rr r r rGrzKRegressionTests.CheckConvertTimestampMicrosecondPadding..iÜrtééri@õi@â)rrr<rrrkr'r=)r rrÚvaluesr r r Ú'CheckConvertTimestampMicrosecondPadding4s    þz7RegressionTests.CheckConvertTimestampMicrosecondPaddingcCs|jttjddddS)Nré{rV)rHrSrrrr r r ÚCheckInvalidIsolationLevelTypeNsÿz.RegressionTests.CheckInvalidIsolationLevelTypecCsRt d¡}| t|d¡| t|d¡| ¡}| t|jd¡| t|jd¡dS)Nrz select 1z select 1z select 2z select 2)rrrHrbrrrr r r ÚCheckNullCharacterTs  z"RegressionTests.CheckNullCharacterc Csèt d¡}| d¡| |jd¡d}t| d¡ƒD] \}}|j||dz| d|f¡| ¡|dkr|| |dd¡n2|dkr–| |dd¡n|d kr®| |dd ¡|d7}Wdƒq41sÊ0Yq4| |d d ¡dS) Nrz£ create table t(c); create table t2(c); insert into t values(0); insert into t values(1); insert into t values(2); r9rzselect c from t)r%rwzinsert into t2(c) values (?)r\r/r.z'should have returned exactly three rows) rrZ executescriptr'rWÚ enumeraterr_r0)r rZcounterr%rwr r r ÚCheckCommitCursorReset]s   (z&RegressionTests.CheckCommitCursorResetcCsBdd„}t d¡}t |¡}t ||¡}| |¡~~t ¡dS)NcWsdSr r )Úargsr r r Úcallbacksz/RegressionTests.CheckBpo31770..callbackr)rrriÚweakrefÚrefrgrÚ gc_collect)r rrrrr r r Ú CheckBpo31770|s    zRegressionTests.CheckBpo31770cCs4| t¡|j`Wdƒn1s&0YdSr )rHÚAttributeErrorrrWrr r r ÚCheckDelIsolation_levelSegfaultŒs z/RegressionTests.CheckDelIsolation_levelSegfaultcCsfGdd„dƒ}|jjtj|jjdd|jjfD]2}|ƒ}||jƒ||jƒ|j d¡|dƒq.dS)Nc@seZdZdd„ZdS)z.RegressionTests.CheckBpo37347..PrintercWstjSr )rZ SQLITE_OK)r rŒr r r Úlog’sz2RegressionTests.CheckBpo37347..Printer.logN)rDrErFr”r r r r ÚPrinter‘sr•r\)Únzselect 1)rZset_trace_callbackÚ functoolsÚpartialZset_progress_handlerZset_authorizerr”r)r r•ÚmethodZprinter_instancer r r Ú CheckBpo37347sþ   zRegressionTests.CheckBpo37347N)&rDrErFr rrrr&r)r-ÚunittestZskipIfrZsqlite_version_infor3r7r:r>rJrRrTrfrlrnrrrurvrxrzr~r‚r†rˆr‰r‹r‘r“ršr r r r rs@        rcCst td¡}t |f¡S)NZCheck)r›Z makeSuiterZ TestSuite)Zregression_suiter r r Úsuite s ÿrœcCst ¡}| tƒ¡dSr )r›ZTextTestRunnerÚrunrœ)Zrunnerr r r Útest¦sržÚ__main__) r=r›Zsqlite3rrŽr—ržrZTestCaserrœrDr r r r Ús