a cæhè<ã@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 ú8/opt/imh-python/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)zm pysqlite would crash with older SQLite versions unless a workaround is implemented. úcreate table foo(bar)údrop table fooN©rrrr r r Ú-CheckWorkaroundForBuggySqliteTransferBindingsis  z=RegressionTests.CheckWorkaroundForBuggySqliteTransferBindingscCs|j d¡dS)z pysqlite used to segfault with SQLite versions 3.5.x. These return NULL for "no-operation" statements ÚNr6rr r r ÚCheckEmptyStatementrsz#RegressionTests.CheckEmptyStatementcCspd}tjdtjd}| d¡| dtj ¡f¡| |¡ ¡| d¡| d¡| d¡| |¡ ¡d S) z pysqlite until 2.4.1 did not rebuild the row_cast_map when recompiling a statement. This test exhibits the problem. zselect * from foorrzcreate table foo(bar timestamp)zinsert into foo(bar) values (?)r5zcreate table foo(bar integer)úinsert into foo(bar) values (5)N)rrÚPARSE_DECLTYPESrÚdatetimeZnowr)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__rBr r@r r ÚXŠsrFrrrz$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))rrr;rÚ assertRaisesÚ IndexError)r rFrr r@r Ú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) rGrr1rrÚbytesÚ bytearrayÚfetchoneZassertInr,Ú exception)r ÚcmÚmsgr r r ÚCheckErrorMsgDecodeError•s ÿ&z(RegressionTests.CheckErrorMsgDecodeErrorcCs| ttjid¡dS)z! See issue 3312. N)rGÚ 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ˆ_dS)Nr8©Úisolation_levelrrr r Ú__del__©szARegressionTests.CheckSetIsolationLevel..CustomStr.__del__N)rCrDrErTrWr rr r Ú CustomStr¦srXr)r8ÚDEFERREDZ IMMEDIATEZ EXCLUSIVE)ÚlevelrYérÚabczIMMEDIATEEXCLUSIVEõé) r,rrrVÚsubTestÚlowerÚ capitalizerRÚ ValueErrorrGr')r rXrZÚpairsÚvalueÚexcr rr ÚCheckSetIsolationLevel¤s&   * þ  $z&RegressionTests.CheckSetIsolationLevelcCs˜Gdd„dtjƒ}t d¡}||ƒ}| tj¡| d¡ ¡Wdƒn1sT0Y| tjd¡| ¡Wdƒn1sŠ0YdS)zd Verifies that cursor methods check whether base class __init__ was called. c@seZdZdd„ZdS)z?RegressionTests.CheckCursorConstructorCallCheck..CursorcSsdSr r r2r r r Ú__init__ÈszHRegressionTests.CheckCursorConstructorCallCheck..Cursor.__init__N©rCrDrErfr r r r ÚCursorÇsrhrz select 4+5Nz$^Base Cursor\.__init__ not called\.$) rrhrrGÚProgrammingErrorrÚfetchallZassertRaisesRegexr)r rhrrr r r ÚCheckCursorConstructorCallCheckÂs ,ÿz/RegressionTests.CheckCursorConstructorCallCheckcCs(Gdd„dtƒ}|j d|dƒf¡dS)za The Python 3.0 port of the module didn't cope with values of subclasses of str. c@s eZdZdS)z/RegressionTests.CheckStrSubclass..MyStrN)rCrDrEr r r r ÚMyStr×rrlzselect ?r\N)r,rr)r rlr r r ÚCheckStrSubclassÓsz RegressionTests.CheckStrSubclasscCsRGdd„dtjƒ}|dƒ}| tj¡| ¡}Wdƒn1sD0YdS)zh Verifies that connection methods check whether base class __init__ was called. c@seZdZdd„ZdS)zGRegressionTests.CheckConnectionConstructorCallCheck..ConnectioncSsdSr r )r Únamer r r rfàszPRegressionTests.CheckConnectionConstructorCallCheck..Connection.__init__Nrgr r r r Ú ConnectionßsrorN)rrorGrir©r rorrr r r Ú#CheckConnectionConstructorCallCheckÚsz3RegressionTests.CheckConnectionConstructorCallCheckcsœG‡fdd„dtjƒ}Gdd„dtjƒ‰|dƒ}| ¡}| d¡| dgd¢¡| d ¡| ¡| tj¡|  ¡Wd ƒn1sŽ0Yd S) zœ Verifies that subclassed cursor classes are correctly registered with the connection object, too. (fetch-across-rollback problem) cseZdZ‡fdd„ZdS)z;RegressionTests.CheckCursorRegistration..Connectioncsˆ|ƒSr r r©rhr r ríszBRegressionTests.CheckCursorRegistration..Connection.cursorN)rCrDrErr rrr r roìsroc@seZdZdd„ZdS)z7RegressionTests.CheckCursorRegistration..CursorcSstj ||¡dSr )rrhrfr2r r r rfñsz@RegressionTests.CheckCursorRegistration..Cursor.__init__Nrgr r r r rhðsrhrzcreate table foo(x)zinsert into foo(x) values (?)))r.)é)rzselect x from fooN) rrorhrrr"r#rGZInterfaceErrorrjrpr rrr ÚCheckCursorRegistrationçs  z'RegressionTests.CheckCursorRegistrationcCstjddd}dS)z§ Verifies that creating a connection in autocommit mode works. 2.5.3 introduced a regression so that these could no longer be created. rNrU)rrr2r r r ÚCheckAutoCommitýszRegressionTests.CheckAutoCommitcCs4|j ¡}| d¡| d¡| d¡| ¡}dS)z‡ Verifies that running a PRAGMA statement that does an autocommit does work. This did not work in 2.5.3/2.5.4. r4r:zpragma page_sizeN)rrrrM)r rÚrowr r r ÚCheckPragmaAutocommits     z%RegressionTests.CheckPragmaAutocommitcCs| t|jd¡dS)z} Call a connection with a non-string SQL request: check error handling of the statement constructor. r[N)rGrRrrr r r ÚCheckConnectionCallsz#RegressionTests.CheckConnectionCallcCs"dd„}| tj|jjd|¡dS)NcSsdS)Nr[r )ÚaÚbr r r Ú collation_cbsz4RegressionTests.CheckCollation..collation_cbuí²€)rGrrirZcreate_collation)r r{r r r ÚCheckCollationsþzRegressionTests.CheckCollationcszt d¡}| ¡‰ˆ d¡ˆ d¡‡fdd„}| tj¡(ˆ ddd„|ƒDƒ¡Wd ƒn1sl0Yd S) zÝ http://bugs.python.org/issue10811 Recursively using a cursor, such as when reusing it from a generator led to segfaults. Now we catch recursive cursor usage and raise a ProgrammingError. rzcreate 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..N)rrrrrGrir")r rr~r r}r Ú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)zË http://bugs.python.org/issue14720 The microsecond parsing of convert_timestamp() should pad with zeros, since the microsecond string "456" actually represents "456000". rrzCREATE 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Ürsééri@õi@âN)rrr;rrrjr'r<)r rrÚvaluesr r r Ú'CheckConvertTimestampMicrosecondPadding4s    þz7RegressionTests.CheckConvertTimestampMicrosecondPaddingcCs|jttjddddS)Nré{rU)rGrRrrrr 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)rrrGrarrrr 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 ¡d S) zÉ Connection.commit() did reset cursors, which made sqlite3 to return rows multiple times when fetched from cursors after commit. See issues 10513 and 23129 for details. rz£ create table t(c); create table t2(c); insert into t values(0); insert into t values(1); insert into t values(2); r8rzselect c from t)r%rvzinsert into t2(c) values (?)r[r/Nr.z'should have returned exactly three rows) rrZ executescriptr'rVÚ enumeraterr^r0)r rZcounterr%rvr r r ÚCheckCommitCursorReset]s   (z&RegressionTests.CheckCommitCursorResetcCsBdd„}t d¡}t |¡}t ||¡}| |¡~~t ¡dS)zm The interpreter shouldn't crash in case Cursor.__init__() is called more than once. cWsdSr r )Úargsr r r Úcallbacksz/RegressionTests.CheckBpo31770..callbackrN)rrrhÚweakrefÚrefrfrÚ gc_collect)r r‹rrrr r r Ú CheckBpo31770|s    zRegressionTests.CheckBpo31770cCs4| t¡|j`Wdƒn1s&0YdSr )rGÚAttributeErrorrrVrr 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)rCrDrEr’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)&rCrDrEr rrrr&r)r-ÚunittestZskipIfrZsqlite_version_infor3r7r9r=rIrQrSrerkrmrqrtrurwrxr|r€r„r†r‡r‰rr‘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šrCr r r r Ús