Skip to content

Commit 7f0d6bc

Browse files
author
vshepard
committed
Fix no results to fetch error
1 parent 0edc937 commit 7f0d6bc

File tree

3 files changed

+50
-31
lines changed

3 files changed

+50
-31
lines changed

testgres/connection.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,24 @@ def rollback(self):
102102
return self
103103

104104
def execute(self, query, *args):
105-
self.cursor.execute(query, args)
106105
try:
107-
res = self.cursor.fetchall()
108-
# pg8000 might return tuples
109-
if isinstance(res, tuple):
110-
res = [tuple(t) for t in res]
111-
112-
return res
113-
except Exception:
106+
self.cursor.execute(query, args)
107+
# fetchall works only with select
108+
if any(query.strip().lower().startswith(cmd) for cmd in ["select", "show", "fetch"]):
109+
res = self.cursor.fetchall()
110+
# pg8000 might return tuples
111+
if isinstance(res, tuple):
112+
res = [tuple(t) for t in res]
113+
return res
114+
else:
115+
# For INSERT/UPDATE/DELETE return number of rows
116+
return self.cursor.rowcount
117+
118+
except pglib.errors.DuplicateTable as e:
119+
print("Error executing query: {}".format(e))
120+
return None
121+
except QueryException as e:
122+
print("Error executing query: {}".format(e))
114123
return None
115124

116125
def close(self):

testgres/node.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,28 +1155,38 @@ def poll_query_until(self,
11551155
assert sleep_time > 0
11561156
attempts = 0
11571157
while max_attempts == 0 or attempts < max_attempts:
1158-
print(f"Pooling {attempts}")
1158+
print(f"Polling {attempts}")
11591159
try:
1160-
res = self.execute(dbname=dbname,
1161-
query=query,
1162-
username=username,
1163-
commit=commit)
1164-
1165-
if expected is None and res is None:
1166-
return # done
1167-
1168-
if res is None:
1169-
raise QueryException('Query returned None', query)
1170-
1171-
# result set is not empty
1172-
if len(res):
1173-
if len(res[0]) == 0:
1174-
raise QueryException('Query returned 0 columns', query)
1175-
if res[0][0] == expected:
1176-
return # done
1177-
# empty result set is considered as None
1178-
elif expected is None:
1179-
return # done
1160+
res = self.execute(dbname=dbname, query=query, username=username, commit=commit)
1161+
1162+
# Parse res for non-SELECT
1163+
if not any(query.strip().lower().startswith(cmd) for cmd in ["select", "show", "fetch"]):
1164+
if res == expected:
1165+
return # done
1166+
elif res is None:
1167+
raise QueryException('Query returned None', query)
1168+
elif res > -1 and expected is True:
1169+
return # done, assuming non-select query was successful
1170+
elif res == -1 and expected is False:
1171+
return # done, assuming non-select query affected no rows
1172+
1173+
# Parse res for SELECT
1174+
else:
1175+
if res == expected:
1176+
return # done
1177+
1178+
if res is None:
1179+
raise QueryException('Query returned None', query)
1180+
1181+
# result set is not empty
1182+
if len(res):
1183+
if len(res[0]) == 0:
1184+
raise QueryException('Query returned 0 columns', query)
1185+
if res[0][0] == expected:
1186+
return # done
1187+
# empty result set is considered as None
1188+
elif expected is None:
1189+
return # done
11801190

11811191
except tuple(suppress or []):
11821192
pass # we're suppressing them

testgres/plugins/pg_probackup2/setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from distutils.core import setup
55

66
setup(
7-
version='0.0.1',
7+
version='0.0.2',
88
name='testgres_pg_probackup2',
99
packages=['pg_probackup2', 'pg_probackup2.storage'],
1010
description='Plugin for testgres that manages pg_probackup2',
@@ -14,5 +14,5 @@
1414
author='Postgres Professional',
1515
author_email='testgres@postgrespro.ru',
1616
keywords=['pg_probackup', 'testing', 'testgres'],
17-
install_requires=['testgres>=1.9.2']
17+
install_requires=['testgres>=1.10.0']
1818
)

0 commit comments

Comments
 (0)