mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fix an issue where queries longer than 1 minute get stuck - Container 7.1. #6317 Fix an issue where queries get stuck with auto-completion enabled. #6356 Fix an issue where queries can't complete execution. #6163
This commit is contained in:
@@ -39,3 +39,21 @@ def poll_for_query_results(tester, poll_url):
|
||||
return True, response_data
|
||||
elif status == 'NotConnected' or status == 'Cancel':
|
||||
return False, None
|
||||
|
||||
|
||||
def async_poll(tester, poll_url):
|
||||
while True:
|
||||
response = tester.get(poll_url)
|
||||
if response.data:
|
||||
response_data = json.loads(response.data.decode('utf-8'))
|
||||
|
||||
if response_data['success'] == 1 and 'data' in response_data\
|
||||
and (
|
||||
response_data['data']['status'] == 'NotInitialised' or
|
||||
response_data['data']['status'] == 'Busy'
|
||||
):
|
||||
pass
|
||||
else:
|
||||
return response
|
||||
else:
|
||||
return response
|
||||
|
||||
@@ -17,6 +17,8 @@ import json
|
||||
from pgadmin.utils import server_utils
|
||||
import secrets
|
||||
import config
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestDownloadCSV(BaseTestGenerator):
|
||||
@@ -120,10 +122,8 @@ class TestDownloadCSV(BaseTestGenerator):
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Query tool polling
|
||||
url = '/sqleditor/poll/{0}'.format(trans_id)
|
||||
response = self.tester.get(url)
|
||||
return response
|
||||
return async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(trans_id))
|
||||
|
||||
def runTest(self):
|
||||
|
||||
@@ -152,8 +152,8 @@ class TestDownloadCSV(BaseTestGenerator):
|
||||
# Disable the console logging from Flask logger
|
||||
self.app.logger.disabled = True
|
||||
if not self.is_valid and self.is_valid_tx:
|
||||
# The result will be null but status code will be 200
|
||||
self.assertEqual(res.status_code, 200)
|
||||
# The result will be null and status code will be 500
|
||||
self.assertEqual(res.status_code, 500)
|
||||
elif self.filename is None:
|
||||
if self.download_as_txt:
|
||||
with patch('pgadmin.tools.sqleditor.blueprint.'
|
||||
|
||||
@@ -8,13 +8,15 @@
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
import json
|
||||
import secrets
|
||||
from pgadmin.utils.route import BaseTestGenerator
|
||||
from pgadmin.browser.server_groups.servers.databases.tests import utils as \
|
||||
database_utils
|
||||
from regression.python_test_utils import test_utils
|
||||
import json
|
||||
from pgadmin.utils import server_utils
|
||||
import secrets
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestEncodingCharset(BaseTestGenerator):
|
||||
@@ -274,8 +276,9 @@ class TestEncodingCharset(BaseTestGenerator):
|
||||
response = self.tester.post(url, data=json.dumps({"sql": sql}),
|
||||
content_type='html/json')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
url = '/sqleditor/poll/{0}'.format(self.trans_id)
|
||||
response = self.tester.get(url)
|
||||
response = async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(
|
||||
self.trans_id))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response_data = json.loads(response.data.decode('utf-8'))
|
||||
self.assertEqual(response_data['data']['rows_fetched_to'], 1)
|
||||
|
||||
@@ -15,6 +15,8 @@ from pgadmin.browser.server_groups.servers.databases.tests import utils as \
|
||||
from pgadmin.utils.route import BaseTestGenerator
|
||||
from regression import parent_node_dict
|
||||
from regression.python_test_utils import test_utils as utils
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestExplainPlan(BaseTestGenerator):
|
||||
@@ -57,9 +59,10 @@ class TestExplainPlan(BaseTestGenerator):
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Query tool polling
|
||||
url = '/sqleditor/poll/{0}'.format(self.trans_id)
|
||||
response = self.tester.get(url)
|
||||
response = async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(
|
||||
self.trans_id))
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response_data = json.loads(response.data.decode('utf-8'))
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ from pgadmin.utils.route import BaseTestGenerator
|
||||
from regression import parent_node_dict
|
||||
from regression.python_test_utils import test_utils as utils
|
||||
import secrets
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestPollQueryTool(BaseTestGenerator):
|
||||
@@ -80,6 +82,7 @@ NOTICE: Hello, world!
|
||||
url = '/sqleditor/initialize/sqleditor/{0}/{1}/{2}/{3}'.format(
|
||||
self.trans_id, utils.SERVER_GROUP, self.server_id, self.db_id)
|
||||
response = self.tester.post(url)
|
||||
import time
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
cnt = 0
|
||||
@@ -92,14 +95,13 @@ NOTICE: Hello, world!
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Query tool polling
|
||||
url = '/sqleditor/poll/{0}'.format(self.trans_id)
|
||||
response = self.tester.get(url)
|
||||
response = async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(
|
||||
self.trans_id))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response_data = json.loads(response.data.decode('utf-8'))
|
||||
|
||||
if self.expected_message[cnt] is not None:
|
||||
# Check the returned messages
|
||||
self.assertIn(self.expected_message[cnt],
|
||||
response_data['data']['additional_messages'])
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ from pgadmin.utils import server_utils
|
||||
from pgadmin.browser.server_groups.servers.databases.tests import utils as \
|
||||
database_utils
|
||||
import config
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestSQLASCIIEncoding(BaseTestGenerator):
|
||||
@@ -105,8 +107,9 @@ class TestSQLASCIIEncoding(BaseTestGenerator):
|
||||
response = self.tester.post(url, data=json.dumps({"sql": sql}),
|
||||
content_type='html/json')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
url = '/sqleditor/poll/{0}'.format(self.trans_id)
|
||||
response = self.tester.get(url)
|
||||
response = async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(
|
||||
self.trans_id))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response_data = json.loads(response.data)
|
||||
self.assertEqual(response_data['data']['rows_fetched_to'], 1)
|
||||
|
||||
@@ -16,6 +16,8 @@ from pgadmin.browser.server_groups.servers.databases.tests import utils as \
|
||||
from regression import parent_node_dict
|
||||
from regression.python_test_utils import test_utils
|
||||
from unittest.mock import patch
|
||||
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
|
||||
import async_poll
|
||||
|
||||
|
||||
class TestViewData(BaseTestGenerator):
|
||||
@@ -116,9 +118,9 @@ class TestViewData(BaseTestGenerator):
|
||||
response = self.tester.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check the query result
|
||||
url = '/sqleditor/poll/{0}'.format(self.trans_id)
|
||||
response = self.tester.get(url)
|
||||
response = async_poll(tester=self.tester,
|
||||
poll_url='/sqleditor/poll/{0}'.format(
|
||||
self.trans_id))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response_data = json.loads(response.data.decode('utf-8'))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user