1
0
Fork 0

Merging upstream version 11.7.1.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 15:52:09 +01:00
parent 0c053462ae
commit 8d96084fad
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
144 changed files with 44104 additions and 39367 deletions

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.clickhouse API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -128,128 +128,140 @@
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">time</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">decay</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="p">),</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="p">),</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="p">}</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="p">),</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">),</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">}</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="p">}</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">}</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="p">}</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">arg</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">)</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="p">)</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">arg</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="p">)</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="p">)</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">}</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="p">}</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">}</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">arg</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="p">)</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="p">)</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">arg</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="p">)</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="p">)</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -296,128 +308,140 @@
</span><span id="ClickHouse-47"><a href="#ClickHouse-47"><span class="linenos"> 47</span></a> <span class="n">time</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="ClickHouse-48"><a href="#ClickHouse-48"><span class="linenos"> 48</span></a> <span class="n">decay</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="ClickHouse-49"><a href="#ClickHouse-49"><span class="linenos"> 49</span></a> <span class="p">),</span>
</span><span id="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</span></a> <span class="p">),</span>
</span><span id="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</span></a> <span class="p">),</span>
</span><span id="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a> <span class="p">}</span>
</span><span id="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</span></a>
</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a> <span class="p">}</span>
</span><span id="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a>
</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a>
</span><span id="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-50"><a href="#ClickHouse-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="ClickHouse-51"><a href="#ClickHouse-51"><span class="linenos"> 51</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse-52"><a href="#ClickHouse-52"><span class="linenos"> 52</span></a> <span class="p">),</span>
</span><span id="ClickHouse-53"><a href="#ClickHouse-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="ClickHouse-54"><a href="#ClickHouse-54"><span class="linenos"> 54</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse-55"><a href="#ClickHouse-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
</span><span id="ClickHouse-56"><a href="#ClickHouse-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="ClickHouse-57"><a href="#ClickHouse-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="ClickHouse-58"><a href="#ClickHouse-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="ClickHouse-59"><a href="#ClickHouse-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse-60"><a href="#ClickHouse-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse-61"><a href="#ClickHouse-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="ClickHouse-62"><a href="#ClickHouse-62"><span class="linenos"> 62</span></a>
</span><span id="ClickHouse-63"><a href="#ClickHouse-63"><span class="linenos"> 63</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="ClickHouse-64"><a href="#ClickHouse-64"><span class="linenos"> 64</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-65"><a href="#ClickHouse-65"><span class="linenos"> 65</span></a>
</span><span id="ClickHouse-66"><a href="#ClickHouse-66"><span class="linenos"> 66</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-67"><a href="#ClickHouse-67"><span class="linenos"> 67</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="ClickHouse-68"><a href="#ClickHouse-68"><span class="linenos"> 68</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="ClickHouse-69"><a href="#ClickHouse-69"><span class="linenos"> 69</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="ClickHouse-70"><a href="#ClickHouse-70"><span class="linenos"> 70</span></a> <span class="p">}</span>
</span><span id="ClickHouse-71"><a href="#ClickHouse-71"><span class="linenos"> 71</span></a>
</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse-72"><a href="#ClickHouse-72"><span class="linenos"> 72</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-73"><a href="#ClickHouse-73"><span class="linenos"> 73</span></a>
</span><span id="ClickHouse-74"><a href="#ClickHouse-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-77"><a href="#ClickHouse-77"><span class="linenos"> 77</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a>
</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a>
</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a>
</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a>
</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a>
</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="ClickHouse-102"><a href="#ClickHouse-102"><span class="linenos">102</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</span></a>
</span><span id="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a>
</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a>
</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a>
</span><span id="ClickHouse-113"><a href="#ClickHouse-113"><span class="linenos">113</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-116"><a href="#ClickHouse-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-117"><a href="#ClickHouse-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-119"><a href="#ClickHouse-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-120"><a href="#ClickHouse-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-121"><a href="#ClickHouse-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-122"><a href="#ClickHouse-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-123"><a href="#ClickHouse-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="p">}</span>
</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a>
</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-133"><a href="#ClickHouse-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-135"><a href="#ClickHouse-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="p">}</span>
</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a>
</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a>
</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a> <span class="n">arg</span>
</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a> <span class="p">)</span>
</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a> <span class="p">)</span>
</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a> <span class="n">arg</span>
</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a> <span class="p">)</span>
</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="p">)</span>
</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a>
</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse-168"><a href="#ClickHouse-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a>
</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="ClickHouse-74"><a href="#ClickHouse-74"><span class="linenos"> 74</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-75"><a href="#ClickHouse-75"><span class="linenos"> 75</span></a>
</span><span id="ClickHouse-76"><a href="#ClickHouse-76"><span class="linenos"> 76</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse-77"><a href="#ClickHouse-77"><span class="linenos"> 77</span></a>
</span><span id="ClickHouse-78"><a href="#ClickHouse-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="ClickHouse-79"><a href="#ClickHouse-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse-80"><a href="#ClickHouse-80"><span class="linenos"> 80</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-81"><a href="#ClickHouse-81"><span class="linenos"> 81</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-82"><a href="#ClickHouse-82"><span class="linenos"> 82</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="ClickHouse-83"><a href="#ClickHouse-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse-84"><a href="#ClickHouse-84"><span class="linenos"> 84</span></a>
</span><span id="ClickHouse-85"><a href="#ClickHouse-85"><span class="linenos"> 85</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="ClickHouse-86"><a href="#ClickHouse-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="ClickHouse-87"><a href="#ClickHouse-87"><span class="linenos"> 87</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="ClickHouse-88"><a href="#ClickHouse-88"><span class="linenos"> 88</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="ClickHouse-89"><a href="#ClickHouse-89"><span class="linenos"> 89</span></a>
</span><span id="ClickHouse-90"><a href="#ClickHouse-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="ClickHouse-91"><a href="#ClickHouse-91"><span class="linenos"> 91</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-92"><a href="#ClickHouse-92"><span class="linenos"> 92</span></a>
</span><span id="ClickHouse-93"><a href="#ClickHouse-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse-94"><a href="#ClickHouse-94"><span class="linenos"> 94</span></a>
</span><span id="ClickHouse-95"><a href="#ClickHouse-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-96"><a href="#ClickHouse-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="ClickHouse-97"><a href="#ClickHouse-97"><span class="linenos"> 97</span></a>
</span><span id="ClickHouse-98"><a href="#ClickHouse-98"><span class="linenos"> 98</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="ClickHouse-99"><a href="#ClickHouse-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse-100"><a href="#ClickHouse-100"><span class="linenos">100</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="ClickHouse-101"><a href="#ClickHouse-101"><span class="linenos">101</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="ClickHouse-102"><a href="#ClickHouse-102"><span class="linenos">102</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="ClickHouse-103"><a href="#ClickHouse-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="ClickHouse-104"><a href="#ClickHouse-104"><span class="linenos">104</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="ClickHouse-105"><a href="#ClickHouse-105"><span class="linenos">105</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="ClickHouse-106"><a href="#ClickHouse-106"><span class="linenos">106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="ClickHouse-107"><a href="#ClickHouse-107"><span class="linenos">107</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="ClickHouse-108"><a href="#ClickHouse-108"><span class="linenos">108</span></a>
</span><span id="ClickHouse-109"><a href="#ClickHouse-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse-110"><a href="#ClickHouse-110"><span class="linenos">110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-111"><a href="#ClickHouse-111"><span class="linenos">111</span></a>
</span><span id="ClickHouse-112"><a href="#ClickHouse-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse-113"><a href="#ClickHouse-113"><span class="linenos">113</span></a>
</span><span id="ClickHouse-114"><a href="#ClickHouse-114"><span class="linenos">114</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="ClickHouse-115"><a href="#ClickHouse-115"><span class="linenos">115</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-116"><a href="#ClickHouse-116"><span class="linenos">116</span></a>
</span><span id="ClickHouse-117"><a href="#ClickHouse-117"><span class="linenos">117</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-118"><a href="#ClickHouse-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-119"><a href="#ClickHouse-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-120"><a href="#ClickHouse-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-121"><a href="#ClickHouse-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-122"><a href="#ClickHouse-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-123"><a href="#ClickHouse-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-124"><a href="#ClickHouse-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-125"><a href="#ClickHouse-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-126"><a href="#ClickHouse-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-127"><a href="#ClickHouse-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-128"><a href="#ClickHouse-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-129"><a href="#ClickHouse-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-130"><a href="#ClickHouse-130"><span class="linenos">130</span></a> <span class="p">}</span>
</span><span id="ClickHouse-131"><a href="#ClickHouse-131"><span class="linenos">131</span></a>
</span><span id="ClickHouse-132"><a href="#ClickHouse-132"><span class="linenos">132</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-133"><a href="#ClickHouse-133"><span class="linenos">133</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-134"><a href="#ClickHouse-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="ClickHouse-135"><a href="#ClickHouse-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-136"><a href="#ClickHouse-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-137"><a href="#ClickHouse-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-138"><a href="#ClickHouse-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-139"><a href="#ClickHouse-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse-140"><a href="#ClickHouse-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-141"><a href="#ClickHouse-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-142"><a href="#ClickHouse-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-143"><a href="#ClickHouse-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-144"><a href="#ClickHouse-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse-145"><a href="#ClickHouse-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse-146"><a href="#ClickHouse-146"><span class="linenos">146</span></a> <span class="p">}</span>
</span><span id="ClickHouse-147"><a href="#ClickHouse-147"><span class="linenos">147</span></a>
</span><span id="ClickHouse-148"><a href="#ClickHouse-148"><span class="linenos">148</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse-149"><a href="#ClickHouse-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse-150"><a href="#ClickHouse-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="ClickHouse-151"><a href="#ClickHouse-151"><span class="linenos">151</span></a> <span class="p">}</span>
</span><span id="ClickHouse-152"><a href="#ClickHouse-152"><span class="linenos">152</span></a>
</span><span id="ClickHouse-153"><a href="#ClickHouse-153"><span class="linenos">153</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse-154"><a href="#ClickHouse-154"><span class="linenos">154</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse-155"><a href="#ClickHouse-155"><span class="linenos">155</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse-156"><a href="#ClickHouse-156"><span class="linenos">156</span></a>
</span><span id="ClickHouse-157"><a href="#ClickHouse-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="ClickHouse-158"><a href="#ClickHouse-158"><span class="linenos">158</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="ClickHouse-159"><a href="#ClickHouse-159"><span class="linenos">159</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="ClickHouse-160"><a href="#ClickHouse-160"><span class="linenos">160</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse-161"><a href="#ClickHouse-161"><span class="linenos">161</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse-162"><a href="#ClickHouse-162"><span class="linenos">162</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse-163"><a href="#ClickHouse-163"><span class="linenos">163</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse-164"><a href="#ClickHouse-164"><span class="linenos">164</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse-165"><a href="#ClickHouse-165"><span class="linenos">165</span></a> <span class="n">arg</span>
</span><span id="ClickHouse-166"><a href="#ClickHouse-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="ClickHouse-167"><a href="#ClickHouse-167"><span class="linenos">167</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse-168"><a href="#ClickHouse-168"><span class="linenos">168</span></a> <span class="p">)</span>
</span><span id="ClickHouse-169"><a href="#ClickHouse-169"><span class="linenos">169</span></a> <span class="p">)</span>
</span><span id="ClickHouse-170"><a href="#ClickHouse-170"><span class="linenos">170</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse-171"><a href="#ClickHouse-171"><span class="linenos">171</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse-172"><a href="#ClickHouse-172"><span class="linenos">172</span></a> <span class="n">arg</span>
</span><span id="ClickHouse-173"><a href="#ClickHouse-173"><span class="linenos">173</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="ClickHouse-174"><a href="#ClickHouse-174"><span class="linenos">174</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse-175"><a href="#ClickHouse-175"><span class="linenos">175</span></a> <span class="p">)</span>
</span><span id="ClickHouse-176"><a href="#ClickHouse-176"><span class="linenos">176</span></a> <span class="p">)</span>
</span><span id="ClickHouse-177"><a href="#ClickHouse-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="ClickHouse-178"><a href="#ClickHouse-178"><span class="linenos">178</span></a>
</span><span id="ClickHouse-179"><a href="#ClickHouse-179"><span class="linenos">179</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse-180"><a href="#ClickHouse-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse-181"><a href="#ClickHouse-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse-182"><a href="#ClickHouse-182"><span class="linenos">182</span></a>
</span><span id="ClickHouse-183"><a href="#ClickHouse-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -505,65 +529,69 @@
</span><span id="ClickHouse.Parser-47"><a href="#ClickHouse.Parser-47"><span class="linenos"> 47</span></a> <span class="n">time</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-48"><a href="#ClickHouse.Parser-48"><span class="linenos"> 48</span></a> <span class="n">decay</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-49"><a href="#ClickHouse.Parser-49"><span class="linenos"> 49</span></a> <span class="p">),</span>
</span><span id="ClickHouse.Parser-50"><a href="#ClickHouse.Parser-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-51"><a href="#ClickHouse.Parser-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-52"><a href="#ClickHouse.Parser-52"><span class="linenos"> 52</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-53"><a href="#ClickHouse.Parser-53"><span class="linenos"> 53</span></a> <span class="p">),</span>
</span><span id="ClickHouse.Parser-54"><a href="#ClickHouse.Parser-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-55"><a href="#ClickHouse.Parser-55"><span class="linenos"> 55</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-56"><a href="#ClickHouse.Parser-56"><span class="linenos"> 56</span></a> <span class="p">),</span>
</span><span id="ClickHouse.Parser-57"><a href="#ClickHouse.Parser-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-58"><a href="#ClickHouse.Parser-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-59"><a href="#ClickHouse.Parser-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-60"><a href="#ClickHouse.Parser-60"><span class="linenos"> 60</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Parser-61"><a href="#ClickHouse.Parser-61"><span class="linenos"> 61</span></a>
</span><span id="ClickHouse.Parser-62"><a href="#ClickHouse.Parser-62"><span class="linenos"> 62</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Parser-63"><a href="#ClickHouse.Parser-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-64"><a href="#ClickHouse.Parser-64"><span class="linenos"> 64</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-65"><a href="#ClickHouse.Parser-65"><span class="linenos"> 65</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-66"><a href="#ClickHouse.Parser-66"><span class="linenos"> 66</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Parser-67"><a href="#ClickHouse.Parser-67"><span class="linenos"> 67</span></a>
</span><span id="ClickHouse.Parser-68"><a href="#ClickHouse.Parser-68"><span class="linenos"> 68</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Parser-69"><a href="#ClickHouse.Parser-69"><span class="linenos"> 69</span></a>
</span><span id="ClickHouse.Parser-70"><a href="#ClickHouse.Parser-70"><span class="linenos"> 70</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Parser-50"><a href="#ClickHouse.Parser-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;GROUPUNIQARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-51"><a href="#ClickHouse.Parser-51"><span class="linenos"> 51</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-52"><a href="#ClickHouse.Parser-52"><span class="linenos"> 52</span></a> <span class="p">),</span>
</span><span id="ClickHouse.Parser-53"><a href="#ClickHouse.Parser-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-54"><a href="#ClickHouse.Parser-54"><span class="linenos"> 54</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">bins</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-55"><a href="#ClickHouse.Parser-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
</span><span id="ClickHouse.Parser-56"><a href="#ClickHouse.Parser-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MAP&quot;</span><span class="p">:</span> <span class="n">parse_var_map</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-57"><a href="#ClickHouse.Parser-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-58"><a href="#ClickHouse.Parser-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;QUANTILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">params</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-59"><a href="#ClickHouse.Parser-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;QUANTILES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-60"><a href="#ClickHouse.Parser-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;QUANTILEIF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">params</span><span class="p">,</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">(</span><span class="n">parameters</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-61"><a href="#ClickHouse.Parser-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Parser-62"><a href="#ClickHouse.Parser-62"><span class="linenos"> 62</span></a>
</span><span id="ClickHouse.Parser-63"><a href="#ClickHouse.Parser-63"><span class="linenos"> 63</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="ClickHouse.Parser-64"><a href="#ClickHouse.Parser-64"><span class="linenos"> 64</span></a> <span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-65"><a href="#ClickHouse.Parser-65"><span class="linenos"> 65</span></a>
</span><span id="ClickHouse.Parser-66"><a href="#ClickHouse.Parser-66"><span class="linenos"> 66</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Parser-67"><a href="#ClickHouse.Parser-67"><span class="linenos"> 67</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">,</span>
</span><span id="ClickHouse.Parser-68"><a href="#ClickHouse.Parser-68"><span class="linenos"> 68</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOBAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-69"><a href="#ClickHouse.Parser-69"><span class="linenos"> 69</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">is_global</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="ClickHouse.Parser-70"><a href="#ClickHouse.Parser-70"><span class="linenos"> 70</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Parser-71"><a href="#ClickHouse.Parser-71"><span class="linenos"> 71</span></a>
</span><span id="ClickHouse.Parser-72"><a href="#ClickHouse.Parser-72"><span class="linenos"> 72</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse.Parser-72"><a href="#ClickHouse.Parser-72"><span class="linenos"> 72</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Parser-73"><a href="#ClickHouse.Parser-73"><span class="linenos"> 73</span></a>
</span><span id="ClickHouse.Parser-74"><a href="#ClickHouse.Parser-74"><span class="linenos"> 74</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-75"><a href="#ClickHouse.Parser-75"><span class="linenos"> 75</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse.Parser-76"><a href="#ClickHouse.Parser-76"><span class="linenos"> 76</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-77"><a href="#ClickHouse.Parser-77"><span class="linenos"> 77</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-78"><a href="#ClickHouse.Parser-78"><span class="linenos"> 78</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-79"><a href="#ClickHouse.Parser-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse.Parser-80"><a href="#ClickHouse.Parser-80"><span class="linenos"> 80</span></a>
</span><span id="ClickHouse.Parser-81"><a href="#ClickHouse.Parser-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-82"><a href="#ClickHouse.Parser-82"><span class="linenos"> 82</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="ClickHouse.Parser-83"><a href="#ClickHouse.Parser-83"><span class="linenos"> 83</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="ClickHouse.Parser-84"><a href="#ClickHouse.Parser-84"><span class="linenos"> 84</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-85"><a href="#ClickHouse.Parser-85"><span class="linenos"> 85</span></a>
</span><span id="ClickHouse.Parser-86"><a href="#ClickHouse.Parser-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="ClickHouse.Parser-87"><a href="#ClickHouse.Parser-87"><span class="linenos"> 87</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-88"><a href="#ClickHouse.Parser-88"><span class="linenos"> 88</span></a>
</span><span id="ClickHouse.Parser-89"><a href="#ClickHouse.Parser-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse.Parser-90"><a href="#ClickHouse.Parser-90"><span class="linenos"> 90</span></a>
</span><span id="ClickHouse.Parser-91"><a href="#ClickHouse.Parser-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-92"><a href="#ClickHouse.Parser-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-93"><a href="#ClickHouse.Parser-93"><span class="linenos"> 93</span></a>
</span><span id="ClickHouse.Parser-94"><a href="#ClickHouse.Parser-94"><span class="linenos"> 94</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="ClickHouse.Parser-95"><a href="#ClickHouse.Parser-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-96"><a href="#ClickHouse.Parser-96"><span class="linenos"> 96</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="ClickHouse.Parser-97"><a href="#ClickHouse.Parser-97"><span class="linenos"> 97</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-98"><a href="#ClickHouse.Parser-98"><span class="linenos"> 98</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="ClickHouse.Parser-99"><a href="#ClickHouse.Parser-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="ClickHouse.Parser-100"><a href="#ClickHouse.Parser-100"><span class="linenos">100</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-101"><a href="#ClickHouse.Parser-101"><span class="linenos">101</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="ClickHouse.Parser-102"><a href="#ClickHouse.Parser-102"><span class="linenos">102</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-103"><a href="#ClickHouse.Parser-103"><span class="linenos">103</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</span></a>
</span><span id="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a>
</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-74"><a href="#ClickHouse.Parser-74"><span class="linenos"> 74</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">}</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Parser-75"><a href="#ClickHouse.Parser-75"><span class="linenos"> 75</span></a>
</span><span id="ClickHouse.Parser-76"><a href="#ClickHouse.Parser-76"><span class="linenos"> 76</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse.Parser-77"><a href="#ClickHouse.Parser-77"><span class="linenos"> 77</span></a>
</span><span id="ClickHouse.Parser-78"><a href="#ClickHouse.Parser-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-79"><a href="#ClickHouse.Parser-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">is_global</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse.Parser-80"><a href="#ClickHouse.Parser-80"><span class="linenos"> 80</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-81"><a href="#ClickHouse.Parser-81"><span class="linenos"> 81</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-82"><a href="#ClickHouse.Parser-82"><span class="linenos"> 82</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;is_global&quot;</span><span class="p">,</span> <span class="n">is_global</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-83"><a href="#ClickHouse.Parser-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse.Parser-84"><a href="#ClickHouse.Parser-84"><span class="linenos"> 84</span></a>
</span><span id="ClickHouse.Parser-85"><a href="#ClickHouse.Parser-85"><span class="linenos"> 85</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="ClickHouse.Parser-86"><a href="#ClickHouse.Parser-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="ClickHouse.Parser-87"><a href="#ClickHouse.Parser-87"><span class="linenos"> 87</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="ClickHouse.Parser-88"><a href="#ClickHouse.Parser-88"><span class="linenos"> 88</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-89"><a href="#ClickHouse.Parser-89"><span class="linenos"> 89</span></a>
</span><span id="ClickHouse.Parser-90"><a href="#ClickHouse.Parser-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">):</span>
</span><span id="ClickHouse.Parser-91"><a href="#ClickHouse.Parser-91"><span class="linenos"> 91</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-92"><a href="#ClickHouse.Parser-92"><span class="linenos"> 92</span></a>
</span><span id="ClickHouse.Parser-93"><a href="#ClickHouse.Parser-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="ClickHouse.Parser-94"><a href="#ClickHouse.Parser-94"><span class="linenos"> 94</span></a>
</span><span id="ClickHouse.Parser-95"><a href="#ClickHouse.Parser-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-96"><a href="#ClickHouse.Parser-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(</span><span class="n">haystack_first</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-97"><a href="#ClickHouse.Parser-97"><span class="linenos"> 97</span></a>
</span><span id="ClickHouse.Parser-98"><a href="#ClickHouse.Parser-98"><span class="linenos"> 98</span></a> <span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/with/</span>
</span><span id="ClickHouse.Parser-99"><a href="#ClickHouse.Parser-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-100"><a href="#ClickHouse.Parser-100"><span class="linenos">100</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="ClickHouse.Parser-101"><a href="#ClickHouse.Parser-101"><span class="linenos">101</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-102"><a href="#ClickHouse.Parser-102"><span class="linenos">102</span></a> <span class="c1"># WITH &lt;identifier&gt; AS &lt;subquery expression&gt;</span>
</span><span id="ClickHouse.Parser-103"><a href="#ClickHouse.Parser-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="ClickHouse.Parser-104"><a href="#ClickHouse.Parser-104"><span class="linenos">104</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="ClickHouse.Parser-105"><a href="#ClickHouse.Parser-105"><span class="linenos">105</span></a> <span class="c1"># WITH &lt;expression&gt; AS &lt;identifier&gt;</span>
</span><span id="ClickHouse.Parser-106"><a href="#ClickHouse.Parser-106"><span class="linenos">106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-107"><a href="#ClickHouse.Parser-107"><span class="linenos">107</span></a> <span class="n">statement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="ClickHouse.Parser-108"><a href="#ClickHouse.Parser-108"><span class="linenos">108</span></a>
</span><span id="ClickHouse.Parser-109"><a href="#ClickHouse.Parser-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">statement</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Parser-110"><a href="#ClickHouse.Parser-110"><span class="linenos">110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Parser-111"><a href="#ClickHouse.Parser-111"><span class="linenos">111</span></a>
</span><span id="ClickHouse.Parser-112"><a href="#ClickHouse.Parser-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">statement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">statement</span> <span class="ow">and</span> <span class="n">statement</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@ -620,68 +648,76 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-110"><a href="#ClickHouse.Generator-110"><span class="linenos">110</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="ClickHouse.Generator-111"><a href="#ClickHouse.Generator-111"><span class="linenos">111</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-112"><a href="#ClickHouse.Generator-112"><span class="linenos">112</span></a>
</span><span id="ClickHouse.Generator-113"><a href="#ClickHouse.Generator-113"><span class="linenos">113</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Generator-114"><a href="#ClickHouse.Generator-114"><span class="linenos">114</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Generator-115"><a href="#ClickHouse.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-116"><a href="#ClickHouse.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-117"><a href="#ClickHouse.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-118"><a href="#ClickHouse.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-119"><a href="#ClickHouse.Generator-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-120"><a href="#ClickHouse.Generator-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-121"><a href="#ClickHouse.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-122"><a href="#ClickHouse.Generator-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-123"><a href="#ClickHouse.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-124"><a href="#ClickHouse.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-125"><a href="#ClickHouse.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-126"><a href="#ClickHouse.Generator-126"><span class="linenos">126</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Generator-127"><a href="#ClickHouse.Generator-127"><span class="linenos">127</span></a>
</span><span id="ClickHouse.Generator-128"><a href="#ClickHouse.Generator-128"><span class="linenos">128</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Generator-129"><a href="#ClickHouse.Generator-129"><span class="linenos">129</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Generator-130"><a href="#ClickHouse.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-131"><a href="#ClickHouse.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-132"><a href="#ClickHouse.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-133"><a href="#ClickHouse.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-134"><a href="#ClickHouse.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-135"><a href="#ClickHouse.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse.Generator-136"><a href="#ClickHouse.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-137"><a href="#ClickHouse.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-138"><a href="#ClickHouse.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-139"><a href="#ClickHouse.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-140"><a href="#ClickHouse.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse.Generator-141"><a href="#ClickHouse.Generator-141"><span class="linenos">141</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Generator-142"><a href="#ClickHouse.Generator-142"><span class="linenos">142</span></a>
</span><span id="ClickHouse.Generator-143"><a href="#ClickHouse.Generator-143"><span class="linenos">143</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse.Generator-144"><a href="#ClickHouse.Generator-144"><span class="linenos">144</span></a>
</span><span id="ClickHouse.Generator-145"><a href="#ClickHouse.Generator-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-146"><a href="#ClickHouse.Generator-146"><span class="linenos">146</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-147"><a href="#ClickHouse.Generator-147"><span class="linenos">147</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-148"><a href="#ClickHouse.Generator-148"><span class="linenos">148</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse.Generator-149"><a href="#ClickHouse.Generator-149"><span class="linenos">149</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse.Generator-150"><a href="#ClickHouse.Generator-150"><span class="linenos">150</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator-151"><a href="#ClickHouse.Generator-151"><span class="linenos">151</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-152"><a href="#ClickHouse.Generator-152"><span class="linenos">152</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-153"><a href="#ClickHouse.Generator-153"><span class="linenos">153</span></a> <span class="n">arg</span>
</span><span id="ClickHouse.Generator-154"><a href="#ClickHouse.Generator-154"><span class="linenos">154</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-155"><a href="#ClickHouse.Generator-155"><span class="linenos">155</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse.Generator-156"><a href="#ClickHouse.Generator-156"><span class="linenos">156</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-157"><a href="#ClickHouse.Generator-157"><span class="linenos">157</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-158"><a href="#ClickHouse.Generator-158"><span class="linenos">158</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-159"><a href="#ClickHouse.Generator-159"><span class="linenos">159</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-160"><a href="#ClickHouse.Generator-160"><span class="linenos">160</span></a> <span class="n">arg</span>
</span><span id="ClickHouse.Generator-161"><a href="#ClickHouse.Generator-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-162"><a href="#ClickHouse.Generator-162"><span class="linenos">162</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse.Generator-163"><a href="#ClickHouse.Generator-163"><span class="linenos">163</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-164"><a href="#ClickHouse.Generator-164"><span class="linenos">164</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-165"><a href="#ClickHouse.Generator-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="ClickHouse.Generator-166"><a href="#ClickHouse.Generator-166"><span class="linenos">166</span></a>
</span><span id="ClickHouse.Generator-167"><a href="#ClickHouse.Generator-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator-168"><a href="#ClickHouse.Generator-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Generator-169"><a href="#ClickHouse.Generator-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-170"><a href="#ClickHouse.Generator-170"><span class="linenos">170</span></a>
</span><span id="ClickHouse.Generator-171"><a href="#ClickHouse.Generator-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator-114"><a href="#ClickHouse.Generator-114"><span class="linenos">114</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="ClickHouse.Generator-115"><a href="#ClickHouse.Generator-115"><span class="linenos">115</span></a> <span class="n">STRUCT_DELIMITER</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;)&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-116"><a href="#ClickHouse.Generator-116"><span class="linenos">116</span></a>
</span><span id="ClickHouse.Generator-117"><a href="#ClickHouse.Generator-117"><span class="linenos">117</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Generator-118"><a href="#ClickHouse.Generator-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Generator-119"><a href="#ClickHouse.Generator-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">:</span> <span class="s2">&quot;Nullable&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-120"><a href="#ClickHouse.Generator-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;DateTime64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-121"><a href="#ClickHouse.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">:</span> <span class="s2">&quot;Map&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-122"><a href="#ClickHouse.Generator-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-123"><a href="#ClickHouse.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">:</span> <span class="s2">&quot;Tuple&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-124"><a href="#ClickHouse.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;Int8&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-125"><a href="#ClickHouse.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;Int16&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-126"><a href="#ClickHouse.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;Int32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-127"><a href="#ClickHouse.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;Int64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-128"><a href="#ClickHouse.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;Float32&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-129"><a href="#ClickHouse.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;Float64&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-130"><a href="#ClickHouse.Generator-130"><span class="linenos">130</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Generator-131"><a href="#ClickHouse.Generator-131"><span class="linenos">131</span></a>
</span><span id="ClickHouse.Generator-132"><a href="#ClickHouse.Generator-132"><span class="linenos">132</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Generator-133"><a href="#ClickHouse.Generator-133"><span class="linenos">133</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Generator-134"><a href="#ClickHouse.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">:</span> <span class="n">inline_array_sql</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-135"><a href="#ClickHouse.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExponentialTimeDecayedAvg</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;exponentialTimeDecayedAvg</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;decay&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;this&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-136"><a href="#ClickHouse.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Final</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> FINAL&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-137"><a href="#ClickHouse.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupUniqArray</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;groupUniqArray</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;size&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-138"><a href="#ClickHouse.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Histogram</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;histogram</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;bins&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-139"><a href="#ClickHouse.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse.Generator-140"><a href="#ClickHouse.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantile</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;quantile&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-141"><a href="#ClickHouse.Generator-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantiles</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantiles</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-142"><a href="#ClickHouse.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">QuantileIf</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;quantileIf</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_param_args_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;parameters&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expressions&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-143"><a href="#ClickHouse.Generator-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;match(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-144"><a href="#ClickHouse.Generator-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;position(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;substr&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;position&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-145"><a href="#ClickHouse.Generator-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">_lower_func</span><span class="p">(</span><span class="n">var_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">)),</span>
</span><span id="ClickHouse.Generator-146"><a href="#ClickHouse.Generator-146"><span class="linenos">146</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Generator-147"><a href="#ClickHouse.Generator-147"><span class="linenos">147</span></a>
</span><span id="ClickHouse.Generator-148"><a href="#ClickHouse.Generator-148"><span class="linenos">148</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ClickHouse.Generator-149"><a href="#ClickHouse.Generator-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="ClickHouse.Generator-150"><a href="#ClickHouse.Generator-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-151"><a href="#ClickHouse.Generator-151"><span class="linenos">151</span></a> <span class="p">}</span>
</span><span id="ClickHouse.Generator-152"><a href="#ClickHouse.Generator-152"><span class="linenos">152</span></a>
</span><span id="ClickHouse.Generator-153"><a href="#ClickHouse.Generator-153"><span class="linenos">153</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse.Generator-154"><a href="#ClickHouse.Generator-154"><span class="linenos">154</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="ClickHouse.Generator-155"><a href="#ClickHouse.Generator-155"><span class="linenos">155</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="ClickHouse.Generator-156"><a href="#ClickHouse.Generator-156"><span class="linenos">156</span></a>
</span><span id="ClickHouse.Generator-157"><a href="#ClickHouse.Generator-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">_param_args_sql</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-158"><a href="#ClickHouse.Generator-158"><span class="linenos">158</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-159"><a href="#ClickHouse.Generator-159"><span class="linenos">159</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="ClickHouse.Generator-160"><a href="#ClickHouse.Generator-160"><span class="linenos">160</span></a> <span class="n">param_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse.Generator-161"><a href="#ClickHouse.Generator-161"><span class="linenos">161</span></a> <span class="n">arg_names</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
</span><span id="ClickHouse.Generator-162"><a href="#ClickHouse.Generator-162"><span class="linenos">162</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator-163"><a href="#ClickHouse.Generator-163"><span class="linenos">163</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-164"><a href="#ClickHouse.Generator-164"><span class="linenos">164</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-165"><a href="#ClickHouse.Generator-165"><span class="linenos">165</span></a> <span class="n">arg</span>
</span><span id="ClickHouse.Generator-166"><a href="#ClickHouse.Generator-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">param_names</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-167"><a href="#ClickHouse.Generator-167"><span class="linenos">167</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse.Generator-168"><a href="#ClickHouse.Generator-168"><span class="linenos">168</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-169"><a href="#ClickHouse.Generator-169"><span class="linenos">169</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-170"><a href="#ClickHouse.Generator-170"><span class="linenos">170</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-171"><a href="#ClickHouse.Generator-171"><span class="linenos">171</span></a> <span class="o">*</span><span class="p">(</span>
</span><span id="ClickHouse.Generator-172"><a href="#ClickHouse.Generator-172"><span class="linenos">172</span></a> <span class="n">arg</span>
</span><span id="ClickHouse.Generator-173"><a href="#ClickHouse.Generator-173"><span class="linenos">173</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">arg_names</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-174"><a href="#ClickHouse.Generator-174"><span class="linenos">174</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
</span><span id="ClickHouse.Generator-175"><a href="#ClickHouse.Generator-175"><span class="linenos">175</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-176"><a href="#ClickHouse.Generator-176"><span class="linenos">176</span></a> <span class="p">)</span>
</span><span id="ClickHouse.Generator-177"><a href="#ClickHouse.Generator-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)(</span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="ClickHouse.Generator-178"><a href="#ClickHouse.Generator-178"><span class="linenos">178</span></a>
</span><span id="ClickHouse.Generator-179"><a href="#ClickHouse.Generator-179"><span class="linenos">179</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator-180"><a href="#ClickHouse.Generator-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Generator-181"><a href="#ClickHouse.Generator-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator-182"><a href="#ClickHouse.Generator-182"><span class="linenos">182</span></a>
</span><span id="ClickHouse.Generator-183"><a href="#ClickHouse.Generator-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -740,11 +776,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#ClickHouse.Generator.cte_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-167"><a href="#ClickHouse.Generator.cte_sql-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator.cte_sql-168"><a href="#ClickHouse.Generator.cte_sql-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Generator.cte_sql-169"><a href="#ClickHouse.Generator.cte_sql-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator.cte_sql-170"><a href="#ClickHouse.Generator.cte_sql-170"><span class="linenos">170</span></a>
</span><span id="ClickHouse.Generator.cte_sql-171"><a href="#ClickHouse.Generator.cte_sql-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ClickHouse.Generator.cte_sql-179"><a href="#ClickHouse.Generator.cte_sql-179"><span class="linenos">179</span></a> <span class="k">def</span> <span class="nf">cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ClickHouse.Generator.cte_sql-180"><a href="#ClickHouse.Generator.cte_sql-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="ClickHouse.Generator.cte_sql-181"><a href="#ClickHouse.Generator.cte_sql-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="ClickHouse.Generator.cte_sql-182"><a href="#ClickHouse.Generator.cte_sql-182"><span class="linenos">182</span></a>
</span><span id="ClickHouse.Generator.cte_sql-183"><a href="#ClickHouse.Generator.cte_sql-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cte_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -787,6 +823,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="ClickHouse.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="ClickHouse.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="ClickHouse.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="ClickHouse.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="ClickHouse.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="ClickHouse.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -798,6 +835,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="ClickHouse.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="ClickHouse.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="ClickHouse.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="ClickHouse.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="ClickHouse.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="ClickHouse.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -823,6 +861,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="ClickHouse.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="ClickHouse.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="ClickHouse.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="ClickHouse.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="ClickHouse.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="ClickHouse.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.databricks API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -88,31 +88,37 @@
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="k">class</span> <span class="nc">Databricks</span><span class="p">(</span><span class="n">Spark</span><span class="p">):</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="p">}</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a>
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a> <span class="p">}</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="p">}</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="p">}</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="p">}</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="p">}</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="p">}</span>
</span></pre></div>
@ -130,31 +136,37 @@
<a class="headerlink" href="#Databricks"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks-11"><a href="#Databricks-11"><span class="linenos">11</span></a><span class="k">class</span> <span class="nc">Databricks</span><span class="p">(</span><span class="n">Spark</span><span class="p">):</span>
</span><span id="Databricks-12"><a href="#Databricks-12"><span class="linenos">12</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Databricks-13"><a href="#Databricks-13"><span class="linenos">13</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-14"><a href="#Databricks-14"><span class="linenos">14</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Databricks-15"><a href="#Databricks-15"><span class="linenos">15</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks-16"><a href="#Databricks-16"><span class="linenos">16</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks-17"><a href="#Databricks-17"><span class="linenos">17</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="Databricks-18"><a href="#Databricks-18"><span class="linenos">18</span></a> <span class="p">}</span>
</span><span id="Databricks-19"><a href="#Databricks-19"><span class="linenos">19</span></a>
</span><span id="Databricks-20"><a href="#Databricks-20"><span class="linenos">20</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Databricks-13"><a href="#Databricks-13"><span class="linenos">13</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Databricks-14"><a href="#Databricks-14"><span class="linenos">14</span></a>
</span><span id="Databricks-15"><a href="#Databricks-15"><span class="linenos">15</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-16"><a href="#Databricks-16"><span class="linenos">16</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Databricks-17"><a href="#Databricks-17"><span class="linenos">17</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks-18"><a href="#Databricks-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks-19"><a href="#Databricks-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="Databricks-20"><a href="#Databricks-20"><span class="linenos">20</span></a> <span class="p">}</span>
</span><span id="Databricks-21"><a href="#Databricks-21"><span class="linenos">21</span></a>
</span><span id="Databricks-22"><a href="#Databricks-22"><span class="linenos">22</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Databricks-23"><a href="#Databricks-23"><span class="linenos">23</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-24"><a href="#Databricks-24"><span class="linenos">24</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Databricks-25"><a href="#Databricks-25"><span class="linenos">25</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-26"><a href="#Databricks-26"><span class="linenos">26</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-27"><a href="#Databricks-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Databricks-28"><a href="#Databricks-28"><span class="linenos">28</span></a> <span class="p">}</span>
</span><span id="Databricks-29"><a href="#Databricks-29"><span class="linenos">29</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="Databricks-30"><a href="#Databricks-30"><span class="linenos">30</span></a>
</span><span id="Databricks-31"><a href="#Databricks-31"><span class="linenos">31</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span><span id="Databricks-32"><a href="#Databricks-32"><span class="linenos">32</span></a>
</span><span id="Databricks-33"><a href="#Databricks-33"><span class="linenos">33</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Databricks-34"><a href="#Databricks-34"><span class="linenos">34</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-35"><a href="#Databricks-35"><span class="linenos">35</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="Databricks-36"><a href="#Databricks-36"><span class="linenos">36</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="Databricks-37"><a href="#Databricks-37"><span class="linenos">37</span></a> <span class="p">}</span>
</span><span id="Databricks-22"><a href="#Databricks-22"><span class="linenos">22</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-23"><a href="#Databricks-23"><span class="linenos">23</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
</span><span id="Databricks-24"><a href="#Databricks-24"><span class="linenos">24</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="Databricks-25"><a href="#Databricks-25"><span class="linenos">25</span></a> <span class="p">}</span>
</span><span id="Databricks-26"><a href="#Databricks-26"><span class="linenos">26</span></a>
</span><span id="Databricks-27"><a href="#Databricks-27"><span class="linenos">27</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Databricks-28"><a href="#Databricks-28"><span class="linenos">28</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-29"><a href="#Databricks-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Databricks-30"><a href="#Databricks-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-31"><a href="#Databricks-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-32"><a href="#Databricks-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
</span><span id="Databricks-33"><a href="#Databricks-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Databricks-34"><a href="#Databricks-34"><span class="linenos">34</span></a> <span class="p">}</span>
</span><span id="Databricks-35"><a href="#Databricks-35"><span class="linenos">35</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="Databricks-36"><a href="#Databricks-36"><span class="linenos">36</span></a>
</span><span id="Databricks-37"><a href="#Databricks-37"><span class="linenos">37</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span><span id="Databricks-38"><a href="#Databricks-38"><span class="linenos">38</span></a>
</span><span id="Databricks-39"><a href="#Databricks-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Databricks-40"><a href="#Databricks-40"><span class="linenos">40</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks-41"><a href="#Databricks-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="Databricks-42"><a href="#Databricks-42"><span class="linenos">42</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="Databricks-43"><a href="#Databricks-43"><span class="linenos">43</span></a> <span class="p">}</span>
</span></pre></div>
@ -190,14 +202,19 @@
</div>
<a class="headerlink" href="#Databricks.Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Parser-12"><a href="#Databricks.Parser-12"><span class="linenos">12</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Databricks.Parser-13"><a href="#Databricks.Parser-13"><span class="linenos">13</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Parser-14"><a href="#Databricks.Parser-14"><span class="linenos">14</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Databricks.Parser-15"><a href="#Databricks.Parser-15"><span class="linenos">15</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks.Parser-16"><a href="#Databricks.Parser-16"><span class="linenos">16</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks.Parser-17"><a href="#Databricks.Parser-17"><span class="linenos">17</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="Databricks.Parser-18"><a href="#Databricks.Parser-18"><span class="linenos">18</span></a> <span class="p">}</span>
</span><span id="Databricks.Parser-19"><a href="#Databricks.Parser-19"><span class="linenos">19</span></a>
</span><span id="Databricks.Parser-20"><a href="#Databricks.Parser-20"><span class="linenos">20</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Databricks.Parser-13"><a href="#Databricks.Parser-13"><span class="linenos">13</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Databricks.Parser-14"><a href="#Databricks.Parser-14"><span class="linenos">14</span></a>
</span><span id="Databricks.Parser-15"><a href="#Databricks.Parser-15"><span class="linenos">15</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Parser-16"><a href="#Databricks.Parser-16"><span class="linenos">16</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Databricks.Parser-17"><a href="#Databricks.Parser-17"><span class="linenos">17</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks.Parser-18"><a href="#Databricks.Parser-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">),</span>
</span><span id="Databricks.Parser-19"><a href="#Databricks.Parser-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">parse_date_delta</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">),</span>
</span><span id="Databricks.Parser-20"><a href="#Databricks.Parser-20"><span class="linenos">20</span></a> <span class="p">}</span>
</span><span id="Databricks.Parser-21"><a href="#Databricks.Parser-21"><span class="linenos">21</span></a>
</span><span id="Databricks.Parser-22"><a href="#Databricks.Parser-22"><span class="linenos">22</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Parser-23"><a href="#Databricks.Parser-23"><span class="linenos">23</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
</span><span id="Databricks.Parser-24"><a href="#Databricks.Parser-24"><span class="linenos">24</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="Databricks.Parser-25"><a href="#Databricks.Parser-25"><span class="linenos">25</span></a> <span class="p">}</span>
</span></pre></div>
@ -254,16 +271,17 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Databricks.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Generator-22"><a href="#Databricks.Generator-22"><span class="linenos">22</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Databricks.Generator-23"><a href="#Databricks.Generator-23"><span class="linenos">23</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Generator-24"><a href="#Databricks.Generator-24"><span class="linenos">24</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Databricks.Generator-25"><a href="#Databricks.Generator-25"><span class="linenos">25</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-26"><a href="#Databricks.Generator-26"><span class="linenos">26</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-27"><a href="#Databricks.Generator-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Databricks.Generator-28"><a href="#Databricks.Generator-28"><span class="linenos">28</span></a> <span class="p">}</span>
</span><span id="Databricks.Generator-29"><a href="#Databricks.Generator-29"><span class="linenos">29</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="Databricks.Generator-30"><a href="#Databricks.Generator-30"><span class="linenos">30</span></a>
</span><span id="Databricks.Generator-31"><a href="#Databricks.Generator-31"><span class="linenos">31</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Generator-27"><a href="#Databricks.Generator-27"><span class="linenos">27</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Databricks.Generator-28"><a href="#Databricks.Generator-28"><span class="linenos">28</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Generator-29"><a href="#Databricks.Generator-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Databricks.Generator-30"><a href="#Databricks.Generator-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-31"><a href="#Databricks.Generator-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-32"><a href="#Databricks.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
</span><span id="Databricks.Generator-33"><a href="#Databricks.Generator-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Databricks.Generator-34"><a href="#Databricks.Generator-34"><span class="linenos">34</span></a> <span class="p">}</span>
</span><span id="Databricks.Generator-35"><a href="#Databricks.Generator-35"><span class="linenos">35</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
</span><span id="Databricks.Generator-36"><a href="#Databricks.Generator-36"><span class="linenos">36</span></a>
</span><span id="Databricks.Generator-37"><a href="#Databricks.Generator-37"><span class="linenos">37</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span></pre></div>
@ -348,6 +366,7 @@ Default: True</li>
<dd id="Databricks.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="Databricks.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="Databricks.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Databricks.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Databricks.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Databricks.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
<dd id="Databricks.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
@ -358,6 +377,7 @@ Default: True</li>
<dd id="Databricks.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="Databricks.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="Databricks.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="Databricks.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="Databricks.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="Databricks.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="Databricks.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -382,6 +402,7 @@ Default: True</li>
<dd id="Databricks.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="Databricks.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="Databricks.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="Databricks.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="Databricks.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="Databricks.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="Databricks.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
@ -559,11 +580,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Databricks.Tokenizer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Tokenizer-33"><a href="#Databricks.Tokenizer-33"><span class="linenos">33</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Databricks.Tokenizer-34"><a href="#Databricks.Tokenizer-34"><span class="linenos">34</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Tokenizer-35"><a href="#Databricks.Tokenizer-35"><span class="linenos">35</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="Databricks.Tokenizer-36"><a href="#Databricks.Tokenizer-36"><span class="linenos">36</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="Databricks.Tokenizer-37"><a href="#Databricks.Tokenizer-37"><span class="linenos">37</span></a> <span class="p">}</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Tokenizer-39"><a href="#Databricks.Tokenizer-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Databricks.Tokenizer-40"><a href="#Databricks.Tokenizer-40"><span class="linenos">40</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Databricks.Tokenizer-41"><a href="#Databricks.Tokenizer-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
</span><span id="Databricks.Tokenizer-42"><a href="#Databricks.Tokenizer-42"><span class="linenos">42</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
</span><span id="Databricks.Tokenizer-43"><a href="#Databricks.Tokenizer-43"><span class="linenos">43</span></a> <span class="p">}</span>
</span></pre></div>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.dialect API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -171,6 +171,9 @@
<li>
<a class="function" href="#no_properties_sql">no_properties_sql</a>
</li>
<li>
<a class="function" href="#no_comment_column_constraint_sql">no_comment_column_constraint_sql</a>
</li>
<li>
<a class="function" href="#str_position_sql">str_position_sql</a>
</li>
@ -189,6 +192,9 @@
<li>
<a class="function" href="#parse_date_delta">parse_date_delta</a>
</li>
<li>
<a class="function" href="#parse_date_delta_with_interval">parse_date_delta_with_interval</a>
</li>
<li>
<a class="function" href="#date_trunc_to_time">date_trunc_to_time</a>
</li>
@ -543,188 +549,215 @@
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>
</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>
</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="sd"> Args:</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="sd"> Returns:</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="p">),</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="p">)</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>
</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span> <span class="c1"># type: ignore</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="p">)</span>
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>
</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="p">)</span>
</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">)</span>
</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>
</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>
</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd"> Args:</span>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a><span class="sd"> Returns:</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="p">),</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="p">)</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>
</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="p">)</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>
</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>
</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>
</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>
</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>
</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="p">)</span>
</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>
</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a>
</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>
</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">)</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>
</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a>
</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="p">)</span>
</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>
</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a>
</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>
</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>
</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a>
</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>
</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>
</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>
</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>
</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>
</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>
</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a>
</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span></pre></div>
@ -1718,6 +1751,28 @@
</section>
<section id="no_comment_column_constraint_sql">
<input id="no_comment_column_constraint_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">no_comment_column_constraint_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#CommentColumnConstraint">sqlglot.expressions.CommentColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="no_comment_column_constraint_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#no_comment_column_constraint_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="no_comment_column_constraint_sql-297"><a href="#no_comment_column_constraint_sql-297"><span class="linenos">297</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
</span><span id="no_comment_column_constraint_sql-298"><a href="#no_comment_column_constraint_sql-298"><span class="linenos">298</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
</span><span id="no_comment_column_constraint_sql-299"><a href="#no_comment_column_constraint_sql-299"><span class="linenos">299</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="no_comment_column_constraint_sql-300"><a href="#no_comment_column_constraint_sql-300"><span class="linenos">300</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
</span><span id="no_comment_column_constraint_sql-301"><a href="#no_comment_column_constraint_sql-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
</section>
<section id="str_position_sql">
<input id="str_position_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@ -1730,13 +1785,13 @@
</div>
<a class="headerlink" href="#str_position_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-297"><a href="#str_position_sql-297"><span class="linenos">297</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_position_sql-298"><a href="#str_position_sql-298"><span class="linenos">298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-299"><a href="#str_position_sql-299"><span class="linenos">299</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-300"><a href="#str_position_sql-300"><span class="linenos">300</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-301"><a href="#str_position_sql-301"><span class="linenos">301</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="str_position_sql-302"><a href="#str_position_sql-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="str_position_sql-303"><a href="#str_position_sql-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-304"><a href="#str_position_sql-304"><span class="linenos">304</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_position_sql-305"><a href="#str_position_sql-305"><span class="linenos">305</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-306"><a href="#str_position_sql-306"><span class="linenos">306</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-307"><a href="#str_position_sql-307"><span class="linenos">307</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="str_position_sql-308"><a href="#str_position_sql-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
</span><span id="str_position_sql-309"><a href="#str_position_sql-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
</span><span id="str_position_sql-310"><a href="#str_position_sql-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@ -1754,10 +1809,10 @@
</div>
<a class="headerlink" href="#struct_extract_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-306"><a href="#struct_extract_sql-306"><span class="linenos">306</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="struct_extract_sql-307"><a href="#struct_extract_sql-307"><span class="linenos">307</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="struct_extract_sql-308"><a href="#struct_extract_sql-308"><span class="linenos">308</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="struct_extract_sql-309"><a href="#struct_extract_sql-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-313"><a href="#struct_extract_sql-313"><span class="linenos">313</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="struct_extract_sql-314"><a href="#struct_extract_sql-314"><span class="linenos">314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="struct_extract_sql-315"><a href="#struct_extract_sql-315"><span class="linenos">315</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="struct_extract_sql-316"><a href="#struct_extract_sql-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@ -1775,21 +1830,21 @@
</div>
<a class="headerlink" href="#var_map_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-312"><a href="#var_map_sql-312"><span class="linenos">312</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="var_map_sql-313"><a href="#var_map_sql-313"><span class="linenos">313</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="var_map_sql-314"><a href="#var_map_sql-314"><span class="linenos">314</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="var_map_sql-315"><a href="#var_map_sql-315"><span class="linenos">315</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-316"><a href="#var_map_sql-316"><span class="linenos">316</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-317"><a href="#var_map_sql-317"><span class="linenos">317</span></a>
</span><span id="var_map_sql-318"><a href="#var_map_sql-318"><span class="linenos">318</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="var_map_sql-319"><a href="#var_map_sql-319"><span class="linenos">319</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="var_map_sql-320"><a href="#var_map_sql-320"><span class="linenos">320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="var_map_sql-321"><a href="#var_map_sql-321"><span class="linenos">321</span></a>
</span><span id="var_map_sql-322"><a href="#var_map_sql-322"><span class="linenos">322</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="var_map_sql-323"><a href="#var_map_sql-323"><span class="linenos">323</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="var_map_sql-324"><a href="#var_map_sql-324"><span class="linenos">324</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="var_map_sql-325"><a href="#var_map_sql-325"><span class="linenos">325</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="var_map_sql-326"><a href="#var_map_sql-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-319"><a href="#var_map_sql-319"><span class="linenos">319</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
</span><span id="var_map_sql-320"><a href="#var_map_sql-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
</span><span id="var_map_sql-321"><a href="#var_map_sql-321"><span class="linenos">321</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="var_map_sql-322"><a href="#var_map_sql-322"><span class="linenos">322</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-323"><a href="#var_map_sql-323"><span class="linenos">323</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
</span><span id="var_map_sql-324"><a href="#var_map_sql-324"><span class="linenos">324</span></a>
</span><span id="var_map_sql-325"><a href="#var_map_sql-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
</span><span id="var_map_sql-326"><a href="#var_map_sql-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
</span><span id="var_map_sql-327"><a href="#var_map_sql-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
</span><span id="var_map_sql-328"><a href="#var_map_sql-328"><span class="linenos">328</span></a>
</span><span id="var_map_sql-329"><a href="#var_map_sql-329"><span class="linenos">329</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="var_map_sql-330"><a href="#var_map_sql-330"><span class="linenos">330</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="var_map_sql-331"><a href="#var_map_sql-331"><span class="linenos">331</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
</span><span id="var_map_sql-332"><a href="#var_map_sql-332"><span class="linenos">332</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
</span><span id="var_map_sql-333"><a href="#var_map_sql-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@ -1807,30 +1862,30 @@
</div>
<a class="headerlink" href="#format_time_lambda"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-329"><a href="#format_time_lambda-329"><span class="linenos">329</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="format_time_lambda-330"><a href="#format_time_lambda-330"><span class="linenos">330</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="format_time_lambda-331"><a href="#format_time_lambda-331"><span class="linenos">331</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="format_time_lambda-332"><a href="#format_time_lambda-332"><span class="linenos">332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="format_time_lambda-333"><a href="#format_time_lambda-333"><span class="linenos">333</span></a>
</span><span id="format_time_lambda-334"><a href="#format_time_lambda-334"><span class="linenos">334</span></a><span class="sd"> Args:</span>
</span><span id="format_time_lambda-335"><a href="#format_time_lambda-335"><span class="linenos">335</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="format_time_lambda-336"><a href="#format_time_lambda-336"><span class="linenos">336</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="format_time_lambda-337"><a href="#format_time_lambda-337"><span class="linenos">337</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="format_time_lambda-338"><a href="#format_time_lambda-338"><span class="linenos">338</span></a>
</span><span id="format_time_lambda-339"><a href="#format_time_lambda-339"><span class="linenos">339</span></a><span class="sd"> Returns:</span>
</span><span id="format_time_lambda-340"><a href="#format_time_lambda-340"><span class="linenos">340</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="format_time_lambda-341"><a href="#format_time_lambda-341"><span class="linenos">341</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="format_time_lambda-342"><a href="#format_time_lambda-342"><span class="linenos">342</span></a>
</span><span id="format_time_lambda-343"><a href="#format_time_lambda-343"><span class="linenos">343</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="format_time_lambda-344"><a href="#format_time_lambda-344"><span class="linenos">344</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="format_time_lambda-345"><a href="#format_time_lambda-345"><span class="linenos">345</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="format_time_lambda-346"><a href="#format_time_lambda-346"><span class="linenos">346</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="format_time_lambda-347"><a href="#format_time_lambda-347"><span class="linenos">347</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="format_time_lambda-348"><a href="#format_time_lambda-348"><span class="linenos">348</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="format_time_lambda-349"><a href="#format_time_lambda-349"><span class="linenos">349</span></a> <span class="p">),</span>
</span><span id="format_time_lambda-350"><a href="#format_time_lambda-350"><span class="linenos">350</span></a> <span class="p">)</span>
</span><span id="format_time_lambda-351"><a href="#format_time_lambda-351"><span class="linenos">351</span></a>
</span><span id="format_time_lambda-352"><a href="#format_time_lambda-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">_format_time</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-336"><a href="#format_time_lambda-336"><span class="linenos">336</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
</span><span id="format_time_lambda-337"><a href="#format_time_lambda-337"><span class="linenos">337</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="format_time_lambda-338"><a href="#format_time_lambda-338"><span class="linenos">338</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="format_time_lambda-339"><a href="#format_time_lambda-339"><span class="linenos">339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
</span><span id="format_time_lambda-340"><a href="#format_time_lambda-340"><span class="linenos">340</span></a>
</span><span id="format_time_lambda-341"><a href="#format_time_lambda-341"><span class="linenos">341</span></a><span class="sd"> Args:</span>
</span><span id="format_time_lambda-342"><a href="#format_time_lambda-342"><span class="linenos">342</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
</span><span id="format_time_lambda-343"><a href="#format_time_lambda-343"><span class="linenos">343</span></a><span class="sd"> dialect: target sql dialect.</span>
</span><span id="format_time_lambda-344"><a href="#format_time_lambda-344"><span class="linenos">344</span></a><span class="sd"> default: the default format, True being time.</span>
</span><span id="format_time_lambda-345"><a href="#format_time_lambda-345"><span class="linenos">345</span></a>
</span><span id="format_time_lambda-346"><a href="#format_time_lambda-346"><span class="linenos">346</span></a><span class="sd"> Returns:</span>
</span><span id="format_time_lambda-347"><a href="#format_time_lambda-347"><span class="linenos">347</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
</span><span id="format_time_lambda-348"><a href="#format_time_lambda-348"><span class="linenos">348</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="format_time_lambda-349"><a href="#format_time_lambda-349"><span class="linenos">349</span></a>
</span><span id="format_time_lambda-350"><a href="#format_time_lambda-350"><span class="linenos">350</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
</span><span id="format_time_lambda-351"><a href="#format_time_lambda-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
</span><span id="format_time_lambda-352"><a href="#format_time_lambda-352"><span class="linenos">352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="format_time_lambda-353"><a href="#format_time_lambda-353"><span class="linenos">353</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
</span><span id="format_time_lambda-354"><a href="#format_time_lambda-354"><span class="linenos">354</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="format_time_lambda-355"><a href="#format_time_lambda-355"><span class="linenos">355</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="format_time_lambda-356"><a href="#format_time_lambda-356"><span class="linenos">356</span></a> <span class="p">),</span>
</span><span id="format_time_lambda-357"><a href="#format_time_lambda-357"><span class="linenos">357</span></a> <span class="p">)</span>
</span><span id="format_time_lambda-358"><a href="#format_time_lambda-358"><span class="linenos">358</span></a>
</span><span id="format_time_lambda-359"><a href="#format_time_lambda-359"><span class="linenos">359</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span></pre></div>
@ -1864,27 +1919,27 @@
</div>
<a class="headerlink" href="#create_with_partitions_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-355"><a href="#create_with_partitions_sql-355"><span class="linenos">355</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-356"><a href="#create_with_partitions_sql-356"><span class="linenos">356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-357"><a href="#create_with_partitions_sql-357"><span class="linenos">357</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="create_with_partitions_sql-358"><a href="#create_with_partitions_sql-358"><span class="linenos">358</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="create_with_partitions_sql-359"><a href="#create_with_partitions_sql-359"><span class="linenos">359</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="create_with_partitions_sql-360"><a href="#create_with_partitions_sql-360"><span class="linenos">360</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-361"><a href="#create_with_partitions_sql-361"><span class="linenos">361</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-362"><a href="#create_with_partitions_sql-362"><span class="linenos">362</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-363"><a href="#create_with_partitions_sql-363"><span class="linenos">363</span></a>
</span><span id="create_with_partitions_sql-364"><a href="#create_with_partitions_sql-364"><span class="linenos">364</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-365"><a href="#create_with_partitions_sql-365"><span class="linenos">365</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="create_with_partitions_sql-366"><a href="#create_with_partitions_sql-366"><span class="linenos">366</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-367"><a href="#create_with_partitions_sql-367"><span class="linenos">367</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="create_with_partitions_sql-368"><a href="#create_with_partitions_sql-368"><span class="linenos">368</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="create_with_partitions_sql-369"><a href="#create_with_partitions_sql-369"><span class="linenos">369</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="create_with_partitions_sql-370"><a href="#create_with_partitions_sql-370"><span class="linenos">370</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="create_with_partitions_sql-371"><a href="#create_with_partitions_sql-371"><span class="linenos">371</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="create_with_partitions_sql-372"><a href="#create_with_partitions_sql-372"><span class="linenos">372</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="create_with_partitions_sql-373"><a href="#create_with_partitions_sql-373"><span class="linenos">373</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-374"><a href="#create_with_partitions_sql-374"><span class="linenos">374</span></a>
</span><span id="create_with_partitions_sql-375"><a href="#create_with_partitions_sql-375"><span class="linenos">375</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-362"><a href="#create_with_partitions_sql-362"><span class="linenos">362</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-363"><a href="#create_with_partitions_sql-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-364"><a href="#create_with_partitions_sql-364"><span class="linenos">364</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
</span><span id="create_with_partitions_sql-365"><a href="#create_with_partitions_sql-365"><span class="linenos">365</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
</span><span id="create_with_partitions_sql-366"><a href="#create_with_partitions_sql-366"><span class="linenos">366</span></a><span class="sd"> columns are removed from the create statement.</span>
</span><span id="create_with_partitions_sql-367"><a href="#create_with_partitions_sql-367"><span class="linenos">367</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="create_with_partitions_sql-368"><a href="#create_with_partitions_sql-368"><span class="linenos">368</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-369"><a href="#create_with_partitions_sql-369"><span class="linenos">369</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-370"><a href="#create_with_partitions_sql-370"><span class="linenos">370</span></a>
</span><span id="create_with_partitions_sql-371"><a href="#create_with_partitions_sql-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
</span><span id="create_with_partitions_sql-372"><a href="#create_with_partitions_sql-372"><span class="linenos">372</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="create_with_partitions_sql-373"><a href="#create_with_partitions_sql-373"><span class="linenos">373</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-374"><a href="#create_with_partitions_sql-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
</span><span id="create_with_partitions_sql-375"><a href="#create_with_partitions_sql-375"><span class="linenos">375</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="create_with_partitions_sql-376"><a href="#create_with_partitions_sql-376"><span class="linenos">376</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
</span><span id="create_with_partitions_sql-377"><a href="#create_with_partitions_sql-377"><span class="linenos">377</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
</span><span id="create_with_partitions_sql-378"><a href="#create_with_partitions_sql-378"><span class="linenos">378</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
</span><span id="create_with_partitions_sql-379"><a href="#create_with_partitions_sql-379"><span class="linenos">379</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
</span><span id="create_with_partitions_sql-380"><a href="#create_with_partitions_sql-380"><span class="linenos">380</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="create_with_partitions_sql-381"><a href="#create_with_partitions_sql-381"><span class="linenos">381</span></a>
</span><span id="create_with_partitions_sql-382"><a href="#create_with_partitions_sql-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -1906,18 +1961,53 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#parse_date_delta"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta-378"><a href="#parse_date_delta-378"><span class="linenos">378</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="parse_date_delta-379"><a href="#parse_date_delta-379"><span class="linenos">379</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="parse_date_delta-380"><a href="#parse_date_delta-380"><span class="linenos">380</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="parse_date_delta-381"><a href="#parse_date_delta-381"><span class="linenos">381</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="parse_date_delta-382"><a href="#parse_date_delta-382"><span class="linenos">382</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="parse_date_delta-383"><a href="#parse_date_delta-383"><span class="linenos">383</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="parse_date_delta-384"><a href="#parse_date_delta-384"><span class="linenos">384</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="parse_date_delta-385"><a href="#parse_date_delta-385"><span class="linenos">385</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="parse_date_delta-386"><a href="#parse_date_delta-386"><span class="linenos">386</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span> <span class="c1"># type: ignore</span>
</span><span id="parse_date_delta-387"><a href="#parse_date_delta-387"><span class="linenos">387</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="parse_date_delta-388"><a href="#parse_date_delta-388"><span class="linenos">388</span></a>
</span><span id="parse_date_delta-389"><a href="#parse_date_delta-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="n">inner_func</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta-385"><a href="#parse_date_delta-385"><span class="linenos">385</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
</span><span id="parse_date_delta-386"><a href="#parse_date_delta-386"><span class="linenos">386</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="parse_date_delta-387"><a href="#parse_date_delta-387"><span class="linenos">387</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="parse_date_delta-388"><a href="#parse_date_delta-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="parse_date_delta-389"><a href="#parse_date_delta-389"><span class="linenos">389</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
</span><span id="parse_date_delta-390"><a href="#parse_date_delta-390"><span class="linenos">390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="parse_date_delta-391"><a href="#parse_date_delta-391"><span class="linenos">391</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
</span><span id="parse_date_delta-392"><a href="#parse_date_delta-392"><span class="linenos">392</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
</span><span id="parse_date_delta-393"><a href="#parse_date_delta-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><span id="parse_date_delta-394"><a href="#parse_date_delta-394"><span class="linenos">394</span></a>
</span><span id="parse_date_delta-395"><a href="#parse_date_delta-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span></pre></div>
</section>
<section id="parse_date_delta_with_interval">
<input id="parse_date_delta_with_interval-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">parse_date_delta_with_interval</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression_class</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n">Callable</span><span class="p">[[</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="o">~</span><span class="n">E</span><span class="p">]]</span>:</span></span>
<label class="view-source-button" for="parse_date_delta_with_interval-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#parse_date_delta_with_interval"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta_with_interval-398"><a href="#parse_date_delta_with_interval-398"><span class="linenos">398</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
</span><span id="parse_date_delta_with_interval-399"><a href="#parse_date_delta_with_interval-399"><span class="linenos">399</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
</span><span id="parse_date_delta_with_interval-400"><a href="#parse_date_delta_with_interval-400"><span class="linenos">400</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
</span><span id="parse_date_delta_with_interval-401"><a href="#parse_date_delta_with_interval-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="parse_date_delta_with_interval-402"><a href="#parse_date_delta_with_interval-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="parse_date_delta_with_interval-403"><a href="#parse_date_delta_with_interval-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="parse_date_delta_with_interval-404"><a href="#parse_date_delta_with_interval-404"><span class="linenos">404</span></a>
</span><span id="parse_date_delta_with_interval-405"><a href="#parse_date_delta_with_interval-405"><span class="linenos">405</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
</span><span id="parse_date_delta_with_interval-406"><a href="#parse_date_delta_with_interval-406"><span class="linenos">406</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
</span><span id="parse_date_delta_with_interval-407"><a href="#parse_date_delta_with_interval-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="parse_date_delta_with_interval-408"><a href="#parse_date_delta_with_interval-408"><span class="linenos">408</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="parse_date_delta_with_interval-409"><a href="#parse_date_delta_with_interval-409"><span class="linenos">409</span></a>
</span><span id="parse_date_delta_with_interval-410"><a href="#parse_date_delta_with_interval-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
</span><span id="parse_date_delta_with_interval-411"><a href="#parse_date_delta_with_interval-411"><span class="linenos">411</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
</span><span id="parse_date_delta_with_interval-412"><a href="#parse_date_delta_with_interval-412"><span class="linenos">412</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="parse_date_delta_with_interval-413"><a href="#parse_date_delta_with_interval-413"><span class="linenos">413</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="parse_date_delta_with_interval-414"><a href="#parse_date_delta_with_interval-414"><span class="linenos">414</span></a> <span class="p">)</span>
</span><span id="parse_date_delta_with_interval-415"><a href="#parse_date_delta_with_interval-415"><span class="linenos">415</span></a>
</span><span id="parse_date_delta_with_interval-416"><a href="#parse_date_delta_with_interval-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">func</span>
</span></pre></div>
@ -1935,13 +2025,13 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#date_trunc_to_time"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="date_trunc_to_time-392"><a href="#date_trunc_to_time-392"><span class="linenos">392</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="date_trunc_to_time-393"><a href="#date_trunc_to_time-393"><span class="linenos">393</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="date_trunc_to_time-394"><a href="#date_trunc_to_time-394"><span class="linenos">394</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="date_trunc_to_time-395"><a href="#date_trunc_to_time-395"><span class="linenos">395</span></a>
</span><span id="date_trunc_to_time-396"><a href="#date_trunc_to_time-396"><span class="linenos">396</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
</span><span id="date_trunc_to_time-397"><a href="#date_trunc_to_time-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="date_trunc_to_time-398"><a href="#date_trunc_to_time-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="date_trunc_to_time-419"><a href="#date_trunc_to_time-419"><span class="linenos">419</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
</span><span id="date_trunc_to_time-420"><a href="#date_trunc_to_time-420"><span class="linenos">420</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="date_trunc_to_time-421"><a href="#date_trunc_to_time-421"><span class="linenos">421</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="date_trunc_to_time-422"><a href="#date_trunc_to_time-422"><span class="linenos">422</span></a>
</span><span id="date_trunc_to_time-423"><a href="#date_trunc_to_time-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
</span><span id="date_trunc_to_time-424"><a href="#date_trunc_to_time-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span><span id="date_trunc_to_time-425"><a href="#date_trunc_to_time-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span></pre></div>
@ -1959,10 +2049,10 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#timestamptrunc_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-401"><a href="#timestamptrunc_sql-401"><span class="linenos">401</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestamptrunc_sql-402"><a href="#timestamptrunc_sql-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="timestamptrunc_sql-403"><a href="#timestamptrunc_sql-403"><span class="linenos">403</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="timestamptrunc_sql-404"><a href="#timestamptrunc_sql-404"><span class="linenos">404</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-428"><a href="#timestamptrunc_sql-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestamptrunc_sql-429"><a href="#timestamptrunc_sql-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="timestamptrunc_sql-430"><a href="#timestamptrunc_sql-430"><span class="linenos">430</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="timestamptrunc_sql-431"><a href="#timestamptrunc_sql-431"><span class="linenos">431</span></a> <span class="p">)</span>
</span></pre></div>
@ -1980,12 +2070,12 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#locate_to_strposition"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-407"><a href="#locate_to_strposition-407"><span class="linenos">407</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="locate_to_strposition-408"><a href="#locate_to_strposition-408"><span class="linenos">408</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="locate_to_strposition-409"><a href="#locate_to_strposition-409"><span class="linenos">409</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="locate_to_strposition-410"><a href="#locate_to_strposition-410"><span class="linenos">410</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="locate_to_strposition-411"><a href="#locate_to_strposition-411"><span class="linenos">411</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span><span id="locate_to_strposition-412"><a href="#locate_to_strposition-412"><span class="linenos">412</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-434"><a href="#locate_to_strposition-434"><span class="linenos">434</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="locate_to_strposition-435"><a href="#locate_to_strposition-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
</span><span id="locate_to_strposition-436"><a href="#locate_to_strposition-436"><span class="linenos">436</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="locate_to_strposition-437"><a href="#locate_to_strposition-437"><span class="linenos">437</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="locate_to_strposition-438"><a href="#locate_to_strposition-438"><span class="linenos">438</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span><span id="locate_to_strposition-439"><a href="#locate_to_strposition-439"><span class="linenos">439</span></a> <span class="p">)</span>
</span></pre></div>
@ -2003,10 +2093,10 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#strposition_to_locate_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-415"><a href="#strposition_to_locate_sql-415"><span class="linenos">415</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="strposition_to_locate_sql-416"><a href="#strposition_to_locate_sql-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="strposition_to_locate_sql-417"><a href="#strposition_to_locate_sql-417"><span class="linenos">417</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="strposition_to_locate_sql-418"><a href="#strposition_to_locate_sql-418"><span class="linenos">418</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-442"><a href="#strposition_to_locate_sql-442"><span class="linenos">442</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="strposition_to_locate_sql-443"><a href="#strposition_to_locate_sql-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="strposition_to_locate_sql-444"><a href="#strposition_to_locate_sql-444"><span class="linenos">444</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="strposition_to_locate_sql-445"><a href="#strposition_to_locate_sql-445"><span class="linenos">445</span></a> <span class="p">)</span>
</span></pre></div>
@ -2024,8 +2114,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#timestrtotime_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-421"><a href="#timestrtotime_sql-421"><span class="linenos">421</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestrtotime_sql-422"><a href="#timestrtotime_sql-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-448"><a href="#timestrtotime_sql-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="timestrtotime_sql-449"><a href="#timestrtotime_sql-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
</span></pre></div>
@ -2043,8 +2133,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#datestrtodate_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-425"><a href="#datestrtodate_sql-425"><span class="linenos">425</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="datestrtodate_sql-426"><a href="#datestrtodate_sql-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-452"><a href="#datestrtodate_sql-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="datestrtodate_sql-453"><a href="#datestrtodate_sql-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span></pre></div>
@ -2062,9 +2152,9 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#min_or_least"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-429"><a href="#min_or_least-429"><span class="linenos">429</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="min_or_least-430"><a href="#min_or_least-430"><span class="linenos">430</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="min_or_least-431"><a href="#min_or_least-431"><span class="linenos">431</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-456"><a href="#min_or_least-456"><span class="linenos">456</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="min_or_least-457"><a href="#min_or_least-457"><span class="linenos">457</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="min_or_least-458"><a href="#min_or_least-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -2082,9 +2172,9 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#max_or_greatest"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-434"><a href="#max_or_greatest-434"><span class="linenos">434</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="max_or_greatest-435"><a href="#max_or_greatest-435"><span class="linenos">435</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="max_or_greatest-436"><a href="#max_or_greatest-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-461"><a href="#max_or_greatest-461"><span class="linenos">461</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="max_or_greatest-462"><a href="#max_or_greatest-462"><span class="linenos">462</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
</span><span id="max_or_greatest-463"><a href="#max_or_greatest-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -2102,14 +2192,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#count_if_to_sum"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-439"><a href="#count_if_to_sum-439"><span class="linenos">439</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="count_if_to_sum-440"><a href="#count_if_to_sum-440"><span class="linenos">440</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="count_if_to_sum-441"><a href="#count_if_to_sum-441"><span class="linenos">441</span></a>
</span><span id="count_if_to_sum-442"><a href="#count_if_to_sum-442"><span class="linenos">442</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="count_if_to_sum-443"><a href="#count_if_to_sum-443"><span class="linenos">443</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="count_if_to_sum-444"><a href="#count_if_to_sum-444"><span class="linenos">444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="count_if_to_sum-445"><a href="#count_if_to_sum-445"><span class="linenos">445</span></a>
</span><span id="count_if_to_sum-446"><a href="#count_if_to_sum-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-466"><a href="#count_if_to_sum-466"><span class="linenos">466</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="count_if_to_sum-467"><a href="#count_if_to_sum-467"><span class="linenos">467</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="count_if_to_sum-468"><a href="#count_if_to_sum-468"><span class="linenos">468</span></a>
</span><span id="count_if_to_sum-469"><a href="#count_if_to_sum-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
</span><span id="count_if_to_sum-470"><a href="#count_if_to_sum-470"><span class="linenos">470</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="count_if_to_sum-471"><a href="#count_if_to_sum-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
</span><span id="count_if_to_sum-472"><a href="#count_if_to_sum-472"><span class="linenos">472</span></a>
</span><span id="count_if_to_sum-473"><a href="#count_if_to_sum-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span></pre></div>
@ -2127,21 +2217,21 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#trim_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-449"><a href="#trim_sql-449"><span class="linenos">449</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="trim_sql-450"><a href="#trim_sql-450"><span class="linenos">450</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="trim_sql-451"><a href="#trim_sql-451"><span class="linenos">451</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="trim_sql-452"><a href="#trim_sql-452"><span class="linenos">452</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="trim_sql-453"><a href="#trim_sql-453"><span class="linenos">453</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="trim_sql-454"><a href="#trim_sql-454"><span class="linenos">454</span></a>
</span><span id="trim_sql-455"><a href="#trim_sql-455"><span class="linenos">455</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="trim_sql-456"><a href="#trim_sql-456"><span class="linenos">456</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="trim_sql-457"><a href="#trim_sql-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="trim_sql-458"><a href="#trim_sql-458"><span class="linenos">458</span></a>
</span><span id="trim_sql-459"><a href="#trim_sql-459"><span class="linenos">459</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-460"><a href="#trim_sql-460"><span class="linenos">460</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-461"><a href="#trim_sql-461"><span class="linenos">461</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-462"><a href="#trim_sql-462"><span class="linenos">462</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-463"><a href="#trim_sql-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-476"><a href="#trim_sql-476"><span class="linenos">476</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="trim_sql-477"><a href="#trim_sql-477"><span class="linenos">477</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="trim_sql-478"><a href="#trim_sql-478"><span class="linenos">478</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
</span><span id="trim_sql-479"><a href="#trim_sql-479"><span class="linenos">479</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
</span><span id="trim_sql-480"><a href="#trim_sql-480"><span class="linenos">480</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
</span><span id="trim_sql-481"><a href="#trim_sql-481"><span class="linenos">481</span></a>
</span><span id="trim_sql-482"><a href="#trim_sql-482"><span class="linenos">482</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
</span><span id="trim_sql-483"><a href="#trim_sql-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
</span><span id="trim_sql-484"><a href="#trim_sql-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="trim_sql-485"><a href="#trim_sql-485"><span class="linenos">485</span></a>
</span><span id="trim_sql-486"><a href="#trim_sql-486"><span class="linenos">486</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-487"><a href="#trim_sql-487"><span class="linenos">487</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-488"><a href="#trim_sql-488"><span class="linenos">488</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-489"><a href="#trim_sql-489"><span class="linenos">489</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="trim_sql-490"><a href="#trim_sql-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@ -2159,8 +2249,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#str_to_time_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-466"><a href="#str_to_time_sql-466"><span class="linenos">466</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_to_time_sql-467"><a href="#str_to_time_sql-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-493"><a href="#str_to_time_sql-493"><span class="linenos">493</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="str_to_time_sql-494"><a href="#str_to_time_sql-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span></pre></div>
@ -2178,15 +2268,15 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#ts_or_ds_to_date_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-470"><a href="#ts_or_ds_to_date_sql-470"><span class="linenos">470</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-471"><a href="#ts_or_ds_to_date_sql-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-472"><a href="#ts_or_ds_to_date_sql-472"><span class="linenos">472</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-473"><a href="#ts_or_ds_to_date_sql-473"><span class="linenos">473</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-474"><a href="#ts_or_ds_to_date_sql-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
</span><span id="ts_or_ds_to_date_sql-475"><a href="#ts_or_ds_to_date_sql-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="ts_or_ds_to_date_sql-476"><a href="#ts_or_ds_to_date_sql-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="ts_or_ds_to_date_sql-477"><a href="#ts_or_ds_to_date_sql-477"><span class="linenos">477</span></a>
</span><span id="ts_or_ds_to_date_sql-478"><a href="#ts_or_ds_to_date_sql-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-497"><a href="#ts_or_ds_to_date_sql-497"><span class="linenos">497</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-498"><a href="#ts_or_ds_to_date_sql-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="ts_or_ds_to_date_sql-499"><a href="#ts_or_ds_to_date_sql-499"><span class="linenos">499</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-500"><a href="#ts_or_ds_to_date_sql-500"><span class="linenos">500</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="ts_or_ds_to_date_sql-501"><a href="#ts_or_ds_to_date_sql-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
</span><span id="ts_or_ds_to_date_sql-502"><a href="#ts_or_ds_to_date_sql-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="ts_or_ds_to_date_sql-503"><a href="#ts_or_ds_to_date_sql-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="ts_or_ds_to_date_sql-504"><a href="#ts_or_ds_to_date_sql-504"><span class="linenos">504</span></a>
</span><span id="ts_or_ds_to_date_sql-505"><a href="#ts_or_ds_to_date_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span></pre></div>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.drill API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -186,58 +186,62 @@
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="p">}</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="p">}</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">}</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="p">}</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="p">}</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="p">}</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@ -311,58 +315,62 @@
</span><span id="Drill-105"><a href="#Drill-105"><span class="linenos">105</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Drill-106"><a href="#Drill-106"><span class="linenos">106</span></a>
</span><span id="Drill-107"><a href="#Drill-107"><span class="linenos">107</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Drill-108"><a href="#Drill-108"><span class="linenos">108</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-109"><a href="#Drill-109"><span class="linenos">109</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-110"><a href="#Drill-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-111"><a href="#Drill-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-112"><a href="#Drill-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-113"><a href="#Drill-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="Drill-114"><a href="#Drill-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill-115"><a href="#Drill-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill-116"><a href="#Drill-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-117"><a href="#Drill-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-118"><a href="#Drill-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-119"><a href="#Drill-119"><span class="linenos">119</span></a> <span class="p">}</span>
</span><span id="Drill-120"><a href="#Drill-120"><span class="linenos">120</span></a>
</span><span id="Drill-121"><a href="#Drill-121"><span class="linenos">121</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-122"><a href="#Drill-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-123"><a href="#Drill-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="Drill-124"><a href="#Drill-124"><span class="linenos">124</span></a> <span class="p">}</span>
</span><span id="Drill-125"><a href="#Drill-125"><span class="linenos">125</span></a>
</span><span id="Drill-126"><a href="#Drill-126"><span class="linenos">126</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-127"><a href="#Drill-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-128"><a href="#Drill-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-129"><a href="#Drill-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="Drill-130"><a href="#Drill-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="Drill-131"><a href="#Drill-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="Drill-132"><a href="#Drill-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="Drill-133"><a href="#Drill-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="Drill-134"><a href="#Drill-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="Drill-135"><a href="#Drill-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill-136"><a href="#Drill-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-137"><a href="#Drill-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-138"><a href="#Drill-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill-139"><a href="#Drill-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="Drill-140"><a href="#Drill-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill-141"><a href="#Drill-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="Drill-142"><a href="#Drill-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill-143"><a href="#Drill-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill-144"><a href="#Drill-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="Drill-145"><a href="#Drill-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-146"><a href="#Drill-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="Drill-147"><a href="#Drill-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="Drill-148"><a href="#Drill-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill-149"><a href="#Drill-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-150"><a href="#Drill-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill-151"><a href="#Drill-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="Drill-153"><a href="#Drill-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-154"><a href="#Drill-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="Drill-155"><a href="#Drill-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill-156"><a href="#Drill-156"><span class="linenos">156</span></a> <span class="p">}</span>
</span><span id="Drill-157"><a href="#Drill-157"><span class="linenos">157</span></a>
</span><span id="Drill-158"><a href="#Drill-158"><span class="linenos">158</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill-159"><a href="#Drill-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span><span id="Drill-108"><a href="#Drill-108"><span class="linenos">108</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill-109"><a href="#Drill-109"><span class="linenos">109</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill-110"><a href="#Drill-110"><span class="linenos">110</span></a>
</span><span id="Drill-111"><a href="#Drill-111"><span class="linenos">111</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-112"><a href="#Drill-112"><span class="linenos">112</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-113"><a href="#Drill-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-114"><a href="#Drill-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-115"><a href="#Drill-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill-116"><a href="#Drill-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="Drill-117"><a href="#Drill-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill-118"><a href="#Drill-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill-119"><a href="#Drill-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-120"><a href="#Drill-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-121"><a href="#Drill-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-122"><a href="#Drill-122"><span class="linenos">122</span></a> <span class="p">}</span>
</span><span id="Drill-123"><a href="#Drill-123"><span class="linenos">123</span></a>
</span><span id="Drill-124"><a href="#Drill-124"><span class="linenos">124</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-125"><a href="#Drill-125"><span class="linenos">125</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-126"><a href="#Drill-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="Drill-127"><a href="#Drill-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Drill-128"><a href="#Drill-128"><span class="linenos">128</span></a> <span class="p">}</span>
</span><span id="Drill-129"><a href="#Drill-129"><span class="linenos">129</span></a>
</span><span id="Drill-130"><a href="#Drill-130"><span class="linenos">130</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill-131"><a href="#Drill-131"><span class="linenos">131</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill-132"><a href="#Drill-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill-133"><a href="#Drill-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="Drill-134"><a href="#Drill-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="Drill-135"><a href="#Drill-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="Drill-136"><a href="#Drill-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="Drill-137"><a href="#Drill-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="Drill-138"><a href="#Drill-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="Drill-139"><a href="#Drill-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill-140"><a href="#Drill-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-141"><a href="#Drill-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-142"><a href="#Drill-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill-143"><a href="#Drill-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="Drill-144"><a href="#Drill-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill-145"><a href="#Drill-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="Drill-146"><a href="#Drill-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill-147"><a href="#Drill-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill-148"><a href="#Drill-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="Drill-149"><a href="#Drill-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-150"><a href="#Drill-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="Drill-151"><a href="#Drill-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill-153"><a href="#Drill-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-154"><a href="#Drill-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill-155"><a href="#Drill-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Drill-156"><a href="#Drill-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="Drill-157"><a href="#Drill-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill-158"><a href="#Drill-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="Drill-159"><a href="#Drill-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill-160"><a href="#Drill-160"><span class="linenos">160</span></a> <span class="p">}</span>
</span><span id="Drill-161"><a href="#Drill-161"><span class="linenos">161</span></a>
</span><span id="Drill-162"><a href="#Drill-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill-163"><a href="#Drill-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@ -497,58 +505,62 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Drill.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator-107"><a href="#Drill.Generator-107"><span class="linenos">107</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Drill.Generator-108"><a href="#Drill.Generator-108"><span class="linenos">108</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-109"><a href="#Drill.Generator-109"><span class="linenos">109</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-110"><a href="#Drill.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-111"><a href="#Drill.Generator-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-112"><a href="#Drill.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-113"><a href="#Drill.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-114"><a href="#Drill.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-115"><a href="#Drill.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-116"><a href="#Drill.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-117"><a href="#Drill.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-118"><a href="#Drill.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-119"><a href="#Drill.Generator-119"><span class="linenos">119</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-120"><a href="#Drill.Generator-120"><span class="linenos">120</span></a>
</span><span id="Drill.Generator-121"><a href="#Drill.Generator-121"><span class="linenos">121</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-122"><a href="#Drill.Generator-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-123"><a href="#Drill.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="Drill.Generator-124"><a href="#Drill.Generator-124"><span class="linenos">124</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-125"><a href="#Drill.Generator-125"><span class="linenos">125</span></a>
</span><span id="Drill.Generator-126"><a href="#Drill.Generator-126"><span class="linenos">126</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-127"><a href="#Drill.Generator-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-128"><a href="#Drill.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-129"><a href="#Drill.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-130"><a href="#Drill.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-131"><a href="#Drill.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-132"><a href="#Drill.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-133"><a href="#Drill.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-134"><a href="#Drill.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-135"><a href="#Drill.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-136"><a href="#Drill.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-137"><a href="#Drill.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-138"><a href="#Drill.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-139"><a href="#Drill.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-140"><a href="#Drill.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-141"><a href="#Drill.Generator-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-142"><a href="#Drill.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-143"><a href="#Drill.Generator-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill.Generator-144"><a href="#Drill.Generator-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-145"><a href="#Drill.Generator-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-146"><a href="#Drill.Generator-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-147"><a href="#Drill.Generator-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-148"><a href="#Drill.Generator-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-149"><a href="#Drill.Generator-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-150"><a href="#Drill.Generator-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-153"><a href="#Drill.Generator-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-154"><a href="#Drill.Generator-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-155"><a href="#Drill.Generator-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-156"><a href="#Drill.Generator-156"><span class="linenos">156</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-157"><a href="#Drill.Generator-157"><span class="linenos">157</span></a>
</span><span id="Drill.Generator-158"><a href="#Drill.Generator-158"><span class="linenos">158</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill.Generator-159"><a href="#Drill.Generator-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span><span id="Drill.Generator-108"><a href="#Drill.Generator-108"><span class="linenos">108</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill.Generator-109"><a href="#Drill.Generator-109"><span class="linenos">109</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Drill.Generator-110"><a href="#Drill.Generator-110"><span class="linenos">110</span></a>
</span><span id="Drill.Generator-111"><a href="#Drill.Generator-111"><span class="linenos">111</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-112"><a href="#Drill.Generator-112"><span class="linenos">112</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-113"><a href="#Drill.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-114"><a href="#Drill.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-115"><a href="#Drill.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-116"><a href="#Drill.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBINARY&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-117"><a href="#Drill.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-118"><a href="#Drill.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-119"><a href="#Drill.Generator-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-120"><a href="#Drill.Generator-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-121"><a href="#Drill.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-122"><a href="#Drill.Generator-122"><span class="linenos">122</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-123"><a href="#Drill.Generator-123"><span class="linenos">123</span></a>
</span><span id="Drill.Generator-124"><a href="#Drill.Generator-124"><span class="linenos">124</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-125"><a href="#Drill.Generator-125"><span class="linenos">125</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-126"><a href="#Drill.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_SCHEMA</span><span class="p">,</span>
</span><span id="Drill.Generator-127"><a href="#Drill.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Drill.Generator-128"><a href="#Drill.Generator-128"><span class="linenos">128</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-129"><a href="#Drill.Generator-129"><span class="linenos">129</span></a>
</span><span id="Drill.Generator-130"><a href="#Drill.Generator-130"><span class="linenos">130</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Drill.Generator-131"><a href="#Drill.Generator-131"><span class="linenos">131</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Drill.Generator-132"><a href="#Drill.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-133"><a href="#Drill.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_CONTAINS&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-134"><a href="#Drill.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REPEATED_COUNT&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-135"><a href="#Drill.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-136"><a href="#Drill.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-137"><a href="#Drill.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">datestrtodate_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-138"><a href="#Drill.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-139"><a href="#Drill.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(TO_DATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-140"><a href="#Drill.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), </span><span class="si">{</span><span class="n">Drill</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-141"><a href="#Drill.Generator-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;`IF`(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;true&#39;</span><span class="p">),</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;false&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-142"><a href="#Drill.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> `ILIKE` </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-143"><a href="#Drill.Generator-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LEVENSHTEIN_DISTANCE&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-144"><a href="#Drill.Generator-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARTITION BY </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-145"><a href="#Drill.Generator-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_MATCHES&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-146"><a href="#Drill.Generator-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-147"><a href="#Drill.Generator-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill.Generator-148"><a href="#Drill.Generator-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-149"><a href="#Drill.Generator-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-150"><a href="#Drill.Generator-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-153"><a href="#Drill.Generator-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-154"><a href="#Drill.Generator-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-155"><a href="#Drill.Generator-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Drill.Generator-156"><a href="#Drill.Generator-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-157"><a href="#Drill.Generator-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-158"><a href="#Drill.Generator-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
</span><span id="Drill.Generator-159"><a href="#Drill.Generator-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
</span><span id="Drill.Generator-160"><a href="#Drill.Generator-160"><span class="linenos">160</span></a> <span class="p">}</span>
</span><span id="Drill.Generator-161"><a href="#Drill.Generator-161"><span class="linenos">161</span></a>
</span><span id="Drill.Generator-162"><a href="#Drill.Generator-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill.Generator-163"><a href="#Drill.Generator-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@ -607,8 +619,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Drill.Generator.normalize_func"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.normalize_func-158"><a href="#Drill.Generator.normalize_func-158"><span class="linenos">158</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill.Generator.normalize_func-159"><a href="#Drill.Generator.normalize_func-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.normalize_func-162"><a href="#Drill.Generator.normalize_func-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Drill.Generator.normalize_func-163"><a href="#Drill.Generator.normalize_func-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@ -651,6 +663,7 @@ Default: True</li>
<dd id="Drill.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="Drill.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="Drill.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Drill.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Drill.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Drill.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Drill.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -662,6 +675,7 @@ Default: True</li>
<dd id="Drill.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="Drill.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="Drill.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="Drill.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="Drill.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="Drill.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="Drill.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -687,6 +701,7 @@ Default: True</li>
<dd id="Drill.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="Drill.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="Drill.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="Drill.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="Drill.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="Drill.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="Drill.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.oracle API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -95,163 +95,173 @@
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="n">PASSING_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="p">}</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="k">def</span> <span class="nf">_parse_xml_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">:</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="k">def</span> <span class="nf">_parse_xml_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">:</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PASSING&quot;</span><span class="p">):</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="c1"># The BY VALUE keywords are optional and are provided for semantic clarity</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PASSING&quot;</span><span class="p">):</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="c1"># The BY VALUE keywords are optional and are provided for semantic clarity</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">PASSING_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="p">)</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;REF&quot;</span><span class="p">)</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)))</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">,</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">passing</span><span class="o">=</span><span class="n">passing</span><span class="p">,</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">by_ref</span><span class="o">=</span><span class="n">by_ref</span><span class="p">,</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="p">)</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="p">}</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">}</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">}</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="p">}</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;REF&quot;</span><span class="p">)</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)))</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">,</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">passing</span><span class="o">=</span><span class="n">passing</span><span class="p">,</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">by_ref</span><span class="o">=</span><span class="n">by_ref</span><span class="p">,</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="p">)</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="p">}</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="p">)</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="p">}</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="p">}</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">),</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="p">}</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="p">)</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="p">}</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="p">}</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="p">)</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="p">}</span>
</span></pre></div>
@ -267,130 +277,147 @@
</div>
<a class="headerlink" href="#Oracle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle-44"><a href="#Oracle-44"><span class="linenos"> 44</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="Oracle-45"><a href="#Oracle-45"><span class="linenos"> 45</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
</span><span id="Oracle-46"><a href="#Oracle-46"><span class="linenos"> 46</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
</span><span id="Oracle-47"><a href="#Oracle-47"><span class="linenos"> 47</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-48"><a href="#Oracle-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-49"><a href="#Oracle-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-50"><a href="#Oracle-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-51"><a href="#Oracle-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-52"><a href="#Oracle-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
</span><span id="Oracle-53"><a href="#Oracle-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
</span><span id="Oracle-54"><a href="#Oracle-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
</span><span id="Oracle-55"><a href="#Oracle-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
</span><span id="Oracle-56"><a href="#Oracle-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
</span><span id="Oracle-57"><a href="#Oracle-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
</span><span id="Oracle-58"><a href="#Oracle-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
</span><span id="Oracle-59"><a href="#Oracle-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
</span><span id="Oracle-60"><a href="#Oracle-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
</span><span id="Oracle-61"><a href="#Oracle-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
</span><span id="Oracle-62"><a href="#Oracle-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
</span><span id="Oracle-63"><a href="#Oracle-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
</span><span id="Oracle-64"><a href="#Oracle-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
</span><span id="Oracle-65"><a href="#Oracle-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
</span><span id="Oracle-66"><a href="#Oracle-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
</span><span id="Oracle-67"><a href="#Oracle-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
</span><span id="Oracle-68"><a href="#Oracle-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
</span><span id="Oracle-69"><a href="#Oracle-69"><span class="linenos"> 69</span></a> <span class="p">}</span>
</span><span id="Oracle-70"><a href="#Oracle-70"><span class="linenos"> 70</span></a>
</span><span id="Oracle-71"><a href="#Oracle-71"><span class="linenos"> 71</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Oracle-72"><a href="#Oracle-72"><span class="linenos"> 72</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-73"><a href="#Oracle-73"><span class="linenos"> 73</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-74"><a href="#Oracle-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="Oracle-75"><a href="#Oracle-75"><span class="linenos"> 75</span></a> <span class="p">}</span>
</span><span id="Oracle-76"><a href="#Oracle-76"><span class="linenos"> 76</span></a>
</span><span id="Oracle-77"><a href="#Oracle-77"><span class="linenos"> 77</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-78"><a href="#Oracle-78"><span class="linenos"> 78</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Oracle-79"><a href="#Oracle-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="Oracle-80"><a href="#Oracle-80"><span class="linenos"> 80</span></a> <span class="p">}</span>
</span><span id="Oracle-81"><a href="#Oracle-81"><span class="linenos"> 81</span></a>
</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="Oracle-87"><a href="#Oracle-87"><span class="linenos"> 87</span></a>
</span><span id="Oracle-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="Oracle-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Oracle-93"><a href="#Oracle-93"><span class="linenos"> 93</span></a>
</span><span id="Oracle-94"><a href="#Oracle-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Oracle-95"><a href="#Oracle-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="Oracle-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a>
</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="Oracle-99"><a href="#Oracle-99"><span class="linenos"> 99</span></a>
</span><span id="Oracle-100"><a href="#Oracle-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Oracle-101"><a href="#Oracle-101"><span class="linenos">101</span></a>
</span><span id="Oracle-102"><a href="#Oracle-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Oracle-103"><a href="#Oracle-103"><span class="linenos">103</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a>
</span><span id="Oracle-105"><a href="#Oracle-105"><span class="linenos">105</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-106"><a href="#Oracle-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-107"><a href="#Oracle-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-109"><a href="#Oracle-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-110"><a href="#Oracle-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-111"><a href="#Oracle-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-112"><a href="#Oracle-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="Oracle-113"><a href="#Oracle-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle-114"><a href="#Oracle-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle-115"><a href="#Oracle-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-116"><a href="#Oracle-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-117"><a href="#Oracle-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-118"><a href="#Oracle-118"><span class="linenos">118</span></a> <span class="p">}</span>
</span><span id="Oracle-119"><a href="#Oracle-119"><span class="linenos">119</span></a>
</span><span id="Oracle-120"><a href="#Oracle-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-121"><a href="#Oracle-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-122"><a href="#Oracle-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-123"><a href="#Oracle-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Oracle-124"><a href="#Oracle-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="Oracle-128"><a href="#Oracle-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle-129"><a href="#Oracle-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Oracle-131"><a href="#Oracle-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Oracle-132"><a href="#Oracle-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="Oracle-133"><a href="#Oracle-133"><span class="linenos">133</span></a> <span class="p">}</span>
</span><span id="Oracle-134"><a href="#Oracle-134"><span class="linenos">134</span></a>
</span><span id="Oracle-135"><a href="#Oracle-135"><span class="linenos">135</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="Oracle-136"><a href="#Oracle-136"><span class="linenos">136</span></a>
</span><span id="Oracle-137"><a href="#Oracle-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-138"><a href="#Oracle-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle-37"><a href="#Oracle-37"><span class="linenos"> 37</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="Oracle-38"><a href="#Oracle-38"><span class="linenos"> 38</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
</span><span id="Oracle-39"><a href="#Oracle-39"><span class="linenos"> 39</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
</span><span id="Oracle-40"><a href="#Oracle-40"><span class="linenos"> 40</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-41"><a href="#Oracle-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-42"><a href="#Oracle-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-43"><a href="#Oracle-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-44"><a href="#Oracle-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
</span><span id="Oracle-45"><a href="#Oracle-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
</span><span id="Oracle-46"><a href="#Oracle-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
</span><span id="Oracle-47"><a href="#Oracle-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
</span><span id="Oracle-48"><a href="#Oracle-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
</span><span id="Oracle-49"><a href="#Oracle-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
</span><span id="Oracle-50"><a href="#Oracle-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
</span><span id="Oracle-51"><a href="#Oracle-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
</span><span id="Oracle-52"><a href="#Oracle-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
</span><span id="Oracle-53"><a href="#Oracle-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
</span><span id="Oracle-54"><a href="#Oracle-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
</span><span id="Oracle-55"><a href="#Oracle-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
</span><span id="Oracle-56"><a href="#Oracle-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
</span><span id="Oracle-57"><a href="#Oracle-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
</span><span id="Oracle-58"><a href="#Oracle-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
</span><span id="Oracle-59"><a href="#Oracle-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
</span><span id="Oracle-60"><a href="#Oracle-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
</span><span id="Oracle-61"><a href="#Oracle-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
</span><span id="Oracle-62"><a href="#Oracle-62"><span class="linenos"> 62</span></a> <span class="p">}</span>
</span><span id="Oracle-63"><a href="#Oracle-63"><span class="linenos"> 63</span></a>
</span><span id="Oracle-64"><a href="#Oracle-64"><span class="linenos"> 64</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Oracle-65"><a href="#Oracle-65"><span class="linenos"> 65</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-66"><a href="#Oracle-66"><span class="linenos"> 66</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-67"><a href="#Oracle-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="Oracle-68"><a href="#Oracle-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
</span><span id="Oracle-69"><a href="#Oracle-69"><span class="linenos"> 69</span></a>
</span><span id="Oracle-70"><a href="#Oracle-70"><span class="linenos"> 70</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-71"><a href="#Oracle-71"><span class="linenos"> 71</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Oracle-72"><a href="#Oracle-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="Oracle-73"><a href="#Oracle-73"><span class="linenos"> 73</span></a> <span class="p">}</span>
</span><span id="Oracle-74"><a href="#Oracle-74"><span class="linenos"> 74</span></a>
</span><span id="Oracle-75"><a href="#Oracle-75"><span class="linenos"> 75</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-76"><a href="#Oracle-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Oracle-77"><a href="#Oracle-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
</span><span id="Oracle-78"><a href="#Oracle-78"><span class="linenos"> 78</span></a> <span class="p">)</span>
</span><span id="Oracle-79"><a href="#Oracle-79"><span class="linenos"> 79</span></a> <span class="p">}</span>
</span><span id="Oracle-80"><a href="#Oracle-80"><span class="linenos"> 80</span></a>
</span><span id="Oracle-81"><a href="#Oracle-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</span></a>
</span><span id="Oracle-87"><a href="#Oracle-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Oracle-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a>
</span><span id="Oracle-93"><a href="#Oracle-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Oracle-94"><a href="#Oracle-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="Oracle-95"><a href="#Oracle-95"><span class="linenos"> 95</span></a>
</span><span id="Oracle-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</span></a>
</span><span id="Oracle-99"><a href="#Oracle-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Oracle-100"><a href="#Oracle-100"><span class="linenos">100</span></a>
</span><span id="Oracle-101"><a href="#Oracle-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Oracle-102"><a href="#Oracle-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Oracle-103"><a href="#Oracle-103"><span class="linenos">103</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Oracle-105"><a href="#Oracle-105"><span class="linenos">105</span></a>
</span><span id="Oracle-106"><a href="#Oracle-106"><span class="linenos">106</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-107"><a href="#Oracle-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-109"><a href="#Oracle-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-110"><a href="#Oracle-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-111"><a href="#Oracle-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-112"><a href="#Oracle-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle-113"><a href="#Oracle-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="Oracle-114"><a href="#Oracle-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle-115"><a href="#Oracle-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle-116"><a href="#Oracle-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-117"><a href="#Oracle-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-118"><a href="#Oracle-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle-119"><a href="#Oracle-119"><span class="linenos">119</span></a> <span class="p">}</span>
</span><span id="Oracle-120"><a href="#Oracle-120"><span class="linenos">120</span></a>
</span><span id="Oracle-121"><a href="#Oracle-121"><span class="linenos">121</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-122"><a href="#Oracle-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-123"><a href="#Oracle-123"><span class="linenos">123</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-124"><a href="#Oracle-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
</span><span id="Oracle-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="p">),</span>
</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Oracle-128"><a href="#Oracle-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="Oracle-129"><a href="#Oracle-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle-131"><a href="#Oracle-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="Oracle-132"><a href="#Oracle-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle-133"><a href="#Oracle-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle-134"><a href="#Oracle-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Oracle-135"><a href="#Oracle-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Oracle-136"><a href="#Oracle-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="Oracle-137"><a href="#Oracle-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
</span><span id="Oracle-138"><a href="#Oracle-138"><span class="linenos">138</span></a> <span class="p">}</span>
</span><span id="Oracle-139"><a href="#Oracle-139"><span class="linenos">139</span></a>
</span><span id="Oracle-140"><a href="#Oracle-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-141"><a href="#Oracle-141"><span class="linenos">141</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle-142"><a href="#Oracle-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="Oracle-143"><a href="#Oracle-143"><span class="linenos">143</span></a>
</span><span id="Oracle-144"><a href="#Oracle-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-145"><a href="#Oracle-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle-146"><a href="#Oracle-146"><span class="linenos">146</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle-147"><a href="#Oracle-147"><span class="linenos">147</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-148"><a href="#Oracle-148"><span class="linenos">148</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle-149"><a href="#Oracle-149"><span class="linenos">149</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-150"><a href="#Oracle-150"><span class="linenos">150</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle-151"><a href="#Oracle-151"><span class="linenos">151</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-152"><a href="#Oracle-152"><span class="linenos">152</span></a> <span class="p">)</span>
</span><span id="Oracle-153"><a href="#Oracle-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Oracle-154"><a href="#Oracle-154"><span class="linenos">154</span></a>
</span><span id="Oracle-155"><a href="#Oracle-155"><span class="linenos">155</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Oracle-156"><a href="#Oracle-156"><span class="linenos">156</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-157"><a href="#Oracle-157"><span class="linenos">157</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="Oracle-158"><a href="#Oracle-158"><span class="linenos">158</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="Oracle-159"><a href="#Oracle-159"><span class="linenos">159</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="Oracle-160"><a href="#Oracle-160"><span class="linenos">160</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="Oracle-161"><a href="#Oracle-161"><span class="linenos">161</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="Oracle-162"><a href="#Oracle-162"><span class="linenos">162</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="Oracle-163"><a href="#Oracle-163"><span class="linenos">163</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="Oracle-164"><a href="#Oracle-164"><span class="linenos">164</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="Oracle-165"><a href="#Oracle-165"><span class="linenos">165</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Oracle-166"><a href="#Oracle-166"><span class="linenos">166</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="Oracle-167"><a href="#Oracle-167"><span class="linenos">167</span></a> <span class="p">}</span>
</span><span id="Oracle-140"><a href="#Oracle-140"><span class="linenos">140</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-141"><a href="#Oracle-141"><span class="linenos">141</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle-142"><a href="#Oracle-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Oracle-143"><a href="#Oracle-143"><span class="linenos">143</span></a> <span class="p">}</span>
</span><span id="Oracle-144"><a href="#Oracle-144"><span class="linenos">144</span></a>
</span><span id="Oracle-145"><a href="#Oracle-145"><span class="linenos">145</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="Oracle-146"><a href="#Oracle-146"><span class="linenos">146</span></a>
</span><span id="Oracle-147"><a href="#Oracle-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-148"><a href="#Oracle-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="Oracle-149"><a href="#Oracle-149"><span class="linenos">149</span></a>
</span><span id="Oracle-150"><a href="#Oracle-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-151"><a href="#Oracle-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle-152"><a href="#Oracle-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="Oracle-153"><a href="#Oracle-153"><span class="linenos">153</span></a>
</span><span id="Oracle-154"><a href="#Oracle-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle-155"><a href="#Oracle-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle-156"><a href="#Oracle-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle-157"><a href="#Oracle-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-158"><a href="#Oracle-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle-159"><a href="#Oracle-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-160"><a href="#Oracle-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle-161"><a href="#Oracle-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle-162"><a href="#Oracle-162"><span class="linenos">162</span></a> <span class="p">)</span>
</span><span id="Oracle-163"><a href="#Oracle-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Oracle-164"><a href="#Oracle-164"><span class="linenos">164</span></a>
</span><span id="Oracle-165"><a href="#Oracle-165"><span class="linenos">165</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Oracle-166"><a href="#Oracle-166"><span class="linenos">166</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle-167"><a href="#Oracle-167"><span class="linenos">167</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="Oracle-168"><a href="#Oracle-168"><span class="linenos">168</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="Oracle-169"><a href="#Oracle-169"><span class="linenos">169</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="Oracle-170"><a href="#Oracle-170"><span class="linenos">170</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="Oracle-171"><a href="#Oracle-171"><span class="linenos">171</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="Oracle-172"><a href="#Oracle-172"><span class="linenos">172</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="Oracle-173"><a href="#Oracle-173"><span class="linenos">173</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="Oracle-174"><a href="#Oracle-174"><span class="linenos">174</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="Oracle-175"><a href="#Oracle-175"><span class="linenos">175</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Oracle-176"><a href="#Oracle-176"><span class="linenos">176</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="Oracle-177"><a href="#Oracle-177"><span class="linenos">177</span></a> <span class="p">}</span>
</span></pre></div>
@ -425,36 +452,42 @@
</div>
<a class="headerlink" href="#Oracle.Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Parser-71"><a href="#Oracle.Parser-71"><span class="linenos"> 71</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Oracle.Parser-72"><a href="#Oracle.Parser-72"><span class="linenos"> 72</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Parser-73"><a href="#Oracle.Parser-73"><span class="linenos"> 73</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Parser-74"><a href="#Oracle.Parser-74"><span class="linenos"> 74</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="Oracle.Parser-75"><a href="#Oracle.Parser-75"><span class="linenos"> 75</span></a> <span class="p">}</span>
</span><span id="Oracle.Parser-76"><a href="#Oracle.Parser-76"><span class="linenos"> 76</span></a>
</span><span id="Oracle.Parser-77"><a href="#Oracle.Parser-77"><span class="linenos"> 77</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Parser-78"><a href="#Oracle.Parser-78"><span class="linenos"> 78</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Oracle.Parser-79"><a href="#Oracle.Parser-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="Oracle.Parser-80"><a href="#Oracle.Parser-80"><span class="linenos"> 80</span></a> <span class="p">}</span>
</span><span id="Oracle.Parser-81"><a href="#Oracle.Parser-81"><span class="linenos"> 81</span></a>
</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos"> 83</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos"> 84</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos"> 85</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="Oracle.Parser-87"><a href="#Oracle.Parser-87"><span class="linenos"> 87</span></a>
</span><span id="Oracle.Parser-88"><a href="#Oracle.Parser-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle.Parser-89"><a href="#Oracle.Parser-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="Oracle.Parser-90"><a href="#Oracle.Parser-90"><span class="linenos"> 90</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos"> 91</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-93"><span class="linenos"> 93</span></a>
</span><span id="Oracle.Parser-94"><a href="#Oracle.Parser-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Oracle.Parser-95"><a href="#Oracle.Parser-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="Oracle.Parser-96"><a href="#Oracle.Parser-96"><span class="linenos"> 96</span></a>
</span><span id="Oracle.Parser-97"><a href="#Oracle.Parser-97"><span class="linenos"> 97</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="Oracle.Parser-99"><a href="#Oracle.Parser-99"><span class="linenos"> 99</span></a>
</span><span id="Oracle.Parser-100"><a href="#Oracle.Parser-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="kc">None</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Parser-64"><a href="#Oracle.Parser-64"><span class="linenos">64</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Oracle.Parser-65"><a href="#Oracle.Parser-65"><span class="linenos">65</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Parser-66"><a href="#Oracle.Parser-66"><span class="linenos">66</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Parser-67"><a href="#Oracle.Parser-67"><span class="linenos">67</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="Oracle.Parser-68"><a href="#Oracle.Parser-68"><span class="linenos">68</span></a> <span class="p">}</span>
</span><span id="Oracle.Parser-69"><a href="#Oracle.Parser-69"><span class="linenos">69</span></a>
</span><span id="Oracle.Parser-70"><a href="#Oracle.Parser-70"><span class="linenos">70</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Parser-71"><a href="#Oracle.Parser-71"><span class="linenos">71</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Oracle.Parser-72"><a href="#Oracle.Parser-72"><span class="linenos">72</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
</span><span id="Oracle.Parser-73"><a href="#Oracle.Parser-73"><span class="linenos">73</span></a> <span class="p">}</span>
</span><span id="Oracle.Parser-74"><a href="#Oracle.Parser-74"><span class="linenos">74</span></a>
</span><span id="Oracle.Parser-75"><a href="#Oracle.Parser-75"><span class="linenos">75</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Parser-76"><a href="#Oracle.Parser-76"><span class="linenos">76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Oracle.Parser-77"><a href="#Oracle.Parser-77"><span class="linenos">77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
</span><span id="Oracle.Parser-78"><a href="#Oracle.Parser-78"><span class="linenos">78</span></a> <span class="p">)</span>
</span><span id="Oracle.Parser-79"><a href="#Oracle.Parser-79"><span class="linenos">79</span></a> <span class="p">}</span>
</span><span id="Oracle.Parser-80"><a href="#Oracle.Parser-80"><span class="linenos">80</span></a>
</span><span id="Oracle.Parser-81"><a href="#Oracle.Parser-81"><span class="linenos">81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos">82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos">83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos">84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos">86</span></a>
</span><span id="Oracle.Parser-87"><a href="#Oracle.Parser-87"><span class="linenos">87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Oracle.Parser-88"><a href="#Oracle.Parser-88"><span class="linenos">88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
</span><span id="Oracle.Parser-89"><a href="#Oracle.Parser-89"><span class="linenos">89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Oracle.Parser-90"><a href="#Oracle.Parser-90"><span class="linenos">90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos">91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos">92</span></a>
</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-93"><span class="linenos">93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Oracle.Parser-94"><a href="#Oracle.Parser-94"><span class="linenos">94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
</span><span id="Oracle.Parser-95"><a href="#Oracle.Parser-95"><span class="linenos">95</span></a>
</span><span id="Oracle.Parser-96"><a href="#Oracle.Parser-96"><span class="linenos">96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
</span><span id="Oracle.Parser-97"><a href="#Oracle.Parser-97"><span class="linenos">97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos">98</span></a>
</span><span id="Oracle.Parser-99"><a href="#Oracle.Parser-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@ -511,58 +544,69 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Oracle.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator-102"><a href="#Oracle.Generator-102"><span class="linenos">102</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Oracle.Generator-103"><a href="#Oracle.Generator-103"><span class="linenos">103</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Oracle.Generator-104"><a href="#Oracle.Generator-104"><span class="linenos">104</span></a>
</span><span id="Oracle.Generator-105"><a href="#Oracle.Generator-105"><span class="linenos">105</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Generator-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-107"><a href="#Oracle.Generator-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-109"><a href="#Oracle.Generator-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-110"><a href="#Oracle.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-111"><a href="#Oracle.Generator-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-112"><a href="#Oracle.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-113"><a href="#Oracle.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-114"><a href="#Oracle.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-115"><a href="#Oracle.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-116"><a href="#Oracle.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-117"><a href="#Oracle.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-118"><a href="#Oracle.Generator-118"><span class="linenos">118</span></a> <span class="p">}</span>
</span><span id="Oracle.Generator-119"><a href="#Oracle.Generator-119"><span class="linenos">119</span></a>
</span><span id="Oracle.Generator-120"><a href="#Oracle.Generator-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Generator-121"><a href="#Oracle.Generator-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-122"><a href="#Oracle.Generator-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-123"><a href="#Oracle.Generator-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-128"><a href="#Oracle.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-129"><a href="#Oracle.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Oracle.Generator-131"><a href="#Oracle.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Oracle.Generator-132"><a href="#Oracle.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-133"><a href="#Oracle.Generator-133"><span class="linenos">133</span></a> <span class="p">}</span>
</span><span id="Oracle.Generator-134"><a href="#Oracle.Generator-134"><span class="linenos">134</span></a>
</span><span id="Oracle.Generator-135"><a href="#Oracle.Generator-135"><span class="linenos">135</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="Oracle.Generator-136"><a href="#Oracle.Generator-136"><span class="linenos">136</span></a>
</span><span id="Oracle.Generator-137"><a href="#Oracle.Generator-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-138"><a href="#Oracle.Generator-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator-101"><a href="#Oracle.Generator-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Oracle.Generator-102"><a href="#Oracle.Generator-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Oracle.Generator-103"><a href="#Oracle.Generator-103"><span class="linenos">103</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Oracle.Generator-104"><a href="#Oracle.Generator-104"><span class="linenos">104</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Oracle.Generator-105"><a href="#Oracle.Generator-105"><span class="linenos">105</span></a>
</span><span id="Oracle.Generator-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Generator-107"><a href="#Oracle.Generator-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-109"><a href="#Oracle.Generator-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-110"><a href="#Oracle.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-111"><a href="#Oracle.Generator-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-112"><a href="#Oracle.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-113"><a href="#Oracle.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-114"><a href="#Oracle.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-115"><a href="#Oracle.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-116"><a href="#Oracle.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-117"><a href="#Oracle.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-118"><a href="#Oracle.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-119"><a href="#Oracle.Generator-119"><span class="linenos">119</span></a> <span class="p">}</span>
</span><span id="Oracle.Generator-120"><a href="#Oracle.Generator-120"><span class="linenos">120</span></a>
</span><span id="Oracle.Generator-121"><a href="#Oracle.Generator-121"><span class="linenos">121</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Generator-122"><a href="#Oracle.Generator-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-123"><a href="#Oracle.Generator-123"><span class="linenos">123</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="p">),</span>
</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-128"><a href="#Oracle.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="Oracle.Generator-129"><a href="#Oracle.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-131"><a href="#Oracle.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-132"><a href="#Oracle.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-133"><a href="#Oracle.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-134"><a href="#Oracle.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Oracle.Generator-135"><a href="#Oracle.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Oracle.Generator-136"><a href="#Oracle.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
</span><span id="Oracle.Generator-137"><a href="#Oracle.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
</span><span id="Oracle.Generator-138"><a href="#Oracle.Generator-138"><span class="linenos">138</span></a> <span class="p">}</span>
</span><span id="Oracle.Generator-139"><a href="#Oracle.Generator-139"><span class="linenos">139</span></a>
</span><span id="Oracle.Generator-140"><a href="#Oracle.Generator-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-141"><a href="#Oracle.Generator-141"><span class="linenos">141</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle.Generator-142"><a href="#Oracle.Generator-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="Oracle.Generator-143"><a href="#Oracle.Generator-143"><span class="linenos">143</span></a>
</span><span id="Oracle.Generator-144"><a href="#Oracle.Generator-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-145"><a href="#Oracle.Generator-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-146"><a href="#Oracle.Generator-146"><span class="linenos">146</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-147"><a href="#Oracle.Generator-147"><span class="linenos">147</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-148"><a href="#Oracle.Generator-148"><span class="linenos">148</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-149"><a href="#Oracle.Generator-149"><span class="linenos">149</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-150"><a href="#Oracle.Generator-150"><span class="linenos">150</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle.Generator-151"><a href="#Oracle.Generator-151"><span class="linenos">151</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-152"><a href="#Oracle.Generator-152"><span class="linenos">152</span></a> <span class="p">)</span>
</span><span id="Oracle.Generator-153"><a href="#Oracle.Generator-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Oracle.Generator-140"><a href="#Oracle.Generator-140"><span class="linenos">140</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Generator-141"><a href="#Oracle.Generator-141"><span class="linenos">141</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Oracle.Generator-142"><a href="#Oracle.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Oracle.Generator-143"><a href="#Oracle.Generator-143"><span class="linenos">143</span></a> <span class="p">}</span>
</span><span id="Oracle.Generator-144"><a href="#Oracle.Generator-144"><span class="linenos">144</span></a>
</span><span id="Oracle.Generator-145"><a href="#Oracle.Generator-145"><span class="linenos">145</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
</span><span id="Oracle.Generator-146"><a href="#Oracle.Generator-146"><span class="linenos">146</span></a>
</span><span id="Oracle.Generator-147"><a href="#Oracle.Generator-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-148"><a href="#Oracle.Generator-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span><span id="Oracle.Generator-149"><a href="#Oracle.Generator-149"><span class="linenos">149</span></a>
</span><span id="Oracle.Generator-150"><a href="#Oracle.Generator-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-151"><a href="#Oracle.Generator-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle.Generator-152"><a href="#Oracle.Generator-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span><span id="Oracle.Generator-153"><a href="#Oracle.Generator-153"><span class="linenos">153</span></a>
</span><span id="Oracle.Generator-154"><a href="#Oracle.Generator-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator-155"><a href="#Oracle.Generator-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-156"><a href="#Oracle.Generator-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-157"><a href="#Oracle.Generator-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-158"><a href="#Oracle.Generator-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator-159"><a href="#Oracle.Generator-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-160"><a href="#Oracle.Generator-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle.Generator-161"><a href="#Oracle.Generator-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator-162"><a href="#Oracle.Generator-162"><span class="linenos">162</span></a> <span class="p">)</span>
</span><span id="Oracle.Generator-163"><a href="#Oracle.Generator-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@ -621,8 +665,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.offset_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.offset_sql-137"><a href="#Oracle.Generator.offset_sql-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.offset_sql-138"><a href="#Oracle.Generator.offset_sql-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.offset_sql-147"><a href="#Oracle.Generator.offset_sql-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.offset_sql-148"><a href="#Oracle.Generator.offset_sql-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span></pre></div>
@ -640,9 +684,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.column_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.column_sql-140"><a href="#Oracle.Generator.column_sql-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.column_sql-141"><a href="#Oracle.Generator.column_sql-141"><span class="linenos">141</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle.Generator.column_sql-142"><a href="#Oracle.Generator.column_sql-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.column_sql-150"><a href="#Oracle.Generator.column_sql-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.column_sql-151"><a href="#Oracle.Generator.column_sql-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Oracle.Generator.column_sql-152"><a href="#Oracle.Generator.column_sql-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span></pre></div>
@ -660,16 +704,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.xmltable_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.xmltable_sql-144"><a href="#Oracle.Generator.xmltable_sql-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.xmltable_sql-145"><a href="#Oracle.Generator.xmltable_sql-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-146"><a href="#Oracle.Generator.xmltable_sql-146"><span class="linenos">146</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-147"><a href="#Oracle.Generator.xmltable_sql-147"><span class="linenos">147</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-148"><a href="#Oracle.Generator.xmltable_sql-148"><span class="linenos">148</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-149"><a href="#Oracle.Generator.xmltable_sql-149"><span class="linenos">149</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-150"><a href="#Oracle.Generator.xmltable_sql-150"><span class="linenos">150</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle.Generator.xmltable_sql-151"><a href="#Oracle.Generator.xmltable_sql-151"><span class="linenos">151</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-152"><a href="#Oracle.Generator.xmltable_sql-152"><span class="linenos">152</span></a> <span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-153"><a href="#Oracle.Generator.xmltable_sql-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.xmltable_sql-154"><a href="#Oracle.Generator.xmltable_sql-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Oracle.Generator.xmltable_sql-155"><a href="#Oracle.Generator.xmltable_sql-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-156"><a href="#Oracle.Generator.xmltable_sql-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-157"><a href="#Oracle.Generator.xmltable_sql-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-158"><a href="#Oracle.Generator.xmltable_sql-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-159"><a href="#Oracle.Generator.xmltable_sql-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-160"><a href="#Oracle.Generator.xmltable_sql-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Oracle.Generator.xmltable_sql-161"><a href="#Oracle.Generator.xmltable_sql-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Oracle.Generator.xmltable_sql-162"><a href="#Oracle.Generator.xmltable_sql-162"><span class="linenos">162</span></a> <span class="p">)</span>
</span><span id="Oracle.Generator.xmltable_sql-163"><a href="#Oracle.Generator.xmltable_sql-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@ -712,6 +756,7 @@ Default: True</li>
<dd id="Oracle.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="Oracle.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="Oracle.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Oracle.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Oracle.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Oracle.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Oracle.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -723,6 +768,7 @@ Default: True</li>
<dd id="Oracle.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="Oracle.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="Oracle.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="Oracle.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="Oracle.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="Oracle.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="Oracle.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -748,6 +794,7 @@ Default: True</li>
<dd id="Oracle.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="Oracle.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="Oracle.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="Oracle.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="Oracle.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="Oracle.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="Oracle.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
@ -915,19 +962,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Tokenizer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Tokenizer-155"><a href="#Oracle.Tokenizer-155"><span class="linenos">155</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Oracle.Tokenizer-156"><a href="#Oracle.Tokenizer-156"><span class="linenos">156</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Tokenizer-157"><a href="#Oracle.Tokenizer-157"><span class="linenos">157</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-158"><a href="#Oracle.Tokenizer-158"><span class="linenos">158</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-159"><a href="#Oracle.Tokenizer-159"><span class="linenos">159</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-160"><a href="#Oracle.Tokenizer-160"><span class="linenos">160</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-161"><a href="#Oracle.Tokenizer-161"><span class="linenos">161</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-162"><a href="#Oracle.Tokenizer-162"><span class="linenos">162</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-163"><a href="#Oracle.Tokenizer-163"><span class="linenos">163</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-164"><a href="#Oracle.Tokenizer-164"><span class="linenos">164</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-165"><a href="#Oracle.Tokenizer-165"><span class="linenos">165</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-166"><a href="#Oracle.Tokenizer-166"><span class="linenos">166</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-167"><a href="#Oracle.Tokenizer-167"><span class="linenos">167</span></a> <span class="p">}</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Tokenizer-165"><a href="#Oracle.Tokenizer-165"><span class="linenos">165</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Oracle.Tokenizer-166"><a href="#Oracle.Tokenizer-166"><span class="linenos">166</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Oracle.Tokenizer-167"><a href="#Oracle.Tokenizer-167"><span class="linenos">167</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-168"><a href="#Oracle.Tokenizer-168"><span class="linenos">168</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-169"><a href="#Oracle.Tokenizer-169"><span class="linenos">169</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-170"><a href="#Oracle.Tokenizer-170"><span class="linenos">170</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-171"><a href="#Oracle.Tokenizer-171"><span class="linenos">171</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-172"><a href="#Oracle.Tokenizer-172"><span class="linenos">172</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-173"><a href="#Oracle.Tokenizer-173"><span class="linenos">173</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-174"><a href="#Oracle.Tokenizer-174"><span class="linenos">174</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-175"><a href="#Oracle.Tokenizer-175"><span class="linenos">175</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-176"><a href="#Oracle.Tokenizer-176"><span class="linenos">176</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="Oracle.Tokenizer-177"><a href="#Oracle.Tokenizer-177"><span class="linenos">177</span></a> <span class="p">}</span>
</span></pre></div>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.sqlite API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -110,7 +110,7 @@
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">modifier</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">modifier</span><span class="p">)</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="n">modifier</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">modifier</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">modifier</span><span class="p">)</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">modifier</span><span class="p">)</span>
@ -132,111 +132,119 @@
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="p">}</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="p">}</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="p">}</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">}</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="p">}</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">}</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">}</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@ -268,111 +276,119 @@
</span><span id="SQLite-39"><a href="#SQLite-39"><span class="linenos"> 39</span></a> <span class="p">}</span>
</span><span id="SQLite-40"><a href="#SQLite-40"><span class="linenos"> 40</span></a>
</span><span id="SQLite-41"><a href="#SQLite-41"><span class="linenos"> 41</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="SQLite-42"><a href="#SQLite-42"><span class="linenos"> 42</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-43"><a href="#SQLite-43"><span class="linenos"> 43</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-44"><a href="#SQLite-44"><span class="linenos"> 44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-45"><a href="#SQLite-45"><span class="linenos"> 45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-46"><a href="#SQLite-46"><span class="linenos"> 46</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-47"><a href="#SQLite-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-48"><a href="#SQLite-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-49"><a href="#SQLite-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-50"><a href="#SQLite-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-51"><a href="#SQLite-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-52"><a href="#SQLite-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-53"><a href="#SQLite-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-54"><a href="#SQLite-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-55"><a href="#SQLite-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-56"><a href="#SQLite-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite-57"><a href="#SQLite-57"><span class="linenos"> 57</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite-58"><a href="#SQLite-58"><span class="linenos"> 58</span></a> <span class="p">}</span>
</span><span id="SQLite-59"><a href="#SQLite-59"><span class="linenos"> 59</span></a>
</span><span id="SQLite-60"><a href="#SQLite-60"><span class="linenos"> 60</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-61"><a href="#SQLite-61"><span class="linenos"> 61</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="SQLite-62"><a href="#SQLite-62"><span class="linenos"> 62</span></a> <span class="p">}</span>
</span><span id="SQLite-63"><a href="#SQLite-63"><span class="linenos"> 63</span></a>
</span><span id="SQLite-64"><a href="#SQLite-64"><span class="linenos"> 64</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-65"><a href="#SQLite-65"><span class="linenos"> 65</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-66"><a href="#SQLite-66"><span class="linenos"> 66</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-67"><a href="#SQLite-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="SQLite-68"><a href="#SQLite-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="SQLite-74"><a href="#SQLite-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite-75"><a href="#SQLite-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</span></a> <span class="p">}</span>
</span><span id="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a>
</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a>
</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a>
</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-42"><a href="#SQLite-42"><span class="linenos"> 42</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="SQLite-43"><a href="#SQLite-43"><span class="linenos"> 43</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="SQLite-44"><a href="#SQLite-44"><span class="linenos"> 44</span></a>
</span><span id="SQLite-45"><a href="#SQLite-45"><span class="linenos"> 45</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-46"><a href="#SQLite-46"><span class="linenos"> 46</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-47"><a href="#SQLite-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-48"><a href="#SQLite-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-49"><a href="#SQLite-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-50"><a href="#SQLite-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-51"><a href="#SQLite-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite-52"><a href="#SQLite-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-53"><a href="#SQLite-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-54"><a href="#SQLite-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite-55"><a href="#SQLite-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-56"><a href="#SQLite-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-57"><a href="#SQLite-57"><span class="linenos"> 57</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-58"><a href="#SQLite-58"><span class="linenos"> 58</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite-59"><a href="#SQLite-59"><span class="linenos"> 59</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite-60"><a href="#SQLite-60"><span class="linenos"> 60</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite-61"><a href="#SQLite-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="SQLite-62"><a href="#SQLite-62"><span class="linenos"> 62</span></a>
</span><span id="SQLite-63"><a href="#SQLite-63"><span class="linenos"> 63</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-64"><a href="#SQLite-64"><span class="linenos"> 64</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="SQLite-65"><a href="#SQLite-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
</span><span id="SQLite-66"><a href="#SQLite-66"><span class="linenos"> 66</span></a>
</span><span id="SQLite-67"><a href="#SQLite-67"><span class="linenos"> 67</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-68"><a href="#SQLite-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="SQLite-74"><a href="#SQLite-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="SQLite-75"><a href="#SQLite-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a>
</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
</span><span id="SQLite-93"><a href="#SQLite-93"><span class="linenos"> 93</span></a>
</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-95"><a href="#SQLite-95"><span class="linenos"> 95</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a>
</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite-95"><a href="#SQLite-95"><span class="linenos"> 95</span></a>
</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite-99"><a href="#SQLite-99"><span class="linenos"> 99</span></a>
</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite-101"><a href="#SQLite-101"><span class="linenos">101</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite-106"><a href="#SQLite-106"><span class="linenos">106</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite-107"><a href="#SQLite-107"><span class="linenos">107</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-109"><a href="#SQLite-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-111"><a href="#SQLite-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite-112"><a href="#SQLite-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-113"><a href="#SQLite-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite-114"><a href="#SQLite-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-115"><a href="#SQLite-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite-116"><a href="#SQLite-116"><span class="linenos">116</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite-117"><a href="#SQLite-117"><span class="linenos">117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite-118"><a href="#SQLite-118"><span class="linenos">118</span></a>
</span><span id="SQLite-119"><a href="#SQLite-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="SQLite-120"><a href="#SQLite-120"><span class="linenos">120</span></a>
</span><span id="SQLite-121"><a href="#SQLite-121"><span class="linenos">121</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="SQLite-122"><a href="#SQLite-122"><span class="linenos">122</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite-123"><a href="#SQLite-123"><span class="linenos">123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-124"><a href="#SQLite-124"><span class="linenos">124</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite-125"><a href="#SQLite-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite-126"><a href="#SQLite-126"><span class="linenos">126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-101"><a href="#SQLite-101"><span class="linenos">101</span></a>
</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a>
</span><span id="SQLite-106"><a href="#SQLite-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite-107"><a href="#SQLite-107"><span class="linenos">107</span></a>
</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite-109"><a href="#SQLite-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite-111"><a href="#SQLite-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite-112"><a href="#SQLite-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite-113"><a href="#SQLite-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite-114"><a href="#SQLite-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite-115"><a href="#SQLite-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite-116"><a href="#SQLite-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-117"><a href="#SQLite-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite-118"><a href="#SQLite-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-119"><a href="#SQLite-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite-120"><a href="#SQLite-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-121"><a href="#SQLite-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite-122"><a href="#SQLite-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite-123"><a href="#SQLite-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite-124"><a href="#SQLite-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite-125"><a href="#SQLite-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite-126"><a href="#SQLite-126"><span class="linenos">126</span></a>
</span><span id="SQLite-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="SQLite-128"><a href="#SQLite-128"><span class="linenos">128</span></a>
</span><span id="SQLite-129"><a href="#SQLite-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite-130"><a href="#SQLite-130"><span class="linenos">130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite-131"><a href="#SQLite-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite-132"><a href="#SQLite-132"><span class="linenos">132</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a>
</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="SQLite-129"><a href="#SQLite-129"><span class="linenos">129</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="SQLite-130"><a href="#SQLite-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite-131"><a href="#SQLite-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-132"><a href="#SQLite-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a>
</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a>
</span><span id="SQLite-141"><a href="#SQLite-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a>
</span><span id="SQLite-143"><a href="#SQLite-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-144"><a href="#SQLite-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-145"><a href="#SQLite-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite-146"><a href="#SQLite-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-141"><a href="#SQLite-141"><span class="linenos">141</span></a>
</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite-143"><a href="#SQLite-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="SQLite-144"><a href="#SQLite-144"><span class="linenos">144</span></a>
</span><span id="SQLite-145"><a href="#SQLite-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-146"><a href="#SQLite-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite-147"><a href="#SQLite-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-148"><a href="#SQLite-148"><span class="linenos">148</span></a>
</span><span id="SQLite-149"><a href="#SQLite-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-150"><a href="#SQLite-150"><span class="linenos">150</span></a>
</span><span id="SQLite-151"><a href="#SQLite-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-152"><a href="#SQLite-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite-153"><a href="#SQLite-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite-154"><a href="#SQLite-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@ -503,111 +519,119 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#SQLite.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator-41"><a href="#SQLite.Generator-41"><span class="linenos"> 41</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="SQLite.Generator-42"><a href="#SQLite.Generator-42"><span class="linenos"> 42</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-43"><a href="#SQLite.Generator-43"><span class="linenos"> 43</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-44"><a href="#SQLite.Generator-44"><span class="linenos"> 44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-45"><a href="#SQLite.Generator-45"><span class="linenos"> 45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-46"><a href="#SQLite.Generator-46"><span class="linenos"> 46</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-47"><a href="#SQLite.Generator-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-48"><a href="#SQLite.Generator-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-49"><a href="#SQLite.Generator-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-50"><a href="#SQLite.Generator-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-51"><a href="#SQLite.Generator-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-52"><a href="#SQLite.Generator-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-53"><a href="#SQLite.Generator-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-54"><a href="#SQLite.Generator-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-55"><a href="#SQLite.Generator-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-56"><a href="#SQLite.Generator-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-57"><a href="#SQLite.Generator-57"><span class="linenos"> 57</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-58"><a href="#SQLite.Generator-58"><span class="linenos"> 58</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-59"><a href="#SQLite.Generator-59"><span class="linenos"> 59</span></a>
</span><span id="SQLite.Generator-60"><a href="#SQLite.Generator-60"><span class="linenos"> 60</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-61"><a href="#SQLite.Generator-61"><span class="linenos"> 61</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-62"><a href="#SQLite.Generator-62"><span class="linenos"> 62</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-63"><a href="#SQLite.Generator-63"><span class="linenos"> 63</span></a>
</span><span id="SQLite.Generator-64"><a href="#SQLite.Generator-64"><span class="linenos"> 64</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-65"><a href="#SQLite.Generator-65"><span class="linenos"> 65</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-66"><a href="#SQLite.Generator-66"><span class="linenos"> 66</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-67"><a href="#SQLite.Generator-67"><span class="linenos"> 67</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="SQLite.Generator-68"><a href="#SQLite.Generator-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-69"><a href="#SQLite.Generator-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-70"><a href="#SQLite.Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-71"><a href="#SQLite.Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-72"><a href="#SQLite.Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-73"><a href="#SQLite.Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-74"><a href="#SQLite.Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-75"><a href="#SQLite.Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-76"><a href="#SQLite.Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-77"><a href="#SQLite.Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-78"><a href="#SQLite.Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-85"><a href="#SQLite.Generator-85"><span class="linenos"> 85</span></a>
</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite.Generator-87"><a href="#SQLite.Generator-87"><span class="linenos"> 87</span></a>
</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a>
</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-42"><a href="#SQLite.Generator-42"><span class="linenos"> 42</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="SQLite.Generator-43"><a href="#SQLite.Generator-43"><span class="linenos"> 43</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="SQLite.Generator-44"><a href="#SQLite.Generator-44"><span class="linenos"> 44</span></a>
</span><span id="SQLite.Generator-45"><a href="#SQLite.Generator-45"><span class="linenos"> 45</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-46"><a href="#SQLite.Generator-46"><span class="linenos"> 46</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-47"><a href="#SQLite.Generator-47"><span class="linenos"> 47</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-48"><a href="#SQLite.Generator-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-49"><a href="#SQLite.Generator-49"><span class="linenos"> 49</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-50"><a href="#SQLite.Generator-50"><span class="linenos"> 50</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-51"><a href="#SQLite.Generator-51"><span class="linenos"> 51</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-52"><a href="#SQLite.Generator-52"><span class="linenos"> 52</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-53"><a href="#SQLite.Generator-53"><span class="linenos"> 53</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-54"><a href="#SQLite.Generator-54"><span class="linenos"> 54</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-55"><a href="#SQLite.Generator-55"><span class="linenos"> 55</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-56"><a href="#SQLite.Generator-56"><span class="linenos"> 56</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-57"><a href="#SQLite.Generator-57"><span class="linenos"> 57</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-58"><a href="#SQLite.Generator-58"><span class="linenos"> 58</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;TEXT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-59"><a href="#SQLite.Generator-59"><span class="linenos"> 59</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-60"><a href="#SQLite.Generator-60"><span class="linenos"> 60</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-61"><a href="#SQLite.Generator-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-62"><a href="#SQLite.Generator-62"><span class="linenos"> 62</span></a>
</span><span id="SQLite.Generator-63"><a href="#SQLite.Generator-63"><span class="linenos"> 63</span></a> <span class="n">TOKEN_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-64"><a href="#SQLite.Generator-64"><span class="linenos"> 64</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">:</span> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-65"><a href="#SQLite.Generator-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-66"><a href="#SQLite.Generator-66"><span class="linenos"> 66</span></a>
</span><span id="SQLite.Generator-67"><a href="#SQLite.Generator-67"><span class="linenos"> 67</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-68"><a href="#SQLite.Generator-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-69"><a href="#SQLite.Generator-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-70"><a href="#SQLite.Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
</span><span id="SQLite.Generator-71"><a href="#SQLite.Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-72"><a href="#SQLite.Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-73"><a href="#SQLite.Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
</span><span id="SQLite.Generator-74"><a href="#SQLite.Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-75"><a href="#SQLite.Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-76"><a href="#SQLite.Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-77"><a href="#SQLite.Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-78"><a href="#SQLite.Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-85"><a href="#SQLite.Generator-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
</span><span id="SQLite.Generator-87"><a href="#SQLite.Generator-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a>
</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-93"><a href="#SQLite.Generator-93"><span class="linenos"> 93</span></a>
</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-95"><a href="#SQLite.Generator-95"><span class="linenos"> 95</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a>
</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite.Generator-95"><a href="#SQLite.Generator-95"><span class="linenos"> 95</span></a>
</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator-99"><a href="#SQLite.Generator-99"><span class="linenos"> 99</span></a>
</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-101"><a href="#SQLite.Generator-101"><span class="linenos">101</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite.Generator-104"><a href="#SQLite.Generator-104"><span class="linenos">104</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-107"><a href="#SQLite.Generator-107"><span class="linenos">107</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-109"><a href="#SQLite.Generator-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-111"><a href="#SQLite.Generator-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite.Generator-112"><a href="#SQLite.Generator-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-113"><a href="#SQLite.Generator-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite.Generator-114"><a href="#SQLite.Generator-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-115"><a href="#SQLite.Generator-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite.Generator-116"><a href="#SQLite.Generator-116"><span class="linenos">116</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite.Generator-117"><a href="#SQLite.Generator-117"><span class="linenos">117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-118"><a href="#SQLite.Generator-118"><span class="linenos">118</span></a>
</span><span id="SQLite.Generator-119"><a href="#SQLite.Generator-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="SQLite.Generator-120"><a href="#SQLite.Generator-120"><span class="linenos">120</span></a>
</span><span id="SQLite.Generator-121"><a href="#SQLite.Generator-121"><span class="linenos">121</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="SQLite.Generator-122"><a href="#SQLite.Generator-122"><span class="linenos">122</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite.Generator-123"><a href="#SQLite.Generator-123"><span class="linenos">123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-124"><a href="#SQLite.Generator-124"><span class="linenos">124</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite.Generator-125"><a href="#SQLite.Generator-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator-126"><a href="#SQLite.Generator-126"><span class="linenos">126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite.Generator-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-101"><a href="#SQLite.Generator-101"><span class="linenos">101</span></a>
</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-104"><a href="#SQLite.Generator-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a>
</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite.Generator-107"><a href="#SQLite.Generator-107"><span class="linenos">107</span></a>
</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-109"><a href="#SQLite.Generator-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-111"><a href="#SQLite.Generator-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite.Generator-112"><a href="#SQLite.Generator-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-113"><a href="#SQLite.Generator-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite.Generator-114"><a href="#SQLite.Generator-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-115"><a href="#SQLite.Generator-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite.Generator-116"><a href="#SQLite.Generator-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-117"><a href="#SQLite.Generator-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite.Generator-118"><a href="#SQLite.Generator-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-119"><a href="#SQLite.Generator-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite.Generator-120"><a href="#SQLite.Generator-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-121"><a href="#SQLite.Generator-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite.Generator-122"><a href="#SQLite.Generator-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator-123"><a href="#SQLite.Generator-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite.Generator-124"><a href="#SQLite.Generator-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite.Generator-125"><a href="#SQLite.Generator-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-126"><a href="#SQLite.Generator-126"><span class="linenos">126</span></a>
</span><span id="SQLite.Generator-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span><span id="SQLite.Generator-128"><a href="#SQLite.Generator-128"><span class="linenos">128</span></a>
</span><span id="SQLite.Generator-129"><a href="#SQLite.Generator-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite.Generator-130"><a href="#SQLite.Generator-130"><span class="linenos">130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-131"><a href="#SQLite.Generator-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator-132"><a href="#SQLite.Generator-132"><span class="linenos">132</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a>
</span><span id="SQLite.Generator-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="SQLite.Generator-129"><a href="#SQLite.Generator-129"><span class="linenos">129</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
</span><span id="SQLite.Generator-130"><a href="#SQLite.Generator-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite.Generator-131"><a href="#SQLite.Generator-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-132"><a href="#SQLite.Generator-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a>
</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a>
</span><span id="SQLite.Generator-141"><a href="#SQLite.Generator-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a>
</span><span id="SQLite.Generator-143"><a href="#SQLite.Generator-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-144"><a href="#SQLite.Generator-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-145"><a href="#SQLite.Generator-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite.Generator-146"><a href="#SQLite.Generator-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-141"><a href="#SQLite.Generator-141"><span class="linenos">141</span></a>
</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-143"><a href="#SQLite.Generator-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="SQLite.Generator-144"><a href="#SQLite.Generator-144"><span class="linenos">144</span></a>
</span><span id="SQLite.Generator-145"><a href="#SQLite.Generator-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-146"><a href="#SQLite.Generator-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite.Generator-147"><a href="#SQLite.Generator-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-148"><a href="#SQLite.Generator-148"><span class="linenos">148</span></a>
</span><span id="SQLite.Generator-149"><a href="#SQLite.Generator-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-150"><a href="#SQLite.Generator-150"><span class="linenos">150</span></a>
</span><span id="SQLite.Generator-151"><a href="#SQLite.Generator-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-152"><a href="#SQLite.Generator-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator-153"><a href="#SQLite.Generator-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite.Generator-154"><a href="#SQLite.Generator-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@ -666,11 +690,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.cast_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.cast_sql-88"><a href="#SQLite.Generator.cast_sql-88"><span class="linenos">88</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-89"><a href="#SQLite.Generator.cast_sql-89"><span class="linenos">89</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-90"><a href="#SQLite.Generator.cast_sql-90"><span class="linenos">90</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator.cast_sql-91"><a href="#SQLite.Generator.cast_sql-91"><span class="linenos">91</span></a>
</span><span id="SQLite.Generator.cast_sql-92"><a href="#SQLite.Generator.cast_sql-92"><span class="linenos">92</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.cast_sql-96"><a href="#SQLite.Generator.cast_sql-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-97"><a href="#SQLite.Generator.cast_sql-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-98"><a href="#SQLite.Generator.cast_sql-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator.cast_sql-99"><a href="#SQLite.Generator.cast_sql-99"><span class="linenos"> 99</span></a>
</span><span id="SQLite.Generator.cast_sql-100"><a href="#SQLite.Generator.cast_sql-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -688,32 +712,32 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.datediff_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.datediff_sql-94"><a href="#SQLite.Generator.datediff_sql-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-95"><a href="#SQLite.Generator.datediff_sql-95"><span class="linenos"> 95</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.datediff_sql-96"><a href="#SQLite.Generator.datediff_sql-96"><span class="linenos"> 96</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-97"><a href="#SQLite.Generator.datediff_sql-97"><span class="linenos"> 97</span></a>
</span><span id="SQLite.Generator.datediff_sql-98"><a href="#SQLite.Generator.datediff_sql-98"><span class="linenos"> 98</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-99"><a href="#SQLite.Generator.datediff_sql-99"><span class="linenos"> 99</span></a>
</span><span id="SQLite.Generator.datediff_sql-100"><a href="#SQLite.Generator.datediff_sql-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-101"><a href="#SQLite.Generator.datediff_sql-101"><span class="linenos">101</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-102"><a href="#SQLite.Generator.datediff_sql-102"><span class="linenos">102</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-103"><a href="#SQLite.Generator.datediff_sql-103"><span class="linenos">103</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-104"><a href="#SQLite.Generator.datediff_sql-104"><span class="linenos">104</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-105"><a href="#SQLite.Generator.datediff_sql-105"><span class="linenos">105</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-106"><a href="#SQLite.Generator.datediff_sql-106"><span class="linenos">106</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-107"><a href="#SQLite.Generator.datediff_sql-107"><span class="linenos">107</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-108"><a href="#SQLite.Generator.datediff_sql-108"><span class="linenos">108</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-109"><a href="#SQLite.Generator.datediff_sql-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-110"><a href="#SQLite.Generator.datediff_sql-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-111"><a href="#SQLite.Generator.datediff_sql-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-112"><a href="#SQLite.Generator.datediff_sql-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-113"><a href="#SQLite.Generator.datediff_sql-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-114"><a href="#SQLite.Generator.datediff_sql-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-115"><a href="#SQLite.Generator.datediff_sql-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-116"><a href="#SQLite.Generator.datediff_sql-116"><span class="linenos">116</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-117"><a href="#SQLite.Generator.datediff_sql-117"><span class="linenos">117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.datediff_sql-118"><a href="#SQLite.Generator.datediff_sql-118"><span class="linenos">118</span></a>
</span><span id="SQLite.Generator.datediff_sql-119"><a href="#SQLite.Generator.datediff_sql-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.datediff_sql-102"><a href="#SQLite.Generator.datediff_sql-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-103"><a href="#SQLite.Generator.datediff_sql-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.datediff_sql-104"><a href="#SQLite.Generator.datediff_sql-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-105"><a href="#SQLite.Generator.datediff_sql-105"><span class="linenos">105</span></a>
</span><span id="SQLite.Generator.datediff_sql-106"><a href="#SQLite.Generator.datediff_sql-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-107"><a href="#SQLite.Generator.datediff_sql-107"><span class="linenos">107</span></a>
</span><span id="SQLite.Generator.datediff_sql-108"><a href="#SQLite.Generator.datediff_sql-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-109"><a href="#SQLite.Generator.datediff_sql-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-110"><a href="#SQLite.Generator.datediff_sql-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-111"><a href="#SQLite.Generator.datediff_sql-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-112"><a href="#SQLite.Generator.datediff_sql-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-113"><a href="#SQLite.Generator.datediff_sql-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-114"><a href="#SQLite.Generator.datediff_sql-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-115"><a href="#SQLite.Generator.datediff_sql-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-116"><a href="#SQLite.Generator.datediff_sql-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-117"><a href="#SQLite.Generator.datediff_sql-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-118"><a href="#SQLite.Generator.datediff_sql-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-119"><a href="#SQLite.Generator.datediff_sql-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-120"><a href="#SQLite.Generator.datediff_sql-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-121"><a href="#SQLite.Generator.datediff_sql-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-122"><a href="#SQLite.Generator.datediff_sql-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-123"><a href="#SQLite.Generator.datediff_sql-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-124"><a href="#SQLite.Generator.datediff_sql-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="SQLite.Generator.datediff_sql-125"><a href="#SQLite.Generator.datediff_sql-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.datediff_sql-126"><a href="#SQLite.Generator.datediff_sql-126"><span class="linenos">126</span></a>
</span><span id="SQLite.Generator.datediff_sql-127"><a href="#SQLite.Generator.datediff_sql-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span></pre></div>
@ -731,20 +755,20 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.groupconcat_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.groupconcat_sql-122"><a href="#SQLite.Generator.groupconcat_sql-122"><span class="linenos">122</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite.Generator.groupconcat_sql-123"><a href="#SQLite.Generator.groupconcat_sql-123"><span class="linenos">123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.groupconcat_sql-124"><a href="#SQLite.Generator.groupconcat_sql-124"><span class="linenos">124</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-125"><a href="#SQLite.Generator.groupconcat_sql-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator.groupconcat_sql-126"><a href="#SQLite.Generator.groupconcat_sql-126"><span class="linenos">126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite.Generator.groupconcat_sql-127"><a href="#SQLite.Generator.groupconcat_sql-127"><span class="linenos">127</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite.Generator.groupconcat_sql-128"><a href="#SQLite.Generator.groupconcat_sql-128"><span class="linenos">128</span></a>
</span><span id="SQLite.Generator.groupconcat_sql-129"><a href="#SQLite.Generator.groupconcat_sql-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite.Generator.groupconcat_sql-130"><a href="#SQLite.Generator.groupconcat_sql-130"><span class="linenos">130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-131"><a href="#SQLite.Generator.groupconcat_sql-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator.groupconcat_sql-132"><a href="#SQLite.Generator.groupconcat_sql-132"><span class="linenos">132</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.groupconcat_sql-133"><a href="#SQLite.Generator.groupconcat_sql-133"><span class="linenos">133</span></a>
</span><span id="SQLite.Generator.groupconcat_sql-134"><a href="#SQLite.Generator.groupconcat_sql-134"><span class="linenos">134</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-135"><a href="#SQLite.Generator.groupconcat_sql-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.groupconcat_sql-130"><a href="#SQLite.Generator.groupconcat_sql-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
</span><span id="SQLite.Generator.groupconcat_sql-131"><a href="#SQLite.Generator.groupconcat_sql-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.groupconcat_sql-132"><a href="#SQLite.Generator.groupconcat_sql-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-133"><a href="#SQLite.Generator.groupconcat_sql-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator.groupconcat_sql-134"><a href="#SQLite.Generator.groupconcat_sql-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="SQLite.Generator.groupconcat_sql-135"><a href="#SQLite.Generator.groupconcat_sql-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
</span><span id="SQLite.Generator.groupconcat_sql-136"><a href="#SQLite.Generator.groupconcat_sql-136"><span class="linenos">136</span></a>
</span><span id="SQLite.Generator.groupconcat_sql-137"><a href="#SQLite.Generator.groupconcat_sql-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
</span><span id="SQLite.Generator.groupconcat_sql-138"><a href="#SQLite.Generator.groupconcat_sql-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-139"><a href="#SQLite.Generator.groupconcat_sql-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="SQLite.Generator.groupconcat_sql-140"><a href="#SQLite.Generator.groupconcat_sql-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.groupconcat_sql-141"><a href="#SQLite.Generator.groupconcat_sql-141"><span class="linenos">141</span></a>
</span><span id="SQLite.Generator.groupconcat_sql-142"><a href="#SQLite.Generator.groupconcat_sql-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator.groupconcat_sql-143"><a href="#SQLite.Generator.groupconcat_sql-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@ -762,11 +786,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.least_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.least_sql-137"><a href="#SQLite.Generator.least_sql-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.least_sql-138"><a href="#SQLite.Generator.least_sql-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite.Generator.least_sql-139"><a href="#SQLite.Generator.least_sql-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator.least_sql-140"><a href="#SQLite.Generator.least_sql-140"><span class="linenos">140</span></a>
</span><span id="SQLite.Generator.least_sql-141"><a href="#SQLite.Generator.least_sql-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.least_sql-145"><a href="#SQLite.Generator.least_sql-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.least_sql-146"><a href="#SQLite.Generator.least_sql-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="SQLite.Generator.least_sql-147"><a href="#SQLite.Generator.least_sql-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator.least_sql-148"><a href="#SQLite.Generator.least_sql-148"><span class="linenos">148</span></a>
</span><span id="SQLite.Generator.least_sql-149"><a href="#SQLite.Generator.least_sql-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -784,10 +808,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.transaction_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.transaction_sql-143"><a href="#SQLite.Generator.transaction_sql-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.transaction_sql-144"><a href="#SQLite.Generator.transaction_sql-144"><span class="linenos">144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.transaction_sql-145"><a href="#SQLite.Generator.transaction_sql-145"><span class="linenos">145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite.Generator.transaction_sql-146"><a href="#SQLite.Generator.transaction_sql-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.transaction_sql-151"><a href="#SQLite.Generator.transaction_sql-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.transaction_sql-152"><a href="#SQLite.Generator.transaction_sql-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="SQLite.Generator.transaction_sql-153"><a href="#SQLite.Generator.transaction_sql-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="SQLite.Generator.transaction_sql-154"><a href="#SQLite.Generator.transaction_sql-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@ -831,6 +855,7 @@ Default: True</li>
<dd id="SQLite.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="SQLite.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="SQLite.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="SQLite.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="SQLite.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="SQLite.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="SQLite.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -842,6 +867,7 @@ Default: True</li>
<dd id="SQLite.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="SQLite.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="SQLite.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="SQLite.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="SQLite.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="SQLite.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="SQLite.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -867,6 +893,7 @@ Default: True</li>
<dd id="SQLite.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="SQLite.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="SQLite.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="SQLite.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="SQLite.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="SQLite.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="SQLite.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.starrocks API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -74,42 +74,48 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span> <span class="n">rename_func</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="p">),</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="p">}</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="p">}</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="p">),</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="p">}</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">rename_func</span><span class="p">,</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="p">)</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.mysql</span> <span class="kn">import</span> <span class="n">MySQL</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> <span class="p">),</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="p">}</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="p">}</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="p">),</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="p">}</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@ -125,37 +131,39 @@
</div>
<a class="headerlink" href="#StarRocks"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks-10"><a href="#StarRocks-10"><span class="linenos">10</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
</span><span id="StarRocks-11"><a href="#StarRocks-11"><span class="linenos">11</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-12"><a href="#StarRocks-12"><span class="linenos">12</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-13"><a href="#StarRocks-13"><span class="linenos">13</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="StarRocks-14"><a href="#StarRocks-14"><span class="linenos">14</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="StarRocks-15"><a href="#StarRocks-15"><span class="linenos">15</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="StarRocks-16"><a href="#StarRocks-16"><span class="linenos">16</span></a> <span class="p">),</span>
</span><span id="StarRocks-17"><a href="#StarRocks-17"><span class="linenos">17</span></a> <span class="p">}</span>
</span><span id="StarRocks-18"><a href="#StarRocks-18"><span class="linenos">18</span></a>
</span><span id="StarRocks-19"><a href="#StarRocks-19"><span class="linenos">19</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-20"><a href="#StarRocks-20"><span class="linenos">20</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-21"><a href="#StarRocks-21"><span class="linenos">21</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-22"><a href="#StarRocks-22"><span class="linenos">22</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="StarRocks-23"><a href="#StarRocks-23"><span class="linenos">23</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks-24"><a href="#StarRocks-24"><span class="linenos">24</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks-25"><a href="#StarRocks-25"><span class="linenos">25</span></a> <span class="p">}</span>
</span><span id="StarRocks-26"><a href="#StarRocks-26"><span class="linenos">26</span></a>
</span><span id="StarRocks-27"><a href="#StarRocks-27"><span class="linenos">27</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-28"><a href="#StarRocks-28"><span class="linenos">28</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-29"><a href="#StarRocks-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-30"><a href="#StarRocks-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-31"><a href="#StarRocks-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="StarRocks-32"><a href="#StarRocks-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks-33"><a href="#StarRocks-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="StarRocks-34"><a href="#StarRocks-34"><span class="linenos">34</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="StarRocks-35"><a href="#StarRocks-35"><span class="linenos">35</span></a> <span class="p">),</span>
</span><span id="StarRocks-36"><a href="#StarRocks-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="StarRocks-37"><a href="#StarRocks-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a> <span class="p">}</span>
</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks-14"><a href="#StarRocks-14"><span class="linenos">14</span></a><span class="k">class</span> <span class="nc">StarRocks</span><span class="p">(</span><span class="n">MySQL</span><span class="p">):</span>
</span><span id="StarRocks-15"><a href="#StarRocks-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-16"><a href="#StarRocks-16"><span class="linenos">16</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-17"><a href="#StarRocks-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="StarRocks-18"><a href="#StarRocks-18"><span class="linenos">18</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="StarRocks-19"><a href="#StarRocks-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="StarRocks-20"><a href="#StarRocks-20"><span class="linenos">20</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="StarRocks-21"><a href="#StarRocks-21"><span class="linenos">21</span></a> <span class="p">),</span>
</span><span id="StarRocks-22"><a href="#StarRocks-22"><span class="linenos">22</span></a> <span class="p">}</span>
</span><span id="StarRocks-23"><a href="#StarRocks-23"><span class="linenos">23</span></a>
</span><span id="StarRocks-24"><a href="#StarRocks-24"><span class="linenos">24</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-25"><a href="#StarRocks-25"><span class="linenos">25</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-26"><a href="#StarRocks-26"><span class="linenos">26</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-27"><a href="#StarRocks-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="StarRocks-28"><a href="#StarRocks-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks-29"><a href="#StarRocks-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks-30"><a href="#StarRocks-30"><span class="linenos">30</span></a> <span class="p">}</span>
</span><span id="StarRocks-31"><a href="#StarRocks-31"><span class="linenos">31</span></a>
</span><span id="StarRocks-32"><a href="#StarRocks-32"><span class="linenos">32</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks-33"><a href="#StarRocks-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks-34"><a href="#StarRocks-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
</span><span id="StarRocks-35"><a href="#StarRocks-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-36"><a href="#StarRocks-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-37"><a href="#StarRocks-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="StarRocks-41"><a href="#StarRocks-41"><span class="linenos">41</span></a> <span class="p">),</span>
</span><span id="StarRocks-42"><a href="#StarRocks-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="StarRocks-43"><a href="#StarRocks-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks-44"><a href="#StarRocks-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="StarRocks-45"><a href="#StarRocks-45"><span class="linenos">45</span></a> <span class="p">}</span>
</span><span id="StarRocks-46"><a href="#StarRocks-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@ -194,13 +202,14 @@
</div>
<a class="headerlink" href="#StarRocks.Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Parser-11"><a href="#StarRocks.Parser-11"><span class="linenos">11</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Parser-12"><a href="#StarRocks.Parser-12"><span class="linenos">12</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Parser-13"><a href="#StarRocks.Parser-13"><span class="linenos">13</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="StarRocks.Parser-14"><a href="#StarRocks.Parser-14"><span class="linenos">14</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="StarRocks.Parser-15"><a href="#StarRocks.Parser-15"><span class="linenos">15</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="StarRocks.Parser-16"><a href="#StarRocks.Parser-16"><span class="linenos">16</span></a> <span class="p">),</span>
</span><span id="StarRocks.Parser-17"><a href="#StarRocks.Parser-17"><span class="linenos">17</span></a> <span class="p">}</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Parser-15"><a href="#StarRocks.Parser-15"><span class="linenos">15</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Parser-16"><a href="#StarRocks.Parser-16"><span class="linenos">16</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Parser-17"><a href="#StarRocks.Parser-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="StarRocks.Parser-18"><a href="#StarRocks.Parser-18"><span class="linenos">18</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="StarRocks.Parser-19"><a href="#StarRocks.Parser-19"><span class="linenos">19</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="StarRocks.Parser-20"><a href="#StarRocks.Parser-20"><span class="linenos">20</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span><span id="StarRocks.Parser-21"><a href="#StarRocks.Parser-21"><span class="linenos">21</span></a> <span class="p">),</span>
</span><span id="StarRocks.Parser-22"><a href="#StarRocks.Parser-22"><span class="linenos">22</span></a> <span class="p">}</span>
</span></pre></div>
@ -257,28 +266,29 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#StarRocks.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator-19"><a href="#StarRocks.Generator-19"><span class="linenos">19</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-20"><a href="#StarRocks.Generator-20"><span class="linenos">20</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Generator-21"><a href="#StarRocks.Generator-21"><span class="linenos">21</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-22"><a href="#StarRocks.Generator-22"><span class="linenos">22</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-23"><a href="#StarRocks.Generator-23"><span class="linenos">23</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-24"><a href="#StarRocks.Generator-24"><span class="linenos">24</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-25"><a href="#StarRocks.Generator-25"><span class="linenos">25</span></a> <span class="p">}</span>
</span><span id="StarRocks.Generator-26"><a href="#StarRocks.Generator-26"><span class="linenos">26</span></a>
</span><span id="StarRocks.Generator-27"><a href="#StarRocks.Generator-27"><span class="linenos">27</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Generator-28"><a href="#StarRocks.Generator-28"><span class="linenos">28</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-29"><a href="#StarRocks.Generator-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-30"><a href="#StarRocks.Generator-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-31"><a href="#StarRocks.Generator-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-32"><a href="#StarRocks.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-33"><a href="#StarRocks.Generator-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="StarRocks.Generator-34"><a href="#StarRocks.Generator-34"><span class="linenos">34</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="StarRocks.Generator-35"><a href="#StarRocks.Generator-35"><span class="linenos">35</span></a> <span class="p">),</span>
</span><span id="StarRocks.Generator-36"><a href="#StarRocks.Generator-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-37"><a href="#StarRocks.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a> <span class="p">}</span>
</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="StarRocks.Generator-24"><a href="#StarRocks.Generator-24"><span class="linenos">24</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-25"><a href="#StarRocks.Generator-25"><span class="linenos">25</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Generator-26"><a href="#StarRocks.Generator-26"><span class="linenos">26</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-27"><a href="#StarRocks.Generator-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-28"><a href="#StarRocks.Generator-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-29"><a href="#StarRocks.Generator-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-30"><a href="#StarRocks.Generator-30"><span class="linenos">30</span></a> <span class="p">}</span>
</span><span id="StarRocks.Generator-31"><a href="#StarRocks.Generator-31"><span class="linenos">31</span></a>
</span><span id="StarRocks.Generator-32"><a href="#StarRocks.Generator-32"><span class="linenos">32</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="StarRocks.Generator-33"><a href="#StarRocks.Generator-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">MySQL</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="StarRocks.Generator-34"><a href="#StarRocks.Generator-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-35"><a href="#StarRocks.Generator-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-36"><a href="#StarRocks.Generator-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-37"><a href="#StarRocks.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="StarRocks.Generator-41"><a href="#StarRocks.Generator-41"><span class="linenos">41</span></a> <span class="p">),</span>
</span><span id="StarRocks.Generator-42"><a href="#StarRocks.Generator-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-43"><a href="#StarRocks.Generator-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="StarRocks.Generator-44"><a href="#StarRocks.Generator-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
</span><span id="StarRocks.Generator-45"><a href="#StarRocks.Generator-45"><span class="linenos">45</span></a> <span class="p">}</span>
</span><span id="StarRocks.Generator-46"><a href="#StarRocks.Generator-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@ -363,6 +373,7 @@ Default: True</li>
<dd id="StarRocks.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="StarRocks.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="StarRocks.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="StarRocks.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="StarRocks.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="StarRocks.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="StarRocks.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -374,6 +385,7 @@ Default: True</li>
<dd id="StarRocks.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="StarRocks.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="StarRocks.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="StarRocks.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="StarRocks.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="StarRocks.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="StarRocks.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -399,6 +411,7 @@ Default: True</li>
<dd id="StarRocks.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="StarRocks.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="StarRocks.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="StarRocks.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="StarRocks.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="StarRocks.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="StarRocks.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.tableau API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -94,18 +94,26 @@
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a>
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="k">class</span> <span class="nc">Tableau</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="p">}</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="p">}</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="p">}</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="p">}</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="p">}</span>
</span></pre></div>
@ -123,18 +131,26 @@
<a class="headerlink" href="#Tableau"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Tableau-23"><a href="#Tableau-23"><span class="linenos">23</span></a><span class="k">class</span> <span class="nc">Tableau</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
</span><span id="Tableau-24"><a href="#Tableau-24"><span class="linenos">24</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Tableau-25"><a href="#Tableau-25"><span class="linenos">25</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau-26"><a href="#Tableau-26"><span class="linenos">26</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau-27"><a href="#Tableau-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau-28"><a href="#Tableau-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau-29"><a href="#Tableau-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="Tableau-30"><a href="#Tableau-30"><span class="linenos">30</span></a> <span class="p">}</span>
</span><span id="Tableau-31"><a href="#Tableau-31"><span class="linenos">31</span></a>
</span><span id="Tableau-32"><a href="#Tableau-32"><span class="linenos">32</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Tableau-33"><a href="#Tableau-33"><span class="linenos">33</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau-34"><a href="#Tableau-34"><span class="linenos">34</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau-35"><a href="#Tableau-35"><span class="linenos">35</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="Tableau-36"><a href="#Tableau-36"><span class="linenos">36</span></a> <span class="p">}</span>
</span><span id="Tableau-25"><a href="#Tableau-25"><span class="linenos">25</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Tableau-26"><a href="#Tableau-26"><span class="linenos">26</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Tableau-27"><a href="#Tableau-27"><span class="linenos">27</span></a>
</span><span id="Tableau-28"><a href="#Tableau-28"><span class="linenos">28</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau-29"><a href="#Tableau-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau-30"><a href="#Tableau-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau-31"><a href="#Tableau-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau-32"><a href="#Tableau-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="Tableau-33"><a href="#Tableau-33"><span class="linenos">33</span></a> <span class="p">}</span>
</span><span id="Tableau-34"><a href="#Tableau-34"><span class="linenos">34</span></a>
</span><span id="Tableau-35"><a href="#Tableau-35"><span class="linenos">35</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau-36"><a href="#Tableau-36"><span class="linenos">36</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau-37"><a href="#Tableau-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Tableau-38"><a href="#Tableau-38"><span class="linenos">38</span></a> <span class="p">}</span>
</span><span id="Tableau-39"><a href="#Tableau-39"><span class="linenos">39</span></a>
</span><span id="Tableau-40"><a href="#Tableau-40"><span class="linenos">40</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Tableau-41"><a href="#Tableau-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau-42"><a href="#Tableau-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau-43"><a href="#Tableau-43"><span class="linenos">43</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="Tableau-44"><a href="#Tableau-44"><span class="linenos">44</span></a> <span class="p">}</span>
</span></pre></div>
@ -170,12 +186,20 @@
</div>
<a class="headerlink" href="#Tableau.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Generator-24"><a href="#Tableau.Generator-24"><span class="linenos">24</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Tableau.Generator-25"><a href="#Tableau.Generator-25"><span class="linenos">25</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau.Generator-26"><a href="#Tableau.Generator-26"><span class="linenos">26</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau.Generator-27"><a href="#Tableau.Generator-27"><span class="linenos">27</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-28"><a href="#Tableau.Generator-28"><span class="linenos">28</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-29"><a href="#Tableau.Generator-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-30"><a href="#Tableau.Generator-30"><span class="linenos">30</span></a> <span class="p">}</span>
</span><span id="Tableau.Generator-25"><a href="#Tableau.Generator-25"><span class="linenos">25</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Tableau.Generator-26"><a href="#Tableau.Generator-26"><span class="linenos">26</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Tableau.Generator-27"><a href="#Tableau.Generator-27"><span class="linenos">27</span></a>
</span><span id="Tableau.Generator-28"><a href="#Tableau.Generator-28"><span class="linenos">28</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau.Generator-29"><a href="#Tableau.Generator-29"><span class="linenos">29</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau.Generator-30"><a href="#Tableau.Generator-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-31"><a href="#Tableau.Generator-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-32"><a href="#Tableau.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-33"><a href="#Tableau.Generator-33"><span class="linenos">33</span></a> <span class="p">}</span>
</span><span id="Tableau.Generator-34"><a href="#Tableau.Generator-34"><span class="linenos">34</span></a>
</span><span id="Tableau.Generator-35"><a href="#Tableau.Generator-35"><span class="linenos">35</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau.Generator-36"><a href="#Tableau.Generator-36"><span class="linenos">36</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau.Generator-37"><a href="#Tableau.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Tableau.Generator-38"><a href="#Tableau.Generator-38"><span class="linenos">38</span></a> <span class="p">}</span>
</span></pre></div>
@ -260,6 +284,7 @@ Default: True</li>
<dd id="Tableau.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="Tableau.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="Tableau.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Tableau.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Tableau.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Tableau.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Tableau.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -271,6 +296,7 @@ Default: True</li>
<dd id="Tableau.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="Tableau.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="Tableau.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="Tableau.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="Tableau.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="Tableau.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="Tableau.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -296,6 +322,7 @@ Default: True</li>
<dd id="Tableau.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="Tableau.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="Tableau.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="Tableau.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="Tableau.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="Tableau.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="Tableau.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
@ -464,11 +491,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Tableau.Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Parser-32"><a href="#Tableau.Parser-32"><span class="linenos">32</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Tableau.Parser-33"><a href="#Tableau.Parser-33"><span class="linenos">33</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau.Parser-34"><a href="#Tableau.Parser-34"><span class="linenos">34</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau.Parser-35"><a href="#Tableau.Parser-35"><span class="linenos">35</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="Tableau.Parser-36"><a href="#Tableau.Parser-36"><span class="linenos">36</span></a> <span class="p">}</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Parser-40"><a href="#Tableau.Parser-40"><span class="linenos">40</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
</span><span id="Tableau.Parser-41"><a href="#Tableau.Parser-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Tableau.Parser-42"><a href="#Tableau.Parser-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Tableau.Parser-43"><a href="#Tableau.Parser-43"><span class="linenos">43</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
</span><span id="Tableau.Parser-44"><a href="#Tableau.Parser-44"><span class="linenos">44</span></a> <span class="p">}</span>
</span></pre></div>

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 13.1.0"/>
<meta name="generator" content="pdoc 13.1.1"/>
<title>sqlglot.dialects.trino API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -237,6 +237,7 @@ Default: True</li>
<dd id="Trino.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="Trino.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="Trino.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
<dd id="Trino.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="Trino.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="Trino.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="Trino.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@ -248,6 +249,7 @@ Default: True</li>
<dd id="Trino.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="Trino.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="Trino.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
<dd id="Trino.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="Trino.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="Trino.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="Trino.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@ -273,6 +275,7 @@ Default: True</li>
<dd id="Trino.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="Trino.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="Trino.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
<dd id="Trino.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="Trino.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="Trino.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="Trino.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
@ -343,7 +346,6 @@ Default: True</li>
<dd id="Trino.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
<dd id="Trino.Generator.in_sql" class="function"><a href="../generator.html#Generator.in_sql">in_sql</a></dd>
<dd id="Trino.Generator.in_unnest_op" class="function"><a href="../generator.html#Generator.in_unnest_op">in_unnest_op</a></dd>
<dd id="Trino.Generator.interval_sql" class="function"><a href="../generator.html#Generator.interval_sql">interval_sql</a></dd>
<dd id="Trino.Generator.return_sql" class="function"><a href="../generator.html#Generator.return_sql">return_sql</a></dd>
<dd id="Trino.Generator.reference_sql" class="function"><a href="../generator.html#Generator.reference_sql">reference_sql</a></dd>
<dd id="Trino.Generator.anonymous_sql" class="function"><a href="../generator.html#Generator.anonymous_sql">anonymous_sql</a></dd>
@ -427,7 +429,8 @@ Default: True</li>
</div>
<div><dt><a href="presto.html#Presto.Generator">sqlglot.dialects.presto.Presto.Generator</a></dt>
<dd id="Trino.Generator.transaction_sql" class="function"><a href="presto.html#Presto.Generator.transaction_sql">transaction_sql</a></dd>
<dd id="Trino.Generator.interval_sql" class="function"><a href="presto.html#Presto.Generator.interval_sql">interval_sql</a></dd>
<dd id="Trino.Generator.transaction_sql" class="function"><a href="presto.html#Presto.Generator.transaction_sql">transaction_sql</a></dd>
</div>
</dl>

File diff suppressed because it is too large Load diff