
    $
iE                     \    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 compiliance 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     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\adodbapi/test/dbapi20.pyexecuteDDL1zDatabaseAPI20Test.executeDDL1|       ty!!!!!    c                 :    |                     | j                   d S r   )r   ddl2r   s     r   executeDDL2zDatabaseAPI20Test.executeDDL2   r   r   c                     dS )zself.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)zself.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jjll J
3  CC(((

;,    	 				 	 	 	DD	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OAA 	G 	G 	GII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     mmoo		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Xu----- 	8 	8 	8II6777777	8s   "& 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    	<;3LOOLL899999 	< 	< 	<II:;;;;;;	<   #' 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OOQQ      	: 	: 	:II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;#4i@@AAA
4;#=t{?PQQRRR
4;#<dk>OPPQQQ
4;#?ARSSTTT
4;#=t{?PQQRRR
4;#<dk>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    mmooks{2333	SY.///*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    mmoo	JJLLLIIKKKKKCIIKKKK   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    mmoo 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    mmoo	**,,CIIKKKKKCIIKKKKrV   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   mmoo	 ::<<D::<<DT"""LL@DDUV   LL3d6GGHHHMMOOESZZ+++Sq]]A...U1Xa[*;<<<IIKKKKKCIIKKKKs   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   mmoo'	**,,CS!!!B   KK2T5FFGGGCO$$a)X   COA&''C  
 "1%++--B  
 "1%"J/!$Q'(   S!!!1   IIKKKKKCIIKKKKs   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   mmoo	**,,CS!!!OO'  
 KK@DDUV   OO'@  
 KK2T5FFGGGOO'?  
 S!!!'   IIKKKKKCIIKKKKs   C+D D-c                    |                                  }	 |                                }| j        rt          |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   mmoo	**,,C V73
#;#; VLL(;;  Q+++  1u---LLNN  Q,MNNN  QqTA/UVVV  1a%1TUUUIIKKKKKCIIKKKKs   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    mmoo	**,,CIIKKKKCIIKKKK 	$++T-=sCCC 	$++SZ888 ) 	dk/;;;;;MMP    s	   ? Ac                     |                                  }	 |                                }|                     |           |                                 d S # |                                 w xY wr   )r   r   _paraminsertr"   r\   s      r   test_executezDatabaseAPI20Test.test_execute  sX    mmoo	**,,Cc"""IIKKKKKCIIKKKKs   )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,,KKU#$   
 [#y00KKV#$   
 [#w..KKY#$$   
 [#x//KKW#$   
 [#z11KK]#$$    II*+++/0007$:KKLLLllnnS1&MNNNQCF1I&

!HT	
 	
 	

 	!HT	
 	
 	

 2F1ID #Aq	D D8?D D	
 	
 	
 	F1I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   mmoo-	**,,CS!!!"K0Ej)FH+=>E{%004t7HH%    '94458II5    '72284;LLe    '83369JJE    ':55<@QR   
 		.///OO'%'*|4  
 KK2T5FFGGG,,..CC!Q   VAYAq	*EJJLLLa($CeAh$N   U1Xz3MNNNIIKKKKKCIIKKKKs   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   mmoo*	**,,C dk/>>> S!!!dk/>>>KK2T5FFGGGQ  
 OOCLG3444 KK@DDUV   dk/>>>KK2T5FFGGGAAO   !')S   N  
 OOCLG3444IIKKKKKCIIKKKKs   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=     
 
 
 483D3D3Daaa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>      '''QAaD'''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   mmooX	**,,C dk/BBBS!!!~~'' ! !C    KK2T5FFGGGAA/   CMa  AAP   a  AAP   a  AA(   OOCLG3444 CMKK2T5FFGGGAAM   ASVVQ'''ASVVQ'''OOCLG3444CMKK2T5FFGGG==??DOOCLG3444SYY***SYY***''$'''DIIKKK 1a[[    GLOB    ==??DD		E   OOCLG3444S!!!KK4t7HHIIIAA*   OOCLG3444 IIKKKKKCIIKKKKs   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   mmoo2	**,,C dk/>>>S!!!~~'' ! !C     dk/>>>KK2T5FFGGG<<>>DOOCLRT\1B1B,CCDDDD		DL!!;  
 ('$'''DIIKKK1c$,//00    GT\!_.X    <<>>DD		>   OOCLRT\1B1B,CCDDDS!!!KK4t7HHIII<<>>DOOCLG3444D		1   IIKKKKKCIIKKKKs   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   mmoo	**,,CS!!!~~'' ! !C    KK2T5FFGGGLLNNE]]1%%FLLNNE\\^^FOOCLG3444FQ M   FQ L   !H:DKK1vay|4555KKa!!!KK1vay|4555IIKKK1c$,//00    GT\!_.T   
 IIKKKKKCIIKKKKs   H
H7 7Ic                      t          d          )zShould 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    mmoo	**,,COO[))+M   IIKKKKKCIIKKKKs   8A$ $A:c                    |                                  }	 |                                }|                    d           |                     |           |                                 d S # |                                 w xY w)N)   )r   r   setinputsizesr   r"   r\   s      r   test_setinputsizesz$DatabaseAPI20Test.test_setinputsizes  sl    mmoo	**,,Ce$$$c"""IIKKKKKCIIKKKKs   >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    mmoo	**,,Cd###dA&&&c"""IIKKKKKCIIKKKKs   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    mmoo
	**,,CS!!!KK;d>OOPPPKK2T5FFGGGASVVQ'''S1YY***QqT!Wd,MNNNIIKKKKKCIIKKKKs   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?    [dB++[&&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68W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    DK**,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    DK,,.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57V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|CDILXD </E"\1E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   
 
 $BrE*6
   !& BYX YX YX YX YX) YX YX YX YX YXr   