public inbox for [email protected]  
help / color / mirror / Atom feed
From: Rahul Shirsat <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [Patch][pgAdmin] RM4203 Rename Database by another user
Date: Wed, 26 May 2021 14:07:10 +0530
Message-ID: <CAKtn9dPZQWV8aT+mW5DRU3dZYwKyKyanGST7-juuEdV4Dhp1AA@mail.gmail.com> (raw)

Hi Hackers,

Please find the attached patch which resolves the issue of renaming the
database by another user.

A minor issue of navigation button alignment is also fixed in this patch.

-- 
*Rahul Shirsat*
Senior Software Engineer | EnterpriseDB Corporation.


Attachments:

  [application/octet-stream] RM4203.patch (9.6K, 3-RM4203.patch)
  download | inline diff:
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();
+      });
     });
   });
 });


view thread (6+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: [Patch][pgAdmin] RM4203 Rename Database by another user
  In-Reply-To: <CAKtn9dPZQWV8aT+mW5DRU3dZYwKyKyanGST7-juuEdV4Dhp1AA@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox