Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao9b7-0005bT-Pk for pgadmin-hackers@arkaria.postgresql.org; Thu, 07 Apr 2016 13:03:45 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1ao9b6-0004ld-W5 for pgadmin-hackers@arkaria.postgresql.org; Thu, 07 Apr 2016 13:03:45 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ao9b5-0004lH-Nu for pgadmin-hackers@postgresql.org; Thu, 07 Apr 2016 13:03:44 +0000 Received: from mail-ob0-x235.google.com ([2607:f8b0:4003:c01::235]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1ao9az-0001cf-4k for pgadmin-hackers@postgresql.org; Thu, 07 Apr 2016 13:03:42 +0000 Received: by mail-ob0-x235.google.com with SMTP id fp4so52132929obb.2 for ; Thu, 07 Apr 2016 06:03:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=mIMR4WBdq1D69xaPZ6EHC3xbnW176DgXSxjPshNjIuM=; b=zm79PwzL477FTJLjZjc72trLpUboSMgBVlKdD2vL8Y3ltbzC2GWiYLTC5XjQmCeMNT ZhdkF73NkwJa2PDsjkhl9QIXiRSfsTQlGMD0irSXeWLipO8Xo5n3UizQHcrU7Ecict5N QlBzL+nr0E2KDZ6uxTlcrL8U8TziagWUSY8jyG6OGb0UYgjmL70/BNv/awUbOhlBaCDD df/hjwK7cYJqBk+OjlQsY4tJ+ZYwl1PatrG/QcQTupMTQUiVWVZqF8/f1AQzdSFVlaqu 8ZjSwU+T/Me2T7RAFMrpeWxW342UJZ9etTYmV6VN1IH2NLJWPgZTJEainvB4foveFCs7 jICA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=mIMR4WBdq1D69xaPZ6EHC3xbnW176DgXSxjPshNjIuM=; b=Y14uBE8569SH8SS2jdfz2ly7PvCiOPsssx/PZF5qSwDJyKgFZhCuUkYK9ZkCSlfHI7 I3iIkT1TFnSe6SRV1WifaZ4VI1TpCTymPPpOJIJ3TiU3ZwXTh6xMK5IjFVCsi555j0Vy PszA8D6Tz2b9ne5OQKFaxZ7jrY33A8+U3+g/Ssv2wdtcuQcjDLDERe77Vt4L/98l0Vc/ Wp0sHNsvvuRfmiCnVLOJEuxFxmoq9Soa0yFqG0P7icOpTtMaQAYXrcz08+2WrJSfv1J8 q/LAmLEvkxzDdoZLCaAsjuHov7WMS4GLtqydiAXfcH0/g84mdpwsI7DyZ3JOfWKq4yZF dt0Q== X-Gm-Message-State: AD7BkJLDmLc3lD7S4mzOYNDczrn7YLQSdj7i1h5atWnAQiMkA9w3PRFMc3I/BaRV2ogkPA0TkRMWdE9LbNWFVD3+ MIME-Version: 1.0 X-Received: by 10.182.33.166 with SMTP id s6mr1356062obi.30.1460034216174; Thu, 07 Apr 2016 06:03:36 -0700 (PDT) Received: by 10.202.49.194 with HTTP; Thu, 7 Apr 2016 06:03:35 -0700 (PDT) In-Reply-To: References: Date: Thu, 7 Apr 2016 18:33:35 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch] Implementation of the Data Grid and Query Tool From: Akshay Joshi To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/related; boundary=001a11c2de1cd15f35052fe4b421 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11c2de1cd15f35052fe4b421 Content-Type: multipart/alternative; boundary=001a11c2de1cd15f2f052fe4b420 --001a11c2de1cd15f2f052fe4b420 Content-Type: text/plain; charset=UTF-8 Hi On Thu, Apr 7, 2016 at 6:01 PM, Dave Page wrote: > Hi > > On Thu, Apr 7, 2016 at 10:07 AM, Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> >>> - The View Data menu option should be on the Object menu >>> >> >> OK. >> >> >>> , which should mirror the Context menu, except options should be >>> disabled when not applicable instead of hidden. >>> >> >> Context menu code is generic code, to do this we need to change that >> code and it impacts other menu items like (Connect/Disconnect server, >> Connect/Disconnect Database etc ...) >> > > I think you misunderstand. The Context menu is fine - but options that are > on it, should also be on the main "Object" menu. The difference is that > where options are hidden on the context menu, they should be disabled on > the object menu. > The same behaviour I have already added in "Tools" menu, so you want me to shift that menu from "Tools" to "Object"?? > > >> >>> - The Query Tool menu icon should be a glyphicon, to match the others. >>> >> >> There is no glyphicon available which match the Query Tool icon. I >> have found one like below which is "database-search" or can you please >> suggest some other icon. >> [image: Inline image 1] >> > > That one looks perfect. > > >> >> - Please merge the functionality of the Refresh and Execute buttons into >>> one button. We shouldn't have two buttons that do essentially the same >>> thing. >>> >> >> I have modified the button toolbar, we will show buttons on the >> toolbar specific to the module (QueryTool/EditGrid). Please refer the >> attached screenshots (QueryTool and EditGrid). >> > > No - please leave all buttons visible in either mode, but disable them as > appropriate. Then, merge the execute/refresh buttons into one. > In that case we will have to use either refresh icon or execute icon (play button) or any other, as a user's perspective it's not good to have play button works as "Refresh" in EG mode or refresh button works as "Execute" in QT mode. > > The reason for doing it this way is that eventually we will add query > parsing support to the client so that we can start enabling some of the > Edit Grid features when running in Query Tool mode - e.g. if a Query Tool > authored query is determined to be updatable, we can enable buttons like > "Add Row", "Save" etc. > OK. > > >> >> >>> - In Edit Grid mode, the History panel should log all queries (SELECTs, >>> UPDATEs, DELETEs etc) as it would in the Query Tool. >>> >>> - In Edit Grid mode, the Messages panel should display any messages from >>> the most recent action as it would in the Query Tool. >>> >> >> OK. >> > > Thanks. > > >> >>> - Please add an SQL button. This should show/hide the SQL panel in >>> *both* Query Tool and Edit Grid modes. In Edit Grid mode, that textbox >>> should be read-only, but should display the SQL used (including any >>> LIMIT/FILTER clauses) >>> >> >> I think we don't need an SQL button, because I have added a Splitter >> to split SQL panel and Output Panel, so user can any time resize the SQL/Output >> panel. Please refer the attached screenshots (QueryTool and EditGrid). >> >> > > Right, but I'd also like to be able to hide it entirely (which would be > the default in Edit Grid mode). > To achieve this we need to hide the top half of the splitter, that I am not sure how we can do that. We can't remove the splitter, because it provide's ease to user to expand the SQL panel for reading the long SQL queries/functions. > > >> >>> - Please remove the border from the SQL box, such that it fills all >>> available space. >>> >> >> Done. Please refer the attached screenshots (QueryTool and EditGrid). >> >>> >>> - The Filter box should be in a modal overlay over the top of the SQL >>> box/Results tabs as required. Those elements should be grayed whilst it is >>> open. >>> >> >> Done. Please refer the attached screenshot (Filter). >> > > Cool. > > >> >>> - Please adjust the height of the Delete icon in the Edit Grid, such >>> that it doesn't force the row height to be higher than it should be. >>> >> >> OK. >> >>> >>> - If a field has been edited, but not saved, can we highlight it >>> somehow? Maybe make the text dark blue? >>> >> >> OK, not sure right now but will try. >> >>> >>> - I think the names of the tabs are far too long. Can we change them to >>> "Query 1", "Query 2" etc, then rename them to the filename if the user >>> saves/loads a file? >>> >> >> I personally feel it's been difficult for user to identify the tab if >> we will give names like "Query 1" . What we can do in case of edit grid we >> will only show the servername-objectname (remove database and schema) or >> only objectname, and in case of query tool we will show servername- >> databasename. What do you think? >> > > I think they're all ambiguous enough to not be useful for many users :-( - > plus the tabs are so long, they look awful. > > We should perhaps add a small panel (below the toolbar?) that shows Server > -> Database in QT mode, and Server -> Database -> Schema -> Table/View in > EG mode. > OK. > > >> >> >>> - Ashesh and I discussed changing the History tab to be a grid, showing: >>> Date/Time, Query (first line only), Rows affected, Runtime and Status, in a >>> row per query executed. Ashesh suggested using a sub-form that can be >>> expanded for each row, which could show the full query and error details >>> (SQL State etc). New rows should be added to the top of the list. >>> >>> - We should add an "Edit" button, which opens a drop-down menu. This >>> would eventually include options as found on the Edit menu in the pgAdmin3 >>> query tool, such as the "Clear SQL" option. >>> >>> - Errors should be highlighted in the SQL box - a marker in the margin >>> to note the line, and spellcheck-style underlining for the error word. >>> >> >> OK. >> >>> >>> - Query results should have spaces converted to " ", so that proper >>> indenting is maintained (for example, on EXPLAIN queries). >>> >> >> Instead of converting spaces to " " we can have css style >> "white-space: pre-wrap;". I have tested it and works fine. >> >>> >>> - The "Add Row" button only works if you're on the last page of the >>> resultset. >>> >> >> OK. >> >>> >>> - Can the "Copy Row" button also populate the clipboard with CSV data >>> for the row? >>> >> >> This required some research, not sure at the moment. >> >>> >>> - In Edit mode, we need to be able to represent/set values to NULL. >>> >> >> This will be taken care as part of multi-type rendering task. >> > > OK. > > >> >>> - If I shutdown my pgAdmin server, then execute a query, I get no error, >>> 0 rows displayed, and a message in the messages panel saying: >>> >>> Total query runtime: 46 msec >>> 3 rows retrieved. >>> >>> If I restart the server, the query will execute correctly, however I >>> should see appropriate messages when it's not running. >>> >>> - The layout of the result tabs should be maintained if new Query Tool >>> or Edit Grid tabs are opened. >>> >> >> OK. >> > > Cool - thanks! > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- *Akshay Joshi* *Principal Software Engineer * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --001a11c2de1cd15f2f052fe4b420 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

On Thu, Apr 7, 2016 at 6:01 PM, Dave Page <dpage@pgadmin.org> wrote:
Hi

On Thu, Apr 7, 2016 at 10:07 AM, Akshay Josh= i <akshay.joshi@enterprisedb.com> wrote:

- The Vie= w Data menu option should be on the Object menu =C2=A0
=C2=A0=C2=A0
=C2=A0 =C2=A0OK.
=C2=A0
, which should mirror the Conte= xt menu, except options should be disabled when not applicable instead of h= idden.
=C2=A0
=C2= =A0 =C2=A0 =C2=A0Context menu code is generic code, to do this we need to c= hange that code and it impacts other menu items like (Connect/Disconnect se= rver, Connect/Disconnect Database etc ...) =C2=A0

I think you misunderstand. The Contex= t menu is fine - but options that are on it, should also be on the main &qu= ot;Object" menu. The difference is that where options are hidden on th= e context menu, they should be disabled on the object menu.

=C2=A0 =C2=A0 The same behaviour I= have already added in "Tools" menu, so you want me to shift that= menu from "Tools" to "Object"??=C2=A0
=C2=A0

- The Query Tool menu icon should= be a glyphicon, to match the others.
<= div>=C2=A0
=C2=A0 =C2=A0There is no glyphicon= available which match the Query Tool icon. I have found one like below whi= ch is "database-search" or can you please suggest some other icon= .=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A03D"Inline=C2=A0

<= div>That one looks perfect.
=C2=A0

<= div class=3D"gmail_extra">
- Please merge th= e functionality of the Refresh and Execute buttons into one button. We shou= ldn't have two buttons that do essentially the same thing.
<= /div>
=C2=A0 =C2=A0
=C2=A0 =C2=A0 I= have modified the button toolbar, we will show buttons on the toolbar spec= ific to the module (QueryTool/EditGrid). Please r= efer the attached screenshots (QueryTool and EditGrid).

No - = please leave all buttons visible in either mode, but disable them as approp= riate. Then, merge the execute/refresh buttons into one.
<= /div>

=C2=A0 =C2=A0 In that case we will ha= ve to use either refresh icon or execute icon (play button) or any other, a= s a user's perspective it's not good to have play button works as &= quot;Refresh" in EG mode or refresh button works as "Execute" in QT mode.=C2=A0

The reason for doing it = this way is that eventually we will add query parsing support to the client= so that we can start enabling some of the Edit Grid features when running = in Query Tool mode - e.g. if a Query Tool authored query is determined to b= e updatable, we can enable buttons like "Add Row", "Save&quo= t; etc.

=C2=A0 =C2= =A0 OK.=C2=A0
=C2=A0<= /div>


=
- In Edit Grid mode, the History panel should log all queries (S= ELECTs, UPDATEs, DELETEs etc) as it would in the Query Tool.

=
- In Edit Grid mode, the Messages panel should display any messa= ges from the most recent action =C2=A0as it would in the Query Tool.
<= /div>
=C2=A0
=C2=A0 =C2=A0OK.= =C2=A0

Thank= s.
=C2=A0
=

- Please add an SQL button. This should sh= ow/hide the SQL panel in *both* Query Tool and Edit Grid modes. In Edit Gri= d mode, that textbox should be read-only, but should display the SQL used (= including any LIMIT/FILTER clauses)

=C2=A0 =C2=A0 I think we don't need an SQ= L button, because I have added a Splitter to split SQL = panel and Output Panel, so user can any time resize the = SQL/Output panel. Please refer the attached screenshots (Query= Tool and EditGrid). =C2=A0 =C2=A0=C2=A0

Right, but I'd also lik= e to be able to hide it entirely (which would be the default in Edit Grid m= ode).

=C2=A0 =C2=A0= To achieve this we need to hide the top half of the splitter, that I am no= t sure how we can do that. We can't remove the splitter, because it provide's ease to us= er to expand the SQL = panel for reading the long S= QL queries/functions. =C2=A0
=C2=A0
=

- Please remove the border from the SQL box, such that it= fills all available space.
=C2=A0=
=C2=A0 =C2=A0Done.=C2=A0Please refer the attached screens= hots (QueryTool and EditGrid).

- The Filter box should be in a modal overlay ove= r the top of the SQL box/Results tabs as required. Those elements should be= grayed whilst it is open.
=C2=A0= =C2=A0
=C2=A0 =C2=A0Done. Please refer the attached screen= shot (Filter).=C2=A0

Cool.
=C2=A0

- Please adjust the height of = the Delete icon in the Edit Grid, such that it doesn't force the row he= ight to be higher than it should be.
=C2=A0
=C2=A0 =C2=A0OK.=C2=A0
<= div>
- If a field has been edited, but not saved, can we high= light it somehow? Maybe make the text dark blue?
=C2=A0
=C2=A0 =C2=A0OK, not sure right now = but will try.=C2=A0

- I think t= he names of the tabs are far too long. Can we change them to "Query 1&= quot;, "Query 2" etc, then rename them to the filename if the use= r saves/loads a file?
=C2=A0
=
=C2=A0 =C2=A0I personally feel it's been difficult for user= to identify the tab if we will give names like "Query 1" . What = we can do in case of edit grid we will only show the servername-objectname (remove database and schema) or only object= name, and in case of query tool we will show servername= -databasename. What do you think?

I think they're all ambiguous enough= to not be useful for many users :-( - plus the tabs are so long, they look= awful.=C2=A0

We should perhaps add a small panel = (below the toolbar?) that shows Server -> Database in QT mode, and Serve= r -> Database -> Schema -> Table/View in EG mode.

=C2=A0 =C2=A0 OK.=C2=A0
=C2=A0
=C2=A0
- Ashesh and I = discussed changing the History tab to be a grid, showing: Date/Time, Query = (first line only), Rows affected, Runtime and Status, in a row per query ex= ecuted. Ashesh suggested using a sub-form that can be expanded for each row= , which could show the full query and error details (SQL State etc). New ro= ws should be added to the top of the list.

- We sh= ould add an "Edit" button, which opens a drop-down menu. This wou= ld eventually include options as found on the Edit menu in the pgAdmin3 que= ry tool, such as the "Clear SQL" option.

- Errors should be highlighted in the SQL box - a marker in the margin to = note the line, and spellcheck-style underlining for the error word.
=C2=A0=C2=A0
=C2=A0 =C2= =A0 OK.=C2=A0

- Query results s= hould have spaces converted to "&nbsp;", so that proper inden= ting is maintained (for example, on EXPLAIN queries).
=C2=A0=C2=A0
=C2=A0 =C2=A0 Instead of = converting spaces to "&nbsp;" we can have = css style "white-space: pre-wrap;". I have te= sted it and works fine.

- The = "Add Row" button only works if you're on the last page of the= resultset.
=C2=A0
=C2=A0 =C2=A0OK.=C2=A0

- Can = the "Copy Row" button also populate the clipboard with CSV data f= or the row?
=C2=A0
=C2=A0 =C2=A0This required some research, not sure at the moment. =C2=A0<= /div>

- In Edit mode, we need to be a= ble to represent/set values to NULL.
=C2=A0 =C2=A0
=C2=A0 =C2=A0This will be taken care as p= art of multi-type rendering task.=C2=A0

OK.
=C2=A0

- If I shut= down my pgAdmin server, then execute a query, I get no error, 0 rows displa= yed, and a message in the messages panel saying:

<= div>Total query runtime: 46 msec
3 rows retrieved.

If I restart the server, the query will execute correctly,= however I should see appropriate messages when it's not running.
=

- The layout of the result tabs should be maintained if= new Query Tool or Edit Grid tabs are opened.

=C2=A0 =C2=A0OK.=C2=A0
<= /div>

Cool - thanks!=C2=A0

--
Dave Page
Blog: http://pgsnake.blogspot.com=
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Ent= erprise PostgreSQL Company



--
Akshay= Joshi<= /b>
= Principal Software Engineer=C2=A0


<= b>Phone: +91 20-3058-9517
Mobile: +91 976-788= -8246
--001a11c2de1cd15f2f052fe4b420-- --001a11c2de1cd15f35052fe4b421 Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_153efa7c0422527f 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 r+DRaQAAAABJRU5ErkJggg== --001a11c2de1cd15f35052fe4b421--