asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYhz*@sxddlZddlZddlmZmZGdddejZGdddejZGdddejZ d d Z d d Z e d krte dS)N)TESTFNunlinkc@s^eZdZddZddZddZddZee j d kd d d Z d dZ ddZ ddZdS)CollationTestscCsHtd}|t |dddWdn1s:0YdS)N:memory:cSs||k||kSNxyrr./usr/local/lib/python3.9/sqlite3/test/hooks.py!z>CollationTests.CheckCreateCollationNotString..)sqliteconnect assertRaises TypeErrorcreate_collationselfconrrr CheckCreateCollationNotStrings  z,CollationTests.CheckCreateCollationNotStringcCsVtd}|t}|ddWdn1s60Y|t|jddS)NrX*zparameter must be callable)rrrrr assertEqualstr exceptionrrcmrrr CheckCreateCollationNotCallable#s  *z.CollationTests.CheckCreateCollationNotCallablecCsJtd}|tj |dddWdn1s<0YdS)NrucolläcSs||k||kSrrrrrr r ,r z=CollationTests.CheckCreateCollationNotAscii..)rrrZProgrammingErrorrrrrr CheckCreateCollationNotAscii)s z+CollationTests.CheckCreateCollationNotAsciicCslGdddt}td}dd}||d||d}||ddd ||d dd dS) Nc@seZdZddZdS)z@CollationTests.CheckCreateCollationBadUpper..BadUpperStrcSsdSrr)rrrr upper0szFCollationTests.CheckCreateCollationBadUpper..BadUpperStr.upperN)__name__ __module__ __qualname__r rrrr BadUpperStr/sr$rcSs||k||k Srrrrrr r 3r z=CollationTests.CheckCreateCollationBadUpper..mycollz select x from ( select 'a' as x union select 'b' as x ) order by x collate mycoll rba)rrrrexecutefetchallr)rr$rr%resultrrr CheckCreateCollationBadUpper.s z+CollationTests.CheckCreateCollationBadUpper)r'z&old SQLite versions crash on this testcCsdd}td}|d|d}||}|j|gddd|dd|tj}||}Wdn1s0Y|t|j d dS) NcSs||k||k Srrrrrr r%Bsz3CollationTests.CheckCollationIsUsed..mycollrr% select x from ( select 'a' as x union select 'b' as x union select 'c' as x ) order by x collate mycoll )c)r&)r(#the expected order was not returnedmsg"no such collation sequence: mycoll) rrrr)r*rrOperationalErrorrr)rr%rsqlr+rrrr CheckCollationIsUsed?s     ,z#CollationTests.CheckCollationIsUsedcCsHdd}td}|d|d}||}|j|gddddS) NcSs||k||k dS)Nlrrrrr r%[sz@CollationTests.CheckCollationReturnsLargeInteger..mycollrr%r/r0r2r3rrrr)r*r)rr%rr7r+rrr !CheckCollationReturnsLargeIntegerZs    z0CollationTests.CheckCollationReturnsLargeIntegercCsdtd}|ddd|ddd|d}||ddd||d dd d S) z Register two different collation functions under the same name. Verify that the last one is actually used. rr%cSs||k||kSrrrrrr r sr z.cSs||k||k Srrrrrr r tr zi select x from (select 'a' as x union select 'b' as x) order by x collate mycoll rr&r'r(Nr9)rrr+rrr CheckCollationRegisterTwicems  z*CollationTests.CheckCollationRegisterTwicecCsrtd}|ddd|dd|tj}|dWdn1sR0Y|t|jddS)zu Register a collation, then deregister it. Make sure an error is raised if we try to use it. rr%cSs||k||kSrrrrrr r r z9CollationTests.CheckDeregisterCollation..Nz?select 'a' as x union select 'b' as x order by x collate mycollr5) rrrrr6r)rrrrrrr CheckDeregisterCollation{s   (z'CollationTests.CheckDeregisterCollationN)r!r"r#rrrr,unittestskipIfrsqlite_version_infor8r:r;r<rrrr rs  rc@s,eZdZddZddZddZddZd S) ProgressTestscs>td}gfdd}||d|d|dS)zK Test that the progress handler is invoked once it is set. rcsddSNrappendrZprogress_callsrr progresss z8ProgressTests.CheckProgressHandlerUsed..progressr'z0 create table foo(a, b) N)rrset_progress_handlerr) assertTruerrrErrDr CheckProgressHandlerUseds     z&ProgressTests.CheckProgressHandlerUsedcsrtd}gfdd}||d|}|dt}g||d|dt}|||dS) z= Test that the opcode argument is respected. rcsddSrArBrrDrr rEs z0ProgressTests.CheckOpcodeCount..progressr'z1 create table foo (a, b) r.z1 create table bar (a, b) N)rrrFcursorr)lenZassertGreaterEqual)rrrEcursZ first_countZ second_countrrDr CheckOpcodeCounts      zProgressTests.CheckOpcodeCountcCs<td}dd}||d|}|tj|jddS)zW Test that returning a non-zero value stops the operation in progress. rcSsdS)Nr'rrrrr rEsz4ProgressTests.CheckCancelOperation..progressr'zcreate table bar (a, b)N)rrrFrJrr6r))rrrErLrrr CheckCancelOperations  z"ProgressTests.CheckCancelOperationcsRtd}dfdd}||d|dd|d|dddS) zc Test that setting the progress handler to None clears the previously set handler. rrcsddS)Nr'rrractionrr rEsz1ProgressTests.CheckClearHandler..progressr'Nz&select 1 union select 2 union select 3z progress handler was not cleared)rrrFr)r*rrHrrOr CheckClearHandlers    zProgressTests.CheckClearHandlerN)r!r"r#rIrMrNrQrrrr r@sr@c@s>eZdZddZddZddZeej dkdd d Z d S) TraceCallbackTestscsTtd}gfdd}|||d||tddDdS)zI Test that the trace callback is invoked once it is set. rcs|dSrrBZ statementtraced_statementsrr tracesz8TraceCallbackTests.CheckTraceCallbackUsed..tracecreate table foo(a, b)css|]}d|vVqdS)zcreate table fooNr.0Zstmtrrr r z.N)rrset_trace_callbackr)rGanyrrrVrrTr CheckTraceCallbackUseds     z)TraceCallbackTests.CheckTraceCallbackUsedcsHtd}gfdd}|||d|d|ddS)zb Test that setting the trace callback to None clears the previously set callback. rcs|dSrrBrSrTrr rVsz9TraceCallbackTests.CheckClearTraceCallback..traceNrWztrace callback was not cleared)rrr[r)Z assertFalser]rrTr CheckClearTraceCallbacks     z*TraceCallbackTests.CheckClearTraceCallbackc sdtd}gfdd}|||d|d||tfddDd td t tfd S) zG Test that the statement can contain unicode literals. uöäüÖÄÜ߀rcs|dSrrBrSrTrr rVsz5TraceCallbackTests.CheckUnicodeContent..tracecreate table foo(x)z insert into foo(x) values ('%s')c3s|]}|vVqdSrrrX) unicode_valuerr rZr z9TraceCallbackTests.CheckUnicodeContent..z-Unicode data %s garbled in trace callback: %sz, N) rrr[r)ZcommitrGr\asciijoinmapr]r)rUrar CheckUnicodeContents    z&TraceCallbackTests.CheckUnicodeContent)r-r- z#sqlite3_prepare_v2 is not availablecsgfdd}ddg}|tttjtdd}tt}|||}||d|d||dtjd kr| |d | |dS) Ncs|dSrrBrSrTrr rVsz;TraceCallbackTests.CheckTraceCallbackContent..tracer`zinsert into foo(x) values(1))Zisolation_levelrzcreate table bar(x)r')r-) Z addCleanuprrrrr[rJr)r?rCr)rrVZqueriesZcon1Zcon2ZcurrrTr CheckTraceCallbackContents       z,TraceCallbackTests.CheckTraceCallbackContentN) r!r"r#r^r_rer=r>rr?rjrrrr rRs   rRcCs4ttd}ttd}ttd}t|||fS)NZCheck)r=Z makeSuiterr@rRZ TestSuite)Zcollation_suiteZprogress_suiteZ trace_suiterrr suites   rkcCst}|tdSr)r=ZTextTestRunnerrunrk)Zrunnerrrr testsrm__main__) r=Zsqlite3rZ test.supportrrZTestCaserr@rRrkrmr!rrrr sjEK