Re: PATCH: Format SQL (external tool)

From: "J(dot)F(dot) Oster" <jinfroster(at)mail(dot)ru>
To: Ashesh Vashi <ashesh(dot)vashi(at)enterprisedb(dot)com>
Cc: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>, pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>, Dave Page <dpage(at)pgadmin(dot)org>
Subject: Re: PATCH: Format SQL (external tool)
Date: 2015-06-26 18:48:52
Message-ID: 3810583589.20150626214852@mail.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title></title>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
body {
margin: 5px 5px 5px 5px;
background-color: #ffffff;
}
/* ========== Text Styles ========== */
hr { color: #000000}
body, table /* Normal text */
{
font-size: 9pt;
font-family: 'Courier New';
font-style: normal;
font-weight: normal;
color: #000000;
text-decoration: none;
}
span.rvts1 /* Heading */
{
font-size: 10pt;
font-family: 'Arial';
font-weight: bold;
color: #0000ff;
}
span.rvts2 /* Subheading */
{
font-size: 10pt;
font-family: 'Arial';
font-weight: bold;
color: #000080;
}
span.rvts3 /* Keywords */
{
font-size: 10pt;
font-family: 'Arial';
font-style: italic;
color: #800000;
}
a.rvts4, span.rvts4 /* Jump 1 */
{
font-size: 10pt;
font-family: 'Arial';
color: #008000;
text-decoration: underline;
}
a.rvts5, span.rvts5 /* Jump 2 */
{
font-size: 10pt;
font-family: 'Arial';
color: #008000;
text-decoration: underline;
}
span.rvts6
{
font-size: 11pt;
font-family: 'tahoma';
font-weight: bold;
color: #ffffff;
background-color: #0000ff;
}
span.rvts7
{
font-size: 11pt;
font-family: 'tahoma';
}
a.rvts8, span.rvts8
{
font-size: 11pt;
font-family: 'tahoma';
color: #0000ff;
text-decoration: underline;
}
span.rvts9
{
font-size: 11pt;
font-style: italic;
}
a.rvts10, span.rvts10
{
font-size: 11pt;
color: #0000ff;
text-decoration: underline;
}
a.rvts11, span.rvts11
{
font-size: 11pt;
font-style: italic;
color: #0000ff;
text-decoration: underline;
}
span.rvts12
{
font-family: 'arial';
font-weight: bold;
}
span.rvts13
{
font-size: 8pt;
font-family: 'arial';
font-style: italic;
color: #c0c0c0;
}
/* ========== Para Styles ========== */
p,ul,ol /* Paragraph Style */
{
text-align: left;
text-indent: 0px;
padding: 0px 0px 0px 0px;
margin: 0px 0px 0px 0px;
}
.rvps1 /* Centered */
{
text-align: center;
}
--></style>
</head>
<body>

<p>Hello Ashesh,</p>
<p><br></p>
<p>Sorry for long absense.</p>
<p><br></p>
<p>Are you sure we need that additional option for specifying timeout?</p>
<p>How do you see it placed in the Options dialogue? For me it will look somewhat surplus and "overloading" the form.</p>
<p>It will be needed to change extremely rarely. The only true case I can imagine is using a wrapper script for online formatting service.</p>
<p>I suggest to provide a value in sysSettings, but keep it hidden. If needed, the user will be able to change it by hand. The one who manages to use such advanced functionality IS a hacker already :) and won't feel much inconvenience anyway.</p>
<p>How do you think?</p>
<p><br></p>
<p>Regarding the events internals - honestly, it's too complicated for me...</p>
<p>The very first version of my code in case of a timeout could lead to SEGFAULT somewhere inside wxWidget's event handling internals, with no pgAdmin's code in the stack.&nbsp;</p>
<p>After I've changed by guess the AbortProcess() code to it's current look, it never broke since that. But I can't tell anymore deeper, sorry... :(</p>
<p><br></p>
<p><br></p>
<p>Wednesday, May 27, 2015, 12:56:25 PM, you wrote:</p>
<p><br></p>
<div><table border=0 cellpadding=1 cellspacing=2>
<tr valign=top>
<td width=12 style="background-color: #0000ff;">
<p><span class=rvts6>&gt;</span></p>
</td>
<td width=1038 style="background-color: #ffffff;">
<p><span class=rvts7>On Wed, May 27, 2015 at 3:19 PM, Ashesh Vashi &lt;</span><a class=rvts8 href="mailto:ashesh(dot)vashi(at)enterprisedb(dot)com">ashesh(dot)vashi(at)enterprisedb(dot)com</a><span class=rvts7>&gt; wrote:</span></p>
<p><span class=rvts7>Hi J. F. Oster,</span></p>
<p><br></p>
<p><span class=rvts7>I think - we should give option to the user about wait timeout (which is hard-coded to 3 seconds).</span></p>
<p><span class=rvts7>It should be asked in the options dialog.</span></p>
<p><span class=rvts7>Apart from that - in the AbortProcess function, we're releasing the process object.</span></p>
<p><span class=rvts7>Does EVT_END_PROCESS event get fired even in case of killing the process across all supported platform?</span></p>
<p><span class=rvts7>(FYI - I've not tested the code yet.)</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts9>--</span></p>
<p><span class=rvts9>Thanks &amp; Regards,</span></p>
<p><br></p>
<p><span class=rvts9>Ashesh Vashi</span></p>
<p><span class=rvts9>EnterpriseDB INDIA:&nbsp;</span><a class=rvts10 href="http://www.enterprisedb.com">Enterprise PostgreSQL Company</a></p>
<p><br></p>
<p><a class=rvts11 href="http://www.linkedin.com/in/asheshvashi">http://www.linkedin.com/in/asheshvashi</a></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>On Wed, May 27, 2015 at 10:56 AM, Akshay Joshi &lt;</span><a class=rvts8 href="mailto:akshay(dot)joshi(at)enterprisedb(dot)com">akshay(dot)joshi(at)enterprisedb(dot)com</a><span class=rvts7>&gt; wrote:</span></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>On Tue, May 26, 2015 at 9:51 PM, J.F. Oster &lt;</span><a class=rvts8 href="mailto:jinfroster(at)mail(dot)ru">jinfroster(at)mail(dot)ru</a><span class=rvts7>&gt; wrote:</span></p>
<p><br></p>
<p><span class=rvts7>Hello Akshay,</span></p>
<p><br></p>
<p><span class=rvts7>Is there something else to fix?</span></p>
<p><br></p>
<p><span class=rvts7>&nbsp; &nbsp;Nothing. Patch looks good to me.&nbsp;</span></p>
<p><br></p>
<p><span class=rvts7>JFO&gt; Hi Akshay,</span></p>
<p><br></p>
<p><span class=rvts7>JFO&gt; Removed that.</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>JFO&gt; Tuesday, May 19, 2015, 10:04:59 AM, you wrote:</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Hi J.F</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; The version of fsql you have suggested works for me as well. I</span></p>
<p><span class=rvts7>AJ&gt;&gt; have reviewed your patch and it looks good to me. Please remove</span></p>
<p><span class=rvts7>AJ&gt;&gt; the commented code (wxString s; //, tmp &nbsp;at line 873 in sysSettings.cpp.</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; On Mon, May 18, 2015 at 10:31 PM, J.F. Oster &lt;</span><a class=rvts8 href="mailto:jinfroster(at)mail(dot)ru">jinfroster(at)mail(dot)ru</a><span class=rvts7>&gt; wrote:</span></p>
<p><span class=rvts7>AJ&gt;&gt; Hi Akshay,</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; fsqlf.exe is the program to use; wx_fsqlf.exe is just a GUI wrapper.</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; I've got the latest version (fsqlf.v0.03-292-gd0fd9bf.zip), and it really fails to run</span></p>
<p><span class=rvts7>AJ&gt;&gt; Please try the previous one, it works for me.</span></p>
<p><span class=rvts7>AJ&gt;&gt;&nbsp;</span><a class=rvts8 href="http://sourceforge.net/projects/fsqlf/files/fsqlf.v0.03/fsqlf.v0.03-141-g94f5a5f.zip.gz/download">http://sourceforge.net/projects/fsqlf/files/fsqlf.v0.03/fsqlf.v0.03-141-g94f5a5f.zip.gz/download</a></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Also please note that fsqlf.exe could fail when run in a path containing national characters.</span></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Monday, May 18, 2015, 3:42:11 PM, you wrote:</span></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Hi J.F</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; I am reviewing your patch. I have applied the patch and try to</span></p>
<p><span class=rvts7>AJ&gt;&gt; test it on Windows 7. Below are the steps that I perform</span></p>
<p><span class=rvts7>AJ&gt;&gt; ° &nbsp; &nbsp; &nbsp; Download SQL Formatter from&nbsp;</span><a class=rvts8 href="http://fsqlf.sourceforge.net/">http://fsqlf.sourceforge.net/</a></p>
<p><span class=rvts7>AJ&gt;&gt; ° &nbsp; &nbsp; &nbsp; Given the path of fsqlf.exe/wx_fsqlf.exe in File -</span></p>
<p><span class=rvts7>AJ&gt;&gt; Options - Query Editor: External formatting utility</span></p>
<p><span class=rvts7>AJ&gt;&gt; ° &nbsp; &nbsp; &nbsp; I have opened the query tool and wrote some select query.</span></p>
<p><span class=rvts7>AJ&gt;&gt; Please refer the attached screenshot for SQL query.</span></p>
<p><span class=rvts7>AJ&gt;&gt; When I have given fsqlf.exe in the path it throws the error ( see</span></p>
<p><span class=rvts7>AJ&gt;&gt; attached screenshot) and when I have given wx_fsqlf.exe in the</span></p>
<p><span class=rvts7>AJ&gt;&gt; path it always report an error "Formatting command did not respond</span></p>
<p><span class=rvts7>AJ&gt;&gt; in 3 seconds" in the status bar.</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; I am not sure how to test it properly. Can you please provide some steps.</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; On Mon, May 18, 2015 at 10:10 AM, Akshay Joshi</span></p>
<p><span class=rvts7>AJ&gt;&gt; &lt;</span><a class=rvts8 href="mailto:akshay(dot)joshi(at)enterprisedb(dot)com">akshay(dot)joshi(at)enterprisedb(dot)com</a><span class=rvts7>&gt; wrote:</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Sure.</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; On Fri, May 15, 2015 at 9:30 PM, Dave Page &lt;</span><a class=rvts8 href="mailto:dpage(at)pgadmin(dot)org">dpage(at)pgadmin(dot)org</a><span class=rvts7>&gt; wrote:</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Akshay, can you take a look please?</span></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; Thanks.</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>AJ&gt;&gt; On Fri, May 15, 2015 at 4:53 PM, J.F. Oster &lt;</span><a class=rvts8 href="mailto:jinfroster(at)mail(dot)ru">jinfroster(at)mail(dot)ru</a><span class=rvts7>&gt; wrote:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; Hello!</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Please take a look at the patch.</span></p>
<p><span class=rvts7>&gt;&gt;&gt; Thanks.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Per discussion</span></p>
<p><span class=rvts7>&gt;&gt;&gt;&nbsp;</span><a class=rvts8 href="http://www.postgresql.org/message-id/CAPyomk5NT9Tm-r3wombLzoY60Vqa+QyRDy4u84_2K9UWLbWHTg@mail.gmail.com">http://www.postgresql.org/message-id/CAPyomk5NT9Tm-r3wombLzoY60Vqa+QyRDy4u84_2K9UWLbWHTg@mail.gmail.com</a></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; It's most useful for making readable queries generated by ORMs such as</span></p>
<p><span class=rvts7>&gt;&gt;&gt; Hibernate. But in general, external processing can go far beyond</span></p>
<p><span class=rvts7>&gt;&gt;&gt; formatting task.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; I've implemented this feature quick-and-dirty long ago. Finally I made</span></p>
<p><span class=rvts7>&gt;&gt;&gt; myself clean it up, now it looks better, so please consider a patch.</span></p>
<p><span class=rvts7>&gt;&gt;&gt; Tested on Windows 7 and Ubuntu 14.04.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Changes:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * added new setting, ExtFormatCmd, "External formatting utility" in</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; Options dialogue</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * added menu item "Edit - Format - External Format" in</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; Query editor</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * class sysProcess supports UTF-8 and can pass STDIN for a process.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Suggested use scenario:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; 1. Download and install some SQL formatting utility.</span></p>
<p><span class=rvts7>&gt;&gt;&gt; 2. Tell pgAdmin where it resides:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp;File - Options - Query Editor: External formatting utility.</span></p>
<p><span class=rvts7>&gt;&gt;&gt; 3. Open Query editor. Select a text block to format and press</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp;Ctrl-Shift-F. With no selection the whole text gets formatted.</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp;In case of non-zero exit code, STDERR will be shown in status bar.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Requirements for external formatting utility:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * Accepts a STDIN stream and writes result to STDOUT</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * Finishes in less than 3 seconds</span></p>
<p><span class=rvts7>&gt;&gt;&gt; * Exits with code 0 on success</span></p>
<p><span class=rvts7>&gt;&gt;&gt; Support for UTF-8 multibyte characters is preferable.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; To see whether it works well, a test can be done:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; C:\&gt; type in.sql |some_formatter &gt;out.sql</span></p>
<p><span class=rvts7>&gt;&gt;&gt; C:\&gt; echo %ERRORLEVEL%</span></p>
<p><span class=rvts7>&gt;&gt;&gt; or</span></p>
<p><span class=rvts7>&gt;&gt;&gt; user(at)linux:~$ cat in.sql |some_formatter &gt;out.sql</span></p>
<p><span class=rvts7>&gt;&gt;&gt; user(at)linux:~$ echo $?</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; There are few available utilities depending on platform:</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp;* Free SQL Formatter (Linux, Windows, Mac OS X(?))</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp; &nbsp;</span><a class=rvts8 href="http://fsqlf.sourceforge.net/">http://fsqlf.sourceforge.net/</a></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp;* Poor Man's T-SQL Formatter (Windows)</span></p>
<p><span class=rvts7>&gt;&gt;&gt; &nbsp; &nbsp; &nbsp;</span><a class=rvts8 href="http://architectshack.com/PoorMansTSqlFormatter.ashx">http://architectshack.com/PoorMansTSqlFormatter.ashx</a></p>
<p><span class=rvts7>&gt;&gt;&gt; Also it is possible to make a wrapper script for numerous online</span></p>
<p><span class=rvts7>&gt;&gt;&gt; formatting services, but it's less secure and less reliable.</span></p>
<p><br></p>
<p><span class=rvts7>&gt;&gt;&gt; Fsqlf is FOSS and seems promising. I think of extending it for</span></p>
<p><span class=rvts7>&gt;&gt;&gt; PosgreSQL-specific SQL syntax and probably even PL/pgSQL.</span></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>--</span></p>
<p><span class=rvts7>Best regards,</span></p>
<p><span class=rvts7>&nbsp;J.F.</span></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts7>--&nbsp;</span></p>
<p><br></p>
<p><span class=rvts12>Akshay Joshi</span></p>
<p><span class=rvts12>Principal Software Engineer&nbsp;</span></p>
<p><br></p>
<p><br></p>
<p><span class=rvts12>Phone: +91 20-3058-9517</span></p>
<p><span class=rvts12>Mobile: +91 976-788-8246</span></p>
</td>
</tr>
</table>
</div>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span class=rvts13>--&nbsp;</span></p>
<p><span class=rvts13>Best regards,</span></p>
<p><span class=rvts13>&nbsp;J.F.</span></p>

</body></html>

Attachment Content-Type Size
unknown_filename text/html 14.5 KB

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Sanket Mehta 2015-06-29 11:05:47 Re: [PATCH] Fix crash when disabling auto commit
Previous Message Dave Page 2015-06-25 07:58:00 Re: [PATCH] Add Commit/Rollback toolbar action