Skip to content

Commit 416d533

Browse files
authored
[FIX] case when wrongly formatted if case when at least in second argument and preceded by text in quotes (#133)
* [case-when] fix case when issue for first argument being a string * [case-when] second try to get CI working
1 parent 8705b23 commit 416d533

6 files changed

Lines changed: 296 additions & 218 deletions

File tree

docs/core.html

Lines changed: 133 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,6 +1624,44 @@ <h4 id="remove_wrong_end_comma" class="doc_header"><code>remove_wrong_end_comma<
16241624
</div>
16251625
</div>
16261626

1627+
</div>
1628+
{% endraw %}
1629+
1630+
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1631+
<div class="text_cell_render border-box-sizing rendered_html">
1632+
<h4 id="Helper-function-for-case-when">Helper function for <code>case when</code><a class="anchor-link" href="#Helper-function-for-case-when"> </a></h4>
1633+
</div>
1634+
</div>
1635+
</div>
1636+
{% raw %}
1637+
1638+
<div class="cell border-box-sizing code_cell rendered">
1639+
1640+
<div class="output_wrapper">
1641+
<div class="output">
1642+
1643+
<div class="output_area">
1644+
1645+
1646+
<div class="output_markdown rendered_html output_subarea ">
1647+
<h4 id="format_case_when" class="doc_header"><code>format_case_when</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L159" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_case_when</code>(<strong><code>s</code></strong>)</p>
1648+
</blockquote>
1649+
<p>Format case when statement in line <code>s</code></p>
1650+
1651+
</div>
1652+
1653+
</div>
1654+
1655+
</div>
1656+
</div>
1657+
1658+
</div>
1659+
{% endraw %}
1660+
1661+
{% raw %}
1662+
1663+
<div class="cell border-box-sizing code_cell rendered">
1664+
16271665
</div>
16281666
{% endraw %}
16291667

@@ -1644,7 +1682,7 @@ <h3 id="SELECT">SELECT<a class="anchor-link" href="#SELECT"> </a></h3>
16441682

16451683

16461684
<div class="output_markdown rendered_html output_subarea ">
1647-
<h4 id="format_select" class="doc_header"><code>format_select</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L159" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_select</code>(<strong><code>s</code></strong>)</p>
1685+
<h4 id="format_select" class="doc_header"><code>format_select</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L183" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_select</code>(<strong><code>s</code></strong>)</p>
16481686
</blockquote>
16491687
<p>Format SELECT statement line <code>s</code></p>
16501688

@@ -1779,68 +1817,12 @@ <h4 id="format_select" class="doc_header"><code>format_select</code><a href="htt
17791817
<div class="output_area">
17801818

17811819
<div class="output_subarea output_stream output_stdout output_text">
1782-
<pre>Assertion failed
1783-
1784-
Observed:
1785-
1786-
select asdf, -- Some comment -- Another comment
1787-
asdforqwer
1788-
1789-
1790-
Expected:
1791-
1792-
select asdf, -- Some comment
1820+
<pre>select asdf, -- Some comment
17931821
asdforqwer -- Another comment
1794-
Exception found at position 28:
1795-
1796-
10-characters window:
1797-
1798-
Observed:
1799-
1800-
mment -- A
1801-
1802-
1803-
Expected:
1804-
1805-
mment
1806-
18071822
</pre>
18081823
</div>
18091824
</div>
18101825

1811-
<div class="output_area">
1812-
1813-
<div class="output_subarea output_text output_error">
1814-
<pre>
1815-
<span class="ansi-red-fg">-----------------------------------------------------------------------</span>
1816-
<span class="ansi-red-fg">AssertionError</span> Traceback (most recent call last)
1817-
<span class="ansi-green-fg">~/Dokumente/Python_Stuff/Projekte/sql_formatter/sql_formatter/utils.py</span> in <span class="ansi-cyan-fg">assert_and_print</span><span class="ansi-blue-fg">(s_in, s_expected)</span>
1818-
<span class="ansi-green-intense-fg ansi-bold"> 18</span> <span class="ansi-green-fg">try</span><span class="ansi-blue-fg">:</span>
1819-
<span class="ansi-green-fg">---&gt; 19</span><span class="ansi-red-fg"> </span><span class="ansi-green-fg">assert</span> s_in <span class="ansi-blue-fg">==</span> s_expected
1820-
<span class="ansi-green-intense-fg ansi-bold"> 20</span> <span class="ansi-green-fg">except</span><span class="ansi-blue-fg">:</span>
1821-
1822-
<span class="ansi-red-fg">AssertionError</span>:
1823-
1824-
During handling of the above exception, another exception occurred:
1825-
1826-
<span class="ansi-red-fg">AssertionError</span> Traceback (most recent call last)
1827-
<span class="ansi-green-fg">&lt;ipython-input-70-57dc18c8340b&gt;</span> in <span class="ansi-cyan-fg">&lt;module&gt;</span>
1828-
<span class="ansi-green-intense-fg ansi-bold"> 4</span> select asdf<span class="ansi-blue-fg">,</span> <span class="ansi-blue-fg">-</span><span class="ansi-blue-fg">-</span> Some comment
1829-
<span class="ansi-green-intense-fg ansi-bold"> 5</span> asdforqwer <span class="ansi-blue-fg">-</span><span class="ansi-blue-fg">-</span> Another comment
1830-
<span class="ansi-green-fg">----&gt; 6</span><span class="ansi-red-fg"> &#34;&#34;&#34;.strip()
1831-
</span><span class="ansi-green-intense-fg ansi-bold"> 7</span> )
1832-
1833-
<span class="ansi-green-fg">~/Dokumente/Python_Stuff/Projekte/sql_formatter/sql_formatter/utils.py</span> in <span class="ansi-cyan-fg">assert_and_print</span><span class="ansi-blue-fg">(s_in, s_expected)</span>
1834-
<span class="ansi-green-intense-fg ansi-bold"> 35</span> print<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">&#34;Expected:\n&#34;</span><span class="ansi-blue-fg">)</span>
1835-
<span class="ansi-green-intense-fg ansi-bold"> 36</span> print<span class="ansi-blue-fg">(</span>s_expected<span class="ansi-blue-fg">[</span>max<span class="ansi-blue-fg">(</span>i<span class="ansi-blue-fg">-</span><span class="ansi-cyan-fg">5</span><span class="ansi-blue-fg">,</span> <span class="ansi-cyan-fg">0</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">:</span>i<span class="ansi-blue-fg">+</span><span class="ansi-cyan-fg">5</span><span class="ansi-blue-fg">]</span><span class="ansi-blue-fg">)</span>
1836-
<span class="ansi-green-fg">---&gt; 37</span><span class="ansi-red-fg"> </span><span class="ansi-green-fg">assert</span> s_in <span class="ansi-blue-fg">==</span> s_expected
1837-
<span class="ansi-green-intense-fg ansi-bold"> 38</span> print<span class="ansi-blue-fg">(</span>s_in<span class="ansi-blue-fg">)</span>
1838-
<span class="ansi-green-intense-fg ansi-bold"> 39</span> <span class="ansi-green-fg">return</span> <span class="ansi-green-fg">None</span>
1839-
1840-
<span class="ansi-red-fg">AssertionError</span>: </pre>
1841-
</div>
1842-
</div>
1843-
18441826
</div>
18451827
</div>
18461828

@@ -2588,6 +2570,90 @@ <h4 id="format_select" class="doc_header"><code>format_select</code><a href="htt
25882570
</div>
25892571
</div>
25902572

2573+
</div>
2574+
{% endraw %}
2575+
2576+
{% raw %}
2577+
2578+
<div class="cell border-box-sizing code_cell rendered">
2579+
<div class="input">
2580+
2581+
<div class="inner_cell">
2582+
<div class="input_area">
2583+
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">assert_and_print</span><span class="p">(</span>
2584+
<span class="n">format_select</span><span class="p">(</span><span class="s2">&quot;select qwer1, substr(qwer, case when asdf = &#39;J&#39; then 1 else 0 end, 4) as qwer2, qwer3&quot;</span><span class="p">),</span>
2585+
<span class="sd">&quot;&quot;&quot;</span>
2586+
<span class="sd">select qwer1,</span>
2587+
<span class="sd"> substr(qwer, case when asdf = &#39;J&#39; then 1</span>
2588+
<span class="sd"> else 0 end, 4) as qwer2,</span>
2589+
<span class="sd"> qwer3</span>
2590+
<span class="sd">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
2591+
<span class="p">)</span>
2592+
</pre></div>
2593+
2594+
</div>
2595+
</div>
2596+
</div>
2597+
2598+
<div class="output_wrapper">
2599+
<div class="output">
2600+
2601+
<div class="output_area">
2602+
2603+
<div class="output_subarea output_stream output_stdout output_text">
2604+
<pre>select qwer1,
2605+
substr(qwer, case when asdf = &#39;J&#39; then 1
2606+
else 0 end, 4) as qwer2,
2607+
qwer3
2608+
</pre>
2609+
</div>
2610+
</div>
2611+
2612+
</div>
2613+
</div>
2614+
2615+
</div>
2616+
{% endraw %}
2617+
2618+
{% raw %}
2619+
2620+
<div class="cell border-box-sizing code_cell rendered">
2621+
<div class="input">
2622+
2623+
<div class="inner_cell">
2624+
<div class="input_area">
2625+
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">assert_and_print</span><span class="p">(</span>
2626+
<span class="n">format_select</span><span class="p">(</span><span class="s2">&quot;select qwer1, substr(&#39;blabla&#39;, case when asdf = &#39;J&#39; then 1 else 0 end, 4) as qwer2, qwer3&quot;</span><span class="p">),</span>
2627+
<span class="sd">&quot;&quot;&quot;</span>
2628+
<span class="sd">select qwer1,</span>
2629+
<span class="sd"> substr(&#39;blabla&#39;, case when asdf = &#39;J&#39; then 1</span>
2630+
<span class="sd"> else 0 end, 4) as qwer2,</span>
2631+
<span class="sd"> qwer3</span>
2632+
<span class="sd">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
2633+
<span class="p">)</span>
2634+
</pre></div>
2635+
2636+
</div>
2637+
</div>
2638+
</div>
2639+
2640+
<div class="output_wrapper">
2641+
<div class="output">
2642+
2643+
<div class="output_area">
2644+
2645+
<div class="output_subarea output_stream output_stdout output_text">
2646+
<pre>select qwer1,
2647+
substr(&#39;blabla&#39;, case when asdf = &#39;J&#39; then 1
2648+
else 0 end, 4) as qwer2,
2649+
qwer3
2650+
</pre>
2651+
</div>
2652+
</div>
2653+
2654+
</div>
2655+
</div>
2656+
25912657
</div>
25922658
{% endraw %}
25932659

@@ -2981,7 +3047,7 @@ <h3 id="FROM">FROM<a class="anchor-link" href="#FROM"> </a></h3>
29813047

29823048

29833049
<div class="output_markdown rendered_html output_subarea ">
2984-
<h4 id="format_from" class="doc_header"><code>format_from</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L240" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_from</code>(<strong><code>s</code></strong>)</p>
3050+
<h4 id="format_from" class="doc_header"><code>format_from</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L230" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_from</code>(<strong><code>s</code></strong>)</p>
29853051
</blockquote>
29863052
<p>Format FROM statement line <code>s</code></p>
29873053

@@ -3050,7 +3116,7 @@ <h3 id="(LEFT-/-RIGHT-/-INNER-/-OUTER)-JOIN">(LEFT / RIGHT / INNER / OUTER) JOIN
30503116

30513117

30523118
<div class="output_markdown rendered_html output_subarea ">
3053-
<h4 id="format_join" class="doc_header"><code>format_join</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L251" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_join</code>(<strong><code>s</code></strong>)</p>
3119+
<h4 id="format_join" class="doc_header"><code>format_join</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L241" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_join</code>(<strong><code>s</code></strong>)</p>
30543120
</blockquote>
30553121
<p>Format JOIN statement line <code>s</code></p>
30563122

@@ -3119,7 +3185,7 @@ <h3 id="ON">ON<a class="anchor-link" href="#ON"> </a></h3>
31193185

31203186

31213187
<div class="output_markdown rendered_html output_subarea ">
3122-
<h4 id="format_on" class="doc_header"><code>format_on</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L257" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_on</code>(<strong><code>s</code></strong>)</p>
3188+
<h4 id="format_on" class="doc_header"><code>format_on</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L247" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_on</code>(<strong><code>s</code></strong>)</p>
31233189
</blockquote>
31243190
<p>Format ON statement line <code>s</code></p>
31253191

@@ -3318,7 +3384,7 @@ <h3 id="WHERE">WHERE<a class="anchor-link" href="#WHERE"> </a></h3>
33183384

33193385

33203386
<div class="output_markdown rendered_html output_subarea ">
3321-
<h4 id="format_where" class="doc_header"><code>format_where</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L283" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_where</code>(<strong><code>s</code></strong>)</p>
3387+
<h4 id="format_where" class="doc_header"><code>format_where</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L273" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_where</code>(<strong><code>s</code></strong>)</p>
33223388
</blockquote>
33233389
<p>Format WHERE statement line <code>s</code></p>
33243390

@@ -3467,7 +3533,7 @@ <h2 id="Format-all-statements">Format all statements<a class="anchor-link" href=
34673533

34683534

34693535
<div class="output_markdown rendered_html output_subarea ">
3470-
<h4 id="format_statement_line" class="doc_header"><code>format_statement_line</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L312" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_statement_line</code>(<strong><code>s</code></strong>)</p>
3536+
<h4 id="format_statement_line" class="doc_header"><code>format_statement_line</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L302" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_statement_line</code>(<strong><code>s</code></strong>)</p>
34713537
</blockquote>
34723538
<p>Format statement line <code>s</code></p>
34733539

@@ -3611,7 +3677,7 @@ <h4 id="format_statement_line" class="doc_header"><code>format_statement_line</c
36113677

36123678

36133679
<div class="output_markdown rendered_html output_subarea ">
3614-
<h4 id="format_statements" class="doc_header"><code>format_statements</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L330" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_statements</code>(<strong><code>s</code></strong>)</p>
3680+
<h4 id="format_statements" class="doc_header"><code>format_statements</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L320" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_statements</code>(<strong><code>s</code></strong>)</p>
36153681
</blockquote>
36163682
<p>Format statements lines <code>s</code></p>
36173683

@@ -3689,7 +3755,7 @@ <h3 id="Format-multiline-comments">Format multiline comments<a class="anchor-lin
36893755

36903756

36913757
<div class="output_markdown rendered_html output_subarea ">
3692-
<h4 id="format_multiline_comments" class="doc_header"><code>format_multiline_comments</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L340" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_multiline_comments</code>(<strong><code>s</code></strong>)</p>
3758+
<h4 id="format_multiline_comments" class="doc_header"><code>format_multiline_comments</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L330" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_multiline_comments</code>(<strong><code>s</code></strong>)</p>
36933759
</blockquote>
36943760
<p>Format multiline comments by replacing multiline comment [CI] by newline and adding indentation</p>
36953761

@@ -3728,7 +3794,7 @@ <h2 id="Putting-everything-together">Putting everything together<a class="anchor
37283794

37293795

37303796
<div class="output_markdown rendered_html output_subarea ">
3731-
<h4 id="format_simple_sql" class="doc_header"><code>format_simple_sql</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L355" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_simple_sql</code>(<strong><code>s</code></strong>)</p>
3797+
<h4 id="format_simple_sql" class="doc_header"><code>format_simple_sql</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L345" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_simple_sql</code>(<strong><code>s</code></strong>)</p>
37323798
</blockquote>
37333799
<p>Format a simple SQL query without subqueries <code>s</code></p>
37343800

@@ -3952,7 +4018,7 @@ <h3 id="Main-function-handling-queries-with-subqueries">Main function handling q
39524018

39534019

39544020
<div class="output_markdown rendered_html output_subarea ">
3955-
<h4 id="format_sql" class="doc_header"><code>format_sql</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L369" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_sql</code>(<strong><code>s</code></strong>)</p>
4021+
<h4 id="format_sql" class="doc_header"><code>format_sql</code><a href="https://github.com/PabloRMira/sql_formatter/tree/master/sql_formatter/core.py#L359" class="source_link" style="float:right">[source]</a></h4><blockquote><p><code>format_sql</code>(<strong><code>s</code></strong>)</p>
39564022
</blockquote>
39574023
<p>Format SQL query with subqueries <code>s</code></p>
39584024

docs/format_file.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -896,11 +896,11 @@ <h4 id="format_sql_file" class="doc_header"><code>format_sql_file</code><a href=
896896
<div class="output_area">
897897

898898
<div class="output_subarea output_stream output_stdout output_text">
899-
<pre>Something went wrong in file: /tmp/tmp8tafo08i
899+
<pre>Something went wrong in file: /tmp/tmp9iqjtdct
900900
[WARNING] Identified CREATE keyword more than twice within the same query at lines [(1, 7)]
901901
You may have forgotten a semicolon (;) to delimit the queries
902-
Aborting formatting for file /tmp/tmp8tafo08i
903-
Aborting formatting for file /tmp/tmp8tafo08i
902+
Aborting formatting for file /tmp/tmp9iqjtdct
903+
Aborting formatting for file /tmp/tmp9iqjtdct
904904
create or replace transient table my_table As
905905
select asdf, Qwer, /* ; */
906906
qwer2, -- ;
@@ -961,11 +961,11 @@ <h4 id="format_sql_file" class="doc_header"><code>format_sql_file</code><a href=
961961
<div class="output_area">
962962

963963
<div class="output_subarea output_stream output_stdout output_text">
964-
<pre>Something went wrong in file: /tmp/tmp1p77zcwz
964+
<pre>Something went wrong in file: /tmp/tmptxuyuw8q
965965
[WARNING] Identified unbalanced parenthesis at lines [[3], [8]]
966966
You should check your parenthesis
967-
Aborting formatting for file /tmp/tmp1p77zcwz
968-
Aborting formatting for file /tmp/tmp1p77zcwz
967+
Aborting formatting for file /tmp/tmptxuyuw8q
968+
Aborting formatting for file /tmp/tmptxuyuw8q
969969
create or replace transient table my_table As
970970
select asdf, Qwer, /* ; */
971971
(qwer2, -- ;
@@ -1026,13 +1026,13 @@ <h4 id="format_sql_file" class="doc_header"><code>format_sql_file</code><a href=
10261026
<div class="output_area">
10271027

10281028
<div class="output_subarea output_stream output_stdout output_text">
1029-
<pre>Something went wrong in file: /tmp/tmp5x3llo57
1029+
<pre>Something went wrong in file: /tmp/tmpwoud5teg
10301030
[WARNING] Identified CREATE keyword more than twice within the same query at lines [(1, 7)]
10311031
You may have forgotten a semicolon (;) to delimit the queries
10321032
[WARNING] Identified unbalanced parenthesis at lines [[3, 8]]
10331033
You should check your parenthesis
1034-
Aborting formatting for file /tmp/tmp5x3llo57
1035-
Aborting formatting for file /tmp/tmp5x3llo57
1034+
Aborting formatting for file /tmp/tmpwoud5teg
1035+
Aborting formatting for file /tmp/tmpwoud5teg
10361036
create or replace transient table my_table As
10371037
select asdf, Qwer, /* ; */
10381038
(qwer2, -- ;

0 commit comments

Comments
 (0)