diff --git a/web/pgadmin/browser/static/js/toolbar.js b/web/pgadmin/browser/static/js/toolbar.js index 09baaf228..f90ce53a7 100644 --- a/web/pgadmin/browser/static/js/toolbar.js +++ b/web/pgadmin/browser/static/js/toolbar.js @@ -18,9 +18,9 @@ let _browserPanel = null; // Default Tool Bar Buttons. let _defaultToolBarButtons = [ { - label: gettext('Query Tool'), - ariaLabel: gettext('Query Tool'), - btnClass: 'pg-font-icon icon-query_tool', + label: gettext('Search objects'), + ariaLabel: gettext('Search objects'), + btnClass: 'fa fa-search', text: '', toggled: false, toggleClass: '', @@ -28,9 +28,9 @@ let _defaultToolBarButtons = [ enabled: false, }, { - label: gettext('View Data'), - ariaLabel: gettext('View Data'), - btnClass: 'pg-font-icon sql-icon-lg icon-view_data', + label: gettext('Filtered Rows'), + ariaLabel: gettext('Filtered Rows'), + btnClass: 'pg-font-icon icon-row_filter', text: '', toggled: false, toggleClass: '', @@ -38,9 +38,9 @@ let _defaultToolBarButtons = [ enabled: false, }, { - label: gettext('Filtered Rows'), - ariaLabel: gettext('Filtered Rows'), - btnClass: 'pg-font-icon icon-row_filter', + label: gettext('View Data'), + ariaLabel: gettext('View Data'), + btnClass: 'pg-font-icon sql-icon-lg icon-view_data', text: '', toggled: false, toggleClass: '', @@ -48,9 +48,9 @@ let _defaultToolBarButtons = [ enabled: false, }, { - label: gettext('Search objects'), - ariaLabel: gettext('Search objects'), - btnClass: 'fa fa-search', + label: gettext('Query Tool'), + ariaLabel: gettext('Query Tool'), + btnClass: 'pg-font-icon icon-query_tool', text: '', toggled: false, toggleClass: '', diff --git a/web/pgadmin/static/js/sqleditor/call_render_after_poll.js b/web/pgadmin/static/js/sqleditor/call_render_after_poll.js index 215e8492a..884966b1c 100644 --- a/web/pgadmin/static/js/sqleditor/call_render_after_poll.js +++ b/web/pgadmin/static/js/sqleditor/call_render_after_poll.js @@ -50,6 +50,8 @@ export function callRenderAfterPoll(sqlEditor, alertify, res) { sqlEditor.disable_tool_buttons(false); } + sqlEditor.check_db_name_change(res); + sqlEditor.setIsQueryRunning(false); sqlEditor.trigger('pgadmin-sqleditor:loading-icon:hide'); } diff --git a/web/pgadmin/static/scss/_webcabin.pgadmin.scss b/web/pgadmin/static/scss/_webcabin.pgadmin.scss index 444c7ff7e..ba15edc15 100644 --- a/web/pgadmin/static/scss/_webcabin.pgadmin.scss +++ b/web/pgadmin/static/scss/_webcabin.pgadmin.scss @@ -64,7 +64,7 @@ display: flex; } -.wcFloating .wcFrameButtonBar { +.wcFrameButtonBar { flex-direction: row-reverse; } diff --git a/web/pgadmin/tools/datagrid/static/js/show_data.js b/web/pgadmin/tools/datagrid/static/js/show_data.js index ef6cb93d5..69ff13d7f 100644 --- a/web/pgadmin/tools/datagrid/static/js/show_data.js +++ b/web/pgadmin/tools/datagrid/static/js/show_data.js @@ -13,6 +13,7 @@ import {getDatabaseLabel, generateTitle} from './datagrid_panel_title'; import CodeMirror from 'bundled_codemirror'; import * as SqlEditorUtils from 'sources/sqleditor_utils'; import $ from 'jquery'; +import _ from 'underscore'; export function showDataGrid( datagrid, @@ -289,7 +290,7 @@ function hasSchemaOrCatalogOrViewInformation(parentData) { parentData.catalog !== undefined; } -export function generateDatagridTitle(pgBrowser, aciTreeIdentifier, custom_title=null) { +export function generateDatagridTitle(pgBrowser, aciTreeIdentifier, custom_title=null, backend_entity=null) { //const baseTitle = getPanelTitle(pgBrowser, aciTreeIdentifier); var preferences = pgBrowser.get_preferences_for_module('browser'); const parentData = getTreeNodeHierarchyFromIdentifier.call( @@ -298,7 +299,7 @@ export function generateDatagridTitle(pgBrowser, aciTreeIdentifier, custom_title ); const namespaceName = retrieveNameSpaceName(parentData); - const db_label = getDatabaseLabel(parentData); + const db_label = !_.isUndefined(backend_entity) && backend_entity != null && backend_entity.hasOwnProperty('actual_db_name') ? backend_entity['actual_db_name'] : getDatabaseLabel(parentData); const node = pgBrowser.treeMenu.findNodeByDomElement(aciTreeIdentifier); var dtg_title_placeholder = ''; diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index de3864be5..a19ffe522 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -520,6 +520,7 @@ def poll(trans_id): 'has_oids': has_oids, 'oids': oids, 'transaction_status': transaction_status, + 'actual_db_name': conn.db, }, encoding=conn.python_encoding ) diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js index c10e6517a..07784af01 100644 --- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js +++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js @@ -13,6 +13,7 @@ __webpack_public_path__ = window.resourceBasePath; /* eslint-enable */ import {launchDataGrid} from 'tools/datagrid/static/js/show_query_tool'; +import {generateDatagridTitle} from 'tools/datagrid/static/js/show_data'; define('tools.querytool', [ 'sources/gettext', 'sources/url_for', 'jquery', 'jquery.ui', @@ -5087,6 +5088,72 @@ define('tools.querytool', [ update_notifications: function (notifications) { queryToolNotifications.updateNotifications(notifications); }, + + check_db_name_change: function(data) { + + var self = this; + + var selected_item = pgWindow.default.pgAdmin.Browser.treeMenu.selected(); + var tree_data = pgWindow.default.pgAdmin.Browser.treeMenu.translateTreeNodeIdFromACITree(selected_item); + var server_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,2)); + var database_data = pgWindow.default.pgAdmin.Browser.treeMenu.findNode(tree_data.slice(0,4)); + + var db_name = database_data.data.label; + + self.gridView.connection_list.forEach(option =>{ + if(data.actual_db_name == option['database_name']) { + db_name = option['database_name']; + return false; + } + }); + + if(!_.isEqual(db_name, data.actual_db_name)) { + var message = `Please note that the database you are working on has been moved or renamed to ${data.actual_db_name}. Refresh databases in browser panel or click OK to continue..`; + + alertify.alert() + .setting({ + 'title': gettext('Database moved/renamed..'), + 'label':gettext('OK'), + 'message': gettext(message), + 'onok': function(){ + //Set the original db name as soon as user clicks ok button + + var title = self.url_params.title; + + if(self.is_query_tool) {// for query tool + + var qt_title_placeholder = self.gridView.browser_preferences['qt_tab_title_placeholder']; + var title_data = { + 'database': data.actual_db_name, + 'username': server_data.data.user.name, + 'server': server_data.data.label, + 'type': 'query_tool' + }; + title = panelTitleFunc.generateTitle(qt_title_placeholder, title_data); + } + else { // for datagrid + title = generateDatagridTitle(pgWindow.default.pgAdmin.Browser, selected_item, null, data); + } + + self.gridView.set_editor_title(_.unescape(title)); + self.gridView.handler.setTitle(_.unescape(title)); + + self.url_params.title = title; // fixing the title when user refreshes the browser panel + + self.gridView.connection_list.forEach(option =>{ + if(database_data.data._id == option['database']) { + option.database_name = data.actual_db_name; + option.title = title; + if('is_selected' in option && option['is_selected']) { + self.gridView.$el.find('ul#connections-list li.selected-connection > a').text(title); + } + return true; + } + }); + }, + }).show(); + } + }, }); pgAdmin.SqlEditor = { diff --git a/web/regression/javascript/sqleditor/call_render_after_poll_spec.js b/web/regression/javascript/sqleditor/call_render_after_poll_spec.js index 66e5490b6..ab051bef7 100644 --- a/web/regression/javascript/sqleditor/call_render_after_poll_spec.js +++ b/web/regression/javascript/sqleditor/call_render_after_poll_spec.js @@ -25,6 +25,7 @@ describe('#callRenderAfterPoll', () => { disable_transaction_buttons: jasmine.createSpy('SQLEditor.disable_transaction_buttons'), reset_data_store: jasmine.createSpy('SQLEditor.reset_data_store'), enable_disable_download_btn: jasmine.createSpy('SQLEditor.enable_disable_download_btn'), + check_db_name_change: jasmine.createSpy('SQLEditor.check_db_name_change'), query_start_time: new Date(), }; alertify = jasmine.createSpyObj('alertify', ['success']); @@ -229,6 +230,12 @@ describe('#callRenderAfterPoll', () => { expect(sqlEditorSpy.trigger).toHaveBeenCalledWith('pgadmin-sqleditor:loading-icon:hide'); }); + + it('check whether database has been moved/renamed', () => { + callRenderAfterPoll(sqlEditorSpy, alertify, queryResult); + + expect(sqlEditorSpy.check_db_name_change).toHaveBeenCalled(); + }); }); }); });