diff --git a/web/pgadmin/static/js/sqleditor/new_connection_dialog.js b/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
index 19bdf7d..49992e9 100644
--- a/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
+++ b/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
@@ -131,7 +131,7 @@ let NewConnectionDialog = {
self.showNewConnectionProgress[0]
).removeClass('d-none');
- self.newConnCollectionModel = newConnectionDialogModel(response, handler.url_params.sgid, handler.url_params.sid);
+ self.newConnCollectionModel = newConnectionDialogModel(response, handler.url_params.sgid, handler.url_params.sid, handler, self);
let fields = Backform.generateViewSchema(null, self.newConnCollectionModel, 'create', null, null, true);
let view = this.view = new Backform.Dialog({
@@ -240,6 +240,7 @@ let NewConnectionDialog = {
'role': newConnCollectionModel['role'],
'server_name': _.escape(response.server_name),
'database_name': _.escape(selected_database_name),
+ 'password': response.password,
'is_selected': false,
};
handler.gridView.on_change_connection(connection_details, self);
diff --git a/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js b/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
index 0bbda60..4bfa9b9 100644
--- a/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
+++ b/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
@@ -15,7 +15,7 @@ import Backform from 'pgadmin.backform';
import url_for from 'sources/url_for';
import alertify from 'pgadmin.alertifyjs';
-export default function newConnectionDialogModel(response, sgid, sid) {
+export default function newConnectionDialogModel(response, sgid, sid, handler, conn_self) {
let server_name = '';
let database_name = '';
@@ -158,12 +158,13 @@ export default function newConnectionDialogModel(response, sgid, sid) {
alertify.dialog('connectServer', function factory() {
return {
main: function(
- title, message, server_id, submit_password=true
+ title, message, server_id, submit_password=true, connect_server=null,
) {
this.set('title', title);
this.message = message;
this.server_id = server_id;
this.submit_password = submit_password;
+ this.connect_server = connect_server;
},
setup:function() {
return {
@@ -185,11 +186,11 @@ export default function newConnectionDialogModel(response, sgid, sid) {
this.setContent(this.message);
},
callback: function(closeEvent) {
-
+ var loadingDiv = $('#show_filter_progress');
if (closeEvent.button.text == gettext('OK')) {
if(this.submit_password) {
var _url = url_for('sqleditor.connect_server', {'sid': this.server_id});
- var loadingDiv = $('#show_filter_progress');
+
loadingDiv.removeClass('d-none');
$.ajax({
type: 'POST',
@@ -218,13 +219,26 @@ export default function newConnectionDialogModel(response, sgid, sid) {
alertify.connectServer().destroy();
alertify.connectServer('Connect to server', xhr.responseJSON.result, local_self.getValueFromDOM());
});
+ } else {
+ if(Object.keys(this.connect_server).length > 0) {
+ this.connect_server['password'] = $('#password').val();
+ this.connect_server['is_selected'] = false;
+ handler.gridView.on_change_connection(this.connect_server, conn_self, false);
+ loadingDiv = $('#fetching_data');
+ loadingDiv.addClass('d-none');
+ } else {
+ response.password = $('#password').val();
+ loadingDiv.addClass('d-none');
+ }
}
} else {
local_self.model.attributes.database = null;
local_self.model.attributes.user = null;
local_self.model.attributes.role = null;
Backform.Select2Control.prototype.onChange.apply(local_self, arguments);
+ loadingDiv.addClass('d-none');
alertify.connectServer().destroy();
+
}
closeEvent.close = true;
},
diff --git a/web/pgadmin/tools/datagrid/__init__.py b/web/pgadmin/tools/datagrid/__init__.py
index f7b836a..c87f3e2 100644
--- a/web/pgadmin/tools/datagrid/__init__.py
+++ b/web/pgadmin/tools/datagrid/__init__.py
@@ -466,7 +466,7 @@ def update_query_tool_connection(trans_id, sgid, sid, did):
new_trans_id = str(random.randint(1, 9999999))
kwargs = {
'user': data['user'],
- 'role': data['role'],
+ 'role': data['role'] if 'role' in data else None,
'password': data['password'] if 'password' in data else None
}
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
index 2bb9f38..90aa362 100644
--- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
@@ -2125,7 +2125,7 @@ define('tools.querytool', [
set_selected_option: function(selected_config) {
this.connection_list.forEach(option =>{
- if(option['server'] == selected_config['server'] && option['database'] == selected_config['database']) {
+ if(option['server'] == selected_config['server'] && option['database'] == selected_config['database'] && option['user'] == selected_config['user'] && option['role'] == selected_config['role']) {
selected_config['is_selected'] = true;
} else {
option['is_selected'] = false;
@@ -2133,95 +2133,114 @@ define('tools.querytool', [
});
},
- on_change_connection: function(connection_details, ref) {
+ on_change_connection: function(connection_details, ref, add_new_connection=true) {
if(!connection_details['is_selected']) {
var self = this;
- var loadingDiv = null;
- var msgDiv = null;
- if(ref){
- loadingDiv = $('#show_filter_progress');
- loadingDiv.removeClass('d-none');
- msgDiv = loadingDiv.find('.sql-editor-busy-text');
- msgDiv.text('Connecting to database...');
- } else{
- loadingDiv = $('#fetching_data');
- loadingDiv.removeClass('d-none');
- msgDiv = loadingDiv.find('.sql-editor-busy-text');
+ if(add_new_connection) {
+ alertify.confirm(gettext('Change connection'),
+ gettext('By changing the connection you will lose all your unsaved data for the current connection.
Do you want to continue?'),
+ function() {
+ self.change_connection(connection_details, ref, true);
+ },
+ function() {
+ var loadingDiv = $('#fetching_data');
+ loadingDiv.addClass('d-none');
+ alertify.newConnectionDialog().destroy();
+ return true;
+ }
+ ).set('labels', {
+ ok: gettext('Yes'),
+ cancel: gettext('No'),
+ });
+ } else {
+ self.change_connection(connection_details, ref, false);
}
+ }
+ },
- alertify.confirm(gettext('Change connection'),
- gettext('By changing the connection you will lose all your unsaved data for the current connection.
Do you want to continue?'),
- function() {
- self.set_selected_option(connection_details);
- $.ajax({
- url: url_for('datagrid.update_query_tool_connection', {
- 'trans_id': self.transId,
- 'sgid': connection_details['server_group'],
- 'sid': connection_details['server'],
- 'did': connection_details['database'],
- }),
- method: 'POST',
- contentType: 'application/json',
- data: JSON.stringify(connection_details),
- })
- .done(function(res) {
- if(res.success) {
- self.transId = res.data.tran_id;
- self.handler.transId = res.data.tran_id;
- self.handler.url_params = {
- 'did': connection_details['database'],
- 'is_query_tool': self.handler.url_params.is_query_tool,
- 'server_type': self.handler.url_params.server_type,
- 'sgid': connection_details['server_group'],
- 'sid': connection_details['server'],
- 'title': connection_details['title'],
- };
- self.set_editor_title(_.unescape(self.handler.url_params.title));
- self.handler.setTitle(_.unescape(self.handler.url_params.title));
- let success_msg = connection_details['server_name'] + '/' + connection_details['database_name'] + '- Database connected';
- alertify.success(success_msg);
- if(ref){
- let connection_data = {
- 'server_group': self.handler.url_params.sgid,
- 'server': connection_details['server'],
- 'database': connection_details['database'],
- 'user': connection_details['user'],
- 'title': connection_details['title'],
- 'role': connection_details['role'],
- 'is_allow_new_connection': true,
- 'database_name': connection_details['database_name'],
- 'server_name': connection_details['server_name'],
- 'is_selected': true,
- };
- self.connection_list.unshift(connection_data);
- self.render_connection(self.connection_list);
- loadingDiv.addClass('d-none');
- alertify.newConnectionDialog().destroy();
- ref.close();
- } else {
- loadingDiv.addClass('d-none');
- }
- }
- return true;
- })
- .fail(function(xhr) {
- if(xhr.status == 428) {
- alertify.connectServer('Connect to server', xhr.responseJSON.result, connection_details['server'], false);
- } else {
- alertify.error(xhr.responseJSON['errormsg']);
- }
- });
- },
- function() {
- loadingDiv.addClass('d-none');
- alertify.newConnectionDialog().destroy();
- return true;
+ change_connection: function(connection_details, ref, add_new_connection) {
+ var self = this;
+ var loadingDiv = null;
+ var msgDiv = null;
+ if(ref){
+ loadingDiv = $('#show_filter_progress');
+ loadingDiv.removeClass('d-none');
+ msgDiv = loadingDiv.find('.sql-editor-busy-text');
+ msgDiv.text('Connecting to database...');
+ } else{
+ loadingDiv = $('#fetching_data');
+ loadingDiv.removeClass('d-none');
+ msgDiv = loadingDiv.find('.sql-editor-busy-text');
+ }
+ self.set_selected_option(connection_details);
+ $.ajax({
+ url: url_for('datagrid.update_query_tool_connection', {
+ 'trans_id': self.transId,
+ 'sgid': connection_details['server_group'],
+ 'sid': connection_details['server'],
+ 'did': connection_details['database'],
+ }),
+ method: 'POST',
+ contentType: 'application/json',
+ data: JSON.stringify(connection_details),
+ })
+ .done(function(res) {
+ if(res.success) {
+ delete connection_details.password;
+ self.transId = res.data.tran_id;
+ self.handler.transId = res.data.tran_id;
+ self.handler.url_params = {
+ 'did': connection_details['database'],
+ 'is_query_tool': self.handler.url_params.is_query_tool,
+ 'server_type': self.handler.url_params.server_type,
+ 'sgid': connection_details['server_group'],
+ 'sid': connection_details['server'],
+ 'title': connection_details['title'],
+ };
+ self.set_editor_title(_.unescape(self.handler.url_params.title));
+ self.handler.setTitle(_.unescape(self.handler.url_params.title));
+ let success_msg = connection_details['server_name'] + '/' + connection_details['database_name'] + '- Database connected';
+ alertify.success(success_msg);
+ if(ref){
+ let connection_data = {
+ 'server_group': self.handler.url_params.sgid,
+ 'server': connection_details['server'],
+ 'database': connection_details['database'],
+ 'user': connection_details['user'],
+ 'title': connection_details['title'],
+ 'role': connection_details['role'],
+ 'is_allow_new_connection': true,
+ 'database_name': connection_details['database_name'],
+ 'server_name': connection_details['server_name'],
+ 'is_selected': true,
+ };
+ delete connection_data.password;
+ if(add_new_connection) {
+ self.connection_list.unshift(connection_data);
+ }
+
+ self.render_connection(self.connection_list);
+ loadingDiv.addClass('d-none');
+ alertify.newConnectionDialog().destroy();
+ alertify.connectServer().destroy();
+ } else {
+ loadingDiv.addClass('d-none');
+ alertify.connectServer().destroy();
+ }
+ }
+ return true;
+ })
+ .fail(function(xhr) {
+ if(xhr.status == 428) {
+ var connection_info = connection_details;
+ if(ref) {
+ connection_info = {};
+ }
+ alertify.connectServer('Connect to server', xhr.responseJSON.result, connection_details['server'], false, connection_info);
+ } else {
+ alertify.error(xhr.responseJSON['errormsg']);
}
- ).set('labels', {
- ok: gettext('Yes'),
- cancel: gettext('No'),
});
- }
},
});
@@ -2566,6 +2585,7 @@ define('tools.querytool', [
'server_name': _.unescape(server_data.data.label),
'is_selected': true,
};
+ delete connection_data.password;
self.gridView.connection_list.unshift(connection_data);
self.gridView.render_connection(self.gridView.connection_list);
};