Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao96K-0004NM-OW for pgadmin-hackers@arkaria.postgresql.org; Thu, 07 Apr 2016 12:31:56 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1ao96J-0007iu-Al for pgadmin-hackers@arkaria.postgresql.org; Thu, 07 Apr 2016 12:31:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ao96I-0007in-KM for pgadmin-hackers@postgresql.org; Thu, 07 Apr 2016 12:31:54 +0000 Received: from mail-io0-x22b.google.com ([2607:f8b0:4001:c06::22b]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1ao969-0000KM-PI for pgadmin-hackers@postgresql.org; Thu, 07 Apr 2016 12:31:53 +0000 Received: by mail-io0-x22b.google.com with SMTP id q128so91684989iof.3 for ; Thu, 07 Apr 2016 05:31:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgadmin-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=yhLMExlGT3vyt2Lm60RQf+XEuo1dahSXmEecYjA5euc=; b=AtpaRM1kiMLEF7zYNP4cB3d/29vB5BhIBxCHv7iL7rjz9wv2qyZFIpy0g4pqW8SWiJ Jo1TdWJWStzPx/xm2GESGJGOXQtoRsuDFiEpEZmVhbq0jhFDxBTTCcNTCru5F8vAImbO 80vjgssg76vvvn08b0qwCL2EaBiCVIOeQstjjL777xdTCmisGfPYQsCCGNPsF9zwvpSy 2TJpbU8KAcXZZLucg9Pbfh8aMlOWhiw74PP/6wottBr3RVvrV1JFEus8PDwrjj5XeMzY hIwDaq/SSo34Zqt1ID1SunHbvtXso0w90iS8QJjFLmS1h5ABiDkqZmGkwsdyW0jvzuY3 XyEg== 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=yhLMExlGT3vyt2Lm60RQf+XEuo1dahSXmEecYjA5euc=; b=Qt38vYFPKNmK8VdyzV9R5UUjC50XYAolpF48IFxPuzEdlvIIhh3KKe0RYHEQwkQq+q X9akxCm7LUsPRJA5Lb2/K5ObsT9hvewyJ2DIpl5c2sy5WO2LJXlihA4yIG89Zc7U0ahz VK/5aJa1QsrCm0EjrxdMeEH3/3n1XOWCHMBiOvS+wZhPdNFcdm0LiSGMikR9HbCUIRVj WjLyszZzZD4UnNyNfPlgq4GZ2FKKoVPs5T4MYjE06K3XJjV2rzbdJ9XpLHZNmPPqzudZ zFEsID198cFYHHjMFV3jNG2OgwhpPRg5fZm8hN6QV5r2wtzQyuylDrNMCQGHMnrG/1Ux 6o3Q== X-Gm-Message-State: AD7BkJKxQRD19Yi9tZlsAbxgORrpHmYLPR57+fsKMtt26H6e08zMNbcplaNyMF39+2D/x2mFoD/qEoEGB977zg== MIME-Version: 1.0 X-Received: by 10.107.148.210 with SMTP id w201mr3141396iod.63.1460032304080; Thu, 07 Apr 2016 05:31:44 -0700 (PDT) Received: by 10.64.105.131 with HTTP; Thu, 7 Apr 2016 05:31:43 -0700 (PDT) In-Reply-To: References: Date: Thu, 7 Apr 2016 13:31:43 +0100 Message-ID: Subject: Re: [pgAdmin4] [Patch] Implementation of the Data Grid and Query Tool From: Dave Page To: Akshay Joshi Cc: pgadmin-hackers Content-Type: multipart/related; boundary=001a113fd402d8b2e4052fe44249 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 --001a113fd402d8b2e4052fe44249 Content-Type: multipart/alternative; boundary=001a113fd402d8b2e2052fe44248 --001a113fd402d8b2e2052fe44248 Content-Type: text/plain; charset=UTF-8 Hi On Thu, Apr 7, 2016 at 10:07 AM, Akshay Joshi 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 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. 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. > > >> - 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). > >> - 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. > > >> - 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 --001a113fd402d8b2e2052fe44248 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

On Thu, Apr 7, 2016 at 10:07 AM, Akshay Joshi <<= a href=3D"mailto:akshay.joshi@enterprisedb.com" target=3D"_blank">akshay.jo= shi@enterprisedb.com> wrote:

- The View 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 Contex= t menu, except options should be disabled when not applicable instead of hi= dden.
=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 Context menu = is fine - but options that are on it, should also be on the main "Obje= ct" menu. The difference is that where options are hidden on the conte= xt menu, they should be disabled on the object menu.
=C2=A0
=
=

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

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

