a 8êdgY@ã@súddlZddlZddlZz ddlZWney:dZYn0Gdd„dejƒZGdd„dejƒZGdd„dejƒZ e  ej dkd ¡Gd d „d ejƒƒZ Gd d „d ejƒZ e ed¡Gdd„dejƒƒZGdd„dejƒZdd„Zdd„ZedkröeƒdS)éNc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚSqliteTypeTestscCs(t d¡|_|j ¡|_|j d¡dS)Nú:memory:z9create table test(i integer, s varchar, f number, b blob)©ÚsqliteÚconnectÚconÚcursorÚcurÚexecute©Úself©r ú./usr/local/lib/python3.9/sqlite3/test/types.pyÚsetUp"s  zSqliteTypeTests.setUpcCs|j ¡|j ¡dS©N©r Úcloserr r r rÚtearDown's zSqliteTypeTests.tearDowncCs8|j dd¡|j d¡|j ¡}| |dd¡dS)Núinsert into test(s) values (?))õ Österreichzselect s from testrr©r r ÚfetchoneÚ assertEqual©r Úrowr r rÚ CheckString+s  zSqliteTypeTests.CheckStringcCs8|j dd¡|j d¡|j ¡}| |dd¡dS©Núinsert into test(i) values (?))é*úselect i from testrrrrr r rÚ CheckSmallInt1s  zSqliteTypeTests.CheckSmallIntcCs>d}|j d|f¡|j d¡|j ¡}| |d|¡dS©Nlrrrr©r Únumrr r rÚ CheckLargeInt7s   zSqliteTypeTests.CheckLargeIntcCs>d}|j d|f¡|j d¡|j ¡}| |d|¡dS)Nç…ëQ¸ @úinsert into test(f) values (?)úselect f from testrr©r Úvalrr r rÚ CheckFloat>s   zSqliteTypeTests.CheckFloatcCsFd}t|ƒ}|j d|f¡|j d¡|j ¡}| |d|¡dS)NóGuglhupfúinsert into test(b) values (?)úselect b from testr©Ú memoryviewr r rr©r Úsampler)rr r rÚ CheckBlobEs   zSqliteTypeTests.CheckBlobcCs*|j d¡|j ¡}| |dd¡dS)Nuselect 'Österreich'rrrrr r rÚCheckUnicodeExecuteMs  z#SqliteTypeTests.CheckUnicodeExecuteN) Ú__name__Ú __module__Ú __qualname__rrrr r$r*r2r3r r r rr!src@s eZdZGdd„dƒZGdd„dƒZdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#S)$ÚDeclTypesTestsc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) zDeclTypesTests.FoocCst|tƒr| d¡}||_dS)Nzutf-8)Ú isinstanceÚbytesÚdecoder))r Z_valr r rÚ__init__Ts  zDeclTypesTests.Foo.__init__cCst|tjƒstS|j|jkSr)r8r7ÚFooÚNotImplementedr))r Úotherr r rÚ__eq__[s zDeclTypesTests.Foo.__eq__cCs|tjur|jSdSdSr)rÚPrepareProtocolr)©r Úprotocolr r rÚ __conform__`s zDeclTypesTests.Foo.__conform__cCs d|jS)Nú<%s>)r)r r r rÚ__str__fszDeclTypesTests.Foo.__str__N)r4r5r6r;r?rCrEr r r rr<Ssr<c@seZdZdd„Zdd„ZdS)zDeclTypesTests.BadConformcCs ||_dSr©Úexc)r rGr r rr;jsz"DeclTypesTests.BadConform.__init__cCs |j‚dSrrFrAr r rrClsz%DeclTypesTests.BadConform.__conform__N)r4r5r6r;rCr r r rÚ BadConformisrHcCsztjdtjd|_|j ¡|_|j d¡dd„tjd<dd„tjd<tj tjd <tj tjd <d d„tjd <t tjd <dS)Nr©Z detect_typeszpcreate table test(i int, s str, f float, b bool, u unicode, foo foo, bin blob, n1 number, n2 number(5), bad bad)cSsdS)Nçš™™™™™G@r ©Úxr r rÚuóz&DeclTypesTests.setUp..ÚFLOATcSs tt|ƒƒSr)ÚboolÚintrKr r rrMxrNÚBOOLÚFOOÚBADcSsdS)NÚWRONGr rKr r rrM{rNrUÚNUMBER) rrÚPARSE_DECLTYPESrrr r Ú convertersr7r<rHÚfloatr r r rros    zDeclTypesTests.setUpcCsHtjd=tjd=tjd=tjd=tjd=tjd=|j ¡|j ¡dS)NrOrRrSrTrUrV©rrXr rrr r r rr~s zDeclTypesTests.tearDowncCs8|j dd¡|j d¡|j ¡}| |dd¡dS)Nr)Úfooz!select s as "s [WRONG]" from testrr[rrr r rrˆs  zDeclTypesTests.CheckStringcCs8|j dd¡|j d¡|j ¡}| |dd¡dSrrrr r rr s  zDeclTypesTests.CheckSmallIntcCs>d}|j d|f¡|j d¡|j ¡}| |d|¡dSr!rr"r r rr$–s   zDeclTypesTests.CheckLargeIntcCs>d}|j d|f¡|j d¡|j ¡}| |dd¡dS)Nr%r&r'rrJrr(r r rr*žs   zDeclTypesTests.CheckFloatcCsx|j dd¡|j d¡|j ¡}| |dd¡|j d¡|j dd¡|j d¡|j ¡}| |dd¡dS) Nr,)Fr-rFzdelete from test)TT)r r rZassertIsrr r rÚ CheckBool¦s     zDeclTypesTests.CheckBoolcCs>d}|j d|f¡|j d¡|j ¡}| |d|¡dS)Nrzinsert into test(u) values (?)zselect u from testrrr(r r rÚ CheckUnicode³s   zDeclTypesTests.CheckUnicodecCsDt d¡}|j d|f¡|j d¡|j ¡}| |d|¡dS)NZblaz insert into test(foo) values (?)zselect foo from testr)r7r<r r rrr(r r rÚCheckFoo»s    zDeclTypesTests.CheckFoocCst t¡}| tj¡ |j d|f¡Wdƒn1s<0Y| tj¡"|j dd|i¡Wdƒn1sz0Yt t¡}| t¡ |j d|f¡Wdƒn1s¾0Y| t¡"|j dd|i¡Wdƒn1sú0YdS)Nz insert into test(bad) values (?)z#insert into test(bad) values (:val)r)) r7rHÚ TypeErrorÚ assertRaisesrÚInterfaceErrorr r ÚKeyboardInterrupt©r r)r r rÚCheckErrorInConformÂs .0  . z"DeclTypesTests.CheckErrorInConformcCsTGdd„dƒ}|ƒ}| tj¡ |j d|f¡Wdƒn1sF0YdS)Nc@s eZdZdS)z/DeclTypesTests.CheckUnsupportedSeq..BarN©r4r5r6r r r rÚBarÐrNrfr&©r`rrar r ©r rfr)r r rÚCheckUnsupportedSeqÏsz"DeclTypesTests.CheckUnsupportedSeqcCsVGdd„dƒ}|ƒ}| tj¡"|j dd|i¡Wdƒn1sH0YdS)Nc@s eZdZdS)z0DeclTypesTests.CheckUnsupportedDict..BarNrer r r rrfÖrNrfz!insert into test(f) values (:val)r)rgrhr r rÚCheckUnsupportedDictÕsz#DeclTypesTests.CheckUnsupportedDictcCsFd}t|ƒ}|j d|f¡|j d¡|j ¡}| |d|¡dS)Nr+z insert into test(bin) values (?)zselect bin from testrr.r0r r rr2Ûs   zDeclTypesTests.CheckBlobcCs4|j d¡|j d¡ ¡d}| t|ƒt¡dS)Nzinsert into test(n1) values (5)zselect n1 from testr©r r rrÚtyperY©r Úvaluer r rÚ CheckNumber1äs zDeclTypesTests.CheckNumber1cCs4|j d¡|j d¡ ¡d}| t|ƒt¡dS)z.rScSsd| d¡S)NrDrsrtrKr r rrMørNÚBARcSsddS)Nérr rKr r rrMùrNÚEXCcSsdS)NÚMARKERr rKr r rrMúrNÚB1B1)rrÚPARSE_COLNAMESrrr r rXr r r rròs  zColNamesTests.setUpcCs8tjd=tjd=tjd=tjd=|j ¡|j ¡dS)NrSrurwryrZr r r rrüs  zColNamesTests.tearDowncCs8|j dd¡|j d¡|j ¡d}| |d¡dS)ze Assures that the declared type is not used when PARSE_DECLTYPES is not set. úinsert into test(x) values (?)©Úxxxúselect x from testrr}Nrrcr r rÚCheckDeclTypeNotUseds z"ColNamesTests.CheckDeclTypeNotUsedcCs8|j dd¡|j d¡|j ¡d}| |d¡dS)Nr{rr~rrrcr r rÚ CheckNones zColNamesTests.CheckNonecCsP|j dd¡|j d¡|j ¡d}| |d¡| |jjddd¡dS)Nr{r|z!select x as "x y [bar]" from testrzzx y)r r rrÚ descriptionrcr r rÚ CheckColNames   zColNamesTests.CheckColNamecCs*|j d¡|j ¡d}| |d¡dS)Nzselect 'other' as "x [b1b1]"rrxrrcr r rÚCheckCaseInConverterNames z&ColNamesTests.CheckCaseInConverterNamecCs(|j d¡| |jjddd¡dS)zq cursor.description should at least provide the column name(s), even if no row returned. zselect * from test where 0 = 1rrLN)r r rrr r r rÚCheckCursorDescriptionNoRow#s z)ColNamesTests.CheckCursorDescriptionNoRowcCs|j d¡| |jj¡dS)Núinsert into test values (1))r r Z assertIsNonerr r r rÚCheckCursorDescriptionInsert+s z*ColNamesTests.CheckCursorDescriptionInsertN) r4r5r6rrrr€r‚rƒr„r†r r r rrqñs   rq)éér‡zCTEs not supportedc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚCommonTableExpressionTestscCs(t d¡|_|j ¡|_|j d¡dS)Nrrrrr r r rr3s  z CommonTableExpressionTests.setUpcCs|j ¡|j ¡dSrrr r r rr8s z#CommonTableExpressionTests.tearDowncCs6|j d¡| |jj¡| |jjddd¡dS)Nz(with one as (select 1) select * from onerÚ1©r r ZassertIsNotNonerrr r r rÚCheckCursorDescriptionCTESimple<s z:CommonTableExpressionTests.CheckCursorDescriptionCTESimplecCsN|j d¡|j d¡|j d¡| |jj¡| |jjddd¡dS)Nzinsert into test values(1)zinsert into test values(2)z:with testCTE as (select * from test) select * from testCTErrLr‹r r r rÚ)CheckCursorDescriptionCTESMultipleColumnsAs    zDCommonTableExpressionTests.CheckCursorDescriptionCTESMultipleColumnscCst|j d¡|j d¡| |jj¡| |jjddd¡|j d¡| |jj¡| |jjddd¡dS)Nr…z?with bar as (select * from test) select * from test where x = 1rrLz?with bar as (select * from test) select * from test where x = 2r‹r r r rÚCheckCursorDescriptionCTEHs   z4CommonTableExpressionTests.CheckCursorDescriptionCTEN)r4r5r6rrrŒrrŽr r r rr‰0s r‰c@s4eZdZdd„ZeeƒZdd„Zdd„Zdd„Zd S) ÚObjectAdaptationTestscCst|ƒSr)rY)Úobjr r rÚcastSszObjectAdaptationTests.castcCsDt d¡|_z tjt=Wn Yn0t ttj¡|j ¡|_ dS)Nr) rrrÚadaptersrQZregister_adapterrr‘rr r r r rrWs  zObjectAdaptationTests.setUpcCs&tjttjf=|j ¡|j ¡dSr)rr’rQr@r rrr r r rr`s zObjectAdaptationTests.tearDowncCs0|j dd¡|j ¡d}| t|ƒt¡dS)Nzselect ?)érrkrcr r rÚCheckCasterIsUsedesz'ObjectAdaptationTests.CheckCasterIsUsedN)r4r5r6r‘Ú staticmethodrrr”r r r rrRs  rz requires zlibc@s4eZdZdd„ZeeƒZdd„Zdd„Zdd„Zd S) ÚBinaryConverterTestscCs t |¡Sr)ÚzlibÚ decompress)Úsr r rÚconvertlszBinaryConverterTests.convertcCs$tjdtjd|_t dtj¡dS)NrrIÚbin)rrrzrZregister_converterr–ršr r r rrpszBinaryConverterTests.setUpcCs|j ¡dSr)rrr r r rrtszBinaryConverterTests.tearDowncCs6d}|j dtt |¡ƒf¡ ¡d}| ||¡dS)NsFabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgzselect ? as "x [bin]"r)rr r/r—Úcompressrr)r ZtestdataÚresultr r rÚCheckBinaryInputForConverterws"z1BinaryConverterTests.CheckBinaryInputForConverterN)r4r5r6ršr•rrržr r r rr–js r–c@sVeZdZdd„Zdd„Zdd„Zdd„Ze e j d kd ¡d d „ƒZ d d„Z dd„Z dS)Ú DateTimeTestscCs.tjdtjd|_|j ¡|_|j d¡dS)NrrIz'create table test(d date, ts timestamp))rrrWrrr r r r r rr}s zDateTimeTests.setUpcCs|j ¡|j ¡dSrrr r r rr‚s zDateTimeTests.tearDowncCsHt ddd¡}|j d|f¡|j d¡|j ¡d}| ||¡dS)NéÔéézinsert into test(d) values (?)zselect d from testr)rZDater r rr)r ÚdZd2r r rÚCheckSqliteDate†s  zDateTimeTests.CheckSqliteDatecCsNt dddddd¡}|j d|f¡|j d¡|j ¡d}| ||¡dS) Nr r¡r¢éérúinsert into test(ts) values (?)úselect ts from test©rZ Timestampr r rr©r ÚtsZts2r r rÚCheckSqliteTimestamps  z"DateTimeTests.CheckSqliteTimestamp)r‡éz0the date functions are available on 3.1 or latercCsVtj ¡}|j d¡|j d¡|j ¡d}| t|ƒtj¡| |j|j¡dS)Nz/insert into test(ts) values (current_timestamp)r¨r)ÚdatetimeZutcnowr r rrrlZyear)r Znowr«r r rÚCheckSqlTimestamp”s    zDateTimeTests.CheckSqlTimestampc CsPt ddddddd¡}|j d|f¡|j d ¡|j ¡d}| ||¡dS) Nr r¡r¢r¥r¦ri ¡r§r¨r©rªr r rÚCheckDateTimeSubSecondsžs  z%DateTimeTests.CheckDateTimeSubSecondsc CsPt ddddddd¡}|j d|f¡|j d ¡|j ¡d}| ||¡dS) Nr r¡r¢r¥r¦ri!Ér§r¨r©rªr r rÚ$CheckDateTimeSubSecondsFloatingPoint¥s  z2DateTimeTests.CheckDateTimeSubSecondsFloatingPointN)r4r5r6rrr¤r¬ÚunittestÚskipIfrÚsqlite_version_infor¯r°r±r r r rrŸ|s ÿ rŸc Cslt td¡}t td¡}t td¡}t td¡}t td¡}t td¡}t td¡}t  |||||||f¡S)NZCheck) r²Z makeSuiterr7rqrr–rŸr‰Z TestSuite)Zsqlite_type_suiteZdecltypes_type_suiteZcolnames_type_suiteZadaptation_suiteZ bin_suiteZ date_suiteZ cte_suiter r rÚsuite¬s       rµcCst ¡}| tƒ¡dSr)r²ZTextTestRunnerÚrunrµ)Zrunnerr r rÚtest¶sr·Ú__main__)r®r²Zsqlite3rr—Ú ImportErrorZTestCaserr7rqr³r´r‰rZ skipUnlessr–rŸrµr·r4r r r rÚs(   1 ?! 0