§
    ö¢±jB‚  ã                   ó\   — d Z ddd…         ZdZddlZddlZdZ G d„ d	ej        ¦  «        ZdS )
a¬  Python DB API 2.0 driver compliance unit test suite.

   This software is Public Domain and may be used without restrictions.

"Now we have booze and barflies entering the discussion, plus rumours of
 DBAs on drugs... and I won't tell you what flashes through my mind each
 time I read the subject line with 'Anal Compliance' in it.  All around
 this is turning out to be a thoroughly unwholesome unit test."

   -- Ian Bicking
z$Revision: 1.15.0 $é   éþÿÿÿz'Stuart Bishop <stuart@stuartbishop.net>é    NFc                   ób  — e Zd ZdZdZdZi ZdZdez  Zdez  Z	dez  Z
dez  Zd	Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$g d!¢Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*d'„ Z+d(„ Z,d)„ Z-d*„ Z.d+„ Z/d,„ Z0d-„ Z1d.„ Z2d/„ Z3d0„ Z4d1„ Z5d2„ Z6d3„ Z7d4„ Z8d5„ Z9d6„ Z:dS )7ÚDatabaseAPI20Testa  Test a database self.driver for DB API 2.0 compatibility.
    This implementation tests Gadfly, but the TestCase
    is structured so that other self.drivers can subclass this
    test case to ensure compliance with the DB-API. It is
    expected that this TestCase may be expanded in the future
    if ambiguities or edge conditions are discovered.

    The 'Optional Extensions' are not yet being tested.

    self.drivers should subclass this test, overriding setUp, tearDown,
    self.driver, connect_args and connect_kw_args. Class specification
    should be as follows:

    import dbapi20
    class mytest(dbapi20.DatabaseAPI20Test):
       [...]

    Don't 'import DatabaseAPI20Test from dbapi20', or you will
    confuse the unit tester - just 'import dbapi20'.
    N© Údbapi20test_z'create table %sbooze (name varchar(20))z<create table %sbarflys (name varchar(20), drink varchar(30))zdrop table %sboozezdrop table %sbarflysÚlowerc                 ó:   — |                      | j        ¦  «         d S ©N)ÚexecuteÚddl1©ÚselfÚcursors     úaC:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\adodbapi/test/dbapi20.pyÚexecuteDDL1zDatabaseAPI20Test.executeDDL1|   ó   € Ø�Š�t”yÑ!Ô!Ð!Ð!Ð!ó    c                 ó:   — |                      | j        ¦  «         d S r   )r   Úddl2r   s     r   ÚexecuteDDL2zDatabaseAPI20Test.executeDDL2   r   r   c                 ó   — dS )z‡self.drivers should override this method to perform required setup
        if any is necessary, such as creating the database.
        Nr   ©r   s    r   ÚsetUpzDatabaseAPI20Test.setUp‚   s	   € ð 	ˆr   c                 óx  — 	 |                       ¦   «         }	 |                     ¦   «         }| j        | j        fD ]A}	 |                     |¦  «         |                     ¦   «          Œ-# | j        j        $ r Y Œ>w xY w	 |                     ¦   «          dS # |                     ¦   «          w xY w# t          $ r Y dS w xY w)zÈself.drivers should override this method to perform required cleanup
        if any is necessary, such as deleting the test database.
        The default drops the tables that may be created.
        N)
Ú_connectr   Úxddl1Úxddl2r   ÚcommitÚdriverÚErrorÚcloseÚ	Exception)r   ÚconÚcurÚddls       r   ÚtearDownzDatabaseAPI20Test.tearDownˆ   s×   € ð
	Ø—-’-‘/”/ˆCðØ—j’j‘l”l�Ø œJ¨¬
Ð3ð ð �CðØŸš CÑ(Ô(Ð(ØŸ
š
™œ˜˜øØœ;Ô,ð ð ð ð ˜ðøøøð	ð —	’	‘”���ø�—	’	‘”��øøøøÝð 	ð 	ð 	ØˆDˆDð	øøøsK   ‚B+ —$B ¼)A&Á%B Á&A8Á5B Á7A8Á8B Á<B+ ÂB(Â(B+ Â+
B9Â8B9c                 óŒ   — 	  | j         j        | j        i | j        ¤Ž}n%# t          $ r |                      d¦  «         Y nw xY w|S )Nz-No connect method found in self.driver module)r    ÚconnectÚconnect_argsÚconnect_kw_argsÚAttributeErrorÚfail)r   Úrs     r   r   zDatabaseAPI20Test._connectž   sf   € ð	GØ#�”Ô# TÔ%6ÐO¸$Ô:NÐOÐOˆAˆAøÝð 	Gð 	Gð 	GØ�IŠIÐEÑFÔFÐFÐFÐFð	Gøøøàˆs   ‚ ŸAÁ Ac                 óV   — |                       ¦   «         }|                     ¦   «          d S r   )r   r"   ©r   r$   s     r   Útest_connectzDatabaseAPI20Test.test_connect¥   s    € Ø�mŠm‰oŒoˆØ�	Š	‰Œˆˆˆr   c                 ó˜   — 	 | j         j        }|                      |d¦  «         d S # t          $ r |                      d¦  «         Y d S w xY w)Nz2.0zDriver doesn't define apilevel)r    ÚapilevelÚassertEqualr,   r-   )r   r3   s     r   Útest_apilevelzDatabaseAPI20Test.test_apilevel©   sd   € ð	8à”{Ô+ˆHà×Ò˜X uÑ-Ô-Ð-Ð-Ð-øÝð 	8ð 	8ð 	8Ø�IŠIÐ6Ñ7Ô7Ð7Ð7Ð7Ð7ð	8øøøs   ‚"& ¦A	ÁA	c                 óš   — 	 | j         j        }|                      |dv ¦  «         d S # t          $ r |                      d¦  «         Y d S w xY w)N)r   é   é   é   z"Driver doesn't define threadsafety)r    ÚthreadsafetyÚ
assertTruer,   r-   )r   r:   s     r   Útest_threadsafetyz#DatabaseAPI20Test.test_threadsafety²   se   € ð	<àœ;Ô3ˆLà�OŠO˜L¨LÐ8Ñ9Ô9Ð9Ð9Ð9øÝð 	<ð 	<ð 	<Ø�IŠIÐ:Ñ;Ô;Ð;Ð;Ð;Ð;ð	<øøøó   ‚#' §A
Á	A
c                 óš   — 	 | j         j        }|                      |dv ¦  «         d S # t          $ r |                      d¦  «         Y d S w xY w)N)ÚqmarkÚnumericÚnamedÚformatÚpyformatz Driver doesn't define paramstyle)r    Ú
paramstyler;   r,   r-   )r   rD   s     r   Útest_paramstylez!DatabaseAPI20Test.test_paramstyle»   ss   € ð	:àœÔ/ˆJà�OŠOØÐQÐQñô ð ð ð øõ ð 	:ð 	:ð 	:Ø�IŠIÐ8Ñ9Ô9Ð9Ð9Ð9Ð9ð	:øøør=   c                 óÐ  — |                       t          | j        j        t          ¦  «        ¦  «         |                       t          | j        j        t          ¦  «        ¦  «         |                       t          | j        j        | j        j        ¦  «        ¦  «         |                       t          | j        j        | j        j        ¦  «        ¦  «         |                       t          | j        j        | j        j        ¦  «        ¦  «         |                       t          | j        j	        | j        j        ¦  «        ¦  «         |                       t          | j        j
        | j        j        ¦  «        ¦  «         |                       t          | j        j        | j        j        ¦  «        ¦  «         |                       t          | j        j        | j        j        ¦  «        ¦  «         d S r   )r;   Ú
