diff --git a/docs/en_US/images/preferences_sql_results_grid.png b/docs/en_US/images/preferences_sql_results_grid.png index 938809011..d04620274 100644 Binary files a/docs/en_US/images/preferences_sql_results_grid.png and b/docs/en_US/images/preferences_sql_results_grid.png differ diff --git a/docs/en_US/preferences.rst b/docs/en_US/preferences.rst index 45ce5c2dc..91a5ae9d1 100644 --- a/docs/en_US/preferences.rst +++ b/docs/en_US/preferences.rst @@ -440,6 +440,9 @@ preferences for copied data. * Specify the maximum width of the column in pixels when 'Columns sized by' is set to *Column data*. If 'Columns sized by' is set to *Column name* then this setting won't have any effect. +* Specify the number of records to fetch in one batch in query tool when + query result set is large. Changing this value will override + ON_DEMAND_ROW_COUNT setting from config file. * Use the *Result copy field separator* drop-down listbox to select the field separator for copied data. * Use the *Result copy quote character* drop-down listbox to select the quote diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index 9fd487e70..fbe3ef42b 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -16,8 +16,7 @@ from urllib.parse import unquote from threading import Lock import json -from config import PG_DEFAULT_DRIVER, ON_DEMAND_RECORD_COUNT,\ - ALLOW_SAVE_PASSWORD, SHARED_STORAGE +from config import PG_DEFAULT_DRIVER, ALLOW_SAVE_PASSWORD, SHARED_STORAGE from werkzeug.user_agent import UserAgent from flask import Response, url_for, render_template, session, current_app from flask import request @@ -874,6 +873,8 @@ def poll(trans_id): additional_messages = None notifies = None data_obj = {} + on_demand_record_count = Preferences.module(MODULE_NAME).\ + preference('on_demand_record_count').get() # Check the transaction and connection status status, error_msg, conn, trans_obj, session_obj = \ @@ -910,7 +911,7 @@ def poll(trans_id): trans_obj.auto_rollback: conn.execute_void("ROLLBACK;") - st, result = conn.async_fetchmany_2darray(ON_DEMAND_RECORD_COUNT) + st, result = conn.async_fetchmany_2darray(on_demand_record_count) # There may be additional messages even if result is present # eg: Function can provide result as well as RAISE messages @@ -986,7 +987,7 @@ def poll(trans_id): # means nothing to fetch if result and rows_affected > -1: res_len = len(result) - if res_len == ON_DEMAND_RECORD_COUNT: + if res_len == on_demand_record_count: has_more_rows = True if res_len > 0: @@ -1064,7 +1065,9 @@ def fetch(trans_id, fetch_all=None): has_more_rows = False rows_fetched_from = 0 rows_fetched_to = 0 - fetch_row_cnt = -1 if fetch_all == 1 else ON_DEMAND_RECORD_COUNT + on_demand_record_count = Preferences.module(MODULE_NAME).preference( + 'on_demand_record_count').get() + fetch_row_cnt = -1 if fetch_all == 1 else on_demand_record_count # Check the transaction and connection status status, error_msg, conn, trans_obj, session_obj = \ @@ -1082,7 +1085,7 @@ def fetch(trans_id, fetch_all=None): else: status = 'Success' res_len = len(result) if result else 0 - if fetch_row_cnt != -1 and res_len == ON_DEMAND_RECORD_COUNT: + if fetch_row_cnt != -1 and res_len == on_demand_record_count: has_more_rows = True if res_len: diff --git a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py index 007bbc4d8..a85037bfa 100644 --- a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py @@ -15,6 +15,7 @@ from pgadmin.utils.constants import PREF_LABEL_DISPLAY,\ PREF_LABEL_SQL_FORMATTING, PREF_LABEL_GRAPH_VISUALISER from pgadmin.utils import SHORTCUT_FIELDS as shortcut_fields, \ ACCESSKEY_FIELDS as accesskey_fields +from config import ON_DEMAND_RECORD_COUNT def register_query_tool_preferences(self): @@ -292,6 +293,17 @@ def register_query_tool_preferences(self): ), ) + self.on_demand_record_count = self.preference.register( + 'Results_grid', 'on_demand_record_count', + gettext("On demand record count"), 'integer', ON_DEMAND_RECORD_COUNT, + min_val=100, + category_label=PREF_LABEL_RESULTS_GRID, + help_str=gettext('Specify the number of records to fetch in one batch ' + 'in query tool when query result set is large. ' + 'Changing this value will override ' + 'ON_DEMAND_ROW_COUNT setting from config file.') + ) + self.sql_font_size = self.preference.register( 'Editor', 'sql_font_size', gettext("Font size"), 'numeric', '1', diff --git a/web/regression/runtests.py b/web/regression/runtests.py index f022190ef..ebfe25908 100644 --- a/web/regression/runtests.py +++ b/web/regression/runtests.py @@ -569,10 +569,11 @@ def execute_test(test_module_list_passed, server_passed, driver_passed, print(str(exc)) print("Exception in {0} {1}".format( threading.current_thread().ident, - threading.current_thread().getName())) + threading.current_thread().name)) # Mark failure as true - global failure - failure = True + if 'is being accessed by other users' not in str(exec): + global failure + failure = True finally: # Delete web-driver instance thread_name = "parallel_tests" + server_passed['name']