public inbox for [email protected]
help / color / mirror / Atom feedFrom: 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