summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot/dialects/tsql.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sqlglot/dialects/tsql.html')
-rw-r--r--docs/sqlglot/dialects/tsql.html2000
1 files changed, 1043 insertions, 957 deletions
diff --git a/docs/sqlglot/dialects/tsql.html b/docs/sqlglot/dialects/tsql.html
index bd8c032..d1c2096 100644
--- a/docs/sqlglot/dialects/tsql.html
+++ b/docs/sqlglot/dialects/tsql.html
@@ -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.tsql 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>
@@ -187,380 +187,419 @@
</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">LastDateOfMonth</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">DateAdd</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">month_lag</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-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><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_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-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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">func</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">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="k">def</span> <span class="nf">_parse_hashbytes</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">kind</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">kind</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">kind</span><span class="o">.</span><span class="n">is_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
-</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">def</span> <span class="nf">_format_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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">fmt</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="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;format&quot;</span><span class="p">]</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">)</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <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="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">))</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="p">)</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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;FORMAT&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">fmt</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><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="k">def</span> <span class="nf">_string_agg_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-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;MD5&quot;</span><span class="p">:</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">):</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_256&quot;</span><span class="p">:</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</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">256</span><span class="p">))</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;SHA2_512&quot;</span><span class="p">:</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">length</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">512</span><span class="p">))</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
</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">this</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">e</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-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="c1"># exp.Distinct can appear below an exp.Order or an exp.GroupConcat expression</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;T-SQL STRING_AGG doesn&#39;t support DISTINCT.&quot;</span><span class="p">)</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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-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">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Order</span><span class="p">):</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITHIN GROUP (</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="o">.</span><span class="n">this</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="c1"># Order has a leading space</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_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-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</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">func</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">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><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><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="k">def</span> <span class="nf">_format_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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;format&quot;</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="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">)</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <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="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">))</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="p">)</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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;FORMAT&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">fmt</span><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">separator</span> <span class="o">=</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="s2">&quot;separator&quot;</span><span class="p">)</span> <span class="ow">or</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;,&quot;</span><span class="p">)</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRING_AGG(</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">)</span><span class="si">{</span><span class="n">order</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a><span class="k">def</span> <span class="nf">_string_agg_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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&quot;</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;day&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><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;dy&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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</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><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</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><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</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><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</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><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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><span id="L-166"><a href="#L-166"><span class="linenos">166</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><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</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><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;d&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><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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><span id="L-178"><a href="#L-178"><span class="linenos">178</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><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="p">}</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">convert_format_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="p">}</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="c1"># not sure if complete</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">format_time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="p">}</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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-245"><a href="#L-245"><span class="linenos">245</span></a>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</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-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="p">}</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</span><span class="p">(</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="p">),</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="p">}</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <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><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <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><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <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><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <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><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="p">}</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="p">}</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="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="p">}</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="p">)</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="p">)</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</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-340"><a href="#L-340"><span class="linenos">340</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><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="p">)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</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">return</span> <span class="n">system_time</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">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="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-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <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">COMMA</span><span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="kc">None</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="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</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="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</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">COMMA</span><span class="p">):</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="p">)</span>
-</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="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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-388"><a href="#L-388"><span class="linenos">388</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="L-391"><a href="#L-391"><span class="linenos">391</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="p">)</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="L-400"><a href="#L-400"><span class="linenos">400</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><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 class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</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-408"><a href="#L-408"><span class="linenos">408</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <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="n">this</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 class="n">expressions</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_function_parameter</span><span class="p">)</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</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">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-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</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 class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</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-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">exp</span><span 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-426"><a href="#L-426"><span class="linenos">426</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <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">e</span><span class="o">.</span><span class="n">this</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="n">e</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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="c1"># exp.Distinct can appear below an exp.Order or an exp.GroupConcat expression</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;T-SQL STRING_AGG doesn&#39;t support DISTINCT.&quot;</span><span class="p">)</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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-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="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="nb">isinstance</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">Order</span><span class="p">):</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</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">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">order</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; WITHIN GROUP (</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="o">.</span><span class="n">this</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="c1"># Order has a leading space</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="n">separator</span> <span class="o">=</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="s2">&quot;separator&quot;</span><span class="p">)</span> <span class="ow">or</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;,&quot;</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;STRING_AGG(</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">)</span><span class="si">{</span><span class="n">order</span><span class="si">}</span><span class="s2">&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><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&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="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;day&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><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;dy&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><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</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><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</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><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</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><span id="L-183"><a href="#L-183"><span class="linenos">183</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><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</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><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;d&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><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</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><span id="L-195"><a href="#L-195"><span class="linenos">195</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><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="p">}</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">convert_format_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="p">}</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="c1"># not sure if complete</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">format_time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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-262"><a href="#L-262"><span class="linenos">262</span></a>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="p">}</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</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="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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="p">),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <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">JOIN_HINTS</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="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <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="n">VAR_LENGTH_DATATYPES</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="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><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <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><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <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><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <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><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="p">}</span>
+</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="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="p">}</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="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="p">}</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="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</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="kc">None</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</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="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="p">)</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="p">)</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">return</span> <span class="n">system_time</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="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-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="k">return</span> <span class="n">returns</span>
+</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">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <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">COMMA</span><span class="p">)</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</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 class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</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="kc">None</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 class="c1"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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">COMMA</span><span class="p">):</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</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 class="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><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="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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-417"><a href="#L-417"><span class="linenos">417</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="L-420"><a href="#L-420"><span class="linenos">420</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="p">)</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="L-429"><a href="#L-429"><span class="linenos">429</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</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-434"><a href="#L-434"><span class="linenos">434</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-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <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="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">ReturnsProperty</span><span class="p">)</span>
-</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 class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</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-437"><a href="#L-437"><span class="linenos">437</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="p">):</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="n">this</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 class="n">expressions</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_function_parameter</span><span class="p">)</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</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-450"><a href="#L-450"><span class="linenos">450</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-449"><a href="#L-449"><span class="linenos">449</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-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">start</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-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">end</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-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</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">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</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-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">exp</span><span 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-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="p">}</span>
+</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</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-462"><a href="#L-462"><span class="linenos">462</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-463"><a href="#L-463"><span class="linenos">463</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-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</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 class="s2">&quot;HASHBYTES&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="s2">&quot;MD5&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><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</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 class="s2">&quot;HASHBYTES&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="s2">&quot;SHA1&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><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="s2">&quot;HASHBYTES&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="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</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;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="p">),</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="p">}</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</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">ReturnsProperty</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</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-483"><a href="#L-483"><span class="linenos">483</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-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="p">}</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</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-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;</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-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 class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</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="n">start</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-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">end</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-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</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;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
</span></pre></div>
@@ -576,9 +615,9 @@
</div>
<a class="headerlink" href="#generate_date_delta_with_unit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="generate_date_delta_with_unit_sql-100"><a href="#generate_date_delta_with_unit_sql-100"><span class="linenos">100</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_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="generate_date_delta_with_unit_sql-101"><a href="#generate_date_delta_with_unit_sql-101"><span class="linenos">101</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
-</span><span id="generate_date_delta_with_unit_sql-102"><a href="#generate_date_delta_with_unit_sql-102"><span class="linenos">102</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">func</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">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="generate_date_delta_with_unit_sql-117"><a href="#generate_date_delta_with_unit_sql-117"><span class="linenos">117</span></a><span class="k">def</span> <span class="nf">generate_date_delta_with_unit_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="generate_date_delta_with_unit_sql-118"><a href="#generate_date_delta_with_unit_sql-118"><span class="linenos">118</span></a> <span class="n">func</span> <span class="o">=</span> <span class="s2">&quot;DATEADD&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATEDIFF&quot;</span>
+</span><span id="generate_date_delta_with_unit_sql-119"><a href="#generate_date_delta_with_unit_sql-119"><span class="linenos">119</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">func</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">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -596,346 +635,368 @@
</div>
<a class="headerlink" href="#TSQL"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL-134"><a href="#TSQL-134"><span class="linenos">134</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="TSQL-135"><a href="#TSQL-135"><span class="linenos">135</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="TSQL-136"><a href="#TSQL-136"><span class="linenos">136</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&quot;</span>
-</span><span id="TSQL-137"><a href="#TSQL-137"><span class="linenos">137</span></a>
-</span><span id="TSQL-138"><a href="#TSQL-138"><span class="linenos">138</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-139"><a href="#TSQL-139"><span class="linenos">139</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-140"><a href="#TSQL-140"><span class="linenos">140</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-141"><a href="#TSQL-141"><span class="linenos">141</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-142"><a href="#TSQL-142"><span class="linenos">142</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
-</span><span id="TSQL-143"><a href="#TSQL-143"><span class="linenos">143</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="TSQL-144"><a href="#TSQL-144"><span class="linenos">144</span></a> <span class="s2">&quot;day&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><span id="TSQL-145"><a href="#TSQL-145"><span class="linenos">145</span></a> <span class="s2">&quot;dy&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><span id="TSQL-146"><a href="#TSQL-146"><span class="linenos">146</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-147"><a href="#TSQL-147"><span class="linenos">147</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-148"><a href="#TSQL-148"><span class="linenos">148</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><span id="TSQL-149"><a href="#TSQL-149"><span class="linenos">149</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-150"><a href="#TSQL-150"><span class="linenos">150</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
-</span><span id="TSQL-151"><a href="#TSQL-151"><span class="linenos">151</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><span id="TSQL-152"><a href="#TSQL-152"><span class="linenos">152</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-153"><a href="#TSQL-153"><span class="linenos">153</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><span id="TSQL-154"><a href="#TSQL-154"><span class="linenos">154</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-155"><a href="#TSQL-155"><span class="linenos">155</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-156"><a href="#TSQL-156"><span class="linenos">156</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><span id="TSQL-157"><a href="#TSQL-157"><span class="linenos">157</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-158"><a href="#TSQL-158"><span class="linenos">158</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-159"><a href="#TSQL-159"><span class="linenos">159</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-160"><a href="#TSQL-160"><span class="linenos">160</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-161"><a href="#TSQL-161"><span class="linenos">161</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
-</span><span id="TSQL-162"><a href="#TSQL-162"><span class="linenos">162</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="TSQL-163"><a href="#TSQL-163"><span class="linenos">163</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><span id="TSQL-164"><a href="#TSQL-164"><span class="linenos">164</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-165"><a href="#TSQL-165"><span class="linenos">165</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-166"><a href="#TSQL-166"><span class="linenos">166</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><span id="TSQL-167"><a href="#TSQL-167"><span class="linenos">167</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><span id="TSQL-168"><a href="#TSQL-168"><span class="linenos">168</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="TSQL-169"><a href="#TSQL-169"><span class="linenos">169</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="TSQL-170"><a href="#TSQL-170"><span class="linenos">170</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><span id="TSQL-171"><a href="#TSQL-171"><span class="linenos">171</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="TSQL-172"><a href="#TSQL-172"><span class="linenos">172</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><span id="TSQL-173"><a href="#TSQL-173"><span class="linenos">173</span></a> <span class="s2">&quot;d&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><span id="TSQL-174"><a href="#TSQL-174"><span class="linenos">174</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-175"><a href="#TSQL-175"><span class="linenos">175</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-176"><a href="#TSQL-176"><span class="linenos">176</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="TSQL-177"><a href="#TSQL-177"><span class="linenos">177</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-178"><a href="#TSQL-178"><span class="linenos">178</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><span id="TSQL-179"><a href="#TSQL-179"><span class="linenos">179</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><span id="TSQL-180"><a href="#TSQL-180"><span class="linenos">180</span></a> <span class="p">}</span>
-</span><span id="TSQL-181"><a href="#TSQL-181"><span class="linenos">181</span></a>
-</span><span id="TSQL-182"><a href="#TSQL-182"><span class="linenos">182</span></a> <span class="n">convert_format_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-183"><a href="#TSQL-183"><span class="linenos">183</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-184"><a href="#TSQL-184"><span class="linenos">184</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-185"><a href="#TSQL-185"><span class="linenos">185</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-186"><a href="#TSQL-186"><span class="linenos">186</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-187"><a href="#TSQL-187"><span class="linenos">187</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-188"><a href="#TSQL-188"><span class="linenos">188</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-189"><a href="#TSQL-189"><span class="linenos">189</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-190"><a href="#TSQL-190"><span class="linenos">190</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-191"><a href="#TSQL-191"><span class="linenos">191</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-192"><a href="#TSQL-192"><span class="linenos">192</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-193"><a href="#TSQL-193"><span class="linenos">193</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
-</span><span id="TSQL-194"><a href="#TSQL-194"><span class="linenos">194</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
-</span><span id="TSQL-195"><a href="#TSQL-195"><span class="linenos">195</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
-</span><span id="TSQL-196"><a href="#TSQL-196"><span class="linenos">196</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-197"><a href="#TSQL-197"><span class="linenos">197</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-198"><a href="#TSQL-198"><span class="linenos">198</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-199"><a href="#TSQL-199"><span class="linenos">199</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-200"><a href="#TSQL-200"><span class="linenos">200</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-201"><a href="#TSQL-201"><span class="linenos">201</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-202"><a href="#TSQL-202"><span class="linenos">202</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-203"><a href="#TSQL-203"><span class="linenos">203</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-204"><a href="#TSQL-204"><span class="linenos">204</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-205"><a href="#TSQL-205"><span class="linenos">205</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-206"><a href="#TSQL-206"><span class="linenos">206</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-207"><a href="#TSQL-207"><span class="linenos">207</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-208"><a href="#TSQL-208"><span class="linenos">208</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-209"><a href="#TSQL-209"><span class="linenos">209</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-210"><a href="#TSQL-210"><span class="linenos">210</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-211"><a href="#TSQL-211"><span class="linenos">211</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-212"><a href="#TSQL-212"><span class="linenos">212</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-213"><a href="#TSQL-213"><span class="linenos">213</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-214"><a href="#TSQL-214"><span class="linenos">214</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-215"><a href="#TSQL-215"><span class="linenos">215</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-216"><a href="#TSQL-216"><span class="linenos">216</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-217"><a href="#TSQL-217"><span class="linenos">217</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-218"><a href="#TSQL-218"><span class="linenos">218</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-219"><a href="#TSQL-219"><span class="linenos">219</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-220"><a href="#TSQL-220"><span class="linenos">220</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-221"><a href="#TSQL-221"><span class="linenos">221</span></a> <span class="p">}</span>
-</span><span id="TSQL-222"><a href="#TSQL-222"><span class="linenos">222</span></a> <span class="c1"># not sure if complete</span>
-</span><span id="TSQL-223"><a href="#TSQL-223"><span class="linenos">223</span></a> <span class="n">format_time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-224"><a href="#TSQL-224"><span class="linenos">224</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-225"><a href="#TSQL-225"><span class="linenos">225</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-226"><a href="#TSQL-226"><span class="linenos">226</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="TSQL-227"><a href="#TSQL-227"><span class="linenos">227</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="TSQL-228"><a href="#TSQL-228"><span class="linenos">228</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-229"><a href="#TSQL-229"><span class="linenos">229</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-230"><a href="#TSQL-230"><span class="linenos">230</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-231"><a href="#TSQL-231"><span class="linenos">231</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-232"><a href="#TSQL-232"><span class="linenos">232</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-233"><a href="#TSQL-233"><span class="linenos">233</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-234"><a href="#TSQL-234"><span class="linenos">234</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-235"><a href="#TSQL-235"><span class="linenos">235</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="TSQL-236"><a href="#TSQL-236"><span class="linenos">236</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
-</span><span id="TSQL-237"><a href="#TSQL-237"><span class="linenos">237</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="TSQL-238"><a href="#TSQL-238"><span class="linenos">238</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
-</span><span id="TSQL-239"><a href="#TSQL-239"><span class="linenos">239</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
-</span><span id="TSQL-240"><a href="#TSQL-240"><span class="linenos">240</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
-</span><span id="TSQL-241"><a href="#TSQL-241"><span class="linenos">241</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
-</span><span id="TSQL-242"><a href="#TSQL-242"><span class="linenos">242</span></a> <span class="p">}</span>
-</span><span id="TSQL-243"><a href="#TSQL-243"><span class="linenos">243</span></a>
-</span><span id="TSQL-244"><a href="#TSQL-244"><span class="linenos">244</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="TSQL-245"><a href="#TSQL-245"><span class="linenos">245</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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="TSQL-246"><a href="#TSQL-246"><span class="linenos">246</span></a>
-</span><span id="TSQL-247"><a href="#TSQL-247"><span class="linenos">247</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="TSQL-248"><a href="#TSQL-248"><span class="linenos">248</span></a>
-</span><span id="TSQL-249"><a href="#TSQL-249"><span class="linenos">249</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-250"><a href="#TSQL-250"><span class="linenos">250</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="TSQL-251"><a href="#TSQL-251"><span class="linenos">251</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL-252"><a href="#TSQL-252"><span class="linenos">252</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="TSQL-253"><a href="#TSQL-253"><span class="linenos">253</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL-254"><a href="#TSQL-254"><span class="linenos">254</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="TSQL-255"><a href="#TSQL-255"><span class="linenos">255</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="TSQL-256"><a href="#TSQL-256"><span class="linenos">256</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-257"><a href="#TSQL-257"><span class="linenos">257</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-258"><a href="#TSQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL-259"><a href="#TSQL-259"><span class="linenos">259</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="TSQL-260"><a href="#TSQL-260"><span class="linenos">260</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="TSQL-261"><a href="#TSQL-261"><span class="linenos">261</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="TSQL-262"><a href="#TSQL-262"><span class="linenos">262</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL-263"><a href="#TSQL-263"><span class="linenos">263</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="TSQL-264"><a href="#TSQL-264"><span class="linenos">264</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="TSQL-265"><a href="#TSQL-265"><span class="linenos">265</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="TSQL-266"><a href="#TSQL-266"><span class="linenos">266</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="TSQL-267"><a href="#TSQL-267"><span class="linenos">267</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="TSQL-268"><a href="#TSQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL-269"><a href="#TSQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="TSQL-270"><a href="#TSQL-270"><span class="linenos">270</span></a> <span class="p">}</span>
-</span><span id="TSQL-271"><a href="#TSQL-271"><span class="linenos">271</span></a>
-</span><span id="TSQL-272"><a href="#TSQL-272"><span class="linenos">272</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
-</span><span id="TSQL-273"><a href="#TSQL-273"><span class="linenos">273</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="TSQL-274"><a href="#TSQL-274"><span class="linenos">274</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
-</span><span id="TSQL-275"><a href="#TSQL-275"><span class="linenos">275</span></a>
-</span><span id="TSQL-276"><a href="#TSQL-276"><span class="linenos">276</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="TSQL-277"><a href="#TSQL-277"><span class="linenos">277</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-278"><a href="#TSQL-278"><span class="linenos">278</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="TSQL-279"><a href="#TSQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</span><span class="p">(</span>
-</span><span id="TSQL-280"><a href="#TSQL-280"><span class="linenos">280</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="TSQL-281"><a href="#TSQL-281"><span class="linenos">281</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="TSQL-282"><a href="#TSQL-282"><span class="linenos">282</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="TSQL-283"><a href="#TSQL-283"><span class="linenos">283</span></a> <span class="p">),</span>
-</span><span id="TSQL-284"><a href="#TSQL-284"><span class="linenos">284</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL-285"><a href="#TSQL-285"><span class="linenos">285</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL-286"><a href="#TSQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TSQL-287"><a href="#TSQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="TSQL-288"><a href="#TSQL-288"><span class="linenos">288</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="TSQL-289"><a href="#TSQL-289"><span class="linenos">289</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="TSQL-290"><a href="#TSQL-290"><span class="linenos">290</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-291"><a href="#TSQL-291"><span class="linenos">291</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-292"><a href="#TSQL-292"><span class="linenos">292</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-293"><a href="#TSQL-293"><span class="linenos">293</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-294"><a href="#TSQL-294"><span class="linenos">294</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-295"><a href="#TSQL-295"><span class="linenos">295</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-296"><a href="#TSQL-296"><span class="linenos">296</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="TSQL-297"><a href="#TSQL-297"><span class="linenos">297</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL-298"><a href="#TSQL-298"><span class="linenos">298</span></a> <span class="p">}</span>
-</span><span id="TSQL-299"><a href="#TSQL-299"><span class="linenos">299</span></a>
-</span><span id="TSQL-300"><a href="#TSQL-300"><span class="linenos">300</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-301"><a href="#TSQL-301"><span class="linenos">301</span></a> <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><span id="TSQL-302"><a href="#TSQL-302"><span class="linenos">302</span></a> <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><span id="TSQL-303"><a href="#TSQL-303"><span class="linenos">303</span></a> <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><span id="TSQL-304"><a href="#TSQL-304"><span class="linenos">304</span></a> <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><span id="TSQL-305"><a href="#TSQL-305"><span class="linenos">305</span></a> <span class="p">}</span>
-</span><span id="TSQL-306"><a href="#TSQL-306"><span class="linenos">306</span></a>
-</span><span id="TSQL-307"><a href="#TSQL-307"><span class="linenos">307</span></a> <span class="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL-308"><a href="#TSQL-308"><span class="linenos">308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="TSQL-309"><a href="#TSQL-309"><span class="linenos">309</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL-310"><a href="#TSQL-310"><span class="linenos">310</span></a> <span class="p">}</span>
-</span><span id="TSQL-311"><a href="#TSQL-311"><span class="linenos">311</span></a>
-</span><span id="TSQL-312"><a href="#TSQL-312"><span class="linenos">312</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-313"><a href="#TSQL-313"><span class="linenos">313</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL-314"><a href="#TSQL-314"><span class="linenos">314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="TSQL-315"><a href="#TSQL-315"><span class="linenos">315</span></a> <span class="p">}</span>
-</span><span id="TSQL-316"><a href="#TSQL-316"><span class="linenos">316</span></a>
-</span><span id="TSQL-317"><a href="#TSQL-317"><span class="linenos">317</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL-318"><a href="#TSQL-318"><span class="linenos">318</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-319"><a href="#TSQL-319"><span class="linenos">319</span></a>
-</span><span id="TSQL-320"><a href="#TSQL-320"><span class="linenos">320</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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="TSQL-321"><a href="#TSQL-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="TSQL-322"><a href="#TSQL-322"><span class="linenos">322</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL-323"><a href="#TSQL-323"><span class="linenos">323</span></a>
-</span><span id="TSQL-324"><a href="#TSQL-324"><span class="linenos">324</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="TSQL-325"><a href="#TSQL-325"><span class="linenos">325</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-326"><a href="#TSQL-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="TSQL-327"><a href="#TSQL-327"><span class="linenos">327</span></a> <span class="p">)</span>
-</span><span id="TSQL-328"><a href="#TSQL-328"><span class="linenos">328</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="TSQL-329"><a href="#TSQL-329"><span class="linenos">329</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="TSQL-330"><a href="#TSQL-330"><span class="linenos">330</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL-331"><a href="#TSQL-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="TSQL-332"><a href="#TSQL-332"><span class="linenos">332</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL-333"><a href="#TSQL-333"><span class="linenos">333</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-334"><a href="#TSQL-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="TSQL-335"><a href="#TSQL-335"><span class="linenos">335</span></a> <span class="p">)</span>
-</span><span id="TSQL-336"><a href="#TSQL-336"><span class="linenos">336</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="TSQL-337"><a href="#TSQL-337"><span class="linenos">337</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="TSQL-338"><a href="#TSQL-338"><span class="linenos">338</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL-339"><a href="#TSQL-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="TSQL-340"><a href="#TSQL-340"><span class="linenos">340</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="TSQL-341"><a href="#TSQL-341"><span class="linenos">341</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><span id="TSQL-342"><a href="#TSQL-342"><span class="linenos">342</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="TSQL-343"><a href="#TSQL-343"><span class="linenos">343</span></a> <span class="p">)</span>
-</span><span id="TSQL-344"><a href="#TSQL-344"><span class="linenos">344</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
-</span><span id="TSQL-345"><a href="#TSQL-345"><span class="linenos">345</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="TSQL-346"><a href="#TSQL-346"><span class="linenos">346</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL-347"><a href="#TSQL-347"><span class="linenos">347</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-348"><a href="#TSQL-348"><span class="linenos">348</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
-</span><span id="TSQL-349"><a href="#TSQL-349"><span class="linenos">349</span></a>
-</span><span id="TSQL-350"><a href="#TSQL-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">system_time</span>
-</span><span id="TSQL-351"><a href="#TSQL-351"><span class="linenos">351</span></a>
-</span><span id="TSQL-352"><a href="#TSQL-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="TSQL-353"><a href="#TSQL-353"><span class="linenos">353</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="TSQL-354"><a href="#TSQL-354"><span class="linenos">354</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="TSQL-355"><a href="#TSQL-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="TSQL-356"><a href="#TSQL-356"><span class="linenos">356</span></a>
-</span><span id="TSQL-357"><a href="#TSQL-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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="TSQL-358"><a href="#TSQL-358"><span class="linenos">358</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="TSQL-359"><a href="#TSQL-359"><span class="linenos">359</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="TSQL-360"><a href="#TSQL-360"><span class="linenos">360</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="TSQL-361"><a href="#TSQL-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="TSQL-362"><a href="#TSQL-362"><span class="linenos">362</span></a>
-</span><span id="TSQL-363"><a href="#TSQL-363"><span class="linenos">363</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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="TSQL-364"><a href="#TSQL-364"><span class="linenos">364</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="TSQL-365"><a href="#TSQL-365"><span class="linenos">365</span></a> <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">COMMA</span><span class="p">)</span>
-</span><span id="TSQL-366"><a href="#TSQL-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="TSQL-367"><a href="#TSQL-367"><span class="linenos">367</span></a>
-</span><span id="TSQL-368"><a href="#TSQL-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL-369"><a href="#TSQL-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL-370"><a href="#TSQL-370"><span class="linenos">370</span></a>
-</span><span id="TSQL-371"><a href="#TSQL-371"><span class="linenos">371</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="TSQL-372"><a href="#TSQL-372"><span class="linenos">372</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL-373"><a href="#TSQL-373"><span class="linenos">373</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL-374"><a href="#TSQL-374"><span class="linenos">374</span></a>
-</span><span id="TSQL-375"><a href="#TSQL-375"><span class="linenos">375</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="TSQL-376"><a href="#TSQL-376"><span class="linenos">376</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">COMMA</span><span class="p">):</span>
-</span><span id="TSQL-377"><a href="#TSQL-377"><span class="linenos">377</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="TSQL-378"><a href="#TSQL-378"><span class="linenos">378</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-379"><a href="#TSQL-379"><span class="linenos">379</span></a>
-</span><span id="TSQL-380"><a href="#TSQL-380"><span class="linenos">380</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
-</span><span id="TSQL-381"><a href="#TSQL-381"><span class="linenos">381</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="TSQL-382"><a href="#TSQL-382"><span class="linenos">382</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-383"><a href="#TSQL-383"><span class="linenos">383</span></a> <span class="p">)</span>
-</span><span id="TSQL-384"><a href="#TSQL-384"><span class="linenos">384</span></a>
-</span><span id="TSQL-385"><a href="#TSQL-385"><span class="linenos">385</span></a> <span class="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
-</span><span id="TSQL-386"><a href="#TSQL-386"><span class="linenos">386</span></a>
-</span><span id="TSQL-387"><a href="#TSQL-387"><span class="linenos">387</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="TSQL-388"><a href="#TSQL-388"><span class="linenos">388</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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="TSQL-389"><a href="#TSQL-389"><span class="linenos">389</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-390"><a href="#TSQL-390"><span class="linenos">390</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="TSQL-391"><a href="#TSQL-391"><span class="linenos">391</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL-392"><a href="#TSQL-392"><span class="linenos">392</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-393"><a href="#TSQL-393"><span class="linenos">393</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="TSQL-394"><a href="#TSQL-394"><span class="linenos">394</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL-395"><a href="#TSQL-395"><span class="linenos">395</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="TSQL-396"><a href="#TSQL-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="TSQL-397"><a href="#TSQL-397"><span class="linenos">397</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="TSQL-398"><a href="#TSQL-398"><span class="linenos">398</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="TSQL-399"><a href="#TSQL-399"><span class="linenos">399</span></a> <span class="p">)</span>
-</span><span id="TSQL-400"><a href="#TSQL-400"><span class="linenos">400</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL-401"><a href="#TSQL-401"><span class="linenos">401</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL-402"><a href="#TSQL-402"><span class="linenos">402</span></a>
-</span><span id="TSQL-403"><a href="#TSQL-403"><span class="linenos">403</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="TSQL-404"><a href="#TSQL-404"><span class="linenos">404</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><span id="TSQL-405"><a href="#TSQL-405"><span class="linenos">405</span></a>
-</span><span id="TSQL-406"><a href="#TSQL-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="TSQL-407"><a href="#TSQL-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL-408"><a href="#TSQL-408"><span class="linenos">408</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="TSQL-409"><a href="#TSQL-409"><span class="linenos">409</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="TSQL-410"><a href="#TSQL-410"><span class="linenos">410</span></a>
-</span><span id="TSQL-411"><a href="#TSQL-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="TSQL-412"><a href="#TSQL-412"><span class="linenos">412</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="TSQL-413"><a href="#TSQL-413"><span class="linenos">413</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="TSQL-414"><a href="#TSQL-414"><span class="linenos">414</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL-415"><a href="#TSQL-415"><span class="linenos">415</span></a> <span class="p">):</span>
-</span><span id="TSQL-416"><a href="#TSQL-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="TSQL-417"><a href="#TSQL-417"><span class="linenos">417</span></a>
-</span><span id="TSQL-418"><a href="#TSQL-418"><span class="linenos">418</span></a> <span class="n">expressions</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_function_parameter</span><span class="p">)</span>
-</span><span id="TSQL-419"><a href="#TSQL-419"><span class="linenos">419</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="TSQL-420"><a href="#TSQL-420"><span class="linenos">420</span></a>
-</span><span id="TSQL-421"><a href="#TSQL-421"><span class="linenos">421</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="TSQL-422"><a href="#TSQL-422"><span class="linenos">422</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL-423"><a href="#TSQL-423"><span class="linenos">423</span></a>
-</span><span id="TSQL-424"><a href="#TSQL-424"><span class="linenos">424</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-425"><a href="#TSQL-425"><span class="linenos">425</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="TSQL-426"><a href="#TSQL-426"><span class="linenos">426</span></a> <span class="n">exp</span><span 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="TSQL-427"><a href="#TSQL-427"><span class="linenos">427</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="TSQL-428"><a href="#TSQL-428"><span class="linenos">428</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL-429"><a href="#TSQL-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="TSQL-430"><a href="#TSQL-430"><span class="linenos">430</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL-151"><a href="#TSQL-151"><span class="linenos">151</span></a><span class="k">class</span> <span class="nc">TSQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="TSQL-152"><a href="#TSQL-152"><span class="linenos">152</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="TSQL-153"><a href="#TSQL-153"><span class="linenos">153</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-mm-dd hh:mm:ss&#39;&quot;</span>
+</span><span id="TSQL-154"><a href="#TSQL-154"><span class="linenos">154</span></a>
+</span><span id="TSQL-155"><a href="#TSQL-155"><span class="linenos">155</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-156"><a href="#TSQL-156"><span class="linenos">156</span></a> <span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-157"><a href="#TSQL-157"><span class="linenos">157</span></a> <span class="s2">&quot;qq&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-158"><a href="#TSQL-158"><span class="linenos">158</span></a> <span class="s2">&quot;q&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-159"><a href="#TSQL-159"><span class="linenos">159</span></a> <span class="s2">&quot;quarter&quot;</span><span class="p">:</span> <span class="s2">&quot;%q&quot;</span><span class="p">,</span>
+</span><span id="TSQL-160"><a href="#TSQL-160"><span class="linenos">160</span></a> <span class="s2">&quot;dayofyear&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
+</span><span id="TSQL-161"><a href="#TSQL-161"><span class="linenos">161</span></a> <span class="s2">&quot;day&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><span id="TSQL-162"><a href="#TSQL-162"><span class="linenos">162</span></a> <span class="s2">&quot;dy&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><span id="TSQL-163"><a href="#TSQL-163"><span class="linenos">163</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-164"><a href="#TSQL-164"><span class="linenos">164</span></a> <span class="s2">&quot;week&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-165"><a href="#TSQL-165"><span class="linenos">165</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><span id="TSQL-166"><a href="#TSQL-166"><span class="linenos">166</span></a> <span class="s2">&quot;wk&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-167"><a href="#TSQL-167"><span class="linenos">167</span></a> <span class="s2">&quot;hour&quot;</span><span class="p">:</span> <span class="s2">&quot;%h&quot;</span><span class="p">,</span>
+</span><span id="TSQL-168"><a href="#TSQL-168"><span class="linenos">168</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><span id="TSQL-169"><a href="#TSQL-169"><span class="linenos">169</span></a> <span class="s2">&quot;minute&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-170"><a href="#TSQL-170"><span class="linenos">170</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><span id="TSQL-171"><a href="#TSQL-171"><span class="linenos">171</span></a> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-172"><a href="#TSQL-172"><span class="linenos">172</span></a> <span class="s2">&quot;second&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-173"><a href="#TSQL-173"><span class="linenos">173</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><span id="TSQL-174"><a href="#TSQL-174"><span class="linenos">174</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-175"><a href="#TSQL-175"><span class="linenos">175</span></a> <span class="s2">&quot;millisecond&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-176"><a href="#TSQL-176"><span class="linenos">176</span></a> <span class="s2">&quot;ms&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-177"><a href="#TSQL-177"><span class="linenos">177</span></a> <span class="s2">&quot;weekday&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-178"><a href="#TSQL-178"><span class="linenos">178</span></a> <span class="s2">&quot;dw&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span>
+</span><span id="TSQL-179"><a href="#TSQL-179"><span class="linenos">179</span></a> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="TSQL-180"><a href="#TSQL-180"><span class="linenos">180</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><span id="TSQL-181"><a href="#TSQL-181"><span class="linenos">181</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-182"><a href="#TSQL-182"><span class="linenos">182</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-183"><a href="#TSQL-183"><span class="linenos">183</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><span id="TSQL-184"><a href="#TSQL-184"><span class="linenos">184</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><span id="TSQL-185"><a href="#TSQL-185"><span class="linenos">185</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="TSQL-186"><a href="#TSQL-186"><span class="linenos">186</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="TSQL-187"><a href="#TSQL-187"><span class="linenos">187</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><span id="TSQL-188"><a href="#TSQL-188"><span class="linenos">188</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="TSQL-189"><a href="#TSQL-189"><span class="linenos">189</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><span id="TSQL-190"><a href="#TSQL-190"><span class="linenos">190</span></a> <span class="s2">&quot;d&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><span id="TSQL-191"><a href="#TSQL-191"><span class="linenos">191</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-192"><a href="#TSQL-192"><span class="linenos">192</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-193"><a href="#TSQL-193"><span class="linenos">193</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="TSQL-194"><a href="#TSQL-194"><span class="linenos">194</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-195"><a href="#TSQL-195"><span class="linenos">195</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><span id="TSQL-196"><a href="#TSQL-196"><span class="linenos">196</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><span id="TSQL-197"><a href="#TSQL-197"><span class="linenos">197</span></a> <span class="p">}</span>
+</span><span id="TSQL-198"><a href="#TSQL-198"><span class="linenos">198</span></a>
+</span><span id="TSQL-199"><a href="#TSQL-199"><span class="linenos">199</span></a> <span class="n">convert_format_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-200"><a href="#TSQL-200"><span class="linenos">200</span></a> <span class="s2">&quot;0&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-201"><a href="#TSQL-201"><span class="linenos">201</span></a> <span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-202"><a href="#TSQL-202"><span class="linenos">202</span></a> <span class="s2">&quot;2&quot;</span><span class="p">:</span> <span class="s2">&quot;%y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-203"><a href="#TSQL-203"><span class="linenos">203</span></a> <span class="s2">&quot;3&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-204"><a href="#TSQL-204"><span class="linenos">204</span></a> <span class="s2">&quot;4&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-205"><a href="#TSQL-205"><span class="linenos">205</span></a> <span class="s2">&quot;5&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-206"><a href="#TSQL-206"><span class="linenos">206</span></a> <span class="s2">&quot;6&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-207"><a href="#TSQL-207"><span class="linenos">207</span></a> <span class="s2">&quot;7&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-208"><a href="#TSQL-208"><span class="linenos">208</span></a> <span class="s2">&quot;8&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-209"><a href="#TSQL-209"><span class="linenos">209</span></a> <span class="s2">&quot;9&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-210"><a href="#TSQL-210"><span class="linenos">210</span></a> <span class="s2">&quot;10&quot;</span><span class="p">:</span> <span class="s2">&quot;mm-dd-yy&quot;</span><span class="p">,</span>
+</span><span id="TSQL-211"><a href="#TSQL-211"><span class="linenos">211</span></a> <span class="s2">&quot;11&quot;</span><span class="p">:</span> <span class="s2">&quot;yy/mm/dd&quot;</span><span class="p">,</span>
+</span><span id="TSQL-212"><a href="#TSQL-212"><span class="linenos">212</span></a> <span class="s2">&quot;12&quot;</span><span class="p">:</span> <span class="s2">&quot;yymmdd&quot;</span><span class="p">,</span>
+</span><span id="TSQL-213"><a href="#TSQL-213"><span class="linenos">213</span></a> <span class="s2">&quot;13&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:ss:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-214"><a href="#TSQL-214"><span class="linenos">214</span></a> <span class="s2">&quot;14&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-215"><a href="#TSQL-215"><span class="linenos">215</span></a> <span class="s2">&quot;20&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-216"><a href="#TSQL-216"><span class="linenos">216</span></a> <span class="s2">&quot;21&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-217"><a href="#TSQL-217"><span class="linenos">217</span></a> <span class="s2">&quot;22&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-218"><a href="#TSQL-218"><span class="linenos">218</span></a> <span class="s2">&quot;23&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-219"><a href="#TSQL-219"><span class="linenos">219</span></a> <span class="s2">&quot;24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-220"><a href="#TSQL-220"><span class="linenos">220</span></a> <span class="s2">&quot;25&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-221"><a href="#TSQL-221"><span class="linenos">221</span></a> <span class="s2">&quot;100&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-222"><a href="#TSQL-222"><span class="linenos">222</span></a> <span class="s2">&quot;101&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-223"><a href="#TSQL-223"><span class="linenos">223</span></a> <span class="s2">&quot;102&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y.%m.</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-224"><a href="#TSQL-224"><span class="linenos">224</span></a> <span class="s2">&quot;103&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">/%m/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-225"><a href="#TSQL-225"><span class="linenos">225</span></a> <span class="s2">&quot;104&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-226"><a href="#TSQL-226"><span class="linenos">226</span></a> <span class="s2">&quot;105&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">-%m-%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-227"><a href="#TSQL-227"><span class="linenos">227</span></a> <span class="s2">&quot;106&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-228"><a href="#TSQL-228"><span class="linenos">228</span></a> <span class="s2">&quot;107&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2">, %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-229"><a href="#TSQL-229"><span class="linenos">229</span></a> <span class="s2">&quot;108&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-230"><a href="#TSQL-230"><span class="linenos">230</span></a> <span class="s2">&quot;109&quot;</span><span class="p">:</span> <span class="s2">&quot;%b </span><span class="si">%d</span><span class="s2"> %Y %-I:%M:%S:</span><span class="si">%f</span><span class="s2">%p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-231"><a href="#TSQL-231"><span class="linenos">231</span></a> <span class="s2">&quot;110&quot;</span><span class="p">:</span> <span class="s2">&quot;%m-</span><span class="si">%d</span><span class="s2">-%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-232"><a href="#TSQL-232"><span class="linenos">232</span></a> <span class="s2">&quot;111&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y/%m/</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-233"><a href="#TSQL-233"><span class="linenos">233</span></a> <span class="s2">&quot;112&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-234"><a href="#TSQL-234"><span class="linenos">234</span></a> <span class="s2">&quot;113&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-235"><a href="#TSQL-235"><span class="linenos">235</span></a> <span class="s2">&quot;114&quot;</span><span class="p">:</span> <span class="s2">&quot;%H:%M:%S:</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-236"><a href="#TSQL-236"><span class="linenos">236</span></a> <span class="s2">&quot;120&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-237"><a href="#TSQL-237"><span class="linenos">237</span></a> <span class="s2">&quot;121&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-238"><a href="#TSQL-238"><span class="linenos">238</span></a> <span class="p">}</span>
+</span><span id="TSQL-239"><a href="#TSQL-239"><span class="linenos">239</span></a> <span class="c1"># not sure if complete</span>
+</span><span id="TSQL-240"><a href="#TSQL-240"><span class="linenos">240</span></a> <span class="n">format_time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-241"><a href="#TSQL-241"><span class="linenos">241</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%B %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-242"><a href="#TSQL-242"><span class="linenos">242</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-243"><a href="#TSQL-243"><span class="linenos">243</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="TSQL-244"><a href="#TSQL-244"><span class="linenos">244</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="TSQL-245"><a href="#TSQL-245"><span class="linenos">245</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-246"><a href="#TSQL-246"><span class="linenos">246</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-247"><a href="#TSQL-247"><span class="linenos">247</span></a> <span class="s2">&quot;f&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-248"><a href="#TSQL-248"><span class="linenos">248</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;%A,%B,%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-249"><a href="#TSQL-249"><span class="linenos">249</span></a> <span class="s2">&quot;g&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-250"><a href="#TSQL-250"><span class="linenos">250</span></a> <span class="s2">&quot;G&quot;</span><span class="p">:</span> <span class="s2">&quot;%m/</span><span class="si">%d</span><span class="s2">/%Y %-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-251"><a href="#TSQL-251"><span class="linenos">251</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-252"><a href="#TSQL-252"><span class="linenos">252</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%B </span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="TSQL-253"><a href="#TSQL-253"><span class="linenos">253</span></a> <span class="s2">&quot;O&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S&quot;</span><span class="p">,</span>
+</span><span id="TSQL-254"><a href="#TSQL-254"><span class="linenos">254</span></a> <span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y-%M-%D %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="TSQL-255"><a href="#TSQL-255"><span class="linenos">255</span></a> <span class="s2">&quot;U&quot;</span><span class="p">:</span> <span class="s2">&quot;%A, %B %D, %Y %H:%M:%S%z&quot;</span><span class="p">,</span>
+</span><span id="TSQL-256"><a href="#TSQL-256"><span class="linenos">256</span></a> <span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M:%S %p&quot;</span><span class="p">,</span>
+</span><span id="TSQL-257"><a href="#TSQL-257"><span class="linenos">257</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I:%M&quot;</span><span class="p">,</span>
+</span><span id="TSQL-258"><a href="#TSQL-258"><span class="linenos">258</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2"> %Y&quot;</span><span class="p">,</span>
+</span><span id="TSQL-259"><a href="#TSQL-259"><span class="linenos">259</span></a> <span class="p">}</span>
+</span><span id="TSQL-260"><a href="#TSQL-260"><span class="linenos">260</span></a>
+</span><span id="TSQL-261"><a href="#TSQL-261"><span class="linenos">261</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="TSQL-262"><a href="#TSQL-262"><span class="linenos">262</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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="TSQL-263"><a href="#TSQL-263"><span class="linenos">263</span></a>
+</span><span id="TSQL-264"><a href="#TSQL-264"><span class="linenos">264</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="TSQL-265"><a href="#TSQL-265"><span class="linenos">265</span></a>
+</span><span id="TSQL-266"><a href="#TSQL-266"><span class="linenos">266</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-267"><a href="#TSQL-267"><span class="linenos">267</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="TSQL-268"><a href="#TSQL-268"><span class="linenos">268</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL-269"><a href="#TSQL-269"><span class="linenos">269</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="TSQL-270"><a href="#TSQL-270"><span class="linenos">270</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL-271"><a href="#TSQL-271"><span class="linenos">271</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="TSQL-272"><a href="#TSQL-272"><span class="linenos">272</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="TSQL-273"><a href="#TSQL-273"><span class="linenos">273</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-274"><a href="#TSQL-274"><span class="linenos">274</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-275"><a href="#TSQL-275"><span class="linenos">275</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL-276"><a href="#TSQL-276"><span class="linenos">276</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="TSQL-277"><a href="#TSQL-277"><span class="linenos">277</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="TSQL-278"><a href="#TSQL-278"><span class="linenos">278</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="TSQL-279"><a href="#TSQL-279"><span class="linenos">279</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL-280"><a href="#TSQL-280"><span class="linenos">280</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="TSQL-281"><a href="#TSQL-281"><span class="linenos">281</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="TSQL-282"><a href="#TSQL-282"><span class="linenos">282</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="TSQL-283"><a href="#TSQL-283"><span class="linenos">283</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="TSQL-284"><a href="#TSQL-284"><span class="linenos">284</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="TSQL-285"><a href="#TSQL-285"><span class="linenos">285</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL-286"><a href="#TSQL-286"><span class="linenos">286</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="TSQL-287"><a href="#TSQL-287"><span class="linenos">287</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="TSQL-288"><a href="#TSQL-288"><span class="linenos">288</span></a> <span class="p">}</span>
+</span><span id="TSQL-289"><a href="#TSQL-289"><span class="linenos">289</span></a>
+</span><span id="TSQL-290"><a href="#TSQL-290"><span class="linenos">290</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
+</span><span id="TSQL-291"><a href="#TSQL-291"><span class="linenos">291</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="TSQL-292"><a href="#TSQL-292"><span class="linenos">292</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+</span><span id="TSQL-293"><a href="#TSQL-293"><span class="linenos">293</span></a>
+</span><span id="TSQL-294"><a href="#TSQL-294"><span class="linenos">294</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="TSQL-295"><a href="#TSQL-295"><span class="linenos">295</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-296"><a href="#TSQL-296"><span class="linenos">296</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="TSQL-297"><a href="#TSQL-297"><span class="linenos">297</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</span><span class="p">(</span>
+</span><span id="TSQL-298"><a href="#TSQL-298"><span class="linenos">298</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="TSQL-299"><a href="#TSQL-299"><span class="linenos">299</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="TSQL-300"><a href="#TSQL-300"><span class="linenos">300</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="TSQL-301"><a href="#TSQL-301"><span class="linenos">301</span></a> <span class="p">),</span>
+</span><span id="TSQL-302"><a href="#TSQL-302"><span class="linenos">302</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL-303"><a href="#TSQL-303"><span class="linenos">303</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL-304"><a href="#TSQL-304"><span class="linenos">304</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TSQL-305"><a href="#TSQL-305"><span class="linenos">305</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="TSQL-306"><a href="#TSQL-306"><span class="linenos">306</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="TSQL-307"><a href="#TSQL-307"><span class="linenos">307</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="TSQL-308"><a href="#TSQL-308"><span class="linenos">308</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-309"><a href="#TSQL-309"><span class="linenos">309</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="TSQL-310"><a href="#TSQL-310"><span class="linenos">310</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-311"><a href="#TSQL-311"><span class="linenos">311</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-312"><a href="#TSQL-312"><span class="linenos">312</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-313"><a href="#TSQL-313"><span class="linenos">313</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-314"><a href="#TSQL-314"><span class="linenos">314</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-315"><a href="#TSQL-315"><span class="linenos">315</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="TSQL-316"><a href="#TSQL-316"><span class="linenos">316</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-317"><a href="#TSQL-317"><span class="linenos">317</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-318"><a href="#TSQL-318"><span class="linenos">318</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-319"><a href="#TSQL-319"><span class="linenos">319</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL-320"><a href="#TSQL-320"><span class="linenos">320</span></a> <span class="p">}</span>
+</span><span id="TSQL-321"><a href="#TSQL-321"><span class="linenos">321</span></a>
+</span><span id="TSQL-322"><a href="#TSQL-322"><span class="linenos">322</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-323"><a href="#TSQL-323"><span class="linenos">323</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="TSQL-324"><a href="#TSQL-324"><span class="linenos">324</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="TSQL-325"><a href="#TSQL-325"><span class="linenos">325</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="TSQL-326"><a href="#TSQL-326"><span class="linenos">326</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
+</span><span id="TSQL-327"><a href="#TSQL-327"><span class="linenos">327</span></a> <span class="p">}</span>
+</span><span id="TSQL-328"><a href="#TSQL-328"><span class="linenos">328</span></a>
+</span><span id="TSQL-329"><a href="#TSQL-329"><span class="linenos">329</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-330"><a href="#TSQL-330"><span class="linenos">330</span></a> <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><span id="TSQL-331"><a href="#TSQL-331"><span class="linenos">331</span></a> <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><span id="TSQL-332"><a href="#TSQL-332"><span class="linenos">332</span></a> <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><span id="TSQL-333"><a href="#TSQL-333"><span class="linenos">333</span></a> <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><span id="TSQL-334"><a href="#TSQL-334"><span class="linenos">334</span></a> <span class="p">}</span>
+</span><span id="TSQL-335"><a href="#TSQL-335"><span class="linenos">335</span></a>
+</span><span id="TSQL-336"><a href="#TSQL-336"><span class="linenos">336</span></a> <span class="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL-337"><a href="#TSQL-337"><span class="linenos">337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="TSQL-338"><a href="#TSQL-338"><span class="linenos">338</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL-339"><a href="#TSQL-339"><span class="linenos">339</span></a> <span class="p">}</span>
+</span><span id="TSQL-340"><a href="#TSQL-340"><span class="linenos">340</span></a>
+</span><span id="TSQL-341"><a href="#TSQL-341"><span class="linenos">341</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-342"><a href="#TSQL-342"><span class="linenos">342</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL-343"><a href="#TSQL-343"><span class="linenos">343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="TSQL-344"><a href="#TSQL-344"><span class="linenos">344</span></a> <span class="p">}</span>
+</span><span id="TSQL-345"><a href="#TSQL-345"><span class="linenos">345</span></a>
+</span><span id="TSQL-346"><a href="#TSQL-346"><span class="linenos">346</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL-347"><a href="#TSQL-347"><span class="linenos">347</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL-348"><a href="#TSQL-348"><span class="linenos">348</span></a>
+</span><span id="TSQL-349"><a href="#TSQL-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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="TSQL-350"><a href="#TSQL-350"><span class="linenos">350</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
+</span><span id="TSQL-351"><a href="#TSQL-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL-352"><a href="#TSQL-352"><span class="linenos">352</span></a>
+</span><span id="TSQL-353"><a href="#TSQL-353"><span class="linenos">353</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="TSQL-354"><a href="#TSQL-354"><span class="linenos">354</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL-355"><a href="#TSQL-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
+</span><span id="TSQL-356"><a href="#TSQL-356"><span class="linenos">356</span></a> <span class="p">)</span>
+</span><span id="TSQL-357"><a href="#TSQL-357"><span class="linenos">357</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="TSQL-358"><a href="#TSQL-358"><span class="linenos">358</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="TSQL-359"><a href="#TSQL-359"><span class="linenos">359</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="TSQL-360"><a href="#TSQL-360"><span class="linenos">360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="TSQL-361"><a href="#TSQL-361"><span class="linenos">361</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="TSQL-362"><a href="#TSQL-362"><span class="linenos">362</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL-363"><a href="#TSQL-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
+</span><span id="TSQL-364"><a href="#TSQL-364"><span class="linenos">364</span></a> <span class="p">)</span>
+</span><span id="TSQL-365"><a href="#TSQL-365"><span class="linenos">365</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="TSQL-366"><a href="#TSQL-366"><span class="linenos">366</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="TSQL-367"><a href="#TSQL-367"><span class="linenos">367</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL-368"><a href="#TSQL-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
+</span><span id="TSQL-369"><a href="#TSQL-369"><span class="linenos">369</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="TSQL-370"><a href="#TSQL-370"><span class="linenos">370</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><span id="TSQL-371"><a href="#TSQL-371"><span class="linenos">371</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
+</span><span id="TSQL-372"><a href="#TSQL-372"><span class="linenos">372</span></a> <span class="p">)</span>
+</span><span id="TSQL-373"><a href="#TSQL-373"><span class="linenos">373</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
+</span><span id="TSQL-374"><a href="#TSQL-374"><span class="linenos">374</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
+</span><span id="TSQL-375"><a href="#TSQL-375"><span class="linenos">375</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL-376"><a href="#TSQL-376"><span class="linenos">376</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL-377"><a href="#TSQL-377"><span class="linenos">377</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
+</span><span id="TSQL-378"><a href="#TSQL-378"><span class="linenos">378</span></a>
+</span><span id="TSQL-379"><a href="#TSQL-379"><span class="linenos">379</span></a> <span class="k">return</span> <span class="n">system_time</span>
+</span><span id="TSQL-380"><a href="#TSQL-380"><span class="linenos">380</span></a>
+</span><span id="TSQL-381"><a href="#TSQL-381"><span class="linenos">381</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="TSQL-382"><a href="#TSQL-382"><span class="linenos">382</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="TSQL-383"><a href="#TSQL-383"><span class="linenos">383</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
+</span><span id="TSQL-384"><a href="#TSQL-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="TSQL-385"><a href="#TSQL-385"><span class="linenos">385</span></a>
+</span><span id="TSQL-386"><a href="#TSQL-386"><span class="linenos">386</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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="TSQL-387"><a href="#TSQL-387"><span class="linenos">387</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="TSQL-388"><a href="#TSQL-388"><span class="linenos">388</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="TSQL-389"><a href="#TSQL-389"><span class="linenos">389</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="TSQL-390"><a href="#TSQL-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="n">returns</span>
+</span><span id="TSQL-391"><a href="#TSQL-391"><span class="linenos">391</span></a>
+</span><span id="TSQL-392"><a href="#TSQL-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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="TSQL-393"><a href="#TSQL-393"><span class="linenos">393</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="TSQL-394"><a href="#TSQL-394"><span class="linenos">394</span></a> <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">COMMA</span><span class="p">)</span>
+</span><span id="TSQL-395"><a href="#TSQL-395"><span class="linenos">395</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="TSQL-396"><a href="#TSQL-396"><span class="linenos">396</span></a>
+</span><span id="TSQL-397"><a href="#TSQL-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL-398"><a href="#TSQL-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL-399"><a href="#TSQL-399"><span class="linenos">399</span></a>
+</span><span id="TSQL-400"><a href="#TSQL-400"><span class="linenos">400</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="TSQL-401"><a href="#TSQL-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL-402"><a href="#TSQL-402"><span class="linenos">402</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-403"><a href="#TSQL-403"><span class="linenos">403</span></a>
+</span><span id="TSQL-404"><a href="#TSQL-404"><span class="linenos">404</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="TSQL-405"><a href="#TSQL-405"><span class="linenos">405</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">COMMA</span><span class="p">):</span>
+</span><span id="TSQL-406"><a href="#TSQL-406"><span class="linenos">406</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="TSQL-407"><a href="#TSQL-407"><span class="linenos">407</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-408"><a href="#TSQL-408"><span class="linenos">408</span></a>
+</span><span id="TSQL-409"><a href="#TSQL-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
+</span><span id="TSQL-410"><a href="#TSQL-410"><span class="linenos">410</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="TSQL-411"><a href="#TSQL-411"><span class="linenos">411</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-412"><a href="#TSQL-412"><span class="linenos">412</span></a> <span class="p">)</span>
+</span><span id="TSQL-413"><a href="#TSQL-413"><span class="linenos">413</span></a>
+</span><span id="TSQL-414"><a href="#TSQL-414"><span class="linenos">414</span></a> <span class="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL-415"><a href="#TSQL-415"><span class="linenos">415</span></a>
+</span><span id="TSQL-416"><a href="#TSQL-416"><span class="linenos">416</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="TSQL-417"><a href="#TSQL-417"><span class="linenos">417</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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="TSQL-418"><a href="#TSQL-418"><span class="linenos">418</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL-419"><a href="#TSQL-419"><span class="linenos">419</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="TSQL-420"><a href="#TSQL-420"><span class="linenos">420</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL-421"><a href="#TSQL-421"><span class="linenos">421</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL-422"><a href="#TSQL-422"><span class="linenos">422</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="TSQL-423"><a href="#TSQL-423"><span class="linenos">423</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL-424"><a href="#TSQL-424"><span class="linenos">424</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="TSQL-425"><a href="#TSQL-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="TSQL-426"><a href="#TSQL-426"><span class="linenos">426</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="TSQL-427"><a href="#TSQL-427"><span class="linenos">427</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="TSQL-428"><a href="#TSQL-428"><span class="linenos">428</span></a> <span class="p">)</span>
+</span><span id="TSQL-429"><a href="#TSQL-429"><span class="linenos">429</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL-430"><a href="#TSQL-430"><span class="linenos">430</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
</span><span id="TSQL-431"><a href="#TSQL-431"><span class="linenos">431</span></a>
-</span><span id="TSQL-432"><a href="#TSQL-432"><span class="linenos">432</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-433"><a href="#TSQL-433"><span class="linenos">433</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="TSQL-434"><a href="#TSQL-434"><span class="linenos">434</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="TSQL-435"><a href="#TSQL-435"><span class="linenos">435</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="TSQL-436"><a href="#TSQL-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL-437"><a href="#TSQL-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL-438"><a href="#TSQL-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="TSQL-439"><a href="#TSQL-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL-440"><a href="#TSQL-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL-441"><a href="#TSQL-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="TSQL-442"><a href="#TSQL-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="TSQL-443"><a href="#TSQL-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="TSQL-444"><a href="#TSQL-444"><span class="linenos">444</span></a> <span class="p">}</span>
-</span><span id="TSQL-445"><a href="#TSQL-445"><span class="linenos">445</span></a>
-</span><span id="TSQL-446"><a href="#TSQL-446"><span class="linenos">446</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">ReturnsProperty</span><span class="p">)</span>
-</span><span id="TSQL-447"><a href="#TSQL-447"><span class="linenos">447</span></a>
-</span><span id="TSQL-448"><a href="#TSQL-448"><span class="linenos">448</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL-432"><a href="#TSQL-432"><span class="linenos">432</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="TSQL-433"><a href="#TSQL-433"><span class="linenos">433</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="TSQL-434"><a href="#TSQL-434"><span class="linenos">434</span></a>
+</span><span id="TSQL-435"><a href="#TSQL-435"><span class="linenos">435</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="TSQL-436"><a href="#TSQL-436"><span class="linenos">436</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL-437"><a href="#TSQL-437"><span class="linenos">437</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="TSQL-438"><a href="#TSQL-438"><span class="linenos">438</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="TSQL-439"><a href="#TSQL-439"><span class="linenos">439</span></a>
+</span><span id="TSQL-440"><a href="#TSQL-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="TSQL-441"><a href="#TSQL-441"><span class="linenos">441</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="TSQL-442"><a href="#TSQL-442"><span class="linenos">442</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="TSQL-443"><a href="#TSQL-443"><span class="linenos">443</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL-444"><a href="#TSQL-444"><span class="linenos">444</span></a> <span class="p">):</span>
+</span><span id="TSQL-445"><a href="#TSQL-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL-446"><a href="#TSQL-446"><span class="linenos">446</span></a>
+</span><span id="TSQL-447"><a href="#TSQL-447"><span class="linenos">447</span></a> <span class="n">expressions</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_function_parameter</span><span class="p">)</span>
+</span><span id="TSQL-448"><a href="#TSQL-448"><span class="linenos">448</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="TSQL-449"><a href="#TSQL-449"><span class="linenos">449</span></a>
-</span><span id="TSQL-450"><a href="#TSQL-450"><span class="linenos">450</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="TSQL-451"><a href="#TSQL-451"><span class="linenos">451</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="TSQL-450"><a href="#TSQL-450"><span class="linenos">450</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="TSQL-451"><a href="#TSQL-451"><span class="linenos">451</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="TSQL-452"><a href="#TSQL-452"><span class="linenos">452</span></a>
-</span><span id="TSQL-453"><a href="#TSQL-453"><span class="linenos">453</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-454"><a href="#TSQL-454"><span class="linenos">454</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL-455"><a href="#TSQL-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL-456"><a href="#TSQL-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL-457"><a href="#TSQL-457"><span class="linenos">457</span></a>
-</span><span id="TSQL-458"><a href="#TSQL-458"><span class="linenos">458</span></a> <span class="n">start</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="TSQL-459"><a href="#TSQL-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL-460"><a href="#TSQL-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-461"><a href="#TSQL-461"><span class="linenos">461</span></a>
-</span><span id="TSQL-462"><a href="#TSQL-462"><span class="linenos">462</span></a> <span class="n">end</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="TSQL-463"><a href="#TSQL-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL-464"><a href="#TSQL-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-465"><a href="#TSQL-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL-466"><a href="#TSQL-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a>
-</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a>
-</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
+</span><span id="TSQL-453"><a href="#TSQL-453"><span class="linenos">453</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-454"><a href="#TSQL-454"><span class="linenos">454</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="TSQL-455"><a href="#TSQL-455"><span class="linenos">455</span></a> <span class="n">exp</span><span 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="TSQL-456"><a href="#TSQL-456"><span class="linenos">456</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="TSQL-457"><a href="#TSQL-457"><span class="linenos">457</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL-458"><a href="#TSQL-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="TSQL-459"><a href="#TSQL-459"><span class="linenos">459</span></a> <span class="p">}</span>
+</span><span id="TSQL-460"><a href="#TSQL-460"><span class="linenos">460</span></a>
+</span><span id="TSQL-461"><a href="#TSQL-461"><span class="linenos">461</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-462"><a href="#TSQL-462"><span class="linenos">462</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="TSQL-463"><a href="#TSQL-463"><span class="linenos">463</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="TSQL-464"><a href="#TSQL-464"><span class="linenos">464</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="TSQL-465"><a href="#TSQL-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="TSQL-466"><a href="#TSQL-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</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 class="s2">&quot;HASHBYTES&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="s2">&quot;MD5&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><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL-474"><a href="#TSQL-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</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 class="s2">&quot;HASHBYTES&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="s2">&quot;SHA1&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><span id="TSQL-475"><a href="#TSQL-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</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="TSQL-476"><a href="#TSQL-476"><span class="linenos">476</span></a> <span class="s2">&quot;HASHBYTES&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="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</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;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TSQL-477"><a href="#TSQL-477"><span class="linenos">477</span></a> <span class="p">),</span>
+</span><span id="TSQL-478"><a href="#TSQL-478"><span class="linenos">478</span></a> <span class="p">}</span>
+</span><span id="TSQL-479"><a href="#TSQL-479"><span class="linenos">479</span></a>
+</span><span id="TSQL-480"><a href="#TSQL-480"><span class="linenos">480</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">ReturnsProperty</span><span class="p">)</span>
+</span><span id="TSQL-481"><a href="#TSQL-481"><span class="linenos">481</span></a>
+</span><span id="TSQL-482"><a href="#TSQL-482"><span class="linenos">482</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-483"><a href="#TSQL-483"><span class="linenos">483</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="TSQL-484"><a href="#TSQL-484"><span class="linenos">484</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="TSQL-485"><a href="#TSQL-485"><span class="linenos">485</span></a> <span class="p">}</span>
+</span><span id="TSQL-486"><a href="#TSQL-486"><span class="linenos">486</span></a>
+</span><span id="TSQL-487"><a href="#TSQL-487"><span class="linenos">487</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL-488"><a href="#TSQL-488"><span class="linenos">488</span></a>
+</span><span id="TSQL-489"><a href="#TSQL-489"><span class="linenos">489</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="TSQL-490"><a href="#TSQL-490"><span class="linenos">490</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="TSQL-491"><a href="#TSQL-491"><span class="linenos">491</span></a>
+</span><span id="TSQL-492"><a href="#TSQL-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-493"><a href="#TSQL-493"><span class="linenos">493</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL-494"><a href="#TSQL-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL-495"><a href="#TSQL-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL-496"><a href="#TSQL-496"><span class="linenos">496</span></a>
+</span><span id="TSQL-497"><a href="#TSQL-497"><span class="linenos">497</span></a> <span class="n">start</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="TSQL-498"><a href="#TSQL-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL-499"><a href="#TSQL-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-500"><a href="#TSQL-500"><span class="linenos">500</span></a>
+</span><span id="TSQL-501"><a href="#TSQL-501"><span class="linenos">501</span></a> <span class="n">end</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="TSQL-502"><a href="#TSQL-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL-503"><a href="#TSQL-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-504"><a href="#TSQL-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL-505"><a href="#TSQL-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-506"><a href="#TSQL-506"><span class="linenos">506</span></a>
+</span><span id="TSQL-507"><a href="#TSQL-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL-508"><a href="#TSQL-508"><span class="linenos">508</span></a>
+</span><span id="TSQL-509"><a href="#TSQL-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-510"><a href="#TSQL-510"><span class="linenos">510</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL-511"><a href="#TSQL-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-512"><a href="#TSQL-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
</span></pre></div>
@@ -970,37 +1031,38 @@
</div>
<a class="headerlink" href="#TSQL.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Tokenizer-244"><a href="#TSQL.Tokenizer-244"><span class="linenos">244</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="TSQL.Tokenizer-245"><a href="#TSQL.Tokenizer-245"><span class="linenos">245</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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="TSQL.Tokenizer-246"><a href="#TSQL.Tokenizer-246"><span class="linenos">246</span></a>
-</span><span id="TSQL.Tokenizer-247"><a href="#TSQL.Tokenizer-247"><span class="linenos">247</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="TSQL.Tokenizer-248"><a href="#TSQL.Tokenizer-248"><span class="linenos">248</span></a>
-</span><span id="TSQL.Tokenizer-249"><a href="#TSQL.Tokenizer-249"><span class="linenos">249</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Tokenizer-250"><a href="#TSQL.Tokenizer-250"><span class="linenos">250</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="TSQL.Tokenizer-251"><a href="#TSQL.Tokenizer-251"><span class="linenos">251</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-252"><a href="#TSQL.Tokenizer-252"><span class="linenos">252</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-253"><a href="#TSQL.Tokenizer-253"><span class="linenos">253</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-254"><a href="#TSQL.Tokenizer-254"><span class="linenos">254</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-255"><a href="#TSQL.Tokenizer-255"><span class="linenos">255</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-256"><a href="#TSQL.Tokenizer-256"><span class="linenos">256</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-257"><a href="#TSQL.Tokenizer-257"><span class="linenos">257</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-258"><a href="#TSQL.Tokenizer-258"><span class="linenos">258</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-259"><a href="#TSQL.Tokenizer-259"><span class="linenos">259</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-260"><a href="#TSQL.Tokenizer-260"><span class="linenos">260</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-261"><a href="#TSQL.Tokenizer-261"><span class="linenos">261</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-262"><a href="#TSQL.Tokenizer-262"><span class="linenos">262</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-263"><a href="#TSQL.Tokenizer-263"><span class="linenos">263</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-264"><a href="#TSQL.Tokenizer-264"><span class="linenos">264</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-265"><a href="#TSQL.Tokenizer-265"><span class="linenos">265</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-266"><a href="#TSQL.Tokenizer-266"><span class="linenos">266</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="TSQL.Tokenizer-267"><a href="#TSQL.Tokenizer-267"><span class="linenos">267</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-268"><a href="#TSQL.Tokenizer-268"><span class="linenos">268</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-269"><a href="#TSQL.Tokenizer-269"><span class="linenos">269</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
-</span><span id="TSQL.Tokenizer-270"><a href="#TSQL.Tokenizer-270"><span class="linenos">270</span></a> <span class="p">}</span>
-</span><span id="TSQL.Tokenizer-271"><a href="#TSQL.Tokenizer-271"><span class="linenos">271</span></a>
-</span><span id="TSQL.Tokenizer-272"><a href="#TSQL.Tokenizer-272"><span class="linenos">272</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
-</span><span id="TSQL.Tokenizer-273"><a href="#TSQL.Tokenizer-273"><span class="linenos">273</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="TSQL.Tokenizer-274"><a href="#TSQL.Tokenizer-274"><span class="linenos">274</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Tokenizer-261"><a href="#TSQL.Tokenizer-261"><span class="linenos">261</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="TSQL.Tokenizer-262"><a href="#TSQL.Tokenizer-262"><span class="linenos">262</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</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="TSQL.Tokenizer-263"><a href="#TSQL.Tokenizer-263"><span class="linenos">263</span></a>
+</span><span id="TSQL.Tokenizer-264"><a href="#TSQL.Tokenizer-264"><span class="linenos">264</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="TSQL.Tokenizer-265"><a href="#TSQL.Tokenizer-265"><span class="linenos">265</span></a>
+</span><span id="TSQL.Tokenizer-266"><a href="#TSQL.Tokenizer-266"><span class="linenos">266</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Tokenizer-267"><a href="#TSQL.Tokenizer-267"><span class="linenos">267</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="TSQL.Tokenizer-268"><a href="#TSQL.Tokenizer-268"><span class="linenos">268</span></a> <span class="s2">&quot;DATETIME2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-269"><a href="#TSQL.Tokenizer-269"><span class="linenos">269</span></a> <span class="s2">&quot;DATETIMEOFFSET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-270"><a href="#TSQL.Tokenizer-270"><span class="linenos">270</span></a> <span class="s2">&quot;DECLARE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-271"><a href="#TSQL.Tokenizer-271"><span class="linenos">271</span></a> <span class="s2">&quot;IMAGE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-272"><a href="#TSQL.Tokenizer-272"><span class="linenos">272</span></a> <span class="s2">&quot;MONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-273"><a href="#TSQL.Tokenizer-273"><span class="linenos">273</span></a> <span class="s2">&quot;NTEXT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-274"><a href="#TSQL.Tokenizer-274"><span class="linenos">274</span></a> <span class="s2">&quot;NVARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-275"><a href="#TSQL.Tokenizer-275"><span class="linenos">275</span></a> <span class="s2">&quot;PRINT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-276"><a href="#TSQL.Tokenizer-276"><span class="linenos">276</span></a> <span class="s2">&quot;PROC&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-277"><a href="#TSQL.Tokenizer-277"><span class="linenos">277</span></a> <span class="s2">&quot;REAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-278"><a href="#TSQL.Tokenizer-278"><span class="linenos">278</span></a> <span class="s2">&quot;ROWVERSION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-279"><a href="#TSQL.Tokenizer-279"><span class="linenos">279</span></a> <span class="s2">&quot;SMALLDATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-280"><a href="#TSQL.Tokenizer-280"><span class="linenos">280</span></a> <span class="s2">&quot;SMALLMONEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-281"><a href="#TSQL.Tokenizer-281"><span class="linenos">281</span></a> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-282"><a href="#TSQL.Tokenizer-282"><span class="linenos">282</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-283"><a href="#TSQL.Tokenizer-283"><span class="linenos">283</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="TSQL.Tokenizer-284"><a href="#TSQL.Tokenizer-284"><span class="linenos">284</span></a> <span class="s2">&quot;UNIQUEIDENTIFIER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUEIDENTIFIER</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-285"><a href="#TSQL.Tokenizer-285"><span class="linenos">285</span></a> <span class="s2">&quot;VARCHAR(MAX)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-286"><a href="#TSQL.Tokenizer-286"><span class="linenos">286</span></a> <span class="s2">&quot;XML&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-287"><a href="#TSQL.Tokenizer-287"><span class="linenos">287</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="TSQL.Tokenizer-288"><a href="#TSQL.Tokenizer-288"><span class="linenos">288</span></a> <span class="p">}</span>
+</span><span id="TSQL.Tokenizer-289"><a href="#TSQL.Tokenizer-289"><span class="linenos">289</span></a>
+</span><span id="TSQL.Tokenizer-290"><a href="#TSQL.Tokenizer-290"><span class="linenos">290</span></a> <span class="c1"># TSQL allows @, # to appear as a variable/identifier prefix</span>
+</span><span id="TSQL.Tokenizer-291"><a href="#TSQL.Tokenizer-291"><span class="linenos">291</span></a> <span class="n">SINGLE_TOKENS</span> <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">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="TSQL.Tokenizer-292"><a href="#TSQL.Tokenizer-292"><span class="linenos">292</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -1028,150 +1090,161 @@
</div>
<a class="headerlink" href="#TSQL.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Parser-276"><a href="#TSQL.Parser-276"><span class="linenos">276</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="TSQL.Parser-277"><a href="#TSQL.Parser-277"><span class="linenos">277</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-278"><a href="#TSQL.Parser-278"><span class="linenos">278</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="TSQL.Parser-279"><a href="#TSQL.Parser-279"><span class="linenos">279</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</span><span class="p">(</span>
-</span><span id="TSQL.Parser-280"><a href="#TSQL.Parser-280"><span class="linenos">280</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="TSQL.Parser-281"><a href="#TSQL.Parser-281"><span class="linenos">281</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="TSQL.Parser-282"><a href="#TSQL.Parser-282"><span class="linenos">282</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="TSQL.Parser-283"><a href="#TSQL.Parser-283"><span class="linenos">283</span></a> <span class="p">),</span>
-</span><span id="TSQL.Parser-284"><a href="#TSQL.Parser-284"><span class="linenos">284</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL.Parser-285"><a href="#TSQL.Parser-285"><span class="linenos">285</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
-</span><span id="TSQL.Parser-286"><a href="#TSQL.Parser-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="TSQL.Parser-287"><a href="#TSQL.Parser-287"><span class="linenos">287</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
-</span><span id="TSQL.Parser-288"><a href="#TSQL.Parser-288"><span class="linenos">288</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
-</span><span id="TSQL.Parser-289"><a href="#TSQL.Parser-289"><span class="linenos">289</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
-</span><span id="TSQL.Parser-290"><a href="#TSQL.Parser-290"><span class="linenos">290</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-291"><a href="#TSQL.Parser-291"><span class="linenos">291</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-292"><a href="#TSQL.Parser-292"><span class="linenos">292</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-293"><a href="#TSQL.Parser-293"><span class="linenos">293</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-294"><a href="#TSQL.Parser-294"><span class="linenos">294</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-295"><a href="#TSQL.Parser-295"><span class="linenos">295</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-296"><a href="#TSQL.Parser-296"><span class="linenos">296</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="TSQL.Parser-297"><a href="#TSQL.Parser-297"><span class="linenos">297</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="TSQL.Parser-298"><a href="#TSQL.Parser-298"><span class="linenos">298</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-299"><a href="#TSQL.Parser-299"><span class="linenos">299</span></a>
-</span><span id="TSQL.Parser-300"><a href="#TSQL.Parser-300"><span class="linenos">300</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-301"><a href="#TSQL.Parser-301"><span class="linenos">301</span></a> <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><span id="TSQL.Parser-302"><a href="#TSQL.Parser-302"><span class="linenos">302</span></a> <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><span id="TSQL.Parser-303"><a href="#TSQL.Parser-303"><span class="linenos">303</span></a> <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><span id="TSQL.Parser-304"><a href="#TSQL.Parser-304"><span class="linenos">304</span></a> <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><span id="TSQL.Parser-305"><a href="#TSQL.Parser-305"><span class="linenos">305</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-306"><a href="#TSQL.Parser-306"><span class="linenos">306</span></a>
-</span><span id="TSQL.Parser-307"><a href="#TSQL.Parser-307"><span class="linenos">307</span></a> <span class="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL.Parser-308"><a href="#TSQL.Parser-308"><span class="linenos">308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="TSQL.Parser-309"><a href="#TSQL.Parser-309"><span class="linenos">309</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL.Parser-310"><a href="#TSQL.Parser-310"><span class="linenos">310</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-311"><a href="#TSQL.Parser-311"><span class="linenos">311</span></a>
-</span><span id="TSQL.Parser-312"><a href="#TSQL.Parser-312"><span class="linenos">312</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Parser-313"><a href="#TSQL.Parser-313"><span class="linenos">313</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL.Parser-314"><a href="#TSQL.Parser-314"><span class="linenos">314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
-</span><span id="TSQL.Parser-315"><a href="#TSQL.Parser-315"><span class="linenos">315</span></a> <span class="p">}</span>
-</span><span id="TSQL.Parser-316"><a href="#TSQL.Parser-316"><span class="linenos">316</span></a>
-</span><span id="TSQL.Parser-317"><a href="#TSQL.Parser-317"><span class="linenos">317</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="TSQL.Parser-318"><a href="#TSQL.Parser-318"><span class="linenos">318</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Parser-319"><a href="#TSQL.Parser-319"><span class="linenos">319</span></a>
-</span><span id="TSQL.Parser-320"><a href="#TSQL.Parser-320"><span class="linenos">320</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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="TSQL.Parser-321"><a href="#TSQL.Parser-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-322"><a href="#TSQL.Parser-322"><span class="linenos">322</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-323"><a href="#TSQL.Parser-323"><span class="linenos">323</span></a>
-</span><span id="TSQL.Parser-324"><a href="#TSQL.Parser-324"><span class="linenos">324</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-325"><a href="#TSQL.Parser-325"><span class="linenos">325</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-326"><a href="#TSQL.Parser-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
-</span><span id="TSQL.Parser-327"><a href="#TSQL.Parser-327"><span class="linenos">327</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-328"><a href="#TSQL.Parser-328"><span class="linenos">328</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="TSQL.Parser-329"><a href="#TSQL.Parser-329"><span class="linenos">329</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="TSQL.Parser-330"><a href="#TSQL.Parser-330"><span class="linenos">330</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL.Parser-331"><a href="#TSQL.Parser-331"><span class="linenos">331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="TSQL.Parser-332"><a href="#TSQL.Parser-332"><span class="linenos">332</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="TSQL.Parser-333"><a href="#TSQL.Parser-333"><span class="linenos">333</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-334"><a href="#TSQL.Parser-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
-</span><span id="TSQL.Parser-335"><a href="#TSQL.Parser-335"><span class="linenos">335</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-336"><a href="#TSQL.Parser-336"><span class="linenos">336</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="TSQL.Parser-337"><a href="#TSQL.Parser-337"><span class="linenos">337</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="TSQL.Parser-338"><a href="#TSQL.Parser-338"><span class="linenos">338</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="TSQL.Parser-339"><a href="#TSQL.Parser-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
-</span><span id="TSQL.Parser-340"><a href="#TSQL.Parser-340"><span class="linenos">340</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="TSQL.Parser-341"><a href="#TSQL.Parser-341"><span class="linenos">341</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><span id="TSQL.Parser-342"><a href="#TSQL.Parser-342"><span class="linenos">342</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Parser-343"><a href="#TSQL.Parser-343"><span class="linenos">343</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-344"><a href="#TSQL.Parser-344"><span class="linenos">344</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
-</span><span id="TSQL.Parser-345"><a href="#TSQL.Parser-345"><span class="linenos">345</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Parser-346"><a href="#TSQL.Parser-346"><span class="linenos">346</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="TSQL.Parser-347"><a href="#TSQL.Parser-347"><span class="linenos">347</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-348"><a href="#TSQL.Parser-348"><span class="linenos">348</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Parser-349"><a href="#TSQL.Parser-349"><span class="linenos">349</span></a>
-</span><span id="TSQL.Parser-350"><a href="#TSQL.Parser-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">system_time</span>
-</span><span id="TSQL.Parser-351"><a href="#TSQL.Parser-351"><span class="linenos">351</span></a>
-</span><span id="TSQL.Parser-352"><a href="#TSQL.Parser-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="TSQL.Parser-353"><a href="#TSQL.Parser-353"><span class="linenos">353</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="TSQL.Parser-354"><a href="#TSQL.Parser-354"><span class="linenos">354</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
-</span><span id="TSQL.Parser-355"><a href="#TSQL.Parser-355"><span class="linenos">355</span></a> <span class="k">return</span> <span class="n">table</span>
-</span><span id="TSQL.Parser-356"><a href="#TSQL.Parser-356"><span class="linenos">356</span></a>
-</span><span id="TSQL.Parser-357"><a href="#TSQL.Parser-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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="TSQL.Parser-358"><a href="#TSQL.Parser-358"><span class="linenos">358</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
-</span><span id="TSQL.Parser-359"><a href="#TSQL.Parser-359"><span class="linenos">359</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
-</span><span id="TSQL.Parser-360"><a href="#TSQL.Parser-360"><span class="linenos">360</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="TSQL.Parser-361"><a href="#TSQL.Parser-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">returns</span>
-</span><span id="TSQL.Parser-362"><a href="#TSQL.Parser-362"><span class="linenos">362</span></a>
-</span><span id="TSQL.Parser-363"><a href="#TSQL.Parser-363"><span class="linenos">363</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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="TSQL.Parser-364"><a href="#TSQL.Parser-364"><span class="linenos">364</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="TSQL.Parser-365"><a href="#TSQL.Parser-365"><span class="linenos">365</span></a> <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">COMMA</span><span class="p">)</span>
-</span><span id="TSQL.Parser-366"><a href="#TSQL.Parser-366"><span class="linenos">366</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="TSQL.Parser-367"><a href="#TSQL.Parser-367"><span class="linenos">367</span></a>
-</span><span id="TSQL.Parser-368"><a href="#TSQL.Parser-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="TSQL.Parser-369"><a href="#TSQL.Parser-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-370"><a href="#TSQL.Parser-370"><span class="linenos">370</span></a>
-</span><span id="TSQL.Parser-371"><a href="#TSQL.Parser-371"><span class="linenos">371</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
-</span><span id="TSQL.Parser-372"><a href="#TSQL.Parser-372"><span class="linenos">372</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL.Parser-373"><a href="#TSQL.Parser-373"><span class="linenos">373</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL.Parser-374"><a href="#TSQL.Parser-374"><span class="linenos">374</span></a>
-</span><span id="TSQL.Parser-375"><a href="#TSQL.Parser-375"><span class="linenos">375</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
-</span><span id="TSQL.Parser-376"><a href="#TSQL.Parser-376"><span class="linenos">376</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">COMMA</span><span class="p">):</span>
-</span><span id="TSQL.Parser-377"><a href="#TSQL.Parser-377"><span class="linenos">377</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="TSQL.Parser-378"><a href="#TSQL.Parser-378"><span class="linenos">378</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Parser-379"><a href="#TSQL.Parser-379"><span class="linenos">379</span></a>
-</span><span id="TSQL.Parser-380"><a href="#TSQL.Parser-380"><span class="linenos">380</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
-</span><span id="TSQL.Parser-381"><a href="#TSQL.Parser-381"><span class="linenos">381</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="TSQL.Parser-382"><a href="#TSQL.Parser-382"><span class="linenos">382</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Parser-383"><a href="#TSQL.Parser-383"><span class="linenos">383</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-384"><a href="#TSQL.Parser-384"><span class="linenos">384</span></a>
-</span><span id="TSQL.Parser-385"><a href="#TSQL.Parser-385"><span class="linenos">385</span></a> <span class="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
-</span><span id="TSQL.Parser-386"><a href="#TSQL.Parser-386"><span class="linenos">386</span></a>
-</span><span id="TSQL.Parser-387"><a href="#TSQL.Parser-387"><span class="linenos">387</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
-</span><span id="TSQL.Parser-388"><a href="#TSQL.Parser-388"><span class="linenos">388</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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="TSQL.Parser-389"><a href="#TSQL.Parser-389"><span class="linenos">389</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-390"><a href="#TSQL.Parser-390"><span class="linenos">390</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
-</span><span id="TSQL.Parser-391"><a href="#TSQL.Parser-391"><span class="linenos">391</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL.Parser-392"><a href="#TSQL.Parser-392"><span class="linenos">392</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-393"><a href="#TSQL.Parser-393"><span class="linenos">393</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
-</span><span id="TSQL.Parser-394"><a href="#TSQL.Parser-394"><span class="linenos">394</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
-</span><span id="TSQL.Parser-395"><a href="#TSQL.Parser-395"><span class="linenos">395</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="TSQL.Parser-396"><a href="#TSQL.Parser-396"><span class="linenos">396</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="TSQL.Parser-397"><a href="#TSQL.Parser-397"><span class="linenos">397</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="TSQL.Parser-398"><a href="#TSQL.Parser-398"><span class="linenos">398</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
-</span><span id="TSQL.Parser-399"><a href="#TSQL.Parser-399"><span class="linenos">399</span></a> <span class="p">)</span>
-</span><span id="TSQL.Parser-400"><a href="#TSQL.Parser-400"><span class="linenos">400</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL.Parser-401"><a href="#TSQL.Parser-401"><span class="linenos">401</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
-</span><span id="TSQL.Parser-402"><a href="#TSQL.Parser-402"><span class="linenos">402</span></a>
-</span><span id="TSQL.Parser-403"><a href="#TSQL.Parser-403"><span class="linenos">403</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
-</span><span id="TSQL.Parser-404"><a href="#TSQL.Parser-404"><span class="linenos">404</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
-</span><span id="TSQL.Parser-405"><a href="#TSQL.Parser-405"><span class="linenos">405</span></a>
-</span><span id="TSQL.Parser-406"><a href="#TSQL.Parser-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="TSQL.Parser-407"><a href="#TSQL.Parser-407"><span class="linenos">407</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="TSQL.Parser-408"><a href="#TSQL.Parser-408"><span class="linenos">408</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="TSQL.Parser-409"><a href="#TSQL.Parser-409"><span class="linenos">409</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="TSQL.Parser-410"><a href="#TSQL.Parser-410"><span class="linenos">410</span></a>
-</span><span id="TSQL.Parser-411"><a href="#TSQL.Parser-411"><span class="linenos">411</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="TSQL.Parser-412"><a href="#TSQL.Parser-412"><span class="linenos">412</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
-</span><span id="TSQL.Parser-413"><a href="#TSQL.Parser-413"><span class="linenos">413</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
-</span><span id="TSQL.Parser-414"><a href="#TSQL.Parser-414"><span class="linenos">414</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="TSQL.Parser-415"><a href="#TSQL.Parser-415"><span class="linenos">415</span></a> <span class="p">):</span>
-</span><span id="TSQL.Parser-416"><a href="#TSQL.Parser-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="TSQL.Parser-417"><a href="#TSQL.Parser-417"><span class="linenos">417</span></a>
-</span><span id="TSQL.Parser-418"><a href="#TSQL.Parser-418"><span class="linenos">418</span></a> <span class="n">expressions</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_function_parameter</span><span class="p">)</span>
-</span><span id="TSQL.Parser-419"><a href="#TSQL.Parser-419"><span class="linenos">419</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Parser-294"><a href="#TSQL.Parser-294"><span class="linenos">294</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="TSQL.Parser-295"><a href="#TSQL.Parser-295"><span class="linenos">295</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-296"><a href="#TSQL.Parser-296"><span class="linenos">296</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="TSQL.Parser-297"><a href="#TSQL.Parser-297"><span class="linenos">297</span></a> <span class="s2">&quot;CHARINDEX&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">StrPosition</span><span class="p">(</span>
+</span><span id="TSQL.Parser-298"><a href="#TSQL.Parser-298"><span class="linenos">298</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="TSQL.Parser-299"><a href="#TSQL.Parser-299"><span class="linenos">299</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="TSQL.Parser-300"><a href="#TSQL.Parser-300"><span class="linenos">300</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="TSQL.Parser-301"><a href="#TSQL.Parser-301"><span class="linenos">301</span></a> <span class="p">),</span>
+</span><span id="TSQL.Parser-302"><a href="#TSQL.Parser-302"><span class="linenos">302</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL.Parser-303"><a href="#TSQL.Parser-303"><span class="linenos">303</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 class="n">unit_mapping</span><span class="o">=</span><span class="n">DATE_DELTA_INTERVAL</span><span class="p">),</span>
+</span><span id="TSQL.Parser-304"><a href="#TSQL.Parser-304"><span class="linenos">304</span></a> <span class="s2">&quot;DATENAME&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">,</span> <span class="n">full_format_mapping</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="TSQL.Parser-305"><a href="#TSQL.Parser-305"><span class="linenos">305</span></a> <span class="s2">&quot;DATEPART&quot;</span><span class="p">:</span> <span class="n">_format_time_lambda</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">),</span>
+</span><span id="TSQL.Parser-306"><a href="#TSQL.Parser-306"><span class="linenos">306</span></a> <span class="s2">&quot;EOMONTH&quot;</span><span class="p">:</span> <span class="n">_parse_eomonth</span><span class="p">,</span>
+</span><span id="TSQL.Parser-307"><a href="#TSQL.Parser-307"><span class="linenos">307</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">_parse_format</span><span class="p">,</span>
+</span><span id="TSQL.Parser-308"><a href="#TSQL.Parser-308"><span class="linenos">308</span></a> <span class="s2">&quot;GETDATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-309"><a href="#TSQL.Parser-309"><span class="linenos">309</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">:</span> <span class="n">_parse_hashbytes</span><span class="p">,</span>
+</span><span id="TSQL.Parser-310"><a href="#TSQL.Parser-310"><span class="linenos">310</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-311"><a href="#TSQL.Parser-311"><span class="linenos">311</span></a> <span class="s2">&quot;ISNULL&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-312"><a href="#TSQL.Parser-312"><span class="linenos">312</span></a> <span class="s2">&quot;JSON_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-313"><a href="#TSQL.Parser-313"><span class="linenos">313</span></a> <span class="s2">&quot;LEN&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-314"><a href="#TSQL.Parser-314"><span class="linenos">314</span></a> <span class="s2">&quot;REPLICATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-315"><a href="#TSQL.Parser-315"><span class="linenos">315</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="TSQL.Parser-316"><a href="#TSQL.Parser-316"><span class="linenos">316</span></a> <span class="s2">&quot;SYSDATETIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-317"><a href="#TSQL.Parser-317"><span class="linenos">317</span></a> <span class="s2">&quot;SUSER_NAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-318"><a href="#TSQL.Parser-318"><span class="linenos">318</span></a> <span class="s2">&quot;SUSER_SNAME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-319"><a href="#TSQL.Parser-319"><span class="linenos">319</span></a> <span class="s2">&quot;SYSTEM_USER&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="TSQL.Parser-320"><a href="#TSQL.Parser-320"><span class="linenos">320</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-321"><a href="#TSQL.Parser-321"><span class="linenos">321</span></a>
+</span><span id="TSQL.Parser-322"><a href="#TSQL.Parser-322"><span class="linenos">322</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-323"><a href="#TSQL.Parser-323"><span class="linenos">323</span></a> <span class="s2">&quot;LOOP&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-324"><a href="#TSQL.Parser-324"><span class="linenos">324</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-325"><a href="#TSQL.Parser-325"><span class="linenos">325</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-326"><a href="#TSQL.Parser-326"><span class="linenos">326</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-327"><a href="#TSQL.Parser-327"><span class="linenos">327</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-328"><a href="#TSQL.Parser-328"><span class="linenos">328</span></a>
+</span><span id="TSQL.Parser-329"><a href="#TSQL.Parser-329"><span class="linenos">329</span></a> <span class="n">VAR_LENGTH_DATATYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-330"><a href="#TSQL.Parser-330"><span class="linenos">330</span></a> <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><span id="TSQL.Parser-331"><a href="#TSQL.Parser-331"><span class="linenos">331</span></a> <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><span id="TSQL.Parser-332"><a href="#TSQL.Parser-332"><span class="linenos">332</span></a> <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><span id="TSQL.Parser-333"><a href="#TSQL.Parser-333"><span class="linenos">333</span></a> <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><span id="TSQL.Parser-334"><a href="#TSQL.Parser-334"><span class="linenos">334</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-335"><a href="#TSQL.Parser-335"><span class="linenos">335</span></a>
+</span><span id="TSQL.Parser-336"><a href="#TSQL.Parser-336"><span class="linenos">336</span></a> <span class="n">RETURNS_TABLE_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">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL.Parser-337"><a href="#TSQL.Parser-337"><span class="linenos">337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="TSQL.Parser-338"><a href="#TSQL.Parser-338"><span class="linenos">338</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">TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL.Parser-339"><a href="#TSQL.Parser-339"><span class="linenos">339</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-340"><a href="#TSQL.Parser-340"><span class="linenos">340</span></a>
+</span><span id="TSQL.Parser-341"><a href="#TSQL.Parser-341"><span class="linenos">341</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Parser-342"><a href="#TSQL.Parser-342"><span class="linenos">342</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">STATEMENT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="TSQL.Parser-343"><a href="#TSQL.Parser-343"><span class="linenos">343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">(),</span>
+</span><span id="TSQL.Parser-344"><a href="#TSQL.Parser-344"><span class="linenos">344</span></a> <span class="p">}</span>
+</span><span id="TSQL.Parser-345"><a href="#TSQL.Parser-345"><span class="linenos">345</span></a>
+</span><span id="TSQL.Parser-346"><a href="#TSQL.Parser-346"><span class="linenos">346</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="TSQL.Parser-347"><a href="#TSQL.Parser-347"><span class="linenos">347</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="TSQL.Parser-348"><a href="#TSQL.Parser-348"><span class="linenos">348</span></a>
+</span><span id="TSQL.Parser-349"><a href="#TSQL.Parser-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_parse_system_time</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="TSQL.Parser-350"><a href="#TSQL.Parser-350"><span class="linenos">350</span></a> <span class="k">if</span> <span class="ow">not</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_TIME&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-351"><a href="#TSQL.Parser-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-352"><a href="#TSQL.Parser-352"><span class="linenos">352</span></a>
+</span><span id="TSQL.Parser-353"><a href="#TSQL.Parser-353"><span class="linenos">353</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;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-354"><a href="#TSQL.Parser-354"><span class="linenos">354</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL.Parser-355"><a href="#TSQL.Parser-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;AS OF&quot;</span>
+</span><span id="TSQL.Parser-356"><a href="#TSQL.Parser-356"><span class="linenos">356</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-357"><a href="#TSQL.Parser-357"><span class="linenos">357</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="TSQL.Parser-358"><a href="#TSQL.Parser-358"><span class="linenos">358</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="TSQL.Parser-359"><a href="#TSQL.Parser-359"><span class="linenos">359</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="TSQL.Parser-360"><a href="#TSQL.Parser-360"><span class="linenos">360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="TSQL.Parser-361"><a href="#TSQL.Parser-361"><span class="linenos">361</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="TSQL.Parser-362"><a href="#TSQL.Parser-362"><span class="linenos">362</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL.Parser-363"><a href="#TSQL.Parser-363"><span class="linenos">363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</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">kind</span><span class="o">=</span><span class="n">kind</span>
+</span><span id="TSQL.Parser-364"><a href="#TSQL.Parser-364"><span class="linenos">364</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-365"><a href="#TSQL.Parser-365"><span class="linenos">365</span></a> <span class="k">elif</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;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="TSQL.Parser-366"><a href="#TSQL.Parser-366"><span class="linenos">366</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="TSQL.Parser-367"><a href="#TSQL.Parser-367"><span class="linenos">367</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="TSQL.Parser-368"><a href="#TSQL.Parser-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">,</span>
+</span><span id="TSQL.Parser-369"><a href="#TSQL.Parser-369"><span class="linenos">369</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="TSQL.Parser-370"><a href="#TSQL.Parser-370"><span class="linenos">370</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><span id="TSQL.Parser-371"><a href="#TSQL.Parser-371"><span class="linenos">371</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;CONTAINED IN&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Parser-372"><a href="#TSQL.Parser-372"><span class="linenos">372</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-373"><a href="#TSQL.Parser-373"><span class="linenos">373</span></a> <span class="k">elif</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">ALL</span><span class="p">):</span>
+</span><span id="TSQL.Parser-374"><a href="#TSQL.Parser-374"><span class="linenos">374</span></a> <span class="n">system_time</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">SystemTime</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Parser-375"><a href="#TSQL.Parser-375"><span class="linenos">375</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="TSQL.Parser-376"><a href="#TSQL.Parser-376"><span class="linenos">376</span></a> <span class="n">system_time</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-377"><a href="#TSQL.Parser-377"><span class="linenos">377</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;Unable to parse FOR SYSTEM_TIME clause&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Parser-378"><a href="#TSQL.Parser-378"><span class="linenos">378</span></a>
+</span><span id="TSQL.Parser-379"><a href="#TSQL.Parser-379"><span class="linenos">379</span></a> <span class="k">return</span> <span class="n">system_time</span>
+</span><span id="TSQL.Parser-380"><a href="#TSQL.Parser-380"><span class="linenos">380</span></a>
+</span><span id="TSQL.Parser-381"><a href="#TSQL.Parser-381"><span class="linenos">381</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="TSQL.Parser-382"><a href="#TSQL.Parser-382"><span class="linenos">382</span></a> <span class="n">table</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="TSQL.Parser-383"><a href="#TSQL.Parser-383"><span class="linenos">383</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;system_time&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_time</span><span class="p">())</span>
+</span><span id="TSQL.Parser-384"><a href="#TSQL.Parser-384"><span class="linenos">384</span></a> <span class="k">return</span> <span class="n">table</span>
+</span><span id="TSQL.Parser-385"><a href="#TSQL.Parser-385"><span class="linenos">385</span></a>
+</span><span id="TSQL.Parser-386"><a href="#TSQL.Parser-386"><span class="linenos">386</span></a> <span class="k">def</span> <span class="nf">_parse_returns</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="TSQL.Parser-387"><a href="#TSQL.Parser-387"><span class="linenos">387</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">RETURNS_TABLE_TOKENS</span><span class="p">)</span>
+</span><span id="TSQL.Parser-388"><a href="#TSQL.Parser-388"><span class="linenos">388</span></a> <span class="n">returns</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">()</span>
+</span><span id="TSQL.Parser-389"><a href="#TSQL.Parser-389"><span class="linenos">389</span></a> <span class="n">returns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="TSQL.Parser-390"><a href="#TSQL.Parser-390"><span class="linenos">390</span></a> <span class="k">return</span> <span class="n">returns</span>
+</span><span id="TSQL.Parser-391"><a href="#TSQL.Parser-391"><span class="linenos">391</span></a>
+</span><span id="TSQL.Parser-392"><a href="#TSQL.Parser-392"><span class="linenos">392</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</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="TSQL.Parser-393"><a href="#TSQL.Parser-393"><span class="linenos">393</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="TSQL.Parser-394"><a href="#TSQL.Parser-394"><span class="linenos">394</span></a> <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">COMMA</span><span class="p">)</span>
+</span><span id="TSQL.Parser-395"><a href="#TSQL.Parser-395"><span class="linenos">395</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="TSQL.Parser-396"><a href="#TSQL.Parser-396"><span class="linenos">396</span></a>
+</span><span id="TSQL.Parser-397"><a href="#TSQL.Parser-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="TSQL.Parser-398"><a href="#TSQL.Parser-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-399"><a href="#TSQL.Parser-399"><span class="linenos">399</span></a>
+</span><span id="TSQL.Parser-400"><a href="#TSQL.Parser-400"><span class="linenos">400</span></a> <span class="c1"># Retrieve length of datatype and override to default if not specified</span>
+</span><span id="TSQL.Parser-401"><a href="#TSQL.Parser-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL.Parser-402"><a href="#TSQL.Parser-402"><span class="linenos">402</span></a> <span class="n">to</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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</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">number</span><span class="p">(</span><span class="mi">30</span><span class="p">)],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-403"><a href="#TSQL.Parser-403"><span class="linenos">403</span></a>
+</span><span id="TSQL.Parser-404"><a href="#TSQL.Parser-404"><span class="linenos">404</span></a> <span class="c1"># Check whether a conversion with format is applicable</span>
+</span><span id="TSQL.Parser-405"><a href="#TSQL.Parser-405"><span class="linenos">405</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">COMMA</span><span class="p">):</span>
+</span><span id="TSQL.Parser-406"><a href="#TSQL.Parser-406"><span class="linenos">406</span></a> <span class="n">format_val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="TSQL.Parser-407"><a href="#TSQL.Parser-407"><span class="linenos">407</span></a> <span class="n">format_val_name</span> <span class="o">=</span> <span class="n">format_val</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="n">format_val</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Parser-408"><a href="#TSQL.Parser-408"><span class="linenos">408</span></a>
+</span><span id="TSQL.Parser-409"><a href="#TSQL.Parser-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">format_val_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">:</span>
+</span><span id="TSQL.Parser-410"><a href="#TSQL.Parser-410"><span class="linenos">410</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="TSQL.Parser-411"><a href="#TSQL.Parser-411"><span class="linenos">411</span></a> <span class="sa">f</span><span class="s2">&quot;CONVERT function at T-SQL does not support format style </span><span class="si">{</span><span class="n">format_val_name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Parser-412"><a href="#TSQL.Parser-412"><span class="linenos">412</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-413"><a href="#TSQL.Parser-413"><span class="linenos">413</span></a>
+</span><span id="TSQL.Parser-414"><a href="#TSQL.Parser-414"><span class="linenos">414</span></a> <span class="n">format_norm</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">TSQL</span><span class="o">.</span><span class="n">convert_format_mapping</span><span class="p">[</span><span class="n">format_val_name</span><span class="p">])</span>
+</span><span id="TSQL.Parser-415"><a href="#TSQL.Parser-415"><span class="linenos">415</span></a>
+</span><span id="TSQL.Parser-416"><a href="#TSQL.Parser-416"><span class="linenos">416</span></a> <span class="c1"># Check whether the convert entails a string to date format</span>
+</span><span id="TSQL.Parser-417"><a href="#TSQL.Parser-417"><span class="linenos">417</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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="TSQL.Parser-418"><a href="#TSQL.Parser-418"><span class="linenos">418</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">StrToDate</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-419"><a href="#TSQL.Parser-419"><span class="linenos">419</span></a> <span class="c1"># Check whether the convert entails a string to datetime format</span>
+</span><span id="TSQL.Parser-420"><a href="#TSQL.Parser-420"><span class="linenos">420</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL.Parser-421"><a href="#TSQL.Parser-421"><span class="linenos">421</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">StrToTime</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-422"><a href="#TSQL.Parser-422"><span class="linenos">422</span></a> <span class="c1"># Check whether the convert entails a date to string format</span>
+</span><span id="TSQL.Parser-423"><a href="#TSQL.Parser-423"><span class="linenos">423</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">VAR_LENGTH_DATATYPES</span><span class="p">:</span>
+</span><span id="TSQL.Parser-424"><a href="#TSQL.Parser-424"><span class="linenos">424</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="TSQL.Parser-425"><a href="#TSQL.Parser-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="TSQL.Parser-426"><a href="#TSQL.Parser-426"><span class="linenos">426</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="TSQL.Parser-427"><a href="#TSQL.Parser-427"><span class="linenos">427</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">),</span>
+</span><span id="TSQL.Parser-428"><a href="#TSQL.Parser-428"><span class="linenos">428</span></a> <span class="p">)</span>
+</span><span id="TSQL.Parser-429"><a href="#TSQL.Parser-429"><span class="linenos">429</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span 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><span id="TSQL.Parser-430"><a href="#TSQL.Parser-430"><span class="linenos">430</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">TimeToStr</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="nb">format</span><span class="o">=</span><span class="n">format_norm</span><span class="p">)</span>
+</span><span id="TSQL.Parser-431"><a href="#TSQL.Parser-431"><span class="linenos">431</span></a>
+</span><span id="TSQL.Parser-432"><a href="#TSQL.Parser-432"><span class="linenos">432</span></a> <span class="c1"># Entails a simple cast without any format requirement</span>
+</span><span id="TSQL.Parser-433"><a href="#TSQL.Parser-433"><span class="linenos">433</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="TSQL.Parser-434"><a href="#TSQL.Parser-434"><span class="linenos">434</span></a>
+</span><span id="TSQL.Parser-435"><a href="#TSQL.Parser-435"><span class="linenos">435</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="TSQL.Parser-436"><a href="#TSQL.Parser-436"><span class="linenos">436</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="TSQL.Parser-437"><a href="#TSQL.Parser-437"><span class="linenos">437</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="TSQL.Parser-438"><a href="#TSQL.Parser-438"><span class="linenos">438</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_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="TSQL.Parser-439"><a href="#TSQL.Parser-439"><span class="linenos">439</span></a>
+</span><span id="TSQL.Parser-440"><a href="#TSQL.Parser-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="TSQL.Parser-441"><a href="#TSQL.Parser-441"><span class="linenos">441</span></a> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span>
+</span><span id="TSQL.Parser-442"><a href="#TSQL.Parser-442"><span class="linenos">442</span></a> <span class="ow">or</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">UserDefinedFunction</span><span class="p">)</span>
+</span><span id="TSQL.Parser-443"><a href="#TSQL.Parser-443"><span class="linenos">443</span></a> <span class="ow">or</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">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="TSQL.Parser-444"><a href="#TSQL.Parser-444"><span class="linenos">444</span></a> <span class="p">):</span>
+</span><span id="TSQL.Parser-445"><a href="#TSQL.Parser-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="TSQL.Parser-446"><a href="#TSQL.Parser-446"><span class="linenos">446</span></a>
+</span><span id="TSQL.Parser-447"><a href="#TSQL.Parser-447"><span class="linenos">447</span></a> <span class="n">expressions</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_function_parameter</span><span class="p">)</span>
+</span><span id="TSQL.Parser-448"><a href="#TSQL.Parser-448"><span class="linenos">448</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">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -1228,59 +1301,69 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#TSQL.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator-421"><a href="#TSQL.Generator-421"><span class="linenos">421</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="TSQL.Generator-422"><a href="#TSQL.Generator-422"><span class="linenos">422</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="TSQL.Generator-423"><a href="#TSQL.Generator-423"><span class="linenos">423</span></a>
-</span><span id="TSQL.Generator-424"><a href="#TSQL.Generator-424"><span class="linenos">424</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-425"><a href="#TSQL.Generator-425"><span class="linenos">425</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="TSQL.Generator-426"><a href="#TSQL.Generator-426"><span class="linenos">426</span></a> <span class="n">exp</span><span 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="TSQL.Generator-427"><a href="#TSQL.Generator-427"><span class="linenos">427</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-428"><a href="#TSQL.Generator-428"><span class="linenos">428</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-429"><a href="#TSQL.Generator-429"><span class="linenos">429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
-</span><span id="TSQL.Generator-430"><a href="#TSQL.Generator-430"><span class="linenos">430</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-431"><a href="#TSQL.Generator-431"><span class="linenos">431</span></a>
-</span><span id="TSQL.Generator-432"><a href="#TSQL.Generator-432"><span class="linenos">432</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-433"><a href="#TSQL.Generator-433"><span class="linenos">433</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="TSQL.Generator-434"><a href="#TSQL.Generator-434"><span class="linenos">434</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="TSQL.Generator-435"><a href="#TSQL.Generator-435"><span class="linenos">435</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="TSQL.Generator-436"><a href="#TSQL.Generator-436"><span class="linenos">436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-437"><a href="#TSQL.Generator-437"><span class="linenos">437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-438"><a href="#TSQL.Generator-438"><span class="linenos">438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-439"><a href="#TSQL.Generator-439"><span class="linenos">439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-440"><a href="#TSQL.Generator-440"><span class="linenos">440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-441"><a href="#TSQL.Generator-441"><span class="linenos">441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-442"><a href="#TSQL.Generator-442"><span class="linenos">442</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="TSQL.Generator-443"><a href="#TSQL.Generator-443"><span class="linenos">443</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="TSQL.Generator-444"><a href="#TSQL.Generator-444"><span class="linenos">444</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-445"><a href="#TSQL.Generator-445"><span class="linenos">445</span></a>
-</span><span id="TSQL.Generator-446"><a href="#TSQL.Generator-446"><span class="linenos">446</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">ReturnsProperty</span><span class="p">)</span>
-</span><span id="TSQL.Generator-447"><a href="#TSQL.Generator-447"><span class="linenos">447</span></a>
-</span><span id="TSQL.Generator-448"><a href="#TSQL.Generator-448"><span class="linenos">448</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="TSQL.Generator-449"><a href="#TSQL.Generator-449"><span class="linenos">449</span></a>
-</span><span id="TSQL.Generator-450"><a href="#TSQL.Generator-450"><span class="linenos">450</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="TSQL.Generator-451"><a href="#TSQL.Generator-451"><span class="linenos">451</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="TSQL.Generator-450"><a href="#TSQL.Generator-450"><span class="linenos">450</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="TSQL.Generator-451"><a href="#TSQL.Generator-451"><span class="linenos">451</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="TSQL.Generator-452"><a href="#TSQL.Generator-452"><span class="linenos">452</span></a>
-</span><span id="TSQL.Generator-453"><a href="#TSQL.Generator-453"><span class="linenos">453</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-454"><a href="#TSQL.Generator-454"><span class="linenos">454</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL.Generator-455"><a href="#TSQL.Generator-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-456"><a href="#TSQL.Generator-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator-457"><a href="#TSQL.Generator-457"><span class="linenos">457</span></a>
-</span><span id="TSQL.Generator-458"><a href="#TSQL.Generator-458"><span class="linenos">458</span></a> <span class="n">start</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="TSQL.Generator-459"><a href="#TSQL.Generator-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-460"><a href="#TSQL.Generator-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-461"><a href="#TSQL.Generator-461"><span class="linenos">461</span></a>
-</span><span id="TSQL.Generator-462"><a href="#TSQL.Generator-462"><span class="linenos">462</span></a> <span class="n">end</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="TSQL.Generator-463"><a href="#TSQL.Generator-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-464"><a href="#TSQL.Generator-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-465"><a href="#TSQL.Generator-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-466"><a href="#TSQL.Generator-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-467"><a href="#TSQL.Generator-467"><span class="linenos">467</span></a>
-</span><span id="TSQL.Generator-468"><a href="#TSQL.Generator-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL.Generator-469"><a href="#TSQL.Generator-469"><span class="linenos">469</span></a>
-</span><span id="TSQL.Generator-470"><a href="#TSQL.Generator-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-471"><a href="#TSQL.Generator-471"><span class="linenos">471</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-472"><a href="#TSQL.Generator-472"><span class="linenos">472</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator-473"><a href="#TSQL.Generator-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
+</span><span id="TSQL.Generator-453"><a href="#TSQL.Generator-453"><span class="linenos">453</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-454"><a href="#TSQL.Generator-454"><span class="linenos">454</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="TSQL.Generator-455"><a href="#TSQL.Generator-455"><span class="linenos">455</span></a> <span class="n">exp</span><span 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="TSQL.Generator-456"><a href="#TSQL.Generator-456"><span class="linenos">456</span></a> <span class="n">exp</span><span 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;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-457"><a href="#TSQL.Generator-457"><span class="linenos">457</span></a> <span class="n">exp</span><span 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;DATETIME2&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-458"><a href="#TSQL.Generator-458"><span class="linenos">458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;SQL_VARIANT&quot;</span><span class="p">,</span>
+</span><span id="TSQL.Generator-459"><a href="#TSQL.Generator-459"><span class="linenos">459</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-460"><a href="#TSQL.Generator-460"><span class="linenos">460</span></a>
+</span><span id="TSQL.Generator-461"><a href="#TSQL.Generator-461"><span class="linenos">461</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-462"><a href="#TSQL.Generator-462"><span class="linenos">462</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="TSQL.Generator-463"><a href="#TSQL.Generator-463"><span class="linenos">463</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="TSQL.Generator-464"><a href="#TSQL.Generator-464"><span class="linenos">464</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="TSQL.Generator-465"><a href="#TSQL.Generator-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="TSQL.Generator-466"><a href="#TSQL.Generator-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
+</span><span id="TSQL.Generator-467"><a href="#TSQL.Generator-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="TSQL.Generator-468"><a href="#TSQL.Generator-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-469"><a href="#TSQL.Generator-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-470"><a href="#TSQL.Generator-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-471"><a href="#TSQL.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="TSQL.Generator-472"><a href="#TSQL.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</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 class="s2">&quot;HASHBYTES&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="s2">&quot;MD5&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><span id="TSQL.Generator-473"><a href="#TSQL.Generator-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL.Generator-474"><a href="#TSQL.Generator-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</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 class="s2">&quot;HASHBYTES&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="s2">&quot;SHA1&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><span id="TSQL.Generator-475"><a href="#TSQL.Generator-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</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="TSQL.Generator-476"><a href="#TSQL.Generator-476"><span class="linenos">476</span></a> <span class="s2">&quot;HASHBYTES&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="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</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;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="TSQL.Generator-477"><a href="#TSQL.Generator-477"><span class="linenos">477</span></a> <span class="p">),</span>
+</span><span id="TSQL.Generator-478"><a href="#TSQL.Generator-478"><span class="linenos">478</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-479"><a href="#TSQL.Generator-479"><span class="linenos">479</span></a>
+</span><span id="TSQL.Generator-480"><a href="#TSQL.Generator-480"><span class="linenos">480</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">ReturnsProperty</span><span class="p">)</span>
+</span><span id="TSQL.Generator-481"><a href="#TSQL.Generator-481"><span class="linenos">481</span></a>
+</span><span id="TSQL.Generator-482"><a href="#TSQL.Generator-482"><span class="linenos">482</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-483"><a href="#TSQL.Generator-483"><span class="linenos">483</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="TSQL.Generator-484"><a href="#TSQL.Generator-484"><span class="linenos">484</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="TSQL.Generator-485"><a href="#TSQL.Generator-485"><span class="linenos">485</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-486"><a href="#TSQL.Generator-486"><span class="linenos">486</span></a>
+</span><span id="TSQL.Generator-487"><a href="#TSQL.Generator-487"><span class="linenos">487</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL.Generator-488"><a href="#TSQL.Generator-488"><span class="linenos">488</span></a>
+</span><span id="TSQL.Generator-489"><a href="#TSQL.Generator-489"><span class="linenos">489</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="TSQL.Generator-490"><a href="#TSQL.Generator-490"><span class="linenos">490</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="TSQL.Generator-491"><a href="#TSQL.Generator-491"><span class="linenos">491</span></a>
+</span><span id="TSQL.Generator-492"><a href="#TSQL.Generator-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-493"><a href="#TSQL.Generator-493"><span class="linenos">493</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL.Generator-494"><a href="#TSQL.Generator-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-495"><a href="#TSQL.Generator-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL.Generator-496"><a href="#TSQL.Generator-496"><span class="linenos">496</span></a>
+</span><span id="TSQL.Generator-497"><a href="#TSQL.Generator-497"><span class="linenos">497</span></a> <span class="n">start</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="TSQL.Generator-498"><a href="#TSQL.Generator-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-499"><a href="#TSQL.Generator-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-500"><a href="#TSQL.Generator-500"><span class="linenos">500</span></a>
+</span><span id="TSQL.Generator-501"><a href="#TSQL.Generator-501"><span class="linenos">501</span></a> <span class="n">end</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="TSQL.Generator-502"><a href="#TSQL.Generator-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-503"><a href="#TSQL.Generator-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-504"><a href="#TSQL.Generator-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-505"><a href="#TSQL.Generator-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-506"><a href="#TSQL.Generator-506"><span class="linenos">506</span></a>
+</span><span id="TSQL.Generator-507"><a href="#TSQL.Generator-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL.Generator-508"><a href="#TSQL.Generator-508"><span class="linenos">508</span></a>
+</span><span id="TSQL.Generator-509"><a href="#TSQL.Generator-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-510"><a href="#TSQL.Generator-510"><span class="linenos">510</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-511"><a href="#TSQL.Generator-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-512"><a href="#TSQL.Generator-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
</span></pre></div>
@@ -1339,8 +1422,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.offset_sql-450"><a href="#TSQL.Generator.offset_sql-450"><span class="linenos">450</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="TSQL.Generator.offset_sql-451"><a href="#TSQL.Generator.offset_sql-451"><span class="linenos">451</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="TSQL.Generator.offset_sql-489"><a href="#TSQL.Generator.offset_sql-489"><span class="linenos">489</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="TSQL.Generator.offset_sql-490"><a href="#TSQL.Generator.offset_sql-490"><span class="linenos">490</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>
@@ -1358,22 +1441,22 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.systemtime_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.systemtime_sql-453"><a href="#TSQL.Generator.systemtime_sql-453"><span class="linenos">453</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-454"><a href="#TSQL.Generator.systemtime_sql-454"><span class="linenos">454</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL.Generator.systemtime_sql-455"><a href="#TSQL.Generator.systemtime_sql-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-456"><a href="#TSQL.Generator.systemtime_sql-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-457"><a href="#TSQL.Generator.systemtime_sql-457"><span class="linenos">457</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-458"><a href="#TSQL.Generator.systemtime_sql-458"><span class="linenos">458</span></a> <span class="n">start</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="TSQL.Generator.systemtime_sql-459"><a href="#TSQL.Generator.systemtime_sql-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-460"><a href="#TSQL.Generator.systemtime_sql-460"><span class="linenos">460</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-461"><a href="#TSQL.Generator.systemtime_sql-461"><span class="linenos">461</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-462"><a href="#TSQL.Generator.systemtime_sql-462"><span class="linenos">462</span></a> <span class="n">end</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="TSQL.Generator.systemtime_sql-463"><a href="#TSQL.Generator.systemtime_sql-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-464"><a href="#TSQL.Generator.systemtime_sql-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-465"><a href="#TSQL.Generator.systemtime_sql-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-466"><a href="#TSQL.Generator.systemtime_sql-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-467"><a href="#TSQL.Generator.systemtime_sql-467"><span class="linenos">467</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-468"><a href="#TSQL.Generator.systemtime_sql-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.systemtime_sql-492"><a href="#TSQL.Generator.systemtime_sql-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_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">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-493"><a href="#TSQL.Generator.systemtime_sql-493"><span class="linenos">493</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL.Generator.systemtime_sql-494"><a href="#TSQL.Generator.systemtime_sql-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-495"><a href="#TSQL.Generator.systemtime_sql-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-496"><a href="#TSQL.Generator.systemtime_sql-496"><span class="linenos">496</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-497"><a href="#TSQL.Generator.systemtime_sql-497"><span class="linenos">497</span></a> <span class="n">start</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="TSQL.Generator.systemtime_sql-498"><a href="#TSQL.Generator.systemtime_sql-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-499"><a href="#TSQL.Generator.systemtime_sql-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-500"><a href="#TSQL.Generator.systemtime_sql-500"><span class="linenos">500</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-501"><a href="#TSQL.Generator.systemtime_sql-501"><span class="linenos">501</span></a> <span class="n">end</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="TSQL.Generator.systemtime_sql-502"><a href="#TSQL.Generator.systemtime_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-503"><a href="#TSQL.Generator.systemtime_sql-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-504"><a href="#TSQL.Generator.systemtime_sql-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-505"><a href="#TSQL.Generator.systemtime_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-506"><a href="#TSQL.Generator.systemtime_sql-506"><span class="linenos">506</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-507"><a href="#TSQL.Generator.systemtime_sql-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1391,10 +1474,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.returnsproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returnsproperty_sql-470"><a href="#TSQL.Generator.returnsproperty_sql-470"><span class="linenos">470</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-471"><a href="#TSQL.Generator.returnsproperty_sql-471"><span class="linenos">471</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-472"><a href="#TSQL.Generator.returnsproperty_sql-472"><span class="linenos">472</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-473"><a href="#TSQL.Generator.returnsproperty_sql-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returnsproperty_sql-509"><a href="#TSQL.Generator.returnsproperty_sql-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-510"><a href="#TSQL.Generator.returnsproperty_sql-510"><span class="linenos">510</span></a> <span class="n">table</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;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-511"><a href="#TSQL.Generator.returnsproperty_sql-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-512"><a href="#TSQL.Generator.returnsproperty_sql-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</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">&quot;</span>
</span></pre></div>
@@ -1438,6 +1521,7 @@ Default: True</li>
<dd id="TSQL.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
<dd id="TSQL.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
<dd id="TSQL.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
+ <dd id="TSQL.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
<dd id="TSQL.Generator.datatype_sql" class="function"><a href="../generator.html#Generator.datatype_sql">datatype_sql</a></dd>
<dd id="TSQL.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
<dd id="TSQL.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
@@ -1449,6 +1533,7 @@ Default: True</li>
<dd id="TSQL.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
<dd id="TSQL.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
<dd id="TSQL.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
+ <dd id="TSQL.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
<dd id="TSQL.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
<dd id="TSQL.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
<dd id="TSQL.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
@@ -1474,6 +1559,7 @@ Default: True</li>
<dd id="TSQL.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
<dd id="TSQL.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
<dd id="TSQL.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
+ <dd id="TSQL.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
<dd id="TSQL.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
<dd id="TSQL.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
<dd id="TSQL.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>