issubclassr    ÚWarningr#   r!   ÚInterfaceErrorÚDatabaseErrorÚOperationalErrorÚIntegrityErrorÚInternalErrorÚProgrammingErrorÚNotSupportedErrorr   s    r   Útest_Exceptionsz!DatabaseAPI20Test.test_ExceptionsÆ   sT  € à�Š�
 4¤;Ô#6½	ÑBÔBÑCÔCÐCØ�Š�
 4¤;Ô#4µiÑ@Ô@ÑAÔAÐAà�Š�
 4¤;Ô#=¸t¼{Ô?PÑQÔQÑRÔRÐRØ�Š�
 4¤;Ô#<¸d¼kÔ>OÑPÔPÑQÔQÐQØ�Š�
 4¤;Ô#?ÀÄÔARÑSÔSÑTÔTÐTØ�Š�
 4¤;Ô#=¸t¼{Ô?PÑQÔQÑRÔRÐRØ�Š�
 4¤;Ô#<¸d¼kÔ>OÑPÔPÑQÔQÐQØ�Š�
 4¤;Ô#?ÀÄÔARÑSÔSÑTÔTÐTØ�Š�
 4¤;Ô#@À$Ä+ÔBSÑTÔTÑUÔUÐUÐUÐUr   c                 óŽ  — |                       ¦   «         }| j        }|                      |j        |j        u ¦  «         |                      |j        |j        u ¦  «         |                      |j        |j        u ¦  «         |                      |j        |j        u ¦  «         |                      |j        |j        u ¦  «         |                      |j        |j        u ¦  «         |                      |j	        |j	        u ¦  «         |                      |j
        |j
        u ¦  «         |                      |j        |j        u ¦  «         d S r   )r   r    r;   rH   r!   rI   rJ   rK   rL   rM   rN   rO   )r   r$   Údrvs      r   Ú%test_ExceptionsAsConnectionAttributesz7DatabaseAPI20Test.test_ExceptionsAsConnectionAttributesÓ   s  € ð �mŠm‰oŒoˆØŒkˆØ�Š˜œ s¤{Ð2Ñ3Ô3Ð3Ø�Š˜œ	 S¤YÐ.Ñ/Ô/Ð/Ø�Š˜Ô*¨cÔ.@Ð@ÑAÔAÐAØ�Š˜Ô)¨SÔ->Ð>Ñ?Ô?Ð?Ø�Š˜Ô,°Ô0DÐDÑEÔEÐEØ�Š˜Ô*¨cÔ.@Ð@ÑAÔAÐAØ�Š˜Ô)¨SÔ->Ð>Ñ?Ô?Ð?Ø�Š˜Ô,°Ô0DÐDÑEÔEÐEØ�Š˜Ô-°Ô1FÐFÑGÔGÐGÐGÐGr   c                 ó²   — |                       ¦   «         }	 |                     ¦   «          |                     ¦   «          d S # |                     ¦   «          w xY wr   )r   r   r"   r0   s     r   Útest_commitzDatabaseAPI20Test.test_commitæ   sD   € Ø�mŠm‰oŒoˆð	à�JŠJ‰LŒLˆLà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøó   –A  Á Ac                 ó¨   — |                       ¦   «         }t          |d¦  «        r-	 |                     ¦   «          d S # | j        j        $ r Y d S w xY wd S )NÚrollback)r   ÚhasattrrX   r    rO   r0   s     r   Útest_rollbackzDatabaseAPI20Test.test_rollbackî   sj   € Ø�mŠm‰oŒoˆõ �3˜
