Skip to content

Commit 323d38e

Browse files
committed
Fixed problem with setoutputsize, added unit test.
1 parent 3c109ef commit 323d38e

2 files changed

Lines changed: 63 additions & 25 deletions

File tree

DBUtils/SteadyDB.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -396,31 +396,28 @@ def __init__(self, con, *args, **kwargs):
396396

397397
def setinputsizes(self, sizes):
398398
"""Store input sizes in case cursor needs to be reopened."""
399-
self._inputsize = sizes
399+
self._inputsizes = sizes
400400

401401
def setoutputsize(self, size, column=None):
402402
"""Store output sizes in case cursor needs to be reopened."""
403-
if self._outputsize is None or column is None:
404-
self._outputsize = [(column, size)]
405-
else:
406-
self._outputsize.append(column, size)
403+
self._outputsizes[column] = size
407404

408405
def _clearsizes(self):
409-
"""Clear stored input sizes."""
410-
self._inputsize = self._outputsize = None
406+
"""Clear stored input and output sizes."""
407+
self._inputsizes = []
408+
self._outputsizes = {}
411409

412410
def _setsizes(self, cursor=None):
413411
"""Set stored input and output sizes for cursor execution."""
414412
if cursor is None:
415413
cursor = self._cursor
416-
if self._inputsize is not None:
417-
cursor.setinputsizes(self._inputsize)
418-
if self._outputsize is not None:
419-
for column, size in self._outputsize:
420-
if column is None:
421-
cursor.setoutputsize(size)
422-
else:
423-
cursor.setoutputsize(size, column)
414+
if self._inputsizes:
415+
cursor.setinputsizes(self._inputsizes)
416+
for column, size in self._outputsizes.iteritems():
417+
if column is None:
418+
cursor.setoutputsize(size)
419+
else:
420+
cursor.setoutputsize(size, column)
424421

425422
def close(self):
426423
"""Close the tough cursor.

DBUtils/Tests/TestSteadyDB.py

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

126142
class 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

483524
if __name__ == '__main__':
484525
unittest.main()

0 commit comments

Comments
 (0)