@@ -77,6 +77,8 @@ def __init__(self, con, name=None):
7777 if name == 'error' :
7878 raise OperationalError
7979 self .result = None
80+ self .inputsizes = []
81+ self .outputsizes = {}
8082 con .open_cursors += 1
8183 self .valid = True
8284
@@ -96,6 +98,10 @@ def execute(self, operation):
9698 elif operation .startswith ('set ' ):
9799 self .con .session .append (operation [4 :])
98100 self .result = None
101+ elif operation == 'get sizes' :
102+ self .result = (self .inputsizes , self .outputsizes )
103+ self .inputsizes = []
104+ self .outputsizes = {}
99105 else :
100106 raise ProgrammingError
101107
@@ -111,6 +117,16 @@ def callproc(self, procname):
111117 raise InternalError
112118 self .con .num_uses += 1
113119
120+ def setinputsizes (self , sizes ):
121+ if not self .valid :
122+ raise InternalError
123+ self .inputsizes = sizes
124+
125+ def setoutputsize (self , size , column = None ):
126+ if not self .valid :
127+ raise InternalError
128+ self .outputsizes [column ] = size
129+
114130 def __del__ (self ):
115131 if self .valid :
116132 self .close ()
@@ -125,14 +141,14 @@ def __del__(self):
125141
126142class TestSteadyDB (unittest .TestCase ):
127143
128- def test0_CheckVersion (self ):
144+ def test00_CheckVersion (self ):
129145 from DBUtils import __version__ as DBUtilsVersion
130146 self .assertEqual (DBUtilsVersion , __version__ )
131147 from DBUtils .SteadyDB import __version__ as SteadyDBVersion
132148 self .assertEqual (SteadyDBVersion , __version__ )
133149 self .assertEqual (SteadyDBConnection .version , __version__ )
134150
135- def test1_MockedDBConnection (self ):
151+ def test01_MockedDBConnection (self ):
136152 db = connect ('SteadyDBTestDB' ,
137153 user = 'SteadyDBTestUser' )
138154 self .assert_ (hasattr (db , 'database' ))
@@ -191,7 +207,7 @@ def test1_MockedDBConnection(self):
191207 self .assertRaises (InternalError , db .close )
192208 self .assertRaises (InternalError , db .cursor )
193209
194- def test2_BrokenDBConnection (self ):
210+ def test02_BrokenDBConnection (self ):
195211 self .assertRaises (TypeError , SteadyDBConnection , None )
196212 self .assertRaises (TypeError , SteadyDBCursor , None )
197213 db = SteadyDBconnect (dbapi , database = 'ok' )
@@ -209,7 +225,7 @@ def test2_BrokenDBConnection(self):
209225 cursor .close ()
210226 self .assertRaises (OperationalError , db .cursor , 'error' )
211227
212- def test3_SteadyDBClose (self ):
228+ def test03_SteadyDBClose (self ):
213229 for closeable in (False , True ):
214230 db = SteadyDBconnect (dbapi , closeable = closeable )
215231 self .assert_ (db ._con .valid )
@@ -222,7 +238,7 @@ def test3_SteadyDBClose(self):
222238 db ._close ()
223239 self .assert_ (not db ._con .valid )
224240
225- def test4_SteadyDBConnection (self ):
241+ def test04_SteadyDBConnection (self ):
226242 db = SteadyDBconnect (dbapi , 0 , None , None , 1 ,
227243 'SteadyDBTestDB' , user = 'SteadyDBTestUser' )
228244 self .assert_ (isinstance (db , SteadyDBConnection ))
@@ -338,7 +354,7 @@ def test4_SteadyDBConnection(self):
338354 self .assertEqual (db ._con .session ,
339355 ['doit' , 'commit' , 'dont' , 'rollback' ])
340356
341- def test5_SteadyDBConnectionCreatorFunction (self ):
357+ def test05_SteadyDBConnectionCreatorFunction (self ):
342358 db1 = SteadyDBconnect (dbapi , 0 , None , None , 1 ,
343359 'SteadyDBTestDB' , user = 'SteadyDBTestUser' )
344360 db2 = SteadyDBconnect (connect , 0 , None , None , 1 ,
@@ -351,7 +367,7 @@ def test5_SteadyDBConnectionCreatorFunction(self):
351367 db2 .close ()
352368 db1 .close ()
353369
354- def test6_SteadyDBConnectionMaxUsage (self ):
370+ def test06_SteadyDBConnectionMaxUsage (self ):
355371 db = SteadyDBconnect (dbapi , 10 )
356372 cursor = db .cursor ()
357373 for i in range (100 ):
@@ -397,7 +413,7 @@ def test6_SteadyDBConnectionMaxUsage(self):
397413 self .assertEqual (db ._con .num_uses , 1 )
398414 self .assertEqual (db ._con .num_queries , 1 )
399415
400- def test7_SteadyDBConnectionSetSession (self ):
416+ def test07_SteadyDBConnectionSetSession (self ):
401417 db = SteadyDBconnect (dbapi , 3 , ('set time zone' , 'set datestyle' ))
402418 self .assert_ (hasattr (db , '_usage' ))
403419 self .assertEqual (db ._usage , 0 )
@@ -455,7 +471,7 @@ def test7_SteadyDBConnectionSetSession(self):
455471 self .assertEqual (db ._con .num_queries , 1 )
456472 self .assertEqual (db ._con .session , ['time zone' , 'datestyle' ])
457473
458- def test8_SteadyDBConnectionFailures (self ):
474+ def test08_SteadyDBConnectionFailures (self ):
459475 db = SteadyDBconnect (dbapi )
460476 db .close ()
461477 db .cursor ()
@@ -470,7 +486,7 @@ def test8_SteadyDBConnectionFailures(self):
470486 db .close ()
471487 db .cursor ()
472488
473- def test9_SteadyDBConnectionFailureError (self ):
489+ def test09_SteadyDBConnectionFailureError (self ):
474490 db = SteadyDBconnect (dbapi )
475491 cursor = db .cursor ()
476492 db .close ()
@@ -479,6 +495,31 @@ def test9_SteadyDBConnectionFailureError(self):
479495 db .close ()
480496 self .assertRaises (ProgrammingError , cursor .execute , 'error' )
481497
498+ def test10_SteadyDBConnectionSetSizes (self ):
499+ db = SteadyDBconnect (dbapi )
500+ cursor = db .cursor ()
501+ cursor .execute ('get sizes' )
502+ result = cursor .fetchone ()
503+ self .assertEqual (result , ([], {}))
504+ cursor .setinputsizes ([7 , 42 , 6 ])
505+ cursor .setoutputsize (9 )
506+ cursor .setoutputsize (15 , 3 )
507+ cursor .setoutputsize (42 , 7 )
508+ cursor .execute ('get sizes' )
509+ result = cursor .fetchone ()
510+ self .assertEqual (result , ([7 , 42 , 6 ], {None : 9 , 3 : 15 , 7 : 42 }))
511+ cursor .execute ('get sizes' )
512+ result = cursor .fetchone ()
513+ self .assertEqual (result , ([], {}))
514+ cursor .setinputsizes ([6 , 42 , 7 ])
515+ cursor .setoutputsize (7 )
516+ cursor .setoutputsize (15 , 3 )
517+ cursor .setoutputsize (42 , 9 )
518+ db .close ()
519+ cursor .execute ('get sizes' )
520+ result = cursor .fetchone ()
521+ self .assertEqual (result , ([6 , 42 , 7 ], {None : 7 , 3 : 15 , 9 : 42 }))
522+
482523
483524if __name__ == '__main__' :
484525 unittest .main ()
0 commit comments