Skip to content

Commit 62747de

Browse files
committed
Use fetchall to retrieve database rows
Not all database interfaces (eg. JayDeBeApi) support the cursor iteration extension to PEP-249. Since we're going to retrieve all the rows anyway, this doesn't make much difference, other than having to retrieve them all up-front before starting any processing, but that is likely to have negligible impact. Fixes #71
1 parent 048e5ef commit 62747de

File tree

4 files changed

+12
-10
lines changed

4 files changed

+12
-10
lines changed

src/itoolkit/transport/database.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ def _call(self, tk):
7676
# cursor type, which we ascertained in the constructor
7777
getattr(cursor, self.func)(self.query, parms)
7878

79-
return "".join(row[0] for row in cursor).rstrip('\0')
79+
# Use fetchall since not all adapters support the PEP-249 cursor
80+
# iteration extension eg. JayDeBeApi
81+
return "".join(row[0] for row in cursor.fetchall()).rstrip('\0')
8082

8183
def _close(self):
8284
self.conn.close()

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def mock_database(use_callproc):
4444
conn = Mock()
4545

4646
cursor = MagicMock()
47-
cursor.__iter__.return_value = [(XML,)]
47+
cursor.fetchall.return_value = [(XML,)]
4848

4949
if use_callproc:
5050
cursor.callproc.return_value = True

tests/test_unit_idb2call.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def test_idb2call_transport_minimal_callproc(database_callproc):
2222
cursor = database_callproc.cursor()
2323

2424
cursor.callproc.assert_called_once()
25-
cursor.__iter__.assert_called_once()
25+
cursor.fetchall.assert_called_once()
2626

2727

2828
def test_idb2call_transport_minimal_execute(database_execute):
@@ -35,7 +35,7 @@ def test_idb2call_transport_minimal_execute(database_execute):
3535
cursor = database_execute.cursor()
3636

3737
cursor.execute.assert_called_once()
38-
cursor.__iter__.assert_called_once()
38+
cursor.fetchall.assert_called_once()
3939

4040

4141
def test_idb2call_with_ibm_db(mocker, database_callproc):
@@ -61,7 +61,7 @@ class MockConn(object):
6161
cursor = database_callproc.cursor()
6262

6363
cursor.callproc.assert_called_once()
64-
cursor.__iter__.assert_called_once()
64+
cursor.fetchall.assert_called_once()
6565

6666

6767
def test_idb2call_with_uid_pwd(mocker, database_callproc):
@@ -90,4 +90,4 @@ class MockConn(object):
9090
cursor = database_callproc.cursor()
9191

9292
cursor.callproc.assert_called_once()
93-
cursor.__iter__.assert_called_once()
93+
cursor.fetchall.assert_called_once()

tests/test_unit_transport_database.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def test_database_transport_callproc(database_callproc):
1313
cursor = database_callproc.cursor()
1414

1515
cursor.callproc.assert_called_once()
16-
cursor.__iter__.assert_called_once()
16+
cursor.fetchall.assert_called_once()
1717

1818

1919
def test_database_transport_execute(database_execute):
@@ -26,7 +26,7 @@ def test_database_transport_execute(database_execute):
2626
cursor = database_execute.cursor()
2727

2828
cursor.execute.assert_called_once()
29-
cursor.__iter__.assert_called_once()
29+
cursor.fetchall.assert_called_once()
3030

3131

3232
def test_database_transport_execute_schema(database_execute):
@@ -40,7 +40,7 @@ def test_database_transport_execute_schema(database_execute):
4040
cursor = database_execute.cursor()
4141

4242
cursor.execute.assert_called_once()
43-
cursor.__iter__.assert_called_once()
43+
cursor.fetchall.assert_called_once()
4444

4545
assert len(cursor.execute.call_args[0]) > 0
4646
assert schema in cursor.execute.call_args[0][0]
@@ -57,7 +57,7 @@ def test_database_transport_callproc_schema(database_execute):
5757
cursor = database_execute.cursor()
5858

5959
cursor.execute.assert_called_once()
60-
cursor.__iter__.assert_called_once()
60+
cursor.fetchall.assert_called_once()
6161

6262
assert len(cursor.execute.call_args[0]) > 0
6363
assert schema in cursor.execute.call_args[0][0]

0 commit comments

Comments
 (0)