public inbox for [email protected]
help / color / mirror / Atom feedFrom: Murtuza Zabuawala <[email protected]>
To: Dave Page <[email protected]>
Cc: Ashesh Vashi <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Subject: Re: PATCH: To fix the issue where message panel was showing incomplete info (pgAdmin4)
Date: Tue, 16 Aug 2016 20:26:21 +0530
Message-ID: <CAKKotZQW3EwwSasyeE2uZd_f2_2j9gSdNgL+Tp+wjO=c9PwEPQ@mail.gmail.com> (raw)
In-Reply-To: <CA+OCxoyDihtqywWAq9FHYSyDtWNyxLB1WZG9s88_1LrY6u-eow@mail.gmail.com>
References: <CAKKotZTJY1zV+Edi_oJ3611WJVq4Qi4RXi00Ddzkp6iWJardMA@mail.gmail.com>
<CA+OCxowMGSBwuAVj96y4eQ7FSFOnv943bkJZVzZ=SN8Rb3St3g@mail.gmail.com>
<CAG7mmowVhXbusQ1ZO879GxNvXR0CoGETM27mgpiUebZzLzmMMQ@mail.gmail.com>
<CA+OCxoy8FKgAT2RVw-yctkJcURmLKpk2bBcGqbneP+=F87BtNw@mail.gmail.com>
<CAG7mmoykBtHBnzHhDCbJ2342MpggKx95Ng21Evy90FmcEynjVQ@mail.gmail.com>
<CA+OCxoxU_n7oCMDv_gcAWfXpVYU_m--JjZbYYC1cuFYJPhW7wQ@mail.gmail.com>
<CAG7mmoy23TqokXu8ppWXams2LHyyoDOze8CH1t+Xk2CuTUQwuA@mail.gmail.com>
<CA+OCxoym1Afqb6P1fFBdbpqy1H2GnPUWZTdkKGG4fMh+0ncqwA@mail.gmail.com>
<CAKKotZQtpV2Ya3=eOq8wanvH922bW4ypOM8aXJDjUAtB9wFdOQ@mail.gmail.com>
<CA+OCxoyDihtqywWAq9FHYSyDtWNyxLB1WZG9s88_1LrY6u-eow@mail.gmail.com>
List-Unsubscribe: <mailto:[email protected]?body=unsub%20pgadmin-hackers>
Hi Dave,
PFA updated patch.
--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Tue, Aug 16, 2016 at 8:16 PM, Dave Page <[email protected]> wrote:
> Hi
>
> On Tue, Aug 16, 2016 at 7:10 AM, Murtuza Zabuawala
> <[email protected]> wrote:
> > Hi Dave,
> >
> > PFA patch with incremental messages.
> > RM#1523
>
> Can you rebase this please?
>
> (pgadmin4)piranha:pgadmin4 dpage$ git apply
> ~/Downloads/RM_1523_with_incremental_msgs.patch
> error: patch failed:
> web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js:1296
> error: web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js:
> patch does not apply
>
> Thanks.
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
--
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers
Attachments:
[text/x-patch] RM_1523_with_incremental_msgs_Rebased.patch (10.4K, 3-RM_1523_with_incremental_msgs_Rebased.patch)
download | inline diff:
diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py
index bb5c26b..6de42b0 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -406,8 +406,10 @@ def poll(trans_id):
trans_id: unique transaction id
"""
col_info = None
+ result = None
primary_keys = None
rows_affected = 0
+ additional_result = []
# Check the transaction and connection status
status, error_msg, conn, trans_obj, session_obj = check_transaction_status(trans_id)
@@ -430,6 +432,10 @@ def poll(trans_id):
status = 'Cancel'
else:
status = 'Busy'
+ messages = conn.messages()
+ if messages and len(messages) > 0:
+ result = ''.join(messages)
+
else:
status = 'NotConnected'
result = error_msg
@@ -450,20 +456,25 @@ def poll(trans_id):
# restore it and update the session variable.
session_obj['columns_info'] = columns
update_session_grid_transaction(trans_id, session_obj)
- else:
- if result is None:
- result = conn.status_message()
- additional_result = conn.messages()
- """
- Procedure/Function output may comes in the form of Notices from the
- database server, so we need to append those outputs with the
- original result.
- """
- if isinstance(additional_result, list) \
- and len(additional_result) > 0:
- result = "{0} {1}".format(additional_result[-1], result)
-
- rows_affected = conn.rows_affected()
+
+ """
+ Procedure/Function output may comes in the form of Notices from the
+ database server, so we need to append those outputs with the
+ original result.
+ """
+ if status == 'Success' and result is None:
+ result = conn.status_message()
+ messages = conn.messages()
+ if messages:
+ additional_result = ''.join(messages)
+ else:
+ additional_result = ''
+ if result != 'SELECT 1' and result is not None:
+ result = additional_result + result
+ else:
+ result = additional_result
+
+ rows_affected = conn.rows_affected()
return make_json_response(
data={
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
index 2233586..913c3f5 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
@@ -1291,7 +1291,9 @@ define(
else {
// Show message in message and history tab in case of query tool
self.total_time = self.get_query_run_time(self.query_start_time, self.query_end_time);
- self.update_msg_history(true, res.data.result);
+ self.update_msg_history(true, res.data.result, false);
+ var msg = S('{{ _('Total query runtime: %s.') }}').sprintf(self.total_time).value();
+ alertify.success(msg, self.info_notifier_timeout);
}
// Enable/Disable query tool button only if is_query_tool is true.
@@ -1305,6 +1307,9 @@ define(
// If status is Busy then poll the result by recursive call to the poll function
self._poll();
is_query_running = true;
+ if (res.data.result) {
+ self.update_msg_history(res.data.status, res.data.result, false);
+ }
}
else if (res.data.status === 'NotConnected') {
@@ -1313,10 +1318,10 @@ define(
self.disable_tool_buttons(false);
$("#btn-cancel-query").prop('disabled', true);
}
- self.update_msg_history(false, res.data.result);
+ self.update_msg_history(false, res.data.result, true);
}
else if (res.data.status === 'Cancel') {
- self.update_msg_history(false, "Execution Cancelled!")
+ self.update_msg_history(false, "Execution Cancelled!", true)
}
},
error: function(e) {
@@ -1691,31 +1696,35 @@ define(
if (clear_grid === undefined)
clear_grid = true;
- self.trigger('pgadmin-sqleditor:loading-icon:hide');
- $("#btn-flash").prop('disabled', false);
-
- $('.sql-editor-message').text(msg);
self.gridView.messages_panel.focus();
- if (self.is_query_tool && clear_grid) {
- // Delete grid and paginator
- if (self.gridView.grid) {
- self.gridView.grid.remove();
+ if (self.is_query_tool) {
+ if (clear_grid) {
+ // Delete grid and paginator
+ if (self.gridView.grid) {
+ self.gridView.grid.remove();
+ }
+ // Misc cleaning
self.columns = undefined;
self.collection = undefined;
- }
- if (self.gridView.paginator)
- self.gridView.paginator.remove();
+ if (self.gridView.paginator)
+ self.gridView.paginator.remove();
+ $('.sql-editor-message').text(msg);
+ } else {
+ $('.sql-editor-message').append(msg);
+ }
+ }
+ if(status != 'Busy') {
+ $("#btn-flash").prop('disabled', false);
+ self.trigger('pgadmin-sqleditor:loading-icon:hide');
+ self.gridView.history_collection.add({
+ 'status' : status, 'start_time': self.query_start_time.toString(),
+ 'query': self.query, 'row_affected': self.rows_affected,
+ 'total_time': self.total_time, 'message':msg
+ });
+ self.gridView.history_collection.sort();
}
-
- self.gridView.history_collection.add(
- {'status' : status, 'start_time': self.query_start_time.toString(),
- 'query': self.query, 'row_affected': self.rows_affected,
- 'total_time': self.total_time, 'message':msg
- });
-
- self.gridView.history_collection.sort();
},
// This function will return the total query execution Time.
@@ -2140,10 +2149,12 @@ define(
var self = this;
// Start execution of the query.
- if (self.is_query_tool)
+ if (self.is_query_tool) {
+ $('.sql-editor-message').html('');
self._execute();
- else
+ } else {
self._execute_data_query();
+ }
},
// This function will show the filter in the text area.
diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py
index fbde603..bded931 100644
--- a/web/pgadmin/utils/driver/psycopg2/__init__.py
+++ b/web/pgadmin/utils/driver/psycopg2/__init__.py
@@ -178,6 +178,7 @@ class Connection(BaseConnection):
self.__backend_pid = None
self.execution_aborted = False
self.row_count = 0
+ self.__notices = None
super(Connection, self).__init__()
@@ -639,6 +640,7 @@ Attempt to reconnect it failed with the error:
)
try:
+ self.__notices = []
self.execution_aborted = False
cur.execute(query, params)
res = self._wait_timeout(cur.connection, ASYNC_WAIT_TIMEOUT)
@@ -904,31 +906,9 @@ Failed to reset the connection to the server due to following error:
if state == psycopg2.extensions.POLL_OK:
return self.ASYNC_OK
elif state == psycopg2.extensions.POLL_WRITE:
- # Wait for the given time and then check the return status
- # If three empty lists are returned then the time-out is reached.
- timeout_status = select.select([], [conn.fileno()], [], time)
- if timeout_status == ([], [], []):
- return self.ASYNC_WRITE_TIMEOUT
-
- # poll again to check the state if it is still POLL_WRITE
- # then return ASYNC_WRITE_TIMEOUT else return ASYNC_OK.
- state = conn.poll()
- if state == psycopg2.extensions.POLL_WRITE:
- return self.ASYNC_WRITE_TIMEOUT
- return self.ASYNC_OK
+ return self.ASYNC_WRITE_TIMEOUT
elif state == psycopg2.extensions.POLL_READ:
- # Wait for the given time and then check the return status
- # If three empty lists are returned then the time-out is reached.
- timeout_status = select.select([conn.fileno()], [], [], time)
- if timeout_status == ([], [], []):
- return self.ASYNC_READ_TIMEOUT
-
- # poll again to check the state if it is still POLL_READ
- # then return ASYNC_READ_TIMEOUT else return ASYNC_OK.
- state = conn.poll()
- if state == psycopg2.extensions.POLL_READ:
- return self.ASYNC_READ_TIMEOUT
- return self.ASYNC_OK
+ return self.ASYNC_READ_TIMEOUT
else:
raise psycopg2.OperationalError(
"poll() returned %s from _wait_timeout function" % state
@@ -965,6 +945,10 @@ Failed to reset the connection to the server due to following error:
errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
return False, errmsg, None
+ if self.conn.notices and self.__notices is not None:
+ while self.conn.notices:
+ self.__notices.append(self.conn.notices.pop(0)[:])
+
colinfo = None
result = None
self.row_count = 0
@@ -996,7 +980,6 @@ Failed to reset the connection to the server due to following error:
result.append(dict(row))
except psycopg2.ProgrammingError:
result = None
-
return status, result, colinfo
def status_message(self):
@@ -1094,7 +1077,7 @@ Failed to reset the connection to the server due to following error:
"""
Returns the list of the messages/notices send from the database server.
"""
- return self.conn.notices if self.conn else []
+ return self.__notices
def _formatted_exception_msg(self, exception_obj, formatted_msg):
"""
view thread (14+ 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], [email protected], [email protected]
Subject: Re: PATCH: To fix the issue where message panel was showing incomplete info (pgAdmin4)
In-Reply-To: <CAKKotZQW3EwwSasyeE2uZd_f2_2j9gSdNgL+Tp+wjO=c9PwEPQ@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