Ñ#Ô#ð 	ðØ—’‘”���øØ”;Ô0ð ð ð Ø��ðøøøð	ð 	s   ¦< ¼AÁAc                 ó²   — |                       ¦   «         }	 |                     ¦   «         }|                     ¦   «          d S # |                     ¦   «          w xY wr   )r   r   r"   ©r   r$   r%   s      r   Útest_cursorzDatabaseAPI20Test.test_cursorø   sD   € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøørV   c                 ó|  — |                       ¦   «         }	 |                     ¦   «         }|                     ¦   «         }|                      |¦  «         |                     d| j        z  ¦  «         |                     d| j        z  ¦  «         |                     ¦   «         }|                      t          |¦  «        d¦  «         |                      t          |d         ¦  «        d¦  «         |                      |d         d         d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nú.insert into %sbooze values ('Victoria Bitter')úselect name from %sboozer7   r   úVictoria Bitter©	r   r   r   r   Útable_prefixÚfetchallr4   Úlenr"   )r   r$   Úcur1Úcur2Úboozes        r   Útest_cursor_isolationz'DatabaseAPI20Test.test_cursor_isolationÿ   s  € Ø�mŠm‰oŒoˆð	ð —:’:‘<”<ˆDØ—:’:‘<”<ˆDØ×Ò˜TÑ"Ô"Ð"Ø�LŠLØ@ÀDÔDUÑVñô ð ð �LŠLÐ3°dÔ6GÑGÑHÔHÐHØ—M’M‘O”OˆEØ×Ò�S ™ZœZ¨Ñ+Ô+Ð+Ø×Ò�S  q¤™]œ]¨AÑ.Ô.Ð.Ø×Ò˜U 1œX aœ[Ð*;Ñ<Ô<Ð<à�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –C9D% Ä%D;c                 ó`  — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         |                      |j        d d¦  «         |                     d| j        z  ¦  «         |                      t          |j        ¦  «        dd¦  «         |                      t          |j        d         ¦  «        dd¦  «         |                      |j        d         d                              ¦   «         dd	¦  «         |                      |j        d         d         | j	        j
        d
|j        d         d         z  ¦  «         |                      |¦  «         |                      |j        d d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nzccursor.description should be none after executing a statement that can return no rows (such as DDL)r`   r7   z-cursor.description describes too many columnsr   é   z1cursor.description[x] tuples must have 7 elementsÚnamez0cursor.description[x][0] must return column namez8cursor.description[x][1] must return column type. Got %rzVcursor.description not being set to None when executing no-result statements (eg. DDL))r   r   r   r4   Údescriptionr   rc   re   r	   r    ÚSTRINGr   r"   r\   s      r   Útest_descriptionz"DatabaseAPI20Test.test_description  s·  € Ø�mŠm‰oŒoˆð'	Ø—*’*‘,”,ˆCØ×Ò˜SÑ!Ô!Ð!Ø×ÒØ”ØðBñô ð ð �KŠKÐ2°TÔ5FÑFÑGÔGÐGØ×ÒÝ�C”OÑ$Ô$ aÐ)Xñô ð ð ×ÒÝ�C”O AÔ&Ñ'Ô'ØØCñô ð ð
 ×ÒØ” Ô" 1Ô%×+Ò+Ñ-Ô-ØØBñô ð ð
 ×ÒØ” Ô" 1Ô%Ø”Ô"ØJØ”/ !Ô$ QÔ'ñ(ñô ð ð ×Ò˜SÑ!Ô!Ð!Ø×ÒØ”Øð1ñô ð ð �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –E+F ÆF-c                 ó`  — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         |                      |j        dv d¦  «         |                     d| j        z  ¦  «         |                      |j        dv d¦  «         |                     d| j        z  ¦  «         |                      |j        dv d¦  «         |                      |¦  «         |                      |j        dd	¦  «         | 	                    ¦   «          d S # | 	                    ¦   «          w xY w)