- 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.
=C2=A0 =C2=A0
=C2=A0 =C2=A0 I have modified the button toolbar, we will show but= tons on the toolbar specific to the module (QueryTool/Ed= itGrid). Please refer the attached screenshots (QueryTool and EditGrid).
No - please leave all buttons visible in either mode, but disab= le them as appropriate. Then, merge the execute/refresh buttons into one.

The reason for doing it this way is that eventually= we will add query parsing support to the client so that we can start enabl= ing some of the Edit Grid features when running in Query Tool mode - e.g. i= f a Query Tool authored query is determined to be updatable, we can enable = buttons like "Add Row", "Save" etc.
=C2=A0

=

- In Edit Grid mode, the History panel should log all q= ueries (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 =C2=A0as it would in the Query Too= l.
=C2=A0
=C2=A0 = =C2=A0OK.=C2=A0

Tha= nks.
=C2=A0
=

- Please add an SQL button. This should show/h= ide the SQL panel in *both* Query Tool and Edit Grid modes. In Edit Grid mo= de, that textbox should be read-only, but should display the SQL used (incl= uding any LIMIT/FILTER clauses)
=C2=A0 =C2=A0 I think we don't need an SQL button, because I have added a Splitter to split SQL pane= l and Output Panel, so user can any time resize the SQL<= /span>/Output panel. Please refer the attached screenshots (QueryTool= and EditGrid). =C2=A0 =C2=A0=C2=A0

Right, but I'd also like to be abl= e to hide it entirely (which would be the default in Edit Grid mode).
=
=C2=A0
<= div>
- Please remove the border from the SQL box, such that i= t fills all available space.
=C2= =A0
=C2=A0 =C2=A0Done.=C2=A0Please refer the attached scre= enshots (QueryTool and EditGrid).

- The Filter box should be in a mod= al overlay over the top of the SQL box/Results tabs as required. Those elem= ents should be grayed whilst it is open.
=C2=A0=C2=A0
=C2=A0 =C2=A0Done. Please refer the at= tached screenshot (Filter).=C2=A0
=
Cool.
=C2=A0
<= div dir=3D"ltr">

- 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

- If a field has been edited, but not saved, = can we highlight 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 the names of the tabs are far too long. Can we change = them to "Query 1", "Query 2" etc, then rename them to t= he filename if the user saves/loads a file?
=C2=A0
=C2=A0 =C2=A0I personally feel it's b= een 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 <= span>servername-databasename. What do you think?
<= /div>

I think they're all a= mbiguous 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 Server -> Database -> Schema -> Table/View in EG mode.
=C2=A0
=C2= =A0
- Ashesh and I discussed changing the= History tab to be a grid, showing: Date/Time, Query (first line only), Row= s affected, Runtime and Status, in a row per query executed. Ashesh suggest= ed 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 &= quot;Clear SQL" option.

- Errors should be hi= ghlighted in the SQL box - a marker in the margin to note the line, and spe= llcheck-style underlining for the error word.
=C2=A0=C2=A0
=C2=A0 =C2=A0 OK.=C2=A0
<= div class=3D"gmail_quote">

- Query results should have s= paces converted to "&nbsp;", so that proper indenting is main= tained (for example, on EXPLAIN queries).
=C2=A0=C2=A0
=C2=A0 =C2=A0 Instead of converting s= paces to "&nbsp;" we can have css s= tyle "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.
=C2=A0
=C2=A0 =C2=A0OK.=C2=A0

=
- Can the "Copy Row" button also populate the clipboard with= CSV data for the row?
=C2=A0
=C2=A0 =C2=A0This required some research, not sure at the mome= nt. =C2=A0

- In Edit= mode, we need to be able to represent/set values to NULL.
=C2=A0 =C2=A0
=C2=A0 =C2=A0This w= ill be taken care as part of multi-type rendering task.=C2=A0

OK.
=C2=A0

- 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 cor= rectly, however I should see appropriate messages when it's not running= .

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

=C2=A0 =C2=A0OK.=C2=A0
=

Cool - thanks!=C2=A0

--
Dave Page
Blog: <= a href=3D"http://pgsnake.blogspot.com" target=3D"_blank">http://pgsnake.blo= gspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.comThe Enterprise PostgreSQL Company
--001a113fd402d8b2e2052fe44248-- --001a113fd402d8b2e4052fe44249 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== --001a113fd402d8b2e4052fe44249--