B y1a¢>Ić@sxddlZddlZddlmZmZGdd„dejƒZGdd„dejƒZGdd„dejƒZ d d „Z d d „Z e d krte ƒdS)éN)ŚTESTFNŚunlinkc@s^eZdZdd„Zdd„Zdd„Zdd„Ze e j d kd ”d d „ƒZ d d„Z dd„Z dd„ZdS)ŚCollationTestsc Cs4t d”}| t”| ddd„”WdQRXdS)Nz:memory:cSs||k||kS)N©)ŚxŚyrrś7/opt/alt/python37/lib64/python3.7/sqlite3/test/hooks.pyŚ!óz>CollationTests.CheckCreateCollationNotString..)ŚsqliteŚconnectŚ assertRaisesŚ TypeErrorŚcreate_collation)ŚselfŚconrrrŚCheckCreateCollationNotStrings  z,CollationTests.CheckCreateCollationNotStringc CsBt d”}| t”}| dd”WdQRX| t|jƒd”dS)Nz:memory:ŚXé*zparameter must be callable)r r r rrŚ assertEqualŚstrŚ exception)rrŚcmrrrŚCheckCreateCollationNotCallable#s  z.CollationTests.CheckCreateCollationNotCallablec Cs6t d”}| tj”| ddd„”WdQRXdS)Nz:memory:ucollƤcSs||k||kS)Nr)rrrrrr ,r z=CollationTests.CheckCreateCollationNotAscii..)r r r ZProgrammingErrorr)rrrrrŚCheckCreateCollationNotAscii)s z+CollationTests.CheckCreateCollationNotAsciicCslGdd„dtƒ}t d”}dd„}| |dƒ|”| d” ”}| |ddd ”| |d dd ”dS) Nc@seZdZdd„ZdS)z@CollationTests.CheckCreateCollationBadUpper..BadUpperStrcSsdS)Nr)rrrrŚupper0szFCollationTests.CheckCreateCollationBadUpper..BadUpperStr.upperN)Ś__name__Ś __module__Ś __qualname__rrrrrŚ BadUpperStr/srz:memory:cSs||k||k S)Nr)rrrrrr 3r z=CollationTests.CheckCreateCollationBadUpper..Śmycollz› select x from ( select 'a' as x union select 'b' as x ) order by x collate mycoll rŚbéŚa)rr r rŚexecuteŚfetchallr)rrrr ŚresultrrrŚCheckCreateCollationBadUpper.s  z+CollationTests.CheckCreateCollationBadUpper)éér"z&old SQLite versions crash on this testc CsŽdd„}t d”}| d|”d}| |” ”}|j|dddgd d | dd”| tj”}| |” ”}WdQRX| t|j ƒd ”dS) NcSs||k||k S)Nr)rrrrrr Bsz3CollationTests.CheckCollationIsUsed..mycollz:memory:r zÉ 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#z#the expected order was not returned)Śmsgz"no such collation sequence: mycoll) r r rr$r%rr ŚOperationalErrorrr)rr rŚsqlr&rrrrŚCheckCollationIsUsed?s   z#CollationTests.CheckCollationIsUsedcCsJdd„}t d”}| d|”d}| |” ”}|j|dddgd d dS) NcSs||k||k dS)Nlr)rrrrrr [sz@CollationTests.CheckCollationReturnsLargeInteger..mycollz:memory:r zÉ select x from ( select 'a' as x union select 'b' as x union select 'c' as x ) order by x collate mycoll )r*)r!)r#z#the expected order was not returned)r+)r r rr$r%r)rr rr-r&rrrŚ!CheckCollationReturnsLargeIntegerZs  z0CollationTests.CheckCollationReturnsLargeIntegercCsdt d”}| 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. z:memory:r cSs||k||kS)Nr)rrrrrr sr z.cSs||k||k S)Nr)rrrrrr tr zi select x from (select 'a' as x union select 'b' as x) order by x collate mycoll rr!r"r#N)r r rr$r%r)rrr&rrrŚCheckCollationRegisterTwicems  z*CollationTests.CheckCollationRegisterTwicec Cs^t d”}| ddd„”| dd”| tj”}| d”WdQRX| t|jƒd”dS)zu Register a collation, then deregister it. Make sure an error is raised if we try to use it. z:memory:r cSs||k||kS)Nr)rrrrrr r z9CollationTests.CheckDeregisterCollation..Nz?select 'a' as x union select 'b' as x order by x collate mycollz"no such collation sequence: mycoll) r r rr r,r$rrr)rrrrrrŚCheckDeregisterCollation{s   z'CollationTests.CheckDeregisterCollationN)rrrrrrr'ŚunittestŚskipIfr Śsqlite_version_infor.r/r0r1rrrrrs rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ś ProgressTestscs>t d”}g‰‡fdd„}| |d”| d”| ˆ”dS)zK Test that the progress handler is invoked once it is set. z:memory:csˆ d”dS)Nr)Śappendr)Śprogress_callsrrŚprogressŽs z8ProgressTests.CheckProgressHandlerUsed..progressr"z0 create table foo(a, b) N)r r Śset_progress_handlerr$Ś assertTrue)rrr8r)r7rŚCheckProgressHandlerUsedˆs   z&ProgressTests.CheckProgressHandlerUsedcsrt d”}g‰‡fdd„}| |d”| ”}| d”tˆƒ}g‰| |d”| d”tˆƒ}| ||”dS) z= Test that the opcode argument is respected. z:memory:csˆ d”dS)Nr)r6r)r7rrr8žs z0ProgressTests.CheckOpcodeCount..progressr"z1 create table foo (a, b) r)z1 create table bar (a, b) N)r r r9Ścursorr$ŚlenZassertGreaterEqual)rrr8ŚcursZ first_countZ second_countr)r7rŚCheckOpcodeCount˜s    zProgressTests.CheckOpcodeCountcCs<t d”}dd„}| |d”| ”}| tj|jd”dS)zW Test that returning a non-zero value stops the operation in progress. z:memory:cSsdS)Nr"rrrrrr8“sz4ProgressTests.CheckCancelOperation..progressr"zcreate table bar (a, b)N)r r r9r<r r,r$)rrr8r>rrrŚCheckCancelOperationÆs  z"ProgressTests.CheckCancelOperationcsRt d”}d‰‡fdd„}| |d”| dd”| d” ”| ˆdd”dS) zc Test that setting the progress handler to None clears the previously set handler. z:memory:rcsd‰dS)Nr"rrr)Śactionrrr8Ćsz1ProgressTests.CheckClearHandler..progressr"Nz&select 1 union select 2 union select 3z progress handler was not cleared)r r r9r$r%r)rrr8r)rArŚCheckClearHandler½s    zProgressTests.CheckClearHandlerN)rrrr;r?r@rBrrrrr5‡sr5c@s>eZdZdd„Zdd„Zdd„Ze ej dkd”d d „ƒZ d S) ŚTraceCallbackTestscsTt d”}g‰‡fdd„}| |”| d”| ˆ”| tdd„ˆDƒƒ”dS)zI Test that the trace callback is invoked once it is set. z:memory:csˆ |”dS)N)r6)Ś statement)Śtraced_statementsrrŚtraceÓsz8TraceCallbackTests.CheckTraceCallbackUsed..tracezcreate table foo(a, b)css|]}d|kVqdS)zcreate table fooNr)Ś.0Śstmtrrrś Ųsz.N)r r Śset_trace_callbackr$r:Śany)rrrFr)rErŚCheckTraceCallbackUsedĶs     z)TraceCallbackTests.CheckTraceCallbackUsedcsHt d”}g‰‡fdd„}| |”| d”| d”| ˆd”dS)zb Test that setting the trace callback to None clears the previously set callback. z:memory:csˆ |”dS)N)r6)rD)rErrrFąsz9TraceCallbackTests.CheckClearTraceCallback..traceNzcreate table foo(a, b)ztrace callback was not cleared)r r rJr$Z assertFalse)rrrFr)rErŚCheckClearTraceCallbackŚs     z*TraceCallbackTests.CheckClearTraceCallbackc s‚d‰t d”}g‰‡fdd„}| |”| d”| dˆ”| ”| t‡fdd„ˆDƒƒd tˆƒd  t tˆƒ”f”d S) zG Test that the statement can contain unicode literals. uĆ¶Ć¤Ć¼Ć–Ć„ĆœĆŸā‚¬z:memory:csˆ |”dS)N)r6)rD)rErrrFīsz5TraceCallbackTests.CheckUnicodeContent..tracezcreate table foo(x)z insert into foo(x) values ("%s")c3s|]}ˆ|kVqdS)Nr)rGrH)Ś unicode_valuerrrI÷sz9TraceCallbackTests.CheckUnicodeContent..z-Unicode data %s garbled in trace callback: %sz, N) r r rJr$Zcommitr:rKŚasciiŚjoinŚmap)rrrFr)rErNrŚCheckUnicodeContentēs    z&TraceCallbackTests.CheckUnicodeContent)r(r(é z#sqlite3_prepare_v2 is not availablecs„g‰‡fdd„}ddg}| tt”tjtdd}t t”}| |”| ”}| |d”| d”| |d”| ˆ|”dS) Ncsˆ |”dS)N)r6)rD)rErrrF’sz;TraceCallbackTests.CheckTraceCallbackContent..tracezcreate table foo(x)zinsert into foo(x) values(1))Zisolation_levelrzcreate table bar(x)r") Z addCleanuprrr r rJr<r$r)rrFZqueriesZcon1Zcon2Zcurr)rErŚCheckTraceCallbackContentūs     z,TraceCallbackTests.CheckTraceCallbackContentN) rrrrLrMrRr2r3r r4rTrrrrrCĢs  rCcCs4t td”}t td”}t td”}t |||f”S)NZCheck)r2Z makeSuiterr5rCZ TestSuite)Zcollation_suiteZprogress_suiteZ trace_suiterrrŚsuites   rUcCst ”}| tƒ”dS)N)r2ZTextTestRunnerŚrunrU)ZrunnerrrrŚtestsrWŚ__main__) r2Zsqlite3r Z test.supportrrZTestCaserr5rCrUrWrrrrrŚsjEC