N©éÿÿÿÿr   zFcursor.rowcount should be -1 or 0 after executing no-result statementsr_   ©rr   r7   zccursor.rowcount should == number or rows inserted, or set to -1 after executing an insert statementr`   zbcursor.rowcount should == number of rows returned, or set to -1 after executing a select statementrr   zJcursor.rowcount not being reset to -1 after executing no-result statements)
r   r   r   r;   Úrowcountr   rc   r   r4   r"   r\   s      r   Útest_rowcountzDatabaseAPI20Test.test_rowcount=  sG  € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ×Ò˜SÑ!Ô!Ð!Ø�OŠOØ” Ð'ðñô ð ð
 �KŠKØ@ÀDÔDUÑVñô ð ð �OŠOØ” Ð'ð@ñô ð ð
 �KŠKÐ2°TÔ5FÑFÑGÔGÐGØ�OŠOØ” Ð'ð?ñô ð ð
 ×Ò˜SÑ!Ô!Ð!Ø×ÒØ”Øð'ñô ð ð �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –C+D ÄD-c                 óž  — |                       ¦   «         }	 |                     ¦   «         }| j        rït          |d¦  «        rß|                     | j        d¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d¦  «         |                     ¦   «         }|                      t          |¦  «        dd¦  «         |                      t          |d         ¦  «        dd¦  «         |                      |d         d         dd	¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)
NÚcallproc)ÚFOOr7   r   rx   zcallproc produced no result setz$callproc produced invalid result setÚfooz!callproc produced invalid results)	r   r   Ú
lower_funcrY   rw   r4   re   rd   r"   ©r   r$   r%   r.   s       r   Útest_callproczDatabaseAPI20Test.test_callproca  s  € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØŒð V¥7¨3°
Ñ#;Ô#;ð VØ—L’L ¤°(Ñ;Ô;�Ø× Ò ¥ Q¡¤¨Ñ+Ô+Ð+Ø× Ò   1¤ uÑ-Ô-Ð-Ø—L’L‘N”N�Ø× Ò ¥ Q¡¤¨Ð,MÑNÔNÐNØ× Ò ¥ Q q¤T¡¤¨AÐ/UÑVÔVÐVØ× Ò   1¤ a¤¨%Ð1TÑUÔUÐUà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –D
D6 Ä6Ec                 óÐ  — |                       ¦   «         }	 |                     ¦   «         }|                     ¦   «          n# |                     ¦   «          w xY w|                      | j        j        | j        |¦  «         |                      | j        j        |j        ¦  «         t          r'|                      | j        j        |j        ¦  «         d S |  	                    d¦  «         d S )Nz>Non-idempotent close is considered a bad thing by some people.)
r   r   r"   ÚassertRaisesr    r!   r   r   ÚTEST_FOR_NON_IDEMPOTENT_CLOSEÚskipTestr\   s      r   Ú
test_closezDatabaseAPI20Test.test_closep  sÓ   € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCà�IŠI‰KŒKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøð 	×Ò˜$œ+Ô+¨TÔ-=¸sÑCÔCÐCð 	×Ò˜$œ+Ô+¨S¬ZÑ8Ô8Ð8õ )ð 	Ø×Ò˜dœkÔ/°´Ñ;Ô;Ð;Ð;Ð;à�MŠMØPñô ð ð ð s	   –? ¿Ac                 óÜ   — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         |                     ¦   «          d S # |                     ¦   «          w xY wr   )r   r   Ú_paraminsertr"   r\   s      r   Útest_executezDatabaseAPI20Test.test_executeˆ  sX   € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ×Ò˜cÑ"Ô"Ð"à�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –)A ÁA+c                 ó8  — |                       |¦  «         |                     d| j        z  ¦  «         |                      |j        dv ¦  «         | j        j        dk    r|                     d| j        z  d¦  «         nÕ| j        j        dk    r|                     d| j        z  d¦  «         n¦| j        j        dk    r!|                     d	| j        z  d
di¦  «         nu| j        j        dk    r|                     d| j        z  d¦  «         nF| j        j        dk    r!|                     d| j        z  d
di¦  «         n|                      d¦  «         |                      |j        dv ¦  «         |                     d| j        z  ¦  «         |                     ¦   «         }|  	                    t          |¦  «        dd¦  «         |d         d         |d         d         g}|                     ¦   «          |  	                    |d         dd¦  «         |  	                    |d         dd¦  «         d}|  	                    |d         d         |d|d         d         ›d|›�¦  «         |  	                    |d         d         |d|d         d         ›d|›�¦  «         d S )NzSinsert into %sbarflys values ('Victoria Bitter', 'thi%%s :may ca%%(u)se? troub:1e')rs   r?   zCinsert into %sbarflys values (?, 'thi%%s :may ca%%(u)se? troub:1e')©úCooper'sr@   zDinsert into %sbarflys values (:1, 'thi%%s :may ca%%(u)se? troub:1e')rA   zGinsert into %sbarflys values (:beer, 'thi%%s :may ca%%(u)se? troub:1e')Úbeerr‡   rB   zEinsert into %sbarflys values (%%s, 'thi%%s :may ca%%(u)se? troub:1e')rC   zKinsert into %sbarflys values (%%(beer)s, 'thi%%s :may ca%%(u)se? troub:1e')zInvalid paramstylez!select name, drink from %sbarflysr8   z%cursor.fetchall returned too few rowsr   r7   zFcursor.fetchall retrieved incorrect data, or data inserted incorrectlyra   zthi%s :may ca%(u)se? troub:1ezLcursor.fetchall retrieved incorrect data, or data inserted incorrectly. Got=z, Expected=)r   r   rc   r;   rt   r    rD   r-   rd   r4   re   Úsort)r   r%   ÚresÚbeersÚtroubles        r   rƒ   zDatabaseAPI20Test._paraminsert�  s2  € Ø×Ò˜ÑÔÐØ�ŠØaØÔ ñ"ñ	
ô 	
ð 	
ð 	�Š˜œ¨Ð/Ñ0Ô0Ð0àŒ;Ô! WÒ,Ð,Ø�KŠKØUØÔ#ñ$àñô ð ð ð
 Œ[Ô# yÒ0Ð0Ø�KŠKØVØÔ#ñ$àñô ð ð ð
 Œ[Ô# wÒ.Ð.Ø�KŠKØYØÔ#ñ$à˜Ð$ñô ð ð ð
 Œ[Ô# xÒ/Ð/Ø�KŠKØWØÔ#ñ$àñô ð ð ð
 Œ[Ô# zÒ1Ð1Ø�KŠKØ]ØÔ#ñ$à˜Ð$ñô ð ð ð �IŠIÐ*Ñ+Ô+Ð+Ø�Š˜œ¨Ð/Ñ0Ô0Ð0à�ŠÐ7¸$Ô:KÑKÑLÔLÐLØ�lŠl‰nŒnˆØ×Ò�˜S™œ 1Ð&MÑNÔNÐNØ�Q”˜”˜C œF 1œIÐ&ˆØ�
Š
‰ŒˆØ×ÒØ�!ŒHØØTñ	
ô 	
ð 	
ð
 	×ÒØ�!ŒHØØTñ	
ô 	
ð 	
ð
 2ˆØ×ÒØ�ŒF�1ŒIØðDØ # A¤ q¤	ðDð DØ8?ðDð Dñ	
ô 	
ð 	
ð 	×ÒØ�ŒF�1ŒIØðDØ # A¤ q¤	ðDð DØ8?ðDð Dñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óÎ  — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         ddg}ddiddig}| j        j        dk    r|                     d| j        z  |¦  «         nÑ| j        j        dk    r|                     d	| j        z  |¦  «         n¢| j        j        d
k    r|                     d| j        z  |¦  «         ns| j        j        dk    r|                     d| j        z  |¦  «         nD| j        j        dk    r|                     d| j        z  |¦  «         n|                      d¦  «         |                      |j	        dv d|j	        z  ¦  «         | 
                    d| j        z  ¦  «         |                     ¦   «         }|                      t          |¦  «        dd¦  «         |d         d         |d         d         g}|                     ¦   «          |                      |d         dd|d         z  ¦  «         |                      |d         dd¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nr†   )úBoag'srˆ   r‡   rŽ   r?   zinsert into %sbooze values (?)r@   zinsert into %sbooze values (:1)rA   z"insert into %sbooze values (:beer)rB   z insert into %sbooze values (%%s)rC   z&insert into %sbooze values (%%(beer)s)zUnknown paramstyle)rr   r8   zIinsert using cursor.executemany set cursor.rowcount to incorrect value %rr`   r8   z2cursor.fetchall retrieved incorrect number of rowsr   r7   zincorrect data "%s" retrievedzincorrect data retrieved)r   r   r   r    rD   Úexecutemanyrc   r-   r;   rt   r   rd   r4   re   r‰   r"   )r   r$   r%   ÚlargsÚmargsrŠ   r‹   s          r   Útest_executemanyz"DatabaseAPI20Test.test_executemany×  s   € Ø�mŠm‰oŒoˆð-	Ø—*’*‘,”,ˆCØ×Ò˜SÑ!Ô!Ð!Ø" KÐ0ˆEØ˜jÐ)¨F°HÐ+=Ð>ˆEØŒ{Ô%¨Ò0Ð0Ø—’Ø4°tÔ7HÑHÈ%ñô ð ð ð ”Ô'¨9Ò4Ð4Ø—’Ø5¸Ô8IÑIÈ5ñô ð ð ð ”Ô'¨7Ò2Ð2Ø—’Ø8¸4Ô;LÑLÈeñô ð ð ð ”Ô'¨8Ò3Ð3Ø—’Ø6¸Ô9JÑJÈEñô ð ð ð ”Ô'¨:Ò5Ð5Ø—’Ø<ÀÔ@QÑRØñô ð ð ð
 —	’	Ð.Ñ/Ô/Ð/Ø�OŠOØ” Ð'ð%Ø'*¤|ñ4ñô ð ð
 �KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—,’,‘.”.ˆCØ×ÒÝ�C‘”˜!ÐQñô ð ð ˜”V˜A”Y  A¤ q¤	Ð*ˆEØ�JŠJ‰LŒLˆLØ×ÒØ�a”˜(Ð$CÀeÈAÄhÑ$Nñô ð ð ×Ò˜U 1œX zÐ3MÑNÔNÐNà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –H"I ÉI$c                 ó&  — |                       ¦   «         }	 |                     ¦   «         }|                      | j        j        |j        ¦  «         |                      |¦  «         |                      | j        j        |j        ¦  «         |                     d| j        z  ¦  «         |  	                    |                     ¦   «         d d¦  «         |  
                    |j        dv ¦  «         |                     d| j        z  ¦  «         |                      | j        j        |j        ¦  «         |                     d| j        z  ¦  «         |                     ¦   «         }|  	                    t          |¦  «        dd¦  «         |  	                    |d         dd	¦  «         |  	                    |                     ¦   «         d d
