From be011a4f3d6c8fa0adee49bccd26c9d786bfa6b1 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Mon, 5 Dec 2022 10:48:42 +0530 Subject: [PATCH] Fixed an issue where Transaction IDs were not found in session in the Query Tool. #5453 --- .../browser/server_groups/servers/__init__.py | 4 ++- web/pgadmin/tools/sqleditor/__init__.py | 4 ++- .../js/components/QueryToolComponent.jsx | 32 +++++++++++++------ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 92d28a062..ff4b0c771 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -803,7 +803,9 @@ class ServerNode(PGChildNodeView): shared=server.shared, user_id=server.user_id, user=manager.user_info if connected else None, - server_type='pg' # default server type + server_type='pg', # default server type + user_name=server.username, + role=server.role, ) ) diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index 2813d10c7..6b7bbd4fc 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -321,6 +321,8 @@ def panel(trans_id): params['server_name'] = underscore_escape(s.name) if 'user' not in params: params['user'] = underscore_escape(s.username) + if 'role' not in params and s.role: + params['role'] = underscore_escape(s.role) params['layout'] = get_setting('SQLEditor/Layout') params['macros'] = get_user_macros() params['is_desktop_mode'] = current_app.PGADMIN_RUNTIME @@ -371,7 +373,7 @@ def initialize_sqleditor(trans_id, sgid, sid, did=None): kwargs = { 'user': data['user'] if 'user' in data else None, 'role': data['role'] if 'role' in data else None, - 'password': None + 'password': data['password'] if 'password' in data else None } is_error, errmsg, conn_id, version = _init_sqleditor( diff --git a/web/pgadmin/tools/sqleditor/static/js/components/QueryToolComponent.jsx b/web/pgadmin/tools/sqleditor/static/js/components/QueryToolComponent.jsx index 57beb2d85..92d64cccd 100644 --- a/web/pgadmin/tools/sqleditor/static/js/components/QueryToolComponent.jsx +++ b/web/pgadmin/tools/sqleditor/static/js/components/QueryToolComponent.jsx @@ -89,6 +89,7 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN current_file: null, obtaining_conn: true, connected: false, + connected_once: false, connection_status: null, connection_status_msg: '', params: { @@ -125,7 +126,7 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN /* Connection status poller */ let pollTime = qtState.preferences.sqleditor.connection_status_fetch_time > 0 - && !qtState.obtaining_conn && qtState.preferences?.sqleditor?.connection_status ? + && !qtState.obtaining_conn && qtState.connected_once && qtState.preferences?.sqleditor?.connection_status ? qtState.preferences.sqleditor.connection_status_fetch_time*1000 : -1; /* No need to poll when the query is executing. Query poller will the txn status */ if(qtState.connection_status === CONNECTION_STATUS.TRANSACTION_STATUS_ACTIVE && qtState.connected) { @@ -241,7 +242,7 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN } }; - const initializeQueryTool = ()=>{ + const initializeQueryTool = (password)=>{ let selectedConn = _.find(qtState.connection_list, (c)=>c.is_selected); let baseUrl = ''; if(qtState.params.is_query_tool) { @@ -262,18 +263,20 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN api.post(baseUrl, qtState.params.is_query_tool ? { user: qtState.params.user, role: qtState.params.role, + password: password } : JSON.stringify(qtState.params.sql_filter)) .then(()=>{ setQtState({ connected: true, + connected_once: true, obtaining_conn: false, }); if(!qtState.params.is_query_tool) { eventBus.current.fireEvent(QUERY_TOOL_EVENTS.TRIGGER_EXECUTION); } - }).catch((err)=>{ - if(err.response?.request?.responseText?.search('Ticket expired') !== -1) { + }).catch((error)=>{ + if(error.response?.request?.responseText?.search('Ticket expired') !== -1) { Kerberos.fetch_ticket() .then(()=>{ initializeQueryTool(); @@ -285,12 +288,23 @@ export default function QueryToolComponent({params, pgWindow, pgAdmin, selectedN }); eventBus.current.fireEvent(QUERY_TOOL_EVENTS.HANDLE_API_ERROR, kberr); }); + } else if(error?.response?.status == 428) { + connectServerModal(error.response?.data?.result, (passwordData)=>{ + initializeQueryTool(passwordData.password); + }, ()=>{ + setQtState({ + connected: false, + obtaining_conn: false, + connection_status_msg: gettext('Not Connected'), + }); + }); + } else { + setQtState({ + connected: false, + obtaining_conn: false, + }); + eventBus.current.fireEvent(QUERY_TOOL_EVENTS.HANDLE_API_ERROR, error); } - setQtState({ - connected: false, - obtaining_conn: false, - }); - eventBus.current.fireEvent(QUERY_TOOL_EVENTS.HANDLE_API_ERROR, err); }); };