¦  «         |  
                    |j        dv ¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nr`   z?cursor.fetchone should return None if a query retrieves no rowsrq   r_   r7   z2cursor.fetchone should have retrieved a single rowr   ra   z(cursor.fetchone retrieved incorrect dataz<cursor.fetchone should return None if no more rows availablers   )r   r   r~   r    r!   Úfetchoner   r   rc   r4   r;   rt   re   r"   r{   s       r   Útest_fetchonezDatabaseAPI20Test.test_fetchone  sò  € Ø�mŠm‰oŒoˆð*	Ø—*’*‘,”,ˆCð ×Ò˜dœkÔ/°´Ñ>Ô>Ð>ð ×Ò˜SÑ!Ô!Ð!Ø×Ò˜dœkÔ/°´Ñ>Ô>Ð>à�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ×ÒØ—’‘”ØØQñô ð ð
 �OŠO˜CœL¨GÐ3Ñ4Ô4Ð4ð �KŠKØ@ÀDÔDUÑVñô ð ð ×Ò˜dœkÔ/°´Ñ>Ô>Ð>à�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—’‘”ˆAØ×ÒÝ�A‘”˜ÐOñô ð ð ×ÒØ�!”Ð'Ð)Sñô ð ð ×ÒØ—’‘”ØØNñô ð ð
 �OŠO˜CœL¨GÐ3Ñ4Ô4Ð4à�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –GG: Ç:H)zCarlton ColdzCarlton DraftzMountain GoatÚRedbackra   ÚXXXXc                 ó.   ‡ — ˆ fd„‰ j         D ¦   «         }|S )zSReturn a list of sql commands to setup the DB for the fetch
        tests.
        c                 ó,   •— g | ]}d ‰j         ›d|›d�‘ŒS )zinsert into zbooze values ('z'))rc   )Ú.0Úsr   s     €r   ú
<listcomp>z/DatabaseAPI20Test._populate.<locals>.<listcomp>C  s=   ø€ ð 
ð 
ð 
à�ð 48Ô3DÐ3DÐ3DÀaÀaÀaÐHð
ð 
ð 
r   )Úsamples)r   Úpopulates   ` r   Ú	_populatezDatabaseAPI20Test._populate?  s4   ø€ ð
ð 
ð 
ð 
à”\ð
ñ 
ô 
ˆð ˆr   c                 ó0	  — |                       ¦   «         }	 |                     ¦   «         }|                      | j        j        |j        d¦  «         |                      |¦  «         |                      ¦   «         D ]}|                     |¦  «         Œ|                     d| j	        z  ¦  «         |                     ¦   «         }|  
                    t          |¦  «        dd¦  «         d|_        |                     d¦  «        }|  
                    t          |¦  «        dd¦  «         |                     d¦  «        }|  
                    t          |¦  «        dd¦  «         |                     d¦  «        }|  
                    t          |¦  «        d	d
¦  «         |                      |j        dv ¦  «         d|_        |                     d| j	        z  ¦  «         |                     ¦   «         }|  
                    t          |¦  «        dd¦  «         |                     ¦   «         }|  
                    t          |¦  «        d¦  «         |                     ¦   «         }|  
                    t          |¦  «        d	¦  «         |                      |j        dv ¦  «         d|_        |                     d| j	        z  ¦  «         |                     ¦   «         }|                      |j        dv ¦  «         |  
                    t          |¦  «        d¦  «         |  
                    t          |¦  «        d¦  «         d„ |D ¦   «         }|                     ¦   «          t!          d	d¦  «        D ]*}|  
                    ||         | j        |         d¦  «         Œ+|                     ¦   «         }|  
                    t          |¦  «        d	d¦  «         |                      |j        dv ¦  «         |                      |¦  «         |                     d| j	        z  ¦  «         |                     ¦   «         }|  
                    t          |¦  «        d	d¦  «         |                      |j        dv ¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Né   r`   r7   zQcursor.fetchmany retrieved incorrect number of rows, default of arraysize is one.é
   r9   z3cursor.fetchmany retrieved incorrect number of rowsr8   r   zLcursor.fetchmany should return an empty sequence after results are exhausted©rr   é   z0cursor.arraysize not being honoured by fetchmanyr¤   c                 ó   — g | ]
}|d          ‘ŒS ©r   r   ©rš   r.   s     r   rœ   z4DatabaseAPI20Test.test_fetchmany.<locals>.<listcomp>ƒ  ó   € Ð'Ð'Ð'˜Q�A�a”DÐ'Ð'Ð'r   z,incorrect data retrieved by cursor.fetchmanyzfcursor.fetchmany should return an empty sequence if called after the whole result set has been fetchedúselect name from %sbarflyszKcursor.fetchmany should return an empty sequence if query retrieved no rowsrq   )r   r   r~   r    r!   Ú	fetchmanyr   rŸ   r   rc   r4   re   Ú	arraysizer;   rt   r‰   Úranger�   r   r"   )r   r$   r%   Úsqlr.   ÚrowsÚis          r   Útest_fetchmanyz DatabaseAPI20Test.test_fetchmanyI  sL  € Ø�mŠm‰oŒoˆðX	Ø—*’*‘,”,ˆCð ×Ò˜dœkÔ/°´ÀÑBÔBÐBà×Ò˜SÑ!Ô!Ð!Ø—~’~Ñ'Ô'ð !ð !�Ø—’˜CÑ Ô Ð Ð à�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—’‘”ˆAØ×ÒÝ�A‘”Øð/ñô ð ð ˆCŒMØ—’˜aÑ Ô ˆAØ×ÒÝ�A‘”˜ÐPñô ð ð —’˜aÑ Ô ˆAØ×ÒÝ�A‘”˜ÐPñô ð ð —’˜aÑ Ô ˆAØ×ÒÝ�A‘”Øð(ñô ð ð �OŠO˜CœL¨GÐ3Ñ4Ô4Ð4ð ˆCŒMØ�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—’‘”ˆAØ×ÒÝ�A‘”˜ÐMñô ð ð —’‘”ˆAØ×Ò�S ™VœV QÑ'Ô'Ð'Ø—’‘”ˆAØ×Ò�S ™VœV QÑ'Ô'Ð'Ø�OŠO˜CœL¨GÐ3Ñ4Ô4Ð4àˆCŒMØ�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—=’=‘?”?ˆDØ�OŠO˜CœL¨GÐ3Ñ4Ô4Ð4Ø×Ò�S ™YœY¨Ñ*Ô*Ð*Ø×Ò�S ™YœY¨Ñ*Ô*Ð*Ø'Ð' $Ð'Ñ'Ô'ˆDØ�IŠI‰KŒKˆKõ ˜1˜a‘[”[ð ð �Ø× Ò Ø˜”GØ”L ”OØBñô ð ð ð —=’=‘?”?ˆDØ×ÒÝ�D‘	”	ØðEñô ð ð �OŠO˜CœL¨GÐ3Ñ4Ô4Ð4à×Ò˜SÑ!Ô!Ð!Ø�KŠKÐ4°tÔ7HÑHÑIÔIÐIØ—’‘”ˆAØ×ÒÝ�A‘”Øð*ñô ð ð �OŠO˜CœL¨GÐ3Ñ4Ô4Ð4ð �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –QQ? Ñ?Rc                 ó¬  — |                       ¦   «         }	 |                     ¦   «         }|                      | j        j        |j        ¦  «         |                      |¦  «         |                      ¦   «         D ]}|                     |¦  «         Œ|                      | j        j        |j        ¦  «         |                     d| j	        z  ¦  «         |                     ¦   «         }|  
                    |j        dt          | j        ¦  «        fv ¦  «         |                      t          |¦  «        t          | j        ¦  «        d¦  «         d„ |D ¦   «         }|                     ¦   «          t!          dt          | j        ¦  «        ¦  «        D ]*}|                      ||         | j        |         d¦  «         Œ+|                     ¦   «         }|                      t          |¦  «        dd¦  «         |  
                    |j        dt          | j        ¦  «        fv ¦  «         |                      |¦  «         |                     d| j	        z  ¦  «         |                     ¦   «         }|  
                    |j        d	v ¦  «         |                      t          |¦  «        dd
¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nr`   rr   z)cursor.fetchall did not retrieve all rowsc                 ó   — g | ]
}|d          ‘ŒS r¦   r   r§   s     r   rœ   z3DatabaseAPI20Test.test_fetchall.<locals>.<listcomp>¾  r¨   r   r   z(cursor.fetchall retrieved incorrect rowszacursor.fetchall should return an empty list if called after the whole result set has been fetchedr©   rq   zMcursor.fetchall should return an empty list if a select query returns no rows)r   r   r~   r    r!   rd   r   rŸ   r   rc   r;   rt   re   r�   r4   r‰   r¬   r   r"   )r   r$   r%   r­   r®   r¯   s         r   Útest_fetchallzDatabaseAPI20Test.test_fetchall¥  s›  € Ø�mŠm‰oŒoˆð2	Ø—*’*‘,”,ˆCð ×Ò˜dœkÔ/°´Ñ>Ô>Ð>à×Ò˜SÑ!Ô!Ð!Ø—~’~Ñ'Ô'ð !ð !�Ø—’˜CÑ Ô Ð Ð ð ×Ò˜dœkÔ/°´Ñ>Ô>Ð>à�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—<’<‘>”>ˆDØ�OŠO˜CœL¨Rµ°T´\Ñ1BÔ1BÐ,CÐCÑDÔDÐDØ×ÒÝ�D‘	”	Ý�D”LÑ!Ô!Ø;ñô ð ð
 (Ð' $Ð'Ñ'Ô'ˆDØ�IŠI‰KŒKˆKÝ˜1�c $¤,Ñ/Ô/Ñ0Ô0ð ð �Ø× Ò Ø˜”G˜Tœ\¨!œ_Ð.Xñô ð ð ð —<’<‘>”>ˆDØ×ÒÝ�D‘	”	Øð>ñô ð ð �OŠO˜CœL¨Rµ°T´\Ñ1BÔ1BÐ,CÐCÑDÔDÐDà×Ò˜SÑ!Ô!Ð!Ø�KŠKÐ4°tÔ7HÑHÑIÔIÐIØ—<’<‘>”>ˆDØ�OŠO˜CœL¨GÐ3Ñ4Ô4Ð4Ø×ÒÝ�D‘	”	Øð1ñô ð ð �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –JJ= Ê=Kc                 ó   — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         |                      ¦   «         D ]}|                     |¦  «         Œ|                     d| j        z  ¦  «         |                     ¦   «         }|                     d¦  «        }|                     ¦   «         }|                     ¦   «         }|  	                    |j
        dv ¦  «         |                      t          |¦  «        dd¦  «         |                      t          |¦  «        dd¦  «         |d         g}|                     |d         d         |d         d         g¦  «         |                     |d         ¦  «         |                     |d         d         |d         d         g¦  «         |                     ¦   «          t!          dt          | j        ¦  «        ¦  «        D ]*}	|                      ||	         | j        |	         d¦  «         Œ+	 |                     ¦   «          d S # |                     ¦   «          w xY w)	Nr`   r8   r£   z+fetchmany returned incorrect number of rowsz*fetchall returned incorrect number of rowsr   r7   z$incorrect data retrieved or inserted)r   r   r   rŸ   r   rc   r”   rª   rd   r;   rt   r4   re   ÚextendÚappendr‰   r¬   r�   r"   )
r   r$   r%   r­   Úrows1Úrows23Úrows4Úrows56r®   r¯   s
             r   Útest_mixedfetchz!DatabaseAPI20Test.test_mixedfetchÛ  s  € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ×Ò˜SÑ!Ô!Ð!Ø—~’~Ñ'Ô'ð !ð !�Ø—’˜CÑ Ô Ð Ð à�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—L’L‘N”NˆEØ—]’] 1Ñ%Ô%ˆFØ—L’L‘N”NˆEØ—\’\‘^”^ˆFØ�OŠO˜CœL¨GÐ3Ñ4Ô4Ð4Ø×ÒÝ�F‘”˜QÐ Mñô ð ð ×ÒÝ�F‘”˜QÐ Lñô ð ð ˜!”H�:ˆDØ�KŠK˜ œ 1œ v¨a¤y°¤|Ð4Ñ5Ô5Ð5Ø�KŠK˜˜aœÑ!Ô!Ð!Ø�KŠK˜ œ 1œ v¨a¤y°¤|Ð4Ñ5Ô5Ð5Ø�IŠI‰KŒKˆKÝ˜1�c $¤,Ñ/Ô/Ñ0Ô0ð ð �Ø× Ò Ø˜”G˜Tœ\¨!œ_Ð.Tñô ð ð ðð
 �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –H
H7 È7Ic                 ó    — t          d¦  «        ‚)z™Should create a procedure called deleteme
        that returns two result sets, first the
        number of rows in booze then "name from booze"
        úHelper not implemented©ÚNotImplementedError©r   r%   s     r   Úhelp_nextset_setUpz$DatabaseAPI20Test.help_nextset_setUpü  s   € õ
 "Ð":Ñ;Ô;Ð;r   c                 ó    — t          d¦  «        ‚)z*If cleaning up is needed after nextSetTestr½   r¾   rÀ   s     r   Úhelp_nextset_tearDownz'DatabaseAPI20Test.help_nextset_tearDown  s   € å!Ð":Ñ;Ô;Ð;r   c                 ó    — t          d¦  «        ‚)Nz"Drivers need to override this testr¾   r   s    r   Útest_nextsetzDatabaseAPI20Test.test_nextset  s   € Ý!Ð"FÑGÔGÐGr   c                 óú   — |                       ¦   «         }	 |                     ¦   «         }|                      t          |d¦  «        d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nr«   z cursor.arraysize must be defined)r   r   r;   rY   r"   r\   s      r   Útest_arraysizez DatabaseAPI20Test.test_arraysize  sl   € à�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ�OŠOÝ˜˜[Ñ)Ô)Ð+Mñô ð ð �IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –8A$ Á$A:c                 ó  — |                       ¦   «         }	 |                     ¦   «         }|                     d¦  «         |                      |¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)N)é   )r   r   Úsetinputsizesrƒ   r"   r\   s      r   Útest_setinputsizesz$DatabaseAPI20Test.test_setinputsizes  sl   € Ø�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ×Ò˜eÑ$Ô$Ð$Ø×Ò˜cÑ"Ô"Ð"à�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –>A* Á*B c                 ó2  — |                       ¦   «         }	 |                     ¦   «         }|                     d¦  «         |                     dd¦  «         |                      |¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Niè  iÐ  r   )r   r   Úsetoutputsizerƒ   r"   r\   s      r   Útest_setoutputsize_basicz*DatabaseAPI20Test.test_setoutputsize_basic'  s‚   € à�mŠm‰oŒoˆð	Ø—*’*‘,”,ˆCØ×Ò˜dÑ#Ô#Ð#Ø×Ò˜d AÑ&Ô&Ð&Ø×Ò˜cÑ"Ô"Ð"à�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –AB  Â Bc                 ó    — t          d¦  «        ‚)Nz#Driver needed to override this testr¾   r   s    r   Útest_setoutputsizez$DatabaseAPI20Test.test_setoutputsize2  s   € å!Ð"GÑHÔHÐHr   c                 óV  — |                       ¦   «         }	 |                     ¦   «         }|                      |¦  «         |                     d| j        z  ¦  «         |                     d| j        z  ¦  «         |                     ¦   «         }|                      t          |¦  «        d¦  «         |                      t          |d         ¦  «        d¦  «         |                      |d         d         d d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nz!insert into %sbooze values (NULL)r`   r7   r   zNULL value not returned as Nonerb   r{   s       r   Ú	test_NonezDatabaseAPI20Test.test_None6  sø   € Ø�mŠm‰oŒoˆð
	Ø—*’*‘,”,ˆCØ×Ò˜SÑ!Ô!Ð!Ø�KŠKÐ;¸dÔ>OÑOÑPÔPÐPØ�KŠKÐ2°TÔ5FÑFÑGÔGÐGØ—’‘”ˆAØ×Ò�S ™VœV QÑ'Ô'Ð'Ø×Ò�S  1¤™YœY¨Ñ*Ô*Ð*Ø×Ò˜Q˜qœT !œW dÐ,MÑNÔNÐNà�IŠI‰KŒKˆKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøs   –C&D ÄD(c                 ó–   — | j                              ddd¦  «        }| j                              t          j        d¦  «        ¦  «        }d S )NéÒ  é   rÉ   )	rÔ   rÕ   rÉ   r   r   r   r   r   r   )r    ÚDateÚDateFromTicksÚtimeÚmktime)r   Úd1Úd2s      r   Ú	test_DatezDatabaseAPI20Test.test_DateD  s?   € ØŒ[×Ò˜d B¨Ñ+Ô+ˆØŒ[×&Ò&¥t¤{Ð3SÑ'TÔ'TÑUÔUˆˆˆr   c                 ó–   — | j                              ddd¦  «        }| j                              t          j        d¦  «        ¦  «        }d S )Né   é-   é   )	iÑ  r7   r7   rÞ   rß   rà   r   r   r   )r    ÚTimeÚTimeFromTicksrØ   rÙ   ©r   Út1Út2s      r   Ú	test_TimezDatabaseAPI20Test.test_TimeJ  s?   € ØŒ[×Ò˜b " bÑ)Ô)ˆØŒ[×&Ò&¥t¤{Ð3TÑ'UÔ'UÑVÔVˆˆˆr   c                 óœ   — | j                              dddddd¦  «        }| j                              t          j        d¦  «        ¦  «        }d S )NrÔ   rÕ   rÉ   rÞ   rß   rà   )	rÔ   rÕ   rÉ   rÞ   rß   rà   r   r   r   )r    Ú	TimestampÚTimestampFromTicksrØ   rÙ   rã   s      r   Útest_Timestampz DatabaseAPI20Test.test_TimestampP  sJ   € ØŒ[×"Ò" 4¨¨R°°R¸Ñ<Ô<ˆØŒ[×+Ò+ÝŒKÐ;Ñ<Ô<ñ
ô 
ˆˆˆr   c                 ón   — | j                              d¦  «        }| j                              d¦  «        }d S )Ns	   Somethingr   )r    ÚBinary)r   Úbs     r   Útest_BinaryzDatabaseAPI20Test.test_BinaryX  s0   € ØŒK×Ò˜|Ñ,Ô,ˆØŒK×Ò˜sÑ#Ô#ˆˆˆr   c                 óX   — |                       t          | j        d¦  «        d¦  «         d S )Nrn   zmodule.STRING must be defined©r;   rY   r    r   s    r   Útest_STRINGzDatabaseAPI20Test.test_STRING\  s)   € Ø�Š� ¤¨XÑ6Ô6Ð8WÑXÔXÐXÐXÐXr   c                 óX   — |                       t          | j        d¦  «        d¦  «         d S )NÚBINARYzmodule.BINARY must be defined.rð   r   s    r   Útest_BINARYzDatabaseAPI20Test.test_BINARY_  ó4   € Ø�ŠÝ�D”K Ñ*Ô*Ð,Lñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óX   — |                       t          | j        d¦  «        d¦  «         d S )NÚNUMBERzmodule.NUMBER must be defined.rð   r   s    r   Útest_NUMBERzDatabaseAPI20Test.test_NUMBERd  rõ   r   c                 óX   — |                       t          | j        d¦  «        d¦  «         d S )NÚDATETIMEz module.DATETIME must be defined.rð   r   s    r   Útest_DATETIMEzDatabaseAPI20Test.test_DATETIMEi  s4   € Ø�ŠÝ�D”K Ñ,Ô,Ð.Pñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óX   — |                       t          | j        d¦  «        d¦  «         d S )NÚROWIDzmodule.ROWID must be defined.rð   r   s    r   Ú
test_ROWIDzDatabaseAPI20Test.test_ROWIDn  s)   € Ø�Š� ¤¨WÑ5Ô5Ð7VÑWÔWÐWÐWÐWr   );Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r*   r+   rc   r   r   r   r   Ú	lowerfuncr   r   r   r'   r   r1   r5   r<   rE   rP   rS   rU   rZ   r]   ri   ro   ru   rz   r|   r�   r„   rƒ   r’   r•   r�   rŸ   r°   r³   r»   rÁ   rÃ   rÅ   rÇ   rË   rÎ   rÐ   rÒ   rÜ   ræ   rê   rî   rñ   rô   rø   rû   rþ   r   r   r   r   r   V   s5  € € € € € ðð ð. €FØ€LØ€OØ!€Là4°|ÑC€DØIÈLÑX€DØ  <Ñ/€EØ" \Ñ1€Eà€Ið"ð "ð "ð"ð "ð "ðð ð ðð ð ð,ð ð ðð ð ð8ð 8ð 8ð<ð <ð <ð	:ð 	:ð 	:ðVð Vð VðHð Hð Hð&ð ð ðð ð ðð ð ðð ð ð&)ð )ð )ðV ð  ð  ðD €Jðð ð ðð ð ð0ð ð ðE
ð E
ð E
ðN/ð /ð /ðb,ð ,ð ,ð\ð ð €Gðð ð ðZð Zð Zðx4ð 4ð 4ðlð ð ðB<ð <ð <ð<ð <ð <ð
Hð Hð Hð	ð 	ð 	ðð ð ð	ð 	ð 	ðIð Ið Iðð ð ðVð Vð VðWð Wð Wð
ð 
ð 
ð$ð $ð $ðYð Yð Yð
ð 
ð 
ð

ð 
ð 
ð

ð 
ð 
ð
Xð Xð Xð Xð Xr   r   )r  Ú__version__Ú
__author__rØ   Úunittestr   ÚTestCaser   r   r   r   ú<module>r     sŠ   ðð
ð 
ð $ B r EÔ*€Ø6€
à €€€Ø €€€ð !&Ð ðBYXð YXð YXð YXð YX˜Ô)ñ YXô YXð YXð YXð